@dxos/functions-runtime-cloudflare 0.8.4-main.3c1ae3b → 0.8.4-main.69d29f4

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 (35) hide show
  1. package/dist/lib/browser/index.mjs +503 -118
  2. package/dist/lib/browser/index.mjs.map +4 -4
  3. package/dist/lib/browser/meta.json +1 -1
  4. package/dist/lib/node-esm/index.mjs +503 -118
  5. package/dist/lib/node-esm/index.mjs.map +4 -4
  6. package/dist/lib/node-esm/meta.json +1 -1
  7. package/dist/types/src/functions-client.d.ts +1 -0
  8. package/dist/types/src/functions-client.d.ts.map +1 -1
  9. package/dist/types/src/internal/data-service-impl.d.ts +7 -6
  10. package/dist/types/src/internal/data-service-impl.d.ts.map +1 -1
  11. package/dist/types/src/internal/query-service-impl.d.ts.map +1 -1
  12. package/dist/types/src/internal/queue-service-impl.d.ts +4 -5
  13. package/dist/types/src/internal/queue-service-impl.d.ts.map +1 -1
  14. package/dist/types/src/internal/service-container.d.ts +5 -3
  15. package/dist/types/src/internal/service-container.d.ts.map +1 -1
  16. package/dist/types/src/internal/utils.d.ts +2 -0
  17. package/dist/types/src/internal/utils.d.ts.map +1 -0
  18. package/dist/types/src/logger.d.ts.map +1 -1
  19. package/dist/types/src/queues-api.d.ts +3 -3
  20. package/dist/types/src/queues-api.d.ts.map +1 -1
  21. package/dist/types/src/space-proxy.d.ts +3 -2
  22. package/dist/types/src/space-proxy.d.ts.map +1 -1
  23. package/dist/types/src/wrap-handler-for-cloudflare.d.ts.map +1 -1
  24. package/dist/types/tsconfig.tsbuildinfo +1 -1
  25. package/package.json +20 -16
  26. package/src/functions-client.ts +8 -1
  27. package/src/internal/data-service-impl.ts +27 -10
  28. package/src/internal/query-service-impl.ts +7 -3
  29. package/src/internal/queue-service-impl.ts +32 -14
  30. package/src/internal/service-container.ts +25 -6
  31. package/src/internal/utils.ts +5 -0
  32. package/src/logger.ts +2 -0
  33. package/src/queues-api.ts +3 -3
  34. package/src/space-proxy.ts +4 -3
  35. package/src/wrap-handler-for-cloudflare.ts +3 -3
@@ -3,7 +3,7 @@ import { createRequire } from 'node:module';const require = createRequire(import
3
3
  // src/functions-client.ts
4
4
  import { Resource as Resource2 } from "@dxos/context";
5
5
  import { EchoClient } from "@dxos/echo-db";
6
- import { invariant as invariant5 } from "@dxos/invariant";
6
+ import { invariant as invariant6 } from "@dxos/invariant";
7
7
 
8
8
  // src/internal/data-service-impl.ts
9
9
  import { Stream } from "@dxos/codec-protobuf/stream";
@@ -12,6 +12,76 @@ import { NotImplementedError, RuntimeServiceError } from "@dxos/errors";
12
12
  import { invariant } from "@dxos/invariant";
13
13
  import { SpaceId } from "@dxos/keys";
14
14
  import { log } from "@dxos/log";
15
+
16
+ // src/internal/utils.ts
17
+ var copyUint8Array = (value) => new Uint8Array(value);
18
+
19
+ // src/internal/data-service-impl.ts
20
+ function _ts_add_disposable_resource(env, value, async) {
21
+ if (value !== null && value !== void 0) {
22
+ if (typeof value !== "object" && typeof value !== "function") throw new TypeError("Object expected.");
23
+ var dispose, inner;
24
+ if (async) {
25
+ if (!Symbol.asyncDispose) throw new TypeError("Symbol.asyncDispose is not defined.");
26
+ dispose = value[Symbol.asyncDispose];
27
+ }
28
+ if (dispose === void 0) {
29
+ if (!Symbol.dispose) throw new TypeError("Symbol.dispose is not defined.");
30
+ dispose = value[Symbol.dispose];
31
+ if (async) inner = dispose;
32
+ }
33
+ if (typeof dispose !== "function") throw new TypeError("Object not disposable.");
34
+ if (inner) dispose = function() {
35
+ try {
36
+ inner.call(this);
37
+ } catch (e) {
38
+ return Promise.reject(e);
39
+ }
40
+ };
41
+ env.stack.push({
42
+ value,
43
+ dispose,
44
+ async
45
+ });
46
+ } else if (async) {
47
+ env.stack.push({
48
+ async: true
49
+ });
50
+ }
51
+ return value;
52
+ }
53
+ function _ts_dispose_resources(env) {
54
+ var _SuppressedError = typeof SuppressedError === "function" ? SuppressedError : function(error, suppressed, message) {
55
+ var e = new Error(message);
56
+ return e.name = "SuppressedError", e.error = error, e.suppressed = suppressed, e;
57
+ };
58
+ return (_ts_dispose_resources = function _ts_dispose_resources5(env2) {
59
+ function fail(e) {
60
+ env2.error = env2.hasError ? new _SuppressedError(e, env2.error, "An error was suppressed during disposal.") : e;
61
+ env2.hasError = true;
62
+ }
63
+ var r, s = 0;
64
+ function next() {
65
+ while (r = env2.stack.pop()) {
66
+ try {
67
+ if (!r.async && s === 1) return s = 0, env2.stack.push(r), Promise.resolve().then(next);
68
+ if (r.dispose) {
69
+ var result = r.dispose.call(r.value);
70
+ if (r.async) return s |= 2, Promise.resolve(result).then(next, function(e) {
71
+ fail(e);
72
+ return next();
73
+ });
74
+ } else s |= 1;
75
+ } catch (e) {
76
+ fail(e);
77
+ }
78
+ }
79
+ if (s === 1) return env2.hasError ? Promise.reject(env2.error) : Promise.resolve();
80
+ if (env2.hasError) throw env2.error;
81
+ }
82
+ return next();
83
+ })(env);
84
+ }
15
85
  var __dxlog_file = "/__w/dxos/dxos/packages/core/functions-runtime-cloudflare/src/internal/data-service-impl.ts";
16
86
  var DataServiceImpl = class {
17
87
  _executionContext;
@@ -25,7 +95,7 @@ var DataServiceImpl = class {
25
95
  return new Stream(({ next }) => {
26
96
  invariant(SpaceId.isValid(spaceId), void 0, {
27
97
  F: __dxlog_file,
28
- L: 35,
98
+ L: 39,
29
99
  S: this,
30
100
  A: [
31
101
  "SpaceId.isValid(spaceId)",
@@ -41,7 +111,7 @@ var DataServiceImpl = class {
41
111
  };
42
112
  });
43
113
  }
44
- async updateSubscription({ subscriptionId, addIds, removeIds }) {
114
+ async updateSubscription({ subscriptionId, addIds }) {
45
115
  const sub = this.dataSubscriptions.get(subscriptionId) ?? raise(new RuntimeServiceError({
46
116
  message: "Subscription not found.",
47
117
  context: {
@@ -53,44 +123,79 @@ var DataServiceImpl = class {
53
123
  count: addIds.length
54
124
  }, {
55
125
  F: __dxlog_file,
56
- L: 55,
126
+ L: 59,
57
127
  S: this,
58
128
  C: (f, a) => f(...a)
59
129
  });
60
130
  for (const documentId of addIds) {
61
- const document = await this._dataService.getDocument(this._executionContext, sub.spaceId, documentId);
62
- log.info("document loaded", {
63
- documentId,
64
- spaceId: sub.spaceId,
65
- found: !!document
66
- }, {
67
- F: __dxlog_file,
68
- L: 59,
69
- S: this,
70
- C: (f, a) => f(...a)
71
- });
72
- if (!document) {
73
- log.warn("not found", {
74
- documentId
131
+ const env = {
132
+ stack: [],
133
+ error: void 0,
134
+ hasError: false
135
+ };
136
+ try {
137
+ const document = _ts_add_disposable_resource(env, await this._dataService.getDocument(this._executionContext, sub.spaceId, documentId), false);
138
+ log.info("document loaded", {
139
+ documentId,
140
+ spaceId: sub.spaceId,
141
+ found: !!document
75
142
  }, {
76
143
  F: __dxlog_file,
77
- L: 61,
144
+ L: 63,
78
145
  S: this,
79
146
  C: (f, a) => f(...a)
80
147
  });
81
- continue;
148
+ if (!document) {
149
+ log.warn("not found", {
150
+ documentId
151
+ }, {
152
+ F: __dxlog_file,
153
+ L: 65,
154
+ S: this,
155
+ C: (f, a) => f(...a)
156
+ });
157
+ continue;
158
+ }
159
+ sub.next({
160
+ updates: [
161
+ {
162
+ documentId,
163
+ // Copy returned object to avoid hanging RPC stub
164
+ // See https://developers.cloudflare.com/workers/runtime-apis/rpc/lifecycle/
165
+ mutation: copyUint8Array(document.data)
166
+ }
167
+ ]
168
+ });
169
+ } catch (e) {
170
+ env.error = e;
171
+ env.hasError = true;
172
+ } finally {
173
+ _ts_dispose_resources(env);
82
174
  }
83
- sub.next({
84
- updates: [
85
- {
86
- documentId,
87
- mutation: document.data
88
- }
89
- ]
90
- });
91
175
  }
92
176
  }
93
177
  }
178
+ async createDocument({ spaceId, initialValue }) {
179
+ const env = {
180
+ stack: [],
181
+ error: void 0,
182
+ hasError: false
183
+ };
184
+ try {
185
+ const response = _ts_add_disposable_resource(env, await this._dataService.createDocument(this._executionContext, {
186
+ spaceId,
187
+ initialValue
188
+ }), false);
189
+ return {
190
+ documentId: response.documentId
191
+ };
192
+ } catch (e) {
193
+ env.error = e;
194
+ env.hasError = true;
195
+ } finally {
196
+ _ts_dispose_resources(env);
197
+ }
198
+ }
94
199
  async update({ updates, subscriptionId }) {
95
200
  const sub = this.dataSubscriptions.get(subscriptionId) ?? raise(new RuntimeServiceError({
96
201
  message: "Subscription not found.",
@@ -114,27 +219,30 @@ var DataServiceImpl = class {
114
219
  }
115
220
  async flush() {
116
221
  }
117
- subscribeSpaceSyncState(request, options) {
222
+ subscribeSpaceSyncState(_request, _options) {
118
223
  throw new NotImplementedError({
119
224
  message: "subscribeSpaceSyncState is not implemented."
120
225
  });
121
226
  }
122
- async getDocumentHeads({ documentIds }) {
227
+ async getDocumentHeads({ documentIds: _documentIds }) {
123
228
  throw new NotImplementedError({
124
229
  message: "getDocumentHeads is not implemented."
125
230
  });
126
231
  }
127
- async reIndexHeads({ documentIds }) {
232
+ async reIndexHeads({ documentIds: _documentIds }) {
128
233
  throw new NotImplementedError({
129
234
  message: "reIndexHeads is not implemented."
130
235
  });
131
236
  }
132
237
  async updateIndexes() {
133
- throw new NotImplementedError({
134
- message: "updateIndexes is not implemented."
238
+ log.error("updateIndexes is not available in EDGE env.", void 0, {
239
+ F: __dxlog_file,
240
+ L: 133,
241
+ S: this,
242
+ C: (f, a) => f(...a)
135
243
  });
136
244
  }
137
- async waitUntilHeadsReplicated({ heads }) {
245
+ async waitUntilHeadsReplicated({ heads: _heads }) {
138
246
  throw new NotImplementedError({
139
247
  message: "waitUntilHeadsReplicated is not implemented."
140
248
  });
@@ -219,6 +327,71 @@ var isSimpleSelectionQuery = (query) => {
219
327
  };
220
328
 
221
329
  // src/internal/query-service-impl.ts
330
+ function _ts_add_disposable_resource2(env, value, async) {
331
+ if (value !== null && value !== void 0) {
332
+ if (typeof value !== "object" && typeof value !== "function") throw new TypeError("Object expected.");
333
+ var dispose, inner;
334
+ if (async) {
335
+ if (!Symbol.asyncDispose) throw new TypeError("Symbol.asyncDispose is not defined.");
336
+ dispose = value[Symbol.asyncDispose];
337
+ }
338
+ if (dispose === void 0) {
339
+ if (!Symbol.dispose) throw new TypeError("Symbol.dispose is not defined.");
340
+ dispose = value[Symbol.dispose];
341
+ if (async) inner = dispose;
342
+ }
343
+ if (typeof dispose !== "function") throw new TypeError("Object not disposable.");
344
+ if (inner) dispose = function() {
345
+ try {
346
+ inner.call(this);
347
+ } catch (e) {
348
+ return Promise.reject(e);
349
+ }
350
+ };
351
+ env.stack.push({
352
+ value,
353
+ dispose,
354
+ async
355
+ });
356
+ } else if (async) {
357
+ env.stack.push({
358
+ async: true
359
+ });
360
+ }
361
+ return value;
362
+ }
363
+ function _ts_dispose_resources2(env) {
364
+ var _SuppressedError = typeof SuppressedError === "function" ? SuppressedError : function(error, suppressed, message) {
365
+ var e = new Error(message);
366
+ return e.name = "SuppressedError", e.error = error, e.suppressed = suppressed, e;
367
+ };
368
+ return (_ts_dispose_resources2 = function _ts_dispose_resources5(env2) {
369
+ function fail(e) {
370
+ env2.error = env2.hasError ? new _SuppressedError(e, env2.error, "An error was suppressed during disposal.") : e;
371
+ env2.hasError = true;
372
+ }
373
+ var r, s = 0;
374
+ function next() {
375
+ while (r = env2.stack.pop()) {
376
+ try {
377
+ if (!r.async && s === 1) return s = 0, env2.stack.push(r), Promise.resolve().then(next);
378
+ if (r.dispose) {
379
+ var result = r.dispose.call(r.value);
380
+ if (r.async) return s |= 2, Promise.resolve(result).then(next, function(e) {
381
+ fail(e);
382
+ return next();
383
+ });
384
+ } else s |= 1;
385
+ } catch (e) {
386
+ fail(e);
387
+ }
388
+ }
389
+ if (s === 1) return env2.hasError ? Promise.reject(env2.error) : Promise.resolve();
390
+ if (env2.hasError) throw env2.error;
391
+ }
392
+ return next();
393
+ })(env);
394
+ }
222
395
  var __dxlog_file3 = "/__w/dxos/dxos/packages/core/functions-runtime-cloudflare/src/internal/query-service-impl.ts";
223
396
  var QueryServiceImpl = class {
224
397
  _executionContext;
@@ -233,7 +406,7 @@ var QueryServiceImpl = class {
233
406
  request
234
407
  }, {
235
408
  F: __dxlog_file3,
236
- L: 33,
409
+ L: 34,
237
410
  S: this,
238
411
  C: (f, a) => f(...a)
239
412
  });
@@ -241,7 +414,7 @@ var QueryServiceImpl = class {
241
414
  const requestedSpaceIds = getTargetSpacesForQuery(query);
242
415
  invariant3(requestedSpaceIds.length === 1, "Only one space is supported", {
243
416
  F: __dxlog_file3,
244
- L: 36,
417
+ L: 37,
245
418
  S: this,
246
419
  A: [
247
420
  "requestedSpaceIds.length === 1",
@@ -251,42 +424,57 @@ var QueryServiceImpl = class {
251
424
  const spaceId = requestedSpaceIds[0];
252
425
  return Stream2.fromPromise((async () => {
253
426
  try {
254
- this._queryCount++;
255
- log2.info("begin query", {
256
- spaceId
257
- }, {
258
- F: __dxlog_file3,
259
- L: 43,
260
- S: this,
261
- C: (f, a) => f(...a)
262
- });
263
- const queryResponse = await this._dataService.queryDocuments(this._executionContext, queryToDataServiceRequest(query));
264
- log2.info("query response", {
265
- spaceId,
266
- filter: request.filter,
267
- resultCount: queryResponse.results.length
268
- }, {
269
- F: __dxlog_file3,
270
- L: 48,
271
- S: this,
272
- C: (f, a) => f(...a)
273
- });
274
- return {
275
- results: queryResponse.results.map((object) => ({
276
- id: object.objectId,
277
- spaceId,
278
- spaceKey: PublicKey.ZERO,
279
- documentId: object.document.documentId,
280
- rank: 0,
281
- documentAutomerge: object.document.data
282
- }))
427
+ const env = {
428
+ stack: [],
429
+ error: void 0,
430
+ hasError: false
283
431
  };
432
+ try {
433
+ this._queryCount++;
434
+ log2.info("begin query", {
435
+ spaceId
436
+ }, {
437
+ F: __dxlog_file3,
438
+ L: 44,
439
+ S: this,
440
+ C: (f, a) => f(...a)
441
+ });
442
+ const queryResponse = _ts_add_disposable_resource2(env, await this._dataService.queryDocuments(this._executionContext, queryToDataServiceRequest(query)), false);
443
+ log2.info("query response", {
444
+ spaceId,
445
+ filter: request.filter,
446
+ resultCount: queryResponse.results.length
447
+ }, {
448
+ F: __dxlog_file3,
449
+ L: 49,
450
+ S: this,
451
+ C: (f, a) => f(...a)
452
+ });
453
+ return {
454
+ results: queryResponse.results.map((object) => ({
455
+ id: object.objectId,
456
+ spaceId,
457
+ spaceKey: PublicKey.ZERO,
458
+ documentId: object.document.documentId,
459
+ // Rank 1 for predicate matches where ranking is not determined.
460
+ rank: 1,
461
+ // Copy returned object to avoid hanging RPC stub.
462
+ // See https://developers.cloudflare.com/workers/runtime-apis/rpc/lifecycle/
463
+ documentAutomerge: copyUint8Array(object.document.data)
464
+ }))
465
+ };
466
+ } catch (e) {
467
+ env.error = e;
468
+ env.hasError = true;
469
+ } finally {
470
+ _ts_dispose_resources2(env);
471
+ }
284
472
  } catch (error) {
285
473
  log2.error("query failed", {
286
474
  err: error
287
475
  }, {
288
476
  F: __dxlog_file3,
289
- L: 62,
477
+ L: 66,
290
478
  S: this,
291
479
  C: (f, a) => f(...a)
292
480
  });
@@ -332,6 +520,73 @@ var getTargetSpacesForQuery = (query) => {
332
520
 
333
521
  // src/internal/queue-service-impl.ts
334
522
  import { NotImplementedError as NotImplementedError3, RuntimeServiceError as RuntimeServiceError3 } from "@dxos/errors";
523
+ import { invariant as invariant4 } from "@dxos/invariant";
524
+ function _ts_add_disposable_resource3(env, value, async) {
525
+ if (value !== null && value !== void 0) {
526
+ if (typeof value !== "object" && typeof value !== "function") throw new TypeError("Object expected.");
527
+ var dispose, inner;
528
+ if (async) {
529
+ if (!Symbol.asyncDispose) throw new TypeError("Symbol.asyncDispose is not defined.");
530
+ dispose = value[Symbol.asyncDispose];
531
+ }
532
+ if (dispose === void 0) {
533
+ if (!Symbol.dispose) throw new TypeError("Symbol.dispose is not defined.");
534
+ dispose = value[Symbol.dispose];
535
+ if (async) inner = dispose;
536
+ }
537
+ if (typeof dispose !== "function") throw new TypeError("Object not disposable.");
538
+ if (inner) dispose = function() {
539
+ try {
540
+ inner.call(this);
541
+ } catch (e) {
542
+ return Promise.reject(e);
543
+ }
544
+ };
545
+ env.stack.push({
546
+ value,
547
+ dispose,
548
+ async
549
+ });
550
+ } else if (async) {
551
+ env.stack.push({
552
+ async: true
553
+ });
554
+ }
555
+ return value;
556
+ }
557
+ function _ts_dispose_resources3(env) {
558
+ var _SuppressedError = typeof SuppressedError === "function" ? SuppressedError : function(error, suppressed, message) {
559
+ var e = new Error(message);
560
+ return e.name = "SuppressedError", e.error = error, e.suppressed = suppressed, e;
561
+ };
562
+ return (_ts_dispose_resources3 = function _ts_dispose_resources5(env2) {
563
+ function fail(e) {
564
+ env2.error = env2.hasError ? new _SuppressedError(e, env2.error, "An error was suppressed during disposal.") : e;
565
+ env2.hasError = true;
566
+ }
567
+ var r, s = 0;
568
+ function next() {
569
+ while (r = env2.stack.pop()) {
570
+ try {
571
+ if (!r.async && s === 1) return s = 0, env2.stack.push(r), Promise.resolve().then(next);
572
+ if (r.dispose) {
573
+ var result = r.dispose.call(r.value);
574
+ if (r.async) return s |= 2, Promise.resolve(result).then(next, function(e) {
575
+ fail(e);
576
+ return next();
577
+ });
578
+ } else s |= 1;
579
+ } catch (e) {
580
+ fail(e);
581
+ }
582
+ }
583
+ if (s === 1) return env2.hasError ? Promise.reject(env2.error) : Promise.resolve();
584
+ if (env2.hasError) throw env2.error;
585
+ }
586
+ return next();
587
+ })(env);
588
+ }
589
+ var __dxlog_file4 = "/__w/dxos/dxos/packages/core/functions-runtime-cloudflare/src/internal/queue-service-impl.ts";
335
590
  var QueueServiceImpl = class {
336
591
  _ctx;
337
592
  _queueService;
@@ -339,15 +594,46 @@ var QueueServiceImpl = class {
339
594
  this._ctx = _ctx;
340
595
  this._queueService = _queueService;
341
596
  }
342
- async queryQueue(subspaceTag, spaceId, { queueId, ...query }) {
597
+ async queryQueue(request) {
598
+ const { query } = request;
599
+ const { queueIds, ...filter } = query;
600
+ const spaceId = query.spaceId;
601
+ const queueId = queueIds?.[0];
602
+ invariant4(request.query.queuesNamespace, void 0, {
603
+ F: __dxlog_file4,
604
+ L: 26,
605
+ S: this,
606
+ A: [
607
+ "request.query.queuesNamespace",
608
+ ""
609
+ ]
610
+ });
343
611
  try {
344
- const result = await this._queueService.query(this._ctx, `dxn:queue:${subspaceTag}:${spaceId}:${queueId}`, query);
345
- return result;
612
+ const env = {
613
+ stack: [],
614
+ error: void 0,
615
+ hasError: false
616
+ };
617
+ try {
618
+ const result = _ts_add_disposable_resource3(env, await this._queueService.query(this._ctx, `dxn:queue:${request.query.queuesNamespace}:${spaceId}:${queueId}`, filter), false);
619
+ return {
620
+ // Copy returned object to avoid hanging RPC stub
621
+ // See https://developers.cloudflare.com/workers/runtime-apis/rpc/lifecycle/
622
+ objects: structuredClone(result.objects),
623
+ nextCursor: result.nextCursor,
624
+ prevCursor: result.prevCursor
625
+ };
626
+ } catch (e) {
627
+ env.error = e;
628
+ env.hasError = true;
629
+ } finally {
630
+ _ts_dispose_resources3(env);
631
+ }
346
632
  } catch (error) {
347
633
  throw RuntimeServiceError3.wrap({
348
634
  message: "Queue query failed.",
349
635
  context: {
350
- subspaceTag,
636
+ subspaceTag: request.query.queuesNamespace,
351
637
  spaceId,
352
638
  queueId
353
639
  },
@@ -355,10 +641,10 @@ var QueueServiceImpl = class {
355
641
  })(error);
356
642
  }
357
643
  }
358
- async insertIntoQueue(subspaceTag, spaceId, queueId, objects) {
644
+ async insertIntoQueue(request) {
645
+ const { subspaceTag, spaceId, queueId, objects } = request;
359
646
  try {
360
- const result = await this._queueService.append(this._ctx, `dxn:queue:${subspaceTag}:${spaceId}:${queueId}`, objects);
361
- return result;
647
+ await this._queueService.append(this._ctx, `dxn:queue:${subspaceTag}:${spaceId}:${queueId}`, objects ?? []);
362
648
  } catch (error) {
363
649
  throw RuntimeServiceError3.wrap({
364
650
  message: "Queue append failed.",
@@ -371,7 +657,8 @@ var QueueServiceImpl = class {
371
657
  })(error);
372
658
  }
373
659
  }
374
- deleteFromQueue(subspaceTag, spaceId, queueId, _objectIds) {
660
+ deleteFromQueue(request) {
661
+ const { subspaceTag, spaceId, queueId } = request;
375
662
  throw new NotImplementedError3({
376
663
  message: "Deleting from queue is not supported.",
377
664
  context: {
@@ -384,17 +671,100 @@ var QueueServiceImpl = class {
384
671
  };
385
672
 
386
673
  // src/internal/service-container.ts
674
+ function _ts_add_disposable_resource4(env, value, async) {
675
+ if (value !== null && value !== void 0) {
676
+ if (typeof value !== "object" && typeof value !== "function") throw new TypeError("Object expected.");
677
+ var dispose, inner;
678
+ if (async) {
679
+ if (!Symbol.asyncDispose) throw new TypeError("Symbol.asyncDispose is not defined.");
680
+ dispose = value[Symbol.asyncDispose];
681
+ }
682
+ if (dispose === void 0) {
683
+ if (!Symbol.dispose) throw new TypeError("Symbol.dispose is not defined.");
684
+ dispose = value[Symbol.dispose];
685
+ if (async) inner = dispose;
686
+ }
687
+ if (typeof dispose !== "function") throw new TypeError("Object not disposable.");
688
+ if (inner) dispose = function() {
689
+ try {
690
+ inner.call(this);
691
+ } catch (e) {
692
+ return Promise.reject(e);
693
+ }
694
+ };
695
+ env.stack.push({
696
+ value,
697
+ dispose,
698
+ async
699
+ });
700
+ } else if (async) {
701
+ env.stack.push({
702
+ async: true
703
+ });
704
+ }
705
+ return value;
706
+ }
707
+ function _ts_dispose_resources4(env) {
708
+ var _SuppressedError = typeof SuppressedError === "function" ? SuppressedError : function(error, suppressed, message) {
709
+ var e = new Error(message);
710
+ return e.name = "SuppressedError", e.error = error, e.suppressed = suppressed, e;
711
+ };
712
+ return (_ts_dispose_resources4 = function _ts_dispose_resources5(env2) {
713
+ function fail(e) {
714
+ env2.error = env2.hasError ? new _SuppressedError(e, env2.error, "An error was suppressed during disposal.") : e;
715
+ env2.hasError = true;
716
+ }
717
+ var r, s = 0;
718
+ function next() {
719
+ while (r = env2.stack.pop()) {
720
+ try {
721
+ if (!r.async && s === 1) return s = 0, env2.stack.push(r), Promise.resolve().then(next);
722
+ if (r.dispose) {
723
+ var result = r.dispose.call(r.value);
724
+ if (r.async) return s |= 2, Promise.resolve(result).then(next, function(e) {
725
+ fail(e);
726
+ return next();
727
+ });
728
+ } else s |= 1;
729
+ } catch (e) {
730
+ fail(e);
731
+ }
732
+ }
733
+ if (s === 1) return env2.hasError ? Promise.reject(env2.error) : Promise.resolve();
734
+ if (env2.hasError) throw env2.error;
735
+ }
736
+ return next();
737
+ })(env);
738
+ }
387
739
  var ServiceContainer = class {
388
740
  _executionContext;
389
741
  _dataService;
390
742
  _queueService;
391
- constructor(_executionContext, _dataService, _queueService) {
743
+ _functionsService;
744
+ constructor(_executionContext, _dataService, _queueService, _functionsService) {
392
745
  this._executionContext = _executionContext;
393
746
  this._dataService = _dataService;
394
747
  this._queueService = _queueService;
748
+ this._functionsService = _functionsService;
395
749
  }
396
750
  async getSpaceMeta(spaceId) {
397
- return this._dataService.getSpaceMeta(this._executionContext, spaceId);
751
+ const env = {
752
+ stack: [],
753
+ error: void 0,
754
+ hasError: false
755
+ };
756
+ try {
757
+ const result = _ts_add_disposable_resource4(env, await this._dataService.getSpaceMeta(this._executionContext, spaceId), false);
758
+ return result ? {
759
+ spaceKey: result.spaceKey,
760
+ rootDocumentId: result.rootDocumentId
761
+ } : void 0;
762
+ } catch (e) {
763
+ env.error = e;
764
+ env.hasError = true;
765
+ } finally {
766
+ _ts_dispose_resources4(env);
767
+ }
398
768
  }
399
769
  async createServices() {
400
770
  const dataService = new DataServiceImpl(this._executionContext, this._dataService);
@@ -403,20 +773,41 @@ var ServiceContainer = class {
403
773
  return {
404
774
  dataService,
405
775
  queryService,
406
- queueService
776
+ queueService,
777
+ functionsAiService: this._functionsService
407
778
  };
408
779
  }
409
- queryQueue(queue) {
410
- return this._queueService.query({}, queue.toString(), {});
780
+ async queryQueue(queue) {
781
+ const env = {
782
+ stack: [],
783
+ error: void 0,
784
+ hasError: false
785
+ };
786
+ try {
787
+ const { spaceId } = queue.asQueueDXN() ?? {};
788
+ const result = _ts_add_disposable_resource4(env, await this._queueService.query({}, queue.toString(), {
789
+ spaceId
790
+ }), false);
791
+ return {
792
+ objects: structuredClone(result.objects),
793
+ nextCursor: result.nextCursor ?? null,
794
+ prevCursor: result.prevCursor ?? null
795
+ };
796
+ } catch (e) {
797
+ env.error = e;
798
+ env.hasError = true;
799
+ } finally {
800
+ _ts_dispose_resources4(env);
801
+ }
411
802
  }
412
- insertIntoQueue(queue, objects) {
413
- return this._queueService.append({}, queue.toString(), objects);
803
+ async insertIntoQueue(queue, objects) {
804
+ await this._queueService.append({}, queue.toString(), objects);
414
805
  }
415
806
  };
416
807
 
417
808
  // src/space-proxy.ts
418
809
  import { Resource } from "@dxos/context";
419
- import { invariant as invariant4 } from "@dxos/invariant";
810
+ import { invariant as invariant5 } from "@dxos/invariant";
420
811
  import { PublicKey as PublicKey2 } from "@dxos/keys";
421
812
 
422
813
  // src/queues-api.ts
@@ -436,7 +827,7 @@ var QueuesAPIImpl = class {
436
827
  };
437
828
 
438
829
  // src/space-proxy.ts
439
- var __dxlog_file4 = "/__w/dxos/dxos/packages/core/functions-runtime-cloudflare/src/space-proxy.ts";
830
+ var __dxlog_file5 = "/__w/dxos/dxos/packages/core/functions-runtime-cloudflare/src/space-proxy.ts";
440
831
  var SpaceProxy = class extends Resource {
441
832
  _serviceContainer;
442
833
  _echoClient;
@@ -451,9 +842,9 @@ var SpaceProxy = class extends Resource {
451
842
  return this._id;
452
843
  }
453
844
  get db() {
454
- invariant4(this._db, void 0, {
455
- F: __dxlog_file4,
456
- L: 34,
845
+ invariant5(this._db, void 0, {
846
+ F: __dxlog_file5,
847
+ L: 35,
457
848
  S: this,
458
849
  A: [
459
850
  "this._db",
@@ -466,9 +857,9 @@ var SpaceProxy = class extends Resource {
466
857
  * @deprecated Use db API.
467
858
  */
468
859
  get crud() {
469
- invariant4(this._db, void 0, {
470
- F: __dxlog_file4,
471
- L: 42,
860
+ invariant5(this._db, void 0, {
861
+ F: __dxlog_file5,
862
+ L: 43,
472
863
  S: this,
473
864
  A: [
474
865
  "this._db",
@@ -498,7 +889,7 @@ var SpaceProxy = class extends Resource {
498
889
  };
499
890
 
500
891
  // src/functions-client.ts
501
- var __dxlog_file5 = "/__w/dxos/dxos/packages/core/functions-runtime-cloudflare/src/functions-client.ts";
892
+ var __dxlog_file6 = "/__w/dxos/dxos/packages/core/functions-runtime-cloudflare/src/functions-client.ts";
502
893
  var FunctionsClient = class extends Resource2 {
503
894
  _serviceContainer;
504
895
  _echoClient;
@@ -506,25 +897,25 @@ var FunctionsClient = class extends Resource2 {
506
897
  _spaces = /* @__PURE__ */ new Map();
507
898
  constructor(services) {
508
899
  super();
509
- invariant5(typeof services.dataService !== "undefined", "DataService is required", {
510
- F: __dxlog_file5,
511
- L: 32,
900
+ invariant6(typeof services.dataService !== "undefined", "DataService is required", {
901
+ F: __dxlog_file6,
902
+ L: 33,
512
903
  S: this,
513
904
  A: [
514
905
  "typeof services.dataService !== 'undefined'",
515
906
  "'DataService is required'"
516
907
  ]
517
908
  });
518
- invariant5(typeof services.queueService !== "undefined", "QueueService is required", {
519
- F: __dxlog_file5,
520
- L: 33,
909
+ invariant6(typeof services.queueService !== "undefined", "QueueService is required", {
910
+ F: __dxlog_file6,
911
+ L: 34,
521
912
  S: this,
522
913
  A: [
523
914
  "typeof services.queueService !== 'undefined'",
524
915
  "'QueueService is required'"
525
916
  ]
526
917
  });
527
- this._serviceContainer = new ServiceContainer(this._executionContext, services.dataService, services.queueService);
918
+ this._serviceContainer = new ServiceContainer(this._executionContext, services.dataService, services.queueService, services.functionsAiService);
528
919
  this._echoClient = new EchoClient({});
529
920
  }
530
921
  get echo() {
@@ -558,7 +949,8 @@ var FunctionsClient = class extends Resource2 {
558
949
  var createClientFromEnv = async (env) => {
559
950
  const client = new FunctionsClient({
560
951
  dataService: env.DATA_SERVICE,
561
- queueService: env.QUEUE_SERVICE
952
+ queueService: env.QUEUE_SERVICE,
953
+ functionsAiService: env.FUNCTIONS_AI_SERVICE
562
954
  });
563
955
  await client.open();
564
956
  return client;
@@ -572,22 +964,14 @@ var FunctionRouteValue = /* @__PURE__ */ (function(FunctionRouteValue2) {
572
964
  })({});
573
965
 
574
966
  // src/wrap-handler-for-cloudflare.ts
575
- import { invariant as invariant6 } from "@dxos/invariant";
967
+ import { invariant as invariant7 } from "@dxos/invariant";
576
968
  import { SpaceId as SpaceId4 } from "@dxos/keys";
577
969
  import { log as log3 } from "@dxos/log";
578
970
  import { EdgeResponse } from "@dxos/protocols";
579
- var __dxlog_file6 = "/__w/dxos/dxos/packages/core/functions-runtime-cloudflare/src/wrap-handler-for-cloudflare.ts";
971
+ var __dxlog_file7 = "/__w/dxos/dxos/packages/core/functions-runtime-cloudflare/src/wrap-handler-for-cloudflare.ts";
580
972
  var wrapHandlerForCloudflare = (func) => {
581
973
  return async (request, env) => {
582
974
  if (request.headers.get(FUNCTION_ROUTE_HEADER) === FunctionRouteValue.Meta) {
583
- log3.info(">>> meta", {
584
- func
585
- }, {
586
- F: __dxlog_file6,
587
- L: 25,
588
- S: void 0,
589
- C: (f, a) => f(...a)
590
- });
591
975
  return handleFunctionMetaCall(func, request);
592
976
  }
593
977
  try {
@@ -599,7 +983,7 @@ var wrapHandlerForCloudflare = (func) => {
599
983
  });
600
984
  }
601
985
  }
602
- const serviceContainer = new ServiceContainer({}, env.DATA_SERVICE, env.QUEUE_SERVICE);
986
+ const serviceContainer = new ServiceContainer({}, env.DATA_SERVICE, env.QUEUE_SERVICE, env.FUNCTIONS_AI_SERVICE);
603
987
  const context = await createFunctionContext({
604
988
  serviceContainer,
605
989
  contextSpaceId: spaceId
@@ -610,8 +994,8 @@ var wrapHandlerForCloudflare = (func) => {
610
994
  error,
611
995
  stack: error.stack
612
996
  }, {
613
- F: __dxlog_file6,
614
- L: 45,
997
+ F: __dxlog_file7,
998
+ L: 44,
615
999
  S: void 0,
616
1000
  C: (f, a) => f(...a)
617
1001
  });
@@ -648,8 +1032,8 @@ var decodeRequest = async (request) => {
648
1032
  };
649
1033
  } catch (err) {
650
1034
  log3.catch(err, void 0, {
651
- F: __dxlog_file6,
652
- L: 80,
1035
+ F: __dxlog_file7,
1036
+ L: 79,
653
1037
  S: void 0,
654
1038
  C: (f, a) => f(...a)
655
1039
  });
@@ -676,7 +1060,7 @@ var handleFunctionMetaCall = (functionDefinition, request) => {
676
1060
  });
677
1061
  };
678
1062
  var createFunctionContext = async ({ serviceContainer, contextSpaceId }) => {
679
- const { dataService, queryService, queueService } = await serviceContainer.createServices();
1063
+ const { dataService, queryService, queueService, functionsAiService } = await serviceContainer.createServices();
680
1064
  let spaceKey;
681
1065
  let rootUrl;
682
1066
  if (contextSpaceId) {
@@ -685,9 +1069,9 @@ var createFunctionContext = async ({ serviceContainer, contextSpaceId }) => {
685
1069
  throw new Error(`Space not found: ${contextSpaceId}`);
686
1070
  }
687
1071
  spaceKey = meta.spaceKey;
688
- invariant6(!meta.rootDocumentId.startsWith("automerge:"), void 0, {
689
- F: __dxlog_file6,
690
- L: 118,
1072
+ invariant7(!meta.rootDocumentId.startsWith("automerge:"), void 0, {
1073
+ F: __dxlog_file7,
1074
+ L: 117,
691
1075
  S: void 0,
692
1076
  A: [
693
1077
  "!meta.rootDocumentId.startsWith('automerge:')",
@@ -700,7 +1084,8 @@ var createFunctionContext = async ({ serviceContainer, contextSpaceId }) => {
700
1084
  services: {
701
1085
  dataService,
702
1086
  queryService,
703
- queueService
1087
+ queueService,
1088
+ functionsAiService
704
1089
  },
705
1090
  spaceId: contextSpaceId,
706
1091
  spaceKey,