@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.
- package/dist/lib/browser/index.mjs +503 -118
- package/dist/lib/browser/index.mjs.map +4 -4
- package/dist/lib/browser/meta.json +1 -1
- package/dist/lib/node-esm/index.mjs +503 -118
- 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 +4 -5
- package/dist/types/src/internal/queue-service-impl.d.ts.map +1 -1
- package/dist/types/src/internal/service-container.d.ts +5 -3
- 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 +3 -3
- 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 -14
- package/src/internal/service-container.ts +25 -6
- package/src/internal/utils.ts +5 -0
- package/src/logger.ts +2 -0
- package/src/queues-api.ts +3 -3
- package/src/space-proxy.ts +4 -3
- 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
|
|
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:
|
|
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
|
});
|
|
@@ -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(
|
|
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
|
|
345
|
-
|
|
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(
|
|
644
|
+
async insertIntoQueue(request) {
|
|
645
|
+
const { subspaceTag, spaceId, queueId, objects } = request;
|
|
359
646
|
try {
|
|
360
|
-
|
|
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(
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
|
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
|
|
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
|
-
|
|
455
|
-
F:
|
|
456
|
-
L:
|
|
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
|
-
|
|
470
|
-
F:
|
|
471
|
-
L:
|
|
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
|
|
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
|
-
|
|
510
|
-
F:
|
|
511
|
-
L:
|
|
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
|
-
|
|
519
|
-
F:
|
|
520
|
-
L:
|
|
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
|
|
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
|
|
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:
|
|
614
|
-
L:
|
|
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:
|
|
652
|
-
L:
|
|
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
|
-
|
|
689
|
-
F:
|
|
690
|
-
L:
|
|
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,
|