@dxos/functions 0.8.4-main.c85a9c8dae → 0.8.4-main.cb12b3f963
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/lib/neutral/index.mjs +155 -920
- package/dist/lib/neutral/index.mjs.map +4 -4
- package/dist/lib/neutral/meta.json +1 -1
- package/dist/types/src/index.d.ts +0 -2
- package/dist/types/src/index.d.ts.map +1 -1
- package/dist/types/src/protocol/functions-ai-http-client.d.ts.map +1 -1
- package/dist/types/src/protocol/protocol.d.ts +2 -2
- package/dist/types/src/protocol/protocol.d.ts.map +1 -1
- package/dist/types/src/sdk.d.ts +5 -112
- package/dist/types/src/sdk.d.ts.map +1 -1
- package/dist/types/src/services/credentials.d.ts +15 -38
- package/dist/types/src/services/credentials.d.ts.map +1 -1
- package/dist/types/src/services/function-invocation-service.d.ts +5 -6
- package/dist/types/src/services/function-invocation-service.d.ts.map +1 -1
- package/dist/types/src/services/index.d.ts +1 -4
- package/dist/types/src/services/index.d.ts.map +1 -1
- package/dist/types/src/services/queues.d.ts +1 -46
- package/dist/types/src/services/queues.d.ts.map +1 -1
- package/dist/types/src/services/tracing.d.ts +1 -84
- package/dist/types/src/services/tracing.d.ts.map +1 -1
- package/dist/types/src/types/index.d.ts +0 -4
- package/dist/types/src/types/index.d.ts.map +1 -1
- package/dist/types/src/types/url.d.ts +3 -3
- package/dist/types/src/types/url.d.ts.map +1 -1
- package/dist/types/tsconfig.tsbuildinfo +1 -1
- package/package.json +17 -16
- package/src/index.ts +0 -2
- package/src/protocol/protocol.test.ts +9 -10
- package/src/protocol/protocol.ts +68 -34
- package/src/sdk.ts +10 -278
- package/src/services/credentials.ts +75 -118
- package/src/services/function-invocation-service.ts +6 -10
- package/src/services/index.ts +1 -4
- package/src/services/queues.ts +1 -78
- package/src/services/tracing.ts +0 -159
- package/src/types/index.ts +0 -4
- package/src/types/url.ts +3 -3
- package/dist/types/src/errors.d.ts +0 -121
- package/dist/types/src/errors.d.ts.map +0 -1
- package/dist/types/src/example/fib.d.ts +0 -7
- package/dist/types/src/example/fib.d.ts.map +0 -1
- package/dist/types/src/example/forex-effect.d.ts +0 -3
- package/dist/types/src/example/forex-effect.d.ts.map +0 -1
- package/dist/types/src/example/index.d.ts +0 -12
- package/dist/types/src/example/index.d.ts.map +0 -1
- package/dist/types/src/example/reply.d.ts +0 -3
- package/dist/types/src/example/reply.d.ts.map +0 -1
- package/dist/types/src/example/sleep.d.ts +0 -5
- package/dist/types/src/example/sleep.d.ts.map +0 -1
- package/dist/types/src/operation-compatibility.test.d.ts +0 -2
- package/dist/types/src/operation-compatibility.test.d.ts.map +0 -1
- package/dist/types/src/services/event-logger.d.ts +0 -81
- package/dist/types/src/services/event-logger.d.ts.map +0 -1
- package/dist/types/src/types/Function.d.ts +0 -52
- package/dist/types/src/types/Function.d.ts.map +0 -1
- package/dist/types/src/types/Script.d.ts +0 -21
- package/dist/types/src/types/Script.d.ts.map +0 -1
- package/dist/types/src/types/Trigger.d.ts +0 -122
- package/dist/types/src/types/Trigger.d.ts.map +0 -1
- package/dist/types/src/types/TriggerEvent.d.ts +0 -75
- package/dist/types/src/types/TriggerEvent.d.ts.map +0 -1
- package/src/errors.ts +0 -21
- package/src/example/fib.ts +0 -32
- package/src/example/forex-effect.ts +0 -40
- package/src/example/index.ts +0 -13
- package/src/example/reply.ts +0 -21
- package/src/example/sleep.ts +0 -24
- package/src/operation-compatibility.test.ts +0 -185
- package/src/services/event-logger.ts +0 -127
- package/src/types/Function.ts +0 -83
- package/src/types/Script.ts +0 -34
- package/src/types/Trigger.ts +0 -153
- package/src/types/TriggerEvent.ts +0 -62
|
@@ -1,618 +1,13 @@
|
|
|
1
|
-
var __defProp = Object.defineProperty;
|
|
2
|
-
var __export = (target, all) => {
|
|
3
|
-
for (var name in all)
|
|
4
|
-
__defProp(target, name, { get: all[name], enumerable: true });
|
|
5
|
-
};
|
|
6
|
-
|
|
7
|
-
// src/errors.ts
|
|
8
|
-
import { BaseError } from "@dxos/errors";
|
|
9
|
-
var ServiceNotAvailableError = class extends BaseError.extend("ServiceNotAvailable", "Service not available") {
|
|
10
|
-
constructor(service, options) {
|
|
11
|
-
super({
|
|
12
|
-
context: {
|
|
13
|
-
service
|
|
14
|
-
},
|
|
15
|
-
...options
|
|
16
|
-
});
|
|
17
|
-
}
|
|
18
|
-
};
|
|
19
|
-
var FunctionNotFoundError = class extends BaseError.extend("FunctionNotFound", "Function not found") {
|
|
20
|
-
constructor(functionKey, options) {
|
|
21
|
-
super({
|
|
22
|
-
context: {
|
|
23
|
-
function: functionKey
|
|
24
|
-
},
|
|
25
|
-
...options
|
|
26
|
-
});
|
|
27
|
-
}
|
|
28
|
-
};
|
|
29
|
-
var FunctionError = class extends BaseError.extend("FunctionError", "Function invocation error") {
|
|
30
|
-
};
|
|
31
|
-
var TriggerStateNotFoundError = class extends BaseError.extend("TriggerStateNotFound", "Trigger state not found") {
|
|
32
|
-
};
|
|
33
|
-
|
|
34
|
-
// src/example/fib.ts
|
|
35
|
-
import * as Effect2 from "effect/Effect";
|
|
36
|
-
import * as Schema6 from "effect/Schema";
|
|
37
|
-
|
|
38
|
-
// src/sdk.ts
|
|
39
|
-
import * as Effect from "effect/Effect";
|
|
40
|
-
import * as Schema5 from "effect/Schema";
|
|
41
|
-
import { JsonSchema as JsonSchema2, Obj as Obj5 } from "@dxos/echo";
|
|
42
|
-
import { assertArgument, failedInvariant } from "@dxos/invariant";
|
|
43
|
-
import { Operation } from "@dxos/operation";
|
|
44
|
-
|
|
45
|
-
// src/types/Function.ts
|
|
46
|
-
var Function_exports = {};
|
|
47
|
-
__export(Function_exports, {
|
|
48
|
-
Function: () => Function,
|
|
49
|
-
make: () => make2,
|
|
50
|
-
setFrom: () => setFrom
|
|
51
|
-
});
|
|
52
|
-
import * as Schema2 from "effect/Schema";
|
|
53
|
-
import { Annotation as Annotation2, JsonSchema, Obj as Obj2, Ref as Ref2, Type as Type2 } from "@dxos/echo";
|
|
54
|
-
import { SystemTypeAnnotation } from "@dxos/echo/internal";
|
|
55
|
-
|
|
56
|
-
// src/types/Script.ts
|
|
57
|
-
var Script_exports = {};
|
|
58
|
-
__export(Script_exports, {
|
|
59
|
-
Script: () => Script,
|
|
60
|
-
make: () => make
|
|
61
|
-
});
|
|
62
|
-
import * as Schema from "effect/Schema";
|
|
63
|
-
import { Annotation, Obj, Ref, Type } from "@dxos/echo";
|
|
64
|
-
import { FormInputAnnotation } from "@dxos/echo/internal";
|
|
65
|
-
import { Text } from "@dxos/schema";
|
|
66
|
-
var Script = Schema.Struct({
|
|
67
|
-
name: Schema.String.pipe(Schema.optional),
|
|
68
|
-
description: Schema.String.pipe(Schema.optional),
|
|
69
|
-
// TODO(burdon): Change to hash of deployed content.
|
|
70
|
-
// Whether source has changed since last deploy.
|
|
71
|
-
changed: Schema.Boolean.pipe(FormInputAnnotation.set(false), Schema.optional),
|
|
72
|
-
source: Ref.Ref(Text.Text).pipe(FormInputAnnotation.set(false))
|
|
73
|
-
}).pipe(Type.object({
|
|
74
|
-
typename: "dxos.org/type/Script",
|
|
75
|
-
version: "0.1.0"
|
|
76
|
-
}), Annotation.LabelAnnotation.set([
|
|
77
|
-
"name"
|
|
78
|
-
]));
|
|
79
|
-
var make = ({ source = "", ...props } = {}) => Obj.make(Script, {
|
|
80
|
-
...props,
|
|
81
|
-
source: Ref.make(Text.make(source))
|
|
82
|
-
});
|
|
83
|
-
|
|
84
|
-
// src/types/Function.ts
|
|
85
|
-
var Function = Schema2.Struct({
|
|
86
|
-
/**
|
|
87
|
-
* Global registry ID.
|
|
88
|
-
* NOTE: The `key` property refers to the original registry entry.
|
|
89
|
-
*/
|
|
90
|
-
// TODO(burdon): Create Format type for DXN-like ids, such as this and schema type.
|
|
91
|
-
// TODO(dmaretskyi): Consider making it part of ECHO meta.
|
|
92
|
-
// TODO(dmaretskyi): Make required.
|
|
93
|
-
key: Schema2.optional(Schema2.String).annotations({
|
|
94
|
-
description: "Unique registration key for the blueprint"
|
|
95
|
-
}),
|
|
96
|
-
name: Schema2.NonEmptyString,
|
|
97
|
-
version: Schema2.String,
|
|
98
|
-
description: Schema2.optional(Schema2.String),
|
|
99
|
-
/**
|
|
100
|
-
* ISO date string of the last deployment.
|
|
101
|
-
*/
|
|
102
|
-
updated: Schema2.optional(Schema2.String),
|
|
103
|
-
// Reference to a source script if it exists within ECHO.
|
|
104
|
-
// TODO(burdon): Don't ref ScriptType directly (core).
|
|
105
|
-
source: Schema2.optional(Ref2.Ref(Script)),
|
|
106
|
-
inputSchema: Schema2.optional(JsonSchema.JsonSchema),
|
|
107
|
-
outputSchema: Schema2.optional(JsonSchema.JsonSchema),
|
|
108
|
-
/**
|
|
109
|
-
* List of required services.
|
|
110
|
-
* Match the Context.Tag keys of the FunctionServices variants.
|
|
111
|
-
*/
|
|
112
|
-
services: Schema2.optional(Schema2.Array(Schema2.String)),
|
|
113
|
-
// Local binding to a function name.
|
|
114
|
-
binding: Schema2.optional(Schema2.String)
|
|
115
|
-
}).pipe(Type2.object({
|
|
116
|
-
typename: "dxos.org/type/Function",
|
|
117
|
-
version: "0.1.0"
|
|
118
|
-
}), Annotation2.LabelAnnotation.set([
|
|
119
|
-
"name"
|
|
120
|
-
]), Annotation2.IconAnnotation.set({
|
|
121
|
-
icon: "ph--function--regular",
|
|
122
|
-
hue: "blue"
|
|
123
|
-
}), SystemTypeAnnotation.set(true));
|
|
124
|
-
var make2 = (props) => Obj2.make(Function, props);
|
|
125
|
-
var setFrom = (target, source) => {
|
|
126
|
-
Obj2.change(target, (t) => {
|
|
127
|
-
t.key = source.key ?? target.key;
|
|
128
|
-
t.name = source.name ?? target.name;
|
|
129
|
-
t.version = source.version;
|
|
130
|
-
t.description = source.description;
|
|
131
|
-
t.updated = source.updated;
|
|
132
|
-
t.inputSchema = source.inputSchema ? JSON.parse(JSON.stringify(source.inputSchema)) : void 0;
|
|
133
|
-
t.outputSchema = source.outputSchema ? JSON.parse(JSON.stringify(source.outputSchema)) : void 0;
|
|
134
|
-
Obj2.getMeta(t).keys = JSON.parse(JSON.stringify(Obj2.getMeta(source).keys));
|
|
135
|
-
});
|
|
136
|
-
};
|
|
137
|
-
|
|
138
|
-
// src/types/Trigger.ts
|
|
139
|
-
var Trigger_exports = {};
|
|
140
|
-
__export(Trigger_exports, {
|
|
141
|
-
EmailSpec: () => EmailSpec,
|
|
142
|
-
Kinds: () => Kinds,
|
|
143
|
-
QueueSpec: () => QueueSpec,
|
|
144
|
-
Spec: () => Spec,
|
|
145
|
-
SubscriptionSpec: () => SubscriptionSpec,
|
|
146
|
-
TimerSpec: () => TimerSpec,
|
|
147
|
-
Trigger: () => Trigger,
|
|
148
|
-
WebhookSpec: () => WebhookSpec,
|
|
149
|
-
make: () => make3
|
|
150
|
-
});
|
|
151
|
-
import * as Schema3 from "effect/Schema";
|
|
152
|
-
import * as SchemaAST from "effect/SchemaAST";
|
|
153
|
-
import { Annotation as Annotation3, Obj as Obj3, QueryAST, Ref as Ref3, Type as Type3 } from "@dxos/echo";
|
|
154
|
-
import { OptionsAnnotationId, SystemTypeAnnotation as SystemTypeAnnotation2 } from "@dxos/echo/internal";
|
|
155
|
-
import { DXN } from "@dxos/keys";
|
|
156
|
-
import { Expando } from "@dxos/schema";
|
|
157
|
-
var Kinds = [
|
|
158
|
-
"email",
|
|
159
|
-
"queue",
|
|
160
|
-
"subscription",
|
|
161
|
-
"timer",
|
|
162
|
-
"webhook"
|
|
163
|
-
];
|
|
164
|
-
var kindLiteralAnnotations = {
|
|
165
|
-
title: "Kind"
|
|
166
|
-
};
|
|
167
|
-
var EmailSpec = Schema3.Struct({
|
|
168
|
-
kind: Schema3.Literal("email").annotations(kindLiteralAnnotations)
|
|
169
|
-
});
|
|
170
|
-
var QueueSpec = Schema3.Struct({
|
|
171
|
-
kind: Schema3.Literal("queue").annotations(kindLiteralAnnotations),
|
|
172
|
-
// TODO(dmaretskyi): Change to a reference.
|
|
173
|
-
queue: DXN.Schema
|
|
174
|
-
});
|
|
175
|
-
var SubscriptionSpec = Schema3.Struct({
|
|
176
|
-
kind: Schema3.Literal("subscription").annotations(kindLiteralAnnotations),
|
|
177
|
-
query: Schema3.Struct({
|
|
178
|
-
raw: Schema3.optional(Schema3.String.annotations({
|
|
179
|
-
title: "Query"
|
|
180
|
-
})),
|
|
181
|
-
ast: QueryAST.Query
|
|
182
|
-
}),
|
|
183
|
-
options: Schema3.optional(Schema3.Struct({
|
|
184
|
-
// Watch changes to object (not just creation).
|
|
185
|
-
deep: Schema3.optional(Schema3.Boolean.annotations({
|
|
186
|
-
title: "Nested"
|
|
187
|
-
})),
|
|
188
|
-
// Debounce changes (delay in ms).
|
|
189
|
-
delay: Schema3.optional(Schema3.Number.annotations({
|
|
190
|
-
title: "Delay"
|
|
191
|
-
}))
|
|
192
|
-
}).annotations({
|
|
193
|
-
title: "Options"
|
|
194
|
-
}))
|
|
195
|
-
});
|
|
196
|
-
var TimerSpec = Schema3.Struct({
|
|
197
|
-
kind: Schema3.Literal("timer").annotations(kindLiteralAnnotations),
|
|
198
|
-
cron: Schema3.String.annotations({
|
|
199
|
-
title: "Cron",
|
|
200
|
-
[SchemaAST.ExamplesAnnotationId]: [
|
|
201
|
-
"0 0 * * *"
|
|
202
|
-
]
|
|
203
|
-
})
|
|
204
|
-
});
|
|
205
|
-
var WebhookSpec = Schema3.Struct({
|
|
206
|
-
kind: Schema3.Literal("webhook").annotations(kindLiteralAnnotations),
|
|
207
|
-
method: Schema3.optional(Schema3.String.annotations({
|
|
208
|
-
title: "Method",
|
|
209
|
-
[OptionsAnnotationId]: [
|
|
210
|
-
"GET",
|
|
211
|
-
"POST"
|
|
212
|
-
]
|
|
213
|
-
})),
|
|
214
|
-
port: Schema3.optional(Schema3.Number.annotations({
|
|
215
|
-
title: "Port"
|
|
216
|
-
}))
|
|
217
|
-
});
|
|
218
|
-
var Spec = Schema3.Union(EmailSpec, QueueSpec, SubscriptionSpec, TimerSpec, WebhookSpec).annotations({
|
|
219
|
-
title: "Trigger"
|
|
220
|
-
});
|
|
221
|
-
var TriggerSchema = Schema3.Struct({
|
|
222
|
-
/**
|
|
223
|
-
* Function or workflow to invoke.
|
|
224
|
-
*/
|
|
225
|
-
// TODO(dmaretskyi): Can be a Ref(FunctionType) or Ref(ComputeGraphType).
|
|
226
|
-
function: Schema3.optional(Ref3.Ref(Expando.Expando).annotations({
|
|
227
|
-
title: "Function"
|
|
228
|
-
})),
|
|
229
|
-
/**
|
|
230
|
-
* Only used for workflowSchema.
|
|
231
|
-
* Specifies the input node in the circuit.
|
|
232
|
-
* @deprecated Remove and enforce a single input node in all compute graphSchema.
|
|
233
|
-
*/
|
|
234
|
-
inputNodeId: Schema3.optional(Schema3.String.annotations({
|
|
235
|
-
title: "Input Node ID"
|
|
236
|
-
})),
|
|
237
|
-
// TODO(burdon): NO BOOLEAN PROPERTIES (enabld/disabled/paused, etc.)
|
|
238
|
-
// Need lint rule; or agent rule to require PR review for "boolean" key word.
|
|
239
|
-
enabled: Schema3.optional(Schema3.Boolean.annotations({
|
|
240
|
-
title: "Enabled"
|
|
241
|
-
})),
|
|
242
|
-
spec: Schema3.optional(Spec),
|
|
243
|
-
concurrency: Schema3.optional(Schema3.Number.annotations({
|
|
244
|
-
title: "Concurrency",
|
|
245
|
-
default: 1,
|
|
246
|
-
description: "Maximum number of concurrent invocations of the trigger. For queue triggers, this will process queue items in parallel."
|
|
247
|
-
})),
|
|
248
|
-
/**
|
|
249
|
-
* Passed as the input data to the function.
|
|
250
|
-
* Must match the function's input schema.
|
|
251
|
-
*
|
|
252
|
-
* @example
|
|
253
|
-
* {
|
|
254
|
-
* item: '{{$.trigger.event}}',
|
|
255
|
-
* instructions: 'Summarize and perform entity-extraction'
|
|
256
|
-
* mailbox: { '/': 'dxn:echo:AAA:ZZZ' }
|
|
257
|
-
* }
|
|
258
|
-
*/
|
|
259
|
-
input: Schema3.optional(Schema3.Record({
|
|
260
|
-
key: Schema3.String,
|
|
261
|
-
value: Schema3.Any
|
|
262
|
-
}))
|
|
263
|
-
}).pipe(Type3.object({
|
|
264
|
-
typename: "dxos.org/type/Trigger",
|
|
265
|
-
version: "0.1.0"
|
|
266
|
-
}), Annotation3.IconAnnotation.set({
|
|
267
|
-
icon: "ph--lightning--regular",
|
|
268
|
-
hue: "yellow"
|
|
269
|
-
}), SystemTypeAnnotation2.set(true));
|
|
270
|
-
var Trigger = TriggerSchema;
|
|
271
|
-
var make3 = (props) => Obj3.make(Trigger, props);
|
|
272
|
-
|
|
273
|
-
// src/types/TriggerEvent.ts
|
|
274
|
-
var TriggerEvent_exports = {};
|
|
275
|
-
__export(TriggerEvent_exports, {
|
|
276
|
-
EmailEvent: () => EmailEvent,
|
|
277
|
-
QueueEvent: () => QueueEvent,
|
|
278
|
-
SubscriptionEvent: () => SubscriptionEvent,
|
|
279
|
-
TimerEvent: () => TimerEvent,
|
|
280
|
-
TriggerEvent: () => TriggerEvent,
|
|
281
|
-
WebhookEvent: () => WebhookEvent
|
|
282
|
-
});
|
|
283
|
-
import * as Schema4 from "effect/Schema";
|
|
284
|
-
import { DXN as DXN2, Obj as Obj4, Ref as Ref4 } from "@dxos/echo";
|
|
285
|
-
var EmailEvent = Schema4.Struct({
|
|
286
|
-
from: Schema4.String,
|
|
287
|
-
to: Schema4.String,
|
|
288
|
-
subject: Schema4.String,
|
|
289
|
-
created: Schema4.String,
|
|
290
|
-
body: Schema4.String
|
|
291
|
-
});
|
|
292
|
-
var QueueEvent = Schema4.Struct({
|
|
293
|
-
queue: DXN2.Schema,
|
|
294
|
-
item: Schema4.Any,
|
|
295
|
-
cursor: Schema4.String
|
|
296
|
-
});
|
|
297
|
-
var SubscriptionEvent = Schema4.Struct({
|
|
298
|
-
/**
|
|
299
|
-
* Type of the mutation.
|
|
300
|
-
*/
|
|
301
|
-
// TODO(dmaretskyi): Specify enum.
|
|
302
|
-
type: Schema4.String,
|
|
303
|
-
/**
|
|
304
|
-
* Reference to the object that was changed or created.
|
|
305
|
-
*/
|
|
306
|
-
subject: Ref4.Ref(Obj4.Unknown),
|
|
307
|
-
/**
|
|
308
|
-
* @deprecated
|
|
309
|
-
*/
|
|
310
|
-
changedObjectId: Schema4.optional(Schema4.String)
|
|
311
|
-
});
|
|
312
|
-
var TimerEvent = Schema4.Struct({
|
|
313
|
-
tick: Schema4.Number
|
|
314
|
-
});
|
|
315
|
-
var WebhookEvent = Schema4.Struct({
|
|
316
|
-
url: Schema4.String,
|
|
317
|
-
method: Schema4.Literal("GET", "POST"),
|
|
318
|
-
headers: Schema4.Record({
|
|
319
|
-
key: Schema4.String,
|
|
320
|
-
value: Schema4.String
|
|
321
|
-
}),
|
|
322
|
-
bodyText: Schema4.String
|
|
323
|
-
});
|
|
324
|
-
var TriggerEvent = Schema4.Union(EmailEvent, QueueEvent, SubscriptionEvent, TimerEvent, WebhookEvent);
|
|
325
|
-
|
|
326
|
-
// src/types/url.ts
|
|
327
|
-
var FUNCTIONS_META_KEY = "dxos.org/service/function";
|
|
328
|
-
var FUNCTIONS_PRESET_META_KEY = "dxos.org/service/function-preset";
|
|
329
|
-
var getUserFunctionIdInMetadata = (meta) => {
|
|
330
|
-
return meta.keys.find((key) => key.source === FUNCTIONS_META_KEY)?.id;
|
|
331
|
-
};
|
|
332
|
-
var setUserFunctionIdInMetadata = (meta, functionId) => {
|
|
333
|
-
const key = meta.keys.find((key2) => key2.source === FUNCTIONS_META_KEY);
|
|
334
|
-
if (key) {
|
|
335
|
-
if (key.id !== functionId) {
|
|
336
|
-
throw new Error("Metadata mismatch");
|
|
337
|
-
}
|
|
338
|
-
} else {
|
|
339
|
-
meta.keys.push({
|
|
340
|
-
source: FUNCTIONS_META_KEY,
|
|
341
|
-
id: functionId
|
|
342
|
-
});
|
|
343
|
-
}
|
|
344
|
-
};
|
|
345
|
-
|
|
346
|
-
// src/sdk.ts
|
|
347
|
-
var typeId = /* @__PURE__ */ Symbol.for("@dxos/functions/FunctionDefinition");
|
|
348
|
-
var defineFunction = ({ key, name, description, inputSchema, outputSchema = Schema5.Any, handler, types, services }) => {
|
|
349
|
-
if (!Schema5.isSchema(inputSchema)) {
|
|
350
|
-
throw new Error("Input schema must be a valid schema");
|
|
351
|
-
}
|
|
352
|
-
if (typeof handler !== "function") {
|
|
353
|
-
throw new Error("Handler must be a function");
|
|
354
|
-
}
|
|
355
|
-
const limit = Error.stackTraceLimit;
|
|
356
|
-
Error.stackTraceLimit = 2;
|
|
357
|
-
const traceError = new Error();
|
|
358
|
-
Error.stackTraceLimit = limit;
|
|
359
|
-
let cache = false;
|
|
360
|
-
const captureStackTrace = () => {
|
|
361
|
-
if (cache !== false) {
|
|
362
|
-
return cache;
|
|
363
|
-
}
|
|
364
|
-
if (traceError.stack !== void 0) {
|
|
365
|
-
const stack = traceError.stack.split("\n");
|
|
366
|
-
if (stack[2] !== void 0) {
|
|
367
|
-
cache = stack[2].trim();
|
|
368
|
-
return cache;
|
|
369
|
-
}
|
|
370
|
-
}
|
|
371
|
-
};
|
|
372
|
-
const handlerWithSpan = (...args) => {
|
|
373
|
-
const result = handler(...args);
|
|
374
|
-
if (Effect.isEffect(result)) {
|
|
375
|
-
return Effect.withSpan(result, `${key ?? name}`, {
|
|
376
|
-
captureStackTrace
|
|
377
|
-
});
|
|
378
|
-
}
|
|
379
|
-
return result;
|
|
380
|
-
};
|
|
381
|
-
return {
|
|
382
|
-
[typeId]: true,
|
|
383
|
-
key,
|
|
384
|
-
name,
|
|
385
|
-
description,
|
|
386
|
-
inputSchema,
|
|
387
|
-
outputSchema,
|
|
388
|
-
handler: handlerWithSpan,
|
|
389
|
-
types: types ?? [],
|
|
390
|
-
services: !services ? [] : getServiceKeys(services)
|
|
391
|
-
};
|
|
392
|
-
};
|
|
393
|
-
var getServiceKeys = (services) => {
|
|
394
|
-
return services.map((tag) => {
|
|
395
|
-
if (typeof tag.key === "string") {
|
|
396
|
-
return tag.key;
|
|
397
|
-
}
|
|
398
|
-
failedInvariant();
|
|
399
|
-
});
|
|
400
|
-
};
|
|
401
|
-
var toOperation = (functionDef) => {
|
|
402
|
-
const op = Operation.make({
|
|
403
|
-
schema: {
|
|
404
|
-
input: functionDef.inputSchema,
|
|
405
|
-
output: functionDef.outputSchema ?? Schema5.Any
|
|
406
|
-
},
|
|
407
|
-
meta: {
|
|
408
|
-
key: functionDef.key,
|
|
409
|
-
name: functionDef.name,
|
|
410
|
-
description: functionDef.description
|
|
411
|
-
}
|
|
412
|
-
});
|
|
413
|
-
const operationHandler = (input) => {
|
|
414
|
-
const result = functionDef.handler({
|
|
415
|
-
context: {},
|
|
416
|
-
data: input
|
|
417
|
-
});
|
|
418
|
-
if (Effect.isEffect(result)) {
|
|
419
|
-
return result;
|
|
420
|
-
}
|
|
421
|
-
if (result instanceof Promise) {
|
|
422
|
-
return Effect.tryPromise(() => result);
|
|
423
|
-
}
|
|
424
|
-
return Effect.succeed(result);
|
|
425
|
-
};
|
|
426
|
-
return {
|
|
427
|
-
...op,
|
|
428
|
-
handler: operationHandler
|
|
429
|
-
};
|
|
430
|
-
};
|
|
431
|
-
var FunctionDefinition = {
|
|
432
|
-
make: defineFunction,
|
|
433
|
-
isFunction: (value2) => {
|
|
434
|
-
return typeof value2 === "object" && value2 !== null && /* @__PURE__ */ Symbol.for("@dxos/functions/FunctionDefinition") in value2;
|
|
435
|
-
},
|
|
436
|
-
serialize: (functionDef) => {
|
|
437
|
-
assertArgument(FunctionDefinition.isFunction(functionDef), "functionDef");
|
|
438
|
-
return serializeFunction(functionDef);
|
|
439
|
-
},
|
|
440
|
-
deserialize: (functionObj) => {
|
|
441
|
-
assertArgument(Obj5.instanceOf(Function_exports.Function, functionObj), "functionObj");
|
|
442
|
-
return deserializeFunction(functionObj);
|
|
443
|
-
},
|
|
444
|
-
toOperation
|
|
445
|
-
};
|
|
446
|
-
var serializeFunction = (functionDef) => {
|
|
447
|
-
const fn4 = Function_exports.make({
|
|
448
|
-
key: functionDef.key,
|
|
449
|
-
name: functionDef.name,
|
|
450
|
-
version: "0.1.0",
|
|
451
|
-
description: functionDef.description,
|
|
452
|
-
inputSchema: JsonSchema2.toJsonSchema(functionDef.inputSchema),
|
|
453
|
-
outputSchema: !functionDef.outputSchema ? void 0 : JsonSchema2.toJsonSchema(functionDef.outputSchema),
|
|
454
|
-
services: functionDef.services
|
|
455
|
-
});
|
|
456
|
-
if (functionDef.meta?.deployedFunctionId) {
|
|
457
|
-
Obj5.change(fn4, (fn5) => setUserFunctionIdInMetadata(Obj5.getMeta(fn5), functionDef.meta.deployedFunctionId));
|
|
458
|
-
}
|
|
459
|
-
return fn4;
|
|
460
|
-
};
|
|
461
|
-
var deserializeFunction = (functionObj) => {
|
|
462
|
-
return {
|
|
463
|
-
[typeId]: true,
|
|
464
|
-
// TODO(dmaretskyi): Fix key.
|
|
465
|
-
key: functionObj.key ?? functionObj.name,
|
|
466
|
-
name: functionObj.name,
|
|
467
|
-
description: functionObj.description,
|
|
468
|
-
inputSchema: !functionObj.inputSchema ? Schema5.Unknown : JsonSchema2.toEffectSchema(functionObj.inputSchema),
|
|
469
|
-
outputSchema: !functionObj.outputSchema ? void 0 : JsonSchema2.toEffectSchema(functionObj.outputSchema),
|
|
470
|
-
// TODO(dmaretskyi): This should throw error.
|
|
471
|
-
handler: () => {
|
|
472
|
-
},
|
|
473
|
-
services: functionObj.services ?? [],
|
|
474
|
-
types: [],
|
|
475
|
-
meta: {
|
|
476
|
-
deployedFunctionId: getUserFunctionIdInMetadata(Obj5.getMeta(functionObj))
|
|
477
|
-
}
|
|
478
|
-
};
|
|
479
|
-
};
|
|
480
|
-
|
|
481
|
-
// src/example/fib.ts
|
|
482
|
-
var fib_default = defineFunction({
|
|
483
|
-
key: "example.org/function/fib",
|
|
484
|
-
name: "Fibonacci",
|
|
485
|
-
description: "Function that calculates a Fibonacci number",
|
|
486
|
-
inputSchema: Schema6.Struct({
|
|
487
|
-
iterations: Schema6.optional(Schema6.Number).annotations({
|
|
488
|
-
description: "Number of iterations",
|
|
489
|
-
default: 1e5
|
|
490
|
-
})
|
|
491
|
-
}),
|
|
492
|
-
outputSchema: Schema6.Struct({
|
|
493
|
-
result: Schema6.String
|
|
494
|
-
}),
|
|
495
|
-
handler: Effect2.fn(function* ({ data: { iterations = 1e5 } }) {
|
|
496
|
-
let a = 0n;
|
|
497
|
-
let b = 1n;
|
|
498
|
-
for (let i = 0; i < iterations; i++) {
|
|
499
|
-
a += b;
|
|
500
|
-
b = a - b;
|
|
501
|
-
}
|
|
502
|
-
return {
|
|
503
|
-
result: a.toString()
|
|
504
|
-
};
|
|
505
|
-
})
|
|
506
|
-
});
|
|
507
|
-
|
|
508
|
-
// src/example/reply.ts
|
|
509
|
-
import * as Console from "effect/Console";
|
|
510
|
-
import * as Effect3 from "effect/Effect";
|
|
511
|
-
import * as Schema7 from "effect/Schema";
|
|
512
|
-
var reply_default = defineFunction({
|
|
513
|
-
key: "example.org/function/reply",
|
|
514
|
-
name: "Reply",
|
|
515
|
-
description: "Function that echoes the input",
|
|
516
|
-
inputSchema: Schema7.Any,
|
|
517
|
-
outputSchema: Schema7.Any,
|
|
518
|
-
handler: Effect3.fn(function* ({ data }) {
|
|
519
|
-
yield* Console.log("reply", {
|
|
520
|
-
data
|
|
521
|
-
});
|
|
522
|
-
return data;
|
|
523
|
-
})
|
|
524
|
-
});
|
|
525
|
-
|
|
526
|
-
// src/example/sleep.ts
|
|
527
|
-
import * as Effect4 from "effect/Effect";
|
|
528
|
-
import * as Schema8 from "effect/Schema";
|
|
529
|
-
var sleep_default = defineFunction({
|
|
530
|
-
key: "example.org/function/sleep",
|
|
531
|
-
name: "Sleep",
|
|
532
|
-
description: "Function that sleeps for a given amount of time",
|
|
533
|
-
inputSchema: Schema8.Struct({
|
|
534
|
-
duration: Schema8.optional(Schema8.Number).annotations({
|
|
535
|
-
description: "Milliseconds to sleep",
|
|
536
|
-
default: 1e5
|
|
537
|
-
})
|
|
538
|
-
}),
|
|
539
|
-
outputSchema: Schema8.Void,
|
|
540
|
-
handler: Effect4.fn(function* ({ data: { duration = 1e5 } }) {
|
|
541
|
-
yield* Effect4.sleep(duration);
|
|
542
|
-
})
|
|
543
|
-
});
|
|
544
|
-
|
|
545
|
-
// src/example/index.ts
|
|
546
|
-
var ExampleFunctions = {
|
|
547
|
-
Fibonacci: fib_default,
|
|
548
|
-
Reply: reply_default,
|
|
549
|
-
Sleep: sleep_default
|
|
550
|
-
};
|
|
551
|
-
|
|
552
1
|
// src/services/credentials.ts
|
|
553
2
|
import * as HttpClient from "@effect/platform/HttpClient";
|
|
554
3
|
import * as HttpClientRequest from "@effect/platform/HttpClientRequest";
|
|
555
|
-
import * as
|
|
556
|
-
import * as Effect5 from "effect/Effect";
|
|
4
|
+
import * as Effect from "effect/Effect";
|
|
557
5
|
import * as Layer from "effect/Layer";
|
|
558
6
|
import * as Redacted from "effect/Redacted";
|
|
7
|
+
import { Credential } from "@dxos/compute";
|
|
559
8
|
import { Query } from "@dxos/echo";
|
|
560
9
|
import { Database } from "@dxos/echo";
|
|
561
10
|
import { AccessToken } from "@dxos/types";
|
|
562
|
-
var CredentialsService = class _CredentialsService extends Context.Tag("@dxos/functions/CredentialsService")() {
|
|
563
|
-
static getCredential = (query) => Effect5.gen(function* () {
|
|
564
|
-
const credentials = yield* _CredentialsService;
|
|
565
|
-
return yield* Effect5.promise(() => credentials.getCredential(query));
|
|
566
|
-
});
|
|
567
|
-
static getApiKey = (query) => Effect5.gen(function* () {
|
|
568
|
-
const credential = yield* _CredentialsService.getCredential(query);
|
|
569
|
-
if (!credential.apiKey) {
|
|
570
|
-
throw new Error(`API key not found for service: ${query.service}`);
|
|
571
|
-
}
|
|
572
|
-
return Redacted.make(credential.apiKey);
|
|
573
|
-
});
|
|
574
|
-
static configuredLayer = (credentials) => Layer.succeed(_CredentialsService, new ConfiguredCredentialsService(credentials));
|
|
575
|
-
static layerConfig = (credentials) => Layer.effect(_CredentialsService, Effect5.gen(function* () {
|
|
576
|
-
const serviceCredentials = yield* Effect5.forEach(credentials, ({ service, apiKey }) => Effect5.gen(function* () {
|
|
577
|
-
return {
|
|
578
|
-
service,
|
|
579
|
-
apiKey: Redacted.value(yield* apiKey)
|
|
580
|
-
};
|
|
581
|
-
}));
|
|
582
|
-
return new ConfiguredCredentialsService(serviceCredentials);
|
|
583
|
-
}));
|
|
584
|
-
static layerFromDatabase = ({ caching = false } = {}) => Layer.effect(_CredentialsService, Effect5.gen(function* () {
|
|
585
|
-
const dbService = yield* Database.Service;
|
|
586
|
-
const cache = /* @__PURE__ */ new Map();
|
|
587
|
-
const queryCredentials = async (query) => {
|
|
588
|
-
const cacheKey = JSON.stringify(query);
|
|
589
|
-
if (caching && cache.has(cacheKey)) {
|
|
590
|
-
return cache.get(cacheKey);
|
|
591
|
-
}
|
|
592
|
-
const accessTokens = await dbService.db.query(Query.type(AccessToken.AccessToken)).run();
|
|
593
|
-
const credentials = accessTokens.filter((accessToken) => accessToken.source === query.service).map((accessToken) => ({
|
|
594
|
-
service: accessToken.source,
|
|
595
|
-
apiKey: accessToken.token
|
|
596
|
-
}));
|
|
597
|
-
if (caching) {
|
|
598
|
-
cache.set(cacheKey, credentials);
|
|
599
|
-
}
|
|
600
|
-
return credentials;
|
|
601
|
-
};
|
|
602
|
-
return {
|
|
603
|
-
getCredential: async (query) => {
|
|
604
|
-
const credentials = await queryCredentials(query);
|
|
605
|
-
if (credentials.length === 0) {
|
|
606
|
-
throw new Error(`Credential not found for service: ${query.service}`);
|
|
607
|
-
}
|
|
608
|
-
return credentials[0];
|
|
609
|
-
},
|
|
610
|
-
queryCredentials: async (query) => {
|
|
611
|
-
return queryCredentials(query);
|
|
612
|
-
}
|
|
613
|
-
};
|
|
614
|
-
}));
|
|
615
|
-
};
|
|
616
11
|
var ConfiguredCredentialsService = class {
|
|
617
12
|
credentials;
|
|
618
13
|
constructor(credentials = []) {
|
|
@@ -637,256 +32,102 @@ var withAuthorization = (token, kind) => HttpClient.mapRequest((request) => {
|
|
|
637
32
|
const authorization = kind ? `${kind} ${token}` : token;
|
|
638
33
|
return HttpClientRequest.setHeader(request, "Authorization", authorization);
|
|
639
34
|
});
|
|
640
|
-
|
|
641
|
-
|
|
642
|
-
|
|
643
|
-
import * as Effect7 from "effect/Effect";
|
|
644
|
-
import * as Layer3 from "effect/Layer";
|
|
645
|
-
import * as Schema9 from "effect/Schema";
|
|
646
|
-
import { Obj as Obj7, Type as Type4 } from "@dxos/echo";
|
|
647
|
-
import { invariant } from "@dxos/invariant";
|
|
648
|
-
import { LogLevel, log as log2 } from "@dxos/log";
|
|
649
|
-
|
|
650
|
-
// src/services/tracing.ts
|
|
651
|
-
import * as Context2 from "effect/Context";
|
|
652
|
-
import * as Effect6 from "effect/Effect";
|
|
653
|
-
import * as Layer2 from "effect/Layer";
|
|
654
|
-
import { AgentStatus } from "@dxos/ai";
|
|
655
|
-
import { Obj as Obj6 } from "@dxos/echo";
|
|
656
|
-
import { ObjectId } from "@dxos/keys";
|
|
657
|
-
import { Message } from "@dxos/types";
|
|
658
|
-
var TracingService = class _TracingService extends Context2.Tag("@dxos/functions/TracingService")() {
|
|
659
|
-
static noop = {
|
|
660
|
-
getTraceContext: () => ({}),
|
|
661
|
-
write: () => {
|
|
662
|
-
},
|
|
663
|
-
traceInvocationStart: () => Effect6.sync(() => ({
|
|
664
|
-
invocationId: ObjectId.random(),
|
|
665
|
-
invocationTraceQueue: void 0
|
|
666
|
-
})),
|
|
667
|
-
traceInvocationEnd: () => Effect6.sync(() => {
|
|
668
|
-
})
|
|
669
|
-
};
|
|
670
|
-
static layerNoop = Layer2.succeed(_TracingService, _TracingService.noop);
|
|
671
|
-
/**
|
|
672
|
-
* Creates a TracingService layer that emits events to the parent tracing service.
|
|
673
|
-
*/
|
|
674
|
-
static layerSubframe = (mapContext) => Layer2.effect(_TracingService, Effect6.gen(function* () {
|
|
675
|
-
const tracing = yield* _TracingService;
|
|
676
|
-
const context = mapContext(tracing.getTraceContext());
|
|
35
|
+
var configuredCredentialsLayer = (credentials) => Layer.succeed(Credential.CredentialsService, new ConfiguredCredentialsService(credentials));
|
|
36
|
+
var credentialsLayerConfig = (credentials) => Layer.effect(Credential.CredentialsService, Effect.gen(function* () {
|
|
37
|
+
const serviceCredentials = yield* Effect.forEach(credentials, ({ service, apiKey }) => Effect.gen(function* () {
|
|
677
38
|
return {
|
|
678
|
-
|
|
679
|
-
|
|
680
|
-
traceInvocationStart: () => Effect6.die("Tracing invocation inside another invocation is not supported."),
|
|
681
|
-
traceInvocationEnd: () => Effect6.die("Tracing invocation inside another invocation is not supported.")
|
|
39
|
+
service,
|
|
40
|
+
apiKey: Redacted.value(yield* apiKey)
|
|
682
41
|
};
|
|
683
42
|
}));
|
|
684
|
-
|
|
685
|
-
* Create sublayer to trace an invocation.
|
|
686
|
-
* @param data
|
|
687
|
-
* @returns
|
|
688
|
-
*/
|
|
689
|
-
static layerInvocation = (data) => _TracingService.layerSubframe((context) => ({
|
|
690
|
-
...context,
|
|
691
|
-
currentInvocation: data
|
|
692
|
-
}));
|
|
693
|
-
/**
|
|
694
|
-
* Emit the current human-readable execution status.
|
|
695
|
-
*/
|
|
696
|
-
static emitStatus = Effect6.fnUntraced(function* (data) {
|
|
697
|
-
const tracing = yield* _TracingService;
|
|
698
|
-
tracing.write(Obj6.make(AgentStatus, {
|
|
699
|
-
parentMessage: tracing.getTraceContext().parentMessage,
|
|
700
|
-
toolCallId: tracing.getTraceContext().toolCallId,
|
|
701
|
-
created: (/* @__PURE__ */ new Date()).toISOString(),
|
|
702
|
-
...data
|
|
703
|
-
}), tracing.getTraceContext());
|
|
704
|
-
});
|
|
705
|
-
static emitConverationMessage = Effect6.fnUntraced(function* (data) {
|
|
706
|
-
const tracing = yield* _TracingService;
|
|
707
|
-
tracing.write(Obj6.make(Message.Message, {
|
|
708
|
-
parentMessage: tracing.getTraceContext().parentMessage,
|
|
709
|
-
...data,
|
|
710
|
-
properties: {
|
|
711
|
-
[MESSAGE_PROPERTY_TOOL_CALL_ID]: tracing.getTraceContext().toolCallId,
|
|
712
|
-
...data.properties
|
|
713
|
-
}
|
|
714
|
-
}), tracing.getTraceContext());
|
|
715
|
-
});
|
|
716
|
-
};
|
|
717
|
-
var MESSAGE_PROPERTY_TOOL_CALL_ID = "toolCallId";
|
|
718
|
-
|
|
719
|
-
// src/services/event-logger.ts
|
|
720
|
-
var __dxlog_file = "/__w/dxos/dxos/packages/core/functions/src/services/event-logger.ts";
|
|
721
|
-
var ComputeEventPayload = Schema9.Union(Schema9.Struct({
|
|
722
|
-
type: Schema9.Literal("begin-compute"),
|
|
723
|
-
nodeId: Schema9.String,
|
|
724
|
-
/**
|
|
725
|
-
* Names of the inputs begin computed.
|
|
726
|
-
*/
|
|
727
|
-
inputs: Schema9.Array(Schema9.String)
|
|
728
|
-
}), Schema9.Struct({
|
|
729
|
-
type: Schema9.Literal("end-compute"),
|
|
730
|
-
nodeId: Schema9.String,
|
|
731
|
-
/**
|
|
732
|
-
* Names of the outputs computed.
|
|
733
|
-
*/
|
|
734
|
-
outputs: Schema9.Array(Schema9.String)
|
|
735
|
-
}), Schema9.Struct({
|
|
736
|
-
type: Schema9.Literal("compute-input"),
|
|
737
|
-
nodeId: Schema9.String,
|
|
738
|
-
property: Schema9.String,
|
|
739
|
-
value: Schema9.Any
|
|
740
|
-
}), Schema9.Struct({
|
|
741
|
-
type: Schema9.Literal("compute-output"),
|
|
742
|
-
nodeId: Schema9.String,
|
|
743
|
-
property: Schema9.String,
|
|
744
|
-
value: Schema9.Any
|
|
745
|
-
}), Schema9.Struct({
|
|
746
|
-
type: Schema9.Literal("custom"),
|
|
747
|
-
nodeId: Schema9.String,
|
|
748
|
-
event: Schema9.Any
|
|
43
|
+
return new ConfiguredCredentialsService(serviceCredentials);
|
|
749
44
|
}));
|
|
750
|
-
var
|
|
751
|
-
|
|
752
|
-
|
|
753
|
-
|
|
754
|
-
|
|
755
|
-
|
|
756
|
-
|
|
757
|
-
|
|
758
|
-
|
|
759
|
-
|
|
760
|
-
|
|
45
|
+
var credentialsLayerFromDatabase = ({ caching = false } = {}) => Layer.effect(Credential.CredentialsService, Effect.gen(function* () {
|
|
46
|
+
const dbService = yield* Database.Service;
|
|
47
|
+
const cache = /* @__PURE__ */ new Map();
|
|
48
|
+
const queryCredentials = async (query) => {
|
|
49
|
+
const cacheKey = JSON.stringify(query);
|
|
50
|
+
if (caching && cache.has(cacheKey)) {
|
|
51
|
+
return cache.get(cacheKey);
|
|
52
|
+
}
|
|
53
|
+
const accessTokens = await dbService.db.query(Query.type(AccessToken.AccessToken)).run();
|
|
54
|
+
const credentials = accessTokens.filter((accessToken) => accessToken.source === query.service).map((accessToken) => ({
|
|
55
|
+
service: accessToken.source,
|
|
56
|
+
apiKey: accessToken.token
|
|
57
|
+
}));
|
|
58
|
+
if (caching) {
|
|
59
|
+
cache.set(cacheKey, credentials);
|
|
60
|
+
}
|
|
61
|
+
return credentials;
|
|
761
62
|
};
|
|
762
|
-
/**
|
|
763
|
-
* Implements ComputeEventLogger using TracingService.
|
|
764
|
-
*/
|
|
765
|
-
static layerFromTracing = Layer3.effect(_ComputeEventLogger, Effect7.gen(function* () {
|
|
766
|
-
const tracing = yield* TracingService;
|
|
767
|
-
return {
|
|
768
|
-
log: (event) => {
|
|
769
|
-
tracing.write(Obj7.make(ComputeEvent, {
|
|
770
|
-
payload: event
|
|
771
|
-
}), tracing.getTraceContext());
|
|
772
|
-
},
|
|
773
|
-
nodeId: void 0
|
|
774
|
-
};
|
|
775
|
-
}));
|
|
776
|
-
};
|
|
777
|
-
var logCustomEvent = (data) => Effect7.gen(function* () {
|
|
778
|
-
const logger = yield* ComputeEventLogger;
|
|
779
|
-
if (!logger.nodeId) {
|
|
780
|
-
throw new Error("logCustomEvent must be called within a node compute function");
|
|
781
|
-
}
|
|
782
|
-
logger.log({
|
|
783
|
-
type: "custom",
|
|
784
|
-
nodeId: logger.nodeId,
|
|
785
|
-
event: data
|
|
786
|
-
});
|
|
787
|
-
});
|
|
788
|
-
var createDefectLogger = () => Effect7.catchAll((error) => Effect7.gen(function* () {
|
|
789
|
-
log2.error("unhandled effect error", {
|
|
790
|
-
error
|
|
791
|
-
}, {
|
|
792
|
-
F: __dxlog_file,
|
|
793
|
-
L: 102,
|
|
794
|
-
S: this,
|
|
795
|
-
C: (f, a) => f(...a)
|
|
796
|
-
});
|
|
797
|
-
throw error;
|
|
798
|
-
}));
|
|
799
|
-
var createEventLogger = (level, message = "event") => {
|
|
800
|
-
const logFunction = {
|
|
801
|
-
[LogLevel.WARN]: log2.warn,
|
|
802
|
-
[LogLevel.VERBOSE]: log2.verbose,
|
|
803
|
-
[LogLevel.DEBUG]: log2.debug,
|
|
804
|
-
[LogLevel.INFO]: log2.info,
|
|
805
|
-
[LogLevel.ERROR]: log2.error
|
|
806
|
-
}[level];
|
|
807
|
-
invariant(logFunction, void 0, {
|
|
808
|
-
F: __dxlog_file,
|
|
809
|
-
L: 120,
|
|
810
|
-
S: void 0,
|
|
811
|
-
A: [
|
|
812
|
-
"logFunction",
|
|
813
|
-
""
|
|
814
|
-
]
|
|
815
|
-
});
|
|
816
63
|
return {
|
|
817
|
-
|
|
818
|
-
|
|
64
|
+
getCredential: async (query) => {
|
|
65
|
+
const credentials = await queryCredentials(query);
|
|
66
|
+
if (credentials.length === 0) {
|
|
67
|
+
throw new Error(`Credential not found for service: ${query.service}`);
|
|
68
|
+
}
|
|
69
|
+
return credentials[0];
|
|
819
70
|
},
|
|
820
|
-
|
|
71
|
+
queryCredentials: async (query) => {
|
|
72
|
+
return queryCredentials(query);
|
|
73
|
+
}
|
|
821
74
|
};
|
|
822
|
-
};
|
|
75
|
+
}));
|
|
823
76
|
|
|
824
77
|
// src/services/function-invocation-service.ts
|
|
825
|
-
import * as
|
|
826
|
-
import * as
|
|
827
|
-
import * as
|
|
828
|
-
var FunctionInvocationService = class _FunctionInvocationService extends
|
|
829
|
-
static layerNotAvailable =
|
|
830
|
-
invokeFunction: () =>
|
|
831
|
-
resolveFunction: () =>
|
|
78
|
+
import * as Context from "effect/Context";
|
|
79
|
+
import * as Effect2 from "effect/Effect";
|
|
80
|
+
import * as Layer2 from "effect/Layer";
|
|
81
|
+
var FunctionInvocationService = class _FunctionInvocationService extends Context.Tag("@dxos/functions/FunctionInvocationService")() {
|
|
82
|
+
static layerNotAvailable = Layer2.succeed(_FunctionInvocationService, {
|
|
83
|
+
invokeFunction: () => Effect2.die("FunctionInvocationService is not avaialble."),
|
|
84
|
+
resolveFunction: () => Effect2.die("FunctionInvocationService is not available.")
|
|
832
85
|
});
|
|
833
|
-
static invokeFunction = (functionDef, input) =>
|
|
834
|
-
static resolveFunction = (key) =>
|
|
86
|
+
static invokeFunction = (functionDef, input) => Effect2.serviceFunctionEffect(_FunctionInvocationService, (service) => service.invokeFunction)(functionDef, input);
|
|
87
|
+
static resolveFunction = (key) => Effect2.serviceFunctionEffect(_FunctionInvocationService, (service) => service.resolveFunction)(key);
|
|
835
88
|
};
|
|
836
89
|
|
|
837
90
|
// src/services/queues.ts
|
|
838
|
-
import
|
|
839
|
-
|
|
840
|
-
|
|
841
|
-
var
|
|
842
|
-
|
|
843
|
-
|
|
844
|
-
|
|
845
|
-
|
|
846
|
-
|
|
847
|
-
|
|
848
|
-
throw new Error("Queues not available");
|
|
849
|
-
}
|
|
850
|
-
},
|
|
851
|
-
queue: void 0
|
|
852
|
-
});
|
|
853
|
-
static make = (queues, queue) => {
|
|
854
|
-
return {
|
|
855
|
-
queues,
|
|
856
|
-
queue
|
|
857
|
-
};
|
|
858
|
-
};
|
|
859
|
-
static layer = (queues, queue) => Layer5.succeed(_QueueService, _QueueService.make(queues, queue));
|
|
860
|
-
/**
|
|
861
|
-
* Gets a queue by its DXN.
|
|
862
|
-
*/
|
|
863
|
-
static getQueue = (dxn) => _QueueService.pipe(Effect9.map(({ queues }) => queues.get(dxn)));
|
|
864
|
-
/**
|
|
865
|
-
* Creates a new queue.
|
|
866
|
-
*/
|
|
867
|
-
static createQueue = (options) => _QueueService.pipe(Effect9.map(({ queues }) => queues.create(options)));
|
|
868
|
-
static append = (queue, objects) => Effect9.promise(() => queue.append(objects));
|
|
91
|
+
import { ContextQueueService, QueueService, feedServiceFromQueueServiceLayer } from "@dxos/echo-db";
|
|
92
|
+
|
|
93
|
+
// src/services/tracing.ts
|
|
94
|
+
var MESSAGE_PROPERTY_TOOL_CALL_ID = "toolCallId";
|
|
95
|
+
|
|
96
|
+
// src/types/url.ts
|
|
97
|
+
var FUNCTIONS_META_KEY = "org.dxos.service.function";
|
|
98
|
+
var FUNCTIONS_PRESET_META_KEY = "org.dxos.service.function-preset";
|
|
99
|
+
var getUserFunctionIdInMetadata = (meta) => {
|
|
100
|
+
return meta.keys.find((key) => key.source === FUNCTIONS_META_KEY)?.id;
|
|
869
101
|
};
|
|
870
|
-
var
|
|
871
|
-
|
|
872
|
-
|
|
873
|
-
|
|
102
|
+
var setUserFunctionIdInMetadata = (meta, functionId) => {
|
|
103
|
+
const key = meta.keys.find((key2) => key2.source === FUNCTIONS_META_KEY);
|
|
104
|
+
if (key) {
|
|
105
|
+
if (key.id !== functionId) {
|
|
106
|
+
throw new Error("Metadata mismatch");
|
|
107
|
+
}
|
|
108
|
+
} else {
|
|
109
|
+
meta.keys.push({
|
|
110
|
+
source: FUNCTIONS_META_KEY,
|
|
111
|
+
id: functionId
|
|
112
|
+
});
|
|
113
|
+
}
|
|
874
114
|
};
|
|
875
115
|
|
|
876
116
|
// src/protocol/protocol.ts
|
|
877
117
|
import * as AnthropicClient from "@effect/ai-anthropic/AnthropicClient";
|
|
878
|
-
import * as
|
|
879
|
-
import * as
|
|
880
|
-
import * as
|
|
881
|
-
import * as
|
|
118
|
+
import * as Effect4 from "effect/Effect";
|
|
119
|
+
import * as Layer4 from "effect/Layer";
|
|
120
|
+
import * as Schema from "effect/Schema";
|
|
121
|
+
import * as SchemaAST from "effect/SchemaAST";
|
|
882
122
|
import { AiModelResolver, AiService } from "@dxos/ai";
|
|
883
123
|
import { AnthropicResolver } from "@dxos/ai/resolvers";
|
|
124
|
+
import { FunctionError, InvalidOperationInputError, InvalidOperationOutputError, Operation, Trace } from "@dxos/compute";
|
|
884
125
|
import { LifecycleState, Resource } from "@dxos/context";
|
|
885
|
-
import { Database as Database2, Feed, JsonSchema
|
|
886
|
-
import { refFromEncodedReference } from "@dxos/echo/internal";
|
|
126
|
+
import { Database as Database2, Feed, JsonSchema, Ref } from "@dxos/echo";
|
|
887
127
|
import { EchoClient, createFeedServiceLayer } from "@dxos/echo-db";
|
|
128
|
+
import { refFromEncodedReference } from "@dxos/echo/internal";
|
|
888
129
|
import { runAndForwardErrors } from "@dxos/effect";
|
|
889
|
-
import { assertState, failedInvariant
|
|
130
|
+
import { assertState, failedInvariant, invariant } from "@dxos/invariant";
|
|
890
131
|
import { PublicKey } from "@dxos/keys";
|
|
891
132
|
|
|
892
133
|
// src/protocol/functions-ai-http-client.ts
|
|
@@ -894,20 +135,20 @@ import * as Headers from "@effect/platform/Headers";
|
|
|
894
135
|
import * as HttpClient2 from "@effect/platform/HttpClient";
|
|
895
136
|
import * as HttpClientError from "@effect/platform/HttpClientError";
|
|
896
137
|
import * as HttpClientResponse from "@effect/platform/HttpClientResponse";
|
|
897
|
-
import * as
|
|
138
|
+
import * as Effect3 from "effect/Effect";
|
|
898
139
|
import * as FiberRef from "effect/FiberRef";
|
|
899
|
-
import * as
|
|
140
|
+
import * as Layer3 from "effect/Layer";
|
|
900
141
|
import * as Stream from "effect/Stream";
|
|
901
|
-
import { log
|
|
142
|
+
import { log } from "@dxos/log";
|
|
902
143
|
import { ErrorCodec } from "@dxos/protocols";
|
|
903
|
-
var
|
|
144
|
+
var __dxlog_file = "/__w/dxos/dxos/packages/core/compute/functions/src/protocol/functions-ai-http-client.ts";
|
|
904
145
|
var requestInitTagKey = "@effect/platform/FetchHttpClient/FetchOptions";
|
|
905
146
|
var FunctionsAiHttpClient = class _FunctionsAiHttpClient {
|
|
906
147
|
static make = (service) => HttpClient2.make((request, url, signal, fiber) => {
|
|
907
148
|
const context = fiber.getFiberRef(FiberRef.currentContext);
|
|
908
149
|
const options = context.unsafeMap.get(requestInitTagKey) ?? {};
|
|
909
150
|
const headers = options.headers ? Headers.merge(Headers.fromInput(options.headers), request.headers) : request.headers;
|
|
910
|
-
const send = (body) =>
|
|
151
|
+
const send = (body) => Effect3.tryPromise({
|
|
911
152
|
try: () => service.fetch(new Request(url, {
|
|
912
153
|
...options,
|
|
913
154
|
method: request.method,
|
|
@@ -915,21 +156,16 @@ var FunctionsAiHttpClient = class _FunctionsAiHttpClient {
|
|
|
915
156
|
body
|
|
916
157
|
})),
|
|
917
158
|
catch: (cause) => {
|
|
918
|
-
|
|
159
|
+
log.error("Failed to fetch", {
|
|
919
160
|
errorSerialized: ErrorCodec.encode(cause)
|
|
920
|
-
}, {
|
|
921
|
-
F: __dxlog_file2,
|
|
922
|
-
L: 43,
|
|
923
|
-
S: this,
|
|
924
|
-
C: (f, a) => f(...a)
|
|
925
|
-
});
|
|
161
|
+
}, { "~LogMeta": "~LogMeta", F: __dxlog_file, L: 30, S: this });
|
|
926
162
|
return new HttpClientError.RequestError({
|
|
927
163
|
request,
|
|
928
164
|
reason: "Transport",
|
|
929
165
|
cause
|
|
930
166
|
});
|
|
931
167
|
}
|
|
932
|
-
}).pipe(
|
|
168
|
+
}).pipe(Effect3.map((response) => HttpClientResponse.fromWeb(request, response)));
|
|
933
169
|
switch (request.body._tag) {
|
|
934
170
|
case "Raw":
|
|
935
171
|
case "Uint8Array":
|
|
@@ -937,14 +173,15 @@ var FunctionsAiHttpClient = class _FunctionsAiHttpClient {
|
|
|
937
173
|
case "FormData":
|
|
938
174
|
return send(request.body.formData);
|
|
939
175
|
case "Stream":
|
|
940
|
-
return Stream.toReadableStreamEffect(request.body.stream).pipe(
|
|
176
|
+
return Stream.toReadableStreamEffect(request.body.stream).pipe(Effect3.flatMap(send));
|
|
941
177
|
}
|
|
942
178
|
return send(void 0);
|
|
943
179
|
});
|
|
944
|
-
static layer = (service) =>
|
|
180
|
+
static layer = (service) => Layer3.succeed(HttpClient2.HttpClient, _FunctionsAiHttpClient.make(service));
|
|
945
181
|
};
|
|
946
182
|
|
|
947
183
|
// src/protocol/protocol.ts
|
|
184
|
+
var __dxlog_file2 = "/__w/dxos/dxos/packages/core/compute/functions/src/protocol/protocol.ts";
|
|
948
185
|
function _ts_add_disposable_resource(env, value2, async) {
|
|
949
186
|
if (value2 !== null && value2 !== void 0) {
|
|
950
187
|
if (typeof value2 !== "object" && typeof value2 !== "function") throw new TypeError("Object expected.");
|
|
@@ -1010,22 +247,22 @@ function _ts_dispose_resources(env) {
|
|
|
1010
247
|
return next();
|
|
1011
248
|
})(env);
|
|
1012
249
|
}
|
|
1013
|
-
var __dxlog_file3 = "/__w/dxos/dxos/packages/core/functions/src/protocol/protocol.ts";
|
|
1014
250
|
var wrapFunctionHandler = (func) => {
|
|
1015
|
-
if (!
|
|
1016
|
-
throw new TypeError("
|
|
251
|
+
if (!Operation.isOperationWithHandler(func)) {
|
|
252
|
+
throw new TypeError("Expected operation with handler");
|
|
1017
253
|
}
|
|
254
|
+
const serviceTags = func.services.map((service) => service.key);
|
|
1018
255
|
return {
|
|
1019
256
|
meta: {
|
|
1020
|
-
key: func.key,
|
|
1021
|
-
name: func.name,
|
|
1022
|
-
description: func.description,
|
|
1023
|
-
inputSchema:
|
|
1024
|
-
outputSchema: func.
|
|
1025
|
-
services: func.services
|
|
257
|
+
key: func.meta.key,
|
|
258
|
+
name: func.meta.name,
|
|
259
|
+
description: func.meta.description,
|
|
260
|
+
inputSchema: JsonSchema.toJsonSchema(func.input),
|
|
261
|
+
outputSchema: func.output === void 0 ? void 0 : JsonSchema.toJsonSchema(func.output),
|
|
262
|
+
services: func.services.map((service) => service.key)
|
|
1026
263
|
},
|
|
1027
264
|
handler: async ({ data, context }) => {
|
|
1028
|
-
if ((
|
|
265
|
+
if ((serviceTags.includes(Database2.Service.key) || serviceTags.includes(QueueService.key) || serviceTags.includes(Feed.FeedService.key)) && (!context.services.dataService || !context.services.queryService)) {
|
|
1029
266
|
throw new FunctionError({
|
|
1030
267
|
message: "Services not provided: dataService, queryService"
|
|
1031
268
|
});
|
|
@@ -1037,40 +274,39 @@ var wrapFunctionHandler = (func) => {
|
|
|
1037
274
|
hasError: false
|
|
1038
275
|
};
|
|
1039
276
|
try {
|
|
1040
|
-
if (!
|
|
277
|
+
if (!SchemaAST.isAnyKeyword(func.input.ast)) {
|
|
1041
278
|
try {
|
|
1042
|
-
|
|
279
|
+
Schema.validateSync(func.input, {
|
|
280
|
+
onExcessProperty: "error"
|
|
281
|
+
})(data);
|
|
1043
282
|
} catch (error) {
|
|
1044
|
-
throw new
|
|
1045
|
-
message:
|
|
283
|
+
throw new InvalidOperationInputError({
|
|
284
|
+
message: `Operation input did not match schema (${func.meta.key}): ${error.message}`,
|
|
1046
285
|
cause: error
|
|
1047
286
|
});
|
|
1048
287
|
}
|
|
1049
288
|
}
|
|
1050
289
|
const funcContext = _ts_add_disposable_resource(env, await new FunctionContext(context).open(), true);
|
|
1051
290
|
if (func.types.length > 0) {
|
|
1052
|
-
|
|
1053
|
-
F: __dxlog_file3,
|
|
1054
|
-
L: 70,
|
|
1055
|
-
S: void 0,
|
|
1056
|
-
A: [
|
|
1057
|
-
"funcContext.db",
|
|
1058
|
-
"'Database is required for functions with types'"
|
|
1059
|
-
]
|
|
1060
|
-
});
|
|
291
|
+
invariant(funcContext.db, "Database is required for functions with types", { "~LogMeta": "~LogMeta", F: __dxlog_file2, L: 130, S: void 0, A: ["funcContext.db", "'Database is required for functions with types'"] });
|
|
1061
292
|
await funcContext.db.graph.schemaRegistry.register(func.types);
|
|
1062
293
|
}
|
|
1063
|
-
const dataWithDecodedRefs = funcContext.db && !
|
|
1064
|
-
let result = await func.handler(
|
|
1065
|
-
|
|
1066
|
-
|
|
1067
|
-
data: dataWithDecodedRefs
|
|
1068
|
-
});
|
|
1069
|
-
if (Effect11.isEffect(result)) {
|
|
1070
|
-
result = await runAndForwardErrors(result.pipe(Effect11.orDie, Effect11.provide(funcContext.createLayer())));
|
|
294
|
+
const dataWithDecodedRefs = funcContext.db && !SchemaAST.isAnyKeyword(func.input.ast) ? decodeRefsFromSchema(func.input.ast, data, funcContext.db) : data;
|
|
295
|
+
let result = await func.handler(dataWithDecodedRefs);
|
|
296
|
+
if (Effect4.isEffect(result)) {
|
|
297
|
+
result = await runAndForwardErrors(result.pipe(Effect4.orDie, Effect4.provide(funcContext.createLayer())));
|
|
1071
298
|
}
|
|
1072
|
-
if (func.
|
|
1073
|
-
|
|
299
|
+
if (func.output && !SchemaAST.isAnyKeyword(func.output.ast)) {
|
|
300
|
+
try {
|
|
301
|
+
Schema.validateSync(func.output, {
|
|
302
|
+
onExcessProperty: "error"
|
|
303
|
+
})(result);
|
|
304
|
+
} catch (error) {
|
|
305
|
+
throw new InvalidOperationOutputError({
|
|
306
|
+
message: `Operation output did not match schema (${func.meta.key}): ${error.message}`,
|
|
307
|
+
cause: error
|
|
308
|
+
});
|
|
309
|
+
}
|
|
1074
310
|
}
|
|
1075
311
|
return result;
|
|
1076
312
|
} catch (e) {
|
|
@@ -1105,12 +341,12 @@ var FunctionContext = class extends Resource {
|
|
|
1105
341
|
async _open() {
|
|
1106
342
|
await this.client?.open();
|
|
1107
343
|
this.db = this.client && this.context.spaceId ? this.client.constructDatabase({
|
|
1108
|
-
spaceId: this.context.spaceId ??
|
|
1109
|
-
spaceKey: PublicKey.fromHex(this.context.spaceKey ??
|
|
344
|
+
spaceId: this.context.spaceId ?? failedInvariant(),
|
|
345
|
+
spaceKey: PublicKey.fromHex(this.context.spaceKey ?? failedInvariant("spaceKey missing in context")),
|
|
1110
346
|
reactiveSchemaQuery: false,
|
|
1111
347
|
preloadSchemaOnOpen: false
|
|
1112
348
|
}) : void 0;
|
|
1113
|
-
await this.db?.setSpaceRoot(this.context.spaceRootUrl ??
|
|
349
|
+
await this.db?.setSpaceRoot(this.context.spaceRootUrl ?? failedInvariant("spaceRootUrl missing in context"));
|
|
1114
350
|
await this.db?.open();
|
|
1115
351
|
this.queues = this.client && this.context.spaceId ? this.client.constructQueueFactory(this.context.spaceId) : void 0;
|
|
1116
352
|
}
|
|
@@ -1123,29 +359,46 @@ var FunctionContext = class extends Resource {
|
|
|
1123
359
|
const dbLayer = this.db ? Database2.layer(this.db) : Database2.notAvailable;
|
|
1124
360
|
const queuesLayer = this.queues ? QueueService.layer(this.queues) : QueueService.notAvailable;
|
|
1125
361
|
const feedLayer = this.queues ? createFeedServiceLayer(this.queues) : Feed.notAvailable;
|
|
1126
|
-
const credentials = dbLayer ?
|
|
362
|
+
const credentials = dbLayer ? credentialsLayerFromDatabase({
|
|
1127
363
|
caching: true
|
|
1128
|
-
}).pipe(
|
|
364
|
+
}).pipe(Layer4.provide(dbLayer)) : configuredCredentialsLayer([]);
|
|
1129
365
|
const functionInvocationService = MockedFunctionInvocationService;
|
|
1130
|
-
const
|
|
1131
|
-
const aiLayer = this.context.services.functionsAiService ? AiModelResolver.AiModelResolver.buildAiService.pipe(
|
|
366
|
+
const operationServiceLayer = MockedOperationServiceLayer;
|
|
367
|
+
const aiLayer = this.context.services.functionsAiService ? AiModelResolver.AiModelResolver.buildAiService.pipe(Layer4.provide(AnthropicResolver.make().pipe(Layer4.provide(AnthropicClient.layer({
|
|
1132
368
|
// Note: It doesn't matter what is base url here, it will be proxied to ai gateway in edge.
|
|
1133
369
|
apiUrl: "http://internal/provider/anthropic"
|
|
1134
|
-
}).pipe(
|
|
1135
|
-
return
|
|
370
|
+
}).pipe(Layer4.provide(FunctionsAiHttpClient.layer(this.context.services.functionsAiService))))))) : AiService.notAvailable;
|
|
371
|
+
return Layer4.mergeAll(
|
|
372
|
+
dbLayer,
|
|
373
|
+
queuesLayer,
|
|
374
|
+
feedLayer,
|
|
375
|
+
credentials,
|
|
376
|
+
functionInvocationService,
|
|
377
|
+
operationServiceLayer,
|
|
378
|
+
aiLayer,
|
|
379
|
+
// TODO(dmaretskyi): Forward trace events.
|
|
380
|
+
Trace.writerLayerNoop
|
|
381
|
+
);
|
|
1136
382
|
}
|
|
1137
383
|
};
|
|
1138
|
-
var MockedFunctionInvocationService =
|
|
1139
|
-
invokeFunction: () =>
|
|
1140
|
-
resolveFunction: () =>
|
|
384
|
+
var MockedFunctionInvocationService = Layer4.succeed(FunctionInvocationService, {
|
|
385
|
+
invokeFunction: () => Effect4.die("Calling functions from functions is not implemented yet."),
|
|
386
|
+
resolveFunction: () => Effect4.die("Not implemented.")
|
|
387
|
+
});
|
|
388
|
+
var MockedOperationServiceLayer = Layer4.succeed(Operation.Service, {
|
|
389
|
+
invoke: () => Effect4.die("Calling operations from functions is not implemented yet."),
|
|
390
|
+
schedule: () => Effect4.die("Not implemented."),
|
|
391
|
+
invokePromise: async () => ({
|
|
392
|
+
error: new Error("Not implemented")
|
|
393
|
+
})
|
|
1141
394
|
});
|
|
1142
395
|
var decodeRefsFromSchema = (ast, value2, db) => {
|
|
1143
396
|
if (value2 == null) {
|
|
1144
397
|
return value2;
|
|
1145
398
|
}
|
|
1146
|
-
const encoded =
|
|
1147
|
-
if (
|
|
1148
|
-
if (
|
|
399
|
+
const encoded = SchemaAST.encodedBoundAST(ast);
|
|
400
|
+
if (Ref.isRefType(encoded)) {
|
|
401
|
+
if (Ref.isRef(value2)) {
|
|
1149
402
|
return value2;
|
|
1150
403
|
}
|
|
1151
404
|
if (typeof value2 === "object" && value2 !== null && typeof value2["/"] === "string") {
|
|
@@ -1166,7 +419,7 @@ var decodeRefsFromSchema = (ast, value2, db) => {
|
|
|
1166
419
|
const result = {
|
|
1167
420
|
...value2
|
|
1168
421
|
};
|
|
1169
|
-
for (const prop of
|
|
422
|
+
for (const prop of SchemaAST.getPropertySignatures(encoded)) {
|
|
1170
423
|
const key = prop.name.toString();
|
|
1171
424
|
if (key in result) {
|
|
1172
425
|
result[key] = decodeRefsFromSchema(prop.type, result[key], db);
|
|
@@ -1185,7 +438,7 @@ var decodeRefsFromSchema = (ast, value2, db) => {
|
|
|
1185
438
|
return value2;
|
|
1186
439
|
}
|
|
1187
440
|
case "Union": {
|
|
1188
|
-
const nonUndefined = encoded.types.filter((t) => !
|
|
441
|
+
const nonUndefined = encoded.types.filter((t) => !SchemaAST.isUndefinedKeyword(t));
|
|
1189
442
|
if (nonUndefined.length === 1) {
|
|
1190
443
|
return decodeRefsFromSchema(nonUndefined[0], value2, db);
|
|
1191
444
|
}
|
|
@@ -1203,37 +456,19 @@ var decodeRefsFromSchema = (ast, value2, db) => {
|
|
|
1203
456
|
}
|
|
1204
457
|
};
|
|
1205
458
|
export {
|
|
1206
|
-
ComputeEvent,
|
|
1207
|
-
ComputeEventLogger,
|
|
1208
|
-
ComputeEventPayload,
|
|
1209
459
|
ConfiguredCredentialsService,
|
|
1210
460
|
ContextQueueService,
|
|
1211
|
-
CredentialsService,
|
|
1212
|
-
ExampleFunctions,
|
|
1213
461
|
FUNCTIONS_META_KEY,
|
|
1214
462
|
FUNCTIONS_PRESET_META_KEY,
|
|
1215
|
-
Function_exports as Function,
|
|
1216
|
-
FunctionDefinition,
|
|
1217
|
-
FunctionError,
|
|
1218
463
|
FunctionInvocationService,
|
|
1219
|
-
FunctionNotFoundError,
|
|
1220
464
|
MESSAGE_PROPERTY_TOOL_CALL_ID,
|
|
1221
465
|
QueueService,
|
|
1222
|
-
|
|
1223
|
-
|
|
1224
|
-
|
|
1225
|
-
|
|
1226
|
-
TriggerEvent_exports as TriggerEvent,
|
|
1227
|
-
TriggerStateNotFoundError,
|
|
1228
|
-
createDefectLogger,
|
|
1229
|
-
createEventLogger,
|
|
1230
|
-
defineFunction,
|
|
1231
|
-
deserializeFunction,
|
|
466
|
+
configuredCredentialsLayer,
|
|
467
|
+
credentialsLayerConfig,
|
|
468
|
+
credentialsLayerFromDatabase,
|
|
469
|
+
feedServiceFromQueueServiceLayer,
|
|
1232
470
|
getUserFunctionIdInMetadata,
|
|
1233
|
-
logCustomEvent,
|
|
1234
|
-
serializeFunction,
|
|
1235
471
|
setUserFunctionIdInMetadata,
|
|
1236
|
-
toOperation,
|
|
1237
472
|
withAuthorization,
|
|
1238
473
|
wrapFunctionHandler
|
|
1239
474
|
};
|