@dxos/functions-runtime-cloudflare 0.8.4-main.3c1ae3b → 0.8.4-main.3fbcb4aa9b
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 +529 -314
- package/dist/lib/browser/index.mjs.map +4 -4
- package/dist/lib/browser/meta.json +1 -1
- package/dist/lib/node-esm/index.mjs +529 -314
- 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 +8 -7
- package/dist/types/src/internal/data-service-impl.d.ts.map +1 -1
- package/dist/types/src/internal/query-service-impl.d.ts +3 -9
- package/dist/types/src/internal/query-service-impl.d.ts.map +1 -1
- package/dist/types/src/internal/queue-service-impl.d.ts +8 -9
- 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 +10 -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 +6 -0
- 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 +9 -2
- package/src/internal/data-service-impl.ts +29 -11
- package/src/internal/query-service-impl.ts +8 -58
- package/src/internal/queue-service-impl.ts +37 -22
- package/src/internal/service-container.ts +46 -11
- package/src/internal/utils.ts +5 -0
- package/src/logger.ts +12 -8
- package/src/queues-api.ts +26 -7
- package/src/space-proxy.ts +5 -4
- package/src/wrap-handler-for-cloudflare.ts +4 -4
- package/dist/types/src/internal/adapter.d.ts +0 -12
- package/dist/types/src/internal/adapter.d.ts.map +0 -1
- package/src/internal/adapter.ts +0 -48
|
@@ -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 invariant3 } from "@dxos/invariant";
|
|
7
7
|
|
|
8
8
|
// src/internal/data-service-impl.ts
|
|
9
9
|
import { Stream } from "@dxos/codec-protobuf/stream";
|
|
@@ -12,7 +12,77 @@ 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
|
-
|
|
15
|
+
|
|
16
|
+
// src/internal/utils.ts
|
|
17
|
+
var copyUint8Array = (value) => new Uint8Array(value);
|
|
18
|
+
|
|
19
|
+
// src/internal/data-service-impl.ts
|
|
20
|
+
var __dxlog_file = "/__w/dxos/dxos/packages/core/compute/functions-runtime-cloudflare/src/internal/data-service-impl.ts";
|
|
21
|
+
function _ts_add_disposable_resource(env, value, async) {
|
|
22
|
+
if (value !== null && value !== void 0) {
|
|
23
|
+
if (typeof value !== "object" && typeof value !== "function") throw new TypeError("Object expected.");
|
|
24
|
+
var dispose, inner;
|
|
25
|
+
if (async) {
|
|
26
|
+
if (!Symbol.asyncDispose) throw new TypeError("Symbol.asyncDispose is not defined.");
|
|
27
|
+
dispose = value[Symbol.asyncDispose];
|
|
28
|
+
}
|
|
29
|
+
if (dispose === void 0) {
|
|
30
|
+
if (!Symbol.dispose) throw new TypeError("Symbol.dispose is not defined.");
|
|
31
|
+
dispose = value[Symbol.dispose];
|
|
32
|
+
if (async) inner = dispose;
|
|
33
|
+
}
|
|
34
|
+
if (typeof dispose !== "function") throw new TypeError("Object not disposable.");
|
|
35
|
+
if (inner) dispose = function() {
|
|
36
|
+
try {
|
|
37
|
+
inner.call(this);
|
|
38
|
+
} catch (e) {
|
|
39
|
+
return Promise.reject(e);
|
|
40
|
+
}
|
|
41
|
+
};
|
|
42
|
+
env.stack.push({
|
|
43
|
+
value,
|
|
44
|
+
dispose,
|
|
45
|
+
async
|
|
46
|
+
});
|
|
47
|
+
} else if (async) {
|
|
48
|
+
env.stack.push({
|
|
49
|
+
async: true
|
|
50
|
+
});
|
|
51
|
+
}
|
|
52
|
+
return value;
|
|
53
|
+
}
|
|
54
|
+
function _ts_dispose_resources(env) {
|
|
55
|
+
var _SuppressedError = typeof SuppressedError === "function" ? SuppressedError : function(error, suppressed, message) {
|
|
56
|
+
var e = new Error(message);
|
|
57
|
+
return e.name = "SuppressedError", e.error = error, e.suppressed = suppressed, e;
|
|
58
|
+
};
|
|
59
|
+
return (_ts_dispose_resources = function _ts_dispose_resources5(env2) {
|
|
60
|
+
function fail(e) {
|
|
61
|
+
env2.error = env2.hasError ? new _SuppressedError(e, env2.error, "An error was suppressed during disposal.") : e;
|
|
62
|
+
env2.hasError = true;
|
|
63
|
+
}
|
|
64
|
+
var r, s = 0;
|
|
65
|
+
function next() {
|
|
66
|
+
while (r = env2.stack.pop()) {
|
|
67
|
+
try {
|
|
68
|
+
if (!r.async && s === 1) return s = 0, env2.stack.push(r), Promise.resolve().then(next);
|
|
69
|
+
if (r.dispose) {
|
|
70
|
+
var result = r.dispose.call(r.value);
|
|
71
|
+
if (r.async) return s |= 2, Promise.resolve(result).then(next, function(e) {
|
|
72
|
+
fail(e);
|
|
73
|
+
return next();
|
|
74
|
+
});
|
|
75
|
+
} else s |= 1;
|
|
76
|
+
} catch (e) {
|
|
77
|
+
fail(e);
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
if (s === 1) return env2.hasError ? Promise.reject(env2.error) : Promise.resolve();
|
|
81
|
+
if (env2.hasError) throw env2.error;
|
|
82
|
+
}
|
|
83
|
+
return next();
|
|
84
|
+
})(env);
|
|
85
|
+
}
|
|
16
86
|
var DataServiceImpl = class {
|
|
17
87
|
_executionContext;
|
|
18
88
|
_dataService;
|
|
@@ -23,15 +93,7 @@ var DataServiceImpl = class {
|
|
|
23
93
|
}
|
|
24
94
|
subscribe({ subscriptionId, spaceId }) {
|
|
25
95
|
return new Stream(({ next }) => {
|
|
26
|
-
invariant(SpaceId.isValid(spaceId), void 0, {
|
|
27
|
-
F: __dxlog_file,
|
|
28
|
-
L: 35,
|
|
29
|
-
S: this,
|
|
30
|
-
A: [
|
|
31
|
-
"SpaceId.isValid(spaceId)",
|
|
32
|
-
""
|
|
33
|
-
]
|
|
34
|
-
});
|
|
96
|
+
invariant(SpaceId.isValid(spaceId), void 0, { "~LogMeta": "~LogMeta", F: __dxlog_file, L: 86, S: this, A: ["SpaceId.isValid(spaceId)", ""] });
|
|
35
97
|
this.dataSubscriptions.set(subscriptionId, {
|
|
36
98
|
spaceId,
|
|
37
99
|
next
|
|
@@ -41,7 +103,7 @@ var DataServiceImpl = class {
|
|
|
41
103
|
};
|
|
42
104
|
});
|
|
43
105
|
}
|
|
44
|
-
async updateSubscription({ subscriptionId, addIds
|
|
106
|
+
async updateSubscription({ subscriptionId, addIds }) {
|
|
45
107
|
const sub = this.dataSubscriptions.get(subscriptionId) ?? raise(new RuntimeServiceError({
|
|
46
108
|
message: "Subscription not found.",
|
|
47
109
|
context: {
|
|
@@ -51,46 +113,64 @@ var DataServiceImpl = class {
|
|
|
51
113
|
if (addIds) {
|
|
52
114
|
log.info("request documents", {
|
|
53
115
|
count: addIds.length
|
|
54
|
-
}, {
|
|
55
|
-
F: __dxlog_file,
|
|
56
|
-
L: 55,
|
|
57
|
-
S: this,
|
|
58
|
-
C: (f, a) => f(...a)
|
|
59
|
-
});
|
|
116
|
+
}, { "~LogMeta": "~LogMeta", F: __dxlog_file, L: 104, S: this });
|
|
60
117
|
for (const documentId of addIds) {
|
|
61
|
-
const
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
F: __dxlog_file,
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
118
|
+
const env = {
|
|
119
|
+
stack: [],
|
|
120
|
+
error: void 0,
|
|
121
|
+
hasError: false
|
|
122
|
+
};
|
|
123
|
+
try {
|
|
124
|
+
const document = _ts_add_disposable_resource(env, await this._dataService.getDocument(this._executionContext, sub.spaceId, documentId), false);
|
|
125
|
+
log.info("document loaded", {
|
|
126
|
+
documentId,
|
|
127
|
+
spaceId: sub.spaceId,
|
|
128
|
+
found: !!document
|
|
129
|
+
}, { "~LogMeta": "~LogMeta", F: __dxlog_file, L: 116, S: this });
|
|
130
|
+
if (!document) {
|
|
131
|
+
log.warn("not found", {
|
|
132
|
+
documentId
|
|
133
|
+
}, { "~LogMeta": "~LogMeta", F: __dxlog_file, L: 122, S: this });
|
|
134
|
+
continue;
|
|
135
|
+
}
|
|
136
|
+
sub.next({
|
|
137
|
+
updates: [
|
|
138
|
+
{
|
|
139
|
+
documentId,
|
|
140
|
+
// Copy returned object to avoid hanging RPC stub
|
|
141
|
+
// See https://developers.cloudflare.com/workers/runtime-apis/rpc/lifecycle/
|
|
142
|
+
mutation: copyUint8Array(document.data)
|
|
143
|
+
}
|
|
144
|
+
]
|
|
80
145
|
});
|
|
81
|
-
|
|
146
|
+
} catch (e) {
|
|
147
|
+
env.error = e;
|
|
148
|
+
env.hasError = true;
|
|
149
|
+
} finally {
|
|
150
|
+
_ts_dispose_resources(env);
|
|
82
151
|
}
|
|
83
|
-
sub.next({
|
|
84
|
-
updates: [
|
|
85
|
-
{
|
|
86
|
-
documentId,
|
|
87
|
-
mutation: document.data
|
|
88
|
-
}
|
|
89
|
-
]
|
|
90
|
-
});
|
|
91
152
|
}
|
|
92
153
|
}
|
|
93
154
|
}
|
|
155
|
+
async createDocument({ spaceId, initialValue }) {
|
|
156
|
+
const env = {
|
|
157
|
+
stack: [],
|
|
158
|
+
error: void 0,
|
|
159
|
+
hasError: false
|
|
160
|
+
};
|
|
161
|
+
try {
|
|
162
|
+
invariant(SpaceId.isValid(spaceId), void 0, { "~LogMeta": "~LogMeta", F: __dxlog_file, L: 153, S: this, A: ["SpaceId.isValid(spaceId)", ""] });
|
|
163
|
+
const response = _ts_add_disposable_resource(env, await this._dataService.createDocument(this._executionContext, spaceId, initialValue), false);
|
|
164
|
+
return {
|
|
165
|
+
documentId: response.documentId
|
|
166
|
+
};
|
|
167
|
+
} catch (e) {
|
|
168
|
+
env.error = e;
|
|
169
|
+
env.hasError = true;
|
|
170
|
+
} finally {
|
|
171
|
+
_ts_dispose_resources(env);
|
|
172
|
+
}
|
|
173
|
+
}
|
|
94
174
|
async update({ updates, subscriptionId }) {
|
|
95
175
|
const sub = this.dataSubscriptions.get(subscriptionId) ?? raise(new RuntimeServiceError({
|
|
96
176
|
message: "Subscription not found.",
|
|
@@ -114,27 +194,25 @@ var DataServiceImpl = class {
|
|
|
114
194
|
}
|
|
115
195
|
async flush() {
|
|
116
196
|
}
|
|
117
|
-
subscribeSpaceSyncState(
|
|
197
|
+
subscribeSpaceSyncState(_request, _options) {
|
|
118
198
|
throw new NotImplementedError({
|
|
119
199
|
message: "subscribeSpaceSyncState is not implemented."
|
|
120
200
|
});
|
|
121
201
|
}
|
|
122
|
-
async getDocumentHeads({ documentIds }) {
|
|
202
|
+
async getDocumentHeads({ documentIds: _documentIds }) {
|
|
123
203
|
throw new NotImplementedError({
|
|
124
204
|
message: "getDocumentHeads is not implemented."
|
|
125
205
|
});
|
|
126
206
|
}
|
|
127
|
-
async reIndexHeads({ documentIds }) {
|
|
207
|
+
async reIndexHeads({ documentIds: _documentIds }) {
|
|
128
208
|
throw new NotImplementedError({
|
|
129
209
|
message: "reIndexHeads is not implemented."
|
|
130
210
|
});
|
|
131
211
|
}
|
|
132
212
|
async updateIndexes() {
|
|
133
|
-
|
|
134
|
-
message: "updateIndexes is not implemented."
|
|
135
|
-
});
|
|
213
|
+
log.error("updateIndexes is not available in EDGE env.", void 0, { "~LogMeta": "~LogMeta", F: __dxlog_file, L: 206, S: this });
|
|
136
214
|
}
|
|
137
|
-
async waitUntilHeadsReplicated({ heads }) {
|
|
215
|
+
async waitUntilHeadsReplicated({ heads: _heads }) {
|
|
138
216
|
throw new NotImplementedError({
|
|
139
217
|
message: "waitUntilHeadsReplicated is not implemented."
|
|
140
218
|
});
|
|
@@ -142,84 +220,75 @@ var DataServiceImpl = class {
|
|
|
142
220
|
};
|
|
143
221
|
|
|
144
222
|
// src/internal/query-service-impl.ts
|
|
145
|
-
import * as Schema from "effect/Schema";
|
|
146
223
|
import { Stream as Stream2 } from "@dxos/codec-protobuf/stream";
|
|
147
|
-
import { QueryAST } from "@dxos/echo-protocol";
|
|
148
224
|
import { NotImplementedError as NotImplementedError2, RuntimeServiceError as RuntimeServiceError2 } from "@dxos/errors";
|
|
149
|
-
import { invariant as invariant3 } from "@dxos/invariant";
|
|
150
|
-
import { PublicKey } from "@dxos/keys";
|
|
151
|
-
import { SpaceId as SpaceId3 } from "@dxos/keys";
|
|
152
225
|
import { log as log2 } from "@dxos/log";
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
invariant2(options?.spaceIds?.length === 1, "Only one space is supported", {
|
|
162
|
-
F: __dxlog_file2,
|
|
163
|
-
L: 13,
|
|
164
|
-
S: void 0,
|
|
165
|
-
A: [
|
|
166
|
-
"options?.spaceIds?.length === 1",
|
|
167
|
-
"'Only one space is supported'"
|
|
168
|
-
]
|
|
169
|
-
});
|
|
170
|
-
invariant2(filter.type === "object", "Only object filters are supported", {
|
|
171
|
-
F: __dxlog_file2,
|
|
172
|
-
L: 14,
|
|
173
|
-
S: void 0,
|
|
174
|
-
A: [
|
|
175
|
-
"filter.type === 'object'",
|
|
176
|
-
"'Only object filters are supported'"
|
|
177
|
-
]
|
|
178
|
-
});
|
|
179
|
-
const spaceId = options.spaceIds[0];
|
|
180
|
-
invariant2(SpaceId2.isValid(spaceId), void 0, {
|
|
181
|
-
F: __dxlog_file2,
|
|
182
|
-
L: 17,
|
|
183
|
-
S: void 0,
|
|
184
|
-
A: [
|
|
185
|
-
"SpaceId.isValid(spaceId)",
|
|
186
|
-
""
|
|
187
|
-
]
|
|
188
|
-
});
|
|
189
|
-
return {
|
|
190
|
-
spaceId,
|
|
191
|
-
type: filter.typename ?? void 0,
|
|
192
|
-
objectIds: [
|
|
193
|
-
...filter.id ?? []
|
|
194
|
-
]
|
|
195
|
-
};
|
|
196
|
-
};
|
|
197
|
-
var isSimpleSelectionQuery = (query) => {
|
|
198
|
-
switch (query.type) {
|
|
199
|
-
case "options": {
|
|
200
|
-
const maybeFilter = isSimpleSelectionQuery(query.query);
|
|
201
|
-
if (!maybeFilter) {
|
|
202
|
-
return null;
|
|
203
|
-
}
|
|
204
|
-
return {
|
|
205
|
-
filter: maybeFilter.filter,
|
|
206
|
-
options: query.options
|
|
207
|
-
};
|
|
226
|
+
var __dxlog_file2 = "/__w/dxos/dxos/packages/core/compute/functions-runtime-cloudflare/src/internal/query-service-impl.ts";
|
|
227
|
+
function _ts_add_disposable_resource2(env, value, async) {
|
|
228
|
+
if (value !== null && value !== void 0) {
|
|
229
|
+
if (typeof value !== "object" && typeof value !== "function") throw new TypeError("Object expected.");
|
|
230
|
+
var dispose, inner;
|
|
231
|
+
if (async) {
|
|
232
|
+
if (!Symbol.asyncDispose) throw new TypeError("Symbol.asyncDispose is not defined.");
|
|
233
|
+
dispose = value[Symbol.asyncDispose];
|
|
208
234
|
}
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
};
|
|
214
|
-
}
|
|
215
|
-
default: {
|
|
216
|
-
return null;
|
|
235
|
+
if (dispose === void 0) {
|
|
236
|
+
if (!Symbol.dispose) throw new TypeError("Symbol.dispose is not defined.");
|
|
237
|
+
dispose = value[Symbol.dispose];
|
|
238
|
+
if (async) inner = dispose;
|
|
217
239
|
}
|
|
240
|
+
if (typeof dispose !== "function") throw new TypeError("Object not disposable.");
|
|
241
|
+
if (inner) dispose = function() {
|
|
242
|
+
try {
|
|
243
|
+
inner.call(this);
|
|
244
|
+
} catch (e) {
|
|
245
|
+
return Promise.reject(e);
|
|
246
|
+
}
|
|
247
|
+
};
|
|
248
|
+
env.stack.push({
|
|
249
|
+
value,
|
|
250
|
+
dispose,
|
|
251
|
+
async
|
|
252
|
+
});
|
|
253
|
+
} else if (async) {
|
|
254
|
+
env.stack.push({
|
|
255
|
+
async: true
|
|
256
|
+
});
|
|
218
257
|
}
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
var
|
|
258
|
+
return value;
|
|
259
|
+
}
|
|
260
|
+
function _ts_dispose_resources2(env) {
|
|
261
|
+
var _SuppressedError = typeof SuppressedError === "function" ? SuppressedError : function(error, suppressed, message) {
|
|
262
|
+
var e = new Error(message);
|
|
263
|
+
return e.name = "SuppressedError", e.error = error, e.suppressed = suppressed, e;
|
|
264
|
+
};
|
|
265
|
+
return (_ts_dispose_resources2 = function _ts_dispose_resources5(env2) {
|
|
266
|
+
function fail(e) {
|
|
267
|
+
env2.error = env2.hasError ? new _SuppressedError(e, env2.error, "An error was suppressed during disposal.") : e;
|
|
268
|
+
env2.hasError = true;
|
|
269
|
+
}
|
|
270
|
+
var r, s = 0;
|
|
271
|
+
function next() {
|
|
272
|
+
while (r = env2.stack.pop()) {
|
|
273
|
+
try {
|
|
274
|
+
if (!r.async && s === 1) return s = 0, env2.stack.push(r), Promise.resolve().then(next);
|
|
275
|
+
if (r.dispose) {
|
|
276
|
+
var result = r.dispose.call(r.value);
|
|
277
|
+
if (r.async) return s |= 2, Promise.resolve(result).then(next, function(e) {
|
|
278
|
+
fail(e);
|
|
279
|
+
return next();
|
|
280
|
+
});
|
|
281
|
+
} else s |= 1;
|
|
282
|
+
} catch (e) {
|
|
283
|
+
fail(e);
|
|
284
|
+
}
|
|
285
|
+
}
|
|
286
|
+
if (s === 1) return env2.hasError ? Promise.reject(env2.error) : Promise.resolve();
|
|
287
|
+
if (env2.hasError) throw env2.error;
|
|
288
|
+
}
|
|
289
|
+
return next();
|
|
290
|
+
})(env);
|
|
291
|
+
}
|
|
223
292
|
var QueryServiceImpl = class {
|
|
224
293
|
_executionContext;
|
|
225
294
|
_dataService;
|
|
@@ -231,70 +300,37 @@ var QueryServiceImpl = class {
|
|
|
231
300
|
execQuery(request) {
|
|
232
301
|
log2.info("execQuery", {
|
|
233
302
|
request
|
|
234
|
-
}, {
|
|
235
|
-
F: __dxlog_file3,
|
|
236
|
-
L: 33,
|
|
237
|
-
S: this,
|
|
238
|
-
C: (f, a) => f(...a)
|
|
239
|
-
});
|
|
240
|
-
const query = QueryAST.Query.pipe(Schema.decodeUnknownSync)(JSON.parse(request.query));
|
|
241
|
-
const requestedSpaceIds = getTargetSpacesForQuery(query);
|
|
242
|
-
invariant3(requestedSpaceIds.length === 1, "Only one space is supported", {
|
|
243
|
-
F: __dxlog_file3,
|
|
244
|
-
L: 36,
|
|
245
|
-
S: this,
|
|
246
|
-
A: [
|
|
247
|
-
"requestedSpaceIds.length === 1",
|
|
248
|
-
"'Only one space is supported'"
|
|
249
|
-
]
|
|
250
|
-
});
|
|
251
|
-
const spaceId = requestedSpaceIds[0];
|
|
303
|
+
}, { "~LogMeta": "~LogMeta", F: __dxlog_file2, L: 81, S: this });
|
|
252
304
|
return Stream2.fromPromise((async () => {
|
|
253
305
|
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
|
-
}))
|
|
306
|
+
const env = {
|
|
307
|
+
stack: [],
|
|
308
|
+
error: void 0,
|
|
309
|
+
hasError: false
|
|
283
310
|
};
|
|
311
|
+
try {
|
|
312
|
+
this._queryCount++;
|
|
313
|
+
log2.info("begin query", {
|
|
314
|
+
request
|
|
315
|
+
}, { "~LogMeta": "~LogMeta", F: __dxlog_file2, L: 93, S: this });
|
|
316
|
+
const queryResponse = _ts_add_disposable_resource2(env, await this._dataService.execQuery(this._executionContext, request), false);
|
|
317
|
+
log2.info("query response", {
|
|
318
|
+
resultCount: queryResponse.results?.length
|
|
319
|
+
}, { "~LogMeta": "~LogMeta", F: __dxlog_file2, L: 97, S: this });
|
|
320
|
+
return structuredClone(queryResponse);
|
|
321
|
+
} catch (e) {
|
|
322
|
+
env.error = e;
|
|
323
|
+
env.hasError = true;
|
|
324
|
+
} finally {
|
|
325
|
+
_ts_dispose_resources2(env);
|
|
326
|
+
}
|
|
284
327
|
} catch (error) {
|
|
285
328
|
log2.error("query failed", {
|
|
286
329
|
err: error
|
|
287
|
-
}, {
|
|
288
|
-
F: __dxlog_file3,
|
|
289
|
-
L: 62,
|
|
290
|
-
S: this,
|
|
291
|
-
C: (f, a) => f(...a)
|
|
292
|
-
});
|
|
330
|
+
}, { "~LogMeta": "~LogMeta", F: __dxlog_file2, L: 108, S: this });
|
|
293
331
|
throw new RuntimeServiceError2({
|
|
294
332
|
message: `Query execution failed (queryCount=${this._queryCount})`,
|
|
295
333
|
context: {
|
|
296
|
-
spaceId,
|
|
297
|
-
filter: request.filter,
|
|
298
334
|
queryCount: this._queryCount
|
|
299
335
|
},
|
|
300
336
|
cause: error
|
|
@@ -313,25 +349,74 @@ var QueryServiceImpl = class {
|
|
|
313
349
|
});
|
|
314
350
|
}
|
|
315
351
|
};
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
352
|
+
|
|
353
|
+
// src/internal/queue-service-impl.ts
|
|
354
|
+
import { RuntimeServiceError as RuntimeServiceError3 } from "@dxos/errors";
|
|
355
|
+
function _ts_add_disposable_resource3(env, value, async) {
|
|
356
|
+
if (value !== null && value !== void 0) {
|
|
357
|
+
if (typeof value !== "object" && typeof value !== "function") throw new TypeError("Object expected.");
|
|
358
|
+
var dispose, inner;
|
|
359
|
+
if (async) {
|
|
360
|
+
if (!Symbol.asyncDispose) throw new TypeError("Symbol.asyncDispose is not defined.");
|
|
361
|
+
dispose = value[Symbol.asyncDispose];
|
|
362
|
+
}
|
|
363
|
+
if (dispose === void 0) {
|
|
364
|
+
if (!Symbol.dispose) throw new TypeError("Symbol.dispose is not defined.");
|
|
365
|
+
dispose = value[Symbol.dispose];
|
|
366
|
+
if (async) inner = dispose;
|
|
367
|
+
}
|
|
368
|
+
if (typeof dispose !== "function") throw new TypeError("Object not disposable.");
|
|
369
|
+
if (inner) dispose = function() {
|
|
370
|
+
try {
|
|
371
|
+
inner.call(this);
|
|
372
|
+
} catch (e) {
|
|
373
|
+
return Promise.reject(e);
|
|
374
|
+
}
|
|
375
|
+
};
|
|
376
|
+
env.stack.push({
|
|
377
|
+
value,
|
|
378
|
+
dispose,
|
|
379
|
+
async
|
|
380
|
+
});
|
|
381
|
+
} else if (async) {
|
|
382
|
+
env.stack.push({
|
|
383
|
+
async: true
|
|
384
|
+
});
|
|
385
|
+
}
|
|
386
|
+
return value;
|
|
387
|
+
}
|
|
388
|
+
function _ts_dispose_resources3(env) {
|
|
389
|
+
var _SuppressedError = typeof SuppressedError === "function" ? SuppressedError : function(error, suppressed, message) {
|
|
390
|
+
var e = new Error(message);
|
|
391
|
+
return e.name = "SuppressedError", e.error = error, e.suppressed = suppressed, e;
|
|
392
|
+
};
|
|
393
|
+
return (_ts_dispose_resources3 = function _ts_dispose_resources5(env2) {
|
|
394
|
+
function fail(e) {
|
|
395
|
+
env2.error = env2.hasError ? new _SuppressedError(e, env2.error, "An error was suppressed during disposal.") : e;
|
|
396
|
+
env2.hasError = true;
|
|
397
|
+
}
|
|
398
|
+
var r, s = 0;
|
|
399
|
+
function next() {
|
|
400
|
+
while (r = env2.stack.pop()) {
|
|
401
|
+
try {
|
|
402
|
+
if (!r.async && s === 1) return s = 0, env2.stack.push(r), Promise.resolve().then(next);
|
|
403
|
+
if (r.dispose) {
|
|
404
|
+
var result = r.dispose.call(r.value);
|
|
405
|
+
if (r.async) return s |= 2, Promise.resolve(result).then(next, function(e) {
|
|
406
|
+
fail(e);
|
|
407
|
+
return next();
|
|
408
|
+
});
|
|
409
|
+
} else s |= 1;
|
|
410
|
+
} catch (e) {
|
|
411
|
+
fail(e);
|
|
323
412
|
}
|
|
324
413
|
}
|
|
414
|
+
if (s === 1) return env2.hasError ? Promise.reject(env2.error) : Promise.resolve();
|
|
415
|
+
if (env2.hasError) throw env2.error;
|
|
325
416
|
}
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
...spaces
|
|
330
|
-
];
|
|
331
|
-
};
|
|
332
|
-
|
|
333
|
-
// src/internal/queue-service-impl.ts
|
|
334
|
-
import { NotImplementedError as NotImplementedError3, RuntimeServiceError as RuntimeServiceError3 } from "@dxos/errors";
|
|
417
|
+
return next();
|
|
418
|
+
})(env);
|
|
419
|
+
}
|
|
335
420
|
var QueueServiceImpl = class {
|
|
336
421
|
_ctx;
|
|
337
422
|
_queueService;
|
|
@@ -339,13 +424,58 @@ var QueueServiceImpl = class {
|
|
|
339
424
|
this._ctx = _ctx;
|
|
340
425
|
this._queueService = _queueService;
|
|
341
426
|
}
|
|
342
|
-
async queryQueue(
|
|
427
|
+
async queryQueue(request) {
|
|
343
428
|
try {
|
|
344
|
-
const
|
|
345
|
-
|
|
429
|
+
const env = {
|
|
430
|
+
stack: [],
|
|
431
|
+
error: void 0,
|
|
432
|
+
hasError: false
|
|
433
|
+
};
|
|
434
|
+
try {
|
|
435
|
+
const result = _ts_add_disposable_resource3(env, await this._queueService.queryQueue(this._ctx, request), false);
|
|
436
|
+
return {
|
|
437
|
+
objects: structuredClone(result.objects),
|
|
438
|
+
nextCursor: result.nextCursor,
|
|
439
|
+
prevCursor: result.prevCursor
|
|
440
|
+
};
|
|
441
|
+
} catch (e) {
|
|
442
|
+
env.error = e;
|
|
443
|
+
env.hasError = true;
|
|
444
|
+
} finally {
|
|
445
|
+
_ts_dispose_resources3(env);
|
|
446
|
+
}
|
|
346
447
|
} catch (error) {
|
|
448
|
+
const { query } = request;
|
|
347
449
|
throw RuntimeServiceError3.wrap({
|
|
348
450
|
message: "Queue query failed.",
|
|
451
|
+
context: {
|
|
452
|
+
subspaceTag: query?.queuesNamespace,
|
|
453
|
+
spaceId: query?.spaceId,
|
|
454
|
+
queueId: query?.queueIds?.[0]
|
|
455
|
+
},
|
|
456
|
+
ifTypeDiffers: true
|
|
457
|
+
})(error);
|
|
458
|
+
}
|
|
459
|
+
}
|
|
460
|
+
async insertIntoQueue(request) {
|
|
461
|
+
try {
|
|
462
|
+
const env = {
|
|
463
|
+
stack: [],
|
|
464
|
+
error: void 0,
|
|
465
|
+
hasError: false
|
|
466
|
+
};
|
|
467
|
+
try {
|
|
468
|
+
const _ = _ts_add_disposable_resource3(env, await this._queueService.insertIntoQueue(this._ctx, request), false);
|
|
469
|
+
} catch (e) {
|
|
470
|
+
env.error = e;
|
|
471
|
+
env.hasError = true;
|
|
472
|
+
} finally {
|
|
473
|
+
_ts_dispose_resources3(env);
|
|
474
|
+
}
|
|
475
|
+
} catch (error) {
|
|
476
|
+
const { subspaceTag, spaceId, queueId } = request;
|
|
477
|
+
throw RuntimeServiceError3.wrap({
|
|
478
|
+
message: "Queue append failed.",
|
|
349
479
|
context: {
|
|
350
480
|
subspaceTag,
|
|
351
481
|
spaceId,
|
|
@@ -355,13 +485,25 @@ var QueueServiceImpl = class {
|
|
|
355
485
|
})(error);
|
|
356
486
|
}
|
|
357
487
|
}
|
|
358
|
-
async
|
|
488
|
+
async deleteFromQueue(request) {
|
|
359
489
|
try {
|
|
360
|
-
const
|
|
361
|
-
|
|
490
|
+
const env = {
|
|
491
|
+
stack: [],
|
|
492
|
+
error: void 0,
|
|
493
|
+
hasError: false
|
|
494
|
+
};
|
|
495
|
+
try {
|
|
496
|
+
const _ = _ts_add_disposable_resource3(env, await this._queueService.deleteFromQueue(this._ctx, request), false);
|
|
497
|
+
} catch (e) {
|
|
498
|
+
env.error = e;
|
|
499
|
+
env.hasError = true;
|
|
500
|
+
} finally {
|
|
501
|
+
_ts_dispose_resources3(env);
|
|
502
|
+
}
|
|
362
503
|
} catch (error) {
|
|
504
|
+
const { subspaceTag, spaceId, queueId } = request;
|
|
363
505
|
throw RuntimeServiceError3.wrap({
|
|
364
|
-
message: "Queue
|
|
506
|
+
message: "Queue delete failed.",
|
|
365
507
|
context: {
|
|
366
508
|
subspaceTag,
|
|
367
509
|
spaceId,
|
|
@@ -371,30 +513,105 @@ var QueueServiceImpl = class {
|
|
|
371
513
|
})(error);
|
|
372
514
|
}
|
|
373
515
|
}
|
|
374
|
-
|
|
375
|
-
throw new NotImplementedError3({
|
|
376
|
-
message: "Deleting from queue is not supported.",
|
|
377
|
-
context: {
|
|
378
|
-
subspaceTag,
|
|
379
|
-
spaceId,
|
|
380
|
-
queueId
|
|
381
|
-
}
|
|
382
|
-
});
|
|
516
|
+
async syncQueue(_) {
|
|
383
517
|
}
|
|
384
518
|
};
|
|
385
519
|
|
|
386
520
|
// src/internal/service-container.ts
|
|
521
|
+
function _ts_add_disposable_resource4(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_resources4(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_resources4 = 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
|
+
}
|
|
387
586
|
var ServiceContainer = class {
|
|
388
587
|
_executionContext;
|
|
389
588
|
_dataService;
|
|
390
589
|
_queueService;
|
|
391
|
-
|
|
590
|
+
_functionsService;
|
|
591
|
+
constructor(_executionContext, _dataService, _queueService, _functionsService) {
|
|
392
592
|
this._executionContext = _executionContext;
|
|
393
593
|
this._dataService = _dataService;
|
|
394
594
|
this._queueService = _queueService;
|
|
595
|
+
this._functionsService = _functionsService;
|
|
395
596
|
}
|
|
396
597
|
async getSpaceMeta(spaceId) {
|
|
397
|
-
|
|
598
|
+
const env = {
|
|
599
|
+
stack: [],
|
|
600
|
+
error: void 0,
|
|
601
|
+
hasError: false
|
|
602
|
+
};
|
|
603
|
+
try {
|
|
604
|
+
const result = _ts_add_disposable_resource4(env, await this._dataService.getSpaceMeta(this._executionContext, spaceId), false);
|
|
605
|
+
return result ? {
|
|
606
|
+
spaceKey: result.spaceKey,
|
|
607
|
+
rootDocumentId: result.rootDocumentId
|
|
608
|
+
} : void 0;
|
|
609
|
+
} catch (e) {
|
|
610
|
+
env.error = e;
|
|
611
|
+
env.hasError = true;
|
|
612
|
+
} finally {
|
|
613
|
+
_ts_dispose_resources4(env);
|
|
614
|
+
}
|
|
398
615
|
}
|
|
399
616
|
async createServices() {
|
|
400
617
|
const dataService = new DataServiceImpl(this._executionContext, this._dataService);
|
|
@@ -403,23 +620,54 @@ var ServiceContainer = class {
|
|
|
403
620
|
return {
|
|
404
621
|
dataService,
|
|
405
622
|
queryService,
|
|
406
|
-
queueService
|
|
623
|
+
queueService,
|
|
624
|
+
functionsAiService: this._functionsService
|
|
407
625
|
};
|
|
408
626
|
}
|
|
409
|
-
queryQueue(queue) {
|
|
410
|
-
|
|
627
|
+
async queryQueue(queue) {
|
|
628
|
+
const parts = queue.asQueueDXN();
|
|
629
|
+
if (!parts) {
|
|
630
|
+
throw new Error("Invalid queue DXN");
|
|
631
|
+
}
|
|
632
|
+
const { subspaceTag, spaceId, queueId } = parts;
|
|
633
|
+
const result = await this._queueService.queryQueue(this._executionContext, {
|
|
634
|
+
query: {
|
|
635
|
+
spaceId,
|
|
636
|
+
queuesNamespace: subspaceTag,
|
|
637
|
+
queueIds: [
|
|
638
|
+
queueId
|
|
639
|
+
]
|
|
640
|
+
}
|
|
641
|
+
});
|
|
642
|
+
return {
|
|
643
|
+
objects: structuredClone(result.objects),
|
|
644
|
+
nextCursor: result.nextCursor ?? null,
|
|
645
|
+
prevCursor: result.prevCursor ?? null
|
|
646
|
+
};
|
|
411
647
|
}
|
|
412
|
-
insertIntoQueue(queue, objects) {
|
|
413
|
-
|
|
648
|
+
async insertIntoQueue(queue, objects) {
|
|
649
|
+
const parts = queue.asQueueDXN();
|
|
650
|
+
if (!parts) {
|
|
651
|
+
throw new Error("Invalid queue DXN");
|
|
652
|
+
}
|
|
653
|
+
const { subspaceTag, spaceId, queueId } = parts;
|
|
654
|
+
await this._queueService.insertIntoQueue(this._executionContext, {
|
|
655
|
+
subspaceTag,
|
|
656
|
+
spaceId,
|
|
657
|
+
queueId,
|
|
658
|
+
objects: objects.map((obj) => JSON.stringify(obj))
|
|
659
|
+
});
|
|
414
660
|
}
|
|
415
661
|
};
|
|
416
662
|
|
|
417
663
|
// src/space-proxy.ts
|
|
418
664
|
import { Resource } from "@dxos/context";
|
|
419
|
-
import { invariant as
|
|
420
|
-
import { PublicKey
|
|
665
|
+
import { invariant as invariant2 } from "@dxos/invariant";
|
|
666
|
+
import { PublicKey } from "@dxos/keys";
|
|
421
667
|
|
|
422
668
|
// src/queues-api.ts
|
|
669
|
+
import { log as log3 } from "@dxos/log";
|
|
670
|
+
var __dxlog_file3 = "/__w/dxos/dxos/packages/core/compute/functions-runtime-cloudflare/src/queues-api.ts";
|
|
423
671
|
var QueuesAPIImpl = class {
|
|
424
672
|
_serviceContainer;
|
|
425
673
|
_spaceId;
|
|
@@ -427,8 +675,26 @@ var QueuesAPIImpl = class {
|
|
|
427
675
|
this._serviceContainer = _serviceContainer;
|
|
428
676
|
this._spaceId = _spaceId;
|
|
429
677
|
}
|
|
430
|
-
queryQueue(queue, options) {
|
|
431
|
-
|
|
678
|
+
async queryQueue(queue, options) {
|
|
679
|
+
const result = await this._serviceContainer.queryQueue(queue);
|
|
680
|
+
const objects = (result.objects ?? []).flatMap((encoded) => {
|
|
681
|
+
try {
|
|
682
|
+
return [
|
|
683
|
+
JSON.parse(encoded)
|
|
684
|
+
];
|
|
685
|
+
} catch (err) {
|
|
686
|
+
log3.verbose("queue object JSON parse failed; object ignored", {
|
|
687
|
+
encoded,
|
|
688
|
+
error: err
|
|
689
|
+
}, { "~LogMeta": "~LogMeta", F: __dxlog_file3, L: 22, S: this });
|
|
690
|
+
return [];
|
|
691
|
+
}
|
|
692
|
+
});
|
|
693
|
+
return {
|
|
694
|
+
objects,
|
|
695
|
+
nextCursor: result.nextCursor ?? null,
|
|
696
|
+
prevCursor: result.prevCursor ?? null
|
|
697
|
+
};
|
|
432
698
|
}
|
|
433
699
|
insertIntoQueue(queue, objects) {
|
|
434
700
|
return this._serviceContainer.insertIntoQueue(queue, JSON.parse(JSON.stringify(objects)));
|
|
@@ -436,7 +702,7 @@ var QueuesAPIImpl = class {
|
|
|
436
702
|
};
|
|
437
703
|
|
|
438
704
|
// src/space-proxy.ts
|
|
439
|
-
var __dxlog_file4 = "/__w/dxos/dxos/packages/core/functions-runtime-cloudflare/src/space-proxy.ts";
|
|
705
|
+
var __dxlog_file4 = "/__w/dxos/dxos/packages/core/compute/functions-runtime-cloudflare/src/space-proxy.ts";
|
|
440
706
|
var SpaceProxy = class extends Resource {
|
|
441
707
|
_serviceContainer;
|
|
442
708
|
_echoClient;
|
|
@@ -451,30 +717,14 @@ var SpaceProxy = class extends Resource {
|
|
|
451
717
|
return this._id;
|
|
452
718
|
}
|
|
453
719
|
get db() {
|
|
454
|
-
|
|
455
|
-
F: __dxlog_file4,
|
|
456
|
-
L: 34,
|
|
457
|
-
S: this,
|
|
458
|
-
A: [
|
|
459
|
-
"this._db",
|
|
460
|
-
""
|
|
461
|
-
]
|
|
462
|
-
});
|
|
720
|
+
invariant2(this._db, void 0, { "~LogMeta": "~LogMeta", F: __dxlog_file4, L: 24, S: this, A: ["this._db", ""] });
|
|
463
721
|
return this._db;
|
|
464
722
|
}
|
|
465
723
|
/**
|
|
466
724
|
* @deprecated Use db API.
|
|
467
725
|
*/
|
|
468
726
|
get crud() {
|
|
469
|
-
|
|
470
|
-
F: __dxlog_file4,
|
|
471
|
-
L: 42,
|
|
472
|
-
S: this,
|
|
473
|
-
A: [
|
|
474
|
-
"this._db",
|
|
475
|
-
""
|
|
476
|
-
]
|
|
477
|
-
});
|
|
727
|
+
invariant2(this._db, void 0, { "~LogMeta": "~LogMeta", F: __dxlog_file4, L: 30, S: this, A: ["this._db", ""] });
|
|
478
728
|
return this._db.coreDatabase;
|
|
479
729
|
}
|
|
480
730
|
get queues() {
|
|
@@ -487,18 +737,18 @@ var SpaceProxy = class extends Resource {
|
|
|
487
737
|
}
|
|
488
738
|
this._db = this._echoClient.constructDatabase({
|
|
489
739
|
spaceId: this._id,
|
|
490
|
-
spaceKey:
|
|
740
|
+
spaceKey: PublicKey.from(meta.spaceKey),
|
|
491
741
|
reactiveSchemaQuery: false,
|
|
492
742
|
owningObject: this
|
|
493
743
|
});
|
|
494
|
-
await this._db.coreDatabase.open({
|
|
744
|
+
await this._db.coreDatabase.open(this._ctx, {
|
|
495
745
|
rootUrl: meta.rootDocumentId
|
|
496
746
|
});
|
|
497
747
|
}
|
|
498
748
|
};
|
|
499
749
|
|
|
500
750
|
// src/functions-client.ts
|
|
501
|
-
var __dxlog_file5 = "/__w/dxos/dxos/packages/core/functions-runtime-cloudflare/src/functions-client.ts";
|
|
751
|
+
var __dxlog_file5 = "/__w/dxos/dxos/packages/core/compute/functions-runtime-cloudflare/src/functions-client.ts";
|
|
502
752
|
var FunctionsClient = class extends Resource2 {
|
|
503
753
|
_serviceContainer;
|
|
504
754
|
_echoClient;
|
|
@@ -506,25 +756,9 @@ var FunctionsClient = class extends Resource2 {
|
|
|
506
756
|
_spaces = /* @__PURE__ */ new Map();
|
|
507
757
|
constructor(services) {
|
|
508
758
|
super();
|
|
509
|
-
|
|
510
|
-
|
|
511
|
-
|
|
512
|
-
S: this,
|
|
513
|
-
A: [
|
|
514
|
-
"typeof services.dataService !== 'undefined'",
|
|
515
|
-
"'DataService is required'"
|
|
516
|
-
]
|
|
517
|
-
});
|
|
518
|
-
invariant5(typeof services.queueService !== "undefined", "QueueService is required", {
|
|
519
|
-
F: __dxlog_file5,
|
|
520
|
-
L: 33,
|
|
521
|
-
S: this,
|
|
522
|
-
A: [
|
|
523
|
-
"typeof services.queueService !== 'undefined'",
|
|
524
|
-
"'QueueService is required'"
|
|
525
|
-
]
|
|
526
|
-
});
|
|
527
|
-
this._serviceContainer = new ServiceContainer(this._executionContext, services.dataService, services.queueService);
|
|
759
|
+
invariant3(typeof services.dataService !== "undefined", "DataService is required", { "~LogMeta": "~LogMeta", F: __dxlog_file5, L: 19, S: this, A: ["typeof services.dataService !== 'undefined'", "'DataService is required'"] });
|
|
760
|
+
invariant3(typeof services.queueService !== "undefined", "QueueService is required", { "~LogMeta": "~LogMeta", F: __dxlog_file5, L: 20, S: this, A: ["typeof services.queueService !== 'undefined'", "'QueueService is required'"] });
|
|
761
|
+
this._serviceContainer = new ServiceContainer(this._executionContext, services.dataService, services.queueService, services.functionsAiService);
|
|
528
762
|
this._echoClient = new EchoClient({});
|
|
529
763
|
}
|
|
530
764
|
get echo() {
|
|
@@ -558,7 +792,8 @@ var FunctionsClient = class extends Resource2 {
|
|
|
558
792
|
var createClientFromEnv = async (env) => {
|
|
559
793
|
const client = new FunctionsClient({
|
|
560
794
|
dataService: env.DATA_SERVICE,
|
|
561
|
-
queueService: env.QUEUE_SERVICE
|
|
795
|
+
queueService: env.QUEUE_SERVICE,
|
|
796
|
+
functionsAiService: env.FUNCTIONS_AI_SERVICE
|
|
562
797
|
});
|
|
563
798
|
await client.open();
|
|
564
799
|
return client;
|
|
@@ -572,49 +807,36 @@ var FunctionRouteValue = /* @__PURE__ */ (function(FunctionRouteValue2) {
|
|
|
572
807
|
})({});
|
|
573
808
|
|
|
574
809
|
// src/wrap-handler-for-cloudflare.ts
|
|
575
|
-
import { invariant as
|
|
576
|
-
import { SpaceId as
|
|
577
|
-
import { log as
|
|
810
|
+
import { invariant as invariant4 } from "@dxos/invariant";
|
|
811
|
+
import { SpaceId as SpaceId2 } from "@dxos/keys";
|
|
812
|
+
import { log as log4 } from "@dxos/log";
|
|
578
813
|
import { EdgeResponse } from "@dxos/protocols";
|
|
579
|
-
var __dxlog_file6 = "/__w/dxos/dxos/packages/core/functions-runtime-cloudflare/src/wrap-handler-for-cloudflare.ts";
|
|
814
|
+
var __dxlog_file6 = "/__w/dxos/dxos/packages/core/compute/functions-runtime-cloudflare/src/wrap-handler-for-cloudflare.ts";
|
|
580
815
|
var wrapHandlerForCloudflare = (func) => {
|
|
581
816
|
return async (request, env) => {
|
|
582
817
|
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
818
|
return handleFunctionMetaCall(func, request);
|
|
592
819
|
}
|
|
593
820
|
try {
|
|
594
821
|
const spaceId = new URL(request.url).searchParams.get("spaceId");
|
|
595
822
|
if (spaceId) {
|
|
596
|
-
if (!
|
|
823
|
+
if (!SpaceId2.isValid(spaceId)) {
|
|
597
824
|
return new Response("Invalid spaceId", {
|
|
598
825
|
status: 400
|
|
599
826
|
});
|
|
600
827
|
}
|
|
601
828
|
}
|
|
602
|
-
const serviceContainer = new ServiceContainer({}, env.DATA_SERVICE, env.QUEUE_SERVICE);
|
|
829
|
+
const serviceContainer = new ServiceContainer({}, env.DATA_SERVICE, env.QUEUE_SERVICE, env.FUNCTIONS_AI_SERVICE);
|
|
603
830
|
const context = await createFunctionContext({
|
|
604
831
|
serviceContainer,
|
|
605
832
|
contextSpaceId: spaceId
|
|
606
833
|
});
|
|
607
834
|
return EdgeResponse.success(await invokeFunction(func, context, request));
|
|
608
835
|
} catch (error) {
|
|
609
|
-
|
|
836
|
+
log4.error("error invoking function", {
|
|
610
837
|
error,
|
|
611
838
|
stack: error.stack
|
|
612
|
-
}, {
|
|
613
|
-
F: __dxlog_file6,
|
|
614
|
-
L: 45,
|
|
615
|
-
S: void 0,
|
|
616
|
-
C: (f, a) => f(...a)
|
|
617
|
-
});
|
|
839
|
+
}, { "~LogMeta": "~LogMeta", F: __dxlog_file6, L: 37, S: void 0 });
|
|
618
840
|
return EdgeResponse.failure({
|
|
619
841
|
message: error?.message ?? "Internal error",
|
|
620
842
|
error
|
|
@@ -647,12 +869,7 @@ var decodeRequest = async (request) => {
|
|
|
647
869
|
}
|
|
648
870
|
};
|
|
649
871
|
} catch (err) {
|
|
650
|
-
|
|
651
|
-
F: __dxlog_file6,
|
|
652
|
-
L: 80,
|
|
653
|
-
S: void 0,
|
|
654
|
-
C: (f, a) => f(...a)
|
|
655
|
-
});
|
|
872
|
+
log4.catch(err, void 0, { "~LogMeta": "~LogMeta", F: __dxlog_file6, L: 76, S: void 0 });
|
|
656
873
|
return {
|
|
657
874
|
data: {
|
|
658
875
|
bodyText,
|
|
@@ -676,7 +893,7 @@ var handleFunctionMetaCall = (functionDefinition, request) => {
|
|
|
676
893
|
});
|
|
677
894
|
};
|
|
678
895
|
var createFunctionContext = async ({ serviceContainer, contextSpaceId }) => {
|
|
679
|
-
const { dataService, queryService, queueService } = await serviceContainer.createServices();
|
|
896
|
+
const { dataService, queryService, queueService, functionsAiService } = await serviceContainer.createServices();
|
|
680
897
|
let spaceKey;
|
|
681
898
|
let rootUrl;
|
|
682
899
|
if (contextSpaceId) {
|
|
@@ -685,22 +902,15 @@ var createFunctionContext = async ({ serviceContainer, contextSpaceId }) => {
|
|
|
685
902
|
throw new Error(`Space not found: ${contextSpaceId}`);
|
|
686
903
|
}
|
|
687
904
|
spaceKey = meta.spaceKey;
|
|
688
|
-
|
|
689
|
-
F: __dxlog_file6,
|
|
690
|
-
L: 118,
|
|
691
|
-
S: void 0,
|
|
692
|
-
A: [
|
|
693
|
-
"!meta.rootDocumentId.startsWith('automerge:')",
|
|
694
|
-
""
|
|
695
|
-
]
|
|
696
|
-
});
|
|
905
|
+
invariant4(!meta.rootDocumentId.startsWith("automerge:"), void 0, { "~LogMeta": "~LogMeta", F: __dxlog_file6, L: 109, S: void 0, A: ["!meta.rootDocumentId.startsWith('automerge:')", ""] });
|
|
697
906
|
rootUrl = `automerge:${meta.rootDocumentId}`;
|
|
698
907
|
}
|
|
699
908
|
return {
|
|
700
909
|
services: {
|
|
701
910
|
dataService,
|
|
702
911
|
queryService,
|
|
703
|
-
queueService
|
|
912
|
+
queueService,
|
|
913
|
+
functionsAiService
|
|
704
914
|
},
|
|
705
915
|
spaceId: contextSpaceId,
|
|
706
916
|
spaceKey,
|
|
@@ -709,36 +919,40 @@ var createFunctionContext = async ({ serviceContainer, contextSpaceId }) => {
|
|
|
709
919
|
};
|
|
710
920
|
|
|
711
921
|
// src/logger.ts
|
|
712
|
-
import { LogLevel, log as
|
|
922
|
+
import { LogLevel, log as log5, shouldLog } from "@dxos/log";
|
|
713
923
|
var setupFunctionsLogger = () => {
|
|
714
|
-
|
|
715
|
-
|
|
924
|
+
log5.runtimeConfig.processors.length = 0;
|
|
925
|
+
log5.runtimeConfig.processors.push(functionLogProcessor);
|
|
716
926
|
};
|
|
717
927
|
var functionLogProcessor = (config, entry) => {
|
|
718
928
|
if (!shouldLog(entry, config.filters)) {
|
|
719
929
|
return;
|
|
720
930
|
}
|
|
931
|
+
const context = entry.computedContext;
|
|
932
|
+
const error = entry.computedError;
|
|
933
|
+
const extras = [
|
|
934
|
+
Object.keys(context).length > 0 ? context : void 0,
|
|
935
|
+
error
|
|
936
|
+
].filter((value) => value !== void 0);
|
|
721
937
|
switch (entry.level) {
|
|
722
938
|
case LogLevel.DEBUG:
|
|
723
|
-
console.debug(entry.message, entry.context);
|
|
724
|
-
break;
|
|
725
939
|
case LogLevel.TRACE:
|
|
726
|
-
console.debug(entry.message,
|
|
940
|
+
console.debug(entry.message, ...extras);
|
|
727
941
|
break;
|
|
728
942
|
case LogLevel.VERBOSE:
|
|
729
|
-
console.log(entry.message,
|
|
943
|
+
console.log(entry.message, ...extras);
|
|
730
944
|
break;
|
|
731
945
|
case LogLevel.INFO:
|
|
732
|
-
console.info(entry.message,
|
|
946
|
+
console.info(entry.message, ...extras);
|
|
733
947
|
break;
|
|
734
948
|
case LogLevel.WARN:
|
|
735
|
-
console.warn(entry.message,
|
|
949
|
+
console.warn(entry.message, ...extras);
|
|
736
950
|
break;
|
|
737
951
|
case LogLevel.ERROR:
|
|
738
|
-
console.error(entry.message,
|
|
952
|
+
console.error(entry.message, ...extras);
|
|
739
953
|
break;
|
|
740
954
|
default:
|
|
741
|
-
console.log(entry.message,
|
|
955
|
+
console.log(entry.message, ...extras);
|
|
742
956
|
break;
|
|
743
957
|
}
|
|
744
958
|
};
|
|
@@ -748,6 +962,7 @@ export {
|
|
|
748
962
|
FunctionsClient,
|
|
749
963
|
ServiceContainer,
|
|
750
964
|
createClientFromEnv,
|
|
965
|
+
createFunctionContext,
|
|
751
966
|
setupFunctionsLogger,
|
|
752
967
|
wrapHandlerForCloudflare
|
|
753
968
|
};
|