@dxos/functions-runtime-cloudflare 0.8.4-main.3eb6e50203 → 0.8.4-main.4a85c3132b
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 +37 -153
- package/dist/lib/browser/index.mjs.map +4 -4
- package/dist/lib/browser/meta.json +1 -1
- package/dist/lib/node-esm/index.mjs +37 -153
- 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.map +1 -1
- package/dist/types/src/internal/data-service-impl.d.ts +1 -1
- 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 +3 -2
- package/dist/types/src/internal/queue-service-impl.d.ts.map +1 -1
- package/dist/types/src/internal/service-container.d.ts +1 -1
- package/dist/types/src/internal/service-container.d.ts.map +1 -1
- package/dist/types/tsconfig.tsbuildinfo +1 -1
- package/package.json +15 -15
- package/src/functions-client.ts +1 -1
- package/src/internal/data-service-impl.ts +1 -1
- package/src/internal/query-service-impl.ts +8 -62
- package/src/internal/queue-service-impl.ts +5 -1
- package/src/internal/service-container.ts +1 -1
- 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
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
// src/functions-client.ts
|
|
2
2
|
import { Resource as Resource2 } from "@dxos/context";
|
|
3
3
|
import { EchoClient } from "@dxos/echo-db";
|
|
4
|
-
import { invariant as
|
|
4
|
+
import { invariant as invariant3 } from "@dxos/invariant";
|
|
5
5
|
|
|
6
6
|
// src/internal/data-service-impl.ts
|
|
7
7
|
import { Stream } from "@dxos/codec-protobuf/stream";
|
|
@@ -248,83 +248,9 @@ var DataServiceImpl = class {
|
|
|
248
248
|
};
|
|
249
249
|
|
|
250
250
|
// src/internal/query-service-impl.ts
|
|
251
|
-
import * as Schema from "effect/Schema";
|
|
252
251
|
import { Stream as Stream2 } from "@dxos/codec-protobuf/stream";
|
|
253
|
-
import { QueryAST } from "@dxos/echo-protocol";
|
|
254
252
|
import { NotImplementedError as NotImplementedError2, RuntimeServiceError as RuntimeServiceError2 } from "@dxos/errors";
|
|
255
|
-
import { invariant as invariant3 } from "@dxos/invariant";
|
|
256
|
-
import { PublicKey } from "@dxos/keys";
|
|
257
|
-
import { SpaceId as SpaceId3 } from "@dxos/keys";
|
|
258
253
|
import { log as log2 } from "@dxos/log";
|
|
259
|
-
|
|
260
|
-
// src/internal/adapter.ts
|
|
261
|
-
import { failUndefined } from "@dxos/debug";
|
|
262
|
-
import { invariant as invariant2 } from "@dxos/invariant";
|
|
263
|
-
import { SpaceId as SpaceId2 } from "@dxos/keys";
|
|
264
|
-
var __dxlog_file2 = "/__w/dxos/dxos/packages/core/functions-runtime-cloudflare/src/internal/adapter.ts";
|
|
265
|
-
var queryToDataServiceRequest = (query) => {
|
|
266
|
-
const { filter, options } = isSimpleSelectionQuery(query) ?? failUndefined();
|
|
267
|
-
invariant2(options?.spaceIds?.length === 1, "Only one space is supported", {
|
|
268
|
-
F: __dxlog_file2,
|
|
269
|
-
L: 13,
|
|
270
|
-
S: void 0,
|
|
271
|
-
A: [
|
|
272
|
-
"options?.spaceIds?.length === 1",
|
|
273
|
-
"'Only one space is supported'"
|
|
274
|
-
]
|
|
275
|
-
});
|
|
276
|
-
invariant2(filter.type === "object", "Only object filters are supported", {
|
|
277
|
-
F: __dxlog_file2,
|
|
278
|
-
L: 14,
|
|
279
|
-
S: void 0,
|
|
280
|
-
A: [
|
|
281
|
-
"filter.type === 'object'",
|
|
282
|
-
"'Only object filters are supported'"
|
|
283
|
-
]
|
|
284
|
-
});
|
|
285
|
-
const spaceId = options.spaceIds[0];
|
|
286
|
-
invariant2(SpaceId2.isValid(spaceId), void 0, {
|
|
287
|
-
F: __dxlog_file2,
|
|
288
|
-
L: 17,
|
|
289
|
-
S: void 0,
|
|
290
|
-
A: [
|
|
291
|
-
"SpaceId.isValid(spaceId)",
|
|
292
|
-
""
|
|
293
|
-
]
|
|
294
|
-
});
|
|
295
|
-
return {
|
|
296
|
-
spaceId,
|
|
297
|
-
type: filter.typename ?? void 0,
|
|
298
|
-
objectIds: [
|
|
299
|
-
...filter.id ?? []
|
|
300
|
-
]
|
|
301
|
-
};
|
|
302
|
-
};
|
|
303
|
-
var isSimpleSelectionQuery = (query) => {
|
|
304
|
-
switch (query.type) {
|
|
305
|
-
case "options": {
|
|
306
|
-
const maybeFilter = isSimpleSelectionQuery(query.query);
|
|
307
|
-
if (!maybeFilter) {
|
|
308
|
-
return null;
|
|
309
|
-
}
|
|
310
|
-
return {
|
|
311
|
-
filter: maybeFilter.filter,
|
|
312
|
-
options: query.options
|
|
313
|
-
};
|
|
314
|
-
}
|
|
315
|
-
case "select": {
|
|
316
|
-
return {
|
|
317
|
-
filter: query.filter,
|
|
318
|
-
options: void 0
|
|
319
|
-
};
|
|
320
|
-
}
|
|
321
|
-
default: {
|
|
322
|
-
return null;
|
|
323
|
-
}
|
|
324
|
-
}
|
|
325
|
-
};
|
|
326
|
-
|
|
327
|
-
// src/internal/query-service-impl.ts
|
|
328
254
|
function _ts_add_disposable_resource2(env, value, async) {
|
|
329
255
|
if (value !== null && value !== void 0) {
|
|
330
256
|
if (typeof value !== "object" && typeof value !== "function") throw new TypeError("Object expected.");
|
|
@@ -390,7 +316,7 @@ function _ts_dispose_resources2(env) {
|
|
|
390
316
|
return next();
|
|
391
317
|
})(env);
|
|
392
318
|
}
|
|
393
|
-
var
|
|
319
|
+
var __dxlog_file2 = "/__w/dxos/dxos/packages/core/functions-runtime-cloudflare/src/internal/query-service-impl.ts";
|
|
394
320
|
var QueryServiceImpl = class {
|
|
395
321
|
_executionContext;
|
|
396
322
|
_dataService;
|
|
@@ -403,23 +329,11 @@ var QueryServiceImpl = class {
|
|
|
403
329
|
log2.info("execQuery", {
|
|
404
330
|
request
|
|
405
331
|
}, {
|
|
406
|
-
F:
|
|
407
|
-
L:
|
|
332
|
+
F: __dxlog_file2,
|
|
333
|
+
L: 20,
|
|
408
334
|
S: this,
|
|
409
335
|
C: (f, a) => f(...a)
|
|
410
336
|
});
|
|
411
|
-
const query = QueryAST.Query.pipe(Schema.decodeUnknownSync)(JSON.parse(request.query));
|
|
412
|
-
const requestedSpaceIds = getTargetSpacesForQuery(query);
|
|
413
|
-
invariant3(requestedSpaceIds.length === 1, "Only one space is supported", {
|
|
414
|
-
F: __dxlog_file3,
|
|
415
|
-
L: 37,
|
|
416
|
-
S: this,
|
|
417
|
-
A: [
|
|
418
|
-
"requestedSpaceIds.length === 1",
|
|
419
|
-
"'Only one space is supported'"
|
|
420
|
-
]
|
|
421
|
-
});
|
|
422
|
-
const spaceId = requestedSpaceIds[0];
|
|
423
337
|
return Stream2.fromPromise((async () => {
|
|
424
338
|
try {
|
|
425
339
|
const env = {
|
|
@@ -430,37 +344,23 @@ var QueryServiceImpl = class {
|
|
|
430
344
|
try {
|
|
431
345
|
this._queryCount++;
|
|
432
346
|
log2.info("begin query", {
|
|
433
|
-
|
|
347
|
+
request
|
|
434
348
|
}, {
|
|
435
|
-
F:
|
|
436
|
-
L:
|
|
349
|
+
F: __dxlog_file2,
|
|
350
|
+
L: 26,
|
|
437
351
|
S: this,
|
|
438
352
|
C: (f, a) => f(...a)
|
|
439
353
|
});
|
|
440
|
-
const queryResponse = _ts_add_disposable_resource2(env, await this._dataService.
|
|
354
|
+
const queryResponse = _ts_add_disposable_resource2(env, await this._dataService.execQuery(this._executionContext, request), false);
|
|
441
355
|
log2.info("query response", {
|
|
442
|
-
|
|
443
|
-
filter: request.filter,
|
|
444
|
-
resultCount: queryResponse.results.length
|
|
356
|
+
resultCount: queryResponse.results?.length
|
|
445
357
|
}, {
|
|
446
|
-
F:
|
|
447
|
-
L:
|
|
358
|
+
F: __dxlog_file2,
|
|
359
|
+
L: 28,
|
|
448
360
|
S: this,
|
|
449
361
|
C: (f, a) => f(...a)
|
|
450
362
|
});
|
|
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
|
-
};
|
|
363
|
+
return structuredClone(queryResponse);
|
|
464
364
|
} catch (e) {
|
|
465
365
|
env.error = e;
|
|
466
366
|
env.hasError = true;
|
|
@@ -471,16 +371,14 @@ var QueryServiceImpl = class {
|
|
|
471
371
|
log2.error("query failed", {
|
|
472
372
|
err: error
|
|
473
373
|
}, {
|
|
474
|
-
F:
|
|
475
|
-
L:
|
|
374
|
+
F: __dxlog_file2,
|
|
375
|
+
L: 31,
|
|
476
376
|
S: this,
|
|
477
377
|
C: (f, a) => f(...a)
|
|
478
378
|
});
|
|
479
379
|
throw new RuntimeServiceError2({
|
|
480
380
|
message: `Query execution failed (queryCount=${this._queryCount})`,
|
|
481
381
|
context: {
|
|
482
|
-
spaceId,
|
|
483
|
-
filter: request.filter,
|
|
484
382
|
queryCount: this._queryCount
|
|
485
383
|
},
|
|
486
384
|
cause: error
|
|
@@ -499,22 +397,6 @@ var QueryServiceImpl = class {
|
|
|
499
397
|
});
|
|
500
398
|
}
|
|
501
399
|
};
|
|
502
|
-
var getTargetSpacesForQuery = (query) => {
|
|
503
|
-
const spaces = /* @__PURE__ */ new Set();
|
|
504
|
-
const visitor = (node) => {
|
|
505
|
-
if (node.type === "options") {
|
|
506
|
-
if (node.options.spaceIds) {
|
|
507
|
-
for (const spaceId of node.options.spaceIds) {
|
|
508
|
-
spaces.add(SpaceId3.make(spaceId));
|
|
509
|
-
}
|
|
510
|
-
}
|
|
511
|
-
}
|
|
512
|
-
};
|
|
513
|
-
QueryAST.visit(query, visitor);
|
|
514
|
-
return [
|
|
515
|
-
...spaces
|
|
516
|
-
];
|
|
517
|
-
};
|
|
518
400
|
|
|
519
401
|
// src/internal/queue-service-impl.ts
|
|
520
402
|
import { RuntimeServiceError as RuntimeServiceError3 } from "@dxos/errors";
|
|
@@ -679,6 +561,8 @@ var QueueServiceImpl = class {
|
|
|
679
561
|
})(error);
|
|
680
562
|
}
|
|
681
563
|
}
|
|
564
|
+
async syncQueue(_) {
|
|
565
|
+
}
|
|
682
566
|
};
|
|
683
567
|
|
|
684
568
|
// src/internal/service-container.ts
|
|
@@ -826,8 +710,8 @@ var ServiceContainer = class {
|
|
|
826
710
|
|
|
827
711
|
// src/space-proxy.ts
|
|
828
712
|
import { Resource } from "@dxos/context";
|
|
829
|
-
import { invariant as
|
|
830
|
-
import { PublicKey
|
|
713
|
+
import { invariant as invariant2 } from "@dxos/invariant";
|
|
714
|
+
import { PublicKey } from "@dxos/keys";
|
|
831
715
|
|
|
832
716
|
// src/queues-api.ts
|
|
833
717
|
var QueuesAPIImpl = class {
|
|
@@ -846,7 +730,7 @@ var QueuesAPIImpl = class {
|
|
|
846
730
|
};
|
|
847
731
|
|
|
848
732
|
// src/space-proxy.ts
|
|
849
|
-
var
|
|
733
|
+
var __dxlog_file3 = "/__w/dxos/dxos/packages/core/functions-runtime-cloudflare/src/space-proxy.ts";
|
|
850
734
|
var SpaceProxy = class extends Resource {
|
|
851
735
|
_serviceContainer;
|
|
852
736
|
_echoClient;
|
|
@@ -861,8 +745,8 @@ var SpaceProxy = class extends Resource {
|
|
|
861
745
|
return this._id;
|
|
862
746
|
}
|
|
863
747
|
get db() {
|
|
864
|
-
|
|
865
|
-
F:
|
|
748
|
+
invariant2(this._db, void 0, {
|
|
749
|
+
F: __dxlog_file3,
|
|
866
750
|
L: 35,
|
|
867
751
|
S: this,
|
|
868
752
|
A: [
|
|
@@ -876,8 +760,8 @@ var SpaceProxy = class extends Resource {
|
|
|
876
760
|
* @deprecated Use db API.
|
|
877
761
|
*/
|
|
878
762
|
get crud() {
|
|
879
|
-
|
|
880
|
-
F:
|
|
763
|
+
invariant2(this._db, void 0, {
|
|
764
|
+
F: __dxlog_file3,
|
|
881
765
|
L: 43,
|
|
882
766
|
S: this,
|
|
883
767
|
A: [
|
|
@@ -897,7 +781,7 @@ var SpaceProxy = class extends Resource {
|
|
|
897
781
|
}
|
|
898
782
|
this._db = this._echoClient.constructDatabase({
|
|
899
783
|
spaceId: this._id,
|
|
900
|
-
spaceKey:
|
|
784
|
+
spaceKey: PublicKey.from(meta.spaceKey),
|
|
901
785
|
reactiveSchemaQuery: false,
|
|
902
786
|
owningObject: this
|
|
903
787
|
});
|
|
@@ -908,7 +792,7 @@ var SpaceProxy = class extends Resource {
|
|
|
908
792
|
};
|
|
909
793
|
|
|
910
794
|
// src/functions-client.ts
|
|
911
|
-
var
|
|
795
|
+
var __dxlog_file4 = "/__w/dxos/dxos/packages/core/functions-runtime-cloudflare/src/functions-client.ts";
|
|
912
796
|
var FunctionsClient = class extends Resource2 {
|
|
913
797
|
_serviceContainer;
|
|
914
798
|
_echoClient;
|
|
@@ -916,8 +800,8 @@ var FunctionsClient = class extends Resource2 {
|
|
|
916
800
|
_spaces = /* @__PURE__ */ new Map();
|
|
917
801
|
constructor(services) {
|
|
918
802
|
super();
|
|
919
|
-
|
|
920
|
-
F:
|
|
803
|
+
invariant3(typeof services.dataService !== "undefined", "DataService is required", {
|
|
804
|
+
F: __dxlog_file4,
|
|
921
805
|
L: 33,
|
|
922
806
|
S: this,
|
|
923
807
|
A: [
|
|
@@ -925,8 +809,8 @@ var FunctionsClient = class extends Resource2 {
|
|
|
925
809
|
"'DataService is required'"
|
|
926
810
|
]
|
|
927
811
|
});
|
|
928
|
-
|
|
929
|
-
F:
|
|
812
|
+
invariant3(typeof services.queueService !== "undefined", "QueueService is required", {
|
|
813
|
+
F: __dxlog_file4,
|
|
930
814
|
L: 34,
|
|
931
815
|
S: this,
|
|
932
816
|
A: [
|
|
@@ -983,11 +867,11 @@ var FunctionRouteValue = /* @__PURE__ */ (function(FunctionRouteValue2) {
|
|
|
983
867
|
})({});
|
|
984
868
|
|
|
985
869
|
// src/wrap-handler-for-cloudflare.ts
|
|
986
|
-
import { invariant as
|
|
987
|
-
import { SpaceId as
|
|
870
|
+
import { invariant as invariant4 } from "@dxos/invariant";
|
|
871
|
+
import { SpaceId as SpaceId2 } from "@dxos/keys";
|
|
988
872
|
import { log as log3 } from "@dxos/log";
|
|
989
873
|
import { EdgeResponse } from "@dxos/protocols";
|
|
990
|
-
var
|
|
874
|
+
var __dxlog_file5 = "/__w/dxos/dxos/packages/core/functions-runtime-cloudflare/src/wrap-handler-for-cloudflare.ts";
|
|
991
875
|
var wrapHandlerForCloudflare = (func) => {
|
|
992
876
|
return async (request, env) => {
|
|
993
877
|
if (request.headers.get(FUNCTION_ROUTE_HEADER) === FunctionRouteValue.Meta) {
|
|
@@ -996,7 +880,7 @@ var wrapHandlerForCloudflare = (func) => {
|
|
|
996
880
|
try {
|
|
997
881
|
const spaceId = new URL(request.url).searchParams.get("spaceId");
|
|
998
882
|
if (spaceId) {
|
|
999
|
-
if (!
|
|
883
|
+
if (!SpaceId2.isValid(spaceId)) {
|
|
1000
884
|
return new Response("Invalid spaceId", {
|
|
1001
885
|
status: 400
|
|
1002
886
|
});
|
|
@@ -1013,7 +897,7 @@ var wrapHandlerForCloudflare = (func) => {
|
|
|
1013
897
|
error,
|
|
1014
898
|
stack: error.stack
|
|
1015
899
|
}, {
|
|
1016
|
-
F:
|
|
900
|
+
F: __dxlog_file5,
|
|
1017
901
|
L: 44,
|
|
1018
902
|
S: void 0,
|
|
1019
903
|
C: (f, a) => f(...a)
|
|
@@ -1051,7 +935,7 @@ var decodeRequest = async (request) => {
|
|
|
1051
935
|
};
|
|
1052
936
|
} catch (err) {
|
|
1053
937
|
log3.catch(err, void 0, {
|
|
1054
|
-
F:
|
|
938
|
+
F: __dxlog_file5,
|
|
1055
939
|
L: 79,
|
|
1056
940
|
S: void 0,
|
|
1057
941
|
C: (f, a) => f(...a)
|
|
@@ -1088,8 +972,8 @@ var createFunctionContext = async ({ serviceContainer, contextSpaceId }) => {
|
|
|
1088
972
|
throw new Error(`Space not found: ${contextSpaceId}`);
|
|
1089
973
|
}
|
|
1090
974
|
spaceKey = meta.spaceKey;
|
|
1091
|
-
|
|
1092
|
-
F:
|
|
975
|
+
invariant4(!meta.rootDocumentId.startsWith("automerge:"), void 0, {
|
|
976
|
+
F: __dxlog_file5,
|
|
1093
977
|
L: 117,
|
|
1094
978
|
S: void 0,
|
|
1095
979
|
A: [
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
|
-
"sources": ["../../../src/functions-client.ts", "../../../src/internal/data-service-impl.ts", "../../../src/internal/utils.ts", "../../../src/internal/query-service-impl.ts", "../../../src/internal/
|
|
4
|
-
"sourcesContent": ["//\n// Copyright 2024 DXOS.org\n//\n\nimport { Resource } from '@dxos/context';\nimport { EchoClient } from '@dxos/echo-db';\nimport { invariant } from '@dxos/invariant';\nimport { type SpaceId } from '@dxos/keys';\nimport { type EdgeFunctionEnv } from '@dxos/protocols';\n\nimport { ServiceContainer } from './internal';\nimport { SpaceProxy } from './space-proxy';\n\ntype Services = {\n dataService: EdgeFunctionEnv.DataService;\n queueService: EdgeFunctionEnv.QueueService;\n functionsAiService: EdgeFunctionEnv.FunctionsAiService;\n};\n\n/**\n * API for functions to integrate with ECHO and HALO.\n * @deprecated\n */\nexport class FunctionsClient extends Resource {\n private readonly _serviceContainer;\n private readonly _echoClient;\n private readonly _executionContext: EdgeFunctionEnv.ExecutionContext = {};\n\n private readonly _spaces = new Map<SpaceId, SpaceProxy>();\n\n constructor(services: Services) {\n super();\n invariant(typeof services.dataService !== 'undefined', 'DataService is required');\n invariant(typeof services.queueService !== 'undefined', 'QueueService is required');\n this._serviceContainer = new ServiceContainer(\n this._executionContext,\n services.dataService,\n services.queueService,\n services.functionsAiService,\n );\n this._echoClient = new EchoClient({});\n }\n\n get echo(): EchoClient {\n return this._echoClient;\n }\n\n protected override async _open() {\n const { dataService, queryService } = await this._serviceContainer.createServices();\n this._echoClient.connectToService({ dataService, queryService });\n await this._echoClient.open();\n }\n\n protected override async _close() {\n for (const space of this._spaces.values()) {\n await space.close();\n }\n this._spaces.clear();\n\n await this._echoClient.close();\n }\n\n async getSpace(spaceId: SpaceId): Promise<SpaceProxy> {\n if (!this._spaces.has(spaceId)) {\n const space = new SpaceProxy(this._serviceContainer, this._echoClient, spaceId);\n this._spaces.set(spaceId, space);\n }\n const space = this._spaces.get(spaceId)!;\n await space.open(); // No-op if already open.\n return space;\n }\n}\n\nexport const createClientFromEnv = async (env: any): Promise<FunctionsClient> => {\n const client = new FunctionsClient({\n dataService: env.DATA_SERVICE,\n queueService: env.QUEUE_SERVICE,\n functionsAiService: env.FUNCTIONS_AI_SERVICE,\n });\n await client.open();\n return client;\n};\n\n/**\n - Provides data access capabilities for user functions.\n - No real-time replication or reactive queries -- function receives a snapshot.\n - Function event contains the metadata but doesn't need to include the data.\n */\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport type { RequestOptions } from '@dxos/codec-protobuf';\nimport { Stream } from '@dxos/codec-protobuf/stream';\nimport { raise } from '@dxos/debug';\nimport { NotImplementedError, RuntimeServiceError } from '@dxos/errors';\nimport { invariant } from '@dxos/invariant';\nimport { SpaceId } from '@dxos/keys';\nimport { log } from '@dxos/log';\nimport { type EdgeFunctionEnv } from '@dxos/protocols';\nimport type {\n BatchedDocumentUpdates,\n CreateDocumentRequest,\n CreateDocumentResponse,\n DataService as DataServiceProto,\n GetDocumentHeadsRequest,\n GetDocumentHeadsResponse,\n GetSpaceSyncStateRequest,\n ReIndexHeadsRequest,\n SpaceSyncState,\n UpdateRequest,\n UpdateSubscriptionRequest,\n} from '@dxos/protocols/proto/dxos/echo/service';\n\nimport { copyUint8Array } from './utils';\n\nexport class DataServiceImpl implements DataServiceProto {\n private dataSubscriptions = new Map<string, { spaceId: SpaceId; next: (msg: BatchedDocumentUpdates) => void }>();\n\n constructor(\n private _executionContext: EdgeFunctionEnv.ExecutionContext,\n private _dataService: EdgeFunctionEnv.DataService,\n ) {}\n\n subscribe({ subscriptionId, spaceId }: { subscriptionId: string; spaceId: string }): Stream<BatchedDocumentUpdates> {\n return new Stream(({ next }) => {\n invariant(SpaceId.isValid(spaceId));\n this.dataSubscriptions.set(subscriptionId, { spaceId, next });\n\n return () => {\n this.dataSubscriptions.delete(subscriptionId);\n };\n });\n }\n\n async updateSubscription({ subscriptionId, addIds }: UpdateSubscriptionRequest): Promise<void> {\n const sub =\n this.dataSubscriptions.get(subscriptionId) ??\n raise(\n new RuntimeServiceError({\n message: 'Subscription not found.',\n context: { subscriptionId },\n }),\n );\n\n if (addIds) {\n log.info('request documents', { count: addIds.length });\n // TODO(dmaretskyi): Batch.\n for (const documentId of addIds) {\n using document = await this._dataService.getDocument(this._executionContext, sub.spaceId, documentId);\n log.info('document loaded', { documentId, spaceId: sub.spaceId, found: !!document });\n if (!document) {\n log.warn('not found', { documentId });\n continue;\n }\n sub.next({\n updates: [\n {\n documentId,\n // Copy returned object to avoid hanging RPC stub\n // See https://developers.cloudflare.com/workers/runtime-apis/rpc/lifecycle/\n mutation: copyUint8Array(document.data),\n },\n ],\n });\n }\n }\n }\n\n async createDocument({ spaceId, initialValue }: CreateDocumentRequest): Promise<CreateDocumentResponse> {\n using response = await this._dataService.createDocument(this._executionContext, { spaceId, initialValue });\n return { documentId: response.documentId };\n }\n\n async update({ updates, subscriptionId }: UpdateRequest): Promise<void> {\n const sub =\n this.dataSubscriptions.get(subscriptionId) ??\n raise(\n new RuntimeServiceError({\n message: 'Subscription not found.',\n context: { subscriptionId },\n }),\n );\n // TODO(dmaretskyi): Batch.\n try {\n for (const update of updates ?? []) {\n await this._dataService.changeDocument(this._executionContext, sub.spaceId, update.documentId, update.mutation);\n }\n } catch (error) {\n throw RuntimeServiceError.wrap({\n message: 'Failed to apply document updates.',\n context: { subscriptionId },\n ifTypeDiffers: true,\n })(error);\n }\n }\n\n async flush(): Promise<void> {\n // No-op.\n }\n\n subscribeSpaceSyncState(_request: GetSpaceSyncStateRequest, _options?: RequestOptions): Stream<SpaceSyncState> {\n throw new NotImplementedError({\n message: 'subscribeSpaceSyncState is not implemented.',\n });\n }\n\n async getDocumentHeads({ documentIds: _documentIds }: GetDocumentHeadsRequest): Promise<GetDocumentHeadsResponse> {\n throw new NotImplementedError({\n message: 'getDocumentHeads is not implemented.',\n });\n }\n\n async reIndexHeads({ documentIds: _documentIds }: ReIndexHeadsRequest): Promise<void> {\n throw new NotImplementedError({\n message: 'reIndexHeads is not implemented.',\n });\n }\n\n async updateIndexes(): Promise<void> {\n log.error('updateIndexes is not available in EDGE env.');\n // No-op.\n }\n\n async waitUntilHeadsReplicated({ heads: _heads }: { heads: any }): Promise<void> {\n throw new NotImplementedError({\n message: 'waitUntilHeadsReplicated is not implemented.',\n });\n }\n}\n", "//\n// Copyright 2025 DXOS.org\n//\n\nexport const copyUint8Array = (value: Uint8Array): Uint8Array => new Uint8Array(value);\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport * as Schema from 'effect/Schema';\n\nimport { Stream } from '@dxos/codec-protobuf/stream';\nimport { QueryAST } from '@dxos/echo-protocol';\nimport { NotImplementedError, RuntimeServiceError } from '@dxos/errors';\nimport { invariant } from '@dxos/invariant';\nimport { PublicKey } from '@dxos/keys';\nimport { SpaceId } from '@dxos/keys';\nimport { log } from '@dxos/log';\nimport { type EdgeFunctionEnv } from '@dxos/protocols';\nimport {\n type QueryRequest,\n type QueryResponse,\n type QueryResult as QueryResultProto,\n type QueryService as QueryServiceProto,\n} from '@dxos/protocols/proto/dxos/echo/query';\n\nimport { queryToDataServiceRequest } from './adapter';\nimport { copyUint8Array } from './utils';\n\nexport class QueryServiceImpl implements QueryServiceProto {\n private _queryCount = 0;\n\n constructor(\n private readonly _executionContext: EdgeFunctionEnv.ExecutionContext,\n private readonly _dataService: EdgeFunctionEnv.DataService,\n ) {}\n\n execQuery(request: QueryRequest): Stream<QueryResponse> {\n log.info('execQuery', { request });\n const query = QueryAST.Query.pipe(Schema.decodeUnknownSync)(JSON.parse(request.query));\n const requestedSpaceIds = getTargetSpacesForQuery(query);\n invariant(requestedSpaceIds.length === 1, 'Only one space is supported');\n const spaceId = requestedSpaceIds[0];\n\n return Stream.fromPromise<QueryResponse>(\n (async () => {\n try {\n this._queryCount++;\n log.info('begin query', { spaceId });\n using queryResponse = await this._dataService.queryDocuments(\n this._executionContext,\n queryToDataServiceRequest(query),\n );\n log.info('query response', { spaceId, filter: request.filter, resultCount: queryResponse.results.length });\n return {\n results: queryResponse.results.map(\n (object): QueryResultProto => ({\n id: object.objectId,\n spaceId,\n spaceKey: PublicKey.ZERO,\n documentId: object.document.documentId,\n // Rank 1 for predicate matches where ranking is not determined.\n rank: 1,\n // Copy returned object to avoid hanging RPC stub.\n // See https://developers.cloudflare.com/workers/runtime-apis/rpc/lifecycle/\n documentAutomerge: copyUint8Array(object.document.data),\n }),\n ),\n } satisfies QueryResponse;\n } catch (error) {\n log.error('query failed', { err: error });\n throw new RuntimeServiceError({\n message: `Query execution failed (queryCount=${this._queryCount})`,\n context: { spaceId, filter: request.filter, queryCount: this._queryCount },\n cause: error,\n });\n }\n })(),\n );\n }\n\n async reindex() {\n throw new NotImplementedError({\n message: 'Reindex is not implemented.',\n });\n }\n\n async setConfig() {\n throw new NotImplementedError({\n message: 'SetConfig is not implemented.',\n });\n }\n}\n\n/**\n * Lists spaces this query will select from.\n */\nexport const getTargetSpacesForQuery = (query: QueryAST.Query): SpaceId[] => {\n const spaces = new Set<SpaceId>();\n\n const visitor = (node: QueryAST.Query) => {\n if (node.type === 'options') {\n if (node.options.spaceIds) {\n for (const spaceId of node.options.spaceIds) {\n spaces.add(SpaceId.make(spaceId));\n }\n }\n }\n };\n QueryAST.visit(query, visitor);\n return [...spaces];\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport { failUndefined } from '@dxos/debug';\nimport { type QueryAST } from '@dxos/echo-protocol';\nimport { invariant } from '@dxos/invariant';\nimport { SpaceId } from '@dxos/keys';\nimport { type EdgeFunctionEnv } from '@dxos/protocols';\n\nexport const queryToDataServiceRequest = (query: QueryAST.Query): EdgeFunctionEnv.QueryRequest => {\n const { filter, options } = isSimpleSelectionQuery(query) ?? failUndefined();\n invariant(options?.spaceIds?.length === 1, 'Only one space is supported');\n invariant(filter.type === 'object', 'Only object filters are supported');\n\n const spaceId = options.spaceIds[0];\n invariant(SpaceId.isValid(spaceId));\n\n return {\n spaceId,\n type: filter.typename ?? undefined,\n objectIds: [...(filter.id ?? [])],\n };\n};\n\n/**\n * Extracts the filter and options from a query.\n * Supports Select(...) and Options(Select(...)) queries.\n */\nexport const isSimpleSelectionQuery = (\n query: QueryAST.Query,\n): { filter: QueryAST.Filter; options?: QueryAST.QueryOptions } | null => {\n switch (query.type) {\n case 'options': {\n const maybeFilter = isSimpleSelectionQuery(query.query);\n if (!maybeFilter) {\n return null;\n }\n return { filter: maybeFilter.filter, options: query.options };\n }\n case 'select': {\n return { filter: query.filter, options: undefined };\n }\n default: {\n return null;\n }\n }\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { RuntimeServiceError } from '@dxos/errors';\nimport { type EdgeFunctionEnv, type FeedProtocol } from '@dxos/protocols';\n\nexport class QueueServiceImpl implements FeedProtocol.QueueService {\n constructor(\n protected _ctx: EdgeFunctionEnv.ExecutionContext,\n private readonly _queueService: EdgeFunctionEnv.QueueService,\n ) {}\n\n async queryQueue(request: FeedProtocol.QueryQueueRequest): Promise<FeedProtocol.QueryResult> {\n try {\n using result = await this._queueService.queryQueue(this._ctx, request);\n // Copy to avoid hanging RPC stub (Workers RPC lifecycle).\n return {\n objects: structuredClone(result.objects),\n nextCursor: result.nextCursor,\n prevCursor: result.prevCursor,\n };\n } catch (error) {\n const { query } = request;\n throw RuntimeServiceError.wrap({\n message: 'Queue query failed.',\n context: {\n subspaceTag: query?.queuesNamespace,\n spaceId: query?.spaceId,\n queueId: query?.queueIds?.[0],\n },\n ifTypeDiffers: true,\n })(error);\n }\n }\n\n async insertIntoQueue(request: FeedProtocol.InsertIntoQueueRequest): Promise<void> {\n try {\n using _ = await this._queueService.insertIntoQueue(this._ctx, request);\n } catch (error) {\n const { subspaceTag, spaceId, queueId } = request;\n throw RuntimeServiceError.wrap({\n message: 'Queue append failed.',\n context: { subspaceTag, spaceId, queueId },\n ifTypeDiffers: true,\n })(error);\n }\n }\n\n async deleteFromQueue(request: FeedProtocol.DeleteFromQueueRequest): Promise<void> {\n try {\n using _ = await this._queueService.deleteFromQueue(this._ctx, request);\n } catch (error) {\n const { subspaceTag, spaceId, queueId } = request;\n throw RuntimeServiceError.wrap({\n message: 'Queue delete failed.',\n context: { subspaceTag, spaceId, queueId },\n ifTypeDiffers: true,\n })(error);\n }\n }\n}\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport { type AnyEntity } from '@dxos/echo/internal';\nimport { type DXN, type SpaceId } from '@dxos/keys';\nimport { type EdgeFunctionEnv, type FeedProtocol } from '@dxos/protocols';\nimport { type QueryService as QueryServiceProto } from '@dxos/protocols/proto/dxos/echo/query';\nimport type { DataService as DataServiceProto } from '@dxos/protocols/proto/dxos/echo/service';\n\nimport { DataServiceImpl } from './data-service-impl';\nimport { QueryServiceImpl } from './query-service-impl';\nimport { QueueServiceImpl } from './queue-service-impl';\n\n/**\n * TODO: make this implement DataService and QueryService to unify API over edge and web backend\n */\nexport class ServiceContainer {\n constructor(\n private readonly _executionContext: EdgeFunctionEnv.ExecutionContext,\n private readonly _dataService: EdgeFunctionEnv.DataService,\n private readonly _queueService: EdgeFunctionEnv.QueueService,\n private readonly _functionsService: EdgeFunctionEnv.FunctionsAiService,\n ) {}\n\n async getSpaceMeta(spaceId: SpaceId): Promise<EdgeFunctionEnv.SpaceMeta | undefined> {\n using result = await this._dataService.getSpaceMeta(this._executionContext, spaceId);\n // Copy returned object to avoid hanging RPC stub\n // See https://developers.cloudflare.com/workers/runtime-apis/rpc/lifecycle/\n return result\n ? {\n spaceKey: result.spaceKey,\n rootDocumentId: result.rootDocumentId,\n }\n : undefined;\n }\n\n async createServices(): Promise<{\n dataService: DataServiceProto;\n queryService: QueryServiceProto;\n queueService: FeedProtocol.QueueService;\n functionsAiService: EdgeFunctionEnv.FunctionsAiService;\n }> {\n const dataService = new DataServiceImpl(this._executionContext, this._dataService);\n const queryService = new QueryServiceImpl(this._executionContext, this._dataService);\n const queueService = new QueueServiceImpl(this._executionContext, this._queueService);\n\n return {\n dataService,\n queryService,\n queueService,\n functionsAiService: this._functionsService,\n };\n }\n\n async queryQueue(queue: DXN): Promise<FeedProtocol.QueryResult> {\n const parts = queue.asQueueDXN();\n if (!parts) {\n throw new Error('Invalid queue DXN');\n }\n const { subspaceTag, spaceId, queueId } = parts;\n const result = await this._queueService.queryQueue(this._executionContext, {\n query: {\n spaceId,\n queuesNamespace: subspaceTag,\n queueIds: [queueId],\n },\n });\n return {\n objects: structuredClone(result.objects),\n nextCursor: result.nextCursor ?? null,\n prevCursor: result.prevCursor ?? null,\n };\n }\n\n async insertIntoQueue(queue: DXN, objects: AnyEntity[]): Promise<void> {\n const parts = queue.asQueueDXN();\n if (!parts) {\n throw new Error('Invalid queue DXN');\n }\n const { subspaceTag, spaceId, queueId } = parts;\n await this._queueService.insertIntoQueue(this._executionContext, {\n subspaceTag,\n spaceId,\n queueId,\n objects: objects as FeedProtocol.InsertIntoQueueRequest['objects'],\n });\n }\n}\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport { Resource } from '@dxos/context';\nimport { type Database } from '@dxos/echo';\nimport { type CoreDatabase, type EchoClient, type EchoDatabaseImpl } from '@dxos/echo-db';\nimport { invariant } from '@dxos/invariant';\nimport { PublicKey, type SpaceId } from '@dxos/keys';\n\nimport type { ServiceContainer } from './internal';\nimport { type QueuesAPI, QueuesAPIImpl } from './queues-api';\n\n/**\n * @deprecated\n */\nexport class SpaceProxy extends Resource {\n private _db?: EchoDatabaseImpl = undefined;\n private _queuesApi: QueuesAPIImpl;\n\n constructor(\n private readonly _serviceContainer: ServiceContainer,\n private readonly _echoClient: EchoClient,\n private readonly _id: SpaceId,\n ) {\n super();\n this._queuesApi = new QueuesAPIImpl(this._serviceContainer, this._id);\n }\n\n get id(): SpaceId {\n return this._id;\n }\n\n get db(): Database.Database {\n invariant(this._db);\n return this._db;\n }\n\n /**\n * @deprecated Use db API.\n */\n get crud(): CoreDatabase {\n invariant(this._db);\n return this._db.coreDatabase;\n }\n\n get queues(): QueuesAPI {\n return this._queuesApi;\n }\n\n protected override async _open() {\n const meta = await this._serviceContainer.getSpaceMeta(this._id);\n if (!meta) {\n throw new Error(`Space not found: ${this._id}`);\n }\n\n this._db = this._echoClient.constructDatabase({\n spaceId: this._id,\n spaceKey: PublicKey.from(meta.spaceKey),\n reactiveSchemaQuery: false,\n owningObject: this,\n });\n\n await this._db.coreDatabase.open({ rootUrl: meta.rootDocumentId });\n }\n}\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { type AnyEntity } from '@dxos/echo/internal';\nimport type { DXN, SpaceId } from '@dxos/keys';\nimport { type FeedProtocol } from '@dxos/protocols';\n\nimport type { ServiceContainer } from './internal';\n\n// TODO(dmaretskyi): Temporary API to get the queues working.\n// TODO(dmaretskyi): To be replaced with integrating queues into echo.\n/**\n * @deprecated\n */\nexport interface QueuesAPI {\n queryQueue(queue: DXN, options?: {}): Promise<FeedProtocol.QueryResult>;\n insertIntoQueue(queue: DXN, objects: AnyEntity[]): Promise<void>;\n}\n\n/**\n * @deprecated\n */\nexport class QueuesAPIImpl implements QueuesAPI {\n constructor(\n private readonly _serviceContainer: ServiceContainer,\n private readonly _spaceId: SpaceId,\n ) {}\n\n queryQueue(queue: DXN, options?: {}): Promise<FeedProtocol.QueryResult> {\n return this._serviceContainer.queryQueue(queue);\n }\n\n insertIntoQueue(queue: DXN, objects: AnyEntity[]): Promise<void> {\n // TODO(dmaretskyi): Ugly.\n return this._serviceContainer.insertIntoQueue(queue, JSON.parse(JSON.stringify(objects)));\n }\n}\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport type { JsonSchemaType } from '@dxos/echo/internal';\n\n/**\n * Is used for to route the request to the metadata handler instead of the main handler.\n */\nexport const FUNCTION_ROUTE_HEADER = 'X-DXOS-Function-Route';\n\nexport enum FunctionRouteValue {\n Meta = 'meta',\n}\n\nexport type FunctionMetadata = {\n /**\n * FQN.\n */\n key: string;\n /**\n * Human-readable name.\n */\n name?: string;\n\n /**\n * Description.\n */\n description?: string;\n\n /**\n * Input schema.\n */\n inputSchema?: JsonSchemaType;\n\n /**\n * Output schema.\n */\n outputSchema?: JsonSchemaType;\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport type { JsonSchemaType } from '@dxos/echo/internal';\nimport { invariant } from '@dxos/invariant';\nimport { SpaceId } from '@dxos/keys';\nimport { log } from '@dxos/log';\nimport { EdgeResponse } from '@dxos/protocols';\nimport type { EdgeFunctionEnv, FunctionProtocol } from '@dxos/protocols';\n\nimport { ServiceContainer } from './internal';\nimport { FUNCTION_ROUTE_HEADER, type FunctionMetadata, FunctionRouteValue } from './types';\n\n/**\n * Wraps a user function in a Cloudflare-compatible handler.\n */\nexport const wrapHandlerForCloudflare = (func: FunctionProtocol.Func): ExportedHandlerFetchHandler<any> => {\n return async (request: Request, env: EdgeFunctionEnv.Env): Promise<Response> => {\n // TODO(dmaretskyi): Should theÓ scope name reflect the function name?\n // TODO(mykola): Wrap in withCleanAutomergeWasmState;\n // TODO(mykola): Wrap in withNewExecutionContext;\n // Meta route is used to get the input schema of the function by the functions service.\n if (request.headers.get(FUNCTION_ROUTE_HEADER) === FunctionRouteValue.Meta) {\n return handleFunctionMetaCall(func, request);\n }\n\n try {\n const spaceId = new URL(request.url).searchParams.get('spaceId');\n if (spaceId) {\n if (!SpaceId.isValid(spaceId)) {\n return new Response('Invalid spaceId', { status: 400 });\n }\n }\n\n const serviceContainer = new ServiceContainer({}, env.DATA_SERVICE, env.QUEUE_SERVICE, env.FUNCTIONS_AI_SERVICE);\n const context = await createFunctionContext({\n serviceContainer,\n contextSpaceId: spaceId as SpaceId | undefined,\n });\n\n return EdgeResponse.success(await invokeFunction(func, context, request));\n } catch (error: any) {\n log.error('error invoking function', { error, stack: error.stack });\n return EdgeResponse.failure({\n message: error?.message ?? 'Internal error',\n error,\n });\n }\n };\n};\n\nconst invokeFunction = async (func: FunctionProtocol.Func, context: FunctionProtocol.Context, request: Request) => {\n // TODO(dmaretskyi): For some reason requests get wrapped like this.\n const { data } = await decodeRequest(request);\n\n return func.handler({\n context,\n data,\n });\n};\n\nconst decodeRequest = async (request: Request) => {\n const {\n data: { bodyText, ...rest },\n trigger,\n } = (await request.json()) as any;\n\n if (!bodyText) {\n return { data: rest, trigger };\n }\n\n // Webhook passed body as bodyText. Use it as function input if a well-formatted JSON\n // TODO: better trigger input mapping\n try {\n const data = JSON.parse(bodyText);\n return { data, trigger: { ...trigger, ...rest } };\n } catch (err) {\n log.catch(err);\n return { data: { bodyText, ...rest } };\n }\n};\n\nconst handleFunctionMetaCall = (functionDefinition: FunctionProtocol.Func, request: Request): Response => {\n const response: FunctionMetadata = {\n key: functionDefinition.meta.key,\n name: functionDefinition.meta.name,\n description: functionDefinition.meta.description,\n inputSchema: functionDefinition.meta.inputSchema as JsonSchemaType | undefined,\n outputSchema: functionDefinition.meta.outputSchema as JsonSchemaType | undefined,\n };\n\n return new Response(JSON.stringify(response), {\n headers: {\n 'Content-Type': 'application/json',\n },\n });\n};\n\nconst createFunctionContext = async ({\n serviceContainer,\n contextSpaceId,\n}: {\n serviceContainer: ServiceContainer;\n contextSpaceId: SpaceId | undefined;\n}): Promise<FunctionProtocol.Context> => {\n const { dataService, queryService, queueService, functionsAiService } = await serviceContainer.createServices();\n\n let spaceKey: string | undefined;\n let rootUrl: string | undefined;\n if (contextSpaceId) {\n const meta = await serviceContainer.getSpaceMeta(contextSpaceId);\n if (!meta) {\n throw new Error(`Space not found: ${contextSpaceId}`);\n }\n spaceKey = meta.spaceKey;\n invariant(!meta.rootDocumentId.startsWith('automerge:'));\n rootUrl = `automerge:${meta.rootDocumentId}`;\n }\n\n return {\n services: {\n dataService,\n queryService,\n queueService,\n functionsAiService,\n },\n spaceId: contextSpaceId,\n spaceKey,\n spaceRootUrl: rootUrl,\n } as any; // TODO(dmaretskyi): Link and fix before merging\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\n/* eslint-disable no-console */\n\nimport { LogLevel, type LogProcessor, log, shouldLog } from '@dxos/log';\n\nexport const setupFunctionsLogger = () => {\n log.runtimeConfig.processors.length = 0;\n log.runtimeConfig.processors.push(functionLogProcessor);\n};\n\nconst functionLogProcessor: LogProcessor = (config, entry) => {\n if (!shouldLog(entry, config.filters)) {\n return;\n }\n\n switch (entry.level) {\n case LogLevel.DEBUG:\n console.debug(entry.message, entry.context);\n break;\n case LogLevel.TRACE:\n console.debug(entry.message, entry.context);\n break;\n case LogLevel.VERBOSE:\n console.log(entry.message, entry.context);\n break;\n case LogLevel.INFO:\n console.info(entry.message, entry.context);\n break;\n case LogLevel.WARN:\n console.warn(entry.message, entry.context);\n break;\n case LogLevel.ERROR:\n console.error(entry.message, entry.context);\n break;\n default:\n console.log(entry.message, entry.context);\n break;\n }\n};\n"],
|
|
5
|
-
"mappings": "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",
|
|
6
|
-
"names": ["Resource", "EchoClient", "invariant", "Stream", "raise", "NotImplementedError", "RuntimeServiceError", "invariant", "SpaceId", "log", "copyUint8Array", "value", "Uint8Array", "DataServiceImpl", "dataSubscriptions", "Map", "_executionContext", "_dataService", "subscribe", "subscriptionId", "spaceId", "Stream", "next", "invariant", "SpaceId", "isValid", "set", "delete", "updateSubscription", "addIds", "sub", "get", "raise", "RuntimeServiceError", "message", "context", "log", "info", "count", "length", "documentId", "document", "getDocument", "found", "warn", "updates", "mutation", "copyUint8Array", "data", "createDocument", "initialValue", "response", "update", "changeDocument", "error", "wrap", "ifTypeDiffers", "flush", "subscribeSpaceSyncState", "_request", "_options", "NotImplementedError", "getDocumentHeads", "documentIds", "_documentIds", "reIndexHeads", "updateIndexes", "waitUntilHeadsReplicated", "heads", "_heads", "
|
|
3
|
+
"sources": ["../../../src/functions-client.ts", "../../../src/internal/data-service-impl.ts", "../../../src/internal/utils.ts", "../../../src/internal/query-service-impl.ts", "../../../src/internal/queue-service-impl.ts", "../../../src/internal/service-container.ts", "../../../src/space-proxy.ts", "../../../src/queues-api.ts", "../../../src/types.ts", "../../../src/wrap-handler-for-cloudflare.ts", "../../../src/logger.ts"],
|
|
4
|
+
"sourcesContent": ["//\n// Copyright 2024 DXOS.org\n//\n\nimport { Resource } from '@dxos/context';\nimport { EchoClient } from '@dxos/echo-db';\nimport { invariant } from '@dxos/invariant';\nimport { type SpaceId } from '@dxos/keys';\nimport { type EdgeFunctionEnv } from '@dxos/protocols';\n\nimport { ServiceContainer } from './internal';\nimport { SpaceProxy } from './space-proxy';\n\ntype Services = {\n dataService: EdgeFunctionEnv.DataService;\n queueService: EdgeFunctionEnv.QueueService;\n functionsAiService: EdgeFunctionEnv.FunctionsAiService;\n};\n\n/**\n * API for functions to integrate with ECHO and HALO.\n * @deprecated\n */\nexport class FunctionsClient extends Resource {\n private readonly _serviceContainer;\n private readonly _echoClient;\n private readonly _executionContext: EdgeFunctionEnv.TraceContext = {};\n\n private readonly _spaces = new Map<SpaceId, SpaceProxy>();\n\n constructor(services: Services) {\n super();\n invariant(typeof services.dataService !== 'undefined', 'DataService is required');\n invariant(typeof services.queueService !== 'undefined', 'QueueService is required');\n this._serviceContainer = new ServiceContainer(\n this._executionContext,\n services.dataService,\n services.queueService,\n services.functionsAiService,\n );\n this._echoClient = new EchoClient({});\n }\n\n get echo(): EchoClient {\n return this._echoClient;\n }\n\n protected override async _open() {\n const { dataService, queryService } = await this._serviceContainer.createServices();\n this._echoClient.connectToService({ dataService, queryService });\n await this._echoClient.open();\n }\n\n protected override async _close() {\n for (const space of this._spaces.values()) {\n await space.close();\n }\n this._spaces.clear();\n\n await this._echoClient.close();\n }\n\n async getSpace(spaceId: SpaceId): Promise<SpaceProxy> {\n if (!this._spaces.has(spaceId)) {\n const space = new SpaceProxy(this._serviceContainer, this._echoClient, spaceId);\n this._spaces.set(spaceId, space);\n }\n const space = this._spaces.get(spaceId)!;\n await space.open(); // No-op if already open.\n return space;\n }\n}\n\nexport const createClientFromEnv = async (env: any): Promise<FunctionsClient> => {\n const client = new FunctionsClient({\n dataService: env.DATA_SERVICE,\n queueService: env.QUEUE_SERVICE,\n functionsAiService: env.FUNCTIONS_AI_SERVICE,\n });\n await client.open();\n return client;\n};\n\n/**\n - Provides data access capabilities for user functions.\n - No real-time replication or reactive queries -- function receives a snapshot.\n - Function event contains the metadata but doesn't need to include the data.\n */\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport type { RequestOptions } from '@dxos/codec-protobuf';\nimport { Stream } from '@dxos/codec-protobuf/stream';\nimport { raise } from '@dxos/debug';\nimport { NotImplementedError, RuntimeServiceError } from '@dxos/errors';\nimport { invariant } from '@dxos/invariant';\nimport { SpaceId } from '@dxos/keys';\nimport { log } from '@dxos/log';\nimport { type EdgeFunctionEnv } from '@dxos/protocols';\nimport type {\n BatchedDocumentUpdates,\n CreateDocumentRequest,\n CreateDocumentResponse,\n DataService as DataServiceProto,\n GetDocumentHeadsRequest,\n GetDocumentHeadsResponse,\n GetSpaceSyncStateRequest,\n ReIndexHeadsRequest,\n SpaceSyncState,\n UpdateRequest,\n UpdateSubscriptionRequest,\n} from '@dxos/protocols/proto/dxos/echo/service';\n\nimport { copyUint8Array } from './utils';\n\nexport class DataServiceImpl implements DataServiceProto {\n private dataSubscriptions = new Map<string, { spaceId: SpaceId; next: (msg: BatchedDocumentUpdates) => void }>();\n\n constructor(\n private _executionContext: EdgeFunctionEnv.TraceContext,\n private _dataService: EdgeFunctionEnv.DataService,\n ) {}\n\n subscribe({ subscriptionId, spaceId }: { subscriptionId: string; spaceId: string }): Stream<BatchedDocumentUpdates> {\n return new Stream(({ next }) => {\n invariant(SpaceId.isValid(spaceId));\n this.dataSubscriptions.set(subscriptionId, { spaceId, next });\n\n return () => {\n this.dataSubscriptions.delete(subscriptionId);\n };\n });\n }\n\n async updateSubscription({ subscriptionId, addIds }: UpdateSubscriptionRequest): Promise<void> {\n const sub =\n this.dataSubscriptions.get(subscriptionId) ??\n raise(\n new RuntimeServiceError({\n message: 'Subscription not found.',\n context: { subscriptionId },\n }),\n );\n\n if (addIds) {\n log.info('request documents', { count: addIds.length });\n // TODO(dmaretskyi): Batch.\n for (const documentId of addIds) {\n using document = await this._dataService.getDocument(this._executionContext, sub.spaceId, documentId);\n log.info('document loaded', { documentId, spaceId: sub.spaceId, found: !!document });\n if (!document) {\n log.warn('not found', { documentId });\n continue;\n }\n sub.next({\n updates: [\n {\n documentId,\n // Copy returned object to avoid hanging RPC stub\n // See https://developers.cloudflare.com/workers/runtime-apis/rpc/lifecycle/\n mutation: copyUint8Array(document.data),\n },\n ],\n });\n }\n }\n }\n\n async createDocument({ spaceId, initialValue }: CreateDocumentRequest): Promise<CreateDocumentResponse> {\n using response = await this._dataService.createDocument(this._executionContext, { spaceId, initialValue });\n return { documentId: response.documentId };\n }\n\n async update({ updates, subscriptionId }: UpdateRequest): Promise<void> {\n const sub =\n this.dataSubscriptions.get(subscriptionId) ??\n raise(\n new RuntimeServiceError({\n message: 'Subscription not found.',\n context: { subscriptionId },\n }),\n );\n // TODO(dmaretskyi): Batch.\n try {\n for (const update of updates ?? []) {\n await this._dataService.changeDocument(this._executionContext, sub.spaceId, update.documentId, update.mutation);\n }\n } catch (error) {\n throw RuntimeServiceError.wrap({\n message: 'Failed to apply document updates.',\n context: { subscriptionId },\n ifTypeDiffers: true,\n })(error);\n }\n }\n\n async flush(): Promise<void> {\n // No-op.\n }\n\n subscribeSpaceSyncState(_request: GetSpaceSyncStateRequest, _options?: RequestOptions): Stream<SpaceSyncState> {\n throw new NotImplementedError({\n message: 'subscribeSpaceSyncState is not implemented.',\n });\n }\n\n async getDocumentHeads({ documentIds: _documentIds }: GetDocumentHeadsRequest): Promise<GetDocumentHeadsResponse> {\n throw new NotImplementedError({\n message: 'getDocumentHeads is not implemented.',\n });\n }\n\n async reIndexHeads({ documentIds: _documentIds }: ReIndexHeadsRequest): Promise<void> {\n throw new NotImplementedError({\n message: 'reIndexHeads is not implemented.',\n });\n }\n\n async updateIndexes(): Promise<void> {\n log.error('updateIndexes is not available in EDGE env.');\n // No-op.\n }\n\n async waitUntilHeadsReplicated({ heads: _heads }: { heads: any }): Promise<void> {\n throw new NotImplementedError({\n message: 'waitUntilHeadsReplicated is not implemented.',\n });\n }\n}\n", "//\n// Copyright 2025 DXOS.org\n//\n\nexport const copyUint8Array = (value: Uint8Array): Uint8Array => new Uint8Array(value);\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport { Stream } from '@dxos/codec-protobuf/stream';\nimport { NotImplementedError, RuntimeServiceError } from '@dxos/errors';\nimport { log } from '@dxos/log';\nimport { type EdgeFunctionEnv } from '@dxos/protocols';\nimport { type QueryRequest, type QueryResponse, type QueryService } from '@dxos/protocols/proto/dxos/echo/query';\n\nexport class QueryServiceImpl implements QueryService {\n private _queryCount = 0;\n\n constructor(\n private readonly _executionContext: EdgeFunctionEnv.TraceContext,\n private readonly _dataService: EdgeFunctionEnv.DataService,\n ) {}\n\n execQuery(request: QueryRequest): Stream<QueryResponse> {\n log.info('execQuery', { request });\n\n return Stream.fromPromise<QueryResponse>(\n (async () => {\n try {\n this._queryCount++;\n log.info('begin query', { request });\n using queryResponse = await this._dataService.execQuery(this._executionContext, request);\n log.info('query response', { resultCount: queryResponse.results?.length });\n return structuredClone(queryResponse);\n } catch (error) {\n log.error('query failed', { err: error });\n throw new RuntimeServiceError({\n message: `Query execution failed (queryCount=${this._queryCount})`,\n context: { queryCount: this._queryCount },\n cause: error,\n });\n }\n })(),\n );\n }\n\n async reindex() {\n throw new NotImplementedError({\n message: 'Reindex is not implemented.',\n });\n }\n\n async setConfig() {\n throw new NotImplementedError({\n message: 'SetConfig is not implemented.',\n });\n }\n}\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { RuntimeServiceError } from '@dxos/errors';\nimport { type EdgeFunctionEnv, type FeedProtocol } from '@dxos/protocols';\n\nexport class QueueServiceImpl implements FeedProtocol.QueueService {\n constructor(\n protected _ctx: EdgeFunctionEnv.TraceContext,\n private readonly _queueService: EdgeFunctionEnv.QueueService,\n ) {}\n\n async queryQueue(request: FeedProtocol.QueryQueueRequest): Promise<FeedProtocol.QueryResult> {\n try {\n using result = await this._queueService.queryQueue(this._ctx, request);\n // Copy to avoid hanging RPC stub (Workers RPC lifecycle).\n return {\n objects: structuredClone(result.objects),\n nextCursor: result.nextCursor,\n prevCursor: result.prevCursor,\n };\n } catch (error) {\n const { query } = request;\n throw RuntimeServiceError.wrap({\n message: 'Queue query failed.',\n context: {\n subspaceTag: query?.queuesNamespace,\n spaceId: query?.spaceId,\n queueId: query?.queueIds?.[0],\n },\n ifTypeDiffers: true,\n })(error);\n }\n }\n\n async insertIntoQueue(request: FeedProtocol.InsertIntoQueueRequest): Promise<void> {\n try {\n using _ = await this._queueService.insertIntoQueue(this._ctx, request);\n } catch (error) {\n const { subspaceTag, spaceId, queueId } = request;\n throw RuntimeServiceError.wrap({\n message: 'Queue append failed.',\n context: { subspaceTag, spaceId, queueId },\n ifTypeDiffers: true,\n })(error);\n }\n }\n\n async deleteFromQueue(request: FeedProtocol.DeleteFromQueueRequest): Promise<void> {\n try {\n using _ = await this._queueService.deleteFromQueue(this._ctx, request);\n } catch (error) {\n const { subspaceTag, spaceId, queueId } = request;\n throw RuntimeServiceError.wrap({\n message: 'Queue delete failed.',\n context: { subspaceTag, spaceId, queueId },\n ifTypeDiffers: true,\n })(error);\n }\n }\n\n async syncQueue(_: FeedProtocol.SyncQueueRequest): Promise<void> {\n // No-op in Cloudflare runtime.\n }\n}\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport { type AnyEntity } from '@dxos/echo/internal';\nimport { type DXN, type SpaceId } from '@dxos/keys';\nimport { type EdgeFunctionEnv, type FeedProtocol } from '@dxos/protocols';\nimport { type QueryService as QueryServiceProto } from '@dxos/protocols/proto/dxos/echo/query';\nimport type { DataService as DataServiceProto } from '@dxos/protocols/proto/dxos/echo/service';\n\nimport { DataServiceImpl } from './data-service-impl';\nimport { QueryServiceImpl } from './query-service-impl';\nimport { QueueServiceImpl } from './queue-service-impl';\n\n/**\n * TODO: make this implement DataService and QueryService to unify API over edge and web backend\n */\nexport class ServiceContainer {\n constructor(\n private readonly _executionContext: EdgeFunctionEnv.TraceContext,\n private readonly _dataService: EdgeFunctionEnv.DataService,\n private readonly _queueService: EdgeFunctionEnv.QueueService,\n private readonly _functionsService: EdgeFunctionEnv.FunctionsAiService,\n ) {}\n\n async getSpaceMeta(spaceId: SpaceId): Promise<EdgeFunctionEnv.SpaceMeta | undefined> {\n using result = await this._dataService.getSpaceMeta(this._executionContext, spaceId);\n // Copy returned object to avoid hanging RPC stub\n // See https://developers.cloudflare.com/workers/runtime-apis/rpc/lifecycle/\n return result\n ? {\n spaceKey: result.spaceKey,\n rootDocumentId: result.rootDocumentId,\n }\n : undefined;\n }\n\n async createServices(): Promise<{\n dataService: DataServiceProto;\n queryService: QueryServiceProto;\n queueService: FeedProtocol.QueueService;\n functionsAiService: EdgeFunctionEnv.FunctionsAiService;\n }> {\n const dataService = new DataServiceImpl(this._executionContext, this._dataService);\n const queryService = new QueryServiceImpl(this._executionContext, this._dataService);\n const queueService = new QueueServiceImpl(this._executionContext, this._queueService);\n\n return {\n dataService,\n queryService,\n queueService,\n functionsAiService: this._functionsService,\n };\n }\n\n async queryQueue(queue: DXN): Promise<FeedProtocol.QueryResult> {\n const parts = queue.asQueueDXN();\n if (!parts) {\n throw new Error('Invalid queue DXN');\n }\n const { subspaceTag, spaceId, queueId } = parts;\n const result = await this._queueService.queryQueue(this._executionContext, {\n query: {\n spaceId,\n queuesNamespace: subspaceTag,\n queueIds: [queueId],\n },\n });\n return {\n objects: structuredClone(result.objects),\n nextCursor: result.nextCursor ?? null,\n prevCursor: result.prevCursor ?? null,\n };\n }\n\n async insertIntoQueue(queue: DXN, objects: AnyEntity[]): Promise<void> {\n const parts = queue.asQueueDXN();\n if (!parts) {\n throw new Error('Invalid queue DXN');\n }\n const { subspaceTag, spaceId, queueId } = parts;\n await this._queueService.insertIntoQueue(this._executionContext, {\n subspaceTag,\n spaceId,\n queueId,\n objects: objects as FeedProtocol.InsertIntoQueueRequest['objects'],\n });\n }\n}\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport { Resource } from '@dxos/context';\nimport { type Database } from '@dxos/echo';\nimport { type CoreDatabase, type EchoClient, type EchoDatabaseImpl } from '@dxos/echo-db';\nimport { invariant } from '@dxos/invariant';\nimport { PublicKey, type SpaceId } from '@dxos/keys';\n\nimport type { ServiceContainer } from './internal';\nimport { type QueuesAPI, QueuesAPIImpl } from './queues-api';\n\n/**\n * @deprecated\n */\nexport class SpaceProxy extends Resource {\n private _db?: EchoDatabaseImpl = undefined;\n private _queuesApi: QueuesAPIImpl;\n\n constructor(\n private readonly _serviceContainer: ServiceContainer,\n private readonly _echoClient: EchoClient,\n private readonly _id: SpaceId,\n ) {\n super();\n this._queuesApi = new QueuesAPIImpl(this._serviceContainer, this._id);\n }\n\n get id(): SpaceId {\n return this._id;\n }\n\n get db(): Database.Database {\n invariant(this._db);\n return this._db;\n }\n\n /**\n * @deprecated Use db API.\n */\n get crud(): CoreDatabase {\n invariant(this._db);\n return this._db.coreDatabase;\n }\n\n get queues(): QueuesAPI {\n return this._queuesApi;\n }\n\n protected override async _open() {\n const meta = await this._serviceContainer.getSpaceMeta(this._id);\n if (!meta) {\n throw new Error(`Space not found: ${this._id}`);\n }\n\n this._db = this._echoClient.constructDatabase({\n spaceId: this._id,\n spaceKey: PublicKey.from(meta.spaceKey),\n reactiveSchemaQuery: false,\n owningObject: this,\n });\n\n await this._db.coreDatabase.open({ rootUrl: meta.rootDocumentId });\n }\n}\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { type AnyEntity } from '@dxos/echo/internal';\nimport type { DXN, SpaceId } from '@dxos/keys';\nimport { type FeedProtocol } from '@dxos/protocols';\n\nimport type { ServiceContainer } from './internal';\n\n// TODO(dmaretskyi): Temporary API to get the queues working.\n// TODO(dmaretskyi): To be replaced with integrating queues into echo.\n/**\n * @deprecated\n */\nexport interface QueuesAPI {\n queryQueue(queue: DXN, options?: {}): Promise<FeedProtocol.QueryResult>;\n insertIntoQueue(queue: DXN, objects: AnyEntity[]): Promise<void>;\n}\n\n/**\n * @deprecated\n */\nexport class QueuesAPIImpl implements QueuesAPI {\n constructor(\n private readonly _serviceContainer: ServiceContainer,\n private readonly _spaceId: SpaceId,\n ) {}\n\n queryQueue(queue: DXN, options?: {}): Promise<FeedProtocol.QueryResult> {\n return this._serviceContainer.queryQueue(queue);\n }\n\n insertIntoQueue(queue: DXN, objects: AnyEntity[]): Promise<void> {\n // TODO(dmaretskyi): Ugly.\n return this._serviceContainer.insertIntoQueue(queue, JSON.parse(JSON.stringify(objects)));\n }\n}\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport type { JsonSchemaType } from '@dxos/echo/internal';\n\n/**\n * Is used for to route the request to the metadata handler instead of the main handler.\n */\nexport const FUNCTION_ROUTE_HEADER = 'X-DXOS-Function-Route';\n\nexport enum FunctionRouteValue {\n Meta = 'meta',\n}\n\nexport type FunctionMetadata = {\n /**\n * FQN.\n */\n key: string;\n /**\n * Human-readable name.\n */\n name?: string;\n\n /**\n * Description.\n */\n description?: string;\n\n /**\n * Input schema.\n */\n inputSchema?: JsonSchemaType;\n\n /**\n * Output schema.\n */\n outputSchema?: JsonSchemaType;\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport type { JsonSchemaType } from '@dxos/echo/internal';\nimport { invariant } from '@dxos/invariant';\nimport { SpaceId } from '@dxos/keys';\nimport { log } from '@dxos/log';\nimport { EdgeResponse } from '@dxos/protocols';\nimport type { EdgeFunctionEnv, FunctionProtocol } from '@dxos/protocols';\n\nimport { ServiceContainer } from './internal';\nimport { FUNCTION_ROUTE_HEADER, type FunctionMetadata, FunctionRouteValue } from './types';\n\n/**\n * Wraps a user function in a Cloudflare-compatible handler.\n */\nexport const wrapHandlerForCloudflare = (func: FunctionProtocol.Func): ExportedHandlerFetchHandler<any> => {\n return async (request: Request, env: EdgeFunctionEnv.Env): Promise<Response> => {\n // TODO(dmaretskyi): Should theÓ scope name reflect the function name?\n // TODO(mykola): Wrap in withCleanAutomergeWasmState;\n // TODO(mykola): Wrap in withNewExecutionContext;\n // Meta route is used to get the input schema of the function by the functions service.\n if (request.headers.get(FUNCTION_ROUTE_HEADER) === FunctionRouteValue.Meta) {\n return handleFunctionMetaCall(func, request);\n }\n\n try {\n const spaceId = new URL(request.url).searchParams.get('spaceId');\n if (spaceId) {\n if (!SpaceId.isValid(spaceId)) {\n return new Response('Invalid spaceId', { status: 400 });\n }\n }\n\n const serviceContainer = new ServiceContainer({}, env.DATA_SERVICE, env.QUEUE_SERVICE, env.FUNCTIONS_AI_SERVICE);\n const context = await createFunctionContext({\n serviceContainer,\n contextSpaceId: spaceId as SpaceId | undefined,\n });\n\n return EdgeResponse.success(await invokeFunction(func, context, request));\n } catch (error: any) {\n log.error('error invoking function', { error, stack: error.stack });\n return EdgeResponse.failure({\n message: error?.message ?? 'Internal error',\n error,\n });\n }\n };\n};\n\nconst invokeFunction = async (func: FunctionProtocol.Func, context: FunctionProtocol.Context, request: Request) => {\n // TODO(dmaretskyi): For some reason requests get wrapped like this.\n const { data } = await decodeRequest(request);\n\n return func.handler({\n context,\n data,\n });\n};\n\nconst decodeRequest = async (request: Request) => {\n const {\n data: { bodyText, ...rest },\n trigger,\n } = (await request.json()) as any;\n\n if (!bodyText) {\n return { data: rest, trigger };\n }\n\n // Webhook passed body as bodyText. Use it as function input if a well-formatted JSON\n // TODO: better trigger input mapping\n try {\n const data = JSON.parse(bodyText);\n return { data, trigger: { ...trigger, ...rest } };\n } catch (err) {\n log.catch(err);\n return { data: { bodyText, ...rest } };\n }\n};\n\nconst handleFunctionMetaCall = (functionDefinition: FunctionProtocol.Func, request: Request): Response => {\n const response: FunctionMetadata = {\n key: functionDefinition.meta.key,\n name: functionDefinition.meta.name,\n description: functionDefinition.meta.description,\n inputSchema: functionDefinition.meta.inputSchema as JsonSchemaType | undefined,\n outputSchema: functionDefinition.meta.outputSchema as JsonSchemaType | undefined,\n };\n\n return new Response(JSON.stringify(response), {\n headers: {\n 'Content-Type': 'application/json',\n },\n });\n};\n\nconst createFunctionContext = async ({\n serviceContainer,\n contextSpaceId,\n}: {\n serviceContainer: ServiceContainer;\n contextSpaceId: SpaceId | undefined;\n}): Promise<FunctionProtocol.Context> => {\n const { dataService, queryService, queueService, functionsAiService } = await serviceContainer.createServices();\n\n let spaceKey: string | undefined;\n let rootUrl: string | undefined;\n if (contextSpaceId) {\n const meta = await serviceContainer.getSpaceMeta(contextSpaceId);\n if (!meta) {\n throw new Error(`Space not found: ${contextSpaceId}`);\n }\n spaceKey = meta.spaceKey;\n invariant(!meta.rootDocumentId.startsWith('automerge:'));\n rootUrl = `automerge:${meta.rootDocumentId}`;\n }\n\n return {\n services: {\n dataService,\n queryService,\n queueService,\n functionsAiService,\n },\n spaceId: contextSpaceId,\n spaceKey,\n spaceRootUrl: rootUrl,\n } as any; // TODO(dmaretskyi): Link and fix before merging\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\n/* eslint-disable no-console */\n\nimport { LogLevel, type LogProcessor, log, shouldLog } from '@dxos/log';\n\nexport const setupFunctionsLogger = () => {\n log.runtimeConfig.processors.length = 0;\n log.runtimeConfig.processors.push(functionLogProcessor);\n};\n\nconst functionLogProcessor: LogProcessor = (config, entry) => {\n if (!shouldLog(entry, config.filters)) {\n return;\n }\n\n switch (entry.level) {\n case LogLevel.DEBUG:\n console.debug(entry.message, entry.context);\n break;\n case LogLevel.TRACE:\n console.debug(entry.message, entry.context);\n break;\n case LogLevel.VERBOSE:\n console.log(entry.message, entry.context);\n break;\n case LogLevel.INFO:\n console.info(entry.message, entry.context);\n break;\n case LogLevel.WARN:\n console.warn(entry.message, entry.context);\n break;\n case LogLevel.ERROR:\n console.error(entry.message, entry.context);\n break;\n default:\n console.log(entry.message, entry.context);\n break;\n }\n};\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["Resource", "EchoClient", "invariant", "Stream", "raise", "NotImplementedError", "RuntimeServiceError", "invariant", "SpaceId", "log", "copyUint8Array", "value", "Uint8Array", "DataServiceImpl", "dataSubscriptions", "Map", "_executionContext", "_dataService", "subscribe", "subscriptionId", "spaceId", "Stream", "next", "invariant", "SpaceId", "isValid", "set", "delete", "updateSubscription", "addIds", "sub", "get", "raise", "RuntimeServiceError", "message", "context", "log", "info", "count", "length", "documentId", "document", "getDocument", "found", "warn", "updates", "mutation", "copyUint8Array", "data", "createDocument", "initialValue", "response", "update", "changeDocument", "error", "wrap", "ifTypeDiffers", "flush", "subscribeSpaceSyncState", "_request", "_options", "NotImplementedError", "getDocumentHeads", "documentIds", "_documentIds", "reIndexHeads", "updateIndexes", "waitUntilHeadsReplicated", "heads", "_heads", "Stream", "NotImplementedError", "RuntimeServiceError", "log", "QueryServiceImpl", "_queryCount", "_executionContext", "_dataService", "execQuery", "request", "info", "fromPromise", "queryResponse", "resultCount", "results", "length", "structuredClone", "error", "err", "message", "context", "queryCount", "cause", "reindex", "setConfig", "RuntimeServiceError", "QueueServiceImpl", "_ctx", "_queueService", "queryQueue", "request", "result", "objects", "structuredClone", "nextCursor", "prevCursor", "error", "query", "RuntimeServiceError", "wrap", "message", "context", "subspaceTag", "queuesNamespace", "spaceId", "queueId", "queueIds", "ifTypeDiffers", "insertIntoQueue", "_", "deleteFromQueue", "syncQueue", "ServiceContainer", "_executionContext", "_dataService", "_queueService", "_functionsService", "getSpaceMeta", "spaceId", "result", "spaceKey", "rootDocumentId", "undefined", "createServices", "dataService", "DataServiceImpl", "queryService", "QueryServiceImpl", "queueService", "QueueServiceImpl", "functionsAiService", "queryQueue", "queue", "parts", "asQueueDXN", "Error", "subspaceTag", "queueId", "query", "queuesNamespace", "queueIds", "objects", "structuredClone", "nextCursor", "prevCursor", "insertIntoQueue", "Resource", "invariant", "PublicKey", "QueuesAPIImpl", "_serviceContainer", "_spaceId", "queryQueue", "queue", "options", "insertIntoQueue", "objects", "JSON", "parse", "stringify", "SpaceProxy", "Resource", "_db", "undefined", "_queuesApi", "_serviceContainer", "_echoClient", "_id", "QueuesAPIImpl", "id", "db", "invariant", "crud", "coreDatabase", "queues", "_open", "meta", "getSpaceMeta", "Error", "constructDatabase", "spaceId", "spaceKey", "PublicKey", "from", "reactiveSchemaQuery", "owningObject", "open", "rootUrl", "rootDocumentId", "FunctionsClient", "Resource", "_serviceContainer", "_echoClient", "_executionContext", "_spaces", "Map", "services", "invariant", "dataService", "queueService", "ServiceContainer", "functionsAiService", "EchoClient", "echo", "_open", "queryService", "createServices", "connectToService", "open", "_close", "space", "values", "close", "clear", "getSpace", "spaceId", "has", "SpaceProxy", "set", "get", "createClientFromEnv", "env", "client", "DATA_SERVICE", "QUEUE_SERVICE", "FUNCTIONS_AI_SERVICE", "FUNCTION_ROUTE_HEADER", "FunctionRouteValue", "invariant", "SpaceId", "log", "EdgeResponse", "wrapHandlerForCloudflare", "func", "request", "env", "headers", "get", "FUNCTION_ROUTE_HEADER", "FunctionRouteValue", "Meta", "handleFunctionMetaCall", "spaceId", "URL", "url", "searchParams", "SpaceId", "isValid", "Response", "status", "serviceContainer", "ServiceContainer", "DATA_SERVICE", "QUEUE_SERVICE", "FUNCTIONS_AI_SERVICE", "context", "createFunctionContext", "contextSpaceId", "EdgeResponse", "success", "invokeFunction", "error", "log", "stack", "failure", "message", "data", "decodeRequest", "handler", "bodyText", "rest", "trigger", "json", "JSON", "parse", "err", "catch", "functionDefinition", "response", "key", "meta", "name", "description", "inputSchema", "outputSchema", "stringify", "dataService", "queryService", "queueService", "functionsAiService", "createServices", "spaceKey", "rootUrl", "getSpaceMeta", "Error", "invariant", "rootDocumentId", "startsWith", "services", "spaceRootUrl", "LogLevel", "log", "shouldLog", "setupFunctionsLogger", "log", "runtimeConfig", "processors", "length", "push", "functionLogProcessor", "config", "entry", "shouldLog", "filters", "level", "LogLevel", "DEBUG", "console", "debug", "message", "context", "TRACE", "VERBOSE", "INFO", "info", "WARN", "warn", "ERROR", "error"]
|
|
7
7
|
}
|