iii-sdk 0.19.7 → 0.20.0-alpha.2
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/channel.cjs +5 -0
- package/dist/channel.d.cts +2 -0
- package/dist/channel.d.mts +2 -0
- package/dist/channel.mjs +3 -0
- package/dist/{utils-DXL7JI0q.mjs → channels-De8fNMyx.mjs} +3 -108
- package/dist/channels-De8fNMyx.mjs.map +1 -0
- package/dist/{utils-CuS1Knym.cjs → channels-ZbQzcwnN.cjs} +3 -166
- package/dist/channels-ZbQzcwnN.cjs.map +1 -0
- package/dist/engine.cjs +5 -0
- package/dist/engine.d.cts +3 -0
- package/dist/engine.d.mts +3 -0
- package/dist/engine.mjs +3 -0
- package/dist/errors.cjs +28 -0
- package/dist/errors.cjs.map +1 -0
- package/dist/errors.d.cts +40 -0
- package/dist/errors.d.cts.map +1 -0
- package/dist/errors.d.mts +40 -0
- package/dist/errors.d.mts.map +1 -0
- package/dist/errors.mjs +25 -0
- package/dist/errors.mjs.map +1 -0
- package/dist/helpers.cjs +6 -5
- package/dist/helpers.cjs.map +1 -1
- package/dist/helpers.d.cts +23 -5
- package/dist/helpers.d.cts.map +1 -1
- package/dist/helpers.d.mts +23 -5
- package/dist/helpers.d.mts.map +1 -1
- package/dist/helpers.mjs +4 -3
- package/dist/helpers.mjs.map +1 -1
- package/dist/iii-constants-Baptl8nm.d.mts +47 -0
- package/dist/iii-constants-Baptl8nm.d.mts.map +1 -0
- package/dist/iii-constants-BqXp8xSN.d.cts +47 -0
- package/dist/iii-constants-BqXp8xSN.d.cts.map +1 -0
- package/dist/iii-constants-Br94RUNi.cjs +67 -0
- package/dist/iii-constants-Br94RUNi.cjs.map +1 -0
- package/dist/iii-constants-_k3SoHry.mjs +43 -0
- package/dist/iii-constants-_k3SoHry.mjs.map +1 -0
- package/dist/iii-types-6aHBgy7l.cjs +24 -0
- package/dist/iii-types-6aHBgy7l.cjs.map +1 -0
- package/dist/iii-types-CRx2qAjB.mjs +18 -0
- package/dist/iii-types-CRx2qAjB.mjs.map +1 -0
- package/dist/index.cjs +93 -172
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +14 -81
- package/dist/index.d.cts.map +1 -1
- package/dist/index.d.mts +14 -81
- package/dist/index.d.mts.map +1 -1
- package/dist/index.mjs +30 -104
- package/dist/index.mjs.map +1 -1
- package/dist/internal.cjs +0 -0
- package/dist/internal.d.cts +2 -0
- package/dist/internal.d.mts +2 -0
- package/dist/internal.mjs +1 -0
- package/dist/protocol.cjs +4 -0
- package/dist/protocol.d.cts +2 -0
- package/dist/protocol.d.mts +2 -0
- package/dist/protocol.mjs +3 -0
- package/dist/runtime.cjs +0 -0
- package/dist/runtime.d.cts +3 -0
- package/dist/runtime.d.mts +3 -0
- package/dist/runtime.mjs +1 -0
- package/dist/state.cjs.map +1 -1
- package/dist/state.d.cts +3 -7
- package/dist/state.d.cts.map +1 -1
- package/dist/state.d.mts +3 -7
- package/dist/state.d.mts.map +1 -1
- package/dist/state.mjs.map +1 -1
- package/dist/stream.d.cts +5 -246
- package/dist/stream.d.cts.map +1 -1
- package/dist/stream.d.mts +5 -246
- package/dist/stream.d.mts.map +1 -1
- package/dist/trigger.cjs +0 -0
- package/dist/trigger.d.cts +2 -0
- package/dist/trigger.d.mts +2 -0
- package/dist/trigger.mjs +1 -0
- package/dist/{utils-BnRzIUCy.d.cts → types-BZoO05vA.d.cts} +45 -220
- package/dist/types-BZoO05vA.d.cts.map +1 -0
- package/dist/{utils-e84Qph-9.d.mts → types-BlFE8MZG.d.mts} +45 -220
- package/dist/types-BlFE8MZG.d.mts.map +1 -0
- package/dist/utils-63wxBJg-.cjs +121 -0
- package/dist/utils-63wxBJg-.cjs.map +1 -0
- package/dist/utils-8G4hHqvZ.mjs +69 -0
- package/dist/utils-8G4hHqvZ.mjs.map +1 -0
- package/package.json +37 -2
- package/typedoc.json +13 -1
- package/vitest.config.ts +3 -3
- package/dist/utils-BnRzIUCy.d.cts.map +0 -1
- package/dist/utils-CuS1Knym.cjs.map +0 -1
- package/dist/utils-DXL7JI0q.mjs.map +0 -1
- package/dist/utils-e84Qph-9.d.mts.map +0 -1
package/dist/index.cjs
CHANGED
|
@@ -1,93 +1,17 @@
|
|
|
1
1
|
Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
|
|
2
|
-
const require_utils = require('./utils-
|
|
3
|
-
|
|
2
|
+
const require_utils = require('./utils-63wxBJg-.cjs');
|
|
3
|
+
const require_errors = require('./errors.cjs');
|
|
4
|
+
const require_channels = require('./channels-ZbQzcwnN.cjs');
|
|
5
|
+
const require_iii_constants = require('./iii-constants-Br94RUNi.cjs');
|
|
6
|
+
const require_iii_types = require('./iii-types-6aHBgy7l.cjs');
|
|
4
7
|
let _opentelemetry_api = require("@opentelemetry/api");
|
|
5
8
|
let node_module = require("node:module");
|
|
6
9
|
let node_os = require("node:os");
|
|
7
10
|
node_os = require_utils.__toESM(node_os);
|
|
8
|
-
let
|
|
9
|
-
let
|
|
10
|
-
|
|
11
|
-
//#region src/errors.ts
|
|
12
|
-
var IIIInvocationError = class extends Error {
|
|
13
|
-
constructor(init) {
|
|
14
|
-
super(`${init.code}: ${init.message}`);
|
|
15
|
-
this.name = "IIIInvocationError";
|
|
16
|
-
this.code = init.code;
|
|
17
|
-
this.function_id = init.function_id;
|
|
18
|
-
this.stacktrace = init.stacktrace;
|
|
19
|
-
}
|
|
20
|
-
};
|
|
21
|
-
/**
|
|
22
|
-
* True when `value` looks like the wire `ErrorBody` the engine sends in
|
|
23
|
-
* `InvocationResult.error`: `{ code: string, message: string, stacktrace?: string }`.
|
|
24
|
-
* Used to distinguish an engine rejection (which we wrap in
|
|
25
|
-
* {@link IIIInvocationError}) from a JS `Error` thrown elsewhere.
|
|
26
|
-
*/
|
|
27
|
-
function isErrorBody(value) {
|
|
28
|
-
if (typeof value !== "object" || value === null) return false;
|
|
29
|
-
const v = value;
|
|
30
|
-
return typeof v.code === "string" && typeof v.message === "string" && (v.stacktrace === void 0 || typeof v.stacktrace === "string");
|
|
31
|
-
}
|
|
32
|
-
|
|
33
|
-
//#endregion
|
|
34
|
-
//#region src/iii-constants.ts
|
|
35
|
-
/**
|
|
36
|
-
* Constants for the III module.
|
|
37
|
-
*/
|
|
38
|
-
/**
|
|
39
|
-
* Engine function paths for internal operations.
|
|
40
|
-
*
|
|
41
|
-
* Naming note: `LIST_TRIGGERS` / `INFO_TRIGGERS` cover trigger TYPES
|
|
42
|
-
* (templates). `LIST_REGISTERED_TRIGGERS` / `INFO_REGISTERED_TRIGGERS`
|
|
43
|
-
* cover trigger INSTANCES (subscriber rows). The old
|
|
44
|
-
* `engine::trigger-types::list` builtin has been removed and is now
|
|
45
|
-
* served by `engine::triggers::list`.
|
|
46
|
-
*/
|
|
47
|
-
const EngineFunctions = {
|
|
48
|
-
LIST_FUNCTIONS: "engine::functions::list",
|
|
49
|
-
INFO_FUNCTIONS: "engine::functions::info",
|
|
50
|
-
LIST_WORKERS: "engine::workers::list",
|
|
51
|
-
INFO_WORKERS: "engine::workers::info",
|
|
52
|
-
LIST_TRIGGERS: "engine::triggers::list",
|
|
53
|
-
INFO_TRIGGERS: "engine::triggers::info",
|
|
54
|
-
LIST_REGISTERED_TRIGGERS: "engine::registered-triggers::list",
|
|
55
|
-
INFO_REGISTERED_TRIGGERS: "engine::registered-triggers::info",
|
|
56
|
-
REGISTER_WORKER: "engine::workers::register"
|
|
57
|
-
};
|
|
58
|
-
/** Engine trigger types */
|
|
59
|
-
const EngineTriggers = {
|
|
60
|
-
FUNCTIONS_AVAILABLE: "engine::functions-available",
|
|
61
|
-
LOG: "log"
|
|
62
|
-
};
|
|
63
|
-
/** Default reconnection configuration */
|
|
64
|
-
const DEFAULT_BRIDGE_RECONNECTION_CONFIG = {
|
|
65
|
-
initialDelayMs: 1e3,
|
|
66
|
-
maxDelayMs: 3e4,
|
|
67
|
-
backoffMultiplier: 2,
|
|
68
|
-
jitterFactor: .3,
|
|
69
|
-
maxRetries: -1
|
|
70
|
-
};
|
|
71
|
-
/** Default invocation timeout in milliseconds */
|
|
72
|
-
const DEFAULT_INVOCATION_TIMEOUT_MS = 3e4;
|
|
73
|
-
|
|
74
|
-
//#endregion
|
|
75
|
-
//#region src/iii-types.ts
|
|
76
|
-
let MessageType = /* @__PURE__ */ function(MessageType) {
|
|
77
|
-
MessageType["RegisterFunction"] = "registerfunction";
|
|
78
|
-
MessageType["UnregisterFunction"] = "unregisterfunction";
|
|
79
|
-
MessageType["InvokeFunction"] = "invokefunction";
|
|
80
|
-
MessageType["InvocationResult"] = "invocationresult";
|
|
81
|
-
MessageType["RegisterTriggerType"] = "registertriggertype";
|
|
82
|
-
MessageType["RegisterTrigger"] = "registertrigger";
|
|
83
|
-
MessageType["UnregisterTrigger"] = "unregistertrigger";
|
|
84
|
-
MessageType["UnregisterTriggerType"] = "unregistertriggertype";
|
|
85
|
-
MessageType["TriggerRegistrationResult"] = "triggerregistrationresult";
|
|
86
|
-
MessageType["WorkerRegistered"] = "workerregistered";
|
|
87
|
-
return MessageType;
|
|
88
|
-
}({});
|
|
11
|
+
let ws = require("ws");
|
|
12
|
+
let _iii_dev_helpers_observability = require("@iii-dev/helpers/observability");
|
|
13
|
+
let _iii_dev_helpers_observability_internal = require("@iii-dev/helpers/observability/internal");
|
|
89
14
|
|
|
90
|
-
//#endregion
|
|
91
15
|
//#region src/iii.ts
|
|
92
16
|
const { version: SDK_VERSION } = (0, node_module.createRequire)(require("url").pathToFileURL(__filename).href)("../package.json");
|
|
93
17
|
function getOsInfo() {
|
|
@@ -109,11 +33,11 @@ var Sdk = class {
|
|
|
109
33
|
this.connectionState = "disconnected";
|
|
110
34
|
this.isShuttingDown = false;
|
|
111
35
|
this.registerTriggerType = (triggerType, handler) => {
|
|
112
|
-
this.sendMessage(MessageType.RegisterTriggerType, triggerType, true);
|
|
36
|
+
this.sendMessage(require_iii_types.MessageType.RegisterTriggerType, triggerType, true);
|
|
113
37
|
this.triggerTypes.set(triggerType.id, {
|
|
114
38
|
message: {
|
|
115
39
|
...triggerType,
|
|
116
|
-
message_type: MessageType.RegisterTriggerType
|
|
40
|
+
message_type: require_iii_types.MessageType.RegisterTriggerType
|
|
117
41
|
},
|
|
118
42
|
handler
|
|
119
43
|
});
|
|
@@ -143,7 +67,7 @@ var Sdk = class {
|
|
|
143
67
|
};
|
|
144
68
|
};
|
|
145
69
|
this.unregisterTriggerType = (triggerType) => {
|
|
146
|
-
this.sendMessage(MessageType.UnregisterTriggerType, triggerType, true);
|
|
70
|
+
this.sendMessage(require_iii_types.MessageType.UnregisterTriggerType, triggerType, true);
|
|
147
71
|
this.triggerTypes.delete(triggerType.id);
|
|
148
72
|
};
|
|
149
73
|
this.registerTrigger = (trigger) => {
|
|
@@ -151,14 +75,14 @@ var Sdk = class {
|
|
|
151
75
|
const fullTrigger = {
|
|
152
76
|
...trigger,
|
|
153
77
|
id,
|
|
154
|
-
message_type: MessageType.RegisterTrigger
|
|
78
|
+
message_type: require_iii_types.MessageType.RegisterTrigger
|
|
155
79
|
};
|
|
156
|
-
this.sendMessage(MessageType.RegisterTrigger, fullTrigger, true);
|
|
80
|
+
this.sendMessage(require_iii_types.MessageType.RegisterTrigger, fullTrigger, true);
|
|
157
81
|
this.triggers.set(id, fullTrigger);
|
|
158
82
|
return { unregister: () => {
|
|
159
|
-
this.sendMessage(MessageType.UnregisterTrigger, {
|
|
83
|
+
this.sendMessage(require_iii_types.MessageType.UnregisterTrigger, {
|
|
160
84
|
id,
|
|
161
|
-
message_type: MessageType.UnregisterTrigger,
|
|
85
|
+
message_type: require_iii_types.MessageType.UnregisterTrigger,
|
|
162
86
|
type: fullTrigger.type
|
|
163
87
|
});
|
|
164
88
|
this.triggers.delete(id);
|
|
@@ -171,11 +95,11 @@ var Sdk = class {
|
|
|
171
95
|
const fullMessage = isHandler ? {
|
|
172
96
|
...options,
|
|
173
97
|
id: functionId,
|
|
174
|
-
message_type: MessageType.RegisterFunction
|
|
98
|
+
message_type: require_iii_types.MessageType.RegisterFunction
|
|
175
99
|
} : {
|
|
176
100
|
...options,
|
|
177
101
|
id: functionId,
|
|
178
|
-
message_type: MessageType.RegisterFunction,
|
|
102
|
+
message_type: require_iii_types.MessageType.RegisterFunction,
|
|
179
103
|
invocation: {
|
|
180
104
|
url: handlerOrInvocation.url,
|
|
181
105
|
method: handlerOrInvocation.method ?? "POST",
|
|
@@ -184,27 +108,27 @@ var Sdk = class {
|
|
|
184
108
|
auth: handlerOrInvocation.auth
|
|
185
109
|
}
|
|
186
110
|
};
|
|
187
|
-
this.sendMessage(MessageType.RegisterFunction, fullMessage, true);
|
|
111
|
+
this.sendMessage(require_iii_types.MessageType.RegisterFunction, fullMessage, true);
|
|
188
112
|
if (isHandler) {
|
|
189
113
|
const handler = handlerOrInvocation;
|
|
190
114
|
this.functions.set(functionId, {
|
|
191
115
|
message: fullMessage,
|
|
192
|
-
handler: async (input, traceparent, baggage) => {
|
|
116
|
+
handler: async (input, metadata, traceparent, baggage) => {
|
|
193
117
|
const tracePayloads = !(process.env.III_DISABLE_TRACE_PAYLOADS === "1" || process.env.III_DISABLE_TRACE_PAYLOADS?.toLowerCase() === "true");
|
|
194
|
-
const payloadMaxBytes = (0,
|
|
118
|
+
const payloadMaxBytes = (0, _iii_dev_helpers_observability.resolveMaxBytesFromEnv)();
|
|
195
119
|
const runHandler = async () => {
|
|
196
120
|
if (tracePayloads) {
|
|
197
|
-
const { json, truncated } = (0,
|
|
198
|
-
(0,
|
|
121
|
+
const { json, truncated } = (0, _iii_dev_helpers_observability.redactAndTruncate)(input, payloadMaxBytes);
|
|
122
|
+
(0, _iii_dev_helpers_observability.recordSpanEvent)("iii.invocation.input", {
|
|
199
123
|
"iii.payload.json": json,
|
|
200
124
|
"iii.payload.truncated": truncated
|
|
201
125
|
});
|
|
202
126
|
}
|
|
203
127
|
try {
|
|
204
|
-
const result = await handler(input);
|
|
128
|
+
const result = await handler(input, metadata);
|
|
205
129
|
if (tracePayloads) {
|
|
206
|
-
const { json, truncated } = (0,
|
|
207
|
-
(0,
|
|
130
|
+
const { json, truncated } = (0, _iii_dev_helpers_observability.redactAndTruncate)(result, payloadMaxBytes);
|
|
131
|
+
(0, _iii_dev_helpers_observability.recordSpanEvent)("iii.invocation.output", {
|
|
208
132
|
"iii.payload.json": json,
|
|
209
133
|
"iii.payload.truncated": truncated,
|
|
210
134
|
"iii.payload.ok": true
|
|
@@ -213,8 +137,8 @@ var Sdk = class {
|
|
|
213
137
|
return result;
|
|
214
138
|
} catch (err) {
|
|
215
139
|
if (tracePayloads) {
|
|
216
|
-
const { json, truncated } = (0,
|
|
217
|
-
(0,
|
|
140
|
+
const { json, truncated } = (0, _iii_dev_helpers_observability.redactAndTruncate)({ error: err instanceof Error ? err.message : String(err) }, payloadMaxBytes);
|
|
141
|
+
(0, _iii_dev_helpers_observability.recordSpanEvent)("iii.invocation.output", {
|
|
218
142
|
"iii.payload.json": json,
|
|
219
143
|
"iii.payload.truncated": truncated,
|
|
220
144
|
"iii.payload.ok": false
|
|
@@ -223,9 +147,9 @@ var Sdk = class {
|
|
|
223
147
|
throw err;
|
|
224
148
|
}
|
|
225
149
|
};
|
|
226
|
-
if ((0,
|
|
227
|
-
const parentContext = (0,
|
|
228
|
-
return _opentelemetry_api.context.with(parentContext, () => (0,
|
|
150
|
+
if ((0, _iii_dev_helpers_observability_internal.getTracer)()) {
|
|
151
|
+
const parentContext = (0, _iii_dev_helpers_observability.extractContext)(traceparent, baggage);
|
|
152
|
+
return _opentelemetry_api.context.with(parentContext, () => (0, _iii_dev_helpers_observability.withSpan)(`execute ${functionId}`, { kind: _opentelemetry_api.SpanKind.INTERNAL }, async () => await runHandler()));
|
|
229
153
|
}
|
|
230
154
|
const traceId = crypto.randomUUID().replace(/-/g, "");
|
|
231
155
|
const spanId = crypto.randomUUID().replace(/-/g, "").slice(0, 16);
|
|
@@ -241,7 +165,7 @@ var Sdk = class {
|
|
|
241
165
|
return {
|
|
242
166
|
id: functionId,
|
|
243
167
|
unregister: () => {
|
|
244
|
-
this.sendMessage(MessageType.UnregisterFunction, { id: functionId }, true);
|
|
168
|
+
this.sendMessage(require_iii_types.MessageType.UnregisterFunction, { id: functionId }, true);
|
|
245
169
|
this.functions.delete(functionId);
|
|
246
170
|
}
|
|
247
171
|
};
|
|
@@ -252,35 +176,36 @@ var Sdk = class {
|
|
|
252
176
|
payload: { buffer_size: bufferSize }
|
|
253
177
|
});
|
|
254
178
|
return {
|
|
255
|
-
writer: new
|
|
256
|
-
reader: new
|
|
179
|
+
writer: new require_channels.ChannelWriter(this.address, result.writer),
|
|
180
|
+
reader: new require_channels.ChannelReader(this.address, result.reader),
|
|
257
181
|
writerRef: result.writer,
|
|
258
182
|
readerRef: result.reader
|
|
259
183
|
};
|
|
260
184
|
};
|
|
261
185
|
this.trigger = async (request) => {
|
|
262
|
-
const { function_id, payload, action, timeoutMs } = request;
|
|
186
|
+
const { function_id, payload, action, timeoutMs, metadata } = request;
|
|
263
187
|
const effectiveTimeout = timeoutMs ?? this.invocationTimeoutMs;
|
|
264
188
|
if (action?.type === "void") {
|
|
265
|
-
const traceparent = (0,
|
|
266
|
-
const baggage = (0,
|
|
267
|
-
this.sendMessage(MessageType.InvokeFunction, {
|
|
189
|
+
const traceparent = (0, _iii_dev_helpers_observability.injectTraceparent)();
|
|
190
|
+
const baggage = (0, _iii_dev_helpers_observability.injectBaggage)();
|
|
191
|
+
this.sendMessage(require_iii_types.MessageType.InvokeFunction, {
|
|
268
192
|
function_id,
|
|
269
193
|
data: payload,
|
|
270
194
|
traceparent,
|
|
271
195
|
baggage,
|
|
272
|
-
action
|
|
196
|
+
action,
|
|
197
|
+
metadata
|
|
273
198
|
});
|
|
274
199
|
return;
|
|
275
200
|
}
|
|
276
201
|
const invocation_id = crypto.randomUUID();
|
|
277
|
-
const traceparent = (0,
|
|
278
|
-
const baggage = (0,
|
|
202
|
+
const traceparent = (0, _iii_dev_helpers_observability.injectTraceparent)();
|
|
203
|
+
const baggage = (0, _iii_dev_helpers_observability.injectBaggage)();
|
|
279
204
|
return new Promise((resolve, reject) => {
|
|
280
205
|
const timeout = setTimeout(() => {
|
|
281
206
|
if (this.invocations.get(invocation_id)) {
|
|
282
207
|
this.invocations.delete(invocation_id);
|
|
283
|
-
reject(new
|
|
208
|
+
reject(new require_errors.InvocationError({
|
|
284
209
|
code: "TIMEOUT",
|
|
285
210
|
message: `invocation timed out after ${effectiveTimeout}ms`,
|
|
286
211
|
function_id
|
|
@@ -299,13 +224,14 @@ var Sdk = class {
|
|
|
299
224
|
function_id,
|
|
300
225
|
timeout
|
|
301
226
|
});
|
|
302
|
-
this.sendMessage(MessageType.InvokeFunction, {
|
|
227
|
+
this.sendMessage(require_iii_types.MessageType.InvokeFunction, {
|
|
303
228
|
invocation_id,
|
|
304
229
|
function_id,
|
|
305
230
|
data: payload,
|
|
306
231
|
traceparent,
|
|
307
232
|
baggage,
|
|
308
|
-
action
|
|
233
|
+
action,
|
|
234
|
+
metadata
|
|
309
235
|
});
|
|
310
236
|
});
|
|
311
237
|
};
|
|
@@ -319,7 +245,7 @@ var Sdk = class {
|
|
|
319
245
|
this.shutdown = async () => {
|
|
320
246
|
this.isShuttingDown = true;
|
|
321
247
|
this.stopMetricsReporting();
|
|
322
|
-
await (0,
|
|
248
|
+
await (0, _iii_dev_helpers_observability.shutdownOtel)();
|
|
323
249
|
this.clearReconnectTimeout();
|
|
324
250
|
for (const [_id, invocation] of this.invocations) {
|
|
325
251
|
if (invocation.timeout) clearTimeout(invocation.timeout);
|
|
@@ -341,10 +267,10 @@ var Sdk = class {
|
|
|
341
267
|
this.metricsReportingEnabled = options?.enableMetricsReporting ?? true;
|
|
342
268
|
this.invocationTimeoutMs = options?.invocationTimeoutMs ?? 3e4;
|
|
343
269
|
this.reconnectionConfig = {
|
|
344
|
-
...DEFAULT_BRIDGE_RECONNECTION_CONFIG,
|
|
270
|
+
...require_iii_constants.DEFAULT_BRIDGE_RECONNECTION_CONFIG,
|
|
345
271
|
...options?.reconnectionConfig
|
|
346
272
|
};
|
|
347
|
-
(0,
|
|
273
|
+
(0, _iii_dev_helpers_observability.initOtel)({
|
|
348
274
|
...options?.otel,
|
|
349
275
|
engineWsUrl: this.address
|
|
350
276
|
});
|
|
@@ -354,7 +280,7 @@ var Sdk = class {
|
|
|
354
280
|
const telemetryOpts = this.options?.telemetry;
|
|
355
281
|
const language = telemetryOpts?.language ?? Intl.DateTimeFormat().resolvedOptions().locale ?? process.env.LANG?.split(".")[0];
|
|
356
282
|
this.trigger({
|
|
357
|
-
function_id: EngineFunctions.REGISTER_WORKER,
|
|
283
|
+
function_id: require_iii_constants.EngineFunctions.REGISTER_WORKER,
|
|
358
284
|
payload: {
|
|
359
285
|
runtime: "node",
|
|
360
286
|
version: SDK_VERSION,
|
|
@@ -416,18 +342,18 @@ var Sdk = class {
|
|
|
416
342
|
}
|
|
417
343
|
startMetricsReporting() {
|
|
418
344
|
if (!this.metricsReportingEnabled || !this.workerId) return;
|
|
419
|
-
const meter = (0,
|
|
345
|
+
const meter = (0, _iii_dev_helpers_observability_internal.getMeter)();
|
|
420
346
|
if (!meter) {
|
|
421
347
|
console.warn("[iii] Worker metrics disabled: OpenTelemetry not initialized. Call initOtel() with metricsEnabled: true before creating the iii.");
|
|
422
348
|
return;
|
|
423
349
|
}
|
|
424
|
-
(0,
|
|
350
|
+
(0, _iii_dev_helpers_observability.registerWorkerGauges)(meter, {
|
|
425
351
|
workerId: this.workerId,
|
|
426
352
|
workerName: this.workerName
|
|
427
353
|
});
|
|
428
354
|
}
|
|
429
355
|
stopMetricsReporting() {
|
|
430
|
-
(0,
|
|
356
|
+
(0, _iii_dev_helpers_observability.stopWorkerGauges)();
|
|
431
357
|
}
|
|
432
358
|
onSocketClose() {
|
|
433
359
|
this.ws?.removeAllListeners();
|
|
@@ -443,18 +369,18 @@ var Sdk = class {
|
|
|
443
369
|
this.setConnectionState("connected");
|
|
444
370
|
this.ws?.on("message", this.onMessage.bind(this));
|
|
445
371
|
this.triggerTypes.forEach(({ message }) => {
|
|
446
|
-
this.sendMessage(MessageType.RegisterTriggerType, message, true);
|
|
372
|
+
this.sendMessage(require_iii_types.MessageType.RegisterTriggerType, message, true);
|
|
447
373
|
});
|
|
448
374
|
this.functions.forEach(({ message }) => {
|
|
449
|
-
this.sendMessage(MessageType.RegisterFunction, message, true);
|
|
375
|
+
this.sendMessage(require_iii_types.MessageType.RegisterFunction, message, true);
|
|
450
376
|
});
|
|
451
377
|
this.triggers.forEach((trigger) => {
|
|
452
|
-
this.sendMessage(MessageType.RegisterTrigger, trigger, true);
|
|
378
|
+
this.sendMessage(require_iii_types.MessageType.RegisterTrigger, trigger, true);
|
|
453
379
|
});
|
|
454
380
|
const pending = this.messagesToSend;
|
|
455
381
|
this.messagesToSend = [];
|
|
456
382
|
for (const message of pending) {
|
|
457
|
-
if (message.type === MessageType.InvokeFunction && typeof message.invocation_id === "string" && !this.invocations.has(message.invocation_id)) continue;
|
|
383
|
+
if (message.type === require_iii_types.MessageType.InvokeFunction && typeof message.invocation_id === "string" && !this.invocations.has(message.invocation_id)) continue;
|
|
458
384
|
this.sendMessageRaw(JSON.stringify(message));
|
|
459
385
|
}
|
|
460
386
|
this.registerWorkerMetadata();
|
|
@@ -473,7 +399,7 @@ var Sdk = class {
|
|
|
473
399
|
}
|
|
474
400
|
toWireFormat(messageType, message) {
|
|
475
401
|
const { message_type: _, ...rest } = message;
|
|
476
|
-
if (messageType === MessageType.RegisterTrigger && "type" in message) {
|
|
402
|
+
if (messageType === require_iii_types.MessageType.RegisterTrigger && "type" in message) {
|
|
477
403
|
const { type: triggerType, ...triggerRest } = message;
|
|
478
404
|
return {
|
|
479
405
|
type: messageType,
|
|
@@ -481,7 +407,7 @@ var Sdk = class {
|
|
|
481
407
|
trigger_type: triggerType
|
|
482
408
|
};
|
|
483
409
|
}
|
|
484
|
-
if (messageType === MessageType.UnregisterTrigger && "type" in message) {
|
|
410
|
+
if (messageType === require_iii_types.MessageType.UnregisterTrigger && "type" in message) {
|
|
485
411
|
const { type: triggerType, ...triggerRest } = message;
|
|
486
412
|
return {
|
|
487
413
|
type: messageType,
|
|
@@ -489,7 +415,7 @@ var Sdk = class {
|
|
|
489
415
|
trigger_type: triggerType
|
|
490
416
|
};
|
|
491
417
|
}
|
|
492
|
-
if (messageType === MessageType.TriggerRegistrationResult && "type" in message) {
|
|
418
|
+
if (messageType === require_iii_types.MessageType.TriggerRegistrationResult && "type" in message) {
|
|
493
419
|
const { type: triggerType, ...resultRest } = message;
|
|
494
420
|
return {
|
|
495
421
|
type: messageType,
|
|
@@ -508,10 +434,10 @@ var Sdk = class {
|
|
|
508
434
|
else if (!skipIfClosed) this.messagesToSend.push(wireMessage);
|
|
509
435
|
}
|
|
510
436
|
logError(message, error) {
|
|
511
|
-
const otelLogger = (0,
|
|
437
|
+
const otelLogger = (0, _iii_dev_helpers_observability.getLogger)();
|
|
512
438
|
const errorMessage = error instanceof Error ? error.message : String(error ?? "");
|
|
513
439
|
if (otelLogger) otelLogger.emit({
|
|
514
|
-
severityNumber:
|
|
440
|
+
severityNumber: _iii_dev_helpers_observability.SeverityNumber.ERROR,
|
|
515
441
|
body: `[iii] ${message}${errorMessage ? `: ${errorMessage}` : ""}`
|
|
516
442
|
});
|
|
517
443
|
else console.error(`[iii] ${message}`, error ?? "");
|
|
@@ -526,7 +452,7 @@ var Sdk = class {
|
|
|
526
452
|
this.invocations.delete(invocation_id);
|
|
527
453
|
}
|
|
528
454
|
/**
|
|
529
|
-
* Wrap a wire-format `ErrorBody` in {@link
|
|
455
|
+
* Wrap a wire-format `ErrorBody` in {@link InvocationError} so callers get
|
|
530
456
|
* a real `Error` with a readable `.message` and a typed `.code`. Pass-through
|
|
531
457
|
* for values that are already `Error` subclasses. Everything else is wrapped
|
|
532
458
|
* under an `UNKNOWN` code so `String(err) !== '[object Object]'` holds for
|
|
@@ -534,20 +460,20 @@ var Sdk = class {
|
|
|
534
460
|
*/
|
|
535
461
|
toInvocationError(error, function_id) {
|
|
536
462
|
if (error instanceof Error) return error;
|
|
537
|
-
if (isErrorBody(error)) return new
|
|
463
|
+
if (require_errors.isErrorBody(error)) return new require_errors.InvocationError({
|
|
538
464
|
code: error.code,
|
|
539
465
|
message: error.message,
|
|
540
466
|
function_id,
|
|
541
467
|
stacktrace: error.stacktrace
|
|
542
468
|
});
|
|
543
|
-
return new
|
|
469
|
+
return new require_errors.InvocationError({
|
|
544
470
|
code: "UNKNOWN",
|
|
545
471
|
message: typeof error === "string" ? error : JSON.stringify(error) ?? String(error),
|
|
546
472
|
function_id
|
|
547
473
|
});
|
|
548
474
|
}
|
|
549
475
|
resolveChannelValue(value) {
|
|
550
|
-
if (require_utils.isChannelRef(value)) return value.direction === "read" ? new
|
|
476
|
+
if (require_utils.isChannelRef(value)) return value.direction === "read" ? new require_channels.ChannelReader(this.address, value) : new require_channels.ChannelWriter(this.address, value);
|
|
551
477
|
if (Array.isArray(value)) return value.map((item) => this.resolveChannelValue(item));
|
|
552
478
|
if (value !== null && typeof value === "object") {
|
|
553
479
|
const out = {};
|
|
@@ -556,23 +482,23 @@ var Sdk = class {
|
|
|
556
482
|
}
|
|
557
483
|
return value;
|
|
558
484
|
}
|
|
559
|
-
async onInvokeFunction(invocation_id, function_id, input, traceparent, baggage) {
|
|
485
|
+
async onInvokeFunction(invocation_id, function_id, input, metadata, traceparent, baggage) {
|
|
560
486
|
const fn = this.functions.get(function_id);
|
|
561
|
-
const getResponseTraceparent = () => (0,
|
|
562
|
-
const getResponseBaggage = () => (0,
|
|
487
|
+
const getResponseTraceparent = () => (0, _iii_dev_helpers_observability.injectTraceparent)() ?? traceparent;
|
|
488
|
+
const getResponseBaggage = () => (0, _iii_dev_helpers_observability.injectBaggage)() ?? baggage;
|
|
563
489
|
const resolvedInput = this.resolveChannelValue(input);
|
|
564
490
|
if (fn?.handler) {
|
|
565
491
|
if (!invocation_id) {
|
|
566
492
|
try {
|
|
567
|
-
await fn.handler(resolvedInput, traceparent, baggage);
|
|
493
|
+
await fn.handler(resolvedInput, metadata, traceparent, baggage);
|
|
568
494
|
} catch (error) {
|
|
569
495
|
this.logError(`Error invoking function ${function_id}`, error);
|
|
570
496
|
}
|
|
571
497
|
return;
|
|
572
498
|
}
|
|
573
499
|
try {
|
|
574
|
-
const result = await fn.handler(resolvedInput, traceparent, baggage);
|
|
575
|
-
this.sendMessage(MessageType.InvocationResult, {
|
|
500
|
+
const result = await fn.handler(resolvedInput, metadata, traceparent, baggage);
|
|
501
|
+
this.sendMessage(require_iii_types.MessageType.InvocationResult, {
|
|
576
502
|
invocation_id,
|
|
577
503
|
function_id,
|
|
578
504
|
result,
|
|
@@ -581,7 +507,7 @@ var Sdk = class {
|
|
|
581
507
|
});
|
|
582
508
|
} catch (error) {
|
|
583
509
|
const isError = error instanceof Error;
|
|
584
|
-
this.sendMessage(MessageType.InvocationResult, {
|
|
510
|
+
this.sendMessage(require_iii_types.MessageType.InvocationResult, {
|
|
585
511
|
invocation_id,
|
|
586
512
|
function_id,
|
|
587
513
|
error: {
|
|
@@ -596,7 +522,7 @@ var Sdk = class {
|
|
|
596
522
|
} else {
|
|
597
523
|
const errorCode = fn ? "function_not_invokable" : "function_not_found";
|
|
598
524
|
const errorMessage = fn ? "Function is HTTP-invoked and cannot be invoked locally" : "Function not found";
|
|
599
|
-
if (invocation_id) this.sendMessage(MessageType.InvocationResult, {
|
|
525
|
+
if (invocation_id) this.sendMessage(require_iii_types.MessageType.InvocationResult, {
|
|
600
526
|
invocation_id,
|
|
601
527
|
function_id,
|
|
602
528
|
error: {
|
|
@@ -618,16 +544,16 @@ var Sdk = class {
|
|
|
618
544
|
config,
|
|
619
545
|
metadata
|
|
620
546
|
});
|
|
621
|
-
this.sendMessage(MessageType.TriggerRegistrationResult, {
|
|
547
|
+
this.sendMessage(require_iii_types.MessageType.TriggerRegistrationResult, {
|
|
622
548
|
id,
|
|
623
|
-
message_type: MessageType.TriggerRegistrationResult,
|
|
549
|
+
message_type: require_iii_types.MessageType.TriggerRegistrationResult,
|
|
624
550
|
type: trigger_type,
|
|
625
551
|
function_id
|
|
626
552
|
});
|
|
627
553
|
} catch (error) {
|
|
628
|
-
this.sendMessage(MessageType.TriggerRegistrationResult, {
|
|
554
|
+
this.sendMessage(require_iii_types.MessageType.TriggerRegistrationResult, {
|
|
629
555
|
id,
|
|
630
|
-
message_type: MessageType.TriggerRegistrationResult,
|
|
556
|
+
message_type: require_iii_types.MessageType.TriggerRegistrationResult,
|
|
631
557
|
type: trigger_type,
|
|
632
558
|
function_id,
|
|
633
559
|
error: {
|
|
@@ -636,9 +562,9 @@ var Sdk = class {
|
|
|
636
562
|
}
|
|
637
563
|
});
|
|
638
564
|
}
|
|
639
|
-
else this.sendMessage(MessageType.TriggerRegistrationResult, {
|
|
565
|
+
else this.sendMessage(require_iii_types.MessageType.TriggerRegistrationResult, {
|
|
640
566
|
id,
|
|
641
|
-
message_type: MessageType.TriggerRegistrationResult,
|
|
567
|
+
message_type: require_iii_types.MessageType.TriggerRegistrationResult,
|
|
642
568
|
type: trigger_type,
|
|
643
569
|
function_id,
|
|
644
570
|
error: {
|
|
@@ -681,16 +607,16 @@ var Sdk = class {
|
|
|
681
607
|
this.logError("Failed to parse incoming message", error);
|
|
682
608
|
return;
|
|
683
609
|
}
|
|
684
|
-
if (msgType === MessageType.InvocationResult) {
|
|
610
|
+
if (msgType === require_iii_types.MessageType.InvocationResult) {
|
|
685
611
|
const { invocation_id, result, error } = message;
|
|
686
612
|
this.onInvocationResult(invocation_id, result, error);
|
|
687
|
-
} else if (msgType === MessageType.InvokeFunction) {
|
|
688
|
-
const { invocation_id, function_id, data, traceparent, baggage } = message;
|
|
689
|
-
this.onInvokeFunction(invocation_id, function_id, data, traceparent, baggage);
|
|
690
|
-
} else if (msgType === MessageType.RegisterTrigger) this.onRegisterTrigger(message);
|
|
691
|
-
else if (msgType === MessageType.UnregisterTrigger) this.onUnregisterTrigger(message);
|
|
692
|
-
else if (msgType === MessageType.TriggerRegistrationResult) this.onTriggerRegistrationResult(message);
|
|
693
|
-
else if (msgType === MessageType.WorkerRegistered) {
|
|
613
|
+
} else if (msgType === require_iii_types.MessageType.InvokeFunction) {
|
|
614
|
+
const { invocation_id, function_id, data, metadata, traceparent, baggage } = message;
|
|
615
|
+
this.onInvokeFunction(invocation_id, function_id, data, metadata, traceparent, baggage);
|
|
616
|
+
} else if (msgType === require_iii_types.MessageType.RegisterTrigger) this.onRegisterTrigger(message);
|
|
617
|
+
else if (msgType === require_iii_types.MessageType.UnregisterTrigger) this.onUnregisterTrigger(message);
|
|
618
|
+
else if (msgType === require_iii_types.MessageType.TriggerRegistrationResult) this.onTriggerRegistrationResult(message);
|
|
619
|
+
else if (msgType === require_iii_types.MessageType.WorkerRegistered) {
|
|
694
620
|
const { worker_id } = message;
|
|
695
621
|
this.workerId = worker_id;
|
|
696
622
|
console.debug("[iii] Worker registered with ID:", worker_id);
|
|
@@ -699,21 +625,21 @@ var Sdk = class {
|
|
|
699
625
|
}
|
|
700
626
|
};
|
|
701
627
|
/**
|
|
702
|
-
* Factory object that constructs routing actions for {@link
|
|
628
|
+
* Factory object that constructs routing actions for {@link IIIClient.trigger}.
|
|
703
629
|
*
|
|
704
630
|
* @example
|
|
705
631
|
* ```typescript
|
|
706
632
|
* import { TriggerAction } from 'iii-sdk'
|
|
707
633
|
*
|
|
708
634
|
* // Enqueue to a named queue
|
|
709
|
-
*
|
|
635
|
+
* worker.trigger({
|
|
710
636
|
* function_id: 'process',
|
|
711
637
|
* payload: { data: 'hello' },
|
|
712
638
|
* action: TriggerAction.Enqueue({ queue: 'jobs' }),
|
|
713
639
|
* })
|
|
714
640
|
*
|
|
715
641
|
* // Fire-and-forget
|
|
716
|
-
*
|
|
642
|
+
* worker.trigger({
|
|
717
643
|
* function_id: 'notify',
|
|
718
644
|
* payload: {},
|
|
719
645
|
* action: TriggerAction.Void(),
|
|
@@ -733,13 +659,13 @@ const TriggerAction = {
|
|
|
733
659
|
*
|
|
734
660
|
* @param address - WebSocket URL of the III engine (e.g. `ws://localhost:49134`).
|
|
735
661
|
* @param options - Optional {@link InitOptions} for worker name, timeouts, reconnection, and OTel.
|
|
736
|
-
* @returns A connected {@link
|
|
662
|
+
* @returns A connected {@link IIIClient} instance.
|
|
737
663
|
*
|
|
738
664
|
* @example
|
|
739
665
|
* ```typescript
|
|
740
666
|
* import { registerWorker } from 'iii-sdk'
|
|
741
667
|
*
|
|
742
|
-
* const
|
|
668
|
+
* const worker = registerWorker(process.env.III_URL ?? 'ws://localhost:49134', {
|
|
743
669
|
* workerName: 'my-worker',
|
|
744
670
|
* })
|
|
745
671
|
* ```
|
|
@@ -747,12 +673,7 @@ const TriggerAction = {
|
|
|
747
673
|
const registerWorker = (address, options) => new Sdk(address, options);
|
|
748
674
|
|
|
749
675
|
//#endregion
|
|
750
|
-
exports.
|
|
751
|
-
exports.ChannelWriter = require_utils.ChannelWriter;
|
|
752
|
-
exports.EngineFunctions = EngineFunctions;
|
|
753
|
-
exports.EngineTriggers = EngineTriggers;
|
|
754
|
-
exports.IIIInvocationError = IIIInvocationError;
|
|
676
|
+
exports.InvocationError = require_errors.InvocationError;
|
|
755
677
|
exports.TriggerAction = TriggerAction;
|
|
756
|
-
exports.http = require_utils.http;
|
|
757
678
|
exports.registerWorker = registerWorker;
|
|
758
679
|
//# sourceMappingURL=index.cjs.map
|