@octonodes/sdk 0.0.3 → 0.1.0

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 (69) hide show
  1. package/PLUGINS.md +128 -0
  2. package/README.md +107 -9
  3. package/dist/gen/index.d.ts +2 -2
  4. package/dist/gen/index.d.ts.map +1 -1
  5. package/dist/gen/index.js +4 -3
  6. package/dist/gen/index.js.map +1 -1
  7. package/dist/gen/sdk.gen.d.ts +9 -1
  8. package/dist/gen/sdk.gen.d.ts.map +1 -1
  9. package/dist/gen/sdk.gen.js +21 -3
  10. package/dist/gen/sdk.gen.js.map +1 -1
  11. package/dist/gen/types.gen.d.ts +230 -0
  12. package/dist/gen/types.gen.d.ts.map +1 -1
  13. package/dist/plugins/index.d.ts +2 -0
  14. package/dist/plugins/index.d.ts.map +1 -0
  15. package/dist/plugins/index.js +19 -0
  16. package/dist/plugins/index.js.map +1 -0
  17. package/dist/plugins/schema/constants.d.ts +33 -0
  18. package/dist/plugins/schema/constants.d.ts.map +1 -0
  19. package/dist/plugins/schema/constants.js +207 -0
  20. package/dist/plugins/schema/constants.js.map +1 -0
  21. package/dist/plugins/schema/icons.d.ts +5 -0
  22. package/dist/plugins/schema/icons.d.ts.map +1 -0
  23. package/dist/plugins/schema/icons.js +62 -0
  24. package/dist/plugins/schema/icons.js.map +1 -0
  25. package/dist/plugins/schema/ipc-envelope.d.ts +923 -0
  26. package/dist/plugins/schema/ipc-envelope.d.ts.map +1 -0
  27. package/dist/plugins/schema/ipc-envelope.js +210 -0
  28. package/dist/plugins/schema/ipc-envelope.js.map +1 -0
  29. package/dist/plugins/schema/plugin-sdk/index.d.ts +5 -0
  30. package/dist/plugins/schema/plugin-sdk/index.d.ts.map +1 -0
  31. package/dist/plugins/schema/plugin-sdk/index.js +25 -0
  32. package/dist/plugins/schema/plugin-sdk/index.js.map +1 -0
  33. package/dist/plugins/schema/plugin.d.ts +662 -0
  34. package/dist/plugins/schema/plugin.d.ts.map +1 -0
  35. package/dist/plugins/schema/plugin.js +144 -0
  36. package/dist/plugins/schema/plugin.js.map +1 -0
  37. package/dist/plugins/sdk/define-node.d.ts +103 -0
  38. package/dist/plugins/sdk/define-node.d.ts.map +1 -0
  39. package/dist/plugins/sdk/define-node.js +58 -0
  40. package/dist/plugins/sdk/define-node.js.map +1 -0
  41. package/dist/plugins/sdk/json-schema.d.ts +17 -0
  42. package/dist/plugins/sdk/json-schema.d.ts.map +1 -0
  43. package/dist/plugins/sdk/json-schema.js +79 -0
  44. package/dist/plugins/sdk/json-schema.js.map +1 -0
  45. package/dist/plugins/sdk/plugin.d.ts +7 -0
  46. package/dist/plugins/sdk/plugin.d.ts.map +1 -0
  47. package/dist/plugins/sdk/plugin.js +74 -0
  48. package/dist/plugins/sdk/plugin.js.map +1 -0
  49. package/dist/plugins/sdk/plugin.types.d.ts +15 -0
  50. package/dist/plugins/sdk/plugin.types.d.ts.map +1 -0
  51. package/dist/plugins/sdk/plugin.types.js +3 -0
  52. package/dist/plugins/sdk/plugin.types.js.map +1 -0
  53. package/dist/plugins/sdk/plugins/define-node.d.ts +29 -0
  54. package/dist/plugins/sdk/plugins/define-node.d.ts.map +1 -0
  55. package/dist/plugins/sdk/plugins/define-node.js +16 -0
  56. package/dist/plugins/sdk/plugins/define-node.js.map +1 -0
  57. package/dist/plugins/sdk/plugins/index.d.ts +10 -0
  58. package/dist/plugins/sdk/plugins/index.d.ts.map +1 -0
  59. package/dist/plugins/sdk/plugins/index.js +23 -0
  60. package/dist/plugins/sdk/plugins/index.js.map +1 -0
  61. package/dist/plugins/sdk/plugins/types.d.ts +34 -0
  62. package/dist/plugins/sdk/plugins/types.d.ts.map +1 -0
  63. package/dist/plugins/sdk/plugins/types.js +3 -0
  64. package/dist/plugins/sdk/plugins/types.js.map +1 -0
  65. package/dist/plugins/sdk/runner.d.ts +36 -0
  66. package/dist/plugins/sdk/runner.d.ts.map +1 -0
  67. package/dist/plugins/sdk/runner.js +324 -0
  68. package/dist/plugins/sdk/runner.js.map +1 -0
  69. package/package.json +21 -5
@@ -0,0 +1,10 @@
1
+ export { defineNode } from "./define-node";
2
+ export { definePlugin, startPlugin } from "../plugin";
3
+ export { runNode, processRequest, NodeError } from "../runner";
4
+ export { validate } from "../json-schema";
5
+ export type { JsonSchema, ValidationError } from "../json-schema";
6
+ export type { PluginDefinition, PluginOptions, PluginHandlers } from "../plugin.types";
7
+ export type { PluginNodeOptions, SchemaValue } from "./types";
8
+ export { PLUGIN_UI_BUNDLE_MAX_BYTES, PluginManifest, PluginNode, PluginConnection } from "../../schema/plugin-sdk";
9
+ export { SETTINGS_API_VERSION } from "../../schema/plugin-sdk";
10
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/plugins/sdk/plugins/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAC3C,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AACtD,OAAO,EAAE,OAAO,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAC/D,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC1C,YAAY,EAAE,UAAU,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAClE,YAAY,EAAE,gBAAgB,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AACvF,YAAY,EAAE,iBAAiB,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAC9D,OAAO,EAAE,0BAA0B,EAAE,cAAc,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AACnH,OAAO,EAAE,oBAAoB,EAAE,MAAM,yBAAyB,CAAC"}
@@ -0,0 +1,23 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.SETTINGS_API_VERSION = exports.PluginConnection = exports.PluginNode = exports.PluginManifest = exports.PLUGIN_UI_BUNDLE_MAX_BYTES = exports.validate = exports.NodeError = exports.processRequest = exports.runNode = exports.startPlugin = exports.definePlugin = exports.defineNode = void 0;
4
+ // Generated from sdks/typescript/src/plugins/index.ts. Do not edit; run the Octonode SDK sync.
5
+ var define_node_1 = require("./define-node");
6
+ Object.defineProperty(exports, "defineNode", { enumerable: true, get: function () { return define_node_1.defineNode; } });
7
+ var plugin_1 = require("../plugin");
8
+ Object.defineProperty(exports, "definePlugin", { enumerable: true, get: function () { return plugin_1.definePlugin; } });
9
+ Object.defineProperty(exports, "startPlugin", { enumerable: true, get: function () { return plugin_1.startPlugin; } });
10
+ var runner_1 = require("../runner");
11
+ Object.defineProperty(exports, "runNode", { enumerable: true, get: function () { return runner_1.runNode; } });
12
+ Object.defineProperty(exports, "processRequest", { enumerable: true, get: function () { return runner_1.processRequest; } });
13
+ Object.defineProperty(exports, "NodeError", { enumerable: true, get: function () { return runner_1.NodeError; } });
14
+ var json_schema_1 = require("../json-schema");
15
+ Object.defineProperty(exports, "validate", { enumerable: true, get: function () { return json_schema_1.validate; } });
16
+ var plugin_sdk_1 = require("../../schema/plugin-sdk");
17
+ Object.defineProperty(exports, "PLUGIN_UI_BUNDLE_MAX_BYTES", { enumerable: true, get: function () { return plugin_sdk_1.PLUGIN_UI_BUNDLE_MAX_BYTES; } });
18
+ Object.defineProperty(exports, "PluginManifest", { enumerable: true, get: function () { return plugin_sdk_1.PluginManifest; } });
19
+ Object.defineProperty(exports, "PluginNode", { enumerable: true, get: function () { return plugin_sdk_1.PluginNode; } });
20
+ Object.defineProperty(exports, "PluginConnection", { enumerable: true, get: function () { return plugin_sdk_1.PluginConnection; } });
21
+ var plugin_sdk_2 = require("../../schema/plugin-sdk");
22
+ Object.defineProperty(exports, "SETTINGS_API_VERSION", { enumerable: true, get: function () { return plugin_sdk_2.SETTINGS_API_VERSION; } });
23
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/plugins/sdk/plugins/index.ts"],"names":[],"mappings":";;;AAAA,+FAA+F;AAC/F,6CAA2C;AAAlC,yGAAA,UAAU,OAAA;AACnB,oCAAsD;AAA7C,sGAAA,YAAY,OAAA;AAAE,qGAAA,WAAW,OAAA;AAClC,oCAA+D;AAAtD,iGAAA,OAAO,OAAA;AAAE,wGAAA,cAAc,OAAA;AAAE,mGAAA,SAAS,OAAA;AAC3C,8CAA0C;AAAjC,uGAAA,QAAQ,OAAA;AAIjB,sDAAmH;AAA1G,wHAAA,0BAA0B,OAAA;AAAE,4GAAA,cAAc,OAAA;AAAE,wGAAA,UAAU,OAAA;AAAE,8GAAA,gBAAgB,OAAA;AACjF,sDAA+D;AAAtD,kHAAA,oBAAoB,OAAA"}
@@ -0,0 +1,34 @@
1
+ import type { InvocationContext, PluginNode } from "../../schema/plugin-sdk";
2
+ import type { JsonSchema } from "../json-schema";
3
+ /** Infer the JSON Schema subset enforced by the SDK runner. Other schemas stay unknown. */
4
+ export type SchemaValue<S> = S extends {
5
+ enum: readonly (infer E)[];
6
+ } ? E : S extends {
7
+ type: "string";
8
+ } ? string : S extends {
9
+ type: "number" | "integer";
10
+ } ? number : S extends {
11
+ type: "boolean";
12
+ } ? boolean : S extends {
13
+ type: "null";
14
+ } ? null : S extends {
15
+ type: "array";
16
+ items: infer I;
17
+ } ? SchemaValue<I>[] : S extends {
18
+ type: "object";
19
+ properties: infer P;
20
+ } ? {
21
+ [K in keyof P as K extends RequiredKeys<S> ? K : never]: SchemaValue<P[K]>;
22
+ } & {
23
+ [K in keyof P as K extends RequiredKeys<S> ? never : K]?: SchemaValue<P[K]>;
24
+ } : unknown;
25
+ type RequiredKeys<S> = S extends {
26
+ required: readonly (infer K)[];
27
+ } ? K : never;
28
+ export type PluginNodeOptions<I extends JsonSchema, O extends JsonSchema> = Omit<PluginNode, "command" | "language" | "inputs" | "outputs"> & {
29
+ inputs: I;
30
+ outputs: O;
31
+ run: (inputs: SchemaValue<I>, context: InvocationContext) => SchemaValue<O> | Promise<SchemaValue<O>>;
32
+ };
33
+ export {};
34
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/plugins/sdk/plugins/types.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,iBAAiB,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AAC7E,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAEjD,2FAA2F;AAC3F,MAAM,MAAM,WAAW,CAAC,CAAC,IAAI,CAAC,SAAS;IAAE,IAAI,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC,EAAE,CAAA;CAAE,GACjE,CAAC,GACD,CAAC,SAAS;IAAE,IAAI,EAAE,QAAQ,CAAA;CAAE,GAC1B,MAAM,GACN,CAAC,SAAS;IAAE,IAAI,EAAE,QAAQ,GAAG,SAAS,CAAA;CAAE,GACtC,MAAM,GACN,CAAC,SAAS;IAAE,IAAI,EAAE,SAAS,CAAA;CAAE,GAC3B,OAAO,GACP,CAAC,SAAS;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,GACxB,IAAI,GACJ,CAAC,SAAS;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC,CAAA;CAAE,GACzC,WAAW,CAAC,CAAC,CAAC,EAAE,GAChB,CAAC,SAAS;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,UAAU,EAAE,MAAM,CAAC,CAAA;CAAE,GAC/C;KAAG,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,SAAS,YAAY,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,KAAK,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;CAAE,GAAG;KAC9E,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,SAAS,YAAY,CAAC,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,CAAC,CAAC,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;CAC5E,GACD,OAAO,CAAC;AAExB,KAAK,YAAY,CAAC,CAAC,IAAI,CAAC,SAAS;IAAE,QAAQ,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC,EAAE,CAAA;CAAE,GAAG,CAAC,GAAG,KAAK,CAAC;AAEhF,MAAM,MAAM,iBAAiB,CAAC,CAAC,SAAS,UAAU,EAAE,CAAC,SAAS,UAAU,IAAI,IAAI,CAC9E,UAAU,EACV,SAAS,GAAG,UAAU,GAAG,QAAQ,GAAG,SAAS,CAC9C,GAAG;IACF,MAAM,EAAE,CAAC,CAAC;IACV,OAAO,EAAE,CAAC,CAAC;IACX,GAAG,EAAE,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,iBAAiB,KAAK,WAAW,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC;CACvG,CAAC"}
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../../src/plugins/sdk/plugins/types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,36 @@
1
+ import { type ErrorResult, type ManifestError, type ManifestResult, type OkResult } from "../schema/plugin-sdk";
2
+ import type { NodeDefinition } from "./define-node";
3
+ type Envelope = OkResult | ErrorResult | ManifestResult | ManifestError;
4
+ /**
5
+ * A deliberate, terminal failure a node author can raise. The runner converts
6
+ * it into a `NON_RETRYABLE` error envelope instead of a generic RUNTIME_ERROR.
7
+ */
8
+ export declare class NodeError extends Error {
9
+ readonly retryable: boolean;
10
+ readonly code: "RUNTIME_ERROR" | "NON_RETRYABLE";
11
+ constructor(message: string, opts?: {
12
+ retryable?: boolean;
13
+ });
14
+ }
15
+ /**
16
+ * Handle one request line and produce one response envelope. This is shared by
17
+ * both transport modes: one-shot (a single line then EOF) and worker (many
18
+ * newline-delimited lines on a long-lived process).
19
+ */
20
+ export declare function processRequest(node: NodeDefinition, raw: string): Promise<Envelope>;
21
+ export declare function jsonSafetyError(value: unknown, path?: string, ancestors?: Set<object>): string | undefined;
22
+ /**
23
+ * Run a node over stdin until EOF, processing one newline-delimited request at a
24
+ * time and emitting one response line each. A one-shot caller sends a single
25
+ * line and closes stdin; a worker-mode caller streams many lines on the same
26
+ * process — identical code path, so interpreter startup is paid once per process.
27
+ */
28
+ export declare function runNode(node: NodeDefinition): Promise<void>;
29
+ /**
30
+ * Convenience entrypoint for a node module: run until stdin closes, then exit.
31
+ * All node-level errors are reported as envelopes, so the process exits 0 even
32
+ * on a handled node error — the envelope carries the failure.
33
+ */
34
+ export declare function start(node: NodeDefinition): void;
35
+ export {};
36
+ //# sourceMappingURL=runner.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runner.d.ts","sourceRoot":"","sources":["../../../src/plugins/sdk/runner.ts"],"names":[],"mappings":"AAEA,OAAO,EAML,KAAK,WAAW,EAChB,KAAK,aAAa,EAClB,KAAK,cAAc,EAEnB,KAAK,QAAQ,EACd,MAAM,sBAAsB,CAAC;AAC9B,OAAO,KAAK,EAAE,cAAc,EAAwC,MAAM,eAAe,CAAC;AAM1F,KAAK,QAAQ,GAAG,QAAQ,GAAG,WAAW,GAAG,cAAc,GAAG,aAAa,CAAC;AAExE;;;GAGG;AACH,qBAAa,SAAU,SAAQ,KAAK;IAClC,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC;IAC5B,QAAQ,CAAC,IAAI,EAAE,eAAe,GAAG,eAAe,CAAC;gBACrC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE;QAAE,SAAS,CAAC,EAAE,OAAO,CAAA;KAAE;CAM5D;AAuGD;;;;GAIG;AACH,wBAAsB,cAAc,CAAC,IAAI,EAAE,cAAc,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC,CAiGzF;AAED,wBAAgB,eAAe,CAAC,KAAK,EAAE,OAAO,EAAE,IAAI,SAAM,EAAE,SAAS,cAAoB,GAAG,MAAM,GAAG,SAAS,CA0B7G;AAMD;;;;;GAKG;AACH,wBAAsB,OAAO,CAAC,IAAI,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,CAyCjE;AAMD;;;;GAIG;AACH,wBAAgB,KAAK,CAAC,IAAI,EAAE,cAAc,GAAG,IAAI,CAYhD"}
@@ -0,0 +1,324 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.NodeError = void 0;
4
+ exports.processRequest = processRequest;
5
+ exports.jsonSafetyError = jsonSafetyError;
6
+ exports.runNode = runNode;
7
+ exports.start = start;
8
+ // Generated from sdks/typescript/src/runner.ts. Do not edit; run the Octonode SDK sync.
9
+ const node_console_1 = require("node:console");
10
+ const plugin_sdk_1 = require("../schema/plugin-sdk");
11
+ const json_schema_1 = require("./json-schema");
12
+ /** The language tag reported in this SDK's manifests. */
13
+ const LANGUAGE = "typescript";
14
+ /**
15
+ * A deliberate, terminal failure a node author can raise. The runner converts
16
+ * it into a `NON_RETRYABLE` error envelope instead of a generic RUNTIME_ERROR.
17
+ */
18
+ class NodeError extends Error {
19
+ retryable;
20
+ code;
21
+ constructor(message, opts) {
22
+ super(message);
23
+ this.name = "NodeError";
24
+ this.retryable = opts?.retryable ?? false;
25
+ this.code = this.retryable ? "RUNTIME_ERROR" : "NON_RETRYABLE";
26
+ }
27
+ }
28
+ exports.NodeError = NodeError;
29
+ function manifestOf(node, requestedNode) {
30
+ if (isExplicitService(node)) {
31
+ const methodName = requestedServiceMethod(node, requestedNode);
32
+ if (methodName) {
33
+ const method = node.service.methods[methodName];
34
+ return {
35
+ id: `${node.id}.${methodName}`,
36
+ language: LANGUAGE,
37
+ inputs: method.inputs,
38
+ outputs: method.outputs,
39
+ icon: node.icon,
40
+ };
41
+ }
42
+ }
43
+ return {
44
+ id: node.id,
45
+ ...(node.workflowId ? { workflowId: node.workflowId } : {}),
46
+ language: LANGUAGE,
47
+ label: node.label,
48
+ description: node.description,
49
+ symbol: node.symbol,
50
+ defaults: node.defaults,
51
+ inputs: node.inputs,
52
+ outputs: node.outputs,
53
+ kind: node.kind,
54
+ setup: node.setup,
55
+ icon: node.icon,
56
+ config: node.config,
57
+ service: isExplicitService(node)
58
+ ? {
59
+ lifecycle: node.service.lifecycle,
60
+ methods: Object.entries(node.service.methods).map(([name, spec]) => ({
61
+ name,
62
+ params: spec.params ?? [],
63
+ inputs: spec.inputs,
64
+ outputs: spec.outputs,
65
+ })),
66
+ }
67
+ : undefined,
68
+ };
69
+ }
70
+ const workerServiceInstances = new WeakMap();
71
+ const runServiceInstances = new WeakMap();
72
+ const isExplicitService = (node) => node.kind === "service" && "service" in node && !!node.service;
73
+ function requestedServiceMethod(node, requested) {
74
+ if (!requested || requested === node.id)
75
+ return undefined;
76
+ const prefix = `${node.id}.`;
77
+ const method = requested.startsWith(prefix) ? requested.slice(prefix.length) : requested;
78
+ return method in node.service.methods ? method : undefined;
79
+ }
80
+ async function serviceInstance(node, context, invocationId) {
81
+ if (node.service.lifecycle === "invocation")
82
+ return node.service.create(context);
83
+ if (node.service.lifecycle === "worker") {
84
+ let instance = workerServiceInstances.get(node);
85
+ if (!instance) {
86
+ instance = Promise.resolve(node.service.create(context));
87
+ workerServiceInstances.set(node, instance);
88
+ }
89
+ return instance;
90
+ }
91
+ let runs = runServiceInstances.get(node);
92
+ if (!runs) {
93
+ runs = new Map();
94
+ runServiceInstances.set(node, runs);
95
+ }
96
+ const key = context.runId ?? invocationId;
97
+ let instance = runs.get(key);
98
+ if (!instance) {
99
+ instance = Promise.resolve(node.service.create(context));
100
+ runs.set(key, instance);
101
+ if (runs.size > 100)
102
+ runs.delete(runs.keys().next().value);
103
+ }
104
+ return instance;
105
+ }
106
+ async function invokeServiceMethod(node, methodName, spec, inputs, context, invocationId) {
107
+ const instance = (await serviceInstance(node, context, invocationId));
108
+ const method = instance[methodName];
109
+ if (typeof method !== "function")
110
+ throw new Error(`service "${node.id}" does not implement exposed method "${methodName}"`);
111
+ const record = inputs && typeof inputs === "object" ? inputs : { value: inputs };
112
+ const args = spec.params?.length ? spec.params.map((name) => record[name]) : [inputs];
113
+ return method.apply(instance, args);
114
+ }
115
+ /**
116
+ * Handle one request line and produce one response envelope. This is shared by
117
+ * both transport modes: one-shot (a single line then EOF) and worker (many
118
+ * newline-delimited lines on a long-lived process).
119
+ */
120
+ async function processRequest(node, raw) {
121
+ let request;
122
+ let invocationId = "unknown";
123
+ try {
124
+ request = plugin_sdk_1.RequestEnvelope.parse(JSON.parse(raw.trim()));
125
+ invocationId = request.invocationId;
126
+ }
127
+ catch (err) {
128
+ return (0, plugin_sdk_1.makeErrorResult)(invocationId, {
129
+ code: "VALIDATION_ERROR",
130
+ message: `Invalid request envelope on stdin: ${describe(err)}`,
131
+ retryable: false,
132
+ });
133
+ }
134
+ if (request.type === "describe") {
135
+ try {
136
+ return (0, plugin_sdk_1.makeManifestResult)(invocationId, manifestOf(node, request.node));
137
+ }
138
+ catch (err) {
139
+ return (0, plugin_sdk_1.makeManifestError)(invocationId, {
140
+ code: "RUNTIME_ERROR",
141
+ message: `Failed to build manifest: ${describe(err)}`,
142
+ retryable: false,
143
+ });
144
+ }
145
+ }
146
+ const serviceMethod = isExplicitService(node) ? requestedServiceMethod(node, request.node) : undefined;
147
+ if (isExplicitService(node) && request.node && request.node !== node.id && !serviceMethod) {
148
+ return (0, plugin_sdk_1.makeErrorResult)(invocationId, {
149
+ code: "VALIDATION_ERROR",
150
+ message: `service method not exposed: ${request.node}`,
151
+ retryable: false,
152
+ });
153
+ }
154
+ const methodSpec = serviceMethod && isExplicitService(node) ? node.service.methods[serviceMethod] : undefined;
155
+ const inputs = node.defaults && request.inputs && typeof request.inputs === "object" && !Array.isArray(request.inputs)
156
+ ? { ...node.defaults, ...request.inputs }
157
+ : request.inputs;
158
+ const inputErrors = (0, json_schema_1.validate)(methodSpec?.inputs ?? node.inputs, inputs);
159
+ if (inputErrors.length > 0) {
160
+ return (0, plugin_sdk_1.makeErrorResult)(invocationId, {
161
+ code: "VALIDATION_ERROR",
162
+ message: `Inputs failed schema validation: ${inputErrors[0].path} ${inputErrors[0].message}`,
163
+ retryable: false,
164
+ details: { errors: inputErrors },
165
+ });
166
+ }
167
+ let outputs;
168
+ try {
169
+ outputs =
170
+ serviceMethod && isExplicitService(node)
171
+ ? await invokeServiceMethod(node, serviceMethod, methodSpec ?? {}, inputs, request.context, invocationId)
172
+ : await node.run(inputs, request.context);
173
+ }
174
+ catch (err) {
175
+ if (err instanceof NodeError) {
176
+ return (0, plugin_sdk_1.makeErrorResult)(invocationId, {
177
+ code: err.code,
178
+ message: err.message,
179
+ retryable: err.retryable,
180
+ stack: err.stack,
181
+ });
182
+ }
183
+ return (0, plugin_sdk_1.makeErrorResult)(invocationId, {
184
+ code: "RUNTIME_ERROR",
185
+ message: describe(err),
186
+ retryable: false,
187
+ stack: err instanceof Error ? err.stack : undefined,
188
+ });
189
+ }
190
+ const outputErrors = (0, json_schema_1.validate)(methodSpec?.outputs ?? node.outputs, outputs);
191
+ if (outputErrors.length > 0) {
192
+ return (0, plugin_sdk_1.makeErrorResult)(invocationId, {
193
+ code: "VALIDATION_ERROR",
194
+ message: `Outputs failed schema validation: ${outputErrors[0].path} ${outputErrors[0].message}`,
195
+ retryable: false,
196
+ details: { errors: outputErrors },
197
+ });
198
+ }
199
+ let serializationError;
200
+ try {
201
+ serializationError = jsonSafetyError(outputs);
202
+ }
203
+ catch (err) {
204
+ serializationError = `output inspection failed: ${describe(err)}`;
205
+ }
206
+ if (serializationError) {
207
+ return (0, plugin_sdk_1.makeErrorResult)(invocationId, {
208
+ code: "VALIDATION_ERROR",
209
+ message: `Outputs must be losslessly JSON-serializable: ${serializationError}`,
210
+ retryable: false,
211
+ });
212
+ }
213
+ return (0, plugin_sdk_1.makeOkResult)(invocationId, outputs);
214
+ }
215
+ function jsonSafetyError(value, path = "$", ancestors = new Set()) {
216
+ if (value === null || typeof value === "string" || typeof value === "boolean")
217
+ return undefined;
218
+ if (typeof value === "number")
219
+ return Number.isFinite(value) ? undefined : `${path} is not a finite number`;
220
+ if (typeof value !== "object")
221
+ return `${path} has type ${typeof value}`;
222
+ if (ancestors.has(value))
223
+ return `${path} is cyclic`;
224
+ ancestors.add(value);
225
+ try {
226
+ if (Array.isArray(value)) {
227
+ for (let index = 0; index < value.length; index++) {
228
+ if (!(index in value))
229
+ return `${path}[${index}] is an array hole`;
230
+ const error = jsonSafetyError(value[index], `${path}[${index}]`, ancestors);
231
+ if (error)
232
+ return error;
233
+ }
234
+ return undefined;
235
+ }
236
+ const prototype = Object.getPrototypeOf(value);
237
+ if (prototype !== Object.prototype && prototype !== null)
238
+ return `${path} is not a plain object`;
239
+ if (Object.getOwnPropertySymbols(value).length)
240
+ return `${path} has symbol keys`;
241
+ for (const [key, item] of Object.entries(value)) {
242
+ const error = jsonSafetyError(item, `${path}.${key}`, ancestors);
243
+ if (error)
244
+ return error;
245
+ }
246
+ return undefined;
247
+ }
248
+ finally {
249
+ ancestors.delete(value);
250
+ }
251
+ }
252
+ function write(envelope) {
253
+ process.stdout.write(JSON.stringify(envelope) + "\n");
254
+ }
255
+ /**
256
+ * Run a node over stdin until EOF, processing one newline-delimited request at a
257
+ * time and emitting one response line each. A one-shot caller sends a single
258
+ * line and closes stdin; a worker-mode caller streams many lines on the same
259
+ * process — identical code path, so interpreter startup is paid once per process.
260
+ */
261
+ async function runNode(node) {
262
+ const stdin = process.stdin;
263
+ stdin.setEncoding("utf8");
264
+ let buffer = "";
265
+ const queue = [];
266
+ let draining = false;
267
+ let ended = false;
268
+ let done;
269
+ const finished = new Promise((resolve) => (done = resolve));
270
+ const drain = async () => {
271
+ if (draining)
272
+ return;
273
+ draining = true;
274
+ while (queue.length > 0) {
275
+ const line = queue.shift();
276
+ if (line.trim().length > 0)
277
+ write(await processRequest(node, line));
278
+ }
279
+ draining = false;
280
+ if (ended)
281
+ done();
282
+ };
283
+ stdin.on("data", (chunk) => {
284
+ buffer += chunk;
285
+ let idx;
286
+ while ((idx = buffer.indexOf("\n")) >= 0) {
287
+ queue.push(buffer.slice(0, idx));
288
+ buffer = buffer.slice(idx + 1);
289
+ }
290
+ void drain();
291
+ });
292
+ stdin.on("end", () => {
293
+ if (buffer.length > 0)
294
+ queue.push(buffer);
295
+ buffer = "";
296
+ ended = true;
297
+ void drain();
298
+ if (!draining && queue.length === 0)
299
+ done();
300
+ });
301
+ return finished;
302
+ }
303
+ function describe(err) {
304
+ return err instanceof Error ? err.message : String(err);
305
+ }
306
+ /**
307
+ * Convenience entrypoint for a node module: run until stdin closes, then exit.
308
+ * All node-level errors are reported as envelopes, so the process exits 0 even
309
+ * on a handled node error — the envelope carries the failure.
310
+ */
311
+ function start(node) {
312
+ // stdout is the IPC channel. Give arbitrary user code a console whose every
313
+ // method writes to stderr before the first request is handled.
314
+ globalThis.console = new node_console_1.Console({ stdout: process.stderr, stderr: process.stderr });
315
+ runNode(node)
316
+ .then(() => {
317
+ process.exitCode = 0;
318
+ })
319
+ .catch((err) => {
320
+ process.stderr.write(`octonode runner failure: ${describe(err)}\n`);
321
+ process.exitCode = 1;
322
+ });
323
+ }
324
+ //# sourceMappingURL=runner.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runner.js","sourceRoot":"","sources":["../../../src/plugins/sdk/runner.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,21 +1,37 @@
1
1
  {
2
2
  "name": "@octonodes/sdk",
3
- "version": "0.0.3",
4
- "description": "Generated TypeScript client for the Octonode cloud API.",
3
+ "version": "0.1.0",
4
+ "description": "Octonode API client and code-first plugin SDK.",
5
5
  "license": "MIT",
6
+ "repository": {
7
+ "type": "git",
8
+ "url": "git+https://github.com/nivdoron1/octonode-devtools.git",
9
+ "directory": "packages/sdk"
10
+ },
11
+ "files": [
12
+ "dist",
13
+ "PLUGINS.md"
14
+ ],
6
15
  "main": "dist/index.js",
7
16
  "types": "dist/index.d.ts",
8
17
  "exports": {
9
18
  ".": {
10
19
  "types": "./dist/index.d.ts",
11
20
  "default": "./dist/index.js"
21
+ },
22
+ "./plugins": {
23
+ "types": "./dist/plugins/index.d.ts",
24
+ "default": "./dist/plugins/index.js"
12
25
  }
13
26
  },
14
- "files": [
15
- "dist"
16
- ],
17
27
  "scripts": {
18
28
  "gen": "openapi-ts",
19
29
  "prepack": "tsc -b"
30
+ },
31
+ "dependencies": {
32
+ "zod": "^3.23.0"
33
+ },
34
+ "devDependencies": {
35
+ "@types/node": "^26.4.0"
20
36
  }
21
37
  }