miakapi 3.0.3-DEV → 4.0.0-alpha.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 (124) hide show
  1. package/LICENSE +15 -0
  2. package/README.md +358 -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 +544 -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 +62 -0
  53. package/dist/internal/declarations.d.ts.map +1 -0
  54. package/dist/internal/declarations.js +427 -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 +21 -0
  85. package/dist/internal/state.d.ts.map +1 -0
  86. package/dist/internal/state.js +133 -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 -10
  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,525 @@
1
+ import { ApplicationCallError } from '../api.js';
2
+ import { LIMITS, Opcode } from '../protocol/codec.js';
3
+ import { cancelled, outcomeUnknown, relayFailure, safeLog, unavailable, } from './errors.js';
4
+ import { AsyncValueQueue, createDeferred, } from './resources.js';
5
+ import { targetFields, validateDeclarationOptions, validateFunctions, validateProtocolValue, validateStartCallOptions, } from './validation.js';
6
+ function numeric(value, label) {
7
+ if (typeof value !== 'number' || !Number.isSafeInteger(value)) {
8
+ throw new TypeError(`${label} is not an integer`);
9
+ }
10
+ return value;
11
+ }
12
+ function nullableString(value, label) {
13
+ if (value !== null && typeof value !== 'string')
14
+ throw new TypeError(`${label} is invalid`);
15
+ return value;
16
+ }
17
+ function principal(value) {
18
+ if (!Array.isArray(value))
19
+ throw new TypeError('CALL_DISPATCH source is invalid');
20
+ const kind = value[0] === 1 ? 'user' : value[0] === 2 ? 'coordinator' : value[0] === 3 ? 'cli' : undefined;
21
+ const id = value[1];
22
+ const sessionId = value[2];
23
+ const coordinatorName = value[3];
24
+ const verifiedEmail = value[4];
25
+ if (kind === undefined
26
+ || typeof id !== 'string'
27
+ || typeof sessionId !== 'number'
28
+ || !Number.isSafeInteger(sessionId)
29
+ || (coordinatorName !== null && typeof coordinatorName !== 'string')
30
+ || (verifiedEmail !== null && typeof verifiedEmail !== 'string')) {
31
+ throw new TypeError('CALL_DISPATCH source is invalid');
32
+ }
33
+ return Object.freeze({ kind, id, sessionId, coordinatorName, verifiedEmail });
34
+ }
35
+ function functionForId(active, id) {
36
+ for (const [name, functionId] of active.functionIds) {
37
+ if (functionId !== id)
38
+ continue;
39
+ const handler = active.snapshot.functions[name];
40
+ if (handler !== undefined)
41
+ return { name, handler };
42
+ }
43
+ return undefined;
44
+ }
45
+ export class FunctionManager {
46
+ #declarations;
47
+ constructor(declarations) {
48
+ this.#declarations = declarations;
49
+ }
50
+ declare(handlers, options = {}) {
51
+ return this.#declarations.declareFunctions(validateFunctions(handlers), validateDeclarationOptions(options, 'function declaration'));
52
+ }
53
+ }
54
+ export class CallManager {
55
+ #host;
56
+ #outgoing = new Map();
57
+ #incoming = new Map();
58
+ #completedIncoming = new Set();
59
+ #functionIds = new Map();
60
+ #epoch;
61
+ constructor(host) {
62
+ this.#host = host;
63
+ }
64
+ start(rawOptions) {
65
+ const options = validateStartCallOptions(rawOptions);
66
+ const localId = `call:${this.#host.nextLocalCallId()}`;
67
+ const accepted = createDeferred();
68
+ const result = createDeferred();
69
+ void accepted.promise.catch(() => undefined);
70
+ void result.promise.catch(() => undefined);
71
+ const inactiveStream = new AsyncValueQueue();
72
+ const inactiveHandle = Object.freeze({
73
+ localId,
74
+ accepted: accepted.promise,
75
+ stream: inactiveStream,
76
+ result: result.promise,
77
+ cancel() { },
78
+ });
79
+ if (options.signal?.aborted === true) {
80
+ const failure = cancelled('not_dispatched');
81
+ accepted.reject(failure);
82
+ result.reject(failure);
83
+ inactiveStream.fail(failure);
84
+ return inactiveHandle;
85
+ }
86
+ const session = this.#host.readySession();
87
+ const active = this.#host.activeDeclarations();
88
+ const functionId = this.#functionIds.get(options.function)
89
+ ?? active?.functionIds.get(options.function);
90
+ if (session === undefined || active === undefined || functionId === undefined) {
91
+ const failure = unavailable('Call target function is not available in a ready session');
92
+ accepted.reject(failure);
93
+ result.reject(failure);
94
+ inactiveStream.fail(failure);
95
+ return inactiveHandle;
96
+ }
97
+ if (this.#outgoing.size >= session.welcome.limits.inflightCalls) {
98
+ const failure = unavailable('Call concurrency limit is reached');
99
+ accepted.reject(failure);
100
+ result.reject(failure);
101
+ inactiveStream.fail(failure);
102
+ return inactiveHandle;
103
+ }
104
+ const id = this.#host.nextCallId();
105
+ const timer = this.#host.runtime().setTimer(() => {
106
+ this.#cancelOutgoing(id, 1403, 'Call deadline expired', false);
107
+ }, options.timeoutMs);
108
+ const creditedStream = new AsyncValueQueue(() => this.#grantCredit(id));
109
+ const pending = {
110
+ id,
111
+ localId,
112
+ session,
113
+ accepted,
114
+ result,
115
+ stream: creditedStream,
116
+ handedOff: false,
117
+ wasAccepted: false,
118
+ terminal: false,
119
+ cancellationRequested: false,
120
+ credit: 1,
121
+ timer,
122
+ };
123
+ if (options.signal !== undefined) {
124
+ const abort = () => this.#cancelOutgoing(id, 1405, 'Call was aborted', true);
125
+ pending.signal = options.signal;
126
+ pending.abort = abort;
127
+ options.signal.addEventListener('abort', abort, { once: true });
128
+ }
129
+ this.#outgoing.set(id, pending);
130
+ const returnedHandle = Object.freeze({
131
+ localId,
132
+ accepted: accepted.promise,
133
+ stream: creditedStream,
134
+ result: result.promise,
135
+ cancel: (reason) => {
136
+ if (reason !== undefined && typeof reason !== 'string') {
137
+ throw new TypeError('Call cancellation reason must be a string');
138
+ }
139
+ this.#cancelOutgoing(id, 1405, 'Call was cancelled', true);
140
+ },
141
+ });
142
+ const [targetKind, targetValue] = targetFields(options.target);
143
+ queueMicrotask(() => {
144
+ if (pending.terminal)
145
+ return;
146
+ pending.handedOff = true;
147
+ void session.send({
148
+ opcode: Opcode.Call,
149
+ payload: [
150
+ id,
151
+ targetKind,
152
+ targetValue,
153
+ functionId,
154
+ options.timeoutMs,
155
+ options.idempotencyKey ?? null,
156
+ 1,
157
+ options.arguments,
158
+ ],
159
+ }).then(() => undefined, () => {
160
+ if (this.#outgoing.get(id) !== pending)
161
+ return;
162
+ this.#terminalOutgoing(pending, unavailable('Call was not handed to the transport'));
163
+ });
164
+ });
165
+ return returnedHandle;
166
+ }
167
+ setActiveDeclarations(active) {
168
+ this.#functionIds.clear();
169
+ for (const [name, id] of active.functionIds)
170
+ this.#functionIds.set(name, id);
171
+ this.#epoch = this.#host.currentSession()?.welcome.epoch.slice();
172
+ }
173
+ handleFrame(frame) {
174
+ if (frame.opcode === Opcode.FunctionDict) {
175
+ this.#handleFunctionDictionary(frame);
176
+ return true;
177
+ }
178
+ if (frame.opcode === Opcode.CallDispatch) {
179
+ this.#startIncoming(frame);
180
+ return true;
181
+ }
182
+ if (frame.opcode === Opcode.CallAccepted) {
183
+ const call = this.#outgoingCall(frame);
184
+ if (call.wasAccepted)
185
+ throw new TypeError('CALL_ACCEPTED was duplicated');
186
+ call.wasAccepted = true;
187
+ call.accepted.resolve();
188
+ return true;
189
+ }
190
+ if (frame.opcode === Opcode.CallResult) {
191
+ const call = this.#outgoingCall(frame);
192
+ if (!call.wasAccepted)
193
+ throw new TypeError('CALL_RESULT arrived before CALL_ACCEPTED');
194
+ const final = frame.payload[1];
195
+ const value = validateProtocolValue(frame.payload[2], 'call result');
196
+ if (final === true) {
197
+ call.result.resolve(value);
198
+ call.stream.close();
199
+ this.#finishOutgoing(call);
200
+ }
201
+ else if (final === false) {
202
+ if (call.credit < 1)
203
+ throw new TypeError('CALL_RESULT exceeded stream credit');
204
+ call.credit -= 1;
205
+ if (!call.stream.push(value))
206
+ throw new TypeError('CALL_RESULT followed a terminal frame');
207
+ }
208
+ else {
209
+ throw new TypeError('CALL_RESULT final flag is invalid');
210
+ }
211
+ return true;
212
+ }
213
+ if (frame.opcode === Opcode.CallError) {
214
+ const call = this.#outgoingCall(frame);
215
+ const code = numeric(frame.payload[1], 'CALL_ERROR.code');
216
+ const retryable = frame.payload[2];
217
+ if (typeof retryable !== 'boolean')
218
+ throw new TypeError('CALL_ERROR.retryable is invalid');
219
+ const outcome = code === 1404 || (code === 1405 && call.wasAccepted)
220
+ ? 'outcome_unknown'
221
+ : call.wasAccepted
222
+ ? 'accepted'
223
+ : 'not_dispatched';
224
+ const failure = relayFailure(code, retryable, outcome, {
225
+ kind: 'call',
226
+ localId: call.localId,
227
+ });
228
+ this.#terminalOutgoing(call, failure);
229
+ this.#host.emitFailure(failure);
230
+ return true;
231
+ }
232
+ if (frame.opcode === Opcode.CallCancel) {
233
+ const id = numeric(frame.payload[0], 'CALL_CANCEL.callId');
234
+ const incoming = this.#incoming.get(id);
235
+ if (incoming === undefined)
236
+ throw new TypeError('CALL_CANCEL is not correlated');
237
+ this.#finishIncoming(incoming, cancelled('outcome_unknown'));
238
+ return true;
239
+ }
240
+ if (frame.opcode === Opcode.CallCredit) {
241
+ const id = numeric(frame.payload[0], 'CALL_CREDIT.callId');
242
+ const additional = numeric(frame.payload[1], 'CALL_CREDIT.additionalCredit');
243
+ const incoming = this.#incoming.get(id);
244
+ if (incoming === undefined)
245
+ throw new TypeError('CALL_CREDIT is not correlated');
246
+ if (incoming.credit + additional > LIMITS.streamCredit) {
247
+ throw new TypeError('CALL_CREDIT exceeds the credit limit');
248
+ }
249
+ incoming.credit += additional;
250
+ incoming.creditWaiter?.resolve();
251
+ incoming.creditWaiter = undefined;
252
+ return true;
253
+ }
254
+ return false;
255
+ }
256
+ handleError(id, code, retryable) {
257
+ const call = this.#outgoing.get(id);
258
+ if (call === undefined || call.terminal)
259
+ return false;
260
+ const outcome = code === 1404 || (code === 1405 && call.wasAccepted)
261
+ ? 'outcome_unknown'
262
+ : call.wasAccepted
263
+ ? 'accepted'
264
+ : 'not_dispatched';
265
+ const failure = relayFailure(code, retryable, outcome, {
266
+ kind: 'call',
267
+ localId: call.localId,
268
+ });
269
+ this.#terminalOutgoing(call, failure);
270
+ this.#host.emitFailure(failure);
271
+ return true;
272
+ }
273
+ handleResponseError(id, code, retryable) {
274
+ const route = this.#incoming.get(id);
275
+ if (route === undefined && !this.#completedIncoming.delete(id))
276
+ return false;
277
+ const failure = relayFailure(code, retryable, 'outcome_unknown');
278
+ if (route !== undefined) {
279
+ this.#completedIncoming.delete(id);
280
+ if (route.terminal) {
281
+ route.controller.abort(failure);
282
+ this.#removeIncoming(route);
283
+ }
284
+ else {
285
+ this.#finishIncoming(route, failure);
286
+ }
287
+ }
288
+ this.#host.emitFailure(failure);
289
+ return true;
290
+ }
291
+ disconnected() {
292
+ for (const call of [...this.#outgoing.values()]) {
293
+ this.#terminalOutgoing(call, call.handedOff ? outcomeUnknown() : unavailable());
294
+ }
295
+ for (const route of [...this.#incoming.values()]) {
296
+ this.#finishIncoming(route, outcomeUnknown());
297
+ }
298
+ this.#functionIds.clear();
299
+ this.#completedIncoming.clear();
300
+ this.#epoch = undefined;
301
+ }
302
+ stop() {
303
+ for (const call of [...this.#outgoing.values()]) {
304
+ if (call.handedOff && !call.terminal) {
305
+ void call.session.send({ opcode: Opcode.CallCancel, payload: [call.id, 1405] });
306
+ }
307
+ this.#terminalOutgoing(call, call.handedOff ? outcomeUnknown() : cancelled('not_dispatched'));
308
+ }
309
+ for (const route of [...this.#incoming.values()]) {
310
+ this.#finishIncoming(route, cancelled('outcome_unknown'));
311
+ }
312
+ this.#completedIncoming.clear();
313
+ }
314
+ #outgoingCall(frame) {
315
+ const id = numeric(frame.payload[0], 'callId');
316
+ const call = this.#outgoing.get(id);
317
+ if (call === undefined || call.terminal)
318
+ throw new TypeError('Call frame is not correlated');
319
+ return call;
320
+ }
321
+ #handleFunctionDictionary(frame) {
322
+ const epoch = frame.payload[0];
323
+ const replace = frame.payload[1];
324
+ const entries = frame.payload[2];
325
+ if (!(epoch instanceof Uint8Array)
326
+ || (replace !== true && replace !== false)
327
+ || !Array.isArray(entries)) {
328
+ throw new TypeError('FUNCTION_DICT is invalid');
329
+ }
330
+ if (this.#epoch !== undefined
331
+ && (epoch.length !== this.#epoch.length
332
+ || epoch.some((value, index) => value !== this.#epoch?.[index]))) {
333
+ throw new TypeError('FUNCTION_DICT uses a stale epoch');
334
+ }
335
+ if (replace)
336
+ this.#functionIds.clear();
337
+ for (const raw of entries) {
338
+ if (!Array.isArray(raw) || typeof raw[0] !== 'number' || typeof raw[1] !== 'string') {
339
+ throw new TypeError('FUNCTION_DICT entry is invalid');
340
+ }
341
+ this.#functionIds.set(raw[1], raw[0]);
342
+ }
343
+ }
344
+ #startIncoming(frame) {
345
+ const id = numeric(frame.payload[0], 'CALL_DISPATCH.callId');
346
+ if (this.#incoming.has(id))
347
+ throw new TypeError('CALL_DISPATCH was duplicated');
348
+ this.#completedIncoming.delete(id);
349
+ const active = this.#host.activeDeclarations();
350
+ const session = this.#host.currentSession();
351
+ if (active === undefined || session === undefined) {
352
+ throw new TypeError('CALL_DISPATCH arrived without an active ready session');
353
+ }
354
+ if (this.#incoming.size >= session.welcome.limits.inflightCalls) {
355
+ throw new TypeError('CALL_DISPATCH exceeds the negotiated concurrency limit');
356
+ }
357
+ const functionId = numeric(frame.payload[4], 'CALL_DISPATCH.functionId');
358
+ const declared = functionForId(active, functionId);
359
+ if (declared === undefined)
360
+ throw new TypeError('CALL_DISPATCH has no active handler');
361
+ const timeoutMs = numeric(frame.payload[5], 'CALL_DISPATCH.timeoutMs');
362
+ const source = principal(frame.payload[1]);
363
+ const idempotencyKey = nullableString(frame.payload[6], 'CALL_DISPATCH.idempotencyKey');
364
+ const credit = numeric(frame.payload[7], 'CALL_DISPATCH.initialCredit');
365
+ const arguments_ = validateProtocolValue(frame.payload[8], 'call arguments');
366
+ const controller = new AbortController();
367
+ let route;
368
+ const timer = this.#host.runtime().setTimer(() => {
369
+ if (route !== undefined) {
370
+ this.#finishIncoming(route, cancelled('outcome_unknown', 'Incoming call deadline expired'));
371
+ }
372
+ }, timeoutMs);
373
+ route = {
374
+ id,
375
+ session,
376
+ controller,
377
+ credit,
378
+ creditWaiter: undefined,
379
+ emitTail: Promise.resolve(),
380
+ terminal: false,
381
+ timer,
382
+ };
383
+ this.#incoming.set(id, route);
384
+ const incoming = Object.freeze({
385
+ source,
386
+ arguments: arguments_,
387
+ idempotencyKey,
388
+ signal: controller.signal,
389
+ emit: (value) => (this.#emitIncoming(route, validateProtocolValue(value, 'call progress'))),
390
+ });
391
+ void Promise.resolve()
392
+ .then(() => declared.handler(incoming))
393
+ .then((value) => validateProtocolValue(value, 'call result'))
394
+ .then((value) => this.#completeIncoming(route, value))
395
+ .catch((error) => this.#failIncoming(route, error))
396
+ .catch(() => undefined);
397
+ }
398
+ #emitIncoming(route, value) {
399
+ const emit = route.emitTail.then(async () => {
400
+ while (route.credit === 0) {
401
+ if (route.terminal)
402
+ throw cancelled('outcome_unknown');
403
+ route.creditWaiter ??= createDeferred();
404
+ await route.creditWaiter.promise;
405
+ }
406
+ if (route.terminal)
407
+ throw cancelled('outcome_unknown');
408
+ route.credit -= 1;
409
+ await route.session.send({
410
+ opcode: Opcode.CallResult,
411
+ payload: [route.id, false, value],
412
+ });
413
+ });
414
+ route.emitTail = emit.catch(() => undefined);
415
+ return emit;
416
+ }
417
+ async #completeIncoming(route, value) {
418
+ try {
419
+ await route.emitTail;
420
+ if (route.terminal)
421
+ return;
422
+ route.terminal = true;
423
+ this.#rememberIncomingResponse(route.id);
424
+ await route.session.send({
425
+ opcode: Opcode.CallResult,
426
+ payload: [route.id, true, value],
427
+ });
428
+ this.#removeIncoming(route);
429
+ }
430
+ catch {
431
+ route.controller.abort(outcomeUnknown());
432
+ this.#removeIncoming(route);
433
+ }
434
+ }
435
+ async #failIncoming(route, thrown) {
436
+ if (route.terminal)
437
+ return;
438
+ route.terminal = true;
439
+ this.#rememberIncomingResponse(route.id);
440
+ const application = thrown instanceof ApplicationCallError ? thrown : undefined;
441
+ if (application === undefined) {
442
+ safeLog(this.#host.logger(), { level: 'error', event: 'function_handler_failed' });
443
+ }
444
+ try {
445
+ await route.session.send({
446
+ opcode: Opcode.CallError,
447
+ payload: application === undefined
448
+ ? [route.id, 1500, false, 'Application handler failed', null]
449
+ : [route.id, application.code, application.retryable, application.message, null],
450
+ });
451
+ }
452
+ finally {
453
+ this.#removeIncoming(route);
454
+ }
455
+ }
456
+ #grantCredit(id) {
457
+ const call = this.#outgoing.get(id);
458
+ if (call === undefined || call.terminal || !call.wasAccepted)
459
+ return;
460
+ call.credit += 1;
461
+ void call.session.send({ opcode: Opcode.CallCredit, payload: [id, 1] }).then(() => undefined, () => this.#terminalOutgoing(call, outcomeUnknown()));
462
+ }
463
+ #cancelOutgoing(id, reasonCode, message, awaitRelayTerminal) {
464
+ const call = this.#outgoing.get(id);
465
+ if (call === undefined || call.terminal)
466
+ return;
467
+ if (call.cancellationRequested) {
468
+ if (!awaitRelayTerminal)
469
+ this.#terminalOutgoing(call, outcomeUnknown(message));
470
+ return;
471
+ }
472
+ if (call.handedOff) {
473
+ call.cancellationRequested = true;
474
+ void call.session.send({ opcode: Opcode.CallCancel, payload: [id, reasonCode] }).then(() => {
475
+ if (!awaitRelayTerminal)
476
+ this.#terminalOutgoing(call, outcomeUnknown(message));
477
+ }, () => this.#terminalOutgoing(call, outcomeUnknown(message)));
478
+ }
479
+ else {
480
+ this.#terminalOutgoing(call, cancelled('not_dispatched', message));
481
+ }
482
+ }
483
+ #terminalOutgoing(call, failure) {
484
+ if (call.terminal)
485
+ return;
486
+ call.terminal = true;
487
+ if (!call.accepted.settled)
488
+ call.accepted.reject(failure);
489
+ call.result.reject(failure);
490
+ call.stream.fail(failure);
491
+ this.#finishOutgoing(call);
492
+ }
493
+ #finishOutgoing(call) {
494
+ call.terminal = true;
495
+ call.timer.cancel();
496
+ if (call.signal !== undefined && call.abort !== undefined) {
497
+ call.signal.removeEventListener('abort', call.abort);
498
+ }
499
+ if (this.#outgoing.get(call.id) === call)
500
+ this.#outgoing.delete(call.id);
501
+ }
502
+ #finishIncoming(route, failure) {
503
+ if (route.terminal)
504
+ return;
505
+ route.terminal = true;
506
+ route.controller.abort(failure);
507
+ route.creditWaiter?.reject(failure);
508
+ this.#removeIncoming(route);
509
+ }
510
+ #removeIncoming(route) {
511
+ route.timer.cancel();
512
+ if (this.#incoming.get(route.id) === route)
513
+ this.#incoming.delete(route.id);
514
+ }
515
+ #rememberIncomingResponse(id) {
516
+ this.#completedIncoming.delete(id);
517
+ this.#completedIncoming.add(id);
518
+ if (this.#completedIncoming.size <= LIMITS.inflightCalls)
519
+ return;
520
+ const oldest = this.#completedIncoming.values().next().value;
521
+ if (oldest !== undefined)
522
+ this.#completedIncoming.delete(oldest);
523
+ }
524
+ }
525
+ //# sourceMappingURL=calls.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"calls.js","sourceRoot":"","sources":["../../src/internal/calls.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ export type JsonValue = null | boolean | number | string | JsonValue[] | {
2
+ [key: string]: JsonValue;
3
+ };
4
+ export declare function cancelResponseBody(response: Response | undefined): void;
5
+ export declare function exactResponseRecord(value: unknown, required: readonly string[], optional: readonly string[]): Readonly<Record<string, unknown>>;
6
+ export declare function boundedResponseString(value: unknown, minimum: number, maximum: number): string;
7
+ export declare function canonicalRelayUrl(value: unknown): string;
8
+ export declare function parseResponseJson(input: Uint8Array): JsonValue;
9
+ export declare function boundedResponseBody(response: Response, signal?: AbortSignal): Promise<Uint8Array>;
10
+ //# sourceMappingURL=control-plane-response.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"control-plane-response.d.ts","sourceRoot":"","sources":["../../src/internal/control-plane-response.ts"],"names":[],"mappings":"AASA,MAAM,MAAM,SAAS,GACjB,IAAI,GACJ,OAAO,GACP,MAAM,GACN,MAAM,GACN,SAAS,EAAE,GACX;IAAE,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,CAAA;CAAE,CAAC;AAMjC,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,QAAQ,GAAG,SAAS,GAAG,IAAI,CAOvE;AAgBD,wBAAgB,mBAAmB,CACjC,KAAK,EAAE,OAAO,EACd,QAAQ,EAAE,SAAS,MAAM,EAAE,EAC3B,QAAQ,EAAE,SAAS,MAAM,EAAE,GAC1B,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAQnC;AAED,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CAO9F;AAED,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAiBxD;AAED,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,UAAU,GAAG,SAAS,CAqI9D;AAED,wBAAsB,mBAAmB,CACvC,QAAQ,EAAE,QAAQ,EAClB,MAAM,CAAC,EAAE,WAAW,GACnB,OAAO,CAAC,UAAU,CAAC,CAgDrB"}