@softomnitel/omnicall-kit 0.1.0-rc.0

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 (183) hide show
  1. package/LICENSE +4 -0
  2. package/README.md +34 -0
  3. package/dist/index.d.ts +21 -0
  4. package/dist/index.d.ts.map +1 -0
  5. package/dist/index.js +16 -0
  6. package/dist/index.js.map +1 -0
  7. package/dist/internal/account-activate-commands.d.ts +30 -0
  8. package/dist/internal/account-activate-commands.d.ts.map +1 -0
  9. package/dist/internal/account-activate-commands.js +94 -0
  10. package/dist/internal/account-activate-commands.js.map +1 -0
  11. package/dist/internal/account-activate-wire.d.ts +16 -0
  12. package/dist/internal/account-activate-wire.d.ts.map +1 -0
  13. package/dist/internal/account-activate-wire.js +22 -0
  14. package/dist/internal/account-activate-wire.js.map +1 -0
  15. package/dist/internal/account-logout-commands.d.ts +23 -0
  16. package/dist/internal/account-logout-commands.d.ts.map +1 -0
  17. package/dist/internal/account-logout-commands.js +51 -0
  18. package/dist/internal/account-logout-commands.js.map +1 -0
  19. package/dist/internal/account-logout-wire.d.ts +15 -0
  20. package/dist/internal/account-logout-wire.d.ts.map +1 -0
  21. package/dist/internal/account-logout-wire.js +24 -0
  22. package/dist/internal/account-logout-wire.js.map +1 -0
  23. package/dist/internal/auth-grants.d.ts +6 -0
  24. package/dist/internal/auth-grants.d.ts.map +1 -0
  25. package/dist/internal/auth-grants.js +16 -0
  26. package/dist/internal/auth-grants.js.map +1 -0
  27. package/dist/internal/auth-inbound.d.ts +35 -0
  28. package/dist/internal/auth-inbound.d.ts.map +1 -0
  29. package/dist/internal/auth-inbound.js +86 -0
  30. package/dist/internal/auth-inbound.js.map +1 -0
  31. package/dist/internal/auth-orchestrator.d.ts +36 -0
  32. package/dist/internal/auth-orchestrator.d.ts.map +1 -0
  33. package/dist/internal/auth-orchestrator.js +217 -0
  34. package/dist/internal/auth-orchestrator.js.map +1 -0
  35. package/dist/internal/auth-pop-flow.d.ts +38 -0
  36. package/dist/internal/auth-pop-flow.d.ts.map +1 -0
  37. package/dist/internal/auth-pop-flow.js +80 -0
  38. package/dist/internal/auth-pop-flow.js.map +1 -0
  39. package/dist/internal/auth-wire.d.ts +37 -0
  40. package/dist/internal/auth-wire.d.ts.map +1 -0
  41. package/dist/internal/auth-wire.js +62 -0
  42. package/dist/internal/auth-wire.js.map +1 -0
  43. package/dist/internal/base64url.d.ts +7 -0
  44. package/dist/internal/base64url.d.ts.map +1 -0
  45. package/dist/internal/base64url.js +28 -0
  46. package/dist/internal/base64url.js.map +1 -0
  47. package/dist/internal/browser-websocket-transport.d.ts +36 -0
  48. package/dist/internal/browser-websocket-transport.d.ts.map +1 -0
  49. package/dist/internal/browser-websocket-transport.js +131 -0
  50. package/dist/internal/browser-websocket-transport.js.map +1 -0
  51. package/dist/internal/call-commands.d.ts +32 -0
  52. package/dist/internal/call-commands.d.ts.map +1 -0
  53. package/dist/internal/call-commands.js +60 -0
  54. package/dist/internal/call-commands.js.map +1 -0
  55. package/dist/internal/call-wire.d.ts +24 -0
  56. package/dist/internal/call-wire.d.ts.map +1 -0
  57. package/dist/internal/call-wire.js +37 -0
  58. package/dist/internal/call-wire.js.map +1 -0
  59. package/dist/internal/client-error-details.d.ts +60 -0
  60. package/dist/internal/client-error-details.d.ts.map +1 -0
  61. package/dist/internal/client-error-details.js +98 -0
  62. package/dist/internal/client-error-details.js.map +1 -0
  63. package/dist/internal/client-errors.d.ts +38 -0
  64. package/dist/internal/client-errors.d.ts.map +1 -0
  65. package/dist/internal/client-errors.js +37 -0
  66. package/dist/internal/client-errors.js.map +1 -0
  67. package/dist/internal/command-classification.d.ts +7 -0
  68. package/dist/internal/command-classification.d.ts.map +1 -0
  69. package/dist/internal/command-classification.js +14 -0
  70. package/dist/internal/command-classification.js.map +1 -0
  71. package/dist/internal/connection-session.d.ts +61 -0
  72. package/dist/internal/connection-session.d.ts.map +1 -0
  73. package/dist/internal/connection-session.js +333 -0
  74. package/dist/internal/connection-session.js.map +1 -0
  75. package/dist/internal/connection-state.d.ts +13 -0
  76. package/dist/internal/connection-state.d.ts.map +1 -0
  77. package/dist/internal/connection-state.js +75 -0
  78. package/dist/internal/connection-state.js.map +1 -0
  79. package/dist/internal/diagnostics.d.ts +36 -0
  80. package/dist/internal/diagnostics.d.ts.map +1 -0
  81. package/dist/internal/diagnostics.js +51 -0
  82. package/dist/internal/diagnostics.js.map +1 -0
  83. package/dist/internal/event-subscription.d.ts +23 -0
  84. package/dist/internal/event-subscription.d.ts.map +1 -0
  85. package/dist/internal/event-subscription.js +62 -0
  86. package/dist/internal/event-subscription.js.map +1 -0
  87. package/dist/internal/heartbeat-controller.d.ts +27 -0
  88. package/dist/internal/heartbeat-controller.d.ts.map +1 -0
  89. package/dist/internal/heartbeat-controller.js +58 -0
  90. package/dist/internal/heartbeat-controller.js.map +1 -0
  91. package/dist/internal/operator-commands.d.ts +46 -0
  92. package/dist/internal/operator-commands.d.ts.map +1 -0
  93. package/dist/internal/operator-commands.js +93 -0
  94. package/dist/internal/operator-commands.js.map +1 -0
  95. package/dist/internal/operator-wire.d.ts +20 -0
  96. package/dist/internal/operator-wire.d.ts.map +1 -0
  97. package/dist/internal/operator-wire.js +33 -0
  98. package/dist/internal/operator-wire.js.map +1 -0
  99. package/dist/internal/origin-policy-errors.d.ts +22 -0
  100. package/dist/internal/origin-policy-errors.d.ts.map +1 -0
  101. package/dist/internal/origin-policy-errors.js +67 -0
  102. package/dist/internal/origin-policy-errors.js.map +1 -0
  103. package/dist/internal/pop-crypto.d.ts +23 -0
  104. package/dist/internal/pop-crypto.d.ts.map +1 -0
  105. package/dist/internal/pop-crypto.js +48 -0
  106. package/dist/internal/pop-crypto.js.map +1 -0
  107. package/dist/internal/pop-key-store.d.ts +28 -0
  108. package/dist/internal/pop-key-store.d.ts.map +1 -0
  109. package/dist/internal/pop-key-store.js +153 -0
  110. package/dist/internal/pop-key-store.js.map +1 -0
  111. package/dist/internal/product-commands.d.ts +33 -0
  112. package/dist/internal/product-commands.d.ts.map +1 -0
  113. package/dist/internal/product-commands.js +70 -0
  114. package/dist/internal/product-commands.js.map +1 -0
  115. package/dist/internal/product-inbound.d.ts +15 -0
  116. package/dist/internal/product-inbound.d.ts.map +1 -0
  117. package/dist/internal/product-inbound.js +31 -0
  118. package/dist/internal/product-inbound.js.map +1 -0
  119. package/dist/internal/product-orchestrator.d.ts +46 -0
  120. package/dist/internal/product-orchestrator.d.ts.map +1 -0
  121. package/dist/internal/product-orchestrator.js +188 -0
  122. package/dist/internal/product-orchestrator.js.map +1 -0
  123. package/dist/internal/product-wire.d.ts +29 -0
  124. package/dist/internal/product-wire.d.ts.map +1 -0
  125. package/dist/internal/product-wire.js +54 -0
  126. package/dist/internal/product-wire.js.map +1 -0
  127. package/dist/internal/public-event-map.d.ts +27 -0
  128. package/dist/internal/public-event-map.d.ts.map +1 -0
  129. package/dist/internal/public-event-map.js +38 -0
  130. package/dist/internal/public-event-map.js.map +1 -0
  131. package/dist/internal/reconnect-policy.d.ts +16 -0
  132. package/dist/internal/reconnect-policy.d.ts.map +1 -0
  133. package/dist/internal/reconnect-policy.js +23 -0
  134. package/dist/internal/reconnect-policy.js.map +1 -0
  135. package/dist/internal/request-correlator.d.ts +41 -0
  136. package/dist/internal/request-correlator.d.ts.map +1 -0
  137. package/dist/internal/request-correlator.js +130 -0
  138. package/dist/internal/request-correlator.js.map +1 -0
  139. package/dist/internal/requested-capabilities.d.ts +10 -0
  140. package/dist/internal/requested-capabilities.d.ts.map +1 -0
  141. package/dist/internal/requested-capabilities.js +25 -0
  142. package/dist/internal/requested-capabilities.js.map +1 -0
  143. package/dist/internal/scheduler.d.ts +41 -0
  144. package/dist/internal/scheduler.d.ts.map +1 -0
  145. package/dist/internal/scheduler.js +104 -0
  146. package/dist/internal/scheduler.js.map +1 -0
  147. package/dist/internal/session-identity.d.ts +16 -0
  148. package/dist/internal/session-identity.d.ts.map +1 -0
  149. package/dist/internal/session-identity.js +13 -0
  150. package/dist/internal/session-identity.js.map +1 -0
  151. package/dist/internal/snapshot-acquisition.d.ts +21 -0
  152. package/dist/internal/snapshot-acquisition.d.ts.map +1 -0
  153. package/dist/internal/snapshot-acquisition.js +40 -0
  154. package/dist/internal/snapshot-acquisition.js.map +1 -0
  155. package/dist/internal/snapshot-cache.d.ts +13 -0
  156. package/dist/internal/snapshot-cache.d.ts.map +1 -0
  157. package/dist/internal/snapshot-cache.js +18 -0
  158. package/dist/internal/snapshot-cache.js.map +1 -0
  159. package/dist/internal/transport-port.d.ts +34 -0
  160. package/dist/internal/transport-port.d.ts.map +1 -0
  161. package/dist/internal/transport-port.js +7 -0
  162. package/dist/internal/transport-port.js.map +1 -0
  163. package/dist/internal/window-commands.d.ts +23 -0
  164. package/dist/internal/window-commands.d.ts.map +1 -0
  165. package/dist/internal/window-commands.js +76 -0
  166. package/dist/internal/window-commands.js.map +1 -0
  167. package/dist/public/auth-client.d.ts +87 -0
  168. package/dist/public/auth-client.d.ts.map +1 -0
  169. package/dist/public/auth-client.js +116 -0
  170. package/dist/public/auth-client.js.map +1 -0
  171. package/dist/public/omnicall-client-api.d.ts +159 -0
  172. package/dist/public/omnicall-client-api.d.ts.map +1 -0
  173. package/dist/public/omnicall-client-api.js +5 -0
  174. package/dist/public/omnicall-client-api.js.map +1 -0
  175. package/dist/public/omnicall-client.d.ts +22 -0
  176. package/dist/public/omnicall-client.d.ts.map +1 -0
  177. package/dist/public/omnicall-client.js +171 -0
  178. package/dist/public/omnicall-client.js.map +1 -0
  179. package/dist/public/protocol-reexports.d.ts +41 -0
  180. package/dist/public/protocol-reexports.d.ts.map +1 -0
  181. package/dist/public/protocol-reexports.js +7 -0
  182. package/dist/public/protocol-reexports.js.map +1 -0
  183. package/package.json +46 -0
@@ -0,0 +1,61 @@
1
+ /**
2
+ * Internal connection session: transport lifecycle, state machine, correlation,
3
+ * heartbeat, and bounded reconnect. No product OmniCallClient methods.
4
+ */
5
+ import type { CommandType } from '@softomnitel/omnicall-protocol';
6
+ import { type ConnectionState } from './connection-state.js';
7
+ import type { DiagnosticsSink } from './diagnostics.js';
8
+ import { type HeartbeatPolicy } from './heartbeat-controller.js';
9
+ import { type ReconnectPolicy } from './reconnect-policy.js';
10
+ import { type PendingRequestResult } from './request-correlator.js';
11
+ import type { JitterSource, Scheduler } from './scheduler.js';
12
+ import type { OmniCallClientError } from './client-errors.js';
13
+ import type { TransportFactory, TransportPort } from './transport-port.js';
14
+ export type SessionWireIdentity = {
15
+ readonly serverInstanceId: string;
16
+ readonly sessionEpoch: string;
17
+ };
18
+ export type ConnectionSessionOptions = {
19
+ readonly url: string;
20
+ readonly transportFactory: TransportFactory;
21
+ readonly scheduler: Scheduler;
22
+ readonly jitter: JitterSource;
23
+ readonly diagnostics?: DiagnosticsSink;
24
+ readonly reconnect?: ReconnectPolicy;
25
+ readonly heartbeat?: HeartbeatPolicy;
26
+ readonly defaultRequestTimeoutMs?: number;
27
+ readonly onUnhandledMessage?: (data: string) => void;
28
+ readonly onHandshaking?: () => void;
29
+ };
30
+ export type OutboundCommandRequest = {
31
+ readonly requestId: string;
32
+ readonly commandType: CommandType;
33
+ readonly body: string;
34
+ readonly timeoutMs?: number;
35
+ readonly signal?: AbortSignal;
36
+ };
37
+ export type ConnectionSession = {
38
+ readonly getState: () => ConnectionState;
39
+ readonly connect: () => void;
40
+ readonly disconnect: () => void;
41
+ readonly requestReauth: () => void;
42
+ readonly setWireIdentity: (identity: SessionWireIdentity | undefined) => void;
43
+ readonly getWireIdentity: () => SessionWireIdentity | undefined;
44
+ readonly signalPairingRequired: () => void;
45
+ readonly signalAuthenticating: () => void;
46
+ readonly signalReady: (heartbeatSeconds?: number) => void;
47
+ readonly signalIncompatible: () => void;
48
+ readonly signalRevoked: () => void;
49
+ readonly signalFailed: () => void;
50
+ readonly signalOriginPolicyFailure: (error: OmniCallClientError) => void;
51
+ readonly getConnectError: () => OmniCallClientError | undefined;
52
+ readonly request: (command: OutboundCommandRequest) => Promise<PendingRequestResult>;
53
+ readonly sendRaw: (body: string) => boolean;
54
+ readonly onStateChange: (listener: (state: ConnectionState) => void) => () => void;
55
+ readonly pendingRequestCount: () => number;
56
+ readonly reconnectAttemptCount: () => number;
57
+ readonly mutationSendCount: () => number;
58
+ readonly activeTransport: () => TransportPort | undefined;
59
+ };
60
+ export declare function createConnectionSession(options: ConnectionSessionOptions): ConnectionSession;
61
+ //# sourceMappingURL=connection-session.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"connection-session.d.ts","sourceRoot":"","sources":["../../src/internal/connection-session.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,333 @@
1
+ /**
2
+ * Internal connection session: transport lifecycle, state machine, correlation,
3
+ * heartbeat, and bounded reconnect. No product OmniCallClient methods.
4
+ */
5
+ import { isMutationCommand } from './command-classification.js';
6
+ import { assertTransition, isReconnectEligible, isTerminalConnectionState } from './connection-state.js';
7
+ import { createHeartbeatController, DEFAULT_HEARTBEAT_POLICY } from './heartbeat-controller.js';
8
+ import { computeReconnectDelayMs, DEFAULT_RECONNECT_POLICY, hasReconnectAttemptsRemaining } from './reconnect-policy.js';
9
+ import { createRequestCorrelator } from './request-correlator.js';
10
+ import { mapTransportCloseToOriginPolicyError } from './origin-policy-errors.js';
11
+ export function createConnectionSession(options) {
12
+ const reconnectPolicy = options.reconnect ?? DEFAULT_RECONNECT_POLICY;
13
+ const heartbeatPolicy = options.heartbeat ?? DEFAULT_HEARTBEAT_POLICY;
14
+ const defaultTimeoutMs = options.defaultRequestTimeoutMs ?? 5_000;
15
+ const diagnostics = options.diagnostics;
16
+ let state = 'idle';
17
+ let transport;
18
+ let unsubscribers = [];
19
+ let reconnectAttempts = 0;
20
+ let reconnectTimer;
21
+ let intentionalClose = false;
22
+ let wireIdentity;
23
+ let connectError;
24
+ const stateListeners = new Set();
25
+ const correlator = createRequestCorrelator({
26
+ scheduler: options.scheduler,
27
+ ...(diagnostics !== undefined ? { diagnostics } : {})
28
+ });
29
+ const setState = (next) => {
30
+ assertTransition(state, next);
31
+ state = next;
32
+ diagnostics?.emit({
33
+ level: 'info',
34
+ code: 'connection.state',
35
+ connectionState: next
36
+ });
37
+ for (const listener of stateListeners) {
38
+ listener(next);
39
+ }
40
+ };
41
+ const clearReconnectTimer = () => {
42
+ reconnectTimer?.clear();
43
+ reconnectTimer = undefined;
44
+ };
45
+ const detachTransport = () => {
46
+ for (const unsubscribe of unsubscribers) {
47
+ unsubscribe();
48
+ }
49
+ unsubscribers = [];
50
+ transport = undefined;
51
+ };
52
+ const rejectPending = (reason) => {
53
+ correlator.rejectAll(reason, state);
54
+ };
55
+ const heartbeat = createHeartbeatController({
56
+ scheduler: options.scheduler,
57
+ ...(diagnostics !== undefined ? { diagnostics } : {}),
58
+ timeoutMs: heartbeatPolicy.timeoutMs,
59
+ connectionState: () => state,
60
+ sendPing: async (timeoutMs) => sendHeartbeatPing(timeoutMs),
61
+ onMissed: () => {
62
+ if (state !== 'ready' || transport === undefined) {
63
+ return;
64
+ }
65
+ intentionalClose = false;
66
+ transport.close(4000, 'heartbeat_missed');
67
+ }
68
+ });
69
+ const sendHeartbeatPing = async (timeoutMs) => {
70
+ if (state !== 'ready' || transport === undefined) {
71
+ return false;
72
+ }
73
+ const requestId = `hb_${options.scheduler.now()}`;
74
+ const body = JSON.stringify({
75
+ protocolVersion: 1,
76
+ kind: 'command',
77
+ type: 'sdk:ping',
78
+ requestId,
79
+ serverInstanceId: wireIdentity?.serverInstanceId ?? 'pending',
80
+ sessionEpoch: wireIdentity?.sessionEpoch ?? 'pending',
81
+ occurredAt: new Date(options.scheduler.now()).toISOString(),
82
+ payload: {}
83
+ });
84
+ try {
85
+ transport.send(body);
86
+ }
87
+ catch {
88
+ return false;
89
+ }
90
+ const result = await correlator.track({
91
+ requestId,
92
+ commandType: 'sdk:ping',
93
+ mutation: false
94
+ }, { timeoutMs, connectionState: state });
95
+ return result.ok;
96
+ };
97
+ const openTransport = () => {
98
+ detachTransport();
99
+ intentionalClose = false;
100
+ const next = options.transportFactory();
101
+ transport = next;
102
+ unsubscribers = [
103
+ next.onOpen(() => {
104
+ if (state === 'connecting') {
105
+ setState('handshaking');
106
+ options.onHandshaking?.();
107
+ }
108
+ }),
109
+ next.onMessage((data) => {
110
+ const handled = correlator.handleInbound(data, state);
111
+ if (!handled) {
112
+ options.onUnhandledMessage?.(data);
113
+ }
114
+ }),
115
+ next.onClose((closeInfo) => {
116
+ detachTransport();
117
+ if (intentionalClose || isTerminalConnectionState(state) || state === 'closed') {
118
+ return;
119
+ }
120
+ const originPolicyError = mapTransportCloseToOriginPolicyError(closeInfo, state);
121
+ if (originPolicyError !== undefined) {
122
+ signalOriginPolicyFailure(originPolicyError);
123
+ return;
124
+ }
125
+ if (isReconnectEligible(state)) {
126
+ beginReconnect('transport_closed');
127
+ }
128
+ }),
129
+ next.onError(() => {
130
+ diagnostics?.emit({
131
+ level: 'warn',
132
+ code: 'transport.error',
133
+ connectionState: state
134
+ });
135
+ })
136
+ ];
137
+ next.connect(options.url);
138
+ };
139
+ const beginReconnect = (code) => {
140
+ heartbeat.stop();
141
+ rejectPending('disconnect');
142
+ clearReconnectTimer();
143
+ wireIdentity = undefined;
144
+ if (state !== 'reconnecting' && isReconnectEligible(state)) {
145
+ setState('reconnecting');
146
+ }
147
+ diagnostics?.emit({
148
+ level: 'warn',
149
+ code: `reconnect.${code}`,
150
+ connectionState: state,
151
+ attempt: reconnectAttempts
152
+ });
153
+ if (!hasReconnectAttemptsRemaining(reconnectPolicy, reconnectAttempts)) {
154
+ if (state === 'reconnecting') {
155
+ setState('failed');
156
+ }
157
+ return;
158
+ }
159
+ const delayMs = computeReconnectDelayMs(reconnectPolicy, reconnectAttempts, options.jitter);
160
+ reconnectAttempts += 1;
161
+ reconnectTimer = options.scheduler.setTimeout(() => {
162
+ reconnectTimer = undefined;
163
+ if (state !== 'reconnecting') {
164
+ return;
165
+ }
166
+ setState('connecting');
167
+ openTransport();
168
+ }, delayMs);
169
+ };
170
+ const enterTerminal = (next) => {
171
+ intentionalClose = true;
172
+ clearReconnectTimer();
173
+ heartbeat.stop();
174
+ rejectPending('aborted');
175
+ wireIdentity = undefined;
176
+ if (transport !== undefined) {
177
+ transport.close(1000, next);
178
+ }
179
+ detachTransport();
180
+ setState(next);
181
+ };
182
+ const signalOriginPolicyFailure = (error) => {
183
+ connectError = error;
184
+ intentionalClose = true;
185
+ clearReconnectTimer();
186
+ heartbeat.stop();
187
+ rejectPending('aborted');
188
+ wireIdentity = undefined;
189
+ if (transport !== undefined) {
190
+ transport.close(1000, 'origin_policy');
191
+ }
192
+ detachTransport();
193
+ if (state !== 'failed') {
194
+ setState('failed');
195
+ }
196
+ };
197
+ const canSendCommand = (commandType) => {
198
+ if (state === 'ready') {
199
+ return true;
200
+ }
201
+ return state === 'authenticating' && commandType === 'sdk:ping';
202
+ };
203
+ return {
204
+ getState: () => state,
205
+ connect: () => {
206
+ if (state !== 'idle') {
207
+ throw new Error(`connect() requires idle, got ${state}`);
208
+ }
209
+ reconnectAttempts = 0;
210
+ correlator.clearMutationLedger();
211
+ wireIdentity = undefined;
212
+ connectError = undefined;
213
+ setState('connecting');
214
+ openTransport();
215
+ },
216
+ disconnect: () => {
217
+ if (state === 'closed') {
218
+ return;
219
+ }
220
+ intentionalClose = true;
221
+ clearReconnectTimer();
222
+ heartbeat.stop();
223
+ rejectPending('aborted');
224
+ wireIdentity = undefined;
225
+ connectError = undefined;
226
+ if (transport !== undefined) {
227
+ transport.close(1000, 'client_disconnect');
228
+ }
229
+ detachTransport();
230
+ setState('closed');
231
+ },
232
+ requestReauth: () => {
233
+ if (transport === undefined || !isReconnectEligible(state)) {
234
+ return;
235
+ }
236
+ intentionalClose = false;
237
+ heartbeat.stop();
238
+ rejectPending('disconnect');
239
+ wireIdentity = undefined;
240
+ transport.close(4001, 'reauth_required');
241
+ },
242
+ setWireIdentity: (identity) => {
243
+ wireIdentity = identity;
244
+ },
245
+ getWireIdentity: () => wireIdentity,
246
+ signalPairingRequired: () => {
247
+ setState('pairing_required');
248
+ },
249
+ signalAuthenticating: () => {
250
+ setState('authenticating');
251
+ },
252
+ signalReady: (heartbeatSeconds) => {
253
+ setState('ready');
254
+ reconnectAttempts = 0;
255
+ if (!heartbeatPolicy.enabled) {
256
+ return;
257
+ }
258
+ const intervalMs = heartbeatSeconds !== undefined
259
+ ? heartbeatSeconds * 1000
260
+ : heartbeatPolicy.intervalMs;
261
+ heartbeat.start(intervalMs);
262
+ },
263
+ signalIncompatible: () => {
264
+ enterTerminal('incompatible');
265
+ },
266
+ signalRevoked: () => {
267
+ enterTerminal('revoked');
268
+ },
269
+ signalFailed: () => {
270
+ enterTerminal('failed');
271
+ },
272
+ signalOriginPolicyFailure,
273
+ getConnectError: () => connectError,
274
+ sendRaw: (body) => {
275
+ if (transport === undefined) {
276
+ return false;
277
+ }
278
+ const allowUnauth = state === 'handshaking' ||
279
+ state === 'pairing_required' ||
280
+ state === 'authenticating';
281
+ if (!allowUnauth && state !== 'ready') {
282
+ return false;
283
+ }
284
+ try {
285
+ transport.send(body);
286
+ return true;
287
+ }
288
+ catch {
289
+ return false;
290
+ }
291
+ },
292
+ request: async (command) => {
293
+ if (!canSendCommand(command.commandType) || transport === undefined) {
294
+ return {
295
+ ok: false,
296
+ errorCode: 'not_ready',
297
+ reason: 'invalid_reply'
298
+ };
299
+ }
300
+ const mutation = isMutationCommand(command.commandType);
301
+ try {
302
+ transport.send(command.body);
303
+ }
304
+ catch {
305
+ return {
306
+ ok: false,
307
+ errorCode: 'operation_failed',
308
+ reason: 'disconnect'
309
+ };
310
+ }
311
+ return correlator.track({
312
+ requestId: command.requestId,
313
+ commandType: command.commandType,
314
+ mutation
315
+ }, {
316
+ timeoutMs: command.timeoutMs ?? defaultTimeoutMs,
317
+ connectionState: state,
318
+ ...(command.signal !== undefined ? { signal: command.signal } : {})
319
+ });
320
+ },
321
+ onStateChange: (listener) => {
322
+ stateListeners.add(listener);
323
+ return () => {
324
+ stateListeners.delete(listener);
325
+ };
326
+ },
327
+ pendingRequestCount: () => correlator.pendingCount(),
328
+ reconnectAttemptCount: () => reconnectAttempts,
329
+ mutationSendCount: () => correlator.mutationSendCount(),
330
+ activeTransport: () => transport
331
+ };
332
+ }
333
+ //# sourceMappingURL=connection-session.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"connection-session.js","sourceRoot":"","sources":["../../src/internal/connection-session.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ /**
2
+ * Explicit SDK connection states (ARCHITECTURE.md).
3
+ * Account/SIP/OCP authorization are never implied by these states.
4
+ */
5
+ /** Explicit SDK connection states (ARCHITECTURE.md). @public */
6
+ export declare const CONNECTION_STATES: readonly ["idle", "connecting", "handshaking", "pairing_required", "authenticating", "ready", "reconnecting", "incompatible", "revoked", "failed", "closed"];
7
+ /** @public */
8
+ export type ConnectionState = (typeof CONNECTION_STATES)[number];
9
+ export declare function canTransition(from: ConnectionState, to: ConnectionState): boolean;
10
+ export declare function assertTransition(from: ConnectionState, to: ConnectionState): void;
11
+ export declare function isTerminalConnectionState(state: ConnectionState): boolean;
12
+ export declare function isReconnectEligible(state: ConnectionState): boolean;
13
+ //# sourceMappingURL=connection-state.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"connection-state.d.ts","sourceRoot":"","sources":["../../src/internal/connection-state.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,gEAAgE;AAChE,eAAO,MAAM,iBAAiB,8JAYpB,CAAC;AAEX,cAAc;AACd,MAAM,MAAM,eAAe,GAAG,CAAC,OAAO,iBAAiB,CAAC,CAAC,MAAM,CAAC,CAAC;AAqCjE,wBAAgB,aAAa,CAC3B,IAAI,EAAE,eAAe,EACrB,EAAE,EAAE,eAAe,GAClB,OAAO,CAET;AAED,wBAAgB,gBAAgB,CAC9B,IAAI,EAAE,eAAe,EACrB,EAAE,EAAE,eAAe,GAClB,IAAI,CAIN;AAED,wBAAgB,yBAAyB,CAAC,KAAK,EAAE,eAAe,GAAG,OAAO,CAOzE;AAED,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,eAAe,GAAG,OAAO,CASnE"}
@@ -0,0 +1,75 @@
1
+ /**
2
+ * Explicit SDK connection states (ARCHITECTURE.md).
3
+ * Account/SIP/OCP authorization are never implied by these states.
4
+ */
5
+ /** Explicit SDK connection states (ARCHITECTURE.md). @public */
6
+ export const CONNECTION_STATES = [
7
+ 'idle',
8
+ 'connecting',
9
+ 'handshaking',
10
+ 'pairing_required',
11
+ 'authenticating',
12
+ 'ready',
13
+ 'reconnecting',
14
+ 'incompatible',
15
+ 'revoked',
16
+ 'failed',
17
+ 'closed'
18
+ ];
19
+ const LEGAL_TRANSITIONS = {
20
+ idle: ['connecting', 'closed'],
21
+ connecting: ['handshaking', 'reconnecting', 'failed', 'closed'],
22
+ handshaking: [
23
+ 'pairing_required',
24
+ 'authenticating',
25
+ 'incompatible',
26
+ 'reconnecting',
27
+ 'failed',
28
+ 'closed'
29
+ ],
30
+ pairing_required: ['authenticating', 'revoked', 'reconnecting', 'failed', 'closed'],
31
+ authenticating: [
32
+ 'ready',
33
+ 'revoked',
34
+ 'incompatible',
35
+ 'reconnecting',
36
+ 'failed',
37
+ 'closed'
38
+ ],
39
+ ready: ['reconnecting', 'incompatible', 'revoked', 'failed', 'closed'],
40
+ reconnecting: [
41
+ 'connecting',
42
+ 'ready',
43
+ 'incompatible',
44
+ 'revoked',
45
+ 'failed',
46
+ 'closed'
47
+ ],
48
+ incompatible: ['closed'],
49
+ revoked: ['closed'],
50
+ failed: ['closed'],
51
+ closed: []
52
+ };
53
+ export function canTransition(from, to) {
54
+ return LEGAL_TRANSITIONS[from].includes(to);
55
+ }
56
+ export function assertTransition(from, to) {
57
+ if (!canTransition(from, to)) {
58
+ throw new Error(`Illegal connection transition: ${from} -> ${to}`);
59
+ }
60
+ }
61
+ export function isTerminalConnectionState(state) {
62
+ return (state === 'incompatible' ||
63
+ state === 'revoked' ||
64
+ state === 'failed' ||
65
+ state === 'closed');
66
+ }
67
+ export function isReconnectEligible(state) {
68
+ return (state === 'connecting' ||
69
+ state === 'handshaking' ||
70
+ state === 'pairing_required' ||
71
+ state === 'authenticating' ||
72
+ state === 'ready' ||
73
+ state === 'reconnecting');
74
+ }
75
+ //# sourceMappingURL=connection-state.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"connection-state.js","sourceRoot":"","sources":["../../src/internal/connection-state.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,gEAAgE;AAChE,MAAM,CAAC,MAAM,iBAAiB,GAAG;IAC/B,MAAM;IACN,YAAY;IACZ,aAAa;IACb,kBAAkB;IAClB,gBAAgB;IAChB,OAAO;IACP,cAAc;IACd,cAAc;IACd,SAAS;IACT,QAAQ;IACR,QAAQ;CACA,CAAC;AAKX,MAAM,iBAAiB,GAAkE;IACvF,IAAI,EAAE,CAAC,YAAY,EAAE,QAAQ,CAAC;IAC9B,UAAU,EAAE,CAAC,aAAa,EAAE,cAAc,EAAE,QAAQ,EAAE,QAAQ,CAAC;IAC/D,WAAW,EAAE;QACX,kBAAkB;QAClB,gBAAgB;QAChB,cAAc;QACd,cAAc;QACd,QAAQ;QACR,QAAQ;KACT;IACD,gBAAgB,EAAE,CAAC,gBAAgB,EAAE,SAAS,EAAE,cAAc,EAAE,QAAQ,EAAE,QAAQ,CAAC;IACnF,cAAc,EAAE;QACd,OAAO;QACP,SAAS;QACT,cAAc;QACd,cAAc;QACd,QAAQ;QACR,QAAQ;KACT;IACD,KAAK,EAAE,CAAC,cAAc,EAAE,cAAc,EAAE,SAAS,EAAE,QAAQ,EAAE,QAAQ,CAAC;IACtE,YAAY,EAAE;QACZ,YAAY;QACZ,OAAO;QACP,cAAc;QACd,SAAS;QACT,QAAQ;QACR,QAAQ;KACT;IACD,YAAY,EAAE,CAAC,QAAQ,CAAC;IACxB,OAAO,EAAE,CAAC,QAAQ,CAAC;IACnB,MAAM,EAAE,CAAC,QAAQ,CAAC;IAClB,MAAM,EAAE,EAAE;CACX,CAAC;AAEF,MAAM,UAAU,aAAa,CAC3B,IAAqB,EACrB,EAAmB;IAEnB,OAAO,iBAAiB,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;AAC9C,CAAC;AAED,MAAM,UAAU,gBAAgB,CAC9B,IAAqB,EACrB,EAAmB;IAEnB,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE,EAAE,CAAC,EAAE,CAAC;QAC7B,MAAM,IAAI,KAAK,CAAC,kCAAkC,IAAI,OAAO,EAAE,EAAE,CAAC,CAAC;IACrE,CAAC;AACH,CAAC;AAED,MAAM,UAAU,yBAAyB,CAAC,KAAsB;IAC9D,OAAO,CACL,KAAK,KAAK,cAAc;QACxB,KAAK,KAAK,SAAS;QACnB,KAAK,KAAK,QAAQ;QAClB,KAAK,KAAK,QAAQ,CACnB,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,KAAsB;IACxD,OAAO,CACL,KAAK,KAAK,YAAY;QACtB,KAAK,KAAK,aAAa;QACvB,KAAK,KAAK,kBAAkB;QAC5B,KAAK,KAAK,gBAAgB;QAC1B,KAAK,KAAK,OAAO;QACjB,KAAK,KAAK,cAAc,CACzB,CAAC;AACJ,CAAC"}
@@ -0,0 +1,36 @@
1
+ /**
2
+ * Redaction-safe diagnostics (SECURITY.md): allowlisted fields only.
3
+ * Never accepts payloads, tokens, phone numbers, or authorization material.
4
+ */
5
+ import type { ConnectionState } from './connection-state.js';
6
+ /** @public */
7
+ export type DiagnosticLevel = 'debug' | 'info' | 'warn' | 'error';
8
+ /** @public */
9
+ export type DiagnosticResult = 'ok' | 'error' | 'timeout' | 'aborted' | 'rejected';
10
+ /**
11
+ * Allowlisted diagnostic event. Extra keys must never be attached by producers.
12
+ * @public
13
+ */
14
+ export type DiagnosticEvent = {
15
+ readonly level: DiagnosticLevel;
16
+ readonly code: string;
17
+ readonly connectionState: ConnectionState;
18
+ readonly requestId?: string;
19
+ readonly commandType?: string;
20
+ readonly durationMs?: number;
21
+ readonly result?: DiagnosticResult;
22
+ readonly errorCode?: string;
23
+ readonly attempt?: number;
24
+ };
25
+ /** @public */
26
+ export type DiagnosticsSink = {
27
+ readonly emit: (event: DiagnosticEvent) => void;
28
+ };
29
+ /** Recording sink for tests; still enforces the allowlist. @public */
30
+ export declare function createRecordingDiagnosticsSink(): DiagnosticsSink & {
31
+ readonly events: readonly DiagnosticEvent[];
32
+ readonly clear: () => void;
33
+ };
34
+ export declare function assertRedactionSafeDiagnostic(event: DiagnosticEvent): void;
35
+ export declare function diagnosticContainsForbiddenText(event: DiagnosticEvent, needles: readonly string[]): boolean;
36
+ //# sourceMappingURL=diagnostics.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"diagnostics.d.ts","sourceRoot":"","sources":["../../src/internal/diagnostics.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAE7D,cAAc;AACd,MAAM,MAAM,eAAe,GAAG,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC;AAElE,cAAc;AACd,MAAM,MAAM,gBAAgB,GACxB,IAAI,GACJ,OAAO,GACP,SAAS,GACT,SAAS,GACT,UAAU,CAAC;AAEf;;;GAGG;AACH,MAAM,MAAM,eAAe,GAAG;IAC5B,QAAQ,CAAC,KAAK,EAAE,eAAe,CAAC;IAChC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,eAAe,EAAE,eAAe,CAAC;IAC1C,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,MAAM,CAAC,EAAE,gBAAgB,CAAC;IACnC,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;CAC3B,CAAC;AAEF,cAAc;AACd,MAAM,MAAM,eAAe,GAAG;IAC5B,QAAQ,CAAC,IAAI,EAAE,CAAC,KAAK,EAAE,eAAe,KAAK,IAAI,CAAC;CACjD,CAAC;AAuBF,sEAAsE;AACtE,wBAAgB,8BAA8B,IAAI,eAAe,GAAG;IAClE,QAAQ,CAAC,MAAM,EAAE,SAAS,eAAe,EAAE,CAAC;IAC5C,QAAQ,CAAC,KAAK,EAAE,MAAM,IAAI,CAAC;CAC5B,CAYA;AAED,wBAAgB,6BAA6B,CAAC,KAAK,EAAE,eAAe,GAAG,IAAI,CAO1E;AAED,wBAAgB,+BAA+B,CAC7C,KAAK,EAAE,eAAe,EACtB,OAAO,EAAE,SAAS,MAAM,EAAE,GACzB,OAAO,CAGT"}
@@ -0,0 +1,51 @@
1
+ /**
2
+ * Redaction-safe diagnostics (SECURITY.md): allowlisted fields only.
3
+ * Never accepts payloads, tokens, phone numbers, or authorization material.
4
+ */
5
+ const FORBIDDEN_DIAGNOSTIC_KEYS = [
6
+ 'payload',
7
+ 'body',
8
+ 'authorization',
9
+ 'token',
10
+ 'password',
11
+ 'secret',
12
+ 'privateKey',
13
+ 'publicKey',
14
+ 'clientPublicKey',
15
+ 'signature',
16
+ 'nonce',
17
+ 'apiKey',
18
+ 'ocpAuthToken',
19
+ 'sipPassword',
20
+ 'phone',
21
+ 'destination',
22
+ 'displayName',
23
+ 'message'
24
+ ];
25
+ /** Recording sink for tests; still enforces the allowlist. @public */
26
+ export function createRecordingDiagnosticsSink() {
27
+ const events = [];
28
+ return {
29
+ events,
30
+ clear: () => {
31
+ events.length = 0;
32
+ },
33
+ emit: (event) => {
34
+ assertRedactionSafeDiagnostic(event);
35
+ events.push(Object.freeze({ ...event }));
36
+ }
37
+ };
38
+ }
39
+ export function assertRedactionSafeDiagnostic(event) {
40
+ const keys = Object.keys(event);
41
+ for (const key of keys) {
42
+ if (FORBIDDEN_DIAGNOSTIC_KEYS.includes(key)) {
43
+ throw new Error(`Forbidden diagnostic key: ${key}`);
44
+ }
45
+ }
46
+ }
47
+ export function diagnosticContainsForbiddenText(event, needles) {
48
+ const serialized = JSON.stringify(event);
49
+ return needles.some((needle) => serialized.includes(needle));
50
+ }
51
+ //# sourceMappingURL=diagnostics.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"diagnostics.js","sourceRoot":"","sources":["../../src/internal/diagnostics.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAoCH,MAAM,yBAAyB,GAAG;IAChC,SAAS;IACT,MAAM;IACN,eAAe;IACf,OAAO;IACP,UAAU;IACV,QAAQ;IACR,YAAY;IACZ,WAAW;IACX,iBAAiB;IACjB,WAAW;IACX,OAAO;IACP,QAAQ;IACR,cAAc;IACd,aAAa;IACb,OAAO;IACP,aAAa;IACb,aAAa;IACb,SAAS;CACD,CAAC;AAEX,sEAAsE;AACtE,MAAM,UAAU,8BAA8B;IAI5C,MAAM,MAAM,GAAsB,EAAE,CAAC;IACrC,OAAO;QACL,MAAM;QACN,KAAK,EAAE,GAAG,EAAE;YACV,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC;QACpB,CAAC;QACD,IAAI,EAAE,CAAC,KAAK,EAAE,EAAE;YACd,6BAA6B,CAAC,KAAK,CAAC,CAAC;YACrC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,GAAG,KAAK,EAAE,CAAC,CAAC,CAAC;QAC3C,CAAC;KACF,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,6BAA6B,CAAC,KAAsB;IAClE,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAChC,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;QACvB,IAAK,yBAA+C,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;YACnE,MAAM,IAAI,KAAK,CAAC,6BAA6B,GAAG,EAAE,CAAC,CAAC;QACtD,CAAC;IACH,CAAC;AACH,CAAC;AAED,MAAM,UAAU,+BAA+B,CAC7C,KAAsB,EACtB,OAA0B;IAE1B,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;IACzC,OAAO,OAAO,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC;AAC/D,CAAC"}
@@ -0,0 +1,23 @@
1
+ /**
2
+ * Typed public event subscriptions with sequence-gap detection.
3
+ */
4
+ import type { DiagnosticsSink } from './diagnostics.js';
5
+ import type { ConnectionState } from './connection-state.js';
6
+ import { type OmniCallEvent, type PublicEventType } from './public-event-map.js';
7
+ import type { EventMessage } from '@softomnitel/omnicall-protocol';
8
+ export type EventSubscriptionHub = {
9
+ readonly subscribe: <T extends PublicEventType>(type: T, listener: (event: Extract<OmniCallEvent, {
10
+ type: T;
11
+ }>) => void) => () => void;
12
+ readonly handleEvent: (message: EventMessage, connectionState: ConnectionState) => {
13
+ readonly gap: boolean;
14
+ };
15
+ readonly clearSequence: () => void;
16
+ readonly lastSequence: () => number | undefined;
17
+ readonly clearListeners: () => void;
18
+ };
19
+ export declare function createEventSubscriptionHub(deps: {
20
+ readonly diagnostics?: DiagnosticsSink;
21
+ readonly onSequenceGap: () => void;
22
+ }): EventSubscriptionHub;
23
+ //# sourceMappingURL=event-subscription.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"event-subscription.d.ts","sourceRoot":"","sources":["../../src/internal/event-subscription.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AACxD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAC7D,OAAO,EAEL,KAAK,aAAa,EAClB,KAAK,eAAe,EACrB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gCAAgC,CAAC;AAInE,MAAM,MAAM,oBAAoB,GAAG;IACjC,QAAQ,CAAC,SAAS,EAAE,CAAC,CAAC,SAAS,eAAe,EAC5C,IAAI,EAAE,CAAC,EACP,QAAQ,EAAE,CAAC,KAAK,EAAE,OAAO,CAAC,aAAa,EAAE;QAAE,IAAI,EAAE,CAAC,CAAA;KAAE,CAAC,KAAK,IAAI,KAC3D,MAAM,IAAI,CAAC;IAChB,QAAQ,CAAC,WAAW,EAAE,CACpB,OAAO,EAAE,YAAY,EACrB,eAAe,EAAE,eAAe,KAC7B;QAAE,QAAQ,CAAC,GAAG,EAAE,OAAO,CAAA;KAAE,CAAC;IAC/B,QAAQ,CAAC,aAAa,EAAE,MAAM,IAAI,CAAC;IACnC,QAAQ,CAAC,YAAY,EAAE,MAAM,MAAM,GAAG,SAAS,CAAC;IAChD,QAAQ,CAAC,cAAc,EAAE,MAAM,IAAI,CAAC;CACrC,CAAC;AAEF,wBAAgB,0BAA0B,CAAC,IAAI,EAAE;IAC/C,QAAQ,CAAC,WAAW,CAAC,EAAE,eAAe,CAAC;IACvC,QAAQ,CAAC,aAAa,EAAE,MAAM,IAAI,CAAC;CACpC,GAAG,oBAAoB,CAiEvB"}