feat(streams): add on-demand live request accept end and playback token APIs
This commit is contained in:
31
Backend/utils/stream-token.ts
Normal file
31
Backend/utils/stream-token.ts
Normal file
@@ -0,0 +1,31 @@
|
||||
import { createHmac } from 'crypto';
|
||||
|
||||
type StreamPlaybackPayload = {
|
||||
sessionId: string;
|
||||
viewerDeviceId: string;
|
||||
userId: string;
|
||||
exp: number;
|
||||
};
|
||||
|
||||
const secret = process.env.BETTER_AUTH_SECRET;
|
||||
|
||||
if (!secret) {
|
||||
throw new Error('BETTER_AUTH_SECRET is required for stream playback token signing');
|
||||
}
|
||||
|
||||
const sign = (data: string): string => createHmac('sha256', secret).update(data).digest('base64url');
|
||||
|
||||
export const createStreamPlaybackToken = (
|
||||
payload: Omit<StreamPlaybackPayload, 'exp'>,
|
||||
ttlSeconds = 60 * 15,
|
||||
): string => {
|
||||
const body: StreamPlaybackPayload = {
|
||||
...payload,
|
||||
exp: Math.floor(Date.now() / 1000) + ttlSeconds,
|
||||
};
|
||||
|
||||
const encodedPayload = Buffer.from(JSON.stringify(body), 'utf8').toString('base64url');
|
||||
const signature = sign(encodedPayload);
|
||||
|
||||
return `${encodedPayload}.${signature}`;
|
||||
};
|
||||
Reference in New Issue
Block a user