@dxos/functions-runtime-cloudflare 0.8.4-main.3c1ae3b → 0.8.4-main.3eb6e50203
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.
- package/dist/lib/browser/index.mjs +516 -110
- package/dist/lib/browser/index.mjs.map +4 -4
- package/dist/lib/browser/meta.json +1 -1
- package/dist/lib/node-esm/index.mjs +516 -110
- package/dist/lib/node-esm/index.mjs.map +4 -4
- package/dist/lib/node-esm/meta.json +1 -1
- package/dist/types/src/functions-client.d.ts +1 -0
- package/dist/types/src/functions-client.d.ts.map +1 -1
- package/dist/types/src/internal/data-service-impl.d.ts +7 -6
- package/dist/types/src/internal/data-service-impl.d.ts.map +1 -1
- package/dist/types/src/internal/query-service-impl.d.ts.map +1 -1
- package/dist/types/src/internal/queue-service-impl.d.ts +5 -7
- package/dist/types/src/internal/queue-service-impl.d.ts.map +1 -1
- package/dist/types/src/internal/service-container.d.ts +8 -8
- package/dist/types/src/internal/service-container.d.ts.map +1 -1
- package/dist/types/src/internal/utils.d.ts +2 -0
- package/dist/types/src/internal/utils.d.ts.map +1 -0
- package/dist/types/src/logger.d.ts.map +1 -1
- package/dist/types/src/queues-api.d.ts +6 -6
- package/dist/types/src/queues-api.d.ts.map +1 -1
- package/dist/types/src/space-proxy.d.ts +3 -2
- package/dist/types/src/space-proxy.d.ts.map +1 -1
- package/dist/types/src/wrap-handler-for-cloudflare.d.ts.map +1 -1
- package/dist/types/tsconfig.tsbuildinfo +1 -1
- package/package.json +20 -16
- package/src/functions-client.ts +8 -1
- package/src/internal/data-service-impl.ts +27 -10
- package/src/internal/query-service-impl.ts +7 -3
- package/src/internal/queue-service-impl.ts +32 -21
- package/src/internal/service-container.ts +45 -10
- package/src/internal/utils.ts +5 -0
- package/src/logger.ts +2 -0
- package/src/queues-api.ts +6 -6
- package/src/space-proxy.ts +4 -3
- package/src/wrap-handler-for-cloudflare.ts +3 -3
|
@@ -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:
|
|
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
|
|
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:
|
|
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
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
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:
|
|
144
|
+
L: 63,
|
|
78
145
|
S: this,
|
|
79
146
|
C: (f, a) => f(...a)
|
|
80
147
|
});
|
|
81
|
-
|
|
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(
|
|
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
|
-
|
|
134
|
-
|
|
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:
|
|
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:
|
|
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
|
-
|
|
255
|
-
|
|
256
|
-
|
|
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:
|
|
477
|
+
L: 66,
|
|
290
478
|
S: this,
|
|
291
479
|
C: (f, a) => f(...a)
|
|
292
480
|
});
|
|
@@ -331,7 +519,72 @@ var getTargetSpacesForQuery = (query) => {
|
|
|
331
519
|
};
|
|
332
520
|
|
|
333
521
|
// src/internal/queue-service-impl.ts
|
|
334
|
-
import {
|
|
522
|
+
import { RuntimeServiceError as RuntimeServiceError3 } from "@dxos/errors";
|
|
523
|
+
function _ts_add_disposable_resource3(env, value, async) {
|
|
524
|
+
if (value !== null && value !== void 0) {
|
|
525
|
+
if (typeof value !== "object" && typeof value !== "function") throw new TypeError("Object expected.");
|
|
526
|
+
var dispose, inner;
|
|
527
|
+
if (async) {
|
|
528
|
+
if (!Symbol.asyncDispose) throw new TypeError("Symbol.asyncDispose is not defined.");
|
|
529
|
+
dispose = value[Symbol.asyncDispose];
|
|
530
|
+
}
|
|
531
|
+
if (dispose === void 0) {
|
|
532
|
+
if (!Symbol.dispose) throw new TypeError("Symbol.dispose is not defined.");
|
|
533
|
+
dispose = value[Symbol.dispose];
|
|
534
|
+
if (async) inner = dispose;
|
|
535
|
+
}
|
|
536
|
+
if (typeof dispose !== "function") throw new TypeError("Object not disposable.");
|
|
537
|
+
if (inner) dispose = function() {
|
|
538
|
+
try {
|
|
539
|
+
inner.call(this);
|
|
540
|
+
} catch (e) {
|
|
541
|
+
return Promise.reject(e);
|
|
542
|
+
}
|
|
543
|
+
};
|
|
544
|
+
env.stack.push({
|
|
545
|
+
value,
|
|
546
|
+
dispose,
|
|
547
|
+
async
|
|
548
|
+
});
|
|
549
|
+
} else if (async) {
|
|
550
|
+
env.stack.push({
|
|
551
|
+
async: true
|
|
552
|
+
});
|
|
553
|
+
}
|
|
554
|
+
return value;
|
|
555
|
+
}
|
|
556
|
+
function _ts_dispose_resources3(env) {
|
|
557
|
+
var _SuppressedError = typeof SuppressedError === "function" ? SuppressedError : function(error, suppressed, message) {
|
|
558
|
+
var e = new Error(message);
|
|
559
|
+
return e.name = "SuppressedError", e.error = error, e.suppressed = suppressed, e;
|
|
560
|
+
};
|
|
561
|
+
return (_ts_dispose_resources3 = function _ts_dispose_resources5(env2) {
|
|
562
|
+
function fail(e) {
|
|
563
|
+
env2.error = env2.hasError ? new _SuppressedError(e, env2.error, "An error was suppressed during disposal.") : e;
|
|
564
|
+
env2.hasError = true;
|
|
565
|
+
}
|
|
566
|
+
var r, s = 0;
|
|
567
|
+
function next() {
|
|
568
|
+
while (r = env2.stack.pop()) {
|
|
569
|
+
try {
|
|
570
|
+
if (!r.async && s === 1) return s = 0, env2.stack.push(r), Promise.resolve().then(next);
|
|
571
|
+
if (r.dispose) {
|
|
572
|
+
var result = r.dispose.call(r.value);
|
|
573
|
+
if (r.async) return s |= 2, Promise.resolve(result).then(next, function(e) {
|
|
574
|
+
fail(e);
|
|
575
|
+
return next();
|
|
576
|
+
});
|
|
577
|
+
} else s |= 1;
|
|
578
|
+
} catch (e) {
|
|
579
|
+
fail(e);
|
|
580
|
+
}
|
|
581
|
+
}
|
|
582
|
+
if (s === 1) return env2.hasError ? Promise.reject(env2.error) : Promise.resolve();
|
|
583
|
+
if (env2.hasError) throw env2.error;
|
|
584
|
+
}
|
|
585
|
+
return next();
|
|
586
|
+
})(env);
|
|
587
|
+
}
|
|
335
588
|
var QueueServiceImpl = class {
|
|
336
589
|
_ctx;
|
|
337
590
|
_queueService;
|
|
@@ -339,27 +592,56 @@ var QueueServiceImpl = class {
|
|
|
339
592
|
this._ctx = _ctx;
|
|
340
593
|
this._queueService = _queueService;
|
|
341
594
|
}
|
|
342
|
-
async queryQueue(
|
|
595
|
+
async queryQueue(request) {
|
|
343
596
|
try {
|
|
344
|
-
const
|
|
345
|
-
|
|
597
|
+
const env = {
|
|
598
|
+
stack: [],
|
|
599
|
+
error: void 0,
|
|
600
|
+
hasError: false
|
|
601
|
+
};
|
|
602
|
+
try {
|
|
603
|
+
const result = _ts_add_disposable_resource3(env, await this._queueService.queryQueue(this._ctx, request), false);
|
|
604
|
+
return {
|
|
605
|
+
objects: structuredClone(result.objects),
|
|
606
|
+
nextCursor: result.nextCursor,
|
|
607
|
+
prevCursor: result.prevCursor
|
|
608
|
+
};
|
|
609
|
+
} catch (e) {
|
|
610
|
+
env.error = e;
|
|
611
|
+
env.hasError = true;
|
|
612
|
+
} finally {
|
|
613
|
+
_ts_dispose_resources3(env);
|
|
614
|
+
}
|
|
346
615
|
} catch (error) {
|
|
616
|
+
const { query } = request;
|
|
347
617
|
throw RuntimeServiceError3.wrap({
|
|
348
618
|
message: "Queue query failed.",
|
|
349
619
|
context: {
|
|
350
|
-
subspaceTag,
|
|
351
|
-
spaceId,
|
|
352
|
-
queueId
|
|
620
|
+
subspaceTag: query?.queuesNamespace,
|
|
621
|
+
spaceId: query?.spaceId,
|
|
622
|
+
queueId: query?.queueIds?.[0]
|
|
353
623
|
},
|
|
354
624
|
ifTypeDiffers: true
|
|
355
625
|
})(error);
|
|
356
626
|
}
|
|
357
627
|
}
|
|
358
|
-
async insertIntoQueue(
|
|
628
|
+
async insertIntoQueue(request) {
|
|
359
629
|
try {
|
|
360
|
-
const
|
|
361
|
-
|
|
630
|
+
const env = {
|
|
631
|
+
stack: [],
|
|
632
|
+
error: void 0,
|
|
633
|
+
hasError: false
|
|
634
|
+
};
|
|
635
|
+
try {
|
|
636
|
+
const _ = _ts_add_disposable_resource3(env, await this._queueService.insertIntoQueue(this._ctx, request), false);
|
|
637
|
+
} catch (e) {
|
|
638
|
+
env.error = e;
|
|
639
|
+
env.hasError = true;
|
|
640
|
+
} finally {
|
|
641
|
+
_ts_dispose_resources3(env);
|
|
642
|
+
}
|
|
362
643
|
} catch (error) {
|
|
644
|
+
const { subspaceTag, spaceId, queueId } = request;
|
|
363
645
|
throw RuntimeServiceError3.wrap({
|
|
364
646
|
message: "Queue append failed.",
|
|
365
647
|
context: {
|
|
@@ -371,30 +653,131 @@ var QueueServiceImpl = class {
|
|
|
371
653
|
})(error);
|
|
372
654
|
}
|
|
373
655
|
}
|
|
374
|
-
deleteFromQueue(
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
|
|
656
|
+
async deleteFromQueue(request) {
|
|
657
|
+
try {
|
|
658
|
+
const env = {
|
|
659
|
+
stack: [],
|
|
660
|
+
error: void 0,
|
|
661
|
+
hasError: false
|
|
662
|
+
};
|
|
663
|
+
try {
|
|
664
|
+
const _ = _ts_add_disposable_resource3(env, await this._queueService.deleteFromQueue(this._ctx, request), false);
|
|
665
|
+
} catch (e) {
|
|
666
|
+
env.error = e;
|
|
667
|
+
env.hasError = true;
|
|
668
|
+
} finally {
|
|
669
|
+
_ts_dispose_resources3(env);
|
|
381
670
|
}
|
|
382
|
-
})
|
|
671
|
+
} catch (error) {
|
|
672
|
+
const { subspaceTag, spaceId, queueId } = request;
|
|
673
|
+
throw RuntimeServiceError3.wrap({
|
|
674
|
+
message: "Queue delete failed.",
|
|
675
|
+
context: {
|
|
676
|
+
subspaceTag,
|
|
677
|
+
spaceId,
|
|
678
|
+
queueId
|
|
679
|
+
},
|
|
680
|
+
ifTypeDiffers: true
|
|
681
|
+
})(error);
|
|
682
|
+
}
|
|
383
683
|
}
|
|
384
684
|
};
|
|
385
685
|
|
|
386
686
|
// src/internal/service-container.ts
|
|
687
|
+
function _ts_add_disposable_resource4(env, value, async) {
|
|
688
|
+
if (value !== null && value !== void 0) {
|
|
689
|
+
if (typeof value !== "object" && typeof value !== "function") throw new TypeError("Object expected.");
|
|
690
|
+
var dispose, inner;
|
|
691
|
+
if (async) {
|
|
692
|
+
if (!Symbol.asyncDispose) throw new TypeError("Symbol.asyncDispose is not defined.");
|
|
693
|
+
dispose = value[Symbol.asyncDispose];
|
|
694
|
+
}
|
|
695
|
+
if (dispose === void 0) {
|
|
696
|
+
if (!Symbol.dispose) throw new TypeError("Symbol.dispose is not defined.");
|
|
697
|
+
dispose = value[Symbol.dispose];
|
|
698
|
+
if (async) inner = dispose;
|
|
699
|
+
}
|
|
700
|
+
if (typeof dispose !== "function") throw new TypeError("Object not disposable.");
|
|
701
|
+
if (inner) dispose = function() {
|
|
702
|
+
try {
|
|
703
|
+
inner.call(this);
|
|
704
|
+
} catch (e) {
|
|
705
|
+
return Promise.reject(e);
|
|
706
|
+
}
|
|
707
|
+
};
|
|
708
|
+
env.stack.push({
|
|
709
|
+
value,
|
|
710
|
+
dispose,
|
|
711
|
+
async
|
|
712
|
+
});
|
|
713
|
+
} else if (async) {
|
|
714
|
+
env.stack.push({
|
|
715
|
+
async: true
|
|
716
|
+
});
|
|
717
|
+
}
|
|
718
|
+
return value;
|
|
719
|
+
}
|
|
720
|
+
function _ts_dispose_resources4(env) {
|
|
721
|
+
var _SuppressedError = typeof SuppressedError === "function" ? SuppressedError : function(error, suppressed, message) {
|
|
722
|
+
var e = new Error(message);
|
|
723
|
+
return e.name = "SuppressedError", e.error = error, e.suppressed = suppressed, e;
|
|
724
|
+
};
|
|
725
|
+
return (_ts_dispose_resources4 = function _ts_dispose_resources5(env2) {
|
|
726
|
+
function fail(e) {
|
|
727
|
+
env2.error = env2.hasError ? new _SuppressedError(e, env2.error, "An error was suppressed during disposal.") : e;
|
|
728
|
+
env2.hasError = true;
|
|
729
|
+
}
|
|
730
|
+
var r, s = 0;
|
|
731
|
+
function next() {
|
|
732
|
+
while (r = env2.stack.pop()) {
|
|
733
|
+
try {
|
|
734
|
+
if (!r.async && s === 1) return s = 0, env2.stack.push(r), Promise.resolve().then(next);
|
|
735
|
+
if (r.dispose) {
|
|
736
|
+
var result = r.dispose.call(r.value);
|
|
737
|
+
if (r.async) return s |= 2, Promise.resolve(result).then(next, function(e) {
|
|
738
|
+
fail(e);
|
|
739
|
+
return next();
|
|
740
|
+
});
|
|
741
|
+
} else s |= 1;
|
|
742
|
+
} catch (e) {
|
|
743
|
+
fail(e);
|
|
744
|
+
}
|
|
745
|
+
}
|
|
746
|
+
if (s === 1) return env2.hasError ? Promise.reject(env2.error) : Promise.resolve();
|
|
747
|
+
if (env2.hasError) throw env2.error;
|
|
748
|
+
}
|
|
749
|
+
return next();
|
|
750
|
+
})(env);
|
|
751
|
+
}
|
|
387
752
|
var ServiceContainer = class {
|
|
388
753
|
_executionContext;
|
|
389
754
|
_dataService;
|
|
390
755
|
_queueService;
|
|
391
|
-
|
|
756
|
+
_functionsService;
|
|
757
|
+
constructor(_executionContext, _dataService, _queueService, _functionsService) {
|
|
392
758
|
this._executionContext = _executionContext;
|
|
393
759
|
this._dataService = _dataService;
|
|
394
760
|
this._queueService = _queueService;
|
|
761
|
+
this._functionsService = _functionsService;
|
|
395
762
|
}
|
|
396
763
|
async getSpaceMeta(spaceId) {
|
|
397
|
-
|
|
764
|
+
const env = {
|
|
765
|
+
stack: [],
|
|
766
|
+
error: void 0,
|
|
767
|
+
hasError: false
|
|
768
|
+
};
|
|
769
|
+
try {
|
|
770
|
+
const result = _ts_add_disposable_resource4(env, await this._dataService.getSpaceMeta(this._executionContext, spaceId), false);
|
|
771
|
+
return result ? {
|
|
772
|
+
spaceKey: result.spaceKey,
|
|
773
|
+
rootDocumentId: result.rootDocumentId
|
|
774
|
+
} : void 0;
|
|
775
|
+
} catch (e) {
|
|
776
|
+
env.error = e;
|
|
777
|
+
env.hasError = true;
|
|
778
|
+
} finally {
|
|
779
|
+
_ts_dispose_resources4(env);
|
|
780
|
+
}
|
|
398
781
|
}
|
|
399
782
|
async createServices() {
|
|
400
783
|
const dataService = new DataServiceImpl(this._executionContext, this._dataService);
|
|
@@ -403,14 +786,43 @@ var ServiceContainer = class {
|
|
|
403
786
|
return {
|
|
404
787
|
dataService,
|
|
405
788
|
queryService,
|
|
406
|
-
queueService
|
|
789
|
+
queueService,
|
|
790
|
+
functionsAiService: this._functionsService
|
|
407
791
|
};
|
|
408
792
|
}
|
|
409
|
-
queryQueue(queue) {
|
|
410
|
-
|
|
793
|
+
async queryQueue(queue) {
|
|
794
|
+
const parts = queue.asQueueDXN();
|
|
795
|
+
if (!parts) {
|
|
796
|
+
throw new Error("Invalid queue DXN");
|
|
797
|
+
}
|
|
798
|
+
const { subspaceTag, spaceId, queueId } = parts;
|
|
799
|
+
const result = await this._queueService.queryQueue(this._executionContext, {
|
|
800
|
+
query: {
|
|
801
|
+
spaceId,
|
|
802
|
+
queuesNamespace: subspaceTag,
|
|
803
|
+
queueIds: [
|
|
804
|
+
queueId
|
|
805
|
+
]
|
|
806
|
+
}
|
|
807
|
+
});
|
|
808
|
+
return {
|
|
809
|
+
objects: structuredClone(result.objects),
|
|
810
|
+
nextCursor: result.nextCursor ?? null,
|
|
811
|
+
prevCursor: result.prevCursor ?? null
|
|
812
|
+
};
|
|
411
813
|
}
|
|
412
|
-
insertIntoQueue(queue, objects) {
|
|
413
|
-
|
|
814
|
+
async insertIntoQueue(queue, objects) {
|
|
815
|
+
const parts = queue.asQueueDXN();
|
|
816
|
+
if (!parts) {
|
|
817
|
+
throw new Error("Invalid queue DXN");
|
|
818
|
+
}
|
|
819
|
+
const { subspaceTag, spaceId, queueId } = parts;
|
|
820
|
+
await this._queueService.insertIntoQueue(this._executionContext, {
|
|
821
|
+
subspaceTag,
|
|
822
|
+
spaceId,
|
|
823
|
+
queueId,
|
|
824
|
+
objects
|
|
825
|
+
});
|
|
414
826
|
}
|
|
415
827
|
};
|
|
416
828
|
|
|
@@ -453,7 +865,7 @@ var SpaceProxy = class extends Resource {
|
|
|
453
865
|
get db() {
|
|
454
866
|
invariant4(this._db, void 0, {
|
|
455
867
|
F: __dxlog_file4,
|
|
456
|
-
L:
|
|
868
|
+
L: 35,
|
|
457
869
|
S: this,
|
|
458
870
|
A: [
|
|
459
871
|
"this._db",
|
|
@@ -468,7 +880,7 @@ var SpaceProxy = class extends Resource {
|
|
|
468
880
|
get crud() {
|
|
469
881
|
invariant4(this._db, void 0, {
|
|
470
882
|
F: __dxlog_file4,
|
|
471
|
-
L:
|
|
883
|
+
L: 43,
|
|
472
884
|
S: this,
|
|
473
885
|
A: [
|
|
474
886
|
"this._db",
|
|
@@ -508,7 +920,7 @@ var FunctionsClient = class extends Resource2 {
|
|
|
508
920
|
super();
|
|
509
921
|
invariant5(typeof services.dataService !== "undefined", "DataService is required", {
|
|
510
922
|
F: __dxlog_file5,
|
|
511
|
-
L:
|
|
923
|
+
L: 33,
|
|
512
924
|
S: this,
|
|
513
925
|
A: [
|
|
514
926
|
"typeof services.dataService !== 'undefined'",
|
|
@@ -517,14 +929,14 @@ var FunctionsClient = class extends Resource2 {
|
|
|
517
929
|
});
|
|
518
930
|
invariant5(typeof services.queueService !== "undefined", "QueueService is required", {
|
|
519
931
|
F: __dxlog_file5,
|
|
520
|
-
L:
|
|
932
|
+
L: 34,
|
|
521
933
|
S: this,
|
|
522
934
|
A: [
|
|
523
935
|
"typeof services.queueService !== 'undefined'",
|
|
524
936
|
"'QueueService is required'"
|
|
525
937
|
]
|
|
526
938
|
});
|
|
527
|
-
this._serviceContainer = new ServiceContainer(this._executionContext, services.dataService, services.queueService);
|
|
939
|
+
this._serviceContainer = new ServiceContainer(this._executionContext, services.dataService, services.queueService, services.functionsAiService);
|
|
528
940
|
this._echoClient = new EchoClient({});
|
|
529
941
|
}
|
|
530
942
|
get echo() {
|
|
@@ -558,7 +970,8 @@ var FunctionsClient = class extends Resource2 {
|
|
|
558
970
|
var createClientFromEnv = async (env) => {
|
|
559
971
|
const client = new FunctionsClient({
|
|
560
972
|
dataService: env.DATA_SERVICE,
|
|
561
|
-
queueService: env.QUEUE_SERVICE
|
|
973
|
+
queueService: env.QUEUE_SERVICE,
|
|
974
|
+
functionsAiService: env.FUNCTIONS_AI_SERVICE
|
|
562
975
|
});
|
|
563
976
|
await client.open();
|
|
564
977
|
return client;
|
|
@@ -580,14 +993,6 @@ var __dxlog_file6 = "/__w/dxos/dxos/packages/core/functions-runtime-cloudflare/s
|
|
|
580
993
|
var wrapHandlerForCloudflare = (func) => {
|
|
581
994
|
return async (request, env) => {
|
|
582
995
|
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
996
|
return handleFunctionMetaCall(func, request);
|
|
592
997
|
}
|
|
593
998
|
try {
|
|
@@ -599,7 +1004,7 @@ var wrapHandlerForCloudflare = (func) => {
|
|
|
599
1004
|
});
|
|
600
1005
|
}
|
|
601
1006
|
}
|
|
602
|
-
const serviceContainer = new ServiceContainer({}, env.DATA_SERVICE, env.QUEUE_SERVICE);
|
|
1007
|
+
const serviceContainer = new ServiceContainer({}, env.DATA_SERVICE, env.QUEUE_SERVICE, env.FUNCTIONS_AI_SERVICE);
|
|
603
1008
|
const context = await createFunctionContext({
|
|
604
1009
|
serviceContainer,
|
|
605
1010
|
contextSpaceId: spaceId
|
|
@@ -611,7 +1016,7 @@ var wrapHandlerForCloudflare = (func) => {
|
|
|
611
1016
|
stack: error.stack
|
|
612
1017
|
}, {
|
|
613
1018
|
F: __dxlog_file6,
|
|
614
|
-
L:
|
|
1019
|
+
L: 44,
|
|
615
1020
|
S: void 0,
|
|
616
1021
|
C: (f, a) => f(...a)
|
|
617
1022
|
});
|
|
@@ -649,7 +1054,7 @@ var decodeRequest = async (request) => {
|
|
|
649
1054
|
} catch (err) {
|
|
650
1055
|
log3.catch(err, void 0, {
|
|
651
1056
|
F: __dxlog_file6,
|
|
652
|
-
L:
|
|
1057
|
+
L: 79,
|
|
653
1058
|
S: void 0,
|
|
654
1059
|
C: (f, a) => f(...a)
|
|
655
1060
|
});
|
|
@@ -676,7 +1081,7 @@ var handleFunctionMetaCall = (functionDefinition, request) => {
|
|
|
676
1081
|
});
|
|
677
1082
|
};
|
|
678
1083
|
var createFunctionContext = async ({ serviceContainer, contextSpaceId }) => {
|
|
679
|
-
const { dataService, queryService, queueService } = await serviceContainer.createServices();
|
|
1084
|
+
const { dataService, queryService, queueService, functionsAiService } = await serviceContainer.createServices();
|
|
680
1085
|
let spaceKey;
|
|
681
1086
|
let rootUrl;
|
|
682
1087
|
if (contextSpaceId) {
|
|
@@ -687,7 +1092,7 @@ var createFunctionContext = async ({ serviceContainer, contextSpaceId }) => {
|
|
|
687
1092
|
spaceKey = meta.spaceKey;
|
|
688
1093
|
invariant6(!meta.rootDocumentId.startsWith("automerge:"), void 0, {
|
|
689
1094
|
F: __dxlog_file6,
|
|
690
|
-
L:
|
|
1095
|
+
L: 117,
|
|
691
1096
|
S: void 0,
|
|
692
1097
|
A: [
|
|
693
1098
|
"!meta.rootDocumentId.startsWith('automerge:')",
|
|
@@ -700,7 +1105,8 @@ var createFunctionContext = async ({ serviceContainer, contextSpaceId }) => {
|
|
|
700
1105
|
services: {
|
|
701
1106
|
dataService,
|
|
702
1107
|
queryService,
|
|
703
|
-
queueService
|
|
1108
|
+
queueService,
|
|
1109
|
+
functionsAiService
|
|
704
1110
|
},
|
|
705
1111
|
spaceId: contextSpaceId,
|
|
706
1112
|
spaceKey,
|