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
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}` |
|
}
|
|
|