@dxos/functions-runtime-cloudflare 0.8.4-main.d05673bc65 → 0.8.4-main.d9fc60f731
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/LICENSE +102 -5
- package/README.md +1 -1
- package/dist/lib/browser/index.mjs +58 -143
- package/dist/lib/browser/index.mjs.map +4 -4
- package/dist/lib/browser/meta.json +1 -1
- package/dist/lib/node-esm/index.mjs +58 -143
- 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 +0 -5
- package/dist/types/src/functions-client.d.ts.map +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.map +1 -1
- package/dist/types/src/internal/queue-service-impl.d.ts +1 -0
- package/dist/types/src/internal/queue-service-impl.d.ts.map +1 -1
- package/dist/types/src/internal/service-container.d.ts +4 -4
- package/dist/types/src/internal/service-container.d.ts.map +1 -1
- package/dist/types/src/internal/utils.d.ts.map +1 -1
- package/dist/types/src/queues-api.d.ts +10 -5
- package/dist/types/src/queues-api.d.ts.map +1 -1
- 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 +16 -16
- package/src/functions-client.ts +0 -6
- package/src/internal/data-service-impl.ts +8 -2
- package/src/internal/queue-service-impl.ts +4 -0
- package/src/internal/service-container.ts +16 -15
- package/src/logger.ts +10 -8
- package/src/queues-api.ts +11 -5
- package/src/space-proxy.ts +1 -1
- package/src/wrap-handler-for-cloudflare.ts +1 -1
|
@@ -5,6 +5,9 @@ import { Resource as Resource2 } from "@dxos/context";
|
|
|
5
5
|
import { EchoClient } from "@dxos/echo-db";
|
|
6
6
|
import { invariant as invariant3 } from "@dxos/invariant";
|
|
7
7
|
|
|
8
|
+
// src/internal/service-container.ts
|
|
9
|
+
import { EID } from "@dxos/keys";
|
|
10
|
+
|
|
8
11
|
// src/internal/data-service-impl.ts
|
|
9
12
|
import { Stream } from "@dxos/codec-protobuf/stream";
|
|
10
13
|
import { raise } from "@dxos/debug";
|
|
@@ -17,6 +20,7 @@ import { log } from "@dxos/log";
|
|
|
17
20
|
var copyUint8Array = (value) => new Uint8Array(value);
|
|
18
21
|
|
|
19
22
|
// src/internal/data-service-impl.ts
|
|
23
|
+
var __dxlog_file = "/__w/dxos/dxos/packages/core/compute/functions-runtime-cloudflare/src/internal/data-service-impl.ts";
|
|
20
24
|
function _ts_add_disposable_resource(env, value, async) {
|
|
21
25
|
if (value !== null && value !== void 0) {
|
|
22
26
|
if (typeof value !== "object" && typeof value !== "function") throw new TypeError("Object expected.");
|
|
@@ -82,7 +86,6 @@ function _ts_dispose_resources(env) {
|
|
|
82
86
|
return next();
|
|
83
87
|
})(env);
|
|
84
88
|
}
|
|
85
|
-
var __dxlog_file = "/__w/dxos/dxos/packages/core/functions-runtime-cloudflare/src/internal/data-service-impl.ts";
|
|
86
89
|
var DataServiceImpl = class {
|
|
87
90
|
_executionContext;
|
|
88
91
|
_dataService;
|
|
@@ -93,15 +96,7 @@ var DataServiceImpl = class {
|
|
|
93
96
|
}
|
|
94
97
|
subscribe({ subscriptionId, spaceId }) {
|
|
95
98
|
return new Stream(({ next }) => {
|
|
96
|
-
invariant(SpaceId.isValid(spaceId), void 0, {
|
|
97
|
-
F: __dxlog_file,
|
|
98
|
-
L: 39,
|
|
99
|
-
S: this,
|
|
100
|
-
A: [
|
|
101
|
-
"SpaceId.isValid(spaceId)",
|
|
102
|
-
""
|
|
103
|
-
]
|
|
104
|
-
});
|
|
99
|
+
invariant(SpaceId.isValid(spaceId), void 0, { "~LogMeta": "~LogMeta", F: __dxlog_file, L: 86, S: this, A: ["SpaceId.isValid(spaceId)", ""] });
|
|
105
100
|
this.dataSubscriptions.set(subscriptionId, {
|
|
106
101
|
spaceId,
|
|
107
102
|
next
|
|
@@ -121,12 +116,7 @@ var DataServiceImpl = class {
|
|
|
121
116
|
if (addIds) {
|
|
122
117
|
log.info("request documents", {
|
|
123
118
|
count: addIds.length
|
|
124
|
-
}, {
|
|
125
|
-
F: __dxlog_file,
|
|
126
|
-
L: 59,
|
|
127
|
-
S: this,
|
|
128
|
-
C: (f, a) => f(...a)
|
|
129
|
-
});
|
|
119
|
+
}, { "~LogMeta": "~LogMeta", F: __dxlog_file, L: 104, S: this });
|
|
130
120
|
for (const documentId of addIds) {
|
|
131
121
|
const env = {
|
|
132
122
|
stack: [],
|
|
@@ -139,21 +129,11 @@ var DataServiceImpl = class {
|
|
|
139
129
|
documentId,
|
|
140
130
|
spaceId: sub.spaceId,
|
|
141
131
|
found: !!document
|
|
142
|
-
}, {
|
|
143
|
-
F: __dxlog_file,
|
|
144
|
-
L: 63,
|
|
145
|
-
S: this,
|
|
146
|
-
C: (f, a) => f(...a)
|
|
147
|
-
});
|
|
132
|
+
}, { "~LogMeta": "~LogMeta", F: __dxlog_file, L: 116, S: this });
|
|
148
133
|
if (!document) {
|
|
149
134
|
log.warn("not found", {
|
|
150
135
|
documentId
|
|
151
|
-
}, {
|
|
152
|
-
F: __dxlog_file,
|
|
153
|
-
L: 65,
|
|
154
|
-
S: this,
|
|
155
|
-
C: (f, a) => f(...a)
|
|
156
|
-
});
|
|
136
|
+
}, { "~LogMeta": "~LogMeta", F: __dxlog_file, L: 122, S: this });
|
|
157
137
|
continue;
|
|
158
138
|
}
|
|
159
139
|
sub.next({
|
|
@@ -182,10 +162,8 @@ var DataServiceImpl = class {
|
|
|
182
162
|
hasError: false
|
|
183
163
|
};
|
|
184
164
|
try {
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
initialValue
|
|
188
|
-
}), false);
|
|
165
|
+
invariant(SpaceId.isValid(spaceId), void 0, { "~LogMeta": "~LogMeta", F: __dxlog_file, L: 153, S: this, A: ["SpaceId.isValid(spaceId)", ""] });
|
|
166
|
+
const response = _ts_add_disposable_resource(env, await this._dataService.createDocument(this._executionContext, spaceId, initialValue), false);
|
|
189
167
|
return {
|
|
190
168
|
documentId: response.documentId
|
|
191
169
|
};
|
|
@@ -205,6 +183,9 @@ var DataServiceImpl = class {
|
|
|
205
183
|
}));
|
|
206
184
|
try {
|
|
207
185
|
for (const update of updates ?? []) {
|
|
186
|
+
if (!update.mutation) {
|
|
187
|
+
continue;
|
|
188
|
+
}
|
|
208
189
|
await this._dataService.changeDocument(this._executionContext, sub.spaceId, update.documentId, update.mutation);
|
|
209
190
|
}
|
|
210
191
|
} catch (error) {
|
|
@@ -235,12 +216,7 @@ var DataServiceImpl = class {
|
|
|
235
216
|
});
|
|
236
217
|
}
|
|
237
218
|
async updateIndexes() {
|
|
238
|
-
log.
|
|
239
|
-
F: __dxlog_file,
|
|
240
|
-
L: 133,
|
|
241
|
-
S: this,
|
|
242
|
-
C: (f, a) => f(...a)
|
|
243
|
-
});
|
|
219
|
+
log.verbose("updateIndexes called, but it is a no-op in EDGE env.", void 0, { "~LogMeta": "~LogMeta", F: __dxlog_file, L: 211, S: this });
|
|
244
220
|
}
|
|
245
221
|
async waitUntilHeadsReplicated({ heads: _heads }) {
|
|
246
222
|
throw new NotImplementedError({
|
|
@@ -253,6 +229,7 @@ var DataServiceImpl = class {
|
|
|
253
229
|
import { Stream as Stream2 } from "@dxos/codec-protobuf/stream";
|
|
254
230
|
import { NotImplementedError as NotImplementedError2, RuntimeServiceError as RuntimeServiceError2 } from "@dxos/errors";
|
|
255
231
|
import { log as log2 } from "@dxos/log";
|
|
232
|
+
var __dxlog_file2 = "/__w/dxos/dxos/packages/core/compute/functions-runtime-cloudflare/src/internal/query-service-impl.ts";
|
|
256
233
|
function _ts_add_disposable_resource2(env, value, async) {
|
|
257
234
|
if (value !== null && value !== void 0) {
|
|
258
235
|
if (typeof value !== "object" && typeof value !== "function") throw new TypeError("Object expected.");
|
|
@@ -318,7 +295,6 @@ function _ts_dispose_resources2(env) {
|
|
|
318
295
|
return next();
|
|
319
296
|
})(env);
|
|
320
297
|
}
|
|
321
|
-
var __dxlog_file2 = "/__w/dxos/dxos/packages/core/functions-runtime-cloudflare/src/internal/query-service-impl.ts";
|
|
322
298
|
var QueryServiceImpl = class {
|
|
323
299
|
_executionContext;
|
|
324
300
|
_dataService;
|
|
@@ -330,12 +306,7 @@ var QueryServiceImpl = class {
|
|
|
330
306
|
execQuery(request) {
|
|
331
307
|
log2.info("execQuery", {
|
|
332
308
|
request
|
|
333
|
-
}, {
|
|
334
|
-
F: __dxlog_file2,
|
|
335
|
-
L: 20,
|
|
336
|
-
S: this,
|
|
337
|
-
C: (f, a) => f(...a)
|
|
338
|
-
});
|
|
309
|
+
}, { "~LogMeta": "~LogMeta", F: __dxlog_file2, L: 81, S: this });
|
|
339
310
|
return Stream2.fromPromise((async () => {
|
|
340
311
|
try {
|
|
341
312
|
const env = {
|
|
@@ -347,21 +318,11 @@ var QueryServiceImpl = class {
|
|
|
347
318
|
this._queryCount++;
|
|
348
319
|
log2.info("begin query", {
|
|
349
320
|
request
|
|
350
|
-
}, {
|
|
351
|
-
F: __dxlog_file2,
|
|
352
|
-
L: 26,
|
|
353
|
-
S: this,
|
|
354
|
-
C: (f, a) => f(...a)
|
|
355
|
-
});
|
|
321
|
+
}, { "~LogMeta": "~LogMeta", F: __dxlog_file2, L: 93, S: this });
|
|
356
322
|
const queryResponse = _ts_add_disposable_resource2(env, await this._dataService.execQuery(this._executionContext, request), false);
|
|
357
323
|
log2.info("query response", {
|
|
358
324
|
resultCount: queryResponse.results?.length
|
|
359
|
-
}, {
|
|
360
|
-
F: __dxlog_file2,
|
|
361
|
-
L: 28,
|
|
362
|
-
S: this,
|
|
363
|
-
C: (f, a) => f(...a)
|
|
364
|
-
});
|
|
325
|
+
}, { "~LogMeta": "~LogMeta", F: __dxlog_file2, L: 97, S: this });
|
|
365
326
|
return structuredClone(queryResponse);
|
|
366
327
|
} catch (e) {
|
|
367
328
|
env.error = e;
|
|
@@ -372,12 +333,7 @@ var QueryServiceImpl = class {
|
|
|
372
333
|
} catch (error) {
|
|
373
334
|
log2.error("query failed", {
|
|
374
335
|
err: error
|
|
375
|
-
}, {
|
|
376
|
-
F: __dxlog_file2,
|
|
377
|
-
L: 31,
|
|
378
|
-
S: this,
|
|
379
|
-
C: (f, a) => f(...a)
|
|
380
|
-
});
|
|
336
|
+
}, { "~LogMeta": "~LogMeta", F: __dxlog_file2, L: 108, S: this });
|
|
381
337
|
throw new RuntimeServiceError2({
|
|
382
338
|
message: `Query execution failed (queryCount=${this._queryCount})`,
|
|
383
339
|
context: {
|
|
@@ -565,6 +521,11 @@ var QueueServiceImpl = class {
|
|
|
565
521
|
}
|
|
566
522
|
async syncQueue(_) {
|
|
567
523
|
}
|
|
524
|
+
async getSyncState(_) {
|
|
525
|
+
return {
|
|
526
|
+
namespaces: []
|
|
527
|
+
};
|
|
528
|
+
}
|
|
568
529
|
};
|
|
569
530
|
|
|
570
531
|
// src/internal/service-container.ts
|
|
@@ -675,15 +636,14 @@ var ServiceContainer = class {
|
|
|
675
636
|
};
|
|
676
637
|
}
|
|
677
638
|
async queryQueue(queue) {
|
|
678
|
-
const
|
|
679
|
-
|
|
680
|
-
|
|
639
|
+
const spaceId = EID.getSpaceId(queue);
|
|
640
|
+
const queueId = EID.getEntityId(queue);
|
|
641
|
+
if (!spaceId || !queueId) {
|
|
642
|
+
throw new Error("Invalid queue EID");
|
|
681
643
|
}
|
|
682
|
-
const { subspaceTag, spaceId, queueId } = parts;
|
|
683
644
|
const result = await this._queueService.queryQueue(this._executionContext, {
|
|
684
645
|
query: {
|
|
685
646
|
spaceId,
|
|
686
|
-
queuesNamespace: subspaceTag,
|
|
687
647
|
queueIds: [
|
|
688
648
|
queueId
|
|
689
649
|
]
|
|
@@ -696,16 +656,16 @@ var ServiceContainer = class {
|
|
|
696
656
|
};
|
|
697
657
|
}
|
|
698
658
|
async insertIntoQueue(queue, objects) {
|
|
699
|
-
const
|
|
700
|
-
|
|
701
|
-
|
|
659
|
+
const spaceId = EID.getSpaceId(queue);
|
|
660
|
+
const queueId = EID.getEntityId(queue);
|
|
661
|
+
if (!spaceId || !queueId) {
|
|
662
|
+
throw new Error("Invalid queue EID");
|
|
702
663
|
}
|
|
703
|
-
const { subspaceTag, spaceId, queueId } = parts;
|
|
704
664
|
await this._queueService.insertIntoQueue(this._executionContext, {
|
|
705
|
-
subspaceTag,
|
|
665
|
+
subspaceTag: "data",
|
|
706
666
|
spaceId,
|
|
707
667
|
queueId,
|
|
708
|
-
objects
|
|
668
|
+
objects: objects.map((obj) => JSON.stringify(obj))
|
|
709
669
|
});
|
|
710
670
|
}
|
|
711
671
|
};
|
|
@@ -732,7 +692,7 @@ var QueuesAPIImpl = class {
|
|
|
732
692
|
};
|
|
733
693
|
|
|
734
694
|
// src/space-proxy.ts
|
|
735
|
-
var __dxlog_file3 = "/__w/dxos/dxos/packages/core/functions-runtime-cloudflare/src/space-proxy.ts";
|
|
695
|
+
var __dxlog_file3 = "/__w/dxos/dxos/packages/core/compute/functions-runtime-cloudflare/src/space-proxy.ts";
|
|
736
696
|
var SpaceProxy = class extends Resource {
|
|
737
697
|
_serviceContainer;
|
|
738
698
|
_echoClient;
|
|
@@ -747,30 +707,14 @@ var SpaceProxy = class extends Resource {
|
|
|
747
707
|
return this._id;
|
|
748
708
|
}
|
|
749
709
|
get db() {
|
|
750
|
-
invariant2(this._db, void 0, {
|
|
751
|
-
F: __dxlog_file3,
|
|
752
|
-
L: 35,
|
|
753
|
-
S: this,
|
|
754
|
-
A: [
|
|
755
|
-
"this._db",
|
|
756
|
-
""
|
|
757
|
-
]
|
|
758
|
-
});
|
|
710
|
+
invariant2(this._db, void 0, { "~LogMeta": "~LogMeta", F: __dxlog_file3, L: 24, S: this, A: ["this._db", ""] });
|
|
759
711
|
return this._db;
|
|
760
712
|
}
|
|
761
713
|
/**
|
|
762
714
|
* @deprecated Use db API.
|
|
763
715
|
*/
|
|
764
716
|
get crud() {
|
|
765
|
-
invariant2(this._db, void 0, {
|
|
766
|
-
F: __dxlog_file3,
|
|
767
|
-
L: 43,
|
|
768
|
-
S: this,
|
|
769
|
-
A: [
|
|
770
|
-
"this._db",
|
|
771
|
-
""
|
|
772
|
-
]
|
|
773
|
-
});
|
|
717
|
+
invariant2(this._db, void 0, { "~LogMeta": "~LogMeta", F: __dxlog_file3, L: 30, S: this, A: ["this._db", ""] });
|
|
774
718
|
return this._db.coreDatabase;
|
|
775
719
|
}
|
|
776
720
|
get queues() {
|
|
@@ -787,14 +731,14 @@ var SpaceProxy = class extends Resource {
|
|
|
787
731
|
reactiveSchemaQuery: false,
|
|
788
732
|
owningObject: this
|
|
789
733
|
});
|
|
790
|
-
await this._db.coreDatabase.open({
|
|
734
|
+
await this._db.coreDatabase.open(this._ctx, {
|
|
791
735
|
rootUrl: meta.rootDocumentId
|
|
792
736
|
});
|
|
793
737
|
}
|
|
794
738
|
};
|
|
795
739
|
|
|
796
740
|
// src/functions-client.ts
|
|
797
|
-
var __dxlog_file4 = "/__w/dxos/dxos/packages/core/functions-runtime-cloudflare/src/functions-client.ts";
|
|
741
|
+
var __dxlog_file4 = "/__w/dxos/dxos/packages/core/compute/functions-runtime-cloudflare/src/functions-client.ts";
|
|
798
742
|
var FunctionsClient = class extends Resource2 {
|
|
799
743
|
_serviceContainer;
|
|
800
744
|
_echoClient;
|
|
@@ -802,24 +746,8 @@ var FunctionsClient = class extends Resource2 {
|
|
|
802
746
|
_spaces = /* @__PURE__ */ new Map();
|
|
803
747
|
constructor(services) {
|
|
804
748
|
super();
|
|
805
|
-
invariant3(typeof services.dataService !== "undefined", "DataService is required", {
|
|
806
|
-
|
|
807
|
-
L: 33,
|
|
808
|
-
S: this,
|
|
809
|
-
A: [
|
|
810
|
-
"typeof services.dataService !== 'undefined'",
|
|
811
|
-
"'DataService is required'"
|
|
812
|
-
]
|
|
813
|
-
});
|
|
814
|
-
invariant3(typeof services.queueService !== "undefined", "QueueService is required", {
|
|
815
|
-
F: __dxlog_file4,
|
|
816
|
-
L: 34,
|
|
817
|
-
S: this,
|
|
818
|
-
A: [
|
|
819
|
-
"typeof services.queueService !== 'undefined'",
|
|
820
|
-
"'QueueService is required'"
|
|
821
|
-
]
|
|
822
|
-
});
|
|
749
|
+
invariant3(typeof services.dataService !== "undefined", "DataService is required", { "~LogMeta": "~LogMeta", F: __dxlog_file4, L: 19, S: this, A: ["typeof services.dataService !== 'undefined'", "'DataService is required'"] });
|
|
750
|
+
invariant3(typeof services.queueService !== "undefined", "QueueService is required", { "~LogMeta": "~LogMeta", F: __dxlog_file4, L: 20, S: this, A: ["typeof services.queueService !== 'undefined'", "'QueueService is required'"] });
|
|
823
751
|
this._serviceContainer = new ServiceContainer(this._executionContext, services.dataService, services.queueService, services.functionsAiService);
|
|
824
752
|
this._echoClient = new EchoClient({});
|
|
825
753
|
}
|
|
@@ -873,7 +801,7 @@ import { invariant as invariant4 } from "@dxos/invariant";
|
|
|
873
801
|
import { SpaceId as SpaceId2 } from "@dxos/keys";
|
|
874
802
|
import { log as log3 } from "@dxos/log";
|
|
875
803
|
import { EdgeResponse } from "@dxos/protocols";
|
|
876
|
-
var __dxlog_file5 = "/__w/dxos/dxos/packages/core/functions-runtime-cloudflare/src/wrap-handler-for-cloudflare.ts";
|
|
804
|
+
var __dxlog_file5 = "/__w/dxos/dxos/packages/core/compute/functions-runtime-cloudflare/src/wrap-handler-for-cloudflare.ts";
|
|
877
805
|
var wrapHandlerForCloudflare = (func) => {
|
|
878
806
|
return async (request, env) => {
|
|
879
807
|
if (request.headers.get(FUNCTION_ROUTE_HEADER) === FunctionRouteValue.Meta) {
|
|
@@ -898,12 +826,7 @@ var wrapHandlerForCloudflare = (func) => {
|
|
|
898
826
|
log3.error("error invoking function", {
|
|
899
827
|
error,
|
|
900
828
|
stack: error.stack
|
|
901
|
-
}, {
|
|
902
|
-
F: __dxlog_file5,
|
|
903
|
-
L: 44,
|
|
904
|
-
S: void 0,
|
|
905
|
-
C: (f, a) => f(...a)
|
|
906
|
-
});
|
|
829
|
+
}, { "~LogMeta": "~LogMeta", F: __dxlog_file5, L: 37, S: void 0 });
|
|
907
830
|
return EdgeResponse.failure({
|
|
908
831
|
message: error?.message ?? "Internal error",
|
|
909
832
|
error
|
|
@@ -936,12 +859,7 @@ var decodeRequest = async (request) => {
|
|
|
936
859
|
}
|
|
937
860
|
};
|
|
938
861
|
} catch (err) {
|
|
939
|
-
log3.catch(err, void 0, {
|
|
940
|
-
F: __dxlog_file5,
|
|
941
|
-
L: 79,
|
|
942
|
-
S: void 0,
|
|
943
|
-
C: (f, a) => f(...a)
|
|
944
|
-
});
|
|
862
|
+
log3.catch(err, void 0, { "~LogMeta": "~LogMeta", F: __dxlog_file5, L: 76, S: void 0 });
|
|
945
863
|
return {
|
|
946
864
|
data: {
|
|
947
865
|
bodyText,
|
|
@@ -974,15 +892,7 @@ var createFunctionContext = async ({ serviceContainer, contextSpaceId }) => {
|
|
|
974
892
|
throw new Error(`Space not found: ${contextSpaceId}`);
|
|
975
893
|
}
|
|
976
894
|
spaceKey = meta.spaceKey;
|
|
977
|
-
invariant4(!meta.rootDocumentId.startsWith("automerge:"), void 0, {
|
|
978
|
-
F: __dxlog_file5,
|
|
979
|
-
L: 117,
|
|
980
|
-
S: void 0,
|
|
981
|
-
A: [
|
|
982
|
-
"!meta.rootDocumentId.startsWith('automerge:')",
|
|
983
|
-
""
|
|
984
|
-
]
|
|
985
|
-
});
|
|
895
|
+
invariant4(!meta.rootDocumentId.startsWith("automerge:"), void 0, { "~LogMeta": "~LogMeta", F: __dxlog_file5, L: 109, S: void 0, A: ["!meta.rootDocumentId.startsWith('automerge:')", ""] });
|
|
986
896
|
rootUrl = `automerge:${meta.rootDocumentId}`;
|
|
987
897
|
}
|
|
988
898
|
return {
|
|
@@ -1008,27 +918,31 @@ var functionLogProcessor = (config, entry) => {
|
|
|
1008
918
|
if (!shouldLog(entry, config.filters)) {
|
|
1009
919
|
return;
|
|
1010
920
|
}
|
|
921
|
+
const context = entry.computedContext;
|
|
922
|
+
const error = entry.computedError;
|
|
923
|
+
const extras = [
|
|
924
|
+
Object.keys(context).length > 0 ? context : void 0,
|
|
925
|
+
error
|
|
926
|
+
].filter((value) => value !== void 0);
|
|
1011
927
|
switch (entry.level) {
|
|
1012
928
|
case LogLevel.DEBUG:
|
|
1013
|
-
console.debug(entry.message, entry.context);
|
|
1014
|
-
break;
|
|
1015
929
|
case LogLevel.TRACE:
|
|
1016
|
-
console.debug(entry.message,
|
|
930
|
+
console.debug(entry.message, ...extras);
|
|
1017
931
|
break;
|
|
1018
932
|
case LogLevel.VERBOSE:
|
|
1019
|
-
console.log(entry.message,
|
|
933
|
+
console.log(entry.message, ...extras);
|
|
1020
934
|
break;
|
|
1021
935
|
case LogLevel.INFO:
|
|
1022
|
-
console.info(entry.message,
|
|
936
|
+
console.info(entry.message, ...extras);
|
|
1023
937
|
break;
|
|
1024
938
|
case LogLevel.WARN:
|
|
1025
|
-
console.warn(entry.message,
|
|
939
|
+
console.warn(entry.message, ...extras);
|
|
1026
940
|
break;
|
|
1027
941
|
case LogLevel.ERROR:
|
|
1028
|
-
console.error(entry.message,
|
|
942
|
+
console.error(entry.message, ...extras);
|
|
1029
943
|
break;
|
|
1030
944
|
default:
|
|
1031
|
-
console.log(entry.message,
|
|
945
|
+
console.log(entry.message, ...extras);
|
|
1032
946
|
break;
|
|
1033
947
|
}
|
|
1034
948
|
};
|
|
@@ -1038,6 +952,7 @@ export {
|
|
|
1038
952
|
FunctionsClient,
|
|
1039
953
|
ServiceContainer,
|
|
1040
954
|
createClientFromEnv,
|
|
955
|
+
createFunctionContext,
|
|
1041
956
|
setupFunctionsLogger,
|
|
1042
957
|
wrapHandlerForCloudflare
|
|
1043
958
|
};
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
|
-
"sources": ["../../../src/functions-client.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.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", "
|
|
3
|
+
"sources": ["../../../src/functions-client.ts", "../../../src/internal/service-container.ts", "../../../src/internal/data-service-impl.ts", "../../../src/internal/utils.ts", "../../../src/internal/query-service-impl.ts", "../../../src/internal/queue-service-impl.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// Copyright 2024 DXOS.org\n//\n\nimport { type AnyEntity } from '@dxos/echo/internal';\nimport { EID, 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: EID.EID): Promise<FeedProtocol.QueryResult> {\n const spaceId = EID.getSpaceId(queue);\n const queueId = EID.getEntityId(queue);\n if (!spaceId || !queueId) {\n throw new Error('Invalid queue EID');\n }\n const result = await this._queueService.queryQueue(this._executionContext, {\n query: {\n spaceId,\n queueIds: [queueId],\n },\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: EID.EID, objects: AnyEntity[]): Promise<void> {\n const spaceId = EID.getSpaceId(queue);\n const queueId = EID.getEntityId(queue);\n if (!spaceId || !queueId) {\n throw new Error('Invalid queue EID');\n }\n // TODO(dmaretskyi): EID does not encode the subspaceTag — defaulting to 'data'.\n await this._queueService.insertIntoQueue(this._executionContext, {\n subspaceTag: 'data',\n spaceId,\n queueId,\n objects: objects.map((obj) => JSON.stringify(obj)),\n });\n }\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 invariant(SpaceId.isValid(spaceId));\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 // Mutation-less updates (e.g. `requesting: true` transition signals from the worker) carry no\n // bytes to apply; this runtime only forwards real document writes.\n if (!update.mutation) {\n continue;\n }\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.verbose('updateIndexes called, but it is a no-op 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 async getSyncState(_: FeedProtocol.GetSyncStateRequest): Promise<FeedProtocol.GetSyncStateResponse> {\n return { namespaces: [] };\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(this._ctx, { rootUrl: meta.rootDocumentId });\n }\n}\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { type AnyEntity } from '@dxos/echo/internal';\nimport { type EID, type SpaceId } from '@dxos/keys';\nimport { type FeedProtocol } from '@dxos/protocols';\n\nimport type { ServiceContainer } from './internal';\n\nexport interface QueuesQueryResult {\n objects: AnyEntity[];\n nextCursor: string | null;\n prevCursor: string | null;\n}\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: EID.EID, options?: {}): Promise<FeedProtocol.QueryResult>;\n insertIntoQueue(queue: EID.EID, 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: EID.EID, options?: {}): Promise<FeedProtocol.QueryResult> {\n return this._serviceContainer.queryQueue(queue);\n }\n\n insertIntoQueue(queue: EID.EID, 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\nexport const 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 const context = entry.computedContext;\n const error = entry.computedError;\n const extras = [Object.keys(context).length > 0 ? context : undefined, error].filter((value) => value !== undefined);\n\n switch (entry.level) {\n case LogLevel.DEBUG:\n case LogLevel.TRACE:\n console.debug(entry.message, ...extras);\n break;\n case LogLevel.VERBOSE:\n console.log(entry.message, ...extras);\n break;\n case LogLevel.INFO:\n console.info(entry.message, ...extras);\n break;\n case LogLevel.WARN:\n console.warn(entry.message, ...extras);\n break;\n case LogLevel.ERROR:\n console.error(entry.message, ...extras);\n break;\n default:\n console.log(entry.message, ...extras);\n break;\n }\n};\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["Resource", "EchoClient", "invariant", "EID", "raise", "NotImplementedError", "invariant", "SpaceId", "log", "copyUint8Array", "copyUint8Array", "value", "Uint8Array", "dataSubscriptions", "_executionContext", "_dataService", "subscribe", "next", "invariant", "SpaceId", "isValid", "spaceId", "subscriptionId", "message", "context", "log", "count", "info", "documentId", "found", "document", "sub", "updates", "response", "createDocument", "initialValue", "get", "RuntimeServiceError", "ifTypeDiffers", "error", "subscribeSpaceSyncState", "NotImplementedError", "NotImplementedError", "log", "RuntimeServiceError", "QueryServiceImpl", "_queryCount", "_executionContext", "_dataService", "execQuery", "info", "request", "fromPromise", "__dxlog_file", "Stream", "queryResponse", "_ts_add_disposable_resource", "resultCount", "structuredClone", "error", "err", "message", "context", "queryCount", "cause", "RuntimeServiceError", "QueueServiceImpl", "_ctx", "_queueService", "queryQueue", "request", "result", "objects", "structuredClone", "nextCursor", "prevCursor", "error", "query", "wrap", "message", "context", "subspaceTag", "queuesNamespace", "spaceId", "queueId", "queueIds", "ifTypeDiffers", "insertIntoQueue", "_", "deleteFromQueue", "syncQueue", "getSyncState", "namespaces", "ServiceContainer", "_executionContext", "_dataService", "_queueService", "_functionsService", "getSpaceMeta", "spaceId", "result", "spaceKey", "rootDocumentId", "undefined", "createServices", "dataService", "DataServiceImpl", "queryService", "QueryServiceImpl", "queueService", "QueueServiceImpl", "functionsAiService", "queryQueue", "queue", "EID", "getSpaceId", "queueId", "getEntityId", "Error", "query", "queueIds", "objects", "structuredClone", "nextCursor", "prevCursor", "insertIntoQueue", "subspaceTag", "map", "obj", "JSON", "stringify", "Resource", "invariant", "PublicKey", "QueuesAPIImpl", "_serviceContainer", "_spaceId", "queryQueue", "queue", "options", "insertIntoQueue", "objects", "JSON", "parse", "stringify", "__dxlog_file", "_db", "_queuesApi", "QueuesAPIImpl", "_serviceContainer", "id", "db", "invariant", "queues", "_open", "meta", "Error", "_echoClient", "constructDatabase", "spaceKey", "PublicKey", "reactiveSchemaQuery", "owningObject", "coreDatabase", "__dxlog_file", "_echoClient", "Resource", "_executionContext", "_spaces", "invariant", "services", "_serviceContainer", "ServiceContainer", "dataService", "queueService", "functionsAiService", "EchoClient", "echo", "_open", "queryService", "_close", "space", "clear", "getSpace", "spaceId", "set", "DATA_SERVICE", "env", "FUNCTION_ROUTE_HEADER", "FunctionRouteValue", "invariant", "SpaceId", "log", "EdgeResponse", "__dxlog_file", "SpaceId", "isValid", "spaceId", "status", "serviceContainer", "contextSpaceId", "success", "log", "error", "stack", "EdgeResponse", "message", "decodeRequest", "request", "context", "data", "rest", "trigger", "functionDefinition", "meta", "name", "description", "inputSchema", "outputSchema", "Response", "response", "spaceKey", "rootUrl", "Error", "invariant", "queryService", "queueService", "functionsAiService", "spaceRootUrl", "LogLevel", "log", "shouldLog", "log", "runtimeConfig", "push", "functionLogProcessor", "config", "entry", "extras", "Object", "keys", "context", "error", "filter", "value", "undefined", "LogLevel", "DEBUG", "TRACE", "console", "debug", "VERBOSE", "INFO", "WARN", "ERROR"]
|
|
7
7
|
}
|