@dxos/functions 0.8.4-main.ae835ea → 0.8.4-main.bc674ce

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.
Files changed (184) hide show
  1. package/dist/lib/browser/index.mjs +767 -884
  2. package/dist/lib/browser/index.mjs.map +4 -4
  3. package/dist/lib/browser/meta.json +1 -1
  4. package/dist/lib/node-esm/index.mjs +767 -884
  5. package/dist/lib/node-esm/index.mjs.map +4 -4
  6. package/dist/lib/node-esm/meta.json +1 -1
  7. package/dist/types/src/errors.d.ts +44 -60
  8. package/dist/types/src/errors.d.ts.map +1 -1
  9. package/dist/types/src/example/fib.d.ts +1 -1
  10. package/dist/types/src/example/index.d.ts +3 -3
  11. package/dist/types/src/example/index.d.ts.map +1 -1
  12. package/dist/types/src/example/reply.d.ts +1 -1
  13. package/dist/types/src/example/sleep.d.ts +1 -1
  14. package/dist/types/src/index.d.ts +2 -5
  15. package/dist/types/src/index.d.ts.map +1 -1
  16. package/dist/types/src/operation-compatibility.test.d.ts +2 -0
  17. package/dist/types/src/operation-compatibility.test.d.ts.map +1 -0
  18. package/dist/types/src/protocol/functions-ai-http-client.d.ts +12 -0
  19. package/dist/types/src/protocol/functions-ai-http-client.d.ts.map +1 -0
  20. package/dist/types/src/protocol/index.d.ts +2 -0
  21. package/dist/types/src/protocol/index.d.ts.map +1 -0
  22. package/dist/types/src/protocol/protocol.d.ts +7 -0
  23. package/dist/types/src/protocol/protocol.d.ts.map +1 -0
  24. package/dist/types/src/protocol/protocol.test.d.ts +2 -0
  25. package/dist/types/src/protocol/protocol.test.d.ts.map +1 -0
  26. package/dist/types/src/sdk.d.ts +114 -0
  27. package/dist/types/src/sdk.d.ts.map +1 -0
  28. package/dist/types/src/services/credentials.d.ts +6 -4
  29. package/dist/types/src/services/credentials.d.ts.map +1 -1
  30. package/dist/types/src/services/event-logger.d.ts +33 -27
  31. package/dist/types/src/services/event-logger.d.ts.map +1 -1
  32. package/dist/types/src/services/function-invocation-service.d.ts +7 -19
  33. package/dist/types/src/services/function-invocation-service.d.ts.map +1 -1
  34. package/dist/types/src/services/index.d.ts +2 -4
  35. package/dist/types/src/services/index.d.ts.map +1 -1
  36. package/dist/types/src/services/queues.d.ts +4 -4
  37. package/dist/types/src/services/queues.d.ts.map +1 -1
  38. package/dist/types/src/services/tracing.d.ts +41 -12
  39. package/dist/types/src/services/tracing.d.ts.map +1 -1
  40. package/dist/types/src/types/Function.d.ts +40 -35
  41. package/dist/types/src/types/Function.d.ts.map +1 -1
  42. package/dist/types/src/types/Script.d.ts +9 -16
  43. package/dist/types/src/types/Script.d.ts.map +1 -1
  44. package/dist/types/src/types/Trigger.d.ts +58 -76
  45. package/dist/types/src/types/Trigger.d.ts.map +1 -1
  46. package/dist/types/src/types/TriggerEvent.d.ts +43 -13
  47. package/dist/types/src/types/TriggerEvent.d.ts.map +1 -1
  48. package/dist/types/src/types/index.d.ts +1 -0
  49. package/dist/types/src/types/index.d.ts.map +1 -1
  50. package/dist/types/src/types/url.d.ts +13 -0
  51. package/dist/types/src/types/url.d.ts.map +1 -0
  52. package/dist/types/tsconfig.tsbuildinfo +1 -1
  53. package/package.json +23 -58
  54. package/src/errors.ts +4 -4
  55. package/src/example/fib.ts +1 -1
  56. package/src/example/reply.ts +1 -1
  57. package/src/example/sleep.ts +1 -1
  58. package/src/index.ts +2 -5
  59. package/src/operation-compatibility.test.ts +185 -0
  60. package/src/protocol/functions-ai-http-client.ts +67 -0
  61. package/src/{executor → protocol}/index.ts +1 -1
  62. package/src/protocol/protocol.test.ts +59 -0
  63. package/src/protocol/protocol.ts +262 -0
  64. package/src/{handler.ts → sdk.ts} +129 -66
  65. package/src/services/credentials.ts +32 -17
  66. package/src/services/event-logger.ts +10 -4
  67. package/src/services/function-invocation-service.ts +23 -70
  68. package/src/services/index.ts +2 -4
  69. package/src/services/queues.ts +5 -7
  70. package/src/services/tracing.ts +68 -44
  71. package/src/types/Function.ts +39 -8
  72. package/src/types/Script.ts +10 -9
  73. package/src/types/Trigger.ts +18 -14
  74. package/src/types/TriggerEvent.ts +29 -29
  75. package/src/types/index.ts +1 -0
  76. package/src/types/url.ts +32 -0
  77. package/dist/lib/browser/bundler/index.mjs +0 -256
  78. package/dist/lib/browser/bundler/index.mjs.map +0 -7
  79. package/dist/lib/browser/chunk-J5LGTIGS.mjs +0 -10
  80. package/dist/lib/browser/chunk-J5LGTIGS.mjs.map +0 -7
  81. package/dist/lib/browser/chunk-M6EXIREF.mjs +0 -610
  82. package/dist/lib/browser/chunk-M6EXIREF.mjs.map +0 -7
  83. package/dist/lib/browser/edge/index.mjs +0 -83
  84. package/dist/lib/browser/edge/index.mjs.map +0 -7
  85. package/dist/lib/browser/testing/index.mjs +0 -131
  86. package/dist/lib/browser/testing/index.mjs.map +0 -7
  87. package/dist/lib/node-esm/bundler/index.mjs +0 -257
  88. package/dist/lib/node-esm/bundler/index.mjs.map +0 -7
  89. package/dist/lib/node-esm/chunk-HSLMI22Q.mjs +0 -11
  90. package/dist/lib/node-esm/chunk-HSLMI22Q.mjs.map +0 -7
  91. package/dist/lib/node-esm/chunk-P3IATZMZ.mjs +0 -612
  92. package/dist/lib/node-esm/chunk-P3IATZMZ.mjs.map +0 -7
  93. package/dist/lib/node-esm/edge/index.mjs +0 -84
  94. package/dist/lib/node-esm/edge/index.mjs.map +0 -7
  95. package/dist/lib/node-esm/testing/index.mjs +0 -132
  96. package/dist/lib/node-esm/testing/index.mjs.map +0 -7
  97. package/dist/types/src/bundler/bundler.d.ts +0 -49
  98. package/dist/types/src/bundler/bundler.d.ts.map +0 -1
  99. package/dist/types/src/bundler/bundler.test.d.ts +0 -2
  100. package/dist/types/src/bundler/bundler.test.d.ts.map +0 -1
  101. package/dist/types/src/bundler/index.d.ts +0 -2
  102. package/dist/types/src/bundler/index.d.ts.map +0 -1
  103. package/dist/types/src/e2e/deploy.test.d.ts +0 -2
  104. package/dist/types/src/e2e/deploy.test.d.ts.map +0 -1
  105. package/dist/types/src/edge/functions.d.ts +0 -17
  106. package/dist/types/src/edge/functions.d.ts.map +0 -1
  107. package/dist/types/src/edge/index.d.ts +0 -2
  108. package/dist/types/src/edge/index.d.ts.map +0 -1
  109. package/dist/types/src/executor/executor.d.ts +0 -14
  110. package/dist/types/src/executor/executor.d.ts.map +0 -1
  111. package/dist/types/src/executor/index.d.ts +0 -2
  112. package/dist/types/src/executor/index.d.ts.map +0 -1
  113. package/dist/types/src/handler.d.ts +0 -102
  114. package/dist/types/src/handler.d.ts.map +0 -1
  115. package/dist/types/src/services/database.d.ts +0 -67
  116. package/dist/types/src/services/database.d.ts.map +0 -1
  117. package/dist/types/src/services/function-invocation-service.test.d.ts +0 -2
  118. package/dist/types/src/services/function-invocation-service.test.d.ts.map +0 -1
  119. package/dist/types/src/services/local-function-execution.d.ts +0 -34
  120. package/dist/types/src/services/local-function-execution.d.ts.map +0 -1
  121. package/dist/types/src/services/remote-function-execution-service.d.ts +0 -22
  122. package/dist/types/src/services/remote-function-execution-service.d.ts.map +0 -1
  123. package/dist/types/src/services/service-container.d.ts +0 -57
  124. package/dist/types/src/services/service-container.d.ts.map +0 -1
  125. package/dist/types/src/services/service-registry.d.ts +0 -31
  126. package/dist/types/src/services/service-registry.d.ts.map +0 -1
  127. package/dist/types/src/services/service-registry.test.d.ts +0 -2
  128. package/dist/types/src/services/service-registry.test.d.ts.map +0 -1
  129. package/dist/types/src/testing/index.d.ts +0 -3
  130. package/dist/types/src/testing/index.d.ts.map +0 -1
  131. package/dist/types/src/testing/layer.d.ts +0 -18
  132. package/dist/types/src/testing/layer.d.ts.map +0 -1
  133. package/dist/types/src/testing/logger.d.ts +0 -5
  134. package/dist/types/src/testing/logger.d.ts.map +0 -1
  135. package/dist/types/src/testing/persist-database.test.d.ts +0 -2
  136. package/dist/types/src/testing/persist-database.test.d.ts.map +0 -1
  137. package/dist/types/src/testing/services.d.ts +0 -59
  138. package/dist/types/src/testing/services.d.ts.map +0 -1
  139. package/dist/types/src/trace.d.ts +0 -122
  140. package/dist/types/src/trace.d.ts.map +0 -1
  141. package/dist/types/src/translations.d.ts +0 -12
  142. package/dist/types/src/translations.d.ts.map +0 -1
  143. package/dist/types/src/triggers/index.d.ts +0 -4
  144. package/dist/types/src/triggers/index.d.ts.map +0 -1
  145. package/dist/types/src/triggers/input-builder.d.ts +0 -3
  146. package/dist/types/src/triggers/input-builder.d.ts.map +0 -1
  147. package/dist/types/src/triggers/invocation-tracer.d.ts +0 -37
  148. package/dist/types/src/triggers/invocation-tracer.d.ts.map +0 -1
  149. package/dist/types/src/triggers/trigger-dispatcher.d.ts +0 -78
  150. package/dist/types/src/triggers/trigger-dispatcher.d.ts.map +0 -1
  151. package/dist/types/src/triggers/trigger-dispatcher.test.d.ts +0 -2
  152. package/dist/types/src/triggers/trigger-dispatcher.test.d.ts.map +0 -1
  153. package/dist/types/src/triggers/trigger-state-store.d.ts +0 -28
  154. package/dist/types/src/triggers/trigger-state-store.d.ts.map +0 -1
  155. package/dist/types/src/url.d.ts +0 -21
  156. package/dist/types/src/url.d.ts.map +0 -1
  157. package/src/bundler/bundler.test.ts +0 -58
  158. package/src/bundler/bundler.ts +0 -295
  159. package/src/bundler/index.ts +0 -5
  160. package/src/e2e/deploy.test.ts +0 -69
  161. package/src/edge/functions.ts +0 -67
  162. package/src/edge/index.ts +0 -9
  163. package/src/executor/executor.ts +0 -58
  164. package/src/services/database.ts +0 -175
  165. package/src/services/function-invocation-service.test.ts +0 -81
  166. package/src/services/local-function-execution.ts +0 -153
  167. package/src/services/remote-function-execution-service.ts +0 -63
  168. package/src/services/service-container.ts +0 -115
  169. package/src/services/service-registry.test.ts +0 -45
  170. package/src/services/service-registry.ts +0 -63
  171. package/src/testing/index.ts +0 -6
  172. package/src/testing/layer.ts +0 -114
  173. package/src/testing/logger.ts +0 -17
  174. package/src/testing/persist-database.test.ts +0 -87
  175. package/src/testing/services.ts +0 -115
  176. package/src/trace.ts +0 -178
  177. package/src/translations.ts +0 -20
  178. package/src/triggers/index.ts +0 -7
  179. package/src/triggers/input-builder.ts +0 -35
  180. package/src/triggers/invocation-tracer.ts +0 -101
  181. package/src/triggers/trigger-dispatcher.test.ts +0 -664
  182. package/src/triggers/trigger-dispatcher.ts +0 -521
  183. package/src/triggers/trigger-state-store.ts +0 -61
  184. package/src/url.ts +0 -55
@@ -1,610 +0,0 @@
1
- // src/errors.ts
2
- import { BaseError } from "@dxos/errors";
3
- var ServiceNotAvailableError = class extends BaseError.extend("SERVICE_NOT_AVAILABLE", "Service not available") {
4
- constructor(service, options) {
5
- super({
6
- context: {
7
- service
8
- },
9
- ...options
10
- });
11
- }
12
- };
13
- var FunctionNotFoundError = class extends BaseError.extend("FUNCTION_NOT_FOUND", "Function not found") {
14
- constructor(functionKey, options) {
15
- super({
16
- context: {
17
- function: functionKey
18
- },
19
- ...options
20
- });
21
- }
22
- };
23
- var FunctionError = class extends BaseError.extend("FUNCTION_ERROR", "Function invocation error") {
24
- };
25
- var TriggerStateNotFoundError = class extends BaseError.extend("TRIGGER_STATE_NOT_FOUND", "Trigger state not found") {
26
- };
27
-
28
- // src/url.ts
29
- var FUNCTIONS_META_KEY = "dxos.org/service/function";
30
- var FUNCTIONS_PRESET_META_KEY = "dxos.org/service/function-preset";
31
- var isSecure = (protocol) => {
32
- return protocol === "https:" || protocol === "wss:";
33
- };
34
- var getUserFunctionIdInMetadata = (meta) => {
35
- return meta.keys.find((key) => key.source === FUNCTIONS_META_KEY)?.id;
36
- };
37
- var setUserFunctionIdInMetadata = (meta, functionId) => {
38
- const key = meta.keys.find((key2) => key2.source === FUNCTIONS_META_KEY);
39
- if (key) {
40
- if (key.id !== functionId) {
41
- throw new Error("Metadata mismatch");
42
- }
43
- } else {
44
- meta.keys.push({
45
- source: FUNCTIONS_META_KEY,
46
- id: functionId
47
- });
48
- }
49
- };
50
- var getInvocationUrl = (functionId, edgeUrl, options = {}) => {
51
- const baseUrl = new URL("functions/", edgeUrl);
52
- const url = new URL(`./${functionId}`, baseUrl.toString());
53
- options.spaceId && url.searchParams.set("spaceId", options.spaceId);
54
- options.subjectId && url.searchParams.set("subjectId", options.subjectId);
55
- url.protocol = isSecure(url.protocol) ? "https" : "http";
56
- return url.toString();
57
- };
58
-
59
- // src/services/database.ts
60
- import * as Context from "effect/Context";
61
- import * as Effect from "effect/Effect";
62
- import * as Layer from "effect/Layer";
63
- import * as Option from "effect/Option";
64
- import { Obj, ObjectNotFoundError } from "@dxos/echo";
65
- import { promiseWithCauseCapture } from "@dxos/effect";
66
- import { invariant } from "@dxos/invariant";
67
- var __dxlog_file = "/__w/dxos/dxos/packages/core/functions/src/services/database.ts";
68
- var DatabaseService = class _DatabaseService extends Context.Tag("@dxos/functions/DatabaseService")() {
69
- static notAvailable = Layer.succeed(_DatabaseService, {
70
- get db() {
71
- throw new Error("Database not available");
72
- }
73
- });
74
- static make = (db) => {
75
- return {
76
- get db() {
77
- return db;
78
- }
79
- };
80
- };
81
- static layer = (db) => {
82
- return Layer.succeed(_DatabaseService, _DatabaseService.make(db));
83
- };
84
- /**
85
- * Resolves an object by its DXN.
86
- */
87
- static resolve = (dxn, schema) => Effect.gen(function* () {
88
- const { db } = yield* _DatabaseService;
89
- const object = yield* promiseWithCauseCapture(() => db.graph.createRefResolver({
90
- context: {
91
- space: db.spaceId
92
- }
93
- }).resolve(dxn));
94
- if (!object) {
95
- return yield* Effect.fail(new ObjectNotFoundError(dxn));
96
- }
97
- invariant(!schema || Obj.instanceOf(schema, object), "Object type mismatch.", {
98
- F: __dxlog_file,
99
- L: 82,
100
- S: this,
101
- A: [
102
- "!schema || Obj.instanceOf(schema, object)",
103
- "'Object type mismatch.'"
104
- ]
105
- });
106
- return object;
107
- });
108
- /**
109
- * Loads an object reference.
110
- */
111
- static load = Effect.fn(function* (ref) {
112
- const object = yield* promiseWithCauseCapture(() => ref.tryLoad());
113
- if (!object) {
114
- return yield* Effect.fail(new ObjectNotFoundError(ref.dxn));
115
- }
116
- return object;
117
- });
118
- /**
119
- * Loads an object reference option.
120
- */
121
- // TODO(burdon): Option?
122
- static loadOption = Effect.fn(function* (ref) {
123
- const object = yield* _DatabaseService.load(ref).pipe(Effect.catchTag("OBJECT_NOT_FOUND", () => Effect.succeed(void 0)));
124
- return Option.fromNullable(object);
125
- });
126
- // TODO(burdon): Can we create a proxy for the following methods on EchoDatabase? Use @inheritDoc?
127
- // TODO(burdon): Figure out how to chain query().run();
128
- /**
129
- * @link EchoDatabase.add
130
- */
131
- static add = (obj) => _DatabaseService.pipe(Effect.map(({ db }) => db.add(obj)));
132
- /**
133
- * @link EchoDatabase.remove
134
- */
135
- static remove = (obj) => _DatabaseService.pipe(Effect.map(({ db }) => db.remove(obj)));
136
- /**
137
- * @link EchoDatabase.flush
138
- */
139
- static flush = (opts) => _DatabaseService.pipe(Effect.flatMap(({ db }) => promiseWithCauseCapture(() => db.flush(opts))));
140
- /**
141
- * @link EchoDatabase.getObjectById
142
- */
143
- static getObjectById = (id) => {
144
- return _DatabaseService.pipe(Effect.map(({ db }) => db.getObjectById(id)));
145
- };
146
- /**
147
- * Creates a `QueryResult` object that can be subscribed to.
148
- */
149
- static query = (queryOrFilter) => _DatabaseService.pipe(Effect.map(({ db }) => db.query(queryOrFilter)), Effect.withSpan("DatabaseService.query"));
150
- /**
151
- * Executes the query once and returns the results.
152
- */
153
- static runQuery = (queryOrFilter) => _DatabaseService.query(queryOrFilter).pipe(Effect.flatMap((queryResult) => promiseWithCauseCapture(() => queryResult.run())));
154
- static schemaQuery = (query) => _DatabaseService.pipe(Effect.map(({ db }) => db.schemaRegistry.query(query)), Effect.withSpan("DatabaseService.schemaQuery"));
155
- static runSchemaQuery = (query) => _DatabaseService.schemaQuery(query).pipe(Effect.flatMap((queryResult) => promiseWithCauseCapture(() => queryResult.run())));
156
- };
157
-
158
- // src/services/credentials.ts
159
- import * as HttpClient from "@effect/platform/HttpClient";
160
- import * as HttpClientRequest from "@effect/platform/HttpClientRequest";
161
- import * as Context2 from "effect/Context";
162
- import * as Effect2 from "effect/Effect";
163
- import * as Layer2 from "effect/Layer";
164
- import * as Redacted from "effect/Redacted";
165
- import { Query } from "@dxos/echo";
166
- import { DataType } from "@dxos/schema";
167
- var CredentialsService = class _CredentialsService extends Context2.Tag("@dxos/functions/CredentialsService")() {
168
- static getCredential = (query) => Effect2.gen(function* () {
169
- const credentials = yield* _CredentialsService;
170
- return yield* Effect2.promise(() => credentials.getCredential(query));
171
- });
172
- static getApiKey = (query) => Effect2.gen(function* () {
173
- const credential = yield* _CredentialsService.getCredential(query);
174
- if (!credential.apiKey) {
175
- throw new Error(`API key not found for service: ${query.service}`);
176
- }
177
- return Redacted.make(credential.apiKey);
178
- });
179
- static configuredLayer = (credentials) => Layer2.succeed(_CredentialsService, new ConfiguredCredentialsService(credentials));
180
- static layerConfig = (credentials) => Layer2.effect(_CredentialsService, Effect2.gen(function* () {
181
- const serviceCredentials = yield* Effect2.forEach(credentials, ({ service, apiKey }) => Effect2.gen(function* () {
182
- return {
183
- service,
184
- apiKey: Redacted.value(yield* apiKey)
185
- };
186
- }));
187
- return new ConfiguredCredentialsService(serviceCredentials);
188
- }));
189
- static layerFromDatabase = () => Layer2.effect(_CredentialsService, Effect2.gen(function* () {
190
- const dbService = yield* DatabaseService;
191
- const queryCredentials = async (query) => {
192
- const { objects: accessTokens } = await dbService.db.query(Query.type(DataType.AccessToken)).run();
193
- return accessTokens.filter((accessToken) => accessToken.source === query.service).map((accessToken) => ({
194
- service: accessToken.source,
195
- apiKey: accessToken.token
196
- }));
197
- };
198
- return {
199
- getCredential: async (query) => {
200
- const credentials = await queryCredentials(query);
201
- if (credentials.length === 0) {
202
- throw new Error(`Credential not found for service: ${query.service}`);
203
- }
204
- return credentials[0];
205
- },
206
- queryCredentials: async (query) => {
207
- return queryCredentials(query);
208
- }
209
- };
210
- }));
211
- };
212
- var ConfiguredCredentialsService = class {
213
- credentials;
214
- constructor(credentials = []) {
215
- this.credentials = credentials;
216
- }
217
- addCredentials(credentials) {
218
- this.credentials.push(...credentials);
219
- return this;
220
- }
221
- async queryCredentials(query) {
222
- return this.credentials.filter((credential) => credential.service === query.service);
223
- }
224
- async getCredential(query) {
225
- const credential = this.credentials.find((credential2) => credential2.service === query.service);
226
- if (!credential) {
227
- throw new Error(`Credential not found for service: ${query.service}`);
228
- }
229
- return credential;
230
- }
231
- };
232
- var withAuthorization = (query, kind) => HttpClient.mapRequestEffect(Effect2.fnUntraced(function* (request) {
233
- const key = yield* CredentialsService.getApiKey(query).pipe(Effect2.map(Redacted.value));
234
- const authorization = kind ? `${kind} ${key}` : key;
235
- return HttpClientRequest.setHeader(request, "Authorization", authorization);
236
- }));
237
-
238
- // src/services/tracing.ts
239
- import * as Context3 from "effect/Context";
240
- import * as Effect3 from "effect/Effect";
241
- import * as Layer3 from "effect/Layer";
242
- import { AgentStatus } from "@dxos/ai";
243
- import { Obj as Obj2 } from "@dxos/echo";
244
- import { log } from "@dxos/log";
245
- import { DataType as DataType2 } from "@dxos/schema";
246
- var __dxlog_file2 = "/__w/dxos/dxos/packages/core/functions/src/services/tracing.ts";
247
- var TracingService = class _TracingService extends Context3.Tag("@dxos/functions/TracingService")() {
248
- static noop = {
249
- write: () => {
250
- },
251
- getTraceContext: () => ({})
252
- };
253
- static layerNoop = Layer3.succeed(_TracingService, _TracingService.noop);
254
- static console = {
255
- write: (event) => {
256
- console.log(event);
257
- },
258
- getTraceContext: () => ({})
259
- };
260
- static layerConsole = Layer3.succeed(_TracingService, _TracingService.console);
261
- static layerLogInfo = () => Layer3.succeed(_TracingService, {
262
- write: (event) => {
263
- if (Obj2.instanceOf(AgentStatus, event)) {
264
- log.info("status", {
265
- message: event.message
266
- }, {
267
- F: __dxlog_file2,
268
- L: 52,
269
- S: this,
270
- C: (f, a) => f(...a)
271
- });
272
- }
273
- },
274
- getTraceContext: () => ({})
275
- });
276
- /**
277
- * Creates a TracingService layer that emits events to the parent tracing service.
278
- */
279
- static layerSubframe = (mapContext) => Layer3.effect(_TracingService, Effect3.gen(function* () {
280
- const tracing = yield* _TracingService;
281
- const context = mapContext(tracing.getTraceContext());
282
- return {
283
- write: (event) => tracing.write(event),
284
- getTraceContext: () => context
285
- };
286
- }));
287
- static layerQueue = (queue) => Layer3.effect(_TracingService, Effect3.gen(function* () {
288
- return {
289
- write: (event) => queue.append([
290
- event
291
- ]),
292
- getTraceContext: () => ({
293
- debugInfo: {
294
- queue: queue.dxn.toString()
295
- }
296
- })
297
- };
298
- }));
299
- /**
300
- * Emit the current human-readable execution status.
301
- */
302
- static emitStatus = Effect3.fnUntraced(function* (data) {
303
- const tracing = yield* _TracingService;
304
- tracing.write(Obj2.make(AgentStatus, {
305
- parentMessage: tracing.getTraceContext().parentMessage,
306
- toolCallId: tracing.getTraceContext().toolCallId,
307
- created: (/* @__PURE__ */ new Date()).toISOString(),
308
- ...data
309
- }));
310
- });
311
- static emitConverationMessage = Effect3.fnUntraced(function* (data) {
312
- const tracing = yield* _TracingService;
313
- tracing.write(Obj2.make(DataType2.Message, {
314
- parentMessage: tracing.getTraceContext().parentMessage,
315
- ...data,
316
- properties: {
317
- [MESSAGE_PROPERTY_TOOL_CALL_ID]: tracing.getTraceContext().toolCallId,
318
- ...data.properties
319
- }
320
- }));
321
- });
322
- };
323
- var MESSAGE_PROPERTY_TOOL_CALL_ID = "toolCallId";
324
-
325
- // src/services/event-logger.ts
326
- import * as Context4 from "effect/Context";
327
- import * as Effect4 from "effect/Effect";
328
- import * as Layer4 from "effect/Layer";
329
- import * as Schema from "effect/Schema";
330
- import { Obj as Obj3, Type } from "@dxos/echo";
331
- import { invariant as invariant2 } from "@dxos/invariant";
332
- import { LogLevel, log as log2 } from "@dxos/log";
333
- var __dxlog_file3 = "/__w/dxos/dxos/packages/core/functions/src/services/event-logger.ts";
334
- var ComputeEventPayload = Schema.Union(Schema.Struct({
335
- type: Schema.Literal("begin-compute"),
336
- nodeId: Schema.String,
337
- inputs: Schema.Record({
338
- key: Schema.String,
339
- value: Schema.Any
340
- })
341
- }), Schema.Struct({
342
- type: Schema.Literal("end-compute"),
343
- nodeId: Schema.String,
344
- outputs: Schema.Record({
345
- key: Schema.String,
346
- value: Schema.Any
347
- })
348
- }), Schema.Struct({
349
- type: Schema.Literal("compute-input"),
350
- nodeId: Schema.String,
351
- property: Schema.String,
352
- value: Schema.Any
353
- }), Schema.Struct({
354
- type: Schema.Literal("compute-output"),
355
- nodeId: Schema.String,
356
- property: Schema.String,
357
- value: Schema.Any
358
- }), Schema.Struct({
359
- type: Schema.Literal("custom"),
360
- nodeId: Schema.String,
361
- event: Schema.Any
362
- }));
363
- var ComputeEvent = Schema.Struct({
364
- payload: ComputeEventPayload
365
- }).pipe(Type.Obj({
366
- typename: "dxos.org/type/ComputeEvent",
367
- version: "0.1.0"
368
- }));
369
- var ComputeEventLogger = class _ComputeEventLogger extends Context4.Tag("@dxos/functions/ComputeEventLogger")() {
370
- static noop = {
371
- log: () => {
372
- },
373
- nodeId: void 0
374
- };
375
- /**
376
- * Implements ComputeEventLogger using TracingService.
377
- */
378
- static layerFromTracing = Layer4.effect(_ComputeEventLogger, Effect4.gen(function* () {
379
- const tracing = yield* TracingService;
380
- return {
381
- log: (event) => {
382
- tracing.write(Obj3.make(ComputeEvent, {
383
- payload: event
384
- }));
385
- },
386
- nodeId: void 0
387
- };
388
- }));
389
- };
390
- var logCustomEvent = (data) => Effect4.gen(function* () {
391
- const logger = yield* ComputeEventLogger;
392
- if (!logger.nodeId) {
393
- throw new Error("logCustomEvent must be called within a node compute function");
394
- }
395
- logger.log({
396
- type: "custom",
397
- nodeId: logger.nodeId,
398
- event: data
399
- });
400
- });
401
- var createDefectLogger = () => Effect4.catchAll((error) => Effect4.gen(function* () {
402
- log2.error("unhandled effect error", {
403
- error
404
- }, {
405
- F: __dxlog_file3,
406
- L: 96,
407
- S: this,
408
- C: (f, a) => f(...a)
409
- });
410
- throw error;
411
- }));
412
- var createEventLogger = (level, message = "event") => {
413
- const logFunction = {
414
- [LogLevel.WARN]: log2.warn,
415
- [LogLevel.VERBOSE]: log2.verbose,
416
- [LogLevel.DEBUG]: log2.debug,
417
- [LogLevel.INFO]: log2.info,
418
- [LogLevel.ERROR]: log2.error
419
- }[level];
420
- invariant2(logFunction, void 0, {
421
- F: __dxlog_file3,
422
- L: 114,
423
- S: void 0,
424
- A: [
425
- "logFunction",
426
- ""
427
- ]
428
- });
429
- return {
430
- log: (event) => {
431
- logFunction(message, event);
432
- },
433
- nodeId: void 0
434
- };
435
- };
436
-
437
- // src/services/queues.ts
438
- import * as Context5 from "effect/Context";
439
- import * as Effect5 from "effect/Effect";
440
- import * as Layer5 from "effect/Layer";
441
- var QueueService = class _QueueService extends Context5.Tag("@dxos/functions/QueueService")() {
442
- static notAvailable = Layer5.succeed(_QueueService, {
443
- queues: {
444
- get(_dxn) {
445
- throw new Error("Queues not available");
446
- },
447
- create() {
448
- throw new Error("Queues not available");
449
- }
450
- },
451
- queue: void 0
452
- });
453
- static make = (queues, queue) => {
454
- return {
455
- queues,
456
- queue
457
- };
458
- };
459
- static layer = (queues, queue) => Layer5.succeed(_QueueService, _QueueService.make(queues, queue));
460
- /**
461
- * Gets a queue by its DXN.
462
- */
463
- static getQueue = (dxn) => _QueueService.pipe(Effect5.map(({ queues }) => queues.get(dxn)));
464
- /**
465
- * Creates a new queue.
466
- */
467
- static createQueue = (options) => _QueueService.pipe(Effect5.map(({ queues }) => queues.create(options)));
468
- static append = (queue, objects) => Effect5.promise(() => queue.append(objects));
469
- };
470
- var ContextQueueService = class _ContextQueueService extends Context5.Tag("@dxos/functions/ContextQueueService")() {
471
- static layer = (queue) => Layer5.succeed(_ContextQueueService, {
472
- queue
473
- });
474
- };
475
-
476
- // src/services/remote-function-execution-service.ts
477
- import * as Context6 from "effect/Context";
478
- import * as Effect6 from "effect/Effect";
479
- import * as Layer6 from "effect/Layer";
480
- var RemoteFunctionExecutionService = class _RemoteFunctionExecutionService extends Context6.Tag("@dxos/functions/RemoteFunctionExecutionService")() {
481
- /**
482
- * @param baseUrl URL of the EDGE server.
483
- * @param spaceId - The space ID to invoke the function in. If not provided, the function will be without space context.
484
- * @returns
485
- */
486
- static fromClient(baseUrl, spaceId) {
487
- return Layer6.succeed(_RemoteFunctionExecutionService, {
488
- callFunction: (deployedFunctionId, input) => Effect6.gen(function* () {
489
- const url = getInvocationUrl(deployedFunctionId, baseUrl, {
490
- spaceId
491
- });
492
- const result = yield* Effect6.promise(() => fetch(url, {
493
- method: "POST",
494
- headers: {
495
- "Content-Type": "application/json"
496
- },
497
- body: JSON.stringify(input)
498
- }));
499
- if (result.status >= 300 || result.status < 200) {
500
- const text = yield* Effect6.promise(() => result.text());
501
- return yield* Effect6.die(new FunctionError({
502
- message: "Failed to invoke function",
503
- cause: new Error(`HTTP error: ${text}`)
504
- }));
505
- }
506
- const data = yield* Effect6.promise(() => result.json());
507
- return data;
508
- })
509
- });
510
- }
511
- static mock = () => {
512
- return {
513
- callFunction: (deployedFunctionId, input) => Effect6.succeed(input)
514
- };
515
- };
516
- static layerMock = Layer6.succeed(_RemoteFunctionExecutionService, _RemoteFunctionExecutionService.mock());
517
- };
518
-
519
- // src/services/service-container.ts
520
- import * as Layer7 from "effect/Layer";
521
- import { AiService } from "@dxos/ai";
522
- import { entries } from "@dxos/util";
523
- var SERVICES = {
524
- ai: AiService.AiService,
525
- credentials: CredentialsService,
526
- database: DatabaseService,
527
- eventLogger: ComputeEventLogger,
528
- functionCallService: RemoteFunctionExecutionService,
529
- queues: QueueService,
530
- tracing: TracingService
531
- };
532
- var SERVICE_MAPPING = Object.fromEntries(entries(SERVICES).map(([name, tag]) => [
533
- tag.key,
534
- name
535
- ]));
536
- var SERVICE_TAGS = Object.values(SERVICES);
537
- var DEFAULT_SERVICES = {
538
- tracing: TracingService.noop
539
- };
540
- var ServiceContainer = class _ServiceContainer {
541
- _services = {
542
- ...DEFAULT_SERVICES
543
- };
544
- /**
545
- * Set services.
546
- * @param services - Services to set.
547
- * @returns The container instance.
548
- */
549
- setServices(services) {
550
- this._services = {
551
- ...this._services,
552
- ...services
553
- };
554
- return this;
555
- }
556
- getService(tag) {
557
- const serviceKey = SERVICE_MAPPING[tag.key];
558
- const service = serviceKey != null ? this._services[serviceKey] : void 0;
559
- if (!service) {
560
- throw new Error(`Service not available: ${tag.key}`);
561
- }
562
- return service;
563
- }
564
- clone() {
565
- return new _ServiceContainer().setServices({
566
- ...this._services
567
- });
568
- }
569
- // TODO(dmaretskyi): `getService` is designed to error at runtime if the service is not available, but Layer forces us to provide all services and makes stubs for the ones that are not available.
570
- createLayer() {
571
- const ai = this._services.ai != null ? Layer7.succeed(AiService.AiService, this._services.ai) : AiService.notAvailable;
572
- const credentials = Layer7.succeed(CredentialsService, this._services.credentials ?? new ConfiguredCredentialsService());
573
- const database = this._services.database != null ? Layer7.succeed(DatabaseService, this._services.database) : DatabaseService.notAvailable;
574
- const queues = this._services.queues != null ? Layer7.succeed(QueueService, this._services.queues) : QueueService.notAvailable;
575
- const tracing = Layer7.succeed(TracingService, this._services.tracing ?? TracingService.noop);
576
- const eventLogger = Layer7.succeed(ComputeEventLogger, this._services.eventLogger ?? ComputeEventLogger.noop);
577
- const functionCallService = Layer7.succeed(RemoteFunctionExecutionService, this._services.functionCallService ?? RemoteFunctionExecutionService.mock());
578
- return Layer7.mergeAll(ai, credentials, database, queues, tracing, eventLogger, functionCallService);
579
- }
580
- };
581
-
582
- export {
583
- ServiceNotAvailableError,
584
- FunctionNotFoundError,
585
- FunctionError,
586
- TriggerStateNotFoundError,
587
- FUNCTIONS_META_KEY,
588
- FUNCTIONS_PRESET_META_KEY,
589
- getUserFunctionIdInMetadata,
590
- setUserFunctionIdInMetadata,
591
- getInvocationUrl,
592
- DatabaseService,
593
- CredentialsService,
594
- ConfiguredCredentialsService,
595
- withAuthorization,
596
- TracingService,
597
- MESSAGE_PROPERTY_TOOL_CALL_ID,
598
- ComputeEventPayload,
599
- ComputeEvent,
600
- ComputeEventLogger,
601
- logCustomEvent,
602
- createDefectLogger,
603
- createEventLogger,
604
- QueueService,
605
- ContextQueueService,
606
- RemoteFunctionExecutionService,
607
- SERVICE_TAGS,
608
- ServiceContainer
609
- };
610
- //# sourceMappingURL=chunk-M6EXIREF.mjs.map