miakapi 3.0.31 → 4.0.0-alpha.1

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 (124) hide show
  1. package/LICENSE +15 -0
  2. package/README.md +372 -0
  3. package/contracts/miakapp-v3.json +6 -0
  4. package/dist/access-token-provider.d.ts +8 -0
  5. package/dist/access-token-provider.d.ts.map +1 -0
  6. package/dist/access-token-provider.js +167 -0
  7. package/dist/access-token-provider.js.map +1 -0
  8. package/dist/api.d.ts +224 -0
  9. package/dist/api.d.ts.map +1 -0
  10. package/dist/api.js +47 -0
  11. package/dist/api.js.map +1 -0
  12. package/dist/browser-api.d.ts +113 -0
  13. package/dist/browser-api.d.ts.map +1 -0
  14. package/dist/browser-api.js +2 -0
  15. package/dist/browser-api.js.map +1 -0
  16. package/dist/browser-client.d.ts +3 -0
  17. package/dist/browser-client.d.ts.map +1 -0
  18. package/dist/browser-client.js +678 -0
  19. package/dist/browser-client.js.map +1 -0
  20. package/dist/browser-relay-credential-provider.d.ts +3 -0
  21. package/dist/browser-relay-credential-provider.d.ts.map +1 -0
  22. package/dist/browser-relay-credential-provider.js +243 -0
  23. package/dist/browser-relay-credential-provider.js.map +1 -0
  24. package/dist/browser.d.ts +4 -0
  25. package/dist/browser.d.ts.map +1 -0
  26. package/dist/browser.js +4 -0
  27. package/dist/browser.js.map +1 -0
  28. package/dist/coordinator.d.ts +3 -0
  29. package/dist/coordinator.d.ts.map +1 -0
  30. package/dist/coordinator.js +547 -0
  31. package/dist/coordinator.js.map +1 -0
  32. package/dist/index.d.ts +4 -0
  33. package/dist/index.d.ts.map +1 -0
  34. package/dist/index.js +4 -0
  35. package/dist/index.js.map +1 -0
  36. package/dist/internal/browser-errors.d.ts +31 -0
  37. package/dist/internal/browser-errors.d.ts.map +1 -0
  38. package/dist/internal/browser-errors.js +69 -0
  39. package/dist/internal/browser-errors.js.map +1 -0
  40. package/dist/internal/browser-socket.d.ts +8 -0
  41. package/dist/internal/browser-socket.d.ts.map +1 -0
  42. package/dist/internal/browser-socket.js +204 -0
  43. package/dist/internal/browser-socket.js.map +1 -0
  44. package/dist/internal/calls.d.ts +33 -0
  45. package/dist/internal/calls.d.ts.map +1 -0
  46. package/dist/internal/calls.js +525 -0
  47. package/dist/internal/calls.js.map +1 -0
  48. package/dist/internal/control-plane-response.d.ts +10 -0
  49. package/dist/internal/control-plane-response.d.ts.map +1 -0
  50. package/dist/internal/control-plane-response.js +283 -0
  51. package/dist/internal/control-plane-response.js.map +1 -0
  52. package/dist/internal/declarations.d.ts +88 -0
  53. package/dist/internal/declarations.d.ts.map +1 -0
  54. package/dist/internal/declarations.js +561 -0
  55. package/dist/internal/declarations.js.map +1 -0
  56. package/dist/internal/errors.d.ts +31 -0
  57. package/dist/internal/errors.d.ts.map +1 -0
  58. package/dist/internal/errors.js +72 -0
  59. package/dist/internal/errors.js.map +1 -0
  60. package/dist/internal/events.d.ts +27 -0
  61. package/dist/internal/events.d.ts.map +1 -0
  62. package/dist/internal/events.js +207 -0
  63. package/dist/internal/events.js.map +1 -0
  64. package/dist/internal/presence.d.ts +15 -0
  65. package/dist/internal/presence.d.ts.map +1 -0
  66. package/dist/internal/presence.js +99 -0
  67. package/dist/internal/presence.js.map +1 -0
  68. package/dist/internal/resources.d.ts +33 -0
  69. package/dist/internal/resources.d.ts.map +1 -0
  70. package/dist/internal/resources.js +136 -0
  71. package/dist/internal/resources.js.map +1 -0
  72. package/dist/internal/runtime.d.ts +34 -0
  73. package/dist/internal/runtime.d.ts.map +1 -0
  74. package/dist/internal/runtime.js +17 -0
  75. package/dist/internal/runtime.js.map +1 -0
  76. package/dist/internal/session.d.ts +33 -0
  77. package/dist/internal/session.d.ts.map +1 -0
  78. package/dist/internal/session.js +199 -0
  79. package/dist/internal/session.js.map +1 -0
  80. package/dist/internal/socket.d.ts +6 -0
  81. package/dist/internal/socket.d.ts.map +1 -0
  82. package/dist/internal/socket.js +176 -0
  83. package/dist/internal/socket.js.map +1 -0
  84. package/dist/internal/state.d.ts +30 -0
  85. package/dist/internal/state.d.ts.map +1 -0
  86. package/dist/internal/state.js +188 -0
  87. package/dist/internal/state.js.map +1 -0
  88. package/dist/internal/user-calls.d.ts +27 -0
  89. package/dist/internal/user-calls.d.ts.map +1 -0
  90. package/dist/internal/user-calls.js +325 -0
  91. package/dist/internal/user-calls.js.map +1 -0
  92. package/dist/internal/user-session.d.ts +36 -0
  93. package/dist/internal/user-session.d.ts.map +1 -0
  94. package/dist/internal/user-session.js +250 -0
  95. package/dist/internal/user-session.js.map +1 -0
  96. package/dist/internal/user-state.d.ts +21 -0
  97. package/dist/internal/user-state.d.ts.map +1 -0
  98. package/dist/internal/user-state.js +240 -0
  99. package/dist/internal/user-state.js.map +1 -0
  100. package/dist/internal/validation.d.ts +32 -0
  101. package/dist/internal/validation.d.ts.map +1 -0
  102. package/dist/internal/validation.js +553 -0
  103. package/dist/internal/validation.js.map +1 -0
  104. package/dist/protocol/codec.d.ts +75 -0
  105. package/dist/protocol/codec.d.ts.map +1 -0
  106. package/dist/protocol/codec.js +1091 -0
  107. package/dist/protocol/codec.js.map +1 -0
  108. package/dist/protocol/session.d.ts +14 -0
  109. package/dist/protocol/session.d.ts.map +1 -0
  110. package/dist/protocol/session.js +125 -0
  111. package/dist/protocol/session.js.map +1 -0
  112. package/dist/protocol/user-session.d.ts +14 -0
  113. package/dist/protocol/user-session.d.ts.map +1 -0
  114. package/dist/protocol/user-session.js +116 -0
  115. package/dist/protocol/user-session.js.map +1 -0
  116. package/package.json +58 -9
  117. package/.eslintrc.js +0 -16
  118. package/.gitattributes +0 -2
  119. package/main.js +0 -305
  120. package/miakode.js +0 -56
  121. package/screenshots/bigGrid.jpg +0 -0
  122. package/screenshots/formExample.jpg +0 -0
  123. package/screenshots/properties&table.jpg +0 -0
  124. package/test.js +0 -45
@@ -0,0 +1,250 @@
1
+ import { LIMITS, Opcode, } from '../protocol/codec.js';
2
+ import { UserProtocolSession } from '../protocol/user-session.js';
3
+ import { BrowserClientError, browserProtocolFailure } from './browser-errors.js';
4
+ import { childAbortController, createDeferred } from './resources.js';
5
+ const PROTOCOL_MAJOR = 1;
6
+ const PROTOCOL_MINOR = 0;
7
+ const HANDSHAKE_TIMEOUT_MS = 10_000;
8
+ function integer(value, label, minimum = 1) {
9
+ if (typeof value !== 'number' || !Number.isSafeInteger(value) || value < minimum) {
10
+ throw browserProtocolFailure(`${label} is invalid`);
11
+ }
12
+ return value;
13
+ }
14
+ function array(value, label) {
15
+ if (!Array.isArray(value))
16
+ throw browserProtocolFailure(`${label} is not an array`);
17
+ return value;
18
+ }
19
+ function bytes(value, label) {
20
+ if (!(value instanceof Uint8Array) || value.byteLength !== 16) {
21
+ throw browserProtocolFailure(`${label} is invalid`);
22
+ }
23
+ return value.slice();
24
+ }
25
+ function coordinatorStatuses(value) {
26
+ return Object.freeze(array(value, 'WELCOME.coordinators').map((raw, index) => {
27
+ const fields = array(raw, `WELCOME.coordinators[${index}]`);
28
+ const name = fields[0];
29
+ const rawStatus = fields[2];
30
+ if (typeof name !== 'string' || (rawStatus !== 1 && rawStatus !== 2)) {
31
+ throw browserProtocolFailure(`WELCOME.coordinators[${index}] is invalid`);
32
+ }
33
+ return Object.freeze({
34
+ name,
35
+ generation: integer(fields[1], `WELCOME.coordinators[${index}].generation`),
36
+ status: rawStatus === 1 ? 'connected' : 'grace',
37
+ });
38
+ }));
39
+ }
40
+ export function parseUserHomeStatus(enrolledValue, coordinatorsValue, stale) {
41
+ if (typeof enrolledValue !== 'boolean') {
42
+ throw browserProtocolFailure('HOME_STATUS.enrolled is invalid');
43
+ }
44
+ return Object.freeze({
45
+ enrolled: enrolledValue,
46
+ coordinators: coordinatorStatuses(coordinatorsValue),
47
+ stale,
48
+ });
49
+ }
50
+ function parseWelcome(frame, connectedAtMs, receivedAtMs) {
51
+ if (frame.opcode !== Opcode.Welcome)
52
+ throw browserProtocolFailure('Expected WELCOME');
53
+ const major = integer(frame.payload[0], 'WELCOME.major', 0);
54
+ const minor = integer(frame.payload[1], 'WELCOME.minor', 0);
55
+ if (major !== PROTOCOL_MAJOR || minor !== PROTOCOL_MINOR) {
56
+ throw browserProtocolFailure('WELCOME selected an unsupported protocol version');
57
+ }
58
+ const home = parseUserHomeStatus(frame.payload[4], frame.payload[5], false);
59
+ const limits = array(frame.payload[6], 'WELCOME.limits');
60
+ const frameBytes = integer(limits[0], 'WELCOME.maxFrameBytes');
61
+ const inflightCalls = integer(limits[1], 'WELCOME.maxInflightCalls');
62
+ const subscriptions = integer(limits[2], 'WELCOME.maxSubscriptions');
63
+ const queuedBytes = integer(limits[3], 'WELCOME.maxQueuedBytes');
64
+ if (frameBytes > LIMITS.frameBytes
65
+ || inflightCalls > LIMITS.inflightCalls
66
+ || subscriptions > LIMITS.subscriptions
67
+ || queuedBytes > 1_048_576) {
68
+ throw browserProtocolFailure('WELCOME limits exceed the protocol maxima');
69
+ }
70
+ const expiresAtMs = integer(frame.payload[7], 'WELCOME.expiresAtMs');
71
+ if (expiresAtMs <= receivedAtMs)
72
+ throw browserProtocolFailure('WELCOME expiry is not in the future');
73
+ return Object.freeze({
74
+ readySession: Object.freeze({
75
+ sessionId: integer(frame.payload[2], 'WELCOME.sessionId'),
76
+ connectedAtMs,
77
+ enrolled: home.enrolled,
78
+ coordinators: home.coordinators,
79
+ }),
80
+ epoch: bytes(frame.payload[3], 'WELCOME.epoch'),
81
+ expiresAtMs,
82
+ limits: Object.freeze({ frameBytes, inflightCalls, subscriptions, queuedBytes }),
83
+ });
84
+ }
85
+ export class UserRelaySession {
86
+ #callbacks;
87
+ #now;
88
+ #protocol = new UserProtocolSession();
89
+ #transportClosed = createDeferred();
90
+ #welcome = createDeferred();
91
+ #queuedFrames = [];
92
+ #queuedFrameBytes = 0;
93
+ #socket;
94
+ #closed = false;
95
+ #connectedAtMs = 0;
96
+ #welcomeValue;
97
+ #deliverFrames = false;
98
+ constructor(callbacks, now) {
99
+ this.#callbacks = callbacks;
100
+ this.#now = now;
101
+ void this.#welcome.promise.catch(() => undefined);
102
+ }
103
+ static async connect(runtime, homeId, relayUrl, token, signal, callbacks, onCreated) {
104
+ const session = new UserRelaySession(callbacks, () => runtime.now());
105
+ onCreated(session);
106
+ const handshake = childAbortController(signal);
107
+ const abortWelcome = () => session.#welcome.reject(handshake.controller.signal.reason);
108
+ handshake.controller.signal.addEventListener('abort', abortWelcome, { once: true });
109
+ const timeout = runtime.setTimer(() => {
110
+ handshake.controller.abort(new Error('Browser relay handshake timed out'));
111
+ }, HANDSHAKE_TIMEOUT_MS);
112
+ const handlers = {
113
+ message: (value) => session.#receive(value),
114
+ close: (code, reason) => session.#didClose(code, reason),
115
+ error: (error) => session.#didFail(error),
116
+ };
117
+ try {
118
+ session.#socket = await runtime.socketFactory.connect(relayUrl, handlers, handshake.controller.signal, (socket) => {
119
+ session.#socket = socket;
120
+ if (session.#closed)
121
+ socket.terminate();
122
+ });
123
+ session.#connectedAtMs = runtime.now();
124
+ await session.#socket.write(session.#protocol.encode({
125
+ opcode: Opcode.Hello,
126
+ payload: [1, 0, 0, 1, token, [homeId]],
127
+ }));
128
+ await session.#welcome.promise;
129
+ return session;
130
+ }
131
+ catch (error) {
132
+ session.terminate();
133
+ throw error;
134
+ }
135
+ finally {
136
+ timeout.cancel();
137
+ handshake.controller.signal.removeEventListener('abort', abortWelcome);
138
+ handshake.dispose();
139
+ }
140
+ }
141
+ get welcome() {
142
+ if (this.#welcomeValue === undefined)
143
+ throw new Error('User relay session is not authenticated');
144
+ return this.#welcomeValue;
145
+ }
146
+ get bufferedBytes() {
147
+ return this.#socket?.bufferedBytes ?? 0;
148
+ }
149
+ async send(frame) {
150
+ if (this.#closed || this.#socket === undefined)
151
+ throw new Error('User relay session is closed');
152
+ if (this.#socket.bufferedBytes > this.welcome.limits.queuedBytes) {
153
+ throw new RangeError('User relay session outbound queue limit exceeded');
154
+ }
155
+ const encoded = this.#protocol.encode(frame);
156
+ if (encoded.byteLength > this.welcome.limits.frameBytes
157
+ || this.#socket.bufferedBytes + encoded.byteLength > this.welcome.limits.queuedBytes) {
158
+ throw new RangeError('User relay session outbound queue limit exceeded');
159
+ }
160
+ await this.#socket.write(encoded);
161
+ }
162
+ startDelivery() {
163
+ if (this.#deliverFrames)
164
+ return;
165
+ this.#deliverFrames = true;
166
+ this.#queuedFrameBytes = 0;
167
+ for (const frame of this.#queuedFrames.splice(0)) {
168
+ if (this.#closed)
169
+ break;
170
+ this.#callbacks.frame(frame);
171
+ }
172
+ }
173
+ close() {
174
+ if (this.#closed)
175
+ return;
176
+ this.#closed = true;
177
+ this.#protocol.close();
178
+ this.#socket?.close();
179
+ }
180
+ terminate() {
181
+ if (this.#closed)
182
+ return;
183
+ this.#closed = true;
184
+ this.#protocol.close();
185
+ this.#socket?.terminate();
186
+ }
187
+ waitForTransportClose() {
188
+ return this.#socket === undefined
189
+ ? Promise.resolve()
190
+ : this.#transportClosed.promise;
191
+ }
192
+ get transportClosed() {
193
+ return this.#socket === undefined || this.#transportClosed.settled;
194
+ }
195
+ detach() {
196
+ this.#socket?.detach();
197
+ }
198
+ #receive(value) {
199
+ if (this.#closed)
200
+ return;
201
+ try {
202
+ const frame = this.#protocol.decode(value);
203
+ if (frame.opcode === Opcode.Welcome) {
204
+ if (this.#welcomeValue !== undefined)
205
+ throw browserProtocolFailure('Relay sent WELCOME twice');
206
+ this.#welcomeValue = parseWelcome(frame, this.#connectedAtMs, this.#now());
207
+ this.#welcome.resolve(this.#welcomeValue);
208
+ }
209
+ else if (!this.#welcome.settled && frame.opcode === Opcode.Fatal) {
210
+ this.#callbacks.frame(frame);
211
+ this.#welcome.reject(browserProtocolFailure('Relay sent FATAL before WELCOME'));
212
+ this.terminate();
213
+ }
214
+ else if (this.#deliverFrames) {
215
+ this.#callbacks.frame(frame);
216
+ }
217
+ else {
218
+ this.#queuedFrameBytes += value.byteLength;
219
+ if (this.#queuedFrames.length >= 256
220
+ || this.#queuedFrameBytes > this.welcome.limits.queuedBytes) {
221
+ throw browserProtocolFailure('Relay sent too many frames before session activation');
222
+ }
223
+ this.#queuedFrames.push(frame);
224
+ }
225
+ }
226
+ catch (error) {
227
+ const failure = error instanceof BrowserClientError ? error : browserProtocolFailure();
228
+ this.#welcome.reject(failure);
229
+ this.#callbacks.failed(failure);
230
+ this.terminate();
231
+ }
232
+ }
233
+ #didClose(code, reason) {
234
+ const wasClosed = this.#closed;
235
+ this.#closed = true;
236
+ this.#protocol.close();
237
+ this.#transportClosed.resolve(undefined);
238
+ this.#welcome.reject(browserProtocolFailure('Relay closed before WELCOME'));
239
+ if (!wasClosed)
240
+ this.#callbacks.closed(code, reason);
241
+ }
242
+ #didFail(error) {
243
+ if (this.#closed)
244
+ return;
245
+ this.#welcome.reject(error);
246
+ this.#callbacks.failed(error);
247
+ this.terminate();
248
+ }
249
+ }
250
+ //# sourceMappingURL=user-session.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"user-session.js","sourceRoot":"","sources":["../../src/internal/user-session.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,21 @@
1
+ import type { BrowserState, BrowserStateSnapshot } from '../browser-api.js';
2
+ import { type Frame } from '../protocol/codec.js';
3
+ export interface UserStateHost {
4
+ nextRequestId(): number;
5
+ send(frame: Frame): Promise<void>;
6
+ stateSynchronized(): void;
7
+ transportFailure(error: Error): void;
8
+ emitFailure(error: import('./browser-errors.js').BrowserClientError): void;
9
+ }
10
+ export declare class UserStateManager implements BrowserState {
11
+ #private;
12
+ constructor(host: UserStateHost);
13
+ snapshot(): BrowserStateSnapshot | undefined;
14
+ subscribe(listener: (snapshot: BrowserStateSnapshot) => void): () => void;
15
+ beginSession(epoch: Uint8Array): void;
16
+ disconnected(): void;
17
+ stop(): void;
18
+ handleFrame(frame: Frame): boolean;
19
+ handleError(requestId: number, code: number, retryable: boolean): boolean;
20
+ }
21
+ //# sourceMappingURL=user-state.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"user-state.d.ts","sourceRoot":"","sources":["../../src/internal/user-state.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,YAAY,EACZ,oBAAoB,EACrB,MAAM,mBAAmB,CAAC;AAE3B,OAAO,EAAkB,KAAK,KAAK,EAAE,MAAM,sBAAsB,CAAC;AASlE,MAAM,WAAW,aAAa;IAC5B,aAAa,IAAI,MAAM,CAAC;IACxB,IAAI,CAAC,KAAK,EAAE,KAAK,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAClC,iBAAiB,IAAI,IAAI,CAAC;IAC1B,gBAAgB,CAAC,KAAK,EAAE,KAAK,GAAG,IAAI,CAAC;IACrC,WAAW,CAAC,KAAK,EAAE,OAAO,qBAAqB,EAAE,kBAAkB,GAAG,IAAI,CAAC;CAC5E;AA6CD,qBAAa,gBAAiB,YAAW,YAAY;;IASnD,YAAY,IAAI,EAAE,aAAa,EAE9B;IAED,QAAQ,IAAI,oBAAoB,GAAG,SAAS,CAE3C;IAED,SAAS,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE,oBAAoB,KAAK,IAAI,GAAG,MAAM,IAAI,CAWxE;IAED,YAAY,CAAC,KAAK,EAAE,UAAU,GAAG,IAAI,CAKpC;IAED,YAAY,IAAI,IAAI,CASnB;IAED,IAAI,IAAI,IAAI,CAGX;IAED,WAAW,CAAC,KAAK,EAAE,KAAK,GAAG,OAAO,CAcjC;IAED,WAAW,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,GAAG,OAAO,CAKxE;CAgIF"}
@@ -0,0 +1,240 @@
1
+ import { LIMITS, Opcode } from '../protocol/codec.js';
2
+ import { browserInternalFailure, browserProtocolFailure, browserRelayFailure, } from './browser-errors.js';
3
+ import { ListenerSet } from './resources.js';
4
+ import { validateProtocolValue } from './validation.js';
5
+ function integer(value, label) {
6
+ if (typeof value !== 'number' || !Number.isSafeInteger(value) || value < 1) {
7
+ throw browserProtocolFailure(`${label} is invalid`);
8
+ }
9
+ return value;
10
+ }
11
+ function entries(value, label) {
12
+ if (!Array.isArray(value))
13
+ throw browserProtocolFailure(`${label} is not an array`);
14
+ return value;
15
+ }
16
+ function sameEpoch(left, right) {
17
+ return left !== undefined
18
+ && right instanceof Uint8Array
19
+ && right.length === left.length
20
+ && right.every((value, index) => value === left[index]);
21
+ }
22
+ function cloneValues(source) {
23
+ const output = Object.create(null);
24
+ for (const [path, value] of Object.entries(source)) {
25
+ output[path] = validateProtocolValue(value, `state.${path}`);
26
+ }
27
+ return Object.freeze(output);
28
+ }
29
+ function publicSnapshot(snapshot) {
30
+ return Object.freeze({
31
+ epoch: snapshot.epoch.slice(),
32
+ revision: snapshot.revision,
33
+ values: cloneValues(snapshot.values),
34
+ stale: snapshot.stale,
35
+ });
36
+ }
37
+ export class UserStateManager {
38
+ #host;
39
+ #listeners = new ListenerSet();
40
+ #paths = new Map();
41
+ #epoch;
42
+ #snapshot;
43
+ #dictionarySeen = false;
44
+ #pendingResync;
45
+ constructor(host) {
46
+ this.#host = host;
47
+ }
48
+ snapshot() {
49
+ return this.#snapshot === undefined ? undefined : publicSnapshot(this.#snapshot);
50
+ }
51
+ subscribe(listener) {
52
+ if (typeof listener !== 'function')
53
+ throw new TypeError('state listener must be a function');
54
+ const remove = this.#listeners.subscribe(listener);
55
+ if (this.#snapshot !== undefined) {
56
+ try {
57
+ listener(publicSnapshot(this.#snapshot));
58
+ }
59
+ catch {
60
+ this.#host.emitFailure(browserInternalFailure());
61
+ }
62
+ }
63
+ return remove;
64
+ }
65
+ beginSession(epoch) {
66
+ this.#epoch = epoch.slice();
67
+ this.#paths.clear();
68
+ this.#dictionarySeen = false;
69
+ this.#pendingResync = undefined;
70
+ }
71
+ disconnected() {
72
+ this.#epoch = undefined;
73
+ this.#paths.clear();
74
+ this.#dictionarySeen = false;
75
+ this.#pendingResync = undefined;
76
+ if (this.#snapshot !== undefined && !this.#snapshot.stale) {
77
+ this.#snapshot = Object.freeze({ ...this.#snapshot, stale: true });
78
+ this.#publish();
79
+ }
80
+ }
81
+ stop() {
82
+ this.disconnected();
83
+ this.#listeners.clear();
84
+ }
85
+ handleFrame(frame) {
86
+ if (frame.opcode === Opcode.StateDict) {
87
+ this.#handleDictionary(frame);
88
+ return true;
89
+ }
90
+ if (frame.opcode === Opcode.StateSnapshot) {
91
+ this.#handleSnapshot(frame);
92
+ return true;
93
+ }
94
+ if (frame.opcode === Opcode.StatePatch) {
95
+ this.#handlePatch(frame);
96
+ return true;
97
+ }
98
+ return false;
99
+ }
100
+ handleError(requestId, code, retryable) {
101
+ if (this.#pendingResync !== requestId)
102
+ return false;
103
+ this.#pendingResync = undefined;
104
+ this.#host.transportFailure(browserRelayFailure(code, retryable, 'not_dispatched'));
105
+ return true;
106
+ }
107
+ #handleDictionary(frame) {
108
+ if (!sameEpoch(this.#epoch, frame.payload[0])) {
109
+ throw browserProtocolFailure('STATE_DICT uses a stale epoch');
110
+ }
111
+ const replace = frame.payload[1];
112
+ if (typeof replace !== 'boolean')
113
+ throw browserProtocolFailure('STATE_DICT.replace is invalid');
114
+ if (!replace && !this.#dictionarySeen) {
115
+ throw browserProtocolFailure('STATE_DICT addition arrived before a replacement');
116
+ }
117
+ const nextPaths = replace ? new Map() : new Map(this.#paths);
118
+ const names = new Set(nextPaths.values());
119
+ for (const raw of entries(frame.payload[2], 'STATE_DICT.entries')) {
120
+ const tuple = entries(raw, 'STATE_DICT entry');
121
+ const id = integer(tuple[0], 'STATE_DICT.pathId');
122
+ const path = tuple[1];
123
+ if (typeof path !== 'string')
124
+ throw browserProtocolFailure('STATE_DICT.path is invalid');
125
+ const existing = nextPaths.get(id);
126
+ if ((existing !== undefined && existing !== path)
127
+ || (names.has(path) && existing !== path)) {
128
+ throw browserProtocolFailure('STATE_DICT reassigns an identifier');
129
+ }
130
+ if (existing === undefined && nextPaths.size >= LIMITS.statePathsPerHome) {
131
+ throw browserProtocolFailure('STATE_DICT exceeds the cumulative path limit');
132
+ }
133
+ nextPaths.set(id, path);
134
+ names.add(path);
135
+ }
136
+ this.#paths.clear();
137
+ for (const [id, path] of nextPaths)
138
+ this.#paths.set(id, path);
139
+ if (replace) {
140
+ this.#dictionarySeen = true;
141
+ if (this.#snapshot !== undefined && !this.#snapshot.stale) {
142
+ this.#snapshot = Object.freeze({ ...this.#snapshot, stale: true });
143
+ this.#publish();
144
+ }
145
+ }
146
+ }
147
+ #handleSnapshot(frame) {
148
+ const epoch = this.#epoch;
149
+ if (epoch === undefined || !sameEpoch(epoch, frame.payload[0]) || !this.#dictionarySeen) {
150
+ throw browserProtocolFailure('STATE_SNAPSHOT has no matching dictionary');
151
+ }
152
+ const revision = integer(frame.payload[1], 'STATE_SNAPSHOT.revision');
153
+ const previous = this.#snapshot;
154
+ if (previous !== undefined
155
+ && sameEpoch(previous.epoch, epoch)
156
+ && revision < previous.revision) {
157
+ throw browserProtocolFailure('STATE_SNAPSHOT rolls back the current epoch');
158
+ }
159
+ const values = Object.create(null);
160
+ for (const raw of entries(frame.payload[2], 'STATE_SNAPSHOT.entries')) {
161
+ const tuple = entries(raw, 'STATE_SNAPSHOT entry');
162
+ const path = this.#paths.get(integer(tuple[0], 'STATE_SNAPSHOT.pathId'));
163
+ if (path === undefined || Object.hasOwn(values, path)) {
164
+ throw browserProtocolFailure('STATE_SNAPSHOT references an unknown or duplicate path');
165
+ }
166
+ values[path] = validateProtocolValue(tuple[1], `state.${path}`);
167
+ }
168
+ this.#pendingResync = undefined;
169
+ this.#snapshot = Object.freeze({
170
+ epoch: epoch.slice(),
171
+ revision,
172
+ values: Object.freeze(values),
173
+ stale: false,
174
+ });
175
+ this.#publish();
176
+ this.#host.stateSynchronized();
177
+ }
178
+ #handlePatch(frame) {
179
+ const snapshot = this.#snapshot;
180
+ if (snapshot === undefined
181
+ || snapshot.stale
182
+ || !sameEpoch(this.#epoch, frame.payload[0])
183
+ || integer(frame.payload[1], 'STATE_PATCH.baseRevision') !== snapshot.revision) {
184
+ this.#requestResync();
185
+ return;
186
+ }
187
+ const revision = integer(frame.payload[2], 'STATE_PATCH.revision');
188
+ if (revision <= snapshot.revision) {
189
+ this.#requestResync();
190
+ return;
191
+ }
192
+ const values = Object.create(null);
193
+ for (const [path, value] of Object.entries(snapshot.values))
194
+ values[path] = value;
195
+ for (const raw of entries(frame.payload[3], 'STATE_PATCH.mutations')) {
196
+ const tuple = entries(raw, 'STATE_PATCH mutation');
197
+ const path = this.#paths.get(integer(tuple[0], 'STATE_PATCH.pathId'));
198
+ if (path === undefined) {
199
+ this.#requestResync();
200
+ return;
201
+ }
202
+ if (tuple[1] === 0)
203
+ values[path] = validateProtocolValue(tuple[2], `state.${path}`);
204
+ else if (tuple[1] === 1)
205
+ delete values[path];
206
+ else
207
+ throw browserProtocolFailure('STATE_PATCH mutation kind is invalid');
208
+ }
209
+ this.#snapshot = Object.freeze({
210
+ epoch: snapshot.epoch,
211
+ revision,
212
+ values: Object.freeze(values),
213
+ stale: false,
214
+ });
215
+ this.#publish();
216
+ }
217
+ #requestResync() {
218
+ if (this.#snapshot !== undefined && !this.#snapshot.stale) {
219
+ this.#snapshot = Object.freeze({ ...this.#snapshot, stale: true });
220
+ this.#publish();
221
+ }
222
+ if (this.#pendingResync !== undefined)
223
+ return;
224
+ const requestId = this.#host.nextRequestId();
225
+ this.#pendingResync = requestId;
226
+ void this.#host.send({ opcode: Opcode.StateResync, payload: [requestId] }).catch(() => {
227
+ if (this.#pendingResync !== requestId)
228
+ return;
229
+ this.#pendingResync = undefined;
230
+ this.#host.transportFailure(browserProtocolFailure('STATE_RESYNC transport failed'));
231
+ });
232
+ }
233
+ #publish() {
234
+ if (this.#snapshot === undefined)
235
+ return;
236
+ const value = publicSnapshot(this.#snapshot);
237
+ this.#listeners.emit(value, () => this.#host.emitFailure(browserInternalFailure()));
238
+ }
239
+ }
240
+ //# sourceMappingURL=user-state.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"user-state.js","sourceRoot":"","sources":["../../src/internal/user-state.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,MAAM,EAAE,MAAM,EAAc,MAAM,sBAAsB,CAAC;AAClE,OAAO,EACL,sBAAsB,EACtB,sBAAsB,EACtB,mBAAmB,GACpB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC7C,OAAO,EAAE,qBAAqB,EAAE,MAAM,iBAAiB,CAAC;AAiBxD,SAAS,OAAO,CAAC,KAAgC,EAAE,KAAa;IAC9D,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC,IAAI,KAAK,GAAG,CAAC,EAAE,CAAC;QAC3E,MAAM,sBAAsB,CAAC,GAAG,KAAK,aAAa,CAAC,CAAC;IACtD,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,OAAO,CAAC,KAAgC,EAAE,KAAa;IAC9D,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QAAE,MAAM,sBAAsB,CAAC,GAAG,KAAK,kBAAkB,CAAC,CAAC;IACpF,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,SAAS,CAAC,IAA4B,EAAE,KAAgC;IAC/E,OAAO,IAAI,KAAK,SAAS;WACpB,KAAK,YAAY,UAAU;WAC3B,KAAK,CAAC,MAAM,KAAK,IAAI,CAAC,MAAM;WAC5B,KAAK,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE,CAAC,KAAK,KAAK,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;AAC5D,CAAC;AAED,SAAS,WAAW,CAAC,MAA+C;IAClE,MAAM,MAAM,GAAkC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IAClE,KAAK,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;QACnD,MAAM,CAAC,IAAI,CAAC,GAAG,qBAAqB,CAAC,KAAK,EAAE,SAAS,IAAI,EAAE,CAAC,CAAC;IAC/D,CAAC;IACD,OAAO,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;AAC/B,CAAC;AAED,SAAS,cAAc,CAAC,QAA0B;IAChD,OAAO,MAAM,CAAC,MAAM,CAAC;QACnB,KAAK,EAAE,QAAQ,CAAC,KAAK,CAAC,KAAK,EAAE;QAC7B,QAAQ,EAAE,QAAQ,CAAC,QAAQ;QAC3B,MAAM,EAAE,WAAW,CAAC,QAAQ,CAAC,MAAM,CAAC;QACpC,KAAK,EAAE,QAAQ,CAAC,KAAK;KACtB,CAAC,CAAC;AACL,CAAC;AAED,MAAM,OAAO,gBAAgB;IAClB,KAAK,CAAgB;IACrB,UAAU,GAAG,IAAI,WAAW,EAAwB,CAAC;IACrD,MAAM,GAAG,IAAI,GAAG,EAAkB,CAAC;IAC5C,MAAM,CAAyB;IAC/B,SAAS,CAA+B;IACxC,eAAe,GAAG,KAAK,CAAC;IACxB,cAAc,CAAqB;IAEnC,YAAY,IAAmB;QAC7B,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;IACpB,CAAC;IAED,QAAQ;QACN,OAAO,IAAI,CAAC,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,cAAc,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IACnF,CAAC;IAED,SAAS,CAAC,QAAkD;QAC1D,IAAI,OAAO,QAAQ,KAAK,UAAU;YAAE,MAAM,IAAI,SAAS,CAAC,mCAAmC,CAAC,CAAC;QAC7F,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;QACnD,IAAI,IAAI,CAAC,SAAS,KAAK,SAAS,EAAE,CAAC;YACjC,IAAI,CAAC;gBACH,QAAQ,CAAC,cAAc,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC;YAC3C,CAAC;YAAC,MAAM,CAAC;gBACP,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,sBAAsB,EAAE,CAAC,CAAC;YACnD,CAAC;QACH,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,YAAY,CAAC,KAAiB;QAC5B,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC,KAAK,EAAE,CAAC;QAC5B,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;QACpB,IAAI,CAAC,eAAe,GAAG,KAAK,CAAC;QAC7B,IAAI,CAAC,cAAc,GAAG,SAAS,CAAC;IAClC,CAAC;IAED,YAAY;QACV,IAAI,CAAC,MAAM,GAAG,SAAS,CAAC;QACxB,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;QACpB,IAAI,CAAC,eAAe,GAAG,KAAK,CAAC;QAC7B,IAAI,CAAC,cAAc,GAAG,SAAS,CAAC;QAChC,IAAI,IAAI,CAAC,SAAS,KAAK,SAAS,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC;YAC1D,IAAI,CAAC,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC,EAAE,GAAG,IAAI,CAAC,SAAS,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;YACnE,IAAI,CAAC,QAAQ,EAAE,CAAC;QAClB,CAAC;IACH,CAAC;IAED,IAAI;QACF,IAAI,CAAC,YAAY,EAAE,CAAC;QACpB,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC;IAC1B,CAAC;IAED,WAAW,CAAC,KAAY;QACtB,IAAI,KAAK,CAAC,MAAM,KAAK,MAAM,CAAC,SAAS,EAAE,CAAC;YACtC,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC;YAC9B,OAAO,IAAI,CAAC;QACd,CAAC;QACD,IAAI,KAAK,CAAC,MAAM,KAAK,MAAM,CAAC,aAAa,EAAE,CAAC;YAC1C,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC;YAC5B,OAAO,IAAI,CAAC;QACd,CAAC;QACD,IAAI,KAAK,CAAC,MAAM,KAAK,MAAM,CAAC,UAAU,EAAE,CAAC;YACvC,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;YACzB,OAAO,IAAI,CAAC;QACd,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IAED,WAAW,CAAC,SAAiB,EAAE,IAAY,EAAE,SAAkB;QAC7D,IAAI,IAAI,CAAC,cAAc,KAAK,SAAS;YAAE,OAAO,KAAK,CAAC;QACpD,IAAI,CAAC,cAAc,GAAG,SAAS,CAAC;QAChC,IAAI,CAAC,KAAK,CAAC,gBAAgB,CAAC,mBAAmB,CAAC,IAAI,EAAE,SAAS,EAAE,gBAAgB,CAAC,CAAC,CAAC;QACpF,OAAO,IAAI,CAAC;IACd,CAAC;IAED,iBAAiB,CAAC,KAAY;QAC5B,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YAC9C,MAAM,sBAAsB,CAAC,+BAA+B,CAAC,CAAC;QAChE,CAAC;QACD,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;QACjC,IAAI,OAAO,OAAO,KAAK,SAAS;YAAE,MAAM,sBAAsB,CAAC,+BAA+B,CAAC,CAAC;QAChG,IAAI,CAAC,OAAO,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE,CAAC;YACtC,MAAM,sBAAsB,CAAC,kDAAkD,CAAC,CAAC;QACnF,CAAC;QACD,MAAM,SAAS,GAAG,OAAO,CAAC,CAAC,CAAC,IAAI,GAAG,EAAkB,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAC7E,MAAM,KAAK,GAAG,IAAI,GAAG,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC,CAAC;QAC1C,KAAK,MAAM,GAAG,IAAI,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,oBAAoB,CAAC,EAAE,CAAC;YAClE,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,EAAE,kBAAkB,CAAC,CAAC;YAC/C,MAAM,EAAE,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,mBAAmB,CAAC,CAAC;YAClD,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;YACtB,IAAI,OAAO,IAAI,KAAK,QAAQ;gBAAE,MAAM,sBAAsB,CAAC,4BAA4B,CAAC,CAAC;YACzF,MAAM,QAAQ,GAAG,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YACnC,IAAI,CAAC,QAAQ,KAAK,SAAS,IAAI,QAAQ,KAAK,IAAI,CAAC;mBAC5C,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,QAAQ,KAAK,IAAI,CAAC,EAAE,CAAC;gBAC5C,MAAM,sBAAsB,CAAC,oCAAoC,CAAC,CAAC;YACrE,CAAC;YACD,IAAI,QAAQ,KAAK,SAAS,IAAI,SAAS,CAAC,IAAI,IAAI,MAAM,CAAC,iBAAiB,EAAE,CAAC;gBACzE,MAAM,sBAAsB,CAAC,8CAA8C,CAAC,CAAC;YAC/E,CAAC;YACD,SAAS,CAAC,GAAG,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;YACxB,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAClB,CAAC;QACD,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;QACpB,KAAK,MAAM,CAAC,EAAE,EAAE,IAAI,CAAC,IAAI,SAAS;YAAE,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;QAC9D,IAAI,OAAO,EAAE,CAAC;YACZ,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC;YAC5B,IAAI,IAAI,CAAC,SAAS,KAAK,SAAS,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC;gBAC1D,IAAI,CAAC,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC,EAAE,GAAG,IAAI,CAAC,SAAS,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;gBACnE,IAAI,CAAC,QAAQ,EAAE,CAAC;YAClB,CAAC;QACH,CAAC;IACH,CAAC;IAED,eAAe,CAAC,KAAY;QAC1B,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC;QAC1B,IAAI,KAAK,KAAK,SAAS,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE,CAAC;YACxF,MAAM,sBAAsB,CAAC,2CAA2C,CAAC,CAAC;QAC5E,CAAC;QACD,MAAM,QAAQ,GAAG,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,yBAAyB,CAAC,CAAC;QACtE,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC;QAChC,IAAI,QAAQ,KAAK,SAAS;eACrB,SAAS,CAAC,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC;eAChC,QAAQ,GAAG,QAAQ,CAAC,QAAQ,EAAE,CAAC;YAClC,MAAM,sBAAsB,CAAC,6CAA6C,CAAC,CAAC;QAC9E,CAAC;QACD,MAAM,MAAM,GAAkC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QAClE,KAAK,MAAM,GAAG,IAAI,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,wBAAwB,CAAC,EAAE,CAAC;YACtE,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,EAAE,sBAAsB,CAAC,CAAC;YACnD,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,uBAAuB,CAAC,CAAC,CAAC;YACzE,IAAI,IAAI,KAAK,SAAS,IAAI,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,EAAE,CAAC;gBACtD,MAAM,sBAAsB,CAAC,wDAAwD,CAAC,CAAC;YACzF,CAAC;YACD,MAAM,CAAC,IAAI,CAAC,GAAG,qBAAqB,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,SAAS,IAAI,EAAE,CAAC,CAAC;QAClE,CAAC;QACD,IAAI,CAAC,cAAc,GAAG,SAAS,CAAC;QAChC,IAAI,CAAC,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC;YAC7B,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE;YACpB,QAAQ;YACR,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC;YAC7B,KAAK,EAAE,KAAK;SACb,CAAC,CAAC;QACH,IAAI,CAAC,QAAQ,EAAE,CAAC;QAChB,IAAI,CAAC,KAAK,CAAC,iBAAiB,EAAE,CAAC;IACjC,CAAC;IAED,YAAY,CAAC,KAAY;QACvB,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC;QAChC,IAAI,QAAQ,KAAK,SAAS;eACrB,QAAQ,CAAC,KAAK;eACd,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;eACzC,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,0BAA0B,CAAC,KAAK,QAAQ,CAAC,QAAQ,EAAE,CAAC;YACjF,IAAI,CAAC,cAAc,EAAE,CAAC;YACtB,OAAO;QACT,CAAC;QACD,MAAM,QAAQ,GAAG,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,sBAAsB,CAAC,CAAC;QACnE,IAAI,QAAQ,IAAI,QAAQ,CAAC,QAAQ,EAAE,CAAC;YAClC,IAAI,CAAC,cAAc,EAAE,CAAC;YACtB,OAAO;QACT,CAAC;QACD,MAAM,MAAM,GAAkC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QAClE,KAAK,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC;YAAE,MAAM,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC;QAClF,KAAK,MAAM,GAAG,IAAI,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,uBAAuB,CAAC,EAAE,CAAC;YACrE,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,EAAE,sBAAsB,CAAC,CAAC;YACnD,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,oBAAoB,CAAC,CAAC,CAAC;YACtE,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;gBACvB,IAAI,CAAC,cAAc,EAAE,CAAC;gBACtB,OAAO;YACT,CAAC;YACD,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC;gBAAE,MAAM,CAAC,IAAI,CAAC,GAAG,qBAAqB,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,SAAS,IAAI,EAAE,CAAC,CAAC;iBAC/E,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC;gBAAE,OAAO,MAAM,CAAC,IAAI,CAAC,CAAC;;gBACxC,MAAM,sBAAsB,CAAC,sCAAsC,CAAC,CAAC;QAC5E,CAAC;QACD,IAAI,CAAC,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC;YAC7B,KAAK,EAAE,QAAQ,CAAC,KAAK;YACrB,QAAQ;YACR,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC;YAC7B,KAAK,EAAE,KAAK;SACb,CAAC,CAAC;QACH,IAAI,CAAC,QAAQ,EAAE,CAAC;IAClB,CAAC;IAED,cAAc;QACZ,IAAI,IAAI,CAAC,SAAS,KAAK,SAAS,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC;YAC1D,IAAI,CAAC,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC,EAAE,GAAG,IAAI,CAAC,SAAS,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;YACnE,IAAI,CAAC,QAAQ,EAAE,CAAC;QAClB,CAAC;QACD,IAAI,IAAI,CAAC,cAAc,KAAK,SAAS;YAAE,OAAO;QAC9C,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,aAAa,EAAE,CAAC;QAC7C,IAAI,CAAC,cAAc,GAAG,SAAS,CAAC;QAChC,KAAK,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,WAAW,EAAE,OAAO,EAAE,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE;YACpF,IAAI,IAAI,CAAC,cAAc,KAAK,SAAS;gBAAE,OAAO;YAC9C,IAAI,CAAC,cAAc,GAAG,SAAS,CAAC;YAChC,IAAI,CAAC,KAAK,CAAC,gBAAgB,CAAC,sBAAsB,CAAC,+BAA+B,CAAC,CAAC,CAAC;QACvF,CAAC,CAAC,CAAC;IACL,CAAC;IAED,QAAQ;QACN,IAAI,IAAI,CAAC,SAAS,KAAK,SAAS;YAAE,OAAO;QACzC,MAAM,KAAK,GAAG,cAAc,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAC7C,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,sBAAsB,EAAE,CAAC,CAAC,CAAC;IACtF,CAAC;CACF"}
@@ -0,0 +1,32 @@
1
+ import type { AccessToken, CallTarget, CoordinatorConfiguration, CoordinatorOptions, EventDeclaration, EventTarget, FunctionHandler, ProtocolValue, StartCallOptions, StateMutation, UserEventAccess, UserStateAccess } from '../api.js';
2
+ import type { BrowserCallOptions, BrowserClientOptions, BrowserRelayCredential } from '../browser-api.js';
3
+ export declare function validateCoordinatorName(value: unknown, label?: string): string;
4
+ export declare function validateStructuredName(value: unknown, label: string): string;
5
+ export declare function validatePattern(value: unknown, label: string): string;
6
+ export declare function validateProtocolValue(value: unknown, label?: string): ProtocolValue;
7
+ export declare function validateStateEntries(value: unknown): Readonly<Record<string, ProtocolValue>>;
8
+ export declare function validateStateMutations(value: unknown): readonly StateMutation[];
9
+ export declare function validateStateAccess(value: unknown): readonly UserStateAccess[];
10
+ export declare function validateEventAccess(value: unknown): readonly UserEventAccess[];
11
+ export declare function validateEventDeclarations(value: unknown): readonly EventDeclaration[];
12
+ export declare function validateFunctions(value: unknown): Readonly<Record<string, FunctionHandler>>;
13
+ export declare function validateConfiguration(value: unknown): CoordinatorConfiguration;
14
+ export declare function validateCoordinatorOptions(value: unknown): CoordinatorOptions;
15
+ export declare function validateAccessToken(value: unknown, now: number): AccessToken;
16
+ export declare function validateRelayUrl(value: unknown, label?: string): string;
17
+ export declare function validateBrowserRelayCredential(value: unknown, now: number): BrowserRelayCredential;
18
+ export declare function validateBrowserClientOptions(value: unknown): BrowserClientOptions;
19
+ export declare function validateBrowserCallOptions(value: unknown): BrowserCallOptions;
20
+ export declare function validateEventTarget(value: unknown): EventTarget;
21
+ export declare function validateStartCallOptions(value: unknown): StartCallOptions;
22
+ export declare function validateSignal(value: unknown, label: string): AbortSignal | undefined;
23
+ export declare function validateStartOptions(value: unknown): AbortSignal | undefined;
24
+ export declare function validateStopOptions(value: unknown): number;
25
+ export declare function validateDeclarationOptions(value: unknown, label: string): AbortSignal | undefined;
26
+ export declare function validateOperationOptions(value: unknown, label: string): AbortSignal | undefined;
27
+ export declare function validateEventPublishOptions(value: unknown): {
28
+ signal?: AbortSignal;
29
+ target?: EventTarget;
30
+ };
31
+ export declare function targetFields(target: EventTarget | CallTarget | undefined): [number, ProtocolValue];
32
+ //# sourceMappingURL=validation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validation.d.ts","sourceRoot":"","sources":["../../src/internal/validation.ts"],"names":[],"mappings":"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"}