@dxos/functions-runtime-cloudflare 0.8.4-main.e00bdcdb52 → 0.8.4-main.effb148878
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 +40 -50
- package/dist/lib/browser/index.mjs.map +4 -4
- package/dist/lib/browser/meta.json +1 -1
- package/dist/lib/node-esm/index.mjs +40 -50
- 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/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/queues-api.d.ts +6 -5
- package/dist/types/src/queues-api.d.ts.map +1 -1
- package/dist/types/tsconfig.tsbuildinfo +1 -1
- package/package.json +15 -15
- package/src/functions-client.ts +0 -6
- package/src/internal/data-service-impl.ts +6 -1
- package/src/internal/queue-service-impl.ts +4 -0
- package/src/internal/service-container.ts +15 -14
- package/src/queues-api.ts +7 -20
package/LICENSE
CHANGED
|
@@ -1,8 +1,105 @@
|
|
|
1
|
-
|
|
2
|
-
Copyright (c) 2022 DXOS
|
|
1
|
+
# Functional Source License, Version 1.1, ALv2 Future License
|
|
3
2
|
|
|
4
|
-
|
|
3
|
+
## Abbreviation
|
|
5
4
|
|
|
6
|
-
|
|
5
|
+
FSL-1.1-Apache-2.0
|
|
7
6
|
|
|
8
|
-
|
|
7
|
+
## Notice
|
|
8
|
+
|
|
9
|
+
Copyright 2026 DXOS
|
|
10
|
+
|
|
11
|
+
## Terms and Conditions
|
|
12
|
+
|
|
13
|
+
### Licensor ("We")
|
|
14
|
+
|
|
15
|
+
The party offering the Software under these Terms and Conditions.
|
|
16
|
+
|
|
17
|
+
### The Software
|
|
18
|
+
|
|
19
|
+
The "Software" is each version of the software that we make available under
|
|
20
|
+
these Terms and Conditions, as indicated by our inclusion of these Terms and
|
|
21
|
+
Conditions with the Software.
|
|
22
|
+
|
|
23
|
+
### License Grant
|
|
24
|
+
|
|
25
|
+
Subject to your compliance with this License Grant and the Patents,
|
|
26
|
+
Redistribution and Trademark clauses below, we hereby grant you the right to
|
|
27
|
+
use, copy, modify, create derivative works, publicly perform, publicly display
|
|
28
|
+
and redistribute the Software for any Permitted Purpose identified below.
|
|
29
|
+
|
|
30
|
+
### Permitted Purpose
|
|
31
|
+
|
|
32
|
+
A Permitted Purpose is any purpose other than a Competing Use. A Competing Use
|
|
33
|
+
means making the Software available to others in a commercial product or
|
|
34
|
+
service that:
|
|
35
|
+
|
|
36
|
+
1. substitutes for the Software;
|
|
37
|
+
|
|
38
|
+
2. substitutes for any other product or service we offer using the Software
|
|
39
|
+
that exists as of the date we make the Software available; or
|
|
40
|
+
|
|
41
|
+
3. offers the same or substantially similar functionality as the Software.
|
|
42
|
+
|
|
43
|
+
Permitted Purposes specifically include using the Software:
|
|
44
|
+
|
|
45
|
+
1. for your internal use and access;
|
|
46
|
+
|
|
47
|
+
2. for non-commercial education;
|
|
48
|
+
|
|
49
|
+
3. for non-commercial research; and
|
|
50
|
+
|
|
51
|
+
4. in connection with professional services that you provide to a licensee
|
|
52
|
+
using the Software in accordance with these Terms and Conditions.
|
|
53
|
+
|
|
54
|
+
### Patents
|
|
55
|
+
|
|
56
|
+
To the extent your use for a Permitted Purpose would necessarily infringe our
|
|
57
|
+
patents, the license grant above includes a license under our patents. If you
|
|
58
|
+
make a claim against any party that the Software infringes or contributes to
|
|
59
|
+
the infringement of any patent, then your patent license to the Software ends
|
|
60
|
+
immediately.
|
|
61
|
+
|
|
62
|
+
### Redistribution
|
|
63
|
+
|
|
64
|
+
The Terms and Conditions apply to all copies, modifications and derivatives of
|
|
65
|
+
the Software.
|
|
66
|
+
|
|
67
|
+
If you redistribute any copies, modifications or derivatives of the Software,
|
|
68
|
+
you must include a copy of or a link to these Terms and Conditions and not
|
|
69
|
+
remove any copyright notices provided in or with the Software.
|
|
70
|
+
|
|
71
|
+
### Disclaimer
|
|
72
|
+
|
|
73
|
+
THE SOFTWARE IS PROVIDED "AS IS" AND WITHOUT WARRANTIES OF ANY KIND, EXPRESS OR
|
|
74
|
+
IMPLIED, INCLUDING WITHOUT LIMITATION WARRANTIES OF FITNESS FOR A PARTICULAR
|
|
75
|
+
PURPOSE, MERCHANTABILITY, TITLE OR NON-INFRINGEMENT.
|
|
76
|
+
|
|
77
|
+
IN NO EVENT WILL WE HAVE ANY LIABILITY TO YOU ARISING OUT OF OR RELATED TO THE
|
|
78
|
+
SOFTWARE, INCLUDING INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES,
|
|
79
|
+
EVEN IF WE HAVE BEEN INFORMED OF THEIR POSSIBILITY IN ADVANCE.
|
|
80
|
+
|
|
81
|
+
### Trademarks
|
|
82
|
+
|
|
83
|
+
Except for displaying the License Details and identifying us as the origin of
|
|
84
|
+
the Software, you have no right under these Terms and Conditions to use our
|
|
85
|
+
trademarks, trade names, service marks or product names.
|
|
86
|
+
|
|
87
|
+
## Grant of Future License
|
|
88
|
+
|
|
89
|
+
We hereby irrevocably grant you an additional license to use the Software under
|
|
90
|
+
the Apache License, Version 2.0 that is effective on the second anniversary of
|
|
91
|
+
the date we make the Software available. On or after that date, you may use the
|
|
92
|
+
Software under the Apache License, Version 2.0, in which case the following
|
|
93
|
+
will apply:
|
|
94
|
+
|
|
95
|
+
Licensed under the Apache License, Version 2.0 (the "License"); you may not use
|
|
96
|
+
this file except in compliance with the License.
|
|
97
|
+
|
|
98
|
+
You may obtain a copy of the License at
|
|
99
|
+
|
|
100
|
+
http://www.apache.org/licenses/LICENSE-2.0
|
|
101
|
+
|
|
102
|
+
Unless required by applicable law or agreed to in writing, software distributed
|
|
103
|
+
under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR
|
|
104
|
+
CONDITIONS OF ANY KIND, either express or implied. See the License for the
|
|
105
|
+
specific language governing permissions and limitations under the License.
|
package/README.md
CHANGED
|
@@ -44,4 +44,4 @@ pnpm i @dxos/functions-runtime-cloudflare
|
|
|
44
44
|
|
|
45
45
|
Your ideas, issues, and code are most welcome. Please take a look at our [community code of conduct](https://github.com/dxos/dxos/blob/main/CODE_OF_CONDUCT.md), the [issue guide](https://github.com/dxos/dxos/blob/main/CONTRIBUTING.md#submitting-issues), and the [PR contribution guide](https://github.com/dxos/dxos/blob/main/CONTRIBUTING.md#submitting-prs).
|
|
46
46
|
|
|
47
|
-
License: [
|
|
47
|
+
License: [FSL-1.1-Apache-2.0](./LICENSE) Copyright 2022 © DXOS
|
|
@@ -3,6 +3,9 @@ import { Resource as Resource2 } from "@dxos/context";
|
|
|
3
3
|
import { EchoClient } from "@dxos/echo-db";
|
|
4
4
|
import { invariant as invariant3 } from "@dxos/invariant";
|
|
5
5
|
|
|
6
|
+
// src/internal/service-container.ts
|
|
7
|
+
import { EchoURI } from "@dxos/keys";
|
|
8
|
+
|
|
6
9
|
// src/internal/data-service-impl.ts
|
|
7
10
|
import { Stream } from "@dxos/codec-protobuf/stream";
|
|
8
11
|
import { raise } from "@dxos/debug";
|
|
@@ -15,7 +18,7 @@ import { log } from "@dxos/log";
|
|
|
15
18
|
var copyUint8Array = (value) => new Uint8Array(value);
|
|
16
19
|
|
|
17
20
|
// src/internal/data-service-impl.ts
|
|
18
|
-
var __dxlog_file = "/__w/dxos/dxos/packages/core/functions-runtime-cloudflare/src/internal/data-service-impl.ts";
|
|
21
|
+
var __dxlog_file = "/__w/dxos/dxos/packages/core/compute/functions-runtime-cloudflare/src/internal/data-service-impl.ts";
|
|
19
22
|
function _ts_add_disposable_resource(env, value, async) {
|
|
20
23
|
if (value !== null && value !== void 0) {
|
|
21
24
|
if (typeof value !== "object" && typeof value !== "function") throw new TypeError("Object expected.");
|
|
@@ -178,6 +181,9 @@ var DataServiceImpl = class {
|
|
|
178
181
|
}));
|
|
179
182
|
try {
|
|
180
183
|
for (const update of updates ?? []) {
|
|
184
|
+
if (!update.mutation) {
|
|
185
|
+
continue;
|
|
186
|
+
}
|
|
181
187
|
await this._dataService.changeDocument(this._executionContext, sub.spaceId, update.documentId, update.mutation);
|
|
182
188
|
}
|
|
183
189
|
} catch (error) {
|
|
@@ -208,7 +214,7 @@ var DataServiceImpl = class {
|
|
|
208
214
|
});
|
|
209
215
|
}
|
|
210
216
|
async updateIndexes() {
|
|
211
|
-
log.
|
|
217
|
+
log.verbose("updateIndexes called, but it is a no-op in EDGE env.", void 0, { "~LogMeta": "~LogMeta", F: __dxlog_file, L: 211, S: this });
|
|
212
218
|
}
|
|
213
219
|
async waitUntilHeadsReplicated({ heads: _heads }) {
|
|
214
220
|
throw new NotImplementedError({
|
|
@@ -221,7 +227,7 @@ var DataServiceImpl = class {
|
|
|
221
227
|
import { Stream as Stream2 } from "@dxos/codec-protobuf/stream";
|
|
222
228
|
import { NotImplementedError as NotImplementedError2, RuntimeServiceError as RuntimeServiceError2 } from "@dxos/errors";
|
|
223
229
|
import { log as log2 } from "@dxos/log";
|
|
224
|
-
var __dxlog_file2 = "/__w/dxos/dxos/packages/core/functions-runtime-cloudflare/src/internal/query-service-impl.ts";
|
|
230
|
+
var __dxlog_file2 = "/__w/dxos/dxos/packages/core/compute/functions-runtime-cloudflare/src/internal/query-service-impl.ts";
|
|
225
231
|
function _ts_add_disposable_resource2(env, value, async) {
|
|
226
232
|
if (value !== null && value !== void 0) {
|
|
227
233
|
if (typeof value !== "object" && typeof value !== "function") throw new TypeError("Object expected.");
|
|
@@ -513,6 +519,11 @@ var QueueServiceImpl = class {
|
|
|
513
519
|
}
|
|
514
520
|
async syncQueue(_) {
|
|
515
521
|
}
|
|
522
|
+
async getSyncState(_) {
|
|
523
|
+
return {
|
|
524
|
+
namespaces: []
|
|
525
|
+
};
|
|
526
|
+
}
|
|
516
527
|
};
|
|
517
528
|
|
|
518
529
|
// src/internal/service-container.ts
|
|
@@ -623,15 +634,14 @@ var ServiceContainer = class {
|
|
|
623
634
|
};
|
|
624
635
|
}
|
|
625
636
|
async queryQueue(queue) {
|
|
626
|
-
const
|
|
627
|
-
|
|
628
|
-
|
|
637
|
+
const spaceId = EchoURI.getSpaceId(queue);
|
|
638
|
+
const queueId = EchoURI.getObjectId(queue);
|
|
639
|
+
if (!spaceId || !queueId) {
|
|
640
|
+
throw new Error("Invalid queue EchoURI");
|
|
629
641
|
}
|
|
630
|
-
const { subspaceTag, spaceId, queueId } = parts;
|
|
631
642
|
const result = await this._queueService.queryQueue(this._executionContext, {
|
|
632
643
|
query: {
|
|
633
644
|
spaceId,
|
|
634
|
-
queuesNamespace: subspaceTag,
|
|
635
645
|
queueIds: [
|
|
636
646
|
queueId
|
|
637
647
|
]
|
|
@@ -644,13 +654,13 @@ var ServiceContainer = class {
|
|
|
644
654
|
};
|
|
645
655
|
}
|
|
646
656
|
async insertIntoQueue(queue, objects) {
|
|
647
|
-
const
|
|
648
|
-
|
|
649
|
-
|
|
657
|
+
const spaceId = EchoURI.getSpaceId(queue);
|
|
658
|
+
const queueId = EchoURI.getObjectId(queue);
|
|
659
|
+
if (!spaceId || !queueId) {
|
|
660
|
+
throw new Error("Invalid queue EchoURI");
|
|
650
661
|
}
|
|
651
|
-
const { subspaceTag, spaceId, queueId } = parts;
|
|
652
662
|
await this._queueService.insertIntoQueue(this._executionContext, {
|
|
653
|
-
subspaceTag,
|
|
663
|
+
subspaceTag: "data",
|
|
654
664
|
spaceId,
|
|
655
665
|
queueId,
|
|
656
666
|
objects: objects.map((obj) => JSON.stringify(obj))
|
|
@@ -664,8 +674,6 @@ import { invariant as invariant2 } from "@dxos/invariant";
|
|
|
664
674
|
import { PublicKey } from "@dxos/keys";
|
|
665
675
|
|
|
666
676
|
// src/queues-api.ts
|
|
667
|
-
import { log as log3 } from "@dxos/log";
|
|
668
|
-
var __dxlog_file3 = "/__w/dxos/dxos/packages/core/functions-runtime-cloudflare/src/queues-api.ts";
|
|
669
677
|
var QueuesAPIImpl = class {
|
|
670
678
|
_serviceContainer;
|
|
671
679
|
_spaceId;
|
|
@@ -673,26 +681,8 @@ var QueuesAPIImpl = class {
|
|
|
673
681
|
this._serviceContainer = _serviceContainer;
|
|
674
682
|
this._spaceId = _spaceId;
|
|
675
683
|
}
|
|
676
|
-
|
|
677
|
-
|
|
678
|
-
const objects = (result.objects ?? []).flatMap((encoded) => {
|
|
679
|
-
try {
|
|
680
|
-
return [
|
|
681
|
-
JSON.parse(encoded)
|
|
682
|
-
];
|
|
683
|
-
} catch (err) {
|
|
684
|
-
log3.verbose("queue object JSON parse failed; object ignored", {
|
|
685
|
-
encoded,
|
|
686
|
-
error: err
|
|
687
|
-
}, { "~LogMeta": "~LogMeta", F: __dxlog_file3, L: 22, S: this });
|
|
688
|
-
return [];
|
|
689
|
-
}
|
|
690
|
-
});
|
|
691
|
-
return {
|
|
692
|
-
objects,
|
|
693
|
-
nextCursor: result.nextCursor ?? null,
|
|
694
|
-
prevCursor: result.prevCursor ?? null
|
|
695
|
-
};
|
|
684
|
+
queryQueue(queue, options) {
|
|
685
|
+
return this._serviceContainer.queryQueue(queue);
|
|
696
686
|
}
|
|
697
687
|
insertIntoQueue(queue, objects) {
|
|
698
688
|
return this._serviceContainer.insertIntoQueue(queue, JSON.parse(JSON.stringify(objects)));
|
|
@@ -700,7 +690,7 @@ var QueuesAPIImpl = class {
|
|
|
700
690
|
};
|
|
701
691
|
|
|
702
692
|
// src/space-proxy.ts
|
|
703
|
-
var
|
|
693
|
+
var __dxlog_file3 = "/__w/dxos/dxos/packages/core/compute/functions-runtime-cloudflare/src/space-proxy.ts";
|
|
704
694
|
var SpaceProxy = class extends Resource {
|
|
705
695
|
_serviceContainer;
|
|
706
696
|
_echoClient;
|
|
@@ -715,14 +705,14 @@ var SpaceProxy = class extends Resource {
|
|
|
715
705
|
return this._id;
|
|
716
706
|
}
|
|
717
707
|
get db() {
|
|
718
|
-
invariant2(this._db, void 0, { "~LogMeta": "~LogMeta", F:
|
|
708
|
+
invariant2(this._db, void 0, { "~LogMeta": "~LogMeta", F: __dxlog_file3, L: 24, S: this, A: ["this._db", ""] });
|
|
719
709
|
return this._db;
|
|
720
710
|
}
|
|
721
711
|
/**
|
|
722
712
|
* @deprecated Use db API.
|
|
723
713
|
*/
|
|
724
714
|
get crud() {
|
|
725
|
-
invariant2(this._db, void 0, { "~LogMeta": "~LogMeta", F:
|
|
715
|
+
invariant2(this._db, void 0, { "~LogMeta": "~LogMeta", F: __dxlog_file3, L: 30, S: this, A: ["this._db", ""] });
|
|
726
716
|
return this._db.coreDatabase;
|
|
727
717
|
}
|
|
728
718
|
get queues() {
|
|
@@ -746,7 +736,7 @@ var SpaceProxy = class extends Resource {
|
|
|
746
736
|
};
|
|
747
737
|
|
|
748
738
|
// src/functions-client.ts
|
|
749
|
-
var
|
|
739
|
+
var __dxlog_file4 = "/__w/dxos/dxos/packages/core/compute/functions-runtime-cloudflare/src/functions-client.ts";
|
|
750
740
|
var FunctionsClient = class extends Resource2 {
|
|
751
741
|
_serviceContainer;
|
|
752
742
|
_echoClient;
|
|
@@ -754,8 +744,8 @@ var FunctionsClient = class extends Resource2 {
|
|
|
754
744
|
_spaces = /* @__PURE__ */ new Map();
|
|
755
745
|
constructor(services) {
|
|
756
746
|
super();
|
|
757
|
-
invariant3(typeof services.dataService !== "undefined", "DataService is required", { "~LogMeta": "~LogMeta", F:
|
|
758
|
-
invariant3(typeof services.queueService !== "undefined", "QueueService is required", { "~LogMeta": "~LogMeta", F:
|
|
747
|
+
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'"] });
|
|
748
|
+
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'"] });
|
|
759
749
|
this._serviceContainer = new ServiceContainer(this._executionContext, services.dataService, services.queueService, services.functionsAiService);
|
|
760
750
|
this._echoClient = new EchoClient({});
|
|
761
751
|
}
|
|
@@ -807,9 +797,9 @@ var FunctionRouteValue = /* @__PURE__ */ (function(FunctionRouteValue2) {
|
|
|
807
797
|
// src/wrap-handler-for-cloudflare.ts
|
|
808
798
|
import { invariant as invariant4 } from "@dxos/invariant";
|
|
809
799
|
import { SpaceId as SpaceId2 } from "@dxos/keys";
|
|
810
|
-
import { log as
|
|
800
|
+
import { log as log3 } from "@dxos/log";
|
|
811
801
|
import { EdgeResponse } from "@dxos/protocols";
|
|
812
|
-
var
|
|
802
|
+
var __dxlog_file5 = "/__w/dxos/dxos/packages/core/compute/functions-runtime-cloudflare/src/wrap-handler-for-cloudflare.ts";
|
|
813
803
|
var wrapHandlerForCloudflare = (func) => {
|
|
814
804
|
return async (request, env) => {
|
|
815
805
|
if (request.headers.get(FUNCTION_ROUTE_HEADER) === FunctionRouteValue.Meta) {
|
|
@@ -831,10 +821,10 @@ var wrapHandlerForCloudflare = (func) => {
|
|
|
831
821
|
});
|
|
832
822
|
return EdgeResponse.success(await invokeFunction(func, context, request));
|
|
833
823
|
} catch (error) {
|
|
834
|
-
|
|
824
|
+
log3.error("error invoking function", {
|
|
835
825
|
error,
|
|
836
826
|
stack: error.stack
|
|
837
|
-
}, { "~LogMeta": "~LogMeta", F:
|
|
827
|
+
}, { "~LogMeta": "~LogMeta", F: __dxlog_file5, L: 37, S: void 0 });
|
|
838
828
|
return EdgeResponse.failure({
|
|
839
829
|
message: error?.message ?? "Internal error",
|
|
840
830
|
error
|
|
@@ -867,7 +857,7 @@ var decodeRequest = async (request) => {
|
|
|
867
857
|
}
|
|
868
858
|
};
|
|
869
859
|
} catch (err) {
|
|
870
|
-
|
|
860
|
+
log3.catch(err, void 0, { "~LogMeta": "~LogMeta", F: __dxlog_file5, L: 76, S: void 0 });
|
|
871
861
|
return {
|
|
872
862
|
data: {
|
|
873
863
|
bodyText,
|
|
@@ -900,7 +890,7 @@ var createFunctionContext = async ({ serviceContainer, contextSpaceId }) => {
|
|
|
900
890
|
throw new Error(`Space not found: ${contextSpaceId}`);
|
|
901
891
|
}
|
|
902
892
|
spaceKey = meta.spaceKey;
|
|
903
|
-
invariant4(!meta.rootDocumentId.startsWith("automerge:"), void 0, { "~LogMeta": "~LogMeta", F:
|
|
893
|
+
invariant4(!meta.rootDocumentId.startsWith("automerge:"), void 0, { "~LogMeta": "~LogMeta", F: __dxlog_file5, L: 109, S: void 0, A: ["!meta.rootDocumentId.startsWith('automerge:')", ""] });
|
|
904
894
|
rootUrl = `automerge:${meta.rootDocumentId}`;
|
|
905
895
|
}
|
|
906
896
|
return {
|
|
@@ -917,10 +907,10 @@ var createFunctionContext = async ({ serviceContainer, contextSpaceId }) => {
|
|
|
917
907
|
};
|
|
918
908
|
|
|
919
909
|
// src/logger.ts
|
|
920
|
-
import { LogLevel, log as
|
|
910
|
+
import { LogLevel, log as log4, shouldLog } from "@dxos/log";
|
|
921
911
|
var setupFunctionsLogger = () => {
|
|
922
|
-
|
|
923
|
-
|
|
912
|
+
log4.runtimeConfig.processors.length = 0;
|
|
913
|
+
log4.runtimeConfig.processors.push(functionLogProcessor);
|
|
924
914
|
};
|
|
925
915
|
var functionLogProcessor = (config, entry) => {
|
|
926
916
|
if (!shouldLog(entry, config.filters)) {
|
|
@@ -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 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 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.map((obj) => JSON.stringify(obj)),\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(this._ctx, { 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 { log } from '@dxos/log';\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: DXN, options?: {}): Promise<QueuesQueryResult>;\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 async queryQueue(queue: DXN, options?: {}): Promise<QueuesQueryResult> {\n const result = await this._serviceContainer.queryQueue(queue);\n const objects = (result.objects ?? []).flatMap((encoded): AnyEntity[] => {\n try {\n return [JSON.parse(encoded) as AnyEntity];\n } catch (err) {\n log.verbose('queue object JSON parse failed; object ignored', { encoded, error: err });\n return [];\n }\n });\n return {\n objects,\n nextCursor: result.nextCursor ?? null,\n prevCursor: result.prevCursor ?? null,\n };\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\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", "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", "
|
|
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 { EchoURI, 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: EchoURI.EchoURI): Promise<FeedProtocol.QueryResult> {\n const spaceId = EchoURI.getSpaceId(queue);\n const queueId = EchoURI.getObjectId(queue);\n if (!spaceId || !queueId) {\n throw new Error('Invalid queue EchoURI');\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: EchoURI.EchoURI, objects: AnyEntity[]): Promise<void> {\n const spaceId = EchoURI.getSpaceId(queue);\n const queueId = EchoURI.getObjectId(queue);\n if (!spaceId || !queueId) {\n throw new Error('Invalid queue EchoURI');\n }\n // TODO(dmaretskyi): EchoURI 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 EchoURI, 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: EchoURI.EchoURI, options?: {}): Promise<FeedProtocol.QueryResult>;\n insertIntoQueue(queue: EchoURI.EchoURI, 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: EchoURI.EchoURI, options?: {}): Promise<FeedProtocol.QueryResult> {\n return this._serviceContainer.queryQueue(queue);\n }\n\n insertIntoQueue(queue: EchoURI.EchoURI, 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": ";AAIA,SAASA,YAAAA,iBAAgB;AACzB,SAASC,kBAAkB;AAC3B,SAASC,aAAAA,kBAAiB;;;ACD1B,SAASC,eAA6B;;;ACCtC,SAASC,cAAa;AACtB,SAASC,aAAAA;AACT,SAASC,qBAAiB,2BAAkB;AAC5C,SAASC,iBAAe;AACxB,SAASC,eAAW;AAgBpB,SAASC,WAAAA;;;ACtBF,IAAMC,iBAAiB,CAACC,UAAkC,IAAIC,WAAWD,KAAAA;;;ADJhF,IAAE,eAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAKF;;;EAwBUE;EAER,oBACUC,oBAAAA,IAAAA;cAAAA,mBAAAA,cAAAA;SACAC,oBAAAA;AACP,SAAA,eAAA;EAEHC;YACE,EAAO,gBAAcC,QAAM,GAAA;WACzBC,IAAAA,OAAUC,CAAAA,EAAAA,KAAQC,MAAQC;AAC1B,gBAAKR,QAAAA,QAAqB,OAACS,GAAAA,QAAAA,EAAgB,YAAA,YAAA,GAAA,cAAA,GAAA,IAAA,GAAA,MAAA,GAAA,CAAA,4BAAA,EAAA,EAAA,CAAA;WAAED,kBAAAA,IAAAA,gBAAAA;QAASJ;QAAK;MAE3D,CAAA;aACE,MAAKJ;AACP,aAAA,kBAAA,OAAA,cAAA;MACF;IACF,CAAA;EAEA;QACE,mBACOA,EAAAA,gBAAsBS,OAAAA,GAAAA;UAGvBC,MAAAA,KAAS,kBAAA,IAAA,cAAA,KAAA,MAAA,IAAA,oBAAA;MACTC,SAAS;eAAEF;QAAe;MAC5B;IAGJ,CAAA,CAAA;QACEG,QAAQ;UAAwBC,KAAAA,qBAAoB;QAAC,OAAA,OAAA;MACrD,GAAA,EAAA,YAAA,YAAA,GAA2B,cAAA,GAAA,KAAA,GAAA,KAAA,CAAA;;;;;;;;AAGzBD,gBAAIE,WAAK,4BAAmB,KAAA,MAAA,KAAA,aAAA,YAAA,KAAA,mBAAA,IAAA,SAAA,UAAA,GAAA,KAAA;cAAEC,KAAAA,mBAAAA;YAAYP;YAAsBQ,SAASC,IAAAA;YAAS,OAAA,CAAA,CAAA;UAClF,GAAA,EAAA,YAAKA,YAAU,GAAA,cAAA,GAAA,KAAA,GAAA,KAAA,CAAA;cACbL,CAAAA,UAAS;gBAAeG,KAAAA,aAAAA;cAAW;YACnC,GAAA,EAAA,YAAA,YAAA,GAAA,cAAA,GAAA,KAAA,GAAA,KAAA,CAAA;AACF;UACAG;cACEC,KAAAA;qBACE;;gBAEE;;;gBAGF,UAAA,eAAA,SAAA,IAAA;cACD;YACH;;;;;;;QACF;MACF;IACF;EAEA;;;;;;;QACEd;gBACMe,QAAAA,QAAAA,OAAAA,GAAAA,QAAAA,EAAAA,YAAW,YAAWlB,GAAAA,cAAamB,GAAAA,KAAAA,GAAc,MAAK,GAACpB,CAAAA,4BAA4BqB,EAAAA,EAAAA,CAAAA;AACzF,YAAA,WAAO,4BAAA,KAAA,MAAA,KAAA,aAAA,eAAA,KAAA,mBAAA,SAAA,YAAA,GAAA,KAAA;aAAEP;QAAgC,YAAA,SAAA;;;;;;;IAC3C;EAEA;QACE,OAAMG,EAAAA,SACClB,eAAkBuB,GAAG;UAGtBb,MAAAA,KAAS,kBAAA,IAAA,cAAA,KAAA,MAAA,IAAA,oBAAA;MACTC,SAAS;eAAEF;QAAe;MAC5B;IAEJ,CAAA,CAAA;QAEE;iBACE,UAAA,WAAA,CAAA,GAAA;YAGE,CAAA,OAAA,UAAA;AACF;QACA;AACF,cAAA,KAAA,aAAA,eAAA,KAAA,mBAAA,IAAA,SAAA,OAAA,YAAA,OAAA,QAAA;MACA;aACA,OAAMe;YACJd,oBAAS,KAAA;QACTC,SAAS;iBAAEF;UAAe;QAC1BgB;QACCC,eAAAA;MACL,CAAA,EAAA,KAAA;IACF;EAEA;EACE,MAAA,QAAS;EAGXC;0BACYC,UAAoB,UAAA;UAC5BlB,IAAAA,oBAAS;MACX,SAAA;IACF,CAAA;EAEA;QACE,iBAAUkB,EAAAA,aAAoB,aAAA,GAAA;UAC5BlB,IAAAA,oBAAS;MACX,SAAA;IACF,CAAA;EAEA;QACE,aAAUkB,EAAAA,aAAoB,aAAA,GAAA;UAC5BlB,IAAAA,oBAAS;MACX,SAAA;IACF,CAAA;EAEA;QACEE,gBAAY;AACZ,QAAA,QAAS,wDAAA,QAAA,EAAA,YAAA,YAAA,GAAA,cAAA,GAAA,KAAA,GAAA,KAAA,CAAA;EAGX;QACE,yBAAUgB,EAAAA,OAAoB,OAAA,GAAA;UAC5BlB,IAAAA,oBAAS;MACX,SAAA;IACF,CAAA;EACF;;;;AE9IA,SAASmB,UAAAA,eAAAA;AACT,SAASC,uBAAAA,sBAAW,uBAAAC,4BAAY;AAIhC,SAAO,OAAAD,YAAME;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAVb;;;EAWUC;EAER,cACmBC;cAAAA,mBAAAA,cAAAA;SACAC,oBAAAA;AAChB,SAAA,eAAA;EAEHC;YACMC,SAAK;SAAeC,KAAAA,aAAAA;MAAQ;IAEhC,GAAA,EAAA,YAAcC,YAAW,GACtBC,eAAA,GAAA,IAAA,GAAA,KAAA,CAAA;WACCC,QAAI,aAAA,YAAA;;;;;;;YACF;AACAX,eAAIO;eAAsBC,KAAAA,eAAAA;YAAQ;2BAC5BI,YAAAA,GAAAA,eAAAA,GAAAA,IAAAA,GAAAA,KAAAA,CAAAA;AACNZ,gBAAIO,gBAAKM,6BAAkB,KAAA,MAAA,KAAA,aAAA,UAAA,KAAA,mBAAA,OAAA,GAAA,KAAA;eAAEC,KAAAA,kBAAaF;YAA8B,aAAA,cAAA,SAAA;UACxE,GAAA,EAAA,YAAOG,YAAgBH,GAAAA,eAAAA,GAAAA,IAAAA,GAAAA,KAAAA,CAAAA;;;;;;;QACvB;eACII,OAAM;aAAkBC,MAAKD,gBAAAA;UAAM,KAAA;QACvC,GAAA,EAAA,YAAUf,YAAAA,GAAAA,eAAoB,GAAA,KAAA,GAAA,KAAA,CAAA;cAC5BiB,IAAAA,qBAAU;UACVC,SAAS,sCAAA,KAAA,WAAA;mBAAEC;YAA6B,YAAA,KAAA;UACxCC;UACF,OAAA;QACF,CAAA;MACF;IAEJ,GAAA,CAAA;EAEA;QACE,UAAUtB;UACRmB,IAAAA,qBAAS;MACX,SAAA;IACF,CAAA;EAEA;QACE,YAAUnB;UACRmB,IAAAA,qBAAS;MACX,SAAA;IACF,CAAA;EACF;;;;AChDA,SAASI,uBAAAA,4BAA2B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAG7B,IAAMC,mBAAN,MAAMA;;;EACX,YACYC,MACOC,eACjB;SAFUD,OAAAA;SACOC,gBAAAA;EAChB;EAEH,MAAMC,WAAWC,SAA4E;AAC3F,QAAI;;;;;;;cACIC,SAAAA,6BAAAA,KAAS,MAAM,KAAKH,cAAcC,WAAW,KAAKF,MAAMG,OAAAA,GAAAA,KAAAA;AAE9D,eAAO;UACLE,SAASC,gBAAgBF,OAAOC,OAAO;UACvCE,YAAYH,OAAOG;UACnBC,YAAYJ,OAAOI;QACrB;;;;;;;IACF,SAASC,OAAO;AACd,YAAM,EAAEC,MAAK,IAAKP;AAClB,YAAML,qBAAoBa,KAAK;QAC7BC,SAAS;QACTC,SAAS;UACPC,aAAaJ,OAAOK;UACpBC,SAASN,OAAOM;UAChBC,SAASP,OAAOQ,WAAW,CAAA;QAC7B;QACAC,eAAe;MACjB,CAAA,EAAGV,KAAAA;IACL;EACF;EAEA,MAAMW,gBAAgBjB,SAA6D;AACjF,QAAI;;;;;;;cACIkB,IAAAA,6BAAAA,KAAI,MAAM,KAAKpB,cAAcmB,gBAAgB,KAAKpB,MAAMG,OAAAA,GAAAA,KAAAA;;;;;;;IAChE,SAASM,OAAO;AACd,YAAM,EAAEK,aAAaE,SAASC,QAAO,IAAKd;AAC1C,YAAML,qBAAoBa,KAAK;QAC7BC,SAAS;QACTC,SAAS;UAAEC;UAAaE;UAASC;QAAQ;QACzCE,eAAe;MACjB,CAAA,EAAGV,KAAAA;IACL;EACF;EAEA,MAAMa,gBAAgBnB,SAA6D;AACjF,QAAI;;;;;;;cACIkB,IAAAA,6BAAAA,KAAI,MAAM,KAAKpB,cAAcqB,gBAAgB,KAAKtB,MAAMG,OAAAA,GAAAA,KAAAA;;;;;;;IAChE,SAASM,OAAO;AACd,YAAM,EAAEK,aAAaE,SAASC,QAAO,IAAKd;AAC1C,YAAML,qBAAoBa,KAAK;QAC7BC,SAAS;QACTC,SAAS;UAAEC;UAAaE;UAASC;QAAQ;QACzCE,eAAe;MACjB,CAAA,EAAGV,KAAAA;IACL;EACF;EAEA,MAAMc,UAAUF,GAAiD;EAEjE;EAEA,MAAMG,aAAaH,GAAiF;AAClG,WAAO;MAAEI,YAAY,CAAA;IAAG;EAC1B;AACF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AJpDO,IAAMC,mBAAN,MAAMA;;;;;EACX,YACmBC,mBACAC,cACAC,eACAC,mBACjB;SAJiBH,oBAAAA;SACAC,eAAAA;SACAC,gBAAAA;SACAC,oBAAAA;EAChB;EAEH,MAAMC,aAAaC,SAAkE;;;;;;;YAC7EC,SAAAA,6BAAAA,KAAS,MAAM,KAAKL,aAAaG,aAAa,KAAKJ,mBAAmBK,OAAAA,GAAAA,KAAAA;AAG5E,aAAOC,SACH;QACEC,UAAUD,OAAOC;QACjBC,gBAAgBF,OAAOE;MACzB,IACAC;;;;;;;EACN;EAEA,MAAMC,iBAKH;AACD,UAAMC,cAAc,IAAIC,gBAAgB,KAAKZ,mBAAmB,KAAKC,YAAY;AACjF,UAAMY,eAAe,IAAIC,iBAAiB,KAAKd,mBAAmB,KAAKC,YAAY;AACnF,UAAMc,eAAe,IAAIC,iBAAiB,KAAKhB,mBAAmB,KAAKE,aAAa;AAEpF,WAAO;MACLS;MACAE;MACAE;MACAE,oBAAoB,KAAKd;IAC3B;EACF;EAEA,MAAMe,WAAWC,OAA2D;AAC1E,UAAMd,UAAUe,QAAQC,WAAWF,KAAAA;AACnC,UAAMG,UAAUF,QAAQG,YAAYJ,KAAAA;AACpC,QAAI,CAACd,WAAW,CAACiB,SAAS;AACxB,YAAM,IAAIE,MAAM,uBAAA;IAClB;AACA,UAAMlB,SAAS,MAAM,KAAKJ,cAAcgB,WAAW,KAAKlB,mBAAmB;MACzEyB,OAAO;QACLpB;QACAqB,UAAU;UAACJ;;MACb;IACF,CAAA;AAEA,WAAO;MACLK,SAASC,gBAAgBtB,OAAOqB,OAAO;MACvCE,YAAYvB,OAAOuB,cAAc;MACjCC,YAAYxB,OAAOwB,cAAc;IACnC;EACF;EAEA,MAAMC,gBAAgBZ,OAAwBQ,SAAqC;AACjF,UAAMtB,UAAUe,QAAQC,WAAWF,KAAAA;AACnC,UAAMG,UAAUF,QAAQG,YAAYJ,KAAAA;AACpC,QAAI,CAACd,WAAW,CAACiB,SAAS;AACxB,YAAM,IAAIE,MAAM,uBAAA;IAClB;AAEA,UAAM,KAAKtB,cAAc6B,gBAAgB,KAAK/B,mBAAmB;MAC/DgC,aAAa;MACb3B;MACAiB;MACAK,SAASA,QAAQM,IAAI,CAACC,QAAQC,KAAKC,UAAUF,GAAAA,CAAAA;IAC/C,CAAA;EACF;AACF;;;AKrFA,SAASG,gBAAgB;AAGzB,SAASC,aAAAA,kBAAiB;AAC1B,SAASC,iBAA+B;;;ACqBjC,IAAMC,gBAAN,MAAMA;;;EACX,YACmBC,mBACAC,UACjB;SAFiBD,oBAAAA;SACAC,WAAAA;EAChB;EAEHC,WAAWC,OAAwBC,SAAiD;AAClF,WAAO,KAAKJ,kBAAkBE,WAAWC,KAAAA;EAC3C;EAEAE,gBAAgBF,OAAwBG,SAAqC;AAE3E,WAAO,KAAKN,kBAAkBK,gBAAgBF,OAAOI,KAAKC,MAAMD,KAAKE,UAAUH,OAAAA,CAAAA,CAAAA;EACjF;AACF;;;AD9BA,IAAAI,gBAAA;;;EAIUC;EACAC;EAER,MAAA;;cAMOA,mBAAiBC,aAAkB,KAACC;AAC3C,UAAA,GAAA,KAAA,oBAAA,mBAAA,KAAA,cAAA,aAAA,KAAA,MAAA;AAEIC,SAAc,aAAA,IAAA,cAAA,KAAA,mBAAA,KAAA,GAAA;;EAElB,IAAA,KAAA;AAEIC,WAAwB,KAAA;;MAE1B,KAAA;AACF,IAAAC,WAAA,KAAA,KAAA,QAAA,EAAA,YAAA,YAAA,GAAAP,eAAA,GAAA,IAAA,GAAA,MAAA,GAAA,CAAA,YAAA,EAAA,EAAA,CAAA;AAEA,WAAA,KAAA;;;;;MAKE,OAAO;AACT,IAAAO,WAAA,KAAA,KAAA,QAAA,EAAA,YAAA,YAAA,GAAAP,eAAA,GAAA,IAAA,GAAA,MAAA,GAAA,CAAA,YAAA,EAAA,EAAA,CAAA;AAEIQ,WAAAA,KAAoB,IAAA;;EAExB,IAAA,SAAA;AAEA,WAAyBC,KAAQ;;QAE/B,QAAKC;UACH,OAAM,MAAIC,KAAO,kBAAmB,aAAU,KAAA,GAAA;AAChD,QAAA,CAAA,MAAA;AAEI,YAAI,IAAG,MAAKC,oBAAYC,KAAiB,GAAC,EAAA;;SAE5CC,MAAAA,KAAUC,YAAc,kBAAc;MACtCC,SAAAA,KAAAA;MACAC,UAAAA,UAAkB,KAAA,KAAA,QAAA;MACpB,qBAAA;MAEA,cAAeC;;AAA4D,UAAA,KAAA,IAAA,aAAA,KAAA,KAAA,MAAA;MAC7E,SAAA,KAAA;IACF,CAAA;;;;;AN9CA,IAAAC,gBAAA;AAMmBC,IAAY,kBAAZA,cAAYC,UAAA;EACZC;EAEAC;EAEjB,oBAA8B,CAAE;YACzB,oBAAA,IAAA;cACLC,UAAiBC;AACjBD,UAAAA;AACA,IAAAA,WAAKE,OAAAA,SAAoB,gBAAIC,aACtBL,2BACIM,EAAAA,YACTH,YAASI,GAAAA,eACTJ,GAAAA,IAASK,GAAAA,MAAAA,GAAAA,CAAAA,+CAAkB,2BAAA,EAAA,CAAA;AAE7B,IAAAN,WAAKJ,OAAW,SAAOW,iBAAY,aAAA,4BAAA,EAAA,YAAA,YAAA,GAAAZ,eAAA,GAAA,IAAA,GAAA,MAAA,GAAA,CAAA,gDAAA,4BAAA,EAAA,CAAA;AACrC,SAAA,oBAAA,IAAA,iBAAA,KAAA,mBAAA,SAAA,aAAA,SAAA,cAAA,SAAA,kBAAA;AAEIa,SAAAA,cAAmB,IAAA,WAAA,CAAA,CAAA;;EAEvB,IAAA,OAAA;AAEA,WAAyBC,KAAQ;;QAE/B,QAAKb;UAA+BQ,EAAAA,aAAAA,aAAAA,IAAAA,MAAAA,KAAAA,kBAAAA,eAAAA;SAAaM,YAAAA,iBAAAA;MAAa;MAC9D;IACF,CAAA;AAEA,UAAyBC,KAAS,YAAA,KAAA;;iBAExBC;AACR,eAAA,SAAA,KAAA,QAAA,OAAA,GAAA;AACI,YAACb,MAAQc,MAAK;IAElB;AACF,SAAA,QAAA,MAAA;AAEA,UAAMC,KAASC,YAAuC,MAAA;;iBAE5CH,SAAQ;QACd,CAAA,KAAKb,QAAQiB,IAAID,OAAAA,GAASH;AAC5B,YAAAA,SAAA,IAAA,WAAA,KAAA,mBAAA,KAAA,aAAA,OAAA;AACA,WAAMA,QAAQ,IAAKb,SAAWa,MAACG;IAC/B;AACA,UAAA,QAAOH,KAAAA,QAAAA,IAAAA,OAAAA;AACT,UAAA,MAAA,KAAA;AACF,WAAA;EAEA;;IAEIR,sBAAiBa,OAAY,QAAA;QAC7BZ,SAAAA,IAAca,gBAAiB;IAC/BZ,aAAAA,IAAAA;IACF,cAAA,IAAA;IACA,oBAAiB,IAAA;EACjB,CAAA;AACA,QAAA,OAAA,KAAA;;;;;AQxEK,IAAMa,wBAAwB;AAE9B,IAAKC,qBAAAA,0BAAAA,qBAAAA;;SAAAA;;;;ACNZ,SAASC,aAAAA,kBAAiB;AAC1B,SAASC,WAAAA,gBAAe;AACxB,SAASC,OAAAA,YAAW;AACpB,SAASC,oBAAoB;AAM7B,IAAAC,gBAAA;AAKI,IAAA,2BAAA,CAAA,SAAA;SACA,OAAA,SAAA,QAAA;AAKA,QAAA,QAAA,QAAA,IAAA,qBAAA,MAAA,mBAAA,MAAA;AAEI,aAAA,uBAAA,MAAA,OAAA;;QAEF;YACE,UAAKC,IAAQC,IAAO,QAACC,GAAU,EAAA,aAAA,IAAA,SAAA;mBAC7B;sBAAyCC,QAAQ,OAAA,GAAA;AAAI,iBAAA,IAAA,SAAA,mBAAA;YACvD,QAAA;UACF,CAAA;QAEA;MACA;YACEC,mBAAAA,IAAAA,iBAAAA,CAAAA,GAAAA,IAAAA,cAAAA,IAAAA,eAAAA,IAAAA,oBAAAA;YACAC,UAAAA,MAAgBH,sBAAAA;QAClB;QAEA,gBAAoBI;MACpB,CAAA;AACAC,aAAIC,aAAM,QAAA,MAAA,eAA2B,MAAA,SAAA,OAAA,CAAA;aAAEA,OAAAA;WAAOC,MAAAA,2BAAkB;QAAC;QACjE,OAAOC,MAAAA;uBACIF,YAAOG,GAAAA,eAAW,GAAA,IAAA,GAAA,OAAA,CAAA;aAC3BH,aAAAA,QAAAA;QACF,SAAA,OAAA,WAAA;QACF;MACF,CAAA;IACA;EAEF;;IAEE,iBAAiB,OAAMI,MAAAA,SAAcC,YAAAA;QAGnCC,EAAAA,KAAAA,IAAAA,MAAAA,cAAAA,OAAAA;SACAC,KAAAA,QAAAA;IACF;IACF;EAEA,CAAA;;IAME,gBAAe,OAAA,YAAA;QACb,EAAA,MAAO,EAAA,UAAA,GAAA,KAAA,GAAA,QAAA,IAAA,MAAA,QAAA,KAAA;iBAAQC;WAAMC;MAAQ,MAAA;MAC/B;IAEA;EACA;MAGE;UAASF,OAAAA,KAAAA,MAAAA,QAAAA;WAAME;;eAA0BD;QAAK,GAAA;QAAE,GAAA;MAChD;IACAT;WACA,KAAO;SAAEQ,MAAM,KAAA,QAAA,EAAA,YAAA,YAAA,GAAAhB,eAAA,GAAA,IAAA,GAAA,OAAA,CAAA;;YAAY;QAAQ;QAAE,GAAA;MACvC;IACF;EAEA;;6BAESmB,CAAmBC,oBAAQ,YAAA;QAChCC,WAAMF;IACNG,KAAAA,mBAAaH,KAAAA;IACbI,MAAAA,mBAAaJ,KAAAA;IACbK,aAAAA,mBAAcL,KAAuB;IACvC,aAAA,mBAAA,KAAA;IAEA,cAAWM,mBAAwBC,KAAAA;;aAE/B,SAAA,KAAgB,UAAA,QAAA,GAAA;IAClB,SAAA;MACF,gBAAA;IACF;EAEA,CAAA;;AASE,IAAIC,wBAAAA,OAAAA,EAAAA,kBAAAA,eAAAA,MAAAA;AACJ,QAAIC,EAAAA,aAAAA,cAAAA,cAAAA,mBAAAA,IAAAA,MAAAA,iBAAAA,eAAAA;AACJ,MAAItB;MACF;MACA,gBAAW;UACT,OAAM,MAAIuB,iBAAO,aAAmBvB,cAAgB;AACtD,QAAA,CAAA,MAAA;AACAqB,YAAAA,IAAWP,MAAKO,oBAAQ,cAAA,EAAA;IACxBG;AACAF,eAAW,KAAA;AACb,IAAAE,WAAA,CAAA,KAAA,eAAA,WAAA,YAAA,GAAA,QAAA,EAAA,YAAA,YAAA,GAAA9B,eAAA,GAAA,KAAA,GAAA,QAAA,GAAA,CAAA,iDAAA,EAAA,EAAA,CAAA;AAEA,cAAO,aAAA,KAAA,cAAA;;;cAGH+B;MACAC;MACAC;MACF;MACA9B;IACAwB;IACAO,SAAAA;IACQ;IACV,cAAA;;;;;AC7HF,SAASC,UAA6BC,OAAAA,MAAKC,iBAAiB;AAI1DC,IAAIC,uBAAyBC,MAAKC;AAClC,EAAAH,KAAA,cAAA,WAAA,SAAA;AAEF,EAAAA,KAAMG,cAAAA,WAAsCC,KAAQC,oBAAAA;;2BAEhD,CAAA,QAAA,UAAA;AACF,MAAA,CAAA,UAAA,OAAA,OAAA,OAAA,GAAA;AAEA;EACA;AACA,QAAMC,UAAS,MAAA;QAACC,QAAOC,MAAKC;QAA2CC,SAAAA;IAAOC,OAAQC,KAAAA,OAAUA,EAAAA,SAAUC,IAAAA,UAAAA;IAE1G;WACOC,CAAAA,UAASC,UAAK,MAAA;UACnB,MAAKD,OAASE;SACZC,SAAQC;SACR,SAAA;AACF,cAAKJ,MAASK,MAAO,SAAA,GAAA,MAAA;AACnBF;SACA,SAAA;AACF,cAAKH,IAASM,MAAI,SAAA,GAAA,MAAA;AAChBH;SACA,SAAA;AACF,cAAKH,KAASO,MAAI,SAAA,GAAA,MAAA;AAChBJ;SACA,SAAA;AACF,cAAKH,KAASQ,MAAK,SAAA,GAAA,MAAA;AACjBL;SACA,SAAA;AACF,cAAA,MAAA,MAAA,SAAA,GAAA,MAAA;AACEA;;AAEJ,cAAA,IAAA,MAAA,SAAA,GAAA,MAAA;AACF;;;",
|
|
6
|
+
"names": ["Resource", "EchoClient", "invariant", "EchoURI", "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", "EchoURI", "getSpaceId", "queueId", "getObjectId", "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
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"inputs":{"src/internal/utils.ts":{"bytes":590,"imports":[],"format":"esm"},"src/internal/data-service-impl.ts":{"bytes":
|
|
1
|
+
{"inputs":{"src/internal/utils.ts":{"bytes":590,"imports":[],"format":"esm"},"src/internal/data-service-impl.ts":{"bytes":20010,"imports":[{"path":"@dxos/codec-protobuf/stream","kind":"import-statement","external":true},{"path":"@dxos/debug","kind":"import-statement","external":true},{"path":"@dxos/errors","kind":"import-statement","external":true},{"path":"@dxos/invariant","kind":"import-statement","external":true},{"path":"@dxos/keys","kind":"import-statement","external":true},{"path":"@dxos/log","kind":"import-statement","external":true},{"path":"src/internal/utils.ts","kind":"import-statement","original":"./utils"}],"format":"esm"},"src/internal/query-service-impl.ts":{"bytes":9332,"imports":[{"path":"@dxos/codec-protobuf/stream","kind":"import-statement","external":true},{"path":"@dxos/errors","kind":"import-statement","external":true},{"path":"@dxos/log","kind":"import-statement","external":true}],"format":"esm"},"src/internal/queue-service-impl.ts":{"bytes":11657,"imports":[{"path":"@dxos/errors","kind":"import-statement","external":true}],"format":"esm"},"src/internal/service-container.ts":{"bytes":13305,"imports":[{"path":"@dxos/keys","kind":"import-statement","external":true},{"path":"src/internal/data-service-impl.ts","kind":"import-statement","original":"./data-service-impl"},{"path":"src/internal/query-service-impl.ts","kind":"import-statement","original":"./query-service-impl"},{"path":"src/internal/queue-service-impl.ts","kind":"import-statement","original":"./queue-service-impl"}],"format":"esm"},"src/internal/index.ts":{"bytes":401,"imports":[{"path":"src/internal/service-container.ts","kind":"import-statement","original":"./service-container"}],"format":"esm"},"src/queues-api.ts":{"bytes":3155,"imports":[],"format":"esm"},"src/space-proxy.ts":{"bytes":6106,"imports":[{"path":"@dxos/context","kind":"import-statement","external":true},{"path":"@dxos/invariant","kind":"import-statement","external":true},{"path":"@dxos/keys","kind":"import-statement","external":true},{"path":"src/queues-api.ts","kind":"import-statement","original":"./queues-api"}],"format":"esm"},"src/functions-client.ts":{"bytes":8574,"imports":[{"path":"@dxos/context","kind":"import-statement","external":true},{"path":"@dxos/echo-db","kind":"import-statement","external":true},{"path":"@dxos/invariant","kind":"import-statement","external":true},{"path":"src/internal/index.ts","kind":"import-statement","original":"./internal"},{"path":"src/space-proxy.ts","kind":"import-statement","original":"./space-proxy"}],"format":"esm"},"src/types.ts":{"bytes":1603,"imports":[],"format":"esm"},"src/wrap-handler-for-cloudflare.ts":{"bytes":15148,"imports":[{"path":"@dxos/invariant","kind":"import-statement","external":true},{"path":"@dxos/keys","kind":"import-statement","external":true},{"path":"@dxos/log","kind":"import-statement","external":true},{"path":"@dxos/protocols","kind":"import-statement","external":true},{"path":"src/internal/index.ts","kind":"import-statement","original":"./internal"},{"path":"src/types.ts","kind":"import-statement","original":"./types"}],"format":"esm"},"src/logger.ts":{"bytes":4872,"imports":[{"path":"@dxos/log","kind":"import-statement","external":true}],"format":"esm"},"src/index.ts":{"bytes":786,"imports":[{"path":"src/functions-client.ts","kind":"import-statement","original":"./functions-client"},{"path":"src/internal/index.ts","kind":"import-statement","original":"./internal"},{"path":"src/types.ts","kind":"import-statement","original":"./types"},{"path":"src/wrap-handler-for-cloudflare.ts","kind":"import-statement","original":"./wrap-handler-for-cloudflare"},{"path":"src/logger.ts","kind":"import-statement","original":"./logger"}],"format":"esm"}},"outputs":{"dist/lib/browser/index.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":39391},"dist/lib/browser/index.mjs":{"imports":[{"path":"@dxos/context","kind":"import-statement","external":true},{"path":"@dxos/echo-db","kind":"import-statement","external":true},{"path":"@dxos/invariant","kind":"import-statement","external":true},{"path":"@dxos/keys","kind":"import-statement","external":true},{"path":"@dxos/codec-protobuf/stream","kind":"import-statement","external":true},{"path":"@dxos/debug","kind":"import-statement","external":true},{"path":"@dxos/errors","kind":"import-statement","external":true},{"path":"@dxos/invariant","kind":"import-statement","external":true},{"path":"@dxos/keys","kind":"import-statement","external":true},{"path":"@dxos/log","kind":"import-statement","external":true},{"path":"@dxos/codec-protobuf/stream","kind":"import-statement","external":true},{"path":"@dxos/errors","kind":"import-statement","external":true},{"path":"@dxos/log","kind":"import-statement","external":true},{"path":"@dxos/errors","kind":"import-statement","external":true},{"path":"@dxos/context","kind":"import-statement","external":true},{"path":"@dxos/invariant","kind":"import-statement","external":true},{"path":"@dxos/keys","kind":"import-statement","external":true},{"path":"@dxos/invariant","kind":"import-statement","external":true},{"path":"@dxos/keys","kind":"import-statement","external":true},{"path":"@dxos/log","kind":"import-statement","external":true},{"path":"@dxos/protocols","kind":"import-statement","external":true},{"path":"@dxos/log","kind":"import-statement","external":true}],"exports":["FUNCTION_ROUTE_HEADER","FunctionRouteValue","FunctionsClient","ServiceContainer","createClientFromEnv","createFunctionContext","setupFunctionsLogger","wrapHandlerForCloudflare"],"entryPoint":"src/index.ts","inputs":{"src/functions-client.ts":{"bytesInOutput":2115},"src/internal/service-container.ts":{"bytesInOutput":4504},"src/internal/data-service-impl.ts":{"bytesInOutput":7076},"src/internal/utils.ts":{"bytesInOutput":55},"src/internal/query-service-impl.ts":{"bytesInOutput":4396},"src/internal/queue-service-impl.ts":{"bytesInOutput":4861},"src/space-proxy.ts":{"bytesInOutput":1509},"src/queues-api.ts":{"bytesInOutput":414},"src/index.ts":{"bytesInOutput":0},"src/types.ts":{"bytesInOutput":205},"src/wrap-handler-for-cloudflare.ts":{"bytesInOutput":3435},"src/logger.ts":{"bytesInOutput":1064}},"bytes":30319}}}
|