You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

43 lines
1.5 KiB

import { HIVETALK_BASE_URL } from '@/constants'
export interface HiveTalkJoinParams {
room: string
name: string
roomPassword?: string
audio?: boolean
video?: boolean
screen?: boolean
notify?: boolean
hide?: boolean
token?: string
}
/**
* Build a HiveTalk direct-join URL. See https://github.com/HiveTalk/hivetalksfu#direct-join
*/
export function buildHiveTalkJoinUrl(params: HiveTalkJoinParams): string {
const url = new URL('/join', HIVETALK_BASE_URL)
url.searchParams.set('room', params.room)
url.searchParams.set('name', params.name)
url.searchParams.set('roomPassword', params.roomPassword ?? '0')
url.searchParams.set('audio', params.audio !== false ? '1' : '0')
url.searchParams.set('video', params.video !== false ? '1' : '0')
url.searchParams.set('screen', params.screen ? '1' : '0')
url.searchParams.set('notify', params.notify !== false ? '1' : '0')
if (params.hide !== undefined) url.searchParams.set('hide', params.hide ? '1' : '0')
if (params.token) url.searchParams.set('token', params.token)
return url.toString()
}
/** Deterministic room id for a 1:1 call between two pubkeys (same room from either side). */
export function roomIdForPubkeys(pubkeyA: string, pubkeyB: string): string {
const [a, b] = [pubkeyA, pubkeyB].sort()
const shortA = a.slice(0, 8)
const shortB = b.slice(0, 8)
return `jumble-${shortA}-${shortB}`
}
/** Room id for a scheduled call (NIP-52 calendar event); one room per event. */
export function roomIdForScheduledCall(dTag: string): string {
return `jumble-cal-${dTag}`
}