@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
|
@@ -10,6 +10,76 @@ import { NotImplementedError, RuntimeServiceError } from "@dxos/errors";
|
|
|
10
10
|
import { invariant } from "@dxos/invariant";
|
|
11
11
|
import { SpaceId } from "@dxos/keys";
|
|
12
12
|
import { log } from "@dxos/log";
|
|
13
|
+
|
|
14
|
+
// src/internal/utils.ts
|
|
15
|
+
var copyUint8Array = (value) => new Uint8Array(value);
|
|
16
|
+
|
|
17
|
+
// src/internal/data-service-impl.ts
|
|
18
|
+
function _ts_add_disposable_resource(env, value, async) {
|
|
19
|
+
if (value !== null && value !== void 0) {
|
|
20
|
+
if (typeof value !== "object" && typeof value !== "function") throw new TypeError("Object expected.");
|
|
21
|
+
var dispose, inner;
|
|
22
|
+
if (async) {
|
|
23
|
+
if (!Symbol.asyncDispose) throw new TypeError("Symbol.asyncDispose is not defined.");
|
|
24
|
+
dispose = value[Symbol.asyncDispose];
|
|
25
|
+
}
|
|
26
|
+
if (dispose === void 0) {
|
|
27
|
+
if (!Symbol.dispose) throw new TypeError("Symbol.dispose is not defined.");
|
|
28
|
+
dispose = value[Symbol.dispose];
|
|
29
|
+
if (async) inner = dispose;
|
|
30
|
+
}
|
|
31
|
+
if (typeof dispose !== "function") throw new TypeError("Object not disposable.");
|
|
32
|
+
if (inner) dispose = function() {
|
|
33
|
+
try {
|
|
34
|
+
inner.call(this);
|
|
35
|
+
} catch (e) {
|
|
36
|
+
return Promise.reject(e);
|
|
37
|
+
}
|
|
38
|
+
};
|
|
39
|
+
env.stack.push({
|
|
40
|
+
value,
|
|
41
|
+
dispose,
|
|
42
|
+
async
|
|
43
|
+
});
|
|
44
|
+
} else if (async) {
|
|
45
|
+
env.stack.push({
|
|
46
|
+
async: true
|
|
47
|
+
});
|
|
48
|
+
}
|
|
49
|
+
return value;
|
|
50
|
+
}
|
|
51
|
+
function _ts_dispose_resources(env) {
|
|
52
|
+
var _SuppressedError = typeof SuppressedError === "function" ? SuppressedError : function(error, suppressed, message) {
|
|
53
|
+
var e = new Error(message);
|
|
54
|
+
return e.name = "SuppressedError", e.error = error, e.suppressed = suppressed, e;
|
|
55
|
+
};
|
|
56
|
+
return (_ts_dispose_resources = function _ts_dispose_resources5(env2) {
|
|
57
|
+
function fail(e) {
|
|
58
|
+
env2.error = env2.hasError ? new _SuppressedError(e, env2.error, "An error was suppressed during disposal.") : e;
|
|
59
|
+
env2.hasError = true;
|
|
60
|
+
}
|
|
61
|
+
var r, s = 0;
|
|
62
|
+
function next() {
|
|
63
|
+
while (r = env2.stack.pop()) {
|
|
64
|
+
try {
|
|
65
|
+
if (!r.async && s === 1) return s = 0, env2.stack.push(r), Promise.resolve().then(next);
|
|
66
|
+
if (r.dispose) {
|
|
67
|
+
var result = r.dispose.call(r.value);
|
|
68
|
+
if (r.async) return s |= 2, Promise.resolve(result).then(next, function(e) {
|
|
69
|
+
fail(e);
|
|
70
|
+
return next();
|
|
71
|
+
});
|
|
72
|
+
} else s |= 1;
|
|
73
|
+
} catch (e) {
|
|
74
|
+
fail(e);
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
if (s === 1) return env2.hasError ? Promise.reject(env2.error) : Promise.resolve();
|
|
78
|
+
if (env2.hasError) throw env2.error;
|
|
79
|
+
}
|
|
80
|
+
return next();
|
|
81
|
+
})(env);
|
|
82
|
+
}
|
|
13
83
|
var __dxlog_file = "/__w/dxos/dxos/packages/core/functions-runtime-cloudflare/src/internal/data-service-impl.ts";
|
|
14
84
|
var DataServiceImpl = class {
|
|
15
85
|
_executionContext;
|
|
@@ -23,7 +93,7 @@ var DataServiceImpl = class {
|
|
|
23
93
|
return new Stream(({ next }) => {
|
|
24
94
|
invariant(SpaceId.isValid(spaceId), void 0, {
|
|
25
95
|
F: __dxlog_file,
|
|
26
|
-
L:
|
|
96
|
+
L: 39,
|
|
27
97
|
S: this,
|
|
28
98
|
A: [
|
|
29
99
|
"SpaceId.isValid(spaceId)",
|
|
@@ -39,7 +109,7 @@ var DataServiceImpl = class {
|
|
|
39
109
|
};
|
|
40
110
|
});
|
|
41
111
|
}
|
|
42
|
-
async updateSubscription({ subscriptionId, addIds
|
|
112
|
+
async updateSubscription({ subscriptionId, addIds }) {
|
|
43
113
|
const sub = this.dataSubscriptions.get(subscriptionId) ?? raise(new RuntimeServiceError({
|
|
44
114
|
message: "Subscription not found.",
|
|
45
115
|
context: {
|
|
@@ -51,44 +121,79 @@ var DataServiceImpl = class {
|
|
|
51
121
|
count: addIds.length
|
|
52
122
|
}, {
|
|
53
123
|
F: __dxlog_file,
|
|
54
|
-
L:
|
|
124
|
+
L: 59,
|
|
55
125
|
S: this,
|
|
56
126
|
C: (f, a) => f(...a)
|
|
57
127
|
});
|
|
58
128
|
for (const documentId of addIds) {
|
|
59
|
-
const
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
if (!document) {
|
|
71
|
-
log.warn("not found", {
|
|
72
|
-
documentId
|
|
129
|
+
const env = {
|
|
130
|
+
stack: [],
|
|
131
|
+
error: void 0,
|
|
132
|
+
hasError: false
|
|
133
|
+
};
|
|
134
|
+
try {
|
|
135
|
+
const document = _ts_add_disposable_resource(env, await this._dataService.getDocument(this._executionContext, sub.spaceId, documentId), false);
|
|
136
|
+
log.info("document loaded", {
|
|
137
|
+
documentId,
|
|
138
|
+
spaceId: sub.spaceId,
|
|
139
|
+
found: !!document
|
|
73
140
|
}, {
|
|
74
141
|
F: __dxlog_file,
|
|
75
|
-
L:
|
|
142
|
+
L: 63,
|
|
76
143
|
S: this,
|
|
77
144
|
C: (f, a) => f(...a)
|
|
78
145
|
});
|
|
79
|
-
|
|
146
|
+
if (!document) {
|
|
147
|
+
log.warn("not found", {
|
|
148
|
+
documentId
|
|
149
|
+
}, {
|
|
150
|
+
F: __dxlog_file,
|
|
151
|
+
L: 65,
|
|
152
|
+
S: this,
|
|
153
|
+
C: (f, a) => f(...a)
|
|
154
|
+
});
|
|
155
|
+
continue;
|
|
156
|
+
}
|
|
157
|
+
sub.next({
|
|
158
|
+
updates: [
|
|
159
|
+
{
|
|
160
|
+
documentId,
|
|
161
|
+
// Copy returned object to avoid hanging RPC stub
|
|
162
|
+
// See https://developers.cloudflare.com/workers/runtime-apis/rpc/lifecycle/
|
|
163
|
+
mutation: copyUint8Array(document.data)
|
|
164
|
+
}
|
|
165
|
+
]
|
|
166
|
+
});
|
|
167
|
+
} catch (e) {
|
|
168
|
+
env.error = e;
|
|
169
|
+
env.hasError = true;
|
|
170
|
+
} finally {
|
|
171
|
+
_ts_dispose_resources(env);
|
|
80
172
|
}
|
|
81
|
-
sub.next({
|
|
82
|
-
updates: [
|
|
83
|
-
{
|
|
84
|
-
documentId,
|
|
85
|
-
mutation: document.data
|
|
86
|
-
}
|
|
87
|
-
]
|
|
88
|
-
});
|
|
89
173
|
}
|
|
90
174
|
}
|
|
91
175
|
}
|
|
176
|
+
async createDocument({ spaceId, initialValue }) {
|
|
177
|
+
const env = {
|
|
178
|
+
stack: [],
|
|
179
|
+
error: void 0,
|
|
180
|
+
hasError: false
|
|
181
|
+
};
|
|
182
|
+
try {
|
|
183
|
+
const response = _ts_add_disposable_resource(env, await this._dataService.createDocument(this._executionContext, {
|
|
184
|
+
spaceId,
|
|
185
|
+
initialValue
|
|
186
|
+
}), false);
|
|
187
|
+
return {
|
|
188
|
+
documentId: response.documentId
|
|
189
|
+
};
|
|
190
|
+
} catch (e) {
|
|
191
|
+
env.error = e;
|
|
192
|
+
env.hasError = true;
|
|
193
|
+
} finally {
|
|
194
|
+
_ts_dispose_resources(env);
|
|
195
|
+
}
|
|
196
|
+
}
|
|
92
197
|
async update({ updates, subscriptionId }) {
|
|
93
198
|
const sub = this.dataSubscriptions.get(subscriptionId) ?? raise(new RuntimeServiceError({
|
|
94
199
|
message: "Subscription not found.",
|
|
@@ -112,27 +217,30 @@ var DataServiceImpl = class {
|
|
|
112
217
|
}
|
|
113
218
|
async flush() {
|
|
114
219
|
}
|
|
115
|
-
subscribeSpaceSyncState(
|
|
220
|
+
subscribeSpaceSyncState(_request, _options) {
|
|
116
221
|
throw new NotImplementedError({
|
|
117
222
|
message: "subscribeSpaceSyncState is not implemented."
|
|
118
223
|
});
|
|
119
224
|
}
|
|
120
|
-
async getDocumentHeads({ documentIds }) {
|
|
225
|
+
async getDocumentHeads({ documentIds: _documentIds }) {
|
|
121
226
|
throw new NotImplementedError({
|
|
122
227
|
message: "getDocumentHeads is not implemented."
|
|
123
228
|
});
|
|
124
229
|
}
|
|
125
|
-
async reIndexHeads({ documentIds }) {
|
|
230
|
+
async reIndexHeads({ documentIds: _documentIds }) {
|
|
126
231
|
throw new NotImplementedError({
|
|
127
232
|
message: "reIndexHeads is not implemented."
|
|
128
233
|
});
|
|
129
234
|
}
|
|
130
235
|
async updateIndexes() {
|
|
131
|
-
|
|
132
|
-
|
|
236
|
+
log.error("updateIndexes is not available in EDGE env.", void 0, {
|
|
237
|
+
F: __dxlog_file,
|
|
238
|
+
L: 133,
|
|
239
|
+
S: this,
|
|
240
|
+
C: (f, a) => f(...a)
|
|
133
241
|
});
|
|
134
242
|
}
|
|
135
|
-
async waitUntilHeadsReplicated({ heads }) {
|
|
243
|
+
async waitUntilHeadsReplicated({ heads: _heads }) {
|
|
136
244
|
throw new NotImplementedError({
|
|
137
245
|
message: "waitUntilHeadsReplicated is not implemented."
|
|
138
246
|
});
|
|
@@ -217,6 +325,71 @@ var isSimpleSelectionQuery = (query) => {
|
|
|
217
325
|
};
|
|
218
326
|
|
|
219
327
|
// src/internal/query-service-impl.ts
|
|
328
|
+
function _ts_add_disposable_resource2(env, value, async) {
|
|
329
|
+
if (value !== null && value !== void 0) {
|
|
330
|
+
if (typeof value !== "object" && typeof value !== "function") throw new TypeError("Object expected.");
|
|
331
|
+
var dispose, inner;
|
|
332
|
+
if (async) {
|
|
333
|
+
if (!Symbol.asyncDispose) throw new TypeError("Symbol.asyncDispose is not defined.");
|
|
334
|
+
dispose = value[Symbol.asyncDispose];
|
|
335
|
+
}
|
|
336
|
+
if (dispose === void 0) {
|
|
337
|
+
if (!Symbol.dispose) throw new TypeError("Symbol.dispose is not defined.");
|
|
338
|
+
dispose = value[Symbol.dispose];
|
|
339
|
+
if (async) inner = dispose;
|
|
340
|
+
}
|
|
341
|
+
if (typeof dispose !== "function") throw new TypeError("Object not disposable.");
|
|
342
|
+
if (inner) dispose = function() {
|
|
343
|
+
try {
|
|
344
|
+
inner.call(this);
|
|
345
|
+
} catch (e) {
|
|
346
|
+
return Promise.reject(e);
|
|
347
|
+
}
|
|
348
|
+
};
|
|
349
|
+
env.stack.push({
|
|
350
|
+
value,
|
|
351
|
+
dispose,
|
|
352
|
+
async
|
|
353
|
+
});
|
|
354
|
+
} else if (async) {
|
|
355
|
+
env.stack.push({
|
|
356
|
+
async: true
|
|
357
|
+
});
|
|
358
|
+
}
|
|
359
|
+
return value;
|
|
360
|
+
}
|
|
361
|
+
function _ts_dispose_resources2(env) {
|
|
362
|
+
var _SuppressedError = typeof SuppressedError === "function" ? SuppressedError : function(error, suppressed, message) {
|
|
363
|
+
var e = new Error(message);
|
|
364
|
+
return e.name = "SuppressedError", e.error = error, e.suppressed = suppressed, e;
|
|
365
|
+
};
|
|
366
|
+
return (_ts_dispose_resources2 = function _ts_dispose_resources5(env2) {
|
|
367
|
+
function fail(e) {
|
|
368
|
+
env2.error = env2.hasError ? new _SuppressedError(e, env2.error, "An error was suppressed during disposal.") : e;
|
|
369
|
+
env2.hasError = true;
|
|
370
|
+
}
|
|
371
|
+
var r, s = 0;
|
|
372
|
+
function next() {
|
|
373
|
+
while (r = env2.stack.pop()) {
|
|
374
|
+
try {
|
|
375
|
+
if (!r.async && s === 1) return s = 0, env2.stack.push(r), Promise.resolve().then(next);
|
|
376
|
+
if (r.dispose) {
|
|
377
|
+
var result = r.dispose.call(r.value);
|
|
378
|
+
if (r.async) return s |= 2, Promise.resolve(result).then(next, function(e) {
|
|
379
|
+
fail(e);
|
|
380
|
+
return next();
|
|
381
|
+
});
|
|
382
|
+
} else s |= 1;
|
|
383
|
+
} catch (e) {
|
|
384
|
+
fail(e);
|
|
385
|
+
}
|
|
386
|
+
}
|
|
387
|
+
if (s === 1) return env2.hasError ? Promise.reject(env2.error) : Promise.resolve();
|
|
388
|
+
if (env2.hasError) throw env2.error;
|
|
389
|
+
}
|
|
390
|
+
return next();
|
|
391
|
+
})(env);
|
|
392
|
+
}
|
|
220
393
|
var __dxlog_file3 = "/__w/dxos/dxos/packages/core/functions-runtime-cloudflare/src/internal/query-service-impl.ts";
|
|
221
394
|
var QueryServiceImpl = class {
|
|
222
395
|
_executionContext;
|
|
@@ -231,7 +404,7 @@ var QueryServiceImpl = class {
|
|
|
231
404
|
request
|
|
232
405
|
}, {
|
|
233
406
|
F: __dxlog_file3,
|
|
234
|
-
L:
|
|
407
|
+
L: 34,
|
|
235
408
|
S: this,
|
|
236
409
|
C: (f, a) => f(...a)
|
|
237
410
|
});
|
|
@@ -239,7 +412,7 @@ var QueryServiceImpl = class {
|
|
|
239
412
|
const requestedSpaceIds = getTargetSpacesForQuery(query);
|
|
240
413
|
invariant3(requestedSpaceIds.length === 1, "Only one space is supported", {
|
|
241
414
|
F: __dxlog_file3,
|
|
242
|
-
L:
|
|
415
|
+
L: 37,
|
|
243
416
|
S: this,
|
|
244
417
|
A: [
|
|
245
418
|
"requestedSpaceIds.length === 1",
|
|
@@ -249,42 +422,57 @@ var QueryServiceImpl = class {
|
|
|
249
422
|
const spaceId = requestedSpaceIds[0];
|
|
250
423
|
return Stream2.fromPromise((async () => {
|
|
251
424
|
try {
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
F: __dxlog_file3,
|
|
257
|
-
L: 43,
|
|
258
|
-
S: this,
|
|
259
|
-
C: (f, a) => f(...a)
|
|
260
|
-
});
|
|
261
|
-
const queryResponse = await this._dataService.queryDocuments(this._executionContext, queryToDataServiceRequest(query));
|
|
262
|
-
log2.info("query response", {
|
|
263
|
-
spaceId,
|
|
264
|
-
filter: request.filter,
|
|
265
|
-
resultCount: queryResponse.results.length
|
|
266
|
-
}, {
|
|
267
|
-
F: __dxlog_file3,
|
|
268
|
-
L: 48,
|
|
269
|
-
S: this,
|
|
270
|
-
C: (f, a) => f(...a)
|
|
271
|
-
});
|
|
272
|
-
return {
|
|
273
|
-
results: queryResponse.results.map((object) => ({
|
|
274
|
-
id: object.objectId,
|
|
275
|
-
spaceId,
|
|
276
|
-
spaceKey: PublicKey.ZERO,
|
|
277
|
-
documentId: object.document.documentId,
|
|
278
|
-
rank: 0,
|
|
279
|
-
documentAutomerge: object.document.data
|
|
280
|
-
}))
|
|
425
|
+
const env = {
|
|
426
|
+
stack: [],
|
|
427
|
+
error: void 0,
|
|
428
|
+
hasError: false
|
|
281
429
|
};
|
|
430
|
+
try {
|
|
431
|
+
this._queryCount++;
|
|
432
|
+
log2.info("begin query", {
|
|
433
|
+
spaceId
|
|
434
|
+
}, {
|
|
435
|
+
F: __dxlog_file3,
|
|
436
|
+
L: 44,
|
|
437
|
+
S: this,
|
|
438
|
+
C: (f, a) => f(...a)
|
|
439
|
+
});
|
|
440
|
+
const queryResponse = _ts_add_disposable_resource2(env, await this._dataService.queryDocuments(this._executionContext, queryToDataServiceRequest(query)), false);
|
|
441
|
+
log2.info("query response", {
|
|
442
|
+
spaceId,
|
|
443
|
+
filter: request.filter,
|
|
444
|
+
resultCount: queryResponse.results.length
|
|
445
|
+
}, {
|
|
446
|
+
F: __dxlog_file3,
|
|
447
|
+
L: 49,
|
|
448
|
+
S: this,
|
|
449
|
+
C: (f, a) => f(...a)
|
|
450
|
+
});
|
|
451
|
+
return {
|
|
452
|
+
results: queryResponse.results.map((object) => ({
|
|
453
|
+
id: object.objectId,
|
|
454
|
+
spaceId,
|
|
455
|
+
spaceKey: PublicKey.ZERO,
|
|
456
|
+
documentId: object.document.documentId,
|
|
457
|
+
// Rank 1 for predicate matches where ranking is not determined.
|
|
458
|
+
rank: 1,
|
|
459
|
+
// Copy returned object to avoid hanging RPC stub.
|
|
460
|
+
// See https://developers.cloudflare.com/workers/runtime-apis/rpc/lifecycle/
|
|
461
|
+
documentAutomerge: copyUint8Array(object.document.data)
|
|
462
|
+
}))
|
|
463
|
+
};
|
|
464
|
+
} catch (e) {
|
|
465
|
+
env.error = e;
|
|
466
|
+
env.hasError = true;
|
|
467
|
+
} finally {
|
|
468
|
+
_ts_dispose_resources2(env);
|
|
469
|
+
}
|
|
282
470
|
} catch (error) {
|
|
283
471
|
log2.error("query failed", {
|
|
284
472
|
err: error
|
|
285
473
|
}, {
|
|
286
474
|
F: __dxlog_file3,
|
|
287
|
-
L:
|
|
475
|
+
L: 66,
|
|
288
476
|
S: this,
|
|
289
477
|
C: (f, a) => f(...a)
|
|
290
478
|
});
|
|
@@ -329,7 +517,72 @@ var getTargetSpacesForQuery = (query) => {
|
|
|
329
517
|
};
|
|
330
518
|
|
|
331
519
|
// src/internal/queue-service-impl.ts
|
|
332
|
-
import {
|
|
520
|
+
import { RuntimeServiceError as RuntimeServiceError3 } from "@dxos/errors";
|
|
521
|
+
function _ts_add_disposable_resource3(env, value, async) {
|
|
522
|
+
if (value !== null && value !== void 0) {
|
|
523
|
+
if (typeof value !== "object" && typeof value !== "function") throw new TypeError("Object expected.");
|
|
524
|
+
var dispose, inner;
|
|
525
|
+
if (async) {
|
|
526
|
+
if (!Symbol.asyncDispose) throw new TypeError("Symbol.asyncDispose is not defined.");
|
|
527
|
+
dispose = value[Symbol.asyncDispose];
|
|
528
|
+
}
|
|
529
|
+
if (dispose === void 0) {
|
|
530
|
+
if (!Symbol.dispose) throw new TypeError("Symbol.dispose is not defined.");
|
|
531
|
+
dispose = value[Symbol.dispose];
|
|
532
|
+
if (async) inner = dispose;
|
|
533
|
+
}
|
|
534
|
+
if (typeof dispose !== "function") throw new TypeError("Object not disposable.");
|
|
535
|
+
if (inner) dispose = function() {
|
|
536
|
+
try {
|
|
537
|
+
inner.call(this);
|
|
538
|
+
} catch (e) {
|
|
539
|
+
return Promise.reject(e);
|
|
540
|
+
}
|
|
541
|
+
};
|
|
542
|
+
env.stack.push({
|
|
543
|
+
value,
|
|
544
|
+
dispose,
|
|
545
|
+
async
|
|
546
|
+
});
|
|
547
|
+
} else if (async) {
|
|
548
|
+
env.stack.push({
|
|
549
|
+
async: true
|
|
550
|
+
});
|
|
551
|
+
}
|
|
552
|
+
return value;
|
|
553
|
+
}
|
|
554
|
+
function _ts_dispose_resources3(env) {
|
|
555
|
+
var _SuppressedError = typeof SuppressedError === "function" ? SuppressedError : function(error, suppressed, message) {
|
|
556
|
+
var e = new Error(message);
|
|
557
|
+
return e.name = "SuppressedError", e.error = error, e.suppressed = suppressed, e;
|
|
558
|
+
};
|
|
559
|
+
return (_ts_dispose_resources3 = function _ts_dispose_resources5(env2) {
|
|
560
|
+
function fail(e) {
|
|
561
|
+
env2.error = env2.hasError ? new _SuppressedError(e, env2.error, "An error was suppressed during disposal.") : e;
|
|
562
|
+
env2.hasError = true;
|
|
563
|
+
}
|
|
564
|
+
var r, s = 0;
|
|
565
|
+
function next() {
|
|
566
|
+
while (r = env2.stack.pop()) {
|
|
567
|
+
try {
|
|
568
|
+
if (!r.async && s === 1) return s = 0, env2.stack.push(r), Promise.resolve().then(next);
|
|
569
|
+
if (r.dispose) {
|
|
570
|
+
var result = r.dispose.call(r.value);
|
|
571
|
+
if (r.async) return s |= 2, Promise.resolve(result).then(next, function(e) {
|
|
572
|
+
fail(e);
|
|
573
|
+
return next();
|
|
574
|
+
});
|
|
575
|
+
} else s |= 1;
|
|
576
|
+
} catch (e) {
|
|
577
|
+
fail(e);
|
|
578
|
+
}
|
|
579
|
+
}
|
|
580
|
+
if (s === 1) return env2.hasError ? Promise.reject(env2.error) : Promise.resolve();
|
|
581
|
+
if (env2.hasError) throw env2.error;
|
|
582
|
+
}
|
|
583
|
+
return next();
|
|
584
|
+
})(env);
|
|
585
|
+
}
|
|
333
586
|
var QueueServiceImpl = class {
|
|
334
587
|
_ctx;
|
|
335
588
|
_queueService;
|
|
@@ -337,27 +590,56 @@ var QueueServiceImpl = class {
|
|
|
337
590
|
this._ctx = _ctx;
|
|
338
591
|
this._queueService = _queueService;
|
|
339
592
|
}
|
|
340
|
-
async queryQueue(
|
|
593
|
+
async queryQueue(request) {
|
|
341
594
|
try {
|
|
342
|
-
const
|
|
343
|
-
|
|
595
|
+
const env = {
|
|
596
|
+
stack: [],
|
|
597
|
+
error: void 0,
|
|
598
|
+
hasError: false
|
|
599
|
+
};
|
|
600
|
+
try {
|
|
601
|
+
const result = _ts_add_disposable_resource3(env, await this._queueService.queryQueue(this._ctx, request), false);
|
|
602
|
+
return {
|
|
603
|
+
objects: structuredClone(result.objects),
|
|
604
|
+
nextCursor: result.nextCursor,
|
|
605
|
+
prevCursor: result.prevCursor
|
|
606
|
+
};
|
|
607
|
+
} catch (e) {
|
|
608
|
+
env.error = e;
|
|
609
|
+
env.hasError = true;
|
|
610
|
+
} finally {
|
|
611
|
+
_ts_dispose_resources3(env);
|
|
612
|
+
}
|
|
344
613
|
} catch (error) {
|
|
614
|
+
const { query } = request;
|
|
345
615
|
throw RuntimeServiceError3.wrap({
|
|
346
616
|
message: "Queue query failed.",
|
|
347
617
|
context: {
|
|
348
|
-
subspaceTag,
|
|
349
|
-
spaceId,
|
|
350
|
-
queueId
|
|
618
|
+
subspaceTag: query?.queuesNamespace,
|
|
619
|
+
spaceId: query?.spaceId,
|
|
620
|
+
queueId: query?.queueIds?.[0]
|
|
351
621
|
},
|
|
352
622
|
ifTypeDiffers: true
|
|
353
623
|
})(error);
|
|
354
624
|
}
|
|
355
625
|
}
|
|
356
|
-
async insertIntoQueue(
|
|
626
|
+
async insertIntoQueue(request) {
|
|
357
627
|
try {
|
|
358
|
-
const
|
|
359
|
-
|
|
628
|
+
const env = {
|
|
629
|
+
stack: [],
|
|
630
|
+
error: void 0,
|
|
631
|
+
hasError: false
|
|
632
|
+
};
|
|
633
|
+
try {
|
|
634
|
+
const _ = _ts_add_disposable_resource3(env, await this._queueService.insertIntoQueue(this._ctx, request), false);
|
|
635
|
+
} catch (e) {
|
|
636
|
+
env.error = e;
|
|
637
|
+
env.hasError = true;
|
|
638
|
+
} finally {
|
|
639
|
+
_ts_dispose_resources3(env);
|
|
640
|
+
}
|
|
360
641
|
} catch (error) {
|
|
642
|
+
const { subspaceTag, spaceId, queueId } = request;
|
|
361
643
|
throw RuntimeServiceError3.wrap({
|
|
362
644
|
message: "Queue append failed.",
|
|
363
645
|
context: {
|
|
@@ -369,30 +651,131 @@ var QueueServiceImpl = class {
|
|
|
369
651
|
})(error);
|
|
370
652
|
}
|
|
371
653
|
}
|
|
372
|
-
deleteFromQueue(
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
|
|
654
|
+
async deleteFromQueue(request) {
|
|
655
|
+
try {
|
|
656
|
+
const env = {
|
|
657
|
+
stack: [],
|
|
658
|
+
error: void 0,
|
|
659
|
+
hasError: false
|
|
660
|
+
};
|
|
661
|
+
try {
|
|
662
|
+
const _ = _ts_add_disposable_resource3(env, await this._queueService.deleteFromQueue(this._ctx, request), false);
|
|
663
|
+
} catch (e) {
|
|
664
|
+
env.error = e;
|
|
665
|
+
env.hasError = true;
|
|
666
|
+
} finally {
|
|
667
|
+
_ts_dispose_resources3(env);
|
|
379
668
|
}
|
|
380
|
-
})
|
|
669
|
+
} catch (error) {
|
|
670
|
+
const { subspaceTag, spaceId, queueId } = request;
|
|
671
|
+
throw RuntimeServiceError3.wrap({
|
|
672
|
+
message: "Queue delete failed.",
|
|
673
|
+
context: {
|
|
674
|
+
subspaceTag,
|
|
675
|
+
spaceId,
|
|
676
|
+
queueId
|
|
677
|
+
},
|
|
678
|
+
ifTypeDiffers: true
|
|
679
|
+
})(error);
|
|
680
|
+
}
|
|
381
681
|
}
|
|
382
682
|
};
|
|
383
683
|
|
|
384
684
|
// src/internal/service-container.ts
|
|
685
|
+
function _ts_add_disposable_resource4(env, value, async) {
|
|
686
|
+
if (value !== null && value !== void 0) {
|
|
687
|
+
if (typeof value !== "object" && typeof value !== "function") throw new TypeError("Object expected.");
|
|
688
|
+
var dispose, inner;
|
|
689
|
+
if (async) {
|
|
690
|
+
if (!Symbol.asyncDispose) throw new TypeError("Symbol.asyncDispose is not defined.");
|
|
691
|
+
dispose = value[Symbol.asyncDispose];
|
|
692
|
+
}
|
|
693
|
+
if (dispose === void 0) {
|
|
694
|
+
if (!Symbol.dispose) throw new TypeError("Symbol.dispose is not defined.");
|
|
695
|
+
dispose = value[Symbol.dispose];
|
|
696
|
+
if (async) inner = dispose;
|
|
697
|
+
}
|
|
698
|
+
if (typeof dispose !== "function") throw new TypeError("Object not disposable.");
|
|
699
|
+
if (inner) dispose = function() {
|
|
700
|
+
try {
|
|
701
|
+
inner.call(this);
|
|
702
|
+
} catch (e) {
|
|
703
|
+
return Promise.reject(e);
|
|
704
|
+
}
|
|
705
|
+
};
|
|
706
|
+
env.stack.push({
|
|
707
|
+
value,
|
|
708
|
+
dispose,
|
|
709
|
+
async
|
|
710
|
+
});
|
|
711
|
+
} else if (async) {
|
|
712
|
+
env.stack.push({
|
|
713
|
+
async: true
|
|
714
|
+
});
|
|
715
|
+
}
|
|
716
|
+
return value;
|
|
717
|
+
}
|
|
718
|
+
function _ts_dispose_resources4(env) {
|
|
719
|
+
var _SuppressedError = typeof SuppressedError === "function" ? SuppressedError : function(error, suppressed, message) {
|
|
720
|
+
var e = new Error(message);
|
|
721
|
+
return e.name = "SuppressedError", e.error = error, e.suppressed = suppressed, e;
|
|
722
|
+
};
|
|
723
|
+
return (_ts_dispose_resources4 = function _ts_dispose_resources5(env2) {
|
|
724
|
+
function fail(e) {
|
|
725
|
+
env2.error = env2.hasError ? new _SuppressedError(e, env2.error, "An error was suppressed during disposal.") : e;
|
|
726
|
+
env2.hasError = true;
|
|
727
|
+
}
|
|
728
|
+
var r, s = 0;
|
|
729
|
+
function next() {
|
|
730
|
+
while (r = env2.stack.pop()) {
|
|
731
|
+
try {
|
|
732
|
+
if (!r.async && s === 1) return s = 0, env2.stack.push(r), Promise.resolve().then(next);
|
|
733
|
+
if (r.dispose) {
|
|
734
|
+
var result = r.dispose.call(r.value);
|
|
735
|
+
if (r.async) return s |= 2, Promise.resolve(result).then(next, function(e) {
|
|
736
|
+
fail(e);
|
|
737
|
+
return next();
|
|
738
|
+
});
|
|
739
|
+
} else s |= 1;
|
|
740
|
+
} catch (e) {
|
|
741
|
+
fail(e);
|
|
742
|
+
}
|
|
743
|
+
}
|
|
744
|
+
if (s === 1) return env2.hasError ? Promise.reject(env2.error) : Promise.resolve();
|
|
745
|
+
if (env2.hasError) throw env2.error;
|
|
746
|
+
}
|
|
747
|
+
return next();
|
|
748
|
+
})(env);
|
|
749
|
+
}
|
|
385
750
|
var ServiceContainer = class {
|
|
386
751
|
_executionContext;
|
|
387
752
|
_dataService;
|
|
388
753
|
_queueService;
|
|
389
|
-
|
|
754
|
+
_functionsService;
|
|
755
|
+
constructor(_executionContext, _dataService, _queueService, _functionsService) {
|
|
390
756
|
this._executionContext = _executionContext;
|
|
391
757
|
this._dataService = _dataService;
|
|
392
758
|
this._queueService = _queueService;
|
|
759
|
+
this._functionsService = _functionsService;
|
|
393
760
|
}
|
|
394
761
|
async getSpaceMeta(spaceId) {
|
|
395
|
-
|
|
762
|
+
const env = {
|
|
763
|
+
stack: [],
|
|
764
|
+
error: void 0,
|
|
765
|
+
hasError: false
|
|
766
|
+
};
|
|
767
|
+
try {
|
|
768
|
+
const result = _ts_add_disposable_resource4(env, await this._dataService.getSpaceMeta(this._executionContext, spaceId), false);
|
|
769
|
+
return result ? {
|
|
770
|
+
spaceKey: result.spaceKey,
|
|
771
|
+
rootDocumentId: result.rootDocumentId
|
|
772
|
+
} : void 0;
|
|
773
|
+
} catch (e) {
|
|
774
|
+
env.error = e;
|
|
775
|
+
env.hasError = true;
|
|
776
|
+
} finally {
|
|
777
|
+
_ts_dispose_resources4(env);
|
|
778
|
+
}
|
|
396
779
|
}
|
|
397
780
|
async createServices() {
|
|
398
781
|
const dataService = new DataServiceImpl(this._executionContext, this._dataService);
|
|
@@ -401,14 +784,43 @@ var ServiceContainer = class {
|
|
|
401
784
|
return {
|
|
402
785
|
dataService,
|
|
403
786
|
queryService,
|
|
404
|
-
queueService
|
|
787
|
+
queueService,
|
|
788
|
+
functionsAiService: this._functionsService
|
|
405
789
|
};
|
|
406
790
|
}
|
|
407
|
-
queryQueue(queue) {
|
|
408
|
-
|
|
791
|
+
async queryQueue(queue) {
|
|
792
|
+
const parts = queue.asQueueDXN();
|
|
793
|
+
if (!parts) {
|
|
794
|
+
throw new Error("Invalid queue DXN");
|
|
795
|
+
}
|
|
796
|
+
const { subspaceTag, spaceId, queueId } = parts;
|
|
797
|
+
const result = await this._queueService.queryQueue(this._executionContext, {
|
|
798
|
+
query: {
|
|
799
|
+
spaceId,
|
|
800
|
+
queuesNamespace: subspaceTag,
|
|
801
|
+
queueIds: [
|
|
802
|
+
queueId
|
|
803
|
+
]
|
|
804
|
+
}
|
|
805
|
+
});
|
|
806
|
+
return {
|
|
807
|
+
objects: structuredClone(result.objects),
|
|
808
|
+
nextCursor: result.nextCursor ?? null,
|
|
809
|
+
prevCursor: result.prevCursor ?? null
|
|
810
|
+
};
|
|
409
811
|
}
|
|
410
|
-
insertIntoQueue(queue, objects) {
|
|
411
|
-
|
|
812
|
+
async insertIntoQueue(queue, objects) {
|
|
813
|
+
const parts = queue.asQueueDXN();
|
|
814
|
+
if (!parts) {
|
|
815
|
+
throw new Error("Invalid queue DXN");
|
|
816
|
+
}
|
|
817
|
+
const { subspaceTag, spaceId, queueId } = parts;
|
|
818
|
+
await this._queueService.insertIntoQueue(this._executionContext, {
|
|
819
|
+
subspaceTag,
|
|
820
|
+
spaceId,
|
|
821
|
+
queueId,
|
|
822
|
+
objects
|
|
823
|
+
});
|
|
412
824
|
}
|
|
413
825
|
};
|
|
414
826
|
|
|
@@ -451,7 +863,7 @@ var SpaceProxy = class extends Resource {
|
|
|
451
863
|
get db() {
|
|
452
864
|
invariant4(this._db, void 0, {
|
|
453
865
|
F: __dxlog_file4,
|
|
454
|
-
L:
|
|
866
|
+
L: 35,
|
|
455
867
|
S: this,
|
|
456
868
|
A: [
|
|
457
869
|
"this._db",
|
|
@@ -466,7 +878,7 @@ var SpaceProxy = class extends Resource {
|
|
|
466
878
|
get crud() {
|
|
467
879
|
invariant4(this._db, void 0, {
|
|
468
880
|
F: __dxlog_file4,
|
|
469
|
-
L:
|
|
881
|
+
L: 43,
|
|
470
882
|
S: this,
|
|
471
883
|
A: [
|
|
472
884
|
"this._db",
|
|
@@ -506,7 +918,7 @@ var FunctionsClient = class extends Resource2 {
|
|
|
506
918
|
super();
|
|
507
919
|
invariant5(typeof services.dataService !== "undefined", "DataService is required", {
|
|
508
920
|
F: __dxlog_file5,
|
|
509
|
-
L:
|
|
921
|
+
L: 33,
|
|
510
922
|
S: this,
|
|
511
923
|
A: [
|
|
512
924
|
"typeof services.dataService !== 'undefined'",
|
|
@@ -515,14 +927,14 @@ var FunctionsClient = class extends Resource2 {
|
|
|
515
927
|
});
|
|
516
928
|
invariant5(typeof services.queueService !== "undefined", "QueueService is required", {
|
|
517
929
|
F: __dxlog_file5,
|
|
518
|
-
L:
|
|
930
|
+
L: 34,
|
|
519
931
|
S: this,
|
|
520
932
|
A: [
|
|
521
933
|
"typeof services.queueService !== 'undefined'",
|
|
522
934
|
"'QueueService is required'"
|
|
523
935
|
]
|
|
524
936
|
});
|
|
525
|
-
this._serviceContainer = new ServiceContainer(this._executionContext, services.dataService, services.queueService);
|
|
937
|
+
this._serviceContainer = new ServiceContainer(this._executionContext, services.dataService, services.queueService, services.functionsAiService);
|
|
526
938
|
this._echoClient = new EchoClient({});
|
|
527
939
|
}
|
|
528
940
|
get echo() {
|
|
@@ -556,7 +968,8 @@ var FunctionsClient = class extends Resource2 {
|
|
|
556
968
|
var createClientFromEnv = async (env) => {
|
|
557
969
|
const client = new FunctionsClient({
|
|
558
970
|
dataService: env.DATA_SERVICE,
|
|
559
|
-
queueService: env.QUEUE_SERVICE
|
|
971
|
+
queueService: env.QUEUE_SERVICE,
|
|
972
|
+
functionsAiService: env.FUNCTIONS_AI_SERVICE
|
|
560
973
|
});
|
|
561
974
|
await client.open();
|
|
562
975
|
return client;
|
|
@@ -578,14 +991,6 @@ var __dxlog_file6 = "/__w/dxos/dxos/packages/core/functions-runtime-cloudflare/s
|
|
|
578
991
|
var wrapHandlerForCloudflare = (func) => {
|
|
579
992
|
return async (request, env) => {
|
|
580
993
|
if (request.headers.get(FUNCTION_ROUTE_HEADER) === FunctionRouteValue.Meta) {
|
|
581
|
-
log3.info(">>> meta", {
|
|
582
|
-
func
|
|
583
|
-
}, {
|
|
584
|
-
F: __dxlog_file6,
|
|
585
|
-
L: 25,
|
|
586
|
-
S: void 0,
|
|
587
|
-
C: (f, a) => f(...a)
|
|
588
|
-
});
|
|
589
994
|
return handleFunctionMetaCall(func, request);
|
|
590
995
|
}
|
|
591
996
|
try {
|
|
@@ -597,7 +1002,7 @@ var wrapHandlerForCloudflare = (func) => {
|
|
|
597
1002
|
});
|
|
598
1003
|
}
|
|
599
1004
|
}
|
|
600
|
-
const serviceContainer = new ServiceContainer({}, env.DATA_SERVICE, env.QUEUE_SERVICE);
|
|
1005
|
+
const serviceContainer = new ServiceContainer({}, env.DATA_SERVICE, env.QUEUE_SERVICE, env.FUNCTIONS_AI_SERVICE);
|
|
601
1006
|
const context = await createFunctionContext({
|
|
602
1007
|
serviceContainer,
|
|
603
1008
|
contextSpaceId: spaceId
|
|
@@ -609,7 +1014,7 @@ var wrapHandlerForCloudflare = (func) => {
|
|
|
609
1014
|
stack: error.stack
|
|
610
1015
|
}, {
|
|
611
1016
|
F: __dxlog_file6,
|
|
612
|
-
L:
|
|
1017
|
+
L: 44,
|
|
613
1018
|
S: void 0,
|
|
614
1019
|
C: (f, a) => f(...a)
|
|
615
1020
|
});
|
|
@@ -647,7 +1052,7 @@ var decodeRequest = async (request) => {
|
|
|
647
1052
|
} catch (err) {
|
|
648
1053
|
log3.catch(err, void 0, {
|
|
649
1054
|
F: __dxlog_file6,
|
|
650
|
-
L:
|
|
1055
|
+
L: 79,
|
|
651
1056
|
S: void 0,
|
|
652
1057
|
C: (f, a) => f(...a)
|
|
653
1058
|
});
|
|
@@ -674,7 +1079,7 @@ var handleFunctionMetaCall = (functionDefinition, request) => {
|
|
|
674
1079
|
});
|
|
675
1080
|
};
|
|
676
1081
|
var createFunctionContext = async ({ serviceContainer, contextSpaceId }) => {
|
|
677
|
-
const { dataService, queryService, queueService } = await serviceContainer.createServices();
|
|
1082
|
+
const { dataService, queryService, queueService, functionsAiService } = await serviceContainer.createServices();
|
|
678
1083
|
let spaceKey;
|
|
679
1084
|
let rootUrl;
|
|
680
1085
|
if (contextSpaceId) {
|
|
@@ -685,7 +1090,7 @@ var createFunctionContext = async ({ serviceContainer, contextSpaceId }) => {
|
|
|
685
1090
|
spaceKey = meta.spaceKey;
|
|
686
1091
|
invariant6(!meta.rootDocumentId.startsWith("automerge:"), void 0, {
|
|
687
1092
|
F: __dxlog_file6,
|
|
688
|
-
L:
|
|
1093
|
+
L: 117,
|
|
689
1094
|
S: void 0,
|
|
690
1095
|
A: [
|
|
691
1096
|
"!meta.rootDocumentId.startsWith('automerge:')",
|
|
@@ -698,7 +1103,8 @@ var createFunctionContext = async ({ serviceContainer, contextSpaceId }) => {
|
|
|
698
1103
|
services: {
|
|
699
1104
|
dataService,
|
|
700
1105
|
queryService,
|
|
701
|
-
queueService
|
|
1106
|
+
queueService,
|
|
1107
|
+
functionsAiService
|
|
702
1108
|
},
|
|
703
1109
|
spaceId: contextSpaceId,
|
|
704
1110
|
spaceKey,
|