@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 @@
1
+ {"version":3,"file":"sse.js","sourceRoot":"","sources":["../../../src/signaling/transports/sse.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ import type { SignalingMessage } from '../types.js';
2
+ export type TransportKind = 'ws' | 'sse';
3
+ export type TransportHandlers = {
4
+ onOpen: () => void;
5
+ onClose: (reason: string, err?: unknown) => void;
6
+ onMessage: (msg: SignalingMessage) => void;
7
+ };
8
+ export interface SignalingTransport {
9
+ kind: TransportKind;
10
+ connect: () => void;
11
+ close: () => void;
12
+ forceClose?: (reason: string) => void;
13
+ send: (msg: SignalingMessage) => void;
14
+ isOpen: () => boolean;
15
+ getSessionId?: () => string;
16
+ }
17
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/signaling/transports/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAEpD,MAAM,MAAM,aAAa,GAAG,IAAI,GAAG,KAAK,CAAC;AAEzC,MAAM,MAAM,iBAAiB,GAAG;IAC5B,MAAM,EAAE,MAAM,IAAI,CAAC;IACnB,OAAO,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,OAAO,KAAK,IAAI,CAAC;IACjD,SAAS,EAAE,CAAC,GAAG,EAAE,gBAAgB,KAAK,IAAI,CAAC;CAC9C,CAAC;AAEF,MAAM,WAAW,kBAAkB;IAC/B,IAAI,EAAE,aAAa,CAAC;IACpB,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,KAAK,EAAE,MAAM,IAAI,CAAC;IAClB,UAAU,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;IACtC,IAAI,EAAE,CAAC,GAAG,EAAE,gBAAgB,KAAK,IAAI,CAAC;IACtC,MAAM,EAAE,MAAM,OAAO,CAAC;IACtB,YAAY,CAAC,EAAE,MAAM,MAAM,CAAC;CAC/B"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/signaling/transports/types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,21 @@
1
+ import type { SerenadaLogger } from '../../types.js';
2
+ import type { SignalingMessage } from '../types.js';
3
+ import type { SignalingTransport, TransportHandlers, TransportKind } from './types.js';
4
+ export declare class WebSocketTransport implements SignalingTransport {
5
+ kind: TransportKind;
6
+ private ws;
7
+ private handlers;
8
+ private open;
9
+ private connectTimeout;
10
+ private wsUrl;
11
+ private logger?;
12
+ constructor(handlers: TransportHandlers, wsUrl: string, logger?: SerenadaLogger);
13
+ private clearConnectTimeout;
14
+ private detachSocketHandlers;
15
+ connect(): void;
16
+ close(): void;
17
+ forceClose(reason: string): void;
18
+ isOpen(): boolean;
19
+ send(msg: SignalingMessage): void;
20
+ }
21
+ //# sourceMappingURL=ws.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ws.d.ts","sourceRoot":"","sources":["../../../src/signaling/transports/ws.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AACrD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AACpD,OAAO,KAAK,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAIvF,qBAAa,kBAAmB,YAAW,kBAAkB;IACzD,IAAI,EAAE,aAAa,CAAQ;IAC3B,OAAO,CAAC,EAAE,CAA0B;IACpC,OAAO,CAAC,QAAQ,CAAoB;IACpC,OAAO,CAAC,IAAI,CAAS;IACrB,OAAO,CAAC,cAAc,CAAuB;IAC7C,OAAO,CAAC,KAAK,CAAS;IACtB,OAAO,CAAC,MAAM,CAAC,CAAiB;gBAEpB,QAAQ,EAAE,iBAAiB,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,cAAc;IAM/E,OAAO,CAAC,mBAAmB;IAO3B,OAAO,CAAC,oBAAoB;IAO5B,OAAO;IAwCP,KAAK;IAWL,UAAU,CAAC,MAAM,EAAE,MAAM;IAYzB,MAAM;IAIN,IAAI,CAAC,GAAG,EAAE,gBAAgB;CAK7B"}
@@ -0,0 +1,93 @@
1
+ import { CONNECT_TIMEOUT_MS } from '../../constants.js';
2
+ import { formatError } from '../../formatError.js';
3
+ export class WebSocketTransport {
4
+ kind = 'ws';
5
+ ws = null;
6
+ handlers;
7
+ open = false;
8
+ connectTimeout = null;
9
+ wsUrl;
10
+ logger;
11
+ constructor(handlers, wsUrl, logger) {
12
+ this.handlers = handlers;
13
+ this.wsUrl = wsUrl;
14
+ this.logger = logger;
15
+ }
16
+ clearConnectTimeout() {
17
+ if (this.connectTimeout) {
18
+ window.clearTimeout(this.connectTimeout);
19
+ this.connectTimeout = null;
20
+ }
21
+ }
22
+ detachSocketHandlers(ws) {
23
+ ws.onopen = null;
24
+ ws.onclose = null;
25
+ ws.onerror = null;
26
+ ws.onmessage = null;
27
+ }
28
+ connect() {
29
+ this.ws = new WebSocket(this.wsUrl);
30
+ this.connectTimeout = window.setTimeout(() => {
31
+ if (this.ws && this.ws.readyState !== WebSocket.OPEN) {
32
+ this.logger?.log('warning', 'Transport', `WS connection timeout after ${CONNECT_TIMEOUT_MS}ms`);
33
+ this.ws.close();
34
+ this.open = false;
35
+ this.handlers.onClose('timeout');
36
+ }
37
+ }, CONNECT_TIMEOUT_MS);
38
+ this.ws.onopen = () => {
39
+ this.clearConnectTimeout();
40
+ this.open = true;
41
+ this.handlers.onOpen();
42
+ };
43
+ this.ws.onclose = (evt) => {
44
+ this.clearConnectTimeout();
45
+ this.open = false;
46
+ this.handlers.onClose('close', evt);
47
+ };
48
+ this.ws.onerror = (err) => {
49
+ this.clearConnectTimeout();
50
+ this.open = false;
51
+ this.handlers.onClose('error', err);
52
+ };
53
+ this.ws.onmessage = (event) => {
54
+ try {
55
+ const msg = JSON.parse(event.data);
56
+ this.handlers.onMessage(msg);
57
+ }
58
+ catch (e) {
59
+ this.logger?.log('error', 'Transport', `Failed to parse WS message: ${formatError(e)}`);
60
+ }
61
+ };
62
+ }
63
+ close() {
64
+ this.clearConnectTimeout();
65
+ const ws = this.ws;
66
+ this.ws = null;
67
+ if (ws) {
68
+ this.detachSocketHandlers(ws);
69
+ ws.close();
70
+ }
71
+ this.open = false;
72
+ }
73
+ forceClose(reason) {
74
+ this.clearConnectTimeout();
75
+ const ws = this.ws;
76
+ this.ws = null;
77
+ if (ws) {
78
+ this.detachSocketHandlers(ws);
79
+ ws.close();
80
+ }
81
+ this.open = false;
82
+ this.handlers.onClose(reason);
83
+ }
84
+ isOpen() {
85
+ return !!this.ws && this.open && this.ws.readyState === WebSocket.OPEN;
86
+ }
87
+ send(msg) {
88
+ if (this.ws && this.ws.readyState === WebSocket.OPEN) {
89
+ this.ws.send(JSON.stringify(msg));
90
+ }
91
+ }
92
+ }
93
+ //# sourceMappingURL=ws.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ws.js","sourceRoot":"","sources":["../../../src/signaling/transports/ws.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,53 @@
1
+ export type ParticipantConnectionStatus = 'active' | 'suspended';
2
+ /**
3
+ * Latest ephemeral content metadata for a participant (screen share, content
4
+ * camera mode, etc.). Persisted on the server's participant record so a peer
5
+ * reconnecting after a suspension reconstructs its UI without waiting for the
6
+ * sender to toggle again.
7
+ */
8
+ export type ParticipantContentState = {
9
+ active: boolean;
10
+ contentType?: string;
11
+ updatedAtMs?: number;
12
+ epoch?: number;
13
+ };
14
+ export type RoomParticipant = {
15
+ cid: string;
16
+ joinedAt?: number;
17
+ displayName?: string;
18
+ /** Host-supplied stable identity — opaque to the SDK, surfaced for avatar lookup. */
19
+ peerId?: string;
20
+ audioEnabled?: boolean;
21
+ videoEnabled?: boolean;
22
+ connectionStatus?: ParticipantConnectionStatus;
23
+ contentState?: ParticipantContentState;
24
+ };
25
+ export type RoomState = {
26
+ hostCid: string | null;
27
+ participants: RoomParticipant[];
28
+ maxParticipants?: number;
29
+ /**
30
+ * Monotonic counter advanced by the server on every membership-mutating
31
+ * operation. SDKs gate ICE restart on receiving an authoritative
32
+ * post-reconnect room_state with epoch >= the last seen value, instead
33
+ * of acting on a stale in-memory peer map.
34
+ */
35
+ epoch?: number;
36
+ };
37
+ /**
38
+ * Outcome reported by the server in `joined.reconnect`. Drives whether the
39
+ * SDK preserves media-active peer connections, schedules dirty-pair
40
+ * renegotiation, or starts ground-up.
41
+ */
42
+ export type ReconnectOutcome = 'fresh' | 'reattached' | 'recovered';
43
+ export type SignalingMessage = {
44
+ v: number;
45
+ type: string;
46
+ rid?: string;
47
+ sid?: string;
48
+ cid?: string;
49
+ to?: string;
50
+ payload?: Record<string, unknown>;
51
+ };
52
+ export type { JoinedPayload, ErrorPayload, TurnRefreshedPayload, OfferPayload, AnswerPayload, IceCandidatePayload, } from './payloads.js';
53
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/signaling/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,2BAA2B,GAAG,QAAQ,GAAG,WAAW,CAAC;AAEjE;;;;;GAKG;AACH,MAAM,MAAM,uBAAuB,GAAG;IAClC,MAAM,EAAE,OAAO,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC;CAClB,CAAC;AAEF,MAAM,MAAM,eAAe,GAAG;IAC1B,GAAG,EAAE,MAAM,CAAC;IACZ,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,qFAAqF;IACrF,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,YAAY,CAAC,EAAE,OAAO,CAAC;IAIvB,gBAAgB,CAAC,EAAE,2BAA2B,CAAC;IAC/C,YAAY,CAAC,EAAE,uBAAuB,CAAC;CAC1C,CAAC;AAEF,MAAM,MAAM,SAAS,GAAG;IACpB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,YAAY,EAAE,eAAe,EAAE,CAAC;IAChC,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB;;;;;OAKG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;CAClB,CAAC;AAEF;;;;GAIG;AACH,MAAM,MAAM,gBAAgB,GAAG,OAAO,GAAG,YAAY,GAAG,WAAW,CAAC;AAEpE,MAAM,MAAM,gBAAgB,GAAG;IAC3B,CAAC,EAAE,MAAM,CAAC;IACV,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACrC,CAAC;AAEF,YAAY,EACR,aAAa,EACb,YAAY,EACZ,oBAAoB,EACpB,YAAY,EACZ,aAAa,EACb,mBAAmB,GACtB,MAAM,eAAe,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/signaling/types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,279 @@
1
+ import type { SignalingProvider, PeerMessage } from './SignalingProvider.js';
2
+ import type { TransportKind } from './signaling/transports/types.js';
3
+ import type { RoomStatus, RoomStatuses } from './signaling/roomStatuses.js';
4
+ /** Current phase of the call lifecycle. */
5
+ export type CallPhase = 'idle' | 'awaitingPermissions' | 'joining' | 'waiting' | 'inCall' | 'ending' | 'error';
6
+ /** Network connection status between the client and signaling server. */
7
+ export type ConnectionStatus = 'connected' | 'recovering' | 'retrying' | 'disconnected';
8
+ /** Active signaling transport, including custom provider-specific transport labels. */
9
+ export type ActiveTransport = TransportKind | (string & {});
10
+ /** Camera mode: selfie (front), world (rear), composite (picture-in-picture), or screen share. */
11
+ export type CameraMode = 'selfie' | 'world' | 'composite' | 'screenShare';
12
+ /** Subset of {@link CameraMode} that can be configured via {@link SerenadaConfig.cameraModes}. */
13
+ export type ConfigurableCameraMode = Exclude<CameraMode, 'screenShare'>;
14
+ /** Default preference order for camera modes when {@link SerenadaConfig.cameraModes} is unset. */
15
+ export declare const DEFAULT_CAMERA_MODES: readonly ConfigurableCameraMode[];
16
+ /** Device media capability that may require user permission. */
17
+ export type MediaCapability = 'camera' | 'microphone';
18
+ /** WebRTC peer connection state. */
19
+ export type PeerConnectionState = 'new' | 'connecting' | 'connected' | 'disconnected' | 'failed' | 'closed';
20
+ /**
21
+ * Signaling connection status of a remote participant as reported by the
22
+ * server. `'active'` means the participant is currently connected to the
23
+ * signaling server; `'suspended'` means their signaling transport dropped
24
+ * and the server is holding their slot open for reconnect — the peer
25
+ * connection to them is intentionally kept alive and UIs should surface a
26
+ * "reconnecting" indicator instead of rendering them as gone.
27
+ */
28
+ export type ParticipantSignalingStatus = 'active' | 'suspended';
29
+ /** Remote participant in a call. */
30
+ export interface Participant {
31
+ cid: string;
32
+ displayName?: string;
33
+ /**
34
+ * Host-supplied stable identity passed via {@link SerenadaCore.join} (the
35
+ * `peerId` option). Distinct from {@link cid} (per-call, server-issued) —
36
+ * used by the call UI to look up avatars or correlate to host-side records.
37
+ * Absent when the remote peer didn't supply one.
38
+ */
39
+ peerId?: string;
40
+ audioEnabled: boolean;
41
+ videoEnabled: boolean;
42
+ connectionState: PeerConnectionState;
43
+ signalingStatus: ParticipantSignalingStatus;
44
+ /**
45
+ * `true` when this peer has been suspended longer than
46
+ * `PEER_SUSPENDED_UI_TIMEOUT_MS` and the SDK has flipped its UI
47
+ * presentation to "presumed lost." The peer connection is intentionally
48
+ * left open so media can resume immediately if the peer reattaches; this
49
+ * flag is purely a UI hint that call shells can use to move the
50
+ * participant out of the active grid or show a "connection lost" badge.
51
+ * Cleared when the peer transitions back to `signalingStatus="active"`.
52
+ */
53
+ presumedLost: boolean;
54
+ }
55
+ /** Local participant info including camera mode and host status. */
56
+ export interface LocalParticipant {
57
+ cid: string;
58
+ displayName?: string;
59
+ /** Host-supplied stable identity — see {@link Participant.peerId}. */
60
+ peerId?: string;
61
+ audioEnabled: boolean;
62
+ videoEnabled: boolean;
63
+ cameraMode: CameraMode;
64
+ /**
65
+ * Camera modes the user can cycle through, in preference order.
66
+ * Derived from {@link SerenadaConfig.cameraModes} minus modes unsupported
67
+ * on this device/platform. An empty array means video is unavailable
68
+ * — the call UI should hide the video toggle.
69
+ */
70
+ availableCameraModes: ConfigurableCameraMode[];
71
+ isHost: boolean;
72
+ }
73
+ /** Error codes for call failures. */
74
+ export type CallErrorCode = 'signalingTimeout' | 'connectionFailed' | 'roomFull' | 'roomEnded' | 'sessionExpired' | 'permissionDenied' | 'serverError' | 'webrtcUnavailable' | 'unknown';
75
+ /** Error with a machine-readable code and human-readable message. */
76
+ export interface CallError {
77
+ code: CallErrorCode;
78
+ message: string;
79
+ }
80
+ /**
81
+ * Richer view of the local signaling transport state. Apps can use this to
82
+ * render reconnect spinners, "you have been disconnected" UI, and a hard-
83
+ * eviction countdown when applicable. {@link CallState.connectionStatus}
84
+ * remains the simpler four-value summary.
85
+ */
86
+ export type SignalingState = {
87
+ kind: 'connected';
88
+ } | {
89
+ kind: 'reconnecting';
90
+ /** Number of consecutive reconnect attempts since transport last dropped. */
91
+ attempt: number;
92
+ /** Wall-clock ms for the next scheduled retry, or `null` if a retry is in flight. */
93
+ nextRetryAtMs: number | null;
94
+ } | {
95
+ kind: 'suspended';
96
+ /** Wall-clock ms when the local transport last dropped. */
97
+ suspendedSinceMs: number;
98
+ /**
99
+ * Wall-clock ms when the server is expected to hard-evict the slot
100
+ * absent a successful reconnect. Computed locally from
101
+ * `suspendedSinceMs + SUSPEND_HARD_EVICTION_TIMEOUT_MS`. Best-effort
102
+ * — server media-liveness hints can extend retention.
103
+ */
104
+ estimatedHardEvictionAtMs: number;
105
+ } | {
106
+ kind: 'failed';
107
+ reason: CallErrorCode;
108
+ };
109
+ /**
110
+ * Primary observable call state. This is the main state object consumers subscribe to
111
+ * via {@link SerenadaSessionHandle.subscribe}.
112
+ */
113
+ export interface CallState {
114
+ phase: CallPhase;
115
+ roomId: string | null;
116
+ roomUrl: string | null;
117
+ localParticipant: LocalParticipant | null;
118
+ remoteParticipants: Participant[];
119
+ connectionStatus: ConnectionStatus;
120
+ /**
121
+ * Richer signaling-transport state with timing details. Apps that don't
122
+ * need the extra detail can stick with {@link connectionStatus}.
123
+ */
124
+ signalingState: SignalingState;
125
+ activeTransport: ActiveTransport | null;
126
+ requiredPermissions: MediaCapability[] | null;
127
+ error: CallError | null;
128
+ }
129
+ /** SDK configuration passed to {@link SerenadaCore}. */
130
+ export interface SerenadaConfig {
131
+ /** Bare host or full origin, e.g. `serenada.app` or `http://qa-box:8080`. */
132
+ serverHost?: string;
133
+ /** Custom signaling provider. Provide exactly one of `serverHost` or `signalingProvider`. */
134
+ signalingProvider?: SignalingProvider;
135
+ /** Whether the microphone is enabled when joining. Defaults to `true`. */
136
+ defaultAudioEnabled?: boolean;
137
+ /** Whether the camera is enabled when joining. Defaults to `true`. */
138
+ defaultVideoEnabled?: boolean;
139
+ /**
140
+ * Camera modes available in the call UI, in preference order. The first
141
+ * entry is the initial mode. When only one mode is listed the flip-camera
142
+ * control is hidden; an empty array disables video entirely (the video
143
+ * toggle is hidden and the camera is never requested). Modes unsupported
144
+ * on the current platform or device are silently dropped (`'composite'`
145
+ * is always dropped on web). Defaults to `['selfie', 'world', 'composite']`.
146
+ */
147
+ cameraModes?: ConfigurableCameraMode[];
148
+ /** Signaling transport priority order. Defaults to `['ws', 'sse']`. */
149
+ transports?: TransportKind[];
150
+ /** When `true`, only use TURNS (TLS) relay candidates. */
151
+ turnsOnly?: boolean;
152
+ /** Custom logger for SDK diagnostic output. */
153
+ logger?: SerenadaLogger;
154
+ }
155
+ /** Result of creating a new room via {@link SerenadaCore.createRoom}. */
156
+ export interface CreateRoomResult {
157
+ url: string;
158
+ roomId: string;
159
+ }
160
+ /**
161
+ * Public interface for an active call session. Consumers should use this
162
+ * instead of the concrete {@link SerenadaSession} class.
163
+ */
164
+ export interface SerenadaSessionHandle {
165
+ subscribe(callback: (state: CallState) => void): () => void;
166
+ onPeerMessage(callback: (message: PeerMessage) => void): () => void;
167
+ leave(): void;
168
+ end(): void;
169
+ toggleAudio(): void;
170
+ toggleVideo(): void;
171
+ flipCamera(): Promise<void>;
172
+ setAudioEnabled(enabled: boolean): void;
173
+ setVideoEnabled(enabled: boolean): void;
174
+ setCameraMode(mode: CameraMode): void;
175
+ startScreenShare(): Promise<void>;
176
+ stopScreenShare(): Promise<void>;
177
+ resumeJoin(): Promise<void>;
178
+ cancelJoin(): void;
179
+ destroy(): void;
180
+ readonly state: CallState;
181
+ readonly localStream: MediaStream | null;
182
+ readonly remoteStreams: Map<string, MediaStream>;
183
+ readonly callStats: CallStats | null;
184
+ readonly hasMultipleCameras: boolean;
185
+ readonly canScreenShare: boolean;
186
+ readonly isSignalingConnected: boolean;
187
+ readonly iceConnectionState: RTCIceConnectionState;
188
+ readonly peerConnectionState: RTCPeerConnectionState;
189
+ readonly rtcSignalingState: RTCSignalingState;
190
+ onPermissionsRequired: ((permissions: MediaCapability[]) => void) | null;
191
+ }
192
+ /** Aggregated WebRTC call statistics (bitrate, packet loss, jitter, codec, resolution). */
193
+ export interface CallStats {
194
+ transportPath: string | null;
195
+ rttMs: number | null;
196
+ availableOutgoingKbps: number | null;
197
+ audioRxPacketLossPct: number | null;
198
+ audioTxPacketLossPct: number | null;
199
+ audioJitterMs: number | null;
200
+ audioPlayoutDelayMs: number | null;
201
+ audioConcealedPct: number | null;
202
+ audioRxKbps: number | null;
203
+ audioTxKbps: number | null;
204
+ videoRxPacketLossPct: number | null;
205
+ videoTxPacketLossPct: number | null;
206
+ videoRxKbps: number | null;
207
+ videoTxKbps: number | null;
208
+ videoFps: number | null;
209
+ videoResolution: string | null;
210
+ videoFreezeCount60s: number | null;
211
+ videoFreezeDuration60s: number | null;
212
+ videoRetransmitPct: number | null;
213
+ updatedAtMs: number;
214
+ }
215
+ export type RoomOccupancy = RoomStatus;
216
+ /** Current state of room occupancy watching. */
217
+ export interface RoomWatcherState {
218
+ isConnected: boolean;
219
+ activeTransport: TransportKind | null;
220
+ roomStatuses: RoomStatuses;
221
+ }
222
+ /** Result of a single diagnostic check (available, unavailable, not authorized, or skipped). */
223
+ export type DiagnosticCheckResult = {
224
+ status: 'available';
225
+ } | {
226
+ status: 'unavailable';
227
+ reason: string;
228
+ } | {
229
+ status: 'notAuthorized';
230
+ } | {
231
+ status: 'skipped';
232
+ reason: string;
233
+ };
234
+ /** Outcome of a timed connectivity check with latency on success or error on failure. */
235
+ export type CheckOutcome = {
236
+ status: 'notRun';
237
+ } | {
238
+ status: 'passed';
239
+ latencyMs: number;
240
+ } | {
241
+ status: 'failed';
242
+ error: string;
243
+ };
244
+ /** Full diagnostics report covering device capabilities and server connectivity. */
245
+ export interface DiagnosticsReport {
246
+ camera: DiagnosticCheckResult;
247
+ microphone: DiagnosticCheckResult;
248
+ speaker: DiagnosticCheckResult;
249
+ network: DiagnosticCheckResult;
250
+ signaling: DiagnosticCheckResult & {
251
+ transport?: string;
252
+ };
253
+ turn: DiagnosticCheckResult & {
254
+ latencyMs?: number;
255
+ };
256
+ devices: MediaDeviceInfo[];
257
+ }
258
+ /** Server connectivity check results (room API, WebSocket, SSE, TURN). */
259
+ export interface ConnectivityReport {
260
+ roomApi: CheckOutcome;
261
+ webSocket: CheckOutcome;
262
+ sse: CheckOutcome;
263
+ diagnosticToken: CheckOutcome;
264
+ turnCredentials: CheckOutcome;
265
+ }
266
+ /** ICE connectivity probe results indicating STUN/TURN reachability. */
267
+ export interface IceProbeReport {
268
+ stunPassed: boolean;
269
+ turnPassed: boolean;
270
+ logs: string[];
271
+ iceServersSummary?: string;
272
+ }
273
+ /** Log level for SDK diagnostic output. */
274
+ export type SerenadaLogLevel = 'debug' | 'info' | 'warning' | 'error';
275
+ /** Logger interface for custom log handling. Implement this to capture SDK logs. */
276
+ export interface SerenadaLogger {
277
+ log(level: SerenadaLogLevel, tag: string, message: string): void;
278
+ }
279
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAC7E,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,iCAAiC,CAAC;AACrE,OAAO,KAAK,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAE5E,2CAA2C;AAC3C,MAAM,MAAM,SAAS,GAAG,MAAM,GAAG,qBAAqB,GAAG,SAAS,GAAG,SAAS,GAAG,QAAQ,GAAG,QAAQ,GAAG,OAAO,CAAC;AAE/G,yEAAyE;AACzE,MAAM,MAAM,gBAAgB,GAAG,WAAW,GAAG,YAAY,GAAG,UAAU,GAAG,cAAc,CAAC;AAExF,uFAAuF;AACvF,MAAM,MAAM,eAAe,GAAG,aAAa,GAAG,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC;AAE5D,kGAAkG;AAClG,MAAM,MAAM,UAAU,GAAG,QAAQ,GAAG,OAAO,GAAG,WAAW,GAAG,aAAa,CAAC;AAE1E,kGAAkG;AAClG,MAAM,MAAM,sBAAsB,GAAG,OAAO,CAAC,UAAU,EAAE,aAAa,CAAC,CAAC;AAExE,kGAAkG;AAClG,eAAO,MAAM,oBAAoB,EAAE,SAAS,sBAAsB,EAAqC,CAAC;AAExG,gEAAgE;AAChE,MAAM,MAAM,eAAe,GAAG,QAAQ,GAAG,YAAY,CAAC;AAEtD,oCAAoC;AACpC,MAAM,MAAM,mBAAmB,GAAG,KAAK,GAAG,YAAY,GAAG,WAAW,GAAG,cAAc,GAAG,QAAQ,GAAG,QAAQ,CAAC;AAE5G;;;;;;;GAOG;AACH,MAAM,MAAM,0BAA0B,GAAG,QAAQ,GAAG,WAAW,CAAC;AAEhE,oCAAoC;AACpC,MAAM,WAAW,WAAW;IACxB,GAAG,EAAE,MAAM,CAAC;IACZ,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB;;;;;OAKG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,OAAO,CAAC;IACtB,YAAY,EAAE,OAAO,CAAC;IACtB,eAAe,EAAE,mBAAmB,CAAC;IACrC,eAAe,EAAE,0BAA0B,CAAC;IAC5C;;;;;;;;OAQG;IACH,YAAY,EAAE,OAAO,CAAC;CACzB;AAED,oEAAoE;AACpE,MAAM,WAAW,gBAAgB;IAC7B,GAAG,EAAE,MAAM,CAAC;IACZ,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,sEAAsE;IACtE,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,OAAO,CAAC;IACtB,YAAY,EAAE,OAAO,CAAC;IACtB,UAAU,EAAE,UAAU,CAAC;IACvB;;;;;OAKG;IACH,oBAAoB,EAAE,sBAAsB,EAAE,CAAC;IAC/C,MAAM,EAAE,OAAO,CAAC;CACnB;AAED,qCAAqC;AACrC,MAAM,MAAM,aAAa,GACnB,kBAAkB,GAClB,kBAAkB,GAClB,UAAU,GACV,WAAW,GACX,gBAAgB,GAChB,kBAAkB,GAClB,aAAa,GACb,mBAAmB,GACnB,SAAS,CAAC;AAEhB,qEAAqE;AACrE,MAAM,WAAW,SAAS;IACtB,IAAI,EAAE,aAAa,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;CACnB;AAED;;;;;GAKG;AACH,MAAM,MAAM,cAAc,GACpB;IAAE,IAAI,EAAE,WAAW,CAAA;CAAE,GACrB;IACI,IAAI,EAAE,cAAc,CAAC;IACrB,6EAA6E;IAC7E,OAAO,EAAE,MAAM,CAAC;IAChB,qFAAqF;IACrF,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;CAChC,GACD;IACI,IAAI,EAAE,WAAW,CAAC;IAClB,2DAA2D;IAC3D,gBAAgB,EAAE,MAAM,CAAC;IACzB;;;;;OAKG;IACH,yBAAyB,EAAE,MAAM,CAAC;CACrC,GACD;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,MAAM,EAAE,aAAa,CAAA;CAAE,CAAC;AAEhD;;;GAGG;AACH,MAAM,WAAW,SAAS;IACtB,KAAK,EAAE,SAAS,CAAC;IACjB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,gBAAgB,EAAE,gBAAgB,GAAG,IAAI,CAAC;IAC1C,kBAAkB,EAAE,WAAW,EAAE,CAAC;IAClC,gBAAgB,EAAE,gBAAgB,CAAC;IACnC;;;OAGG;IACH,cAAc,EAAE,cAAc,CAAC;IAC/B,eAAe,EAAE,eAAe,GAAG,IAAI,CAAC;IACxC,mBAAmB,EAAE,eAAe,EAAE,GAAG,IAAI,CAAC;IAC9C,KAAK,EAAE,SAAS,GAAG,IAAI,CAAC;CAC3B;AAED,wDAAwD;AACxD,MAAM,WAAW,cAAc;IAC3B,6EAA6E;IAC7E,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,6FAA6F;IAC7F,iBAAiB,CAAC,EAAE,iBAAiB,CAAC;IACtC,0EAA0E;IAC1E,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B,sEAAsE;IACtE,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B;;;;;;;OAOG;IACH,WAAW,CAAC,EAAE,sBAAsB,EAAE,CAAC;IACvC,uEAAuE;IACvE,UAAU,CAAC,EAAE,aAAa,EAAE,CAAC;IAC7B,0DAA0D;IAC1D,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,+CAA+C;IAC/C,MAAM,CAAC,EAAE,cAAc,CAAC;CAC3B;AAED,yEAAyE;AACzE,MAAM,WAAW,gBAAgB;IAC7B,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;CAClB;AAED;;;GAGG;AACH,MAAM,WAAW,qBAAqB;IAClC,SAAS,CAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,SAAS,KAAK,IAAI,GAAG,MAAM,IAAI,CAAC;IAC5D,aAAa,CAAC,QAAQ,EAAE,CAAC,OAAO,EAAE,WAAW,KAAK,IAAI,GAAG,MAAM,IAAI,CAAC;IACpE,KAAK,IAAI,IAAI,CAAC;IACd,GAAG,IAAI,IAAI,CAAC;IACZ,WAAW,IAAI,IAAI,CAAC;IACpB,WAAW,IAAI,IAAI,CAAC;IACpB,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAC5B,eAAe,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAAC;IACxC,eAAe,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAAC;IACxC,aAAa,CAAC,IAAI,EAAE,UAAU,GAAG,IAAI,CAAC;IACtC,gBAAgB,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAClC,eAAe,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACjC,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAC5B,UAAU,IAAI,IAAI,CAAC;IACnB,OAAO,IAAI,IAAI,CAAC;IAChB,QAAQ,CAAC,KAAK,EAAE,SAAS,CAAC;IAC1B,QAAQ,CAAC,WAAW,EAAE,WAAW,GAAG,IAAI,CAAC;IACzC,QAAQ,CAAC,aAAa,EAAE,GAAG,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;IACjD,QAAQ,CAAC,SAAS,EAAE,SAAS,GAAG,IAAI,CAAC;IACrC,QAAQ,CAAC,kBAAkB,EAAE,OAAO,CAAC;IACrC,QAAQ,CAAC,cAAc,EAAE,OAAO,CAAC;IACjC,QAAQ,CAAC,oBAAoB,EAAE,OAAO,CAAC;IACvC,QAAQ,CAAC,kBAAkB,EAAE,qBAAqB,CAAC;IACnD,QAAQ,CAAC,mBAAmB,EAAE,sBAAsB,CAAC;IACrD,QAAQ,CAAC,iBAAiB,EAAE,iBAAiB,CAAC;IAC9C,qBAAqB,EAAE,CAAC,CAAC,WAAW,EAAE,eAAe,EAAE,KAAK,IAAI,CAAC,GAAG,IAAI,CAAC;CAC5E;AAED,2FAA2F;AAC3F,MAAM,WAAW,SAAS;IACtB,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,qBAAqB,EAAE,MAAM,GAAG,IAAI,CAAC;IACrC,oBAAoB,EAAE,MAAM,GAAG,IAAI,CAAC;IACpC,oBAAoB,EAAE,MAAM,GAAG,IAAI,CAAC;IACpC,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,mBAAmB,EAAE,MAAM,GAAG,IAAI,CAAC;IACnC,iBAAiB,EAAE,MAAM,GAAG,IAAI,CAAC;IACjC,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,oBAAoB,EAAE,MAAM,GAAG,IAAI,CAAC;IACpC,oBAAoB,EAAE,MAAM,GAAG,IAAI,CAAC;IACpC,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,mBAAmB,EAAE,MAAM,GAAG,IAAI,CAAC;IACnC,sBAAsB,EAAE,MAAM,GAAG,IAAI,CAAC;IACtC,kBAAkB,EAAE,MAAM,GAAG,IAAI,CAAC;IAClC,WAAW,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,MAAM,aAAa,GAAG,UAAU,CAAC;AAEvC,gDAAgD;AAChD,MAAM,WAAW,gBAAgB;IAC7B,WAAW,EAAE,OAAO,CAAC;IACrB,eAAe,EAAE,aAAa,GAAG,IAAI,CAAC;IACtC,YAAY,EAAE,YAAY,CAAC;CAC9B;AAED,gGAAgG;AAChG,MAAM,MAAM,qBAAqB,GAC3B;IAAE,MAAM,EAAE,WAAW,CAAA;CAAE,GACvB;IAAE,MAAM,EAAE,aAAa,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GACzC;IAAE,MAAM,EAAE,eAAe,CAAA;CAAE,GAC3B;IAAE,MAAM,EAAE,SAAS,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC;AAE5C,yFAAyF;AACzF,MAAM,MAAM,YAAY,GAClB;IAAE,MAAM,EAAE,QAAQ,CAAA;CAAE,GACpB;IAAE,MAAM,EAAE,QAAQ,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,GACvC;IAAE,MAAM,EAAE,QAAQ,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC;AAE1C,oFAAoF;AACpF,MAAM,WAAW,iBAAiB;IAC9B,MAAM,EAAE,qBAAqB,CAAC;IAC9B,UAAU,EAAE,qBAAqB,CAAC;IAClC,OAAO,EAAE,qBAAqB,CAAC;IAC/B,OAAO,EAAE,qBAAqB,CAAC;IAC/B,SAAS,EAAE,qBAAqB,GAAG;QAAE,SAAS,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAC1D,IAAI,EAAE,qBAAqB,GAAG;QAAE,SAAS,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IACrD,OAAO,EAAE,eAAe,EAAE,CAAC;CAC9B;AAED,0EAA0E;AAC1E,MAAM,WAAW,kBAAkB;IAC/B,OAAO,EAAE,YAAY,CAAC;IACtB,SAAS,EAAE,YAAY,CAAC;IACxB,GAAG,EAAE,YAAY,CAAC;IAClB,eAAe,EAAE,YAAY,CAAC;IAC9B,eAAe,EAAE,YAAY,CAAC;CACjC;AAED,wEAAwE;AACxE,MAAM,WAAW,cAAc;IAC3B,UAAU,EAAE,OAAO,CAAC;IACpB,UAAU,EAAE,OAAO,CAAC;IACpB,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC9B;AAED,2CAA2C;AAC3C,MAAM,MAAM,gBAAgB,GAAG,OAAO,GAAG,MAAM,GAAG,SAAS,GAAG,OAAO,CAAC;AAEtE,oFAAoF;AACpF,MAAM,WAAW,cAAc;IAC3B,GAAG,CAAC,KAAK,EAAE,gBAAgB,EAAE,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;CACpE"}
package/dist/types.js ADDED
@@ -0,0 +1,3 @@
1
+ /** Default preference order for camera modes when {@link SerenadaConfig.cameraModes} is unset. */
2
+ export const DEFAULT_CAMERA_MODES = ['selfie', 'world', 'composite'];
3
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAmBA,kGAAkG;AAClG,MAAM,CAAC,MAAM,oBAAoB,GAAsC,CAAC,QAAQ,EAAE,OAAO,EAAE,WAAW,CAAC,CAAC"}
package/package.json ADDED
@@ -0,0 +1,43 @@
1
+ {
2
+ "name": "@agatx/serenada-core",
3
+ "version": "0.6.10",
4
+ "description": "Headless WebRTC call engine for 1:1 and mesh multi-party video calls — vanilla TypeScript, no React dependency",
5
+ "type": "module",
6
+ "main": "dist/index.js",
7
+ "types": "dist/index.d.ts",
8
+ "exports": {
9
+ ".": {
10
+ "types": "./dist/index.d.ts",
11
+ "import": "./dist/index.js"
12
+ }
13
+ },
14
+ "files": [
15
+ "dist",
16
+ "src",
17
+ "README.md"
18
+ ],
19
+ "scripts": {
20
+ "build": "tsc",
21
+ "clean": "node -e \"require('fs').rmSync('dist',{recursive:true,force:true})\"",
22
+ "build:publish": "npm run clean && tsc -p tsconfig.build.json",
23
+ "lint": "eslint src/",
24
+ "test": "vitest run test",
25
+ "prepublishOnly": "npm run build:publish"
26
+ },
27
+ "repository": {
28
+ "type": "git",
29
+ "url": "git+https://github.com/agatx/serenada.git",
30
+ "directory": "client/packages/core"
31
+ },
32
+ "keywords": [
33
+ "webrtc",
34
+ "video-call",
35
+ "signaling",
36
+ "serenada"
37
+ ],
38
+ "license": "MIT",
39
+ "publishConfig": {
40
+ "access": "public",
41
+ "registry": "https://registry.npmjs.org"
42
+ }
43
+ }
@@ -0,0 +1,14 @@
1
+ import type { SerenadaLogLevel, SerenadaLogger } from './types.js';
2
+
3
+ /** Default logger that writes to the browser console. Pass to {@link SerenadaConfig.logger} for debug output. */
4
+ export class ConsoleSerenadaLogger implements SerenadaLogger {
5
+ log(level: SerenadaLogLevel, tag: string, message: string): void {
6
+ const formatted = `[${tag}] ${message}`;
7
+ switch (level) {
8
+ case 'debug': console.debug(formatted); break;
9
+ case 'info': console.info(formatted); break;
10
+ case 'warning': console.warn(formatted); break;
11
+ case 'error': console.error(formatted); break;
12
+ }
13
+ }
14
+ }