@agatx/serenada-core 0.6.10

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (156) hide show
  1. package/dist/ConsoleLogger.d.ts +6 -0
  2. package/dist/ConsoleLogger.d.ts.map +1 -0
  3. package/dist/ConsoleLogger.js +21 -0
  4. package/dist/ConsoleLogger.js.map +1 -0
  5. package/dist/RoomWatcher.d.ts +34 -0
  6. package/dist/RoomWatcher.d.ts.map +1 -0
  7. package/dist/RoomWatcher.js +103 -0
  8. package/dist/RoomWatcher.js.map +1 -0
  9. package/dist/SerenadaCore.d.ts +47 -0
  10. package/dist/SerenadaCore.d.ts.map +1 -0
  11. package/dist/SerenadaCore.js +141 -0
  12. package/dist/SerenadaCore.js.map +1 -0
  13. package/dist/SerenadaDiagnostics.d.ts +49 -0
  14. package/dist/SerenadaDiagnostics.d.ts.map +1 -0
  15. package/dist/SerenadaDiagnostics.js +421 -0
  16. package/dist/SerenadaDiagnostics.js.map +1 -0
  17. package/dist/SerenadaServerProvider.d.ts +48 -0
  18. package/dist/SerenadaServerProvider.d.ts.map +1 -0
  19. package/dist/SerenadaServerProvider.js +296 -0
  20. package/dist/SerenadaServerProvider.js.map +1 -0
  21. package/dist/SerenadaSession.d.ts +180 -0
  22. package/dist/SerenadaSession.d.ts.map +1 -0
  23. package/dist/SerenadaSession.js +1082 -0
  24. package/dist/SerenadaSession.js.map +1 -0
  25. package/dist/SignalingProvider.d.ts +132 -0
  26. package/dist/SignalingProvider.d.ts.map +1 -0
  27. package/dist/SignalingProvider.js +50 -0
  28. package/dist/SignalingProvider.js.map +1 -0
  29. package/dist/api/roomApi.d.ts +2 -0
  30. package/dist/api/roomApi.d.ts.map +1 -0
  31. package/dist/api/roomApi.js +14 -0
  32. package/dist/api/roomApi.js.map +1 -0
  33. package/dist/cameraModes.d.ts +13 -0
  34. package/dist/cameraModes.d.ts.map +1 -0
  35. package/dist/cameraModes.js +35 -0
  36. package/dist/cameraModes.js.map +1 -0
  37. package/dist/configValidation.d.ts +10 -0
  38. package/dist/configValidation.d.ts.map +1 -0
  39. package/dist/configValidation.js +24 -0
  40. package/dist/configValidation.js.map +1 -0
  41. package/dist/constants.d.ts +33 -0
  42. package/dist/constants.d.ts.map +1 -0
  43. package/dist/constants.js +65 -0
  44. package/dist/constants.js.map +1 -0
  45. package/dist/formatError.d.ts +3 -0
  46. package/dist/formatError.d.ts.map +1 -0
  47. package/dist/formatError.js +7 -0
  48. package/dist/formatError.js.map +1 -0
  49. package/dist/iceServers.d.ts +2 -0
  50. package/dist/iceServers.d.ts.map +1 -0
  51. package/dist/iceServers.js +21 -0
  52. package/dist/iceServers.js.map +1 -0
  53. package/dist/index.d.ts +55 -0
  54. package/dist/index.d.ts.map +1 -0
  55. package/dist/index.js +44 -0
  56. package/dist/index.js.map +1 -0
  57. package/dist/layout/computeLayout.d.ts +81 -0
  58. package/dist/layout/computeLayout.d.ts.map +1 -0
  59. package/dist/layout/computeLayout.js +380 -0
  60. package/dist/layout/computeLayout.js.map +1 -0
  61. package/dist/media/AudioLevelMonitor.d.ts +51 -0
  62. package/dist/media/AudioLevelMonitor.d.ts.map +1 -0
  63. package/dist/media/AudioLevelMonitor.js +179 -0
  64. package/dist/media/AudioLevelMonitor.js.map +1 -0
  65. package/dist/media/MediaEngine.d.ts +137 -0
  66. package/dist/media/MediaEngine.d.ts.map +1 -0
  67. package/dist/media/MediaEngine.js +1224 -0
  68. package/dist/media/MediaEngine.js.map +1 -0
  69. package/dist/media/callStats.d.ts +16 -0
  70. package/dist/media/callStats.d.ts.map +1 -0
  71. package/dist/media/callStats.js +214 -0
  72. package/dist/media/callStats.js.map +1 -0
  73. package/dist/media/localVideoRecovery.d.ts +16 -0
  74. package/dist/media/localVideoRecovery.d.ts.map +1 -0
  75. package/dist/media/localVideoRecovery.js +14 -0
  76. package/dist/media/localVideoRecovery.js.map +1 -0
  77. package/dist/recoveryStorage.d.ts +33 -0
  78. package/dist/recoveryStorage.d.ts.map +1 -0
  79. package/dist/recoveryStorage.js +88 -0
  80. package/dist/recoveryStorage.js.map +1 -0
  81. package/dist/serverUrls.d.ts +8 -0
  82. package/dist/serverUrls.d.ts.map +1 -0
  83. package/dist/serverUrls.js +65 -0
  84. package/dist/serverUrls.js.map +1 -0
  85. package/dist/signaling/SignalingEngine.d.ts +126 -0
  86. package/dist/signaling/SignalingEngine.d.ts.map +1 -0
  87. package/dist/signaling/SignalingEngine.js +720 -0
  88. package/dist/signaling/SignalingEngine.js.map +1 -0
  89. package/dist/signaling/payloads.d.ts +76 -0
  90. package/dist/signaling/payloads.d.ts.map +1 -0
  91. package/dist/signaling/payloads.js +160 -0
  92. package/dist/signaling/payloads.js.map +1 -0
  93. package/dist/signaling/roomStatuses.d.ts +9 -0
  94. package/dist/signaling/roomStatuses.d.ts.map +1 -0
  95. package/dist/signaling/roomStatuses.js +71 -0
  96. package/dist/signaling/roomStatuses.js.map +1 -0
  97. package/dist/signaling/transportConfig.d.ts +3 -0
  98. package/dist/signaling/transportConfig.d.ts.map +1 -0
  99. package/dist/signaling/transportConfig.js +27 -0
  100. package/dist/signaling/transportConfig.js.map +1 -0
  101. package/dist/signaling/transports/index.d.ts +13 -0
  102. package/dist/signaling/transports/index.d.ts.map +1 -0
  103. package/dist/signaling/transports/index.js +11 -0
  104. package/dist/signaling/transports/index.js.map +1 -0
  105. package/dist/signaling/transports/sse.d.ts +26 -0
  106. package/dist/signaling/transports/sse.d.ts.map +1 -0
  107. package/dist/signaling/transports/sse.js +131 -0
  108. package/dist/signaling/transports/sse.js.map +1 -0
  109. package/dist/signaling/transports/types.d.ts +17 -0
  110. package/dist/signaling/transports/types.d.ts.map +1 -0
  111. package/dist/signaling/transports/types.js +2 -0
  112. package/dist/signaling/transports/types.js.map +1 -0
  113. package/dist/signaling/transports/ws.d.ts +21 -0
  114. package/dist/signaling/transports/ws.d.ts.map +1 -0
  115. package/dist/signaling/transports/ws.js +93 -0
  116. package/dist/signaling/transports/ws.js.map +1 -0
  117. package/dist/signaling/types.d.ts +53 -0
  118. package/dist/signaling/types.d.ts.map +1 -0
  119. package/dist/signaling/types.js +2 -0
  120. package/dist/signaling/types.js.map +1 -0
  121. package/dist/types.d.ts +279 -0
  122. package/dist/types.d.ts.map +1 -0
  123. package/dist/types.js +3 -0
  124. package/dist/types.js.map +1 -0
  125. package/package.json +43 -0
  126. package/src/ConsoleLogger.ts +14 -0
  127. package/src/RoomWatcher.ts +127 -0
  128. package/src/SerenadaCore.ts +163 -0
  129. package/src/SerenadaDiagnostics.ts +485 -0
  130. package/src/SerenadaServerProvider.ts +362 -0
  131. package/src/SerenadaSession.ts +1258 -0
  132. package/src/SignalingProvider.ts +207 -0
  133. package/src/api/roomApi.ts +16 -0
  134. package/src/cameraModes.ts +34 -0
  135. package/src/configValidation.ts +35 -0
  136. package/src/constants.ts +77 -0
  137. package/src/formatError.ts +5 -0
  138. package/src/iceServers.ts +20 -0
  139. package/src/index.ts +155 -0
  140. package/src/layout/computeLayout.ts +639 -0
  141. package/src/media/AudioLevelMonitor.ts +190 -0
  142. package/src/media/MediaEngine.ts +1183 -0
  143. package/src/media/callStats.ts +260 -0
  144. package/src/media/localVideoRecovery.ts +39 -0
  145. package/src/recoveryStorage.ts +101 -0
  146. package/src/serverUrls.ts +69 -0
  147. package/src/signaling/SignalingEngine.ts +762 -0
  148. package/src/signaling/payloads.ts +215 -0
  149. package/src/signaling/roomStatuses.ts +89 -0
  150. package/src/signaling/transportConfig.ts +30 -0
  151. package/src/signaling/transports/index.ts +26 -0
  152. package/src/signaling/transports/sse.ts +146 -0
  153. package/src/signaling/transports/types.ts +19 -0
  154. package/src/signaling/transports/ws.ts +108 -0
  155. package/src/signaling/types.ts +68 -0
  156. package/src/types.ts +299 -0
@@ -0,0 +1,6 @@
1
+ import type { SerenadaLogLevel, SerenadaLogger } from './types.js';
2
+ /** Default logger that writes to the browser console. Pass to {@link SerenadaConfig.logger} for debug output. */
3
+ export declare class ConsoleSerenadaLogger implements SerenadaLogger {
4
+ log(level: SerenadaLogLevel, tag: string, message: string): void;
5
+ }
6
+ //# sourceMappingURL=ConsoleLogger.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ConsoleLogger.d.ts","sourceRoot":"","sources":["../src/ConsoleLogger.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAEnE,iHAAiH;AACjH,qBAAa,qBAAsB,YAAW,cAAc;IACxD,GAAG,CAAC,KAAK,EAAE,gBAAgB,EAAE,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI;CASnE"}
@@ -0,0 +1,21 @@
1
+ /** Default logger that writes to the browser console. Pass to {@link SerenadaConfig.logger} for debug output. */
2
+ export class ConsoleSerenadaLogger {
3
+ log(level, tag, message) {
4
+ const formatted = `[${tag}] ${message}`;
5
+ switch (level) {
6
+ case 'debug':
7
+ console.debug(formatted);
8
+ break;
9
+ case 'info':
10
+ console.info(formatted);
11
+ break;
12
+ case 'warning':
13
+ console.warn(formatted);
14
+ break;
15
+ case 'error':
16
+ console.error(formatted);
17
+ break;
18
+ }
19
+ }
20
+ }
21
+ //# sourceMappingURL=ConsoleLogger.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ConsoleLogger.js","sourceRoot":"","sources":["../src/ConsoleLogger.ts"],"names":[],"mappings":"AAEA,iHAAiH;AACjH,MAAM,OAAO,qBAAqB;IAC9B,GAAG,CAAC,KAAuB,EAAE,GAAW,EAAE,OAAe;QACrD,MAAM,SAAS,GAAG,IAAI,GAAG,KAAK,OAAO,EAAE,CAAC;QACxC,QAAQ,KAAK,EAAE,CAAC;YACZ,KAAK,OAAO;gBAAE,OAAO,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;gBAAC,MAAM;YAC9C,KAAK,MAAM;gBAAE,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;gBAAC,MAAM;YAC5C,KAAK,SAAS;gBAAE,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;gBAAC,MAAM;YAC/C,KAAK,OAAO;gBAAE,OAAO,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;gBAAC,MAAM;QAClD,CAAC;IACL,CAAC;CACJ"}
@@ -0,0 +1,34 @@
1
+ import type { RoomWatcherState, SerenadaConfig } from './types.js';
2
+ import { SignalingEngine, type SignalingEngineConfig } from './signaling/SignalingEngine.js';
3
+ import type { RoomStatuses } from './signaling/roomStatuses.js';
4
+ type RoomWatcherListener = (state: RoomWatcherState) => void;
5
+ interface RoomWatcherDependencies {
6
+ createSignalingEngine?: (config: SignalingEngineConfig) => SignalingEngine;
7
+ }
8
+ /**
9
+ * Monitors room occupancy via the signaling server.
10
+ * Use to show room status (e.g. "1 person waiting") before joining a call.
11
+ */
12
+ export declare class RoomWatcher {
13
+ private readonly signaling;
14
+ private readonly unsubscribeStateChange;
15
+ private listeners;
16
+ private watchedRoomIds;
17
+ private hasConnected;
18
+ private stopped;
19
+ private wasConnected;
20
+ constructor(config: SerenadaConfig, dependencies?: RoomWatcherDependencies);
21
+ get isConnected(): boolean;
22
+ get activeTransport(): import("./index.js").TransportKind | null;
23
+ get currentStatuses(): RoomStatuses;
24
+ /** Subscribe to room status updates. Returns an unsubscribe function. */
25
+ subscribe(listener: RoomWatcherListener): () => void;
26
+ /** Start watching the given room IDs for occupancy changes. Replaces any previous watch list. */
27
+ watchRooms(roomIds: string[]): void;
28
+ /** Stop watching all rooms and release resources. */
29
+ stop(): void;
30
+ private notify;
31
+ private snapshot;
32
+ }
33
+ export {};
34
+ //# sourceMappingURL=RoomWatcher.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RoomWatcher.d.ts","sourceRoot":"","sources":["../src/RoomWatcher.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAEnE,OAAO,EAAE,eAAe,EAAE,KAAK,qBAAqB,EAAE,MAAM,gCAAgC,CAAC;AAC7F,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAGhE,KAAK,mBAAmB,GAAG,CAAC,KAAK,EAAE,gBAAgB,KAAK,IAAI,CAAC;AAE7D,UAAU,uBAAuB;IAC7B,qBAAqB,CAAC,EAAE,CAAC,MAAM,EAAE,qBAAqB,KAAK,eAAe,CAAC;CAC9E;AAED;;;GAGG;AACH,qBAAa,WAAW;IACpB,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAkB;IAC5C,OAAO,CAAC,QAAQ,CAAC,sBAAsB,CAAa;IACpD,OAAO,CAAC,SAAS,CAAkC;IACnD,OAAO,CAAC,cAAc,CAAgB;IACtC,OAAO,CAAC,YAAY,CAAS;IAC7B,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,YAAY,CAAS;gBAEjB,MAAM,EAAE,cAAc,EAAE,YAAY,GAAE,uBAA4B;IAkB9E,IAAI,WAAW,IAAI,OAAO,CAEzB;IAED,IAAI,eAAe,8CAElB;IAED,IAAI,eAAe,IAAI,YAAY,CAElC;IAED,yEAAyE;IACzE,SAAS,CAAC,QAAQ,EAAE,mBAAmB,GAAG,MAAM,IAAI;IAQpD,iGAAiG;IACjG,UAAU,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI;IAwBnC,qDAAqD;IACrD,IAAI,IAAI,IAAI;IAWZ,OAAO,CAAC,MAAM;IAOd,OAAO,CAAC,QAAQ;CAOnB"}
@@ -0,0 +1,103 @@
1
+ import { resolveServerUrls } from './serverUrls.js';
2
+ import { SignalingEngine } from './signaling/SignalingEngine.js';
3
+ import { requireServerHost } from './configValidation.js';
4
+ /**
5
+ * Monitors room occupancy via the signaling server.
6
+ * Use to show room status (e.g. "1 person waiting") before joining a call.
7
+ */
8
+ export class RoomWatcher {
9
+ signaling;
10
+ unsubscribeStateChange;
11
+ listeners = new Set();
12
+ watchedRoomIds = [];
13
+ hasConnected = false;
14
+ stopped = false;
15
+ wasConnected = false;
16
+ constructor(config, dependencies = {}) {
17
+ const serverHost = requireServerHost(config);
18
+ const urls = resolveServerUrls(serverHost);
19
+ this.signaling = (dependencies.createSignalingEngine ?? ((engineConfig) => new SignalingEngine(engineConfig)))({
20
+ wsUrl: urls.wsUrl,
21
+ httpBaseUrl: urls.httpBaseUrl,
22
+ transports: config.transports,
23
+ });
24
+ this.unsubscribeStateChange = this.signaling.onStateChange(() => {
25
+ const nowConnected = this.signaling.isConnected;
26
+ if (nowConnected && !this.wasConnected && this.watchedRoomIds.length > 0) {
27
+ this.signaling.watchRooms(this.watchedRoomIds);
28
+ }
29
+ this.wasConnected = nowConnected;
30
+ this.notify();
31
+ });
32
+ }
33
+ get isConnected() {
34
+ return !this.stopped && this.signaling.isConnected;
35
+ }
36
+ get activeTransport() {
37
+ return this.stopped ? null : this.signaling.activeTransport;
38
+ }
39
+ get currentStatuses() {
40
+ return filterRoomStatuses(this.signaling.roomStatuses, this.watchedRoomIds);
41
+ }
42
+ /** Subscribe to room status updates. Returns an unsubscribe function. */
43
+ subscribe(listener) {
44
+ this.listeners.add(listener);
45
+ listener(this.snapshot());
46
+ return () => {
47
+ this.listeners.delete(listener);
48
+ };
49
+ }
50
+ /** Start watching the given room IDs for occupancy changes. Replaces any previous watch list. */
51
+ watchRooms(roomIds) {
52
+ if (this.stopped)
53
+ return;
54
+ this.watchedRoomIds = Array.from(new Set(roomIds.filter((roomId) => typeof roomId === 'string' && roomId.length > 0)));
55
+ this.notify();
56
+ if (this.watchedRoomIds.length === 0) {
57
+ if (this.hasConnected && this.signaling.isConnected) {
58
+ this.signaling.watchRooms([]);
59
+ }
60
+ return;
61
+ }
62
+ if (!this.hasConnected) {
63
+ this.hasConnected = true;
64
+ this.signaling.connect();
65
+ return;
66
+ }
67
+ if (this.signaling.isConnected) {
68
+ this.signaling.watchRooms(this.watchedRoomIds);
69
+ }
70
+ }
71
+ /** Stop watching all rooms and release resources. */
72
+ stop() {
73
+ if (this.stopped)
74
+ return;
75
+ this.stopped = true;
76
+ this.watchedRoomIds = [];
77
+ this.unsubscribeStateChange();
78
+ this.signaling.destroy();
79
+ this.notify();
80
+ this.listeners.clear();
81
+ }
82
+ notify() {
83
+ const state = this.snapshot();
84
+ for (const listener of this.listeners) {
85
+ listener(state);
86
+ }
87
+ }
88
+ snapshot() {
89
+ return {
90
+ isConnected: this.isConnected,
91
+ activeTransport: this.activeTransport,
92
+ roomStatuses: this.currentStatuses,
93
+ };
94
+ }
95
+ }
96
+ function filterRoomStatuses(roomStatuses, watchedRoomIds) {
97
+ if (watchedRoomIds.length === 0) {
98
+ return {};
99
+ }
100
+ const watched = new Set(watchedRoomIds);
101
+ return Object.fromEntries(Object.entries(roomStatuses).filter(([roomId]) => watched.has(roomId)));
102
+ }
103
+ //# sourceMappingURL=RoomWatcher.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RoomWatcher.js","sourceRoot":"","sources":["../src/RoomWatcher.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,47 @@
1
+ import type { SerenadaConfig, CreateRoomResult, SerenadaSessionHandle } from './types.js';
2
+ import { type RecoveryRecord } from './recoveryStorage.js';
3
+ /**
4
+ * Main entry point for the Serenada SDK.
5
+ * Create an instance with a {@link SerenadaConfig}, then use {@link join} or
6
+ * {@link createRoom} to start a call.
7
+ */
8
+ export declare class SerenadaCore {
9
+ private readonly config;
10
+ private readonly resolvedConfig;
11
+ constructor(config: SerenadaConfig);
12
+ /** Check if the current browser supports WebRTC calling. */
13
+ static isSupported(): boolean;
14
+ /**
15
+ * Returns a recoverable session if the previous tab/page session ended
16
+ * abruptly (reload, OS-level crash) while a call was active and the
17
+ * persisted reconnect token is still within its TTL. Host apps should
18
+ * call this on launch and surface a "Rejoin call?" prompt — calling
19
+ * {@link join} with the returned `roomId` reattaches under the same CID.
20
+ *
21
+ * Returns `null` when there is nothing to recover.
22
+ */
23
+ static getRecoverableSession(): RecoveryRecord | null;
24
+ /**
25
+ * Drops any persisted recovery record. Host apps call this when the
26
+ * user explicitly declines to rejoin, so subsequent launches do not
27
+ * keep prompting for the same dead session.
28
+ */
29
+ static discardRecoverableSession(): void;
30
+ /** Join an existing call by URL. Returns a session handle. */
31
+ join(url: string, options?: {
32
+ displayName?: string;
33
+ peerId?: string;
34
+ }): SerenadaSessionHandle;
35
+ /** Join an existing call by room ID. Returns a session handle. */
36
+ join(options: {
37
+ roomId: string;
38
+ displayName?: string;
39
+ peerId?: string;
40
+ }): SerenadaSessionHandle;
41
+ /** Create a new room. Returns the room URL and ID. Call {@link join} to start the call. */
42
+ createRoom(): Promise<CreateRoomResult>;
43
+ private createUnsupportedSession;
44
+ private createSignalingProvider;
45
+ private parseRoomIdFromUrl;
46
+ }
47
+ //# sourceMappingURL=SerenadaCore.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SerenadaCore.d.ts","sourceRoot":"","sources":["../src/SerenadaCore.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAa,gBAAgB,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAC;AAQrG,OAAO,EAGH,KAAK,cAAc,EACtB,MAAM,sBAAsB,CAAC;AAE9B;;;;GAIG;AACH,qBAAa,YAAY;IACrB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAiB;IACxC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAyB;gBAE5C,MAAM,EAAE,cAAc;IAKlC,4DAA4D;IAC5D,MAAM,CAAC,WAAW,IAAI,OAAO;IAI7B;;;;;;;;OAQG;IACH,MAAM,CAAC,qBAAqB,IAAI,cAAc,GAAG,IAAI;IAIrD;;;;OAIG;IACH,MAAM,CAAC,yBAAyB,IAAI,IAAI;IAIxC,8DAA8D;IAC9D,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE;QAAE,WAAW,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,qBAAqB;IAC7F,kEAAkE;IAClE,IAAI,CAAC,OAAO,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,WAAW,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,qBAAqB;IAyB/F,2FAA2F;IACrF,UAAU,IAAI,OAAO,CAAC,gBAAgB,CAAC;IAO7C,OAAO,CAAC,wBAAwB;IA8ChC,OAAO,CAAC,uBAAuB;IAW/B,OAAO,CAAC,kBAAkB;CAc7B"}
@@ -0,0 +1,141 @@
1
+ import { SerenadaSession } from './SerenadaSession.js';
2
+ import { createRoomId } from './api/roomApi.js';
3
+ import { buildRoomUrl } from './serverUrls.js';
4
+ import { requireServerHost, resolveSerenadaConfig } from './configValidation.js';
5
+ import { SerenadaServerProvider } from './SerenadaServerProvider.js';
6
+ import { clearRecoveryRecord, loadRecoveryRecord, } from './recoveryStorage.js';
7
+ /**
8
+ * Main entry point for the Serenada SDK.
9
+ * Create an instance with a {@link SerenadaConfig}, then use {@link join} or
10
+ * {@link createRoom} to start a call.
11
+ */
12
+ export class SerenadaCore {
13
+ config;
14
+ resolvedConfig;
15
+ constructor(config) {
16
+ this.config = config;
17
+ this.resolvedConfig = resolveSerenadaConfig(config);
18
+ }
19
+ /** Check if the current browser supports WebRTC calling. */
20
+ static isSupported() {
21
+ return typeof RTCPeerConnection !== 'undefined';
22
+ }
23
+ /**
24
+ * Returns a recoverable session if the previous tab/page session ended
25
+ * abruptly (reload, OS-level crash) while a call was active and the
26
+ * persisted reconnect token is still within its TTL. Host apps should
27
+ * call this on launch and surface a "Rejoin call?" prompt — calling
28
+ * {@link join} with the returned `roomId` reattaches under the same CID.
29
+ *
30
+ * Returns `null` when there is nothing to recover.
31
+ */
32
+ static getRecoverableSession() {
33
+ return loadRecoveryRecord();
34
+ }
35
+ /**
36
+ * Drops any persisted recovery record. Host apps call this when the
37
+ * user explicitly declines to rejoin, so subsequent launches do not
38
+ * keep prompting for the same dead session.
39
+ */
40
+ static discardRecoverableSession() {
41
+ clearRecoveryRecord();
42
+ }
43
+ join(urlOrOptions, extraOptions) {
44
+ if (!SerenadaCore.isSupported()) {
45
+ return this.createUnsupportedSession();
46
+ }
47
+ const signalingProvider = this.createSignalingProvider();
48
+ if (typeof urlOrOptions === 'string') {
49
+ const roomId = this.parseRoomIdFromUrl(urlOrOptions);
50
+ return new SerenadaSession(this.config, roomId, urlOrOptions, signalingProvider, {
51
+ displayName: extraOptions?.displayName,
52
+ peerId: extraOptions?.peerId,
53
+ });
54
+ }
55
+ const roomUrl = this.resolvedConfig.serverHost
56
+ ? buildRoomUrl(this.resolvedConfig.serverHost, urlOrOptions.roomId)
57
+ : null;
58
+ return new SerenadaSession(this.config, urlOrOptions.roomId, roomUrl, signalingProvider, {
59
+ displayName: urlOrOptions.displayName,
60
+ peerId: urlOrOptions.peerId,
61
+ });
62
+ }
63
+ /** Create a new room. Returns the room URL and ID. Call {@link join} to start the call. */
64
+ async createRoom() {
65
+ const serverHost = requireServerHost(this.config);
66
+ const roomId = await createRoomId(serverHost);
67
+ const url = buildRoomUrl(serverHost, roomId);
68
+ return { url, roomId };
69
+ }
70
+ createUnsupportedSession() {
71
+ const errorState = {
72
+ phase: 'error',
73
+ roomId: null,
74
+ roomUrl: null,
75
+ localParticipant: null,
76
+ remoteParticipants: [],
77
+ connectionStatus: 'connected',
78
+ signalingState: { kind: 'failed', reason: 'webrtcUnavailable' },
79
+ activeTransport: null,
80
+ requiredPermissions: null,
81
+ error: { code: 'webrtcUnavailable', message: 'WebRTC is not supported in this browser' },
82
+ };
83
+ const noop = () => { };
84
+ const noopAsync = async () => { };
85
+ const emptyMap = new Map();
86
+ return {
87
+ get state() { return errorState; },
88
+ subscribe(_cb) { return noop; },
89
+ onPeerMessage(_cb) { return noop; },
90
+ leave: noop,
91
+ end: noop,
92
+ toggleAudio: noop,
93
+ toggleVideo: noop,
94
+ flipCamera: noopAsync,
95
+ setAudioEnabled: noop,
96
+ setVideoEnabled: noop,
97
+ setCameraMode: noop,
98
+ startScreenShare: noopAsync,
99
+ stopScreenShare: noopAsync,
100
+ resumeJoin: noopAsync,
101
+ cancelJoin: noop,
102
+ destroy: noop,
103
+ get localStream() { return null; },
104
+ get remoteStreams() { return emptyMap; },
105
+ get callStats() { return null; },
106
+ get hasMultipleCameras() { return false; },
107
+ get canScreenShare() { return false; },
108
+ get isSignalingConnected() { return false; },
109
+ get iceConnectionState() { return 'closed'; },
110
+ get peerConnectionState() { return 'closed'; },
111
+ get rtcSignalingState() { return 'closed'; },
112
+ onPermissionsRequired: null,
113
+ };
114
+ }
115
+ createSignalingProvider() {
116
+ if (this.resolvedConfig.serverHost) {
117
+ return new SerenadaServerProvider({
118
+ serverHost: this.resolvedConfig.serverHost,
119
+ transports: this.config.transports,
120
+ logger: this.config.logger,
121
+ });
122
+ }
123
+ return this.resolvedConfig.signalingProvider;
124
+ }
125
+ parseRoomIdFromUrl(url) {
126
+ try {
127
+ const parsed = new URL(url);
128
+ const parts = parsed.pathname.split('/');
129
+ const callIndex = parts.indexOf('call');
130
+ if (callIndex !== -1 && parts[callIndex + 1]) {
131
+ return parts[callIndex + 1];
132
+ }
133
+ // Fallback: last path segment
134
+ return parts[parts.length - 1] || url;
135
+ }
136
+ catch {
137
+ return url;
138
+ }
139
+ }
140
+ }
141
+ //# sourceMappingURL=SerenadaCore.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SerenadaCore.js","sourceRoot":"","sources":["../src/SerenadaCore.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,49 @@
1
+ import type { SerenadaConfig, DiagnosticsReport, DiagnosticCheckResult, ConnectivityReport, IceProbeReport } from './types.js';
2
+ /**
3
+ * Pre-flight diagnostics utility. Checks device capabilities (camera, mic, speaker)
4
+ * and server connectivity (signaling, TURN) before joining a call.
5
+ */
6
+ export declare class SerenadaDiagnostics {
7
+ private readonly resolvedConfig;
8
+ constructor(config: SerenadaConfig);
9
+ /** Run all diagnostic checks and return a full report. */
10
+ runAll(): Promise<DiagnosticsReport>;
11
+ /** Test server connectivity: room API, WebSocket, SSE, and TURN credentials. */
12
+ runConnectivityChecks(): Promise<ConnectivityReport>;
13
+ /** Probe ICE connectivity using the active server or provider ICE source. */
14
+ runTurnProbe(turnsOnly: boolean, onCandidateLog?: (candidate: string) => void): Promise<IceProbeReport>;
15
+ /** Probe ICE connectivity (STUN/TURN) by gathering candidates with a real peer connection. */
16
+ runIceProbe(turnsOnly: boolean, onCandidateLog?: (candidate: string) => void): Promise<IceProbeReport>;
17
+ /** Validate that a server host is reachable by requesting a room ID. */
18
+ validateServerHost(host?: string): Promise<void>;
19
+ /** Check if a camera is available and authorized. */
20
+ checkCamera(): Promise<DiagnosticCheckResult>;
21
+ /** Check if a microphone is available and authorized. */
22
+ checkMicrophone(): Promise<DiagnosticCheckResult>;
23
+ /** Check if a speaker/audio output device is available. */
24
+ checkSpeaker(): Promise<DiagnosticCheckResult>;
25
+ /** Check if the browser reports network connectivity. */
26
+ checkNetwork(): Promise<DiagnosticCheckResult>;
27
+ /** Check if the signaling server is reachable. */
28
+ checkSignaling(): Promise<DiagnosticCheckResult & {
29
+ transport?: string;
30
+ }>;
31
+ /** Check if the TURN relay endpoint is reachable. */
32
+ checkTurn(): Promise<DiagnosticCheckResult & {
33
+ latencyMs?: number;
34
+ }>;
35
+ private checkMediaCapability;
36
+ private checkDeviceAvailability;
37
+ private enumerateDevices;
38
+ private runTimedCheck;
39
+ private createRoomId;
40
+ private fetchDiagnosticToken;
41
+ private fetchTurnCredentials;
42
+ private testWebSocket;
43
+ private testSse;
44
+ private gatherIceCandidates;
45
+ private resolveIceServers;
46
+ private fetchJson;
47
+ private fetchResponse;
48
+ }
49
+ //# sourceMappingURL=SerenadaDiagnostics.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SerenadaDiagnostics.d.ts","sourceRoot":"","sources":["../src/SerenadaDiagnostics.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACR,cAAc,EACd,iBAAiB,EACjB,qBAAqB,EAErB,kBAAkB,EAClB,cAAc,EACjB,MAAM,YAAY,CAAC;AAqBpB;;;GAGG;AACH,qBAAa,mBAAmB;IAC5B,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAyB;gBAE5C,MAAM,EAAE,cAAc;IAIlC,0DAA0D;IACpD,MAAM,IAAI,OAAO,CAAC,iBAAiB,CAAC;IAoB1C,gFAAgF;IAC1E,qBAAqB,IAAI,OAAO,CAAC,kBAAkB,CAAC;IA4B1D,6EAA6E;IACvE,YAAY,CAAC,SAAS,EAAE,OAAO,EAAE,cAAc,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,IAAI,GAAG,OAAO,CAAC,cAAc,CAAC;IAS7G,8FAA8F;IACxF,WAAW,CAAC,SAAS,EAAE,OAAO,EAAE,cAAc,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,IAAI,GAAG,OAAO,CAAC,cAAc,CAAC;IAI5G,wEAAwE;IAClE,kBAAkB,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAetD,qDAAqD;IAC/C,WAAW,IAAI,OAAO,CAAC,qBAAqB,CAAC;IAKnD,yDAAyD;IACnD,eAAe,IAAI,OAAO,CAAC,qBAAqB,CAAC;IAKvD,2DAA2D;IACrD,YAAY,IAAI,OAAO,CAAC,qBAAqB,CAAC;IAKpD,yDAAyD;IACnD,YAAY,IAAI,OAAO,CAAC,qBAAqB,CAAC;IASpD,kDAAkD;IAC5C,cAAc,IAAI,OAAO,CAAC,qBAAqB,GAAG;QAAE,SAAS,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAsB/E,qDAAqD;IAC/C,SAAS,IAAI,OAAO,CAAC,qBAAqB,GAAG;QAAE,SAAS,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IA6B1E,OAAO,CAAC,oBAAoB;IAc5B,OAAO,CAAC,uBAAuB;YAUjB,gBAAgB;YAShB,aAAa;YAUb,YAAY;YAaZ,oBAAoB;YAcpB,oBAAoB;YAsBpB,aAAa;YAgCb,OAAO;YA8CP,mBAAmB;YAgFnB,iBAAiB;YAajB,SAAS;YAQT,aAAa;CAY9B"}