@intellia/workflow-sdk 0.2.1 → 0.3.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.
@@ -9,6 +9,7 @@ const defineWebhook = (spec) => ({
9
9
  description: spec.description,
10
10
  slug: spec.slug,
11
11
  responseRules: spec.responseRules,
12
+ signatureVerification: spec.signatureVerification,
12
13
  };
13
14
  },
14
15
  });
@@ -1 +1 @@
1
- {"version":3,"file":"define-webhook.js","sourceRoot":"","sources":["../../src/define-webhook.ts"],"names":[],"mappings":";;;AAqCO,MAAM,aAAa,GAAG,CAAC,IAAiB,EAAiB,EAAE,CAAC,CAAC;IAClE,MAAM;QACJ,OAAO;YACL,IAAI,EAAE,SAAS;YACf,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,WAAW,EAAE,IAAI,CAAC,WAAW;YAC7B,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,aAAa,EAAE,IAAI,CAAC,aAAa;SAClC,CAAC;IACJ,CAAC;CACF,CAAC,CAAC;AAVU,QAAA,aAAa,iBAUvB"}
1
+ {"version":3,"file":"define-webhook.js","sourceRoot":"","sources":["../../src/define-webhook.ts"],"names":[],"mappings":";;;AAwDO,MAAM,aAAa,GAAG,CAAC,IAAiB,EAAiB,EAAE,CAAC,CAAC;IAClE,MAAM;QACJ,OAAO;YACL,IAAI,EAAE,SAAS;YACf,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,WAAW,EAAE,IAAI,CAAC,WAAW;YAC7B,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,aAAa,EAAE,IAAI,CAAC,aAAa;YACjC,qBAAqB,EAAE,IAAI,CAAC,qBAAqB;SAClD,CAAC;IACJ,CAAC;CACF,CAAC,CAAC;AAXU,QAAA,aAAa,iBAWvB"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";;;AAAA,yCAAwD;AAA/C,8FAAA,CAAC,OAAA;AAAE,yGAAA,YAAY,OAAA;AAAE,qGAAA,QAAQ,OAAA;AAClC,qCAQmB;AAPjB,oGAAA,SAAS,OAAA;AACT,gGAAA,KAAK,OAAA;AACL,kGAAA,OAAO,OAAA;AACP,gGAAA,KAAK,OAAA;AACL,kGAAA,OAAO,OAAA;AACP,8FAAA,GAAG,OAAA;AACH,sGAAA,WAAW,OAAA;AAGb,mDAA4E;AAAnE,gHAAA,cAAc,OAAA;AAAE,0HAAA,wBAAwB,OAAA;AAEjD,mDAA8C;AAArC,4GAAA,UAAU,OAAA;AASnB,uEAAiE;AAAxD,+HAAA,mBAAmB,OAAA;AAE5B,6DAAuD;AAA9C,qHAAA,cAAc,OAAA;AAEvB,2DAAsD;AAA7C,oHAAA,cAAc,OAAA;AAEvB,yDAAoD;AAA3C,kHAAA,aAAa,OAAA;AAOtB,uCAAgD;AAAvC,8GAAA,kBAAkB,OAAA;AAC3B,2CAAoD;AAA3C,qGAAA,OAAO,OAAA;AAAE,yGAAA,WAAW,OAAA;AAU7B,2DAAsD;AAA7C,oHAAA,cAAc,OAAA;AAYvB,iDAA6F;AAApF,mGAAA,EAAE,OAAA;AAAE,mGAAA,EAAE,OAAA;AAAE,oGAAA,GAAG,OAAA;AAAE,mGAAA,EAAE,OAAA;AAAE,oGAAA,GAAG,OAAA;AAAE,yGAAA,QAAQ,OAAA;AAAE,uGAAA,MAAM,OAAA;AAAE,0GAAA,SAAS,OAAA;AAAE,wGAAA,OAAO,OAAA;AAEnE,qEAA+D;AAAtD,6HAAA,kBAAkB,OAAA;AAE3B,+DAA2D;AAAlD,yHAAA,iBAAiB,OAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";;;AAAA,yCAAwD;AAA/C,8FAAA,CAAC,OAAA;AAAE,yGAAA,YAAY,OAAA;AAAE,qGAAA,QAAQ,OAAA;AAClC,qCAQmB;AAPjB,oGAAA,SAAS,OAAA;AACT,gGAAA,KAAK,OAAA;AACL,kGAAA,OAAO,OAAA;AACP,gGAAA,KAAK,OAAA;AACL,kGAAA,OAAO,OAAA;AACP,8FAAA,GAAG,OAAA;AACH,sGAAA,WAAW,OAAA;AAGb,mDAA4E;AAAnE,gHAAA,cAAc,OAAA;AAAE,0HAAA,wBAAwB,OAAA;AAEjD,mDAA8C;AAArC,4GAAA,UAAU,OAAA;AASnB,uEAAiE;AAAxD,+HAAA,mBAAmB,OAAA;AAE5B,6DAAuD;AAA9C,qHAAA,cAAc,OAAA;AAEvB,2DAAsD;AAA7C,oHAAA,cAAc,OAAA;AAEvB,yDAAoD;AAA3C,kHAAA,aAAa,OAAA;AAQtB,uCAAgD;AAAvC,8GAAA,kBAAkB,OAAA;AAC3B,2CAAoD;AAA3C,qGAAA,OAAO,OAAA;AAAE,yGAAA,WAAW,OAAA;AAU7B,2DAAsD;AAA7C,oHAAA,cAAc,OAAA;AAYvB,iDAA6F;AAApF,mGAAA,EAAE,OAAA;AAAE,mGAAA,EAAE,OAAA;AAAE,oGAAA,GAAG,OAAA;AAAE,mGAAA,EAAE,OAAA;AAAE,oGAAA,GAAG,OAAA;AAAE,yGAAA,QAAQ,OAAA;AAAE,uGAAA,MAAM,OAAA;AAAE,0GAAA,SAAS,OAAA;AAAE,wGAAA,OAAO,OAAA;AAEnE,qEAA+D;AAAtD,6HAAA,kBAAkB,OAAA;AAE3B,+DAA2D;AAAlD,yHAAA,iBAAiB,OAAA"}
@@ -3,57 +3,85 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.artifact = exports.toJsonSchema = exports.z = void 0;
4
4
  const v4_1 = require("zod/v4");
5
5
  Object.defineProperty(exports, "z", { enumerable: true, get: function () { return v4_1.z; } });
6
- // `z.toJSONSchema` reads `.describe()`/`.meta()` metadata via `z.globalRegistry`
7
- // — a per-zod-module-instance `WeakMap`. A schema built by a DIFFERENT zod
8
- // module instance (e.g. bundled separately into a vm-executed workflow entry
9
- // — see `workflow-compiler/src/execute.ts`) has its own registry, so that
10
- // lookup silently finds nothing, even though structural fields
11
- // (type/properties/required) still convert correctly via duck-typed access.
12
- // The schema's own `.description` getter, though, is a closure bound to
13
- // whichever registry actually holds the metadata, so reading it works
14
- // regardless of which zod instance built the schema — it's a plain property
15
- // read, not an identity check. This walks the zod schema's PUBLIC, documented
16
- // shape accessors (`.def.type`, `.shape`, `.element`, `.unwrap()`) in
17
- // parallel with the JSON Schema `z.toJSONSchema` already produced, backfilling
18
- // any `description` the registry lookup missed. Covers the constructs the SDK
19
- // and the real corpus actually use (object/array/optional/default); anything
20
- // else (union, record, nullable's `anyOf` wrapping, ...) falls through
21
- // unmerged — no worse than before this existed, just not extended to those.
22
- const backfillDescriptions = (t, node) => {
23
- var _a;
24
- const description = t.description;
25
- if (node.description === undefined && typeof description === "string") {
26
- node.description = description;
6
+ // `z.toJSONSchema` finds `.meta()` through a per-zod-instance registry, so a
7
+ // schema built by another zod copy (a vm-executed workflow entry, see
8
+ // `workflow-compiler/src/execute.ts`) loses it; the schema's own no-argument
9
+ // `.meta()` still reads the right registry. This walks the zod schema beside
10
+ // the JSON node `z.toJSONSchema` emitted for it, kind by kind, and copies the
11
+ // keys every API Ajv accepts (`input` is registered there as a keyword).
12
+ const BACKFILLED_META_KEYS = ["description", "title", "examples", "deprecated", "readOnly", "writeOnly", "input"];
13
+ // Wrappers that add no JSON Schema level: the inner schema's keys land on the same node.
14
+ const SAME_NODE_WRAPPERS = new Set(["optional", "default", "prefault", "nonoptional", "readonly", "catch"]);
15
+ const asNode = (v) => typeof v === "object" && v !== null && !Array.isArray(v) ? v : undefined;
16
+ const backfillMetadata = (t, node, seen = new Set()) => {
17
+ var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q;
18
+ if (seen.has(t))
19
+ return;
20
+ const path = new Set(seen).add(t);
21
+ const visit = (child, childNode) => {
22
+ const n = asNode(childNode);
23
+ if (child && n)
24
+ backfillMetadata(child, n, path);
25
+ };
26
+ const meta = (_b = (_a = t).meta) === null || _b === void 0 ? void 0 : _b.call(_a);
27
+ if (typeof meta === "object" && meta !== null) {
28
+ for (const key of BACKFILLED_META_KEYS) {
29
+ // Round-tripped into plain data from this realm, not the vm's.
30
+ const json = JSON.stringify(meta[key]);
31
+ if (json !== undefined && node[key] === undefined)
32
+ node[key] = JSON.parse(json);
33
+ }
27
34
  }
28
- const kind = (_a = t.def) === null || _a === void 0 ? void 0 : _a.type;
29
- if (kind === "object" && node.properties) {
35
+ const def = ((_c = t.def) !== null && _c !== void 0 ? _c : {});
36
+ const kind = (_d = def.type) !== null && _d !== void 0 ? _d : "";
37
+ if (kind === "object") {
30
38
  const shape = t.shape;
31
- for (const [key, sub] of Object.entries(shape)) {
32
- const propNode = node.properties[key];
33
- if (propNode) {
34
- backfillDescriptions(sub, propNode);
35
- }
36
- }
39
+ for (const [key, sub] of Object.entries(shape))
40
+ visit(sub, (_e = node.properties) === null || _e === void 0 ? void 0 : _e[key]);
37
41
  }
38
- else if (kind === "array" && node.items) {
39
- const element = t.element;
40
- backfillDescriptions(element, node.items);
42
+ else if (kind === "array") {
43
+ visit(def.element, node.items);
41
44
  }
42
- else if (kind === "optional" || kind === "default" || kind === "nonoptional") {
43
- // These wrappers add no JSON Schema nesting level of their own (optional
44
- // only affects `required`; default keeps the wrapped type's shape), so
45
- // the inner schema's fields land at this SAME node.
46
- const unwrap = t.unwrap;
47
- if (typeof unwrap === "function") {
48
- backfillDescriptions(unwrap(), node);
49
- }
45
+ else if (kind === "record") {
46
+ visit(def.valueType, node.additionalProperties);
47
+ }
48
+ else if (kind === "union") {
49
+ const branches = (_g = (_f = node.anyOf) !== null && _f !== void 0 ? _f : node.oneOf) !== null && _g !== void 0 ? _g : [];
50
+ (_h = def.options) === null || _h === void 0 ? void 0 : _h.forEach((option, i) => visit(option, branches[i]));
51
+ }
52
+ else if (kind === "intersection") {
53
+ visit(def.left, (_j = node.allOf) === null || _j === void 0 ? void 0 : _j[0]);
54
+ visit(def.right, (_k = node.allOf) === null || _k === void 0 ? void 0 : _k[1]);
55
+ }
56
+ else if (kind === "tuple") {
57
+ const items = node.items;
58
+ if (Array.isArray(items))
59
+ (_l = def.items) === null || _l === void 0 ? void 0 : _l.forEach((item, i) => visit(item, items[i]));
60
+ else
61
+ (_m = def.items) === null || _m === void 0 ? void 0 : _m.forEach((item) => visit(item, items));
62
+ visit(def.rest, node.additionalItems);
63
+ }
64
+ else if (kind === "nullable") {
65
+ // `anyOf: [inner, { type: "null" }]`, or the inner node itself when it inlines.
66
+ visit(def.innerType, (_p = (_o = node.anyOf) === null || _o === void 0 ? void 0 : _o[0]) !== null && _p !== void 0 ? _p : node);
67
+ }
68
+ else if (SAME_NODE_WRAPPERS.has(kind)) {
69
+ visit(def.innerType, node);
70
+ }
71
+ else if (kind === "lazy") {
72
+ visit((_q = def.getter) === null || _q === void 0 ? void 0 : _q.call(def), node);
73
+ }
74
+ else if (kind === "pipe") {
75
+ // The node describes one side; a marker on either side keeps the field sensitive.
76
+ visit(def.out, node);
77
+ visit(def.in, node);
50
78
  }
51
79
  };
52
80
  // The repo's ajv schemas and every hand-written workflow use draft-07; zod's
53
81
  // default target is 2020-12, which ajv would reject.
54
82
  const toJsonSchema = (t) => {
55
83
  const result = v4_1.z.toJSONSchema(t, { target: "draft-7" });
56
- backfillDescriptions(t, result);
84
+ backfillMetadata(t, result);
57
85
  return result;
58
86
  };
59
87
  exports.toJsonSchema = toJsonSchema;
@@ -1 +1 @@
1
- {"version":3,"file":"schema.js","sourceRoot":"","sources":["../../src/schema.ts"],"names":[],"mappings":";;;AAAA,+BAA2B;AAGlB,kFAHA,MAAC,OAGA;AAyCV,iFAAiF;AACjF,2EAA2E;AAC3E,6EAA6E;AAC7E,0EAA0E;AAC1E,+DAA+D;AAC/D,4EAA4E;AAC5E,wEAAwE;AACxE,sEAAsE;AACtE,4EAA4E;AAC5E,8EAA8E;AAC9E,sEAAsE;AACtE,+EAA+E;AAC/E,8EAA8E;AAC9E,6EAA6E;AAC7E,uEAAuE;AACvE,4EAA4E;AAC5E,MAAM,oBAAoB,GAAG,CAAC,CAAY,EAAE,IAAgB,EAAQ,EAAE;;IACpE,MAAM,WAAW,GAAI,CAA0C,CAAC,WAAW,CAAC;IAC5E,IAAI,IAAI,CAAC,WAAW,KAAK,SAAS,IAAI,OAAO,WAAW,KAAK,QAAQ,EAAE,CAAC;QACtE,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;IACjC,CAAC;IAED,MAAM,IAAI,GAAG,MAAC,CAA4C,CAAC,GAAG,0CAAE,IAAI,CAAC;IACrE,IAAI,IAAI,KAAK,QAAQ,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;QACzC,MAAM,KAAK,GAAI,CAAqD,CAAC,KAAK,CAAC;QAC3E,KAAK,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;YAC/C,MAAM,QAAQ,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;YACtC,IAAI,QAAQ,EAAE,CAAC;gBACb,oBAAoB,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;YACtC,CAAC;QACH,CAAC;IACH,CAAC;SAAM,IAAI,IAAI,KAAK,OAAO,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;QAC1C,MAAM,OAAO,GAAI,CAAuC,CAAC,OAAO,CAAC;QACjE,oBAAoB,CAAC,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;IAC5C,CAAC;SAAM,IAAI,IAAI,KAAK,UAAU,IAAI,IAAI,KAAK,SAAS,IAAI,IAAI,KAAK,aAAa,EAAE,CAAC;QAC/E,yEAAyE;QACzE,uEAAuE;QACvE,oDAAoD;QACpD,MAAM,MAAM,GAAI,CAA6C,CAAC,MAAM,CAAC;QACrE,IAAI,OAAO,MAAM,KAAK,UAAU,EAAE,CAAC;YACjC,oBAAoB,CAAC,MAAM,EAAE,EAAE,IAAI,CAAC,CAAC;QACvC,CAAC;IACH,CAAC;AACH,CAAC,CAAC;AAEF,6EAA6E;AAC7E,qDAAqD;AAC9C,MAAM,YAAY,GAAG,CAAC,CAAY,EAAc,EAAE;IACvD,MAAM,MAAM,GAAG,MAAC,CAAC,YAAY,CAAC,CAAC,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,CAAe,CAAC;IACtE,oBAAoB,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;IAChC,OAAO,MAAM,CAAC;AAChB,CAAC,CAAC;AAJW,QAAA,YAAY,gBAIvB;AAEF,0EAA0E;AAC1E,wBAAwB;AACjB,MAAM,QAAQ,GAAG,GAAG,EAAE,CAC3B,MAAC,CAAC,MAAM,CAAC;IACP,UAAU,EAAE,MAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC;IAC9B,QAAQ,EAAE,MAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC;CAC9B,CAAC,CAAC;AAJQ,QAAA,QAAQ,YAIhB"}
1
+ {"version":3,"file":"schema.js","sourceRoot":"","sources":["../../src/schema.ts"],"names":[],"mappings":"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"}
@@ -6,6 +6,7 @@ export const defineWebhook = (spec) => ({
6
6
  description: spec.description,
7
7
  slug: spec.slug,
8
8
  responseRules: spec.responseRules,
9
+ signatureVerification: spec.signatureVerification,
9
10
  };
10
11
  },
11
12
  });
@@ -1 +1 @@
1
- {"version":3,"file":"define-webhook.js","sourceRoot":"","sources":["../../src/define-webhook.ts"],"names":[],"mappings":"AAqCA,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,IAAiB,EAAiB,EAAE,CAAC,CAAC;IAClE,MAAM;QACJ,OAAO;YACL,IAAI,EAAE,SAAS;YACf,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,WAAW,EAAE,IAAI,CAAC,WAAW;YAC7B,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,aAAa,EAAE,IAAI,CAAC,aAAa;SAClC,CAAC;IACJ,CAAC;CACF,CAAC,CAAC"}
1
+ {"version":3,"file":"define-webhook.js","sourceRoot":"","sources":["../../src/define-webhook.ts"],"names":[],"mappings":"AAwDA,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,IAAiB,EAAiB,EAAE,CAAC,CAAC;IAClE,MAAM;QACJ,OAAO;YACL,IAAI,EAAE,SAAS;YACf,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,WAAW,EAAE,IAAI,CAAC,WAAW;YAC7B,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,aAAa,EAAE,IAAI,CAAC,aAAa;YACjC,qBAAqB,EAAE,IAAI,CAAC,qBAAqB;SAClD,CAAC;IACJ,CAAC;CACF,CAAC,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACxD,OAAO,EACL,SAAS,EACT,KAAK,EACL,OAAO,EACP,KAAK,EACL,OAAO,EACP,GAAG,EACH,WAAW,GACZ,MAAM,WAAW,CAAC;AAEnB,OAAO,EAAE,cAAc,EAAE,wBAAwB,EAAE,MAAM,kBAAkB,CAAC;AAE5E,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAS9C,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AAEjE,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAEvD,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAEtD,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAOpD,OAAO,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAChD,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAUpD,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAYtD,OAAO,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAE7F,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAE/D,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACxD,OAAO,EACL,SAAS,EACT,KAAK,EACL,OAAO,EACP,KAAK,EACL,OAAO,EACP,GAAG,EACH,WAAW,GACZ,MAAM,WAAW,CAAC;AAEnB,OAAO,EAAE,cAAc,EAAE,wBAAwB,EAAE,MAAM,kBAAkB,CAAC;AAE5E,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAS9C,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AAEjE,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAEvD,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAEtD,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAQpD,OAAO,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAChD,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAUpD,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAYtD,OAAO,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAE7F,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAE/D,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC"}
@@ -1,56 +1,84 @@
1
1
  import { z } from "zod/v4";
2
2
  export { z };
3
- // `z.toJSONSchema` reads `.describe()`/`.meta()` metadata via `z.globalRegistry`
4
- // — a per-zod-module-instance `WeakMap`. A schema built by a DIFFERENT zod
5
- // module instance (e.g. bundled separately into a vm-executed workflow entry
6
- // — see `workflow-compiler/src/execute.ts`) has its own registry, so that
7
- // lookup silently finds nothing, even though structural fields
8
- // (type/properties/required) still convert correctly via duck-typed access.
9
- // The schema's own `.description` getter, though, is a closure bound to
10
- // whichever registry actually holds the metadata, so reading it works
11
- // regardless of which zod instance built the schema — it's a plain property
12
- // read, not an identity check. This walks the zod schema's PUBLIC, documented
13
- // shape accessors (`.def.type`, `.shape`, `.element`, `.unwrap()`) in
14
- // parallel with the JSON Schema `z.toJSONSchema` already produced, backfilling
15
- // any `description` the registry lookup missed. Covers the constructs the SDK
16
- // and the real corpus actually use (object/array/optional/default); anything
17
- // else (union, record, nullable's `anyOf` wrapping, ...) falls through
18
- // unmerged — no worse than before this existed, just not extended to those.
19
- const backfillDescriptions = (t, node) => {
20
- var _a;
21
- const description = t.description;
22
- if (node.description === undefined && typeof description === "string") {
23
- node.description = description;
24
- }
25
- const kind = (_a = t.def) === null || _a === void 0 ? void 0 : _a.type;
26
- if (kind === "object" && node.properties) {
27
- const shape = t.shape;
28
- for (const [key, sub] of Object.entries(shape)) {
29
- const propNode = node.properties[key];
30
- if (propNode) {
31
- backfillDescriptions(sub, propNode);
32
- }
3
+ // `z.toJSONSchema` finds `.meta()` through a per-zod-instance registry, so a
4
+ // schema built by another zod copy (a vm-executed workflow entry, see
5
+ // `workflow-compiler/src/execute.ts`) loses it; the schema's own no-argument
6
+ // `.meta()` still reads the right registry. This walks the zod schema beside
7
+ // the JSON node `z.toJSONSchema` emitted for it, kind by kind, and copies the
8
+ // keys every API Ajv accepts (`input` is registered there as a keyword).
9
+ const BACKFILLED_META_KEYS = ["description", "title", "examples", "deprecated", "readOnly", "writeOnly", "input"];
10
+ // Wrappers that add no JSON Schema level: the inner schema's keys land on the same node.
11
+ const SAME_NODE_WRAPPERS = new Set(["optional", "default", "prefault", "nonoptional", "readonly", "catch"]);
12
+ const asNode = (v) => typeof v === "object" && v !== null && !Array.isArray(v) ? v : undefined;
13
+ const backfillMetadata = (t, node, seen = new Set()) => {
14
+ var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q;
15
+ if (seen.has(t))
16
+ return;
17
+ const path = new Set(seen).add(t);
18
+ const visit = (child, childNode) => {
19
+ const n = asNode(childNode);
20
+ if (child && n)
21
+ backfillMetadata(child, n, path);
22
+ };
23
+ const meta = (_b = (_a = t).meta) === null || _b === void 0 ? void 0 : _b.call(_a);
24
+ if (typeof meta === "object" && meta !== null) {
25
+ for (const key of BACKFILLED_META_KEYS) {
26
+ // Round-tripped into plain data from this realm, not the vm's.
27
+ const json = JSON.stringify(meta[key]);
28
+ if (json !== undefined && node[key] === undefined)
29
+ node[key] = JSON.parse(json);
33
30
  }
34
31
  }
35
- else if (kind === "array" && node.items) {
36
- const element = t.element;
37
- backfillDescriptions(element, node.items);
38
- }
39
- else if (kind === "optional" || kind === "default" || kind === "nonoptional") {
40
- // These wrappers add no JSON Schema nesting level of their own (optional
41
- // only affects `required`; default keeps the wrapped type's shape), so
42
- // the inner schema's fields land at this SAME node.
43
- const unwrap = t.unwrap;
44
- if (typeof unwrap === "function") {
45
- backfillDescriptions(unwrap(), node);
46
- }
32
+ const def = ((_c = t.def) !== null && _c !== void 0 ? _c : {});
33
+ const kind = (_d = def.type) !== null && _d !== void 0 ? _d : "";
34
+ if (kind === "object") {
35
+ const shape = t.shape;
36
+ for (const [key, sub] of Object.entries(shape))
37
+ visit(sub, (_e = node.properties) === null || _e === void 0 ? void 0 : _e[key]);
38
+ }
39
+ else if (kind === "array") {
40
+ visit(def.element, node.items);
41
+ }
42
+ else if (kind === "record") {
43
+ visit(def.valueType, node.additionalProperties);
44
+ }
45
+ else if (kind === "union") {
46
+ const branches = (_g = (_f = node.anyOf) !== null && _f !== void 0 ? _f : node.oneOf) !== null && _g !== void 0 ? _g : [];
47
+ (_h = def.options) === null || _h === void 0 ? void 0 : _h.forEach((option, i) => visit(option, branches[i]));
48
+ }
49
+ else if (kind === "intersection") {
50
+ visit(def.left, (_j = node.allOf) === null || _j === void 0 ? void 0 : _j[0]);
51
+ visit(def.right, (_k = node.allOf) === null || _k === void 0 ? void 0 : _k[1]);
52
+ }
53
+ else if (kind === "tuple") {
54
+ const items = node.items;
55
+ if (Array.isArray(items))
56
+ (_l = def.items) === null || _l === void 0 ? void 0 : _l.forEach((item, i) => visit(item, items[i]));
57
+ else
58
+ (_m = def.items) === null || _m === void 0 ? void 0 : _m.forEach((item) => visit(item, items));
59
+ visit(def.rest, node.additionalItems);
60
+ }
61
+ else if (kind === "nullable") {
62
+ // `anyOf: [inner, { type: "null" }]`, or the inner node itself when it inlines.
63
+ visit(def.innerType, (_p = (_o = node.anyOf) === null || _o === void 0 ? void 0 : _o[0]) !== null && _p !== void 0 ? _p : node);
64
+ }
65
+ else if (SAME_NODE_WRAPPERS.has(kind)) {
66
+ visit(def.innerType, node);
67
+ }
68
+ else if (kind === "lazy") {
69
+ visit((_q = def.getter) === null || _q === void 0 ? void 0 : _q.call(def), node);
70
+ }
71
+ else if (kind === "pipe") {
72
+ // The node describes one side; a marker on either side keeps the field sensitive.
73
+ visit(def.out, node);
74
+ visit(def.in, node);
47
75
  }
48
76
  };
49
77
  // The repo's ajv schemas and every hand-written workflow use draft-07; zod's
50
78
  // default target is 2020-12, which ajv would reject.
51
79
  export const toJsonSchema = (t) => {
52
80
  const result = z.toJSONSchema(t, { target: "draft-7" });
53
- backfillDescriptions(t, result);
81
+ backfillMetadata(t, result);
54
82
  return result;
55
83
  };
56
84
  // A pointer to bytes held out-of-band, so a large payload never rides the
@@ -1 +1 @@
1
- {"version":3,"file":"schema.js","sourceRoot":"","sources":["../../src/schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,QAAQ,CAAC;AAG3B,OAAO,EAAE,CAAC,EAAE,CAAC;AAyCb,iFAAiF;AACjF,2EAA2E;AAC3E,6EAA6E;AAC7E,0EAA0E;AAC1E,+DAA+D;AAC/D,4EAA4E;AAC5E,wEAAwE;AACxE,sEAAsE;AACtE,4EAA4E;AAC5E,8EAA8E;AAC9E,sEAAsE;AACtE,+EAA+E;AAC/E,8EAA8E;AAC9E,6EAA6E;AAC7E,uEAAuE;AACvE,4EAA4E;AAC5E,MAAM,oBAAoB,GAAG,CAAC,CAAY,EAAE,IAAgB,EAAQ,EAAE;;IACpE,MAAM,WAAW,GAAI,CAA0C,CAAC,WAAW,CAAC;IAC5E,IAAI,IAAI,CAAC,WAAW,KAAK,SAAS,IAAI,OAAO,WAAW,KAAK,QAAQ,EAAE,CAAC;QACtE,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;IACjC,CAAC;IAED,MAAM,IAAI,GAAG,MAAC,CAA4C,CAAC,GAAG,0CAAE,IAAI,CAAC;IACrE,IAAI,IAAI,KAAK,QAAQ,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;QACzC,MAAM,KAAK,GAAI,CAAqD,CAAC,KAAK,CAAC;QAC3E,KAAK,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;YAC/C,MAAM,QAAQ,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;YACtC,IAAI,QAAQ,EAAE,CAAC;gBACb,oBAAoB,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;YACtC,CAAC;QACH,CAAC;IACH,CAAC;SAAM,IAAI,IAAI,KAAK,OAAO,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;QAC1C,MAAM,OAAO,GAAI,CAAuC,CAAC,OAAO,CAAC;QACjE,oBAAoB,CAAC,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;IAC5C,CAAC;SAAM,IAAI,IAAI,KAAK,UAAU,IAAI,IAAI,KAAK,SAAS,IAAI,IAAI,KAAK,aAAa,EAAE,CAAC;QAC/E,yEAAyE;QACzE,uEAAuE;QACvE,oDAAoD;QACpD,MAAM,MAAM,GAAI,CAA6C,CAAC,MAAM,CAAC;QACrE,IAAI,OAAO,MAAM,KAAK,UAAU,EAAE,CAAC;YACjC,oBAAoB,CAAC,MAAM,EAAE,EAAE,IAAI,CAAC,CAAC;QACvC,CAAC;IACH,CAAC;AACH,CAAC,CAAC;AAEF,6EAA6E;AAC7E,qDAAqD;AACrD,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,CAAY,EAAc,EAAE;IACvD,MAAM,MAAM,GAAG,CAAC,CAAC,YAAY,CAAC,CAAC,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,CAAe,CAAC;IACtE,oBAAoB,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;IAChC,OAAO,MAAM,CAAC;AAChB,CAAC,CAAC;AAEF,0EAA0E;AAC1E,wBAAwB;AACxB,MAAM,CAAC,MAAM,QAAQ,GAAG,GAAG,EAAE,CAC3B,CAAC,CAAC,MAAM,CAAC;IACP,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC;IAC9B,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC;CAC9B,CAAC,CAAC"}
1
+ {"version":3,"file":"schema.js","sourceRoot":"","sources":["../../src/schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,QAAQ,CAAC;AAG3B,OAAO,EAAE,CAAC,EAAE,CAAC;AAyCb,6EAA6E;AAC7E,sEAAsE;AACtE,6EAA6E;AAC7E,6EAA6E;AAC7E,8EAA8E;AAC9E,yEAAyE;AACzE,MAAM,oBAAoB,GAAG,CAAC,aAAa,EAAE,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,UAAU,EAAE,WAAW,EAAE,OAAO,CAAC,CAAC;AAElH,yFAAyF;AACzF,MAAM,kBAAkB,GAAG,IAAI,GAAG,CAAC,CAAC,UAAU,EAAE,SAAS,EAAE,UAAU,EAAE,aAAa,EAAE,UAAU,EAAE,OAAO,CAAC,CAAC,CAAC;AAiB5G,MAAM,MAAM,GAAG,CAAC,CAAU,EAA0B,EAAE,CACpD,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAE,CAAgB,CAAC,CAAC,CAAC,SAAS,CAAC;AAE3F,MAAM,gBAAgB,GAAG,CAAC,CAAY,EAAE,IAAgB,EAAE,OAAuB,IAAI,GAAG,EAAE,EAAQ,EAAE;;IAClG,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;QAAE,OAAO;IACxB,MAAM,IAAI,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IAClC,MAAM,KAAK,GAAG,CAAC,KAAmC,EAAE,SAAkB,EAAE,EAAE;QACxE,MAAM,CAAC,GAAG,MAAM,CAAC,SAAS,CAAC,CAAC;QAC5B,IAAI,KAAK,IAAI,CAAC;YAAE,gBAAgB,CAAC,KAAK,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC;IACnD,CAAC,CAAC;IAEF,MAAM,IAAI,GAAG,MAAA,MAAC,CAAyC,EAAC,IAAI,kDAAI,CAAC;IACjE,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,KAAK,IAAI,EAAE,CAAC;QAC9C,KAAK,MAAM,GAAG,IAAI,oBAAoB,EAAE,CAAC;YACvC,+DAA+D;YAC/D,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAE,IAAgC,CAAC,GAAG,CAAC,CAAC,CAAC;YACpE,IAAI,IAAI,KAAK,SAAS,IAAI,IAAI,CAAC,GAAG,CAAC,KAAK,SAAS;gBAAE,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAClF,CAAC;IACH,CAAC;IAED,MAAM,GAAG,GAAG,CAAC,MAAC,CAAiC,CAAC,GAAG,mCAAI,EAAE,CAAW,CAAC;IACrE,MAAM,IAAI,GAAG,MAAA,GAAG,CAAC,IAAI,mCAAI,EAAE,CAAC;IAC5B,IAAI,IAAI,KAAK,QAAQ,EAAE,CAAC;QACtB,MAAM,KAAK,GAAI,CAAqD,CAAC,KAAK,CAAC;QAC3E,KAAK,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC;YAAE,KAAK,CAAC,GAAG,EAAE,MAAA,IAAI,CAAC,UAAU,0CAAG,GAAG,CAAC,CAAC,CAAC;IACrF,CAAC;SAAM,IAAI,IAAI,KAAK,OAAO,EAAE,CAAC;QAC5B,KAAK,CAAC,GAAG,CAAC,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;IACjC,CAAC;SAAM,IAAI,IAAI,KAAK,QAAQ,EAAE,CAAC;QAC7B,KAAK,CAAC,GAAG,CAAC,SAAS,EAAE,IAAI,CAAC,oBAAoB,CAAC,CAAC;IAClD,CAAC;SAAM,IAAI,IAAI,KAAK,OAAO,EAAE,CAAC;QAC5B,MAAM,QAAQ,GAAG,MAAA,MAAA,IAAI,CAAC,KAAK,mCAAI,IAAI,CAAC,KAAK,mCAAI,EAAE,CAAC;QAChD,MAAA,GAAG,CAAC,OAAO,0CAAE,OAAO,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAClE,CAAC;SAAM,IAAI,IAAI,KAAK,cAAc,EAAE,CAAC;QACnC,KAAK,CAAC,GAAG,CAAC,IAAI,EAAE,MAAA,IAAI,CAAC,KAAK,0CAAG,CAAC,CAAC,CAAC,CAAC;QACjC,KAAK,CAAC,GAAG,CAAC,KAAK,EAAE,MAAA,IAAI,CAAC,KAAK,0CAAG,CAAC,CAAC,CAAC,CAAC;IACpC,CAAC;SAAM,IAAI,IAAI,KAAK,OAAO,EAAE,CAAC;QAC5B,MAAM,KAAK,GAAY,IAAI,CAAC,KAAK,CAAC;QAClC,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;YAAE,MAAA,GAAG,CAAC,KAAK,0CAAE,OAAO,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;;YAC5E,MAAA,GAAG,CAAC,KAAK,0CAAE,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC;QACtD,KAAK,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,eAAe,CAAC,CAAC;IACxC,CAAC;SAAM,IAAI,IAAI,KAAK,UAAU,EAAE,CAAC;QAC/B,gFAAgF;QAChF,KAAK,CAAC,GAAG,CAAC,SAAS,EAAE,MAAA,MAAA,IAAI,CAAC,KAAK,0CAAG,CAAC,CAAC,mCAAI,IAAI,CAAC,CAAC;IAChD,CAAC;SAAM,IAAI,kBAAkB,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;QACxC,KAAK,CAAC,GAAG,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;IAC7B,CAAC;SAAM,IAAI,IAAI,KAAK,MAAM,EAAE,CAAC;QAC3B,KAAK,CAAC,MAAA,GAAG,CAAC,MAAM,mDAAI,EAAE,IAAI,CAAC,CAAC;IAC9B,CAAC;SAAM,IAAI,IAAI,KAAK,MAAM,EAAE,CAAC;QAC3B,kFAAkF;QAClF,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;QACrB,KAAK,CAAC,GAAG,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;IACtB,CAAC;AACH,CAAC,CAAC;AAEF,6EAA6E;AAC7E,qDAAqD;AACrD,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,CAAY,EAAc,EAAE;IACvD,MAAM,MAAM,GAAG,CAAC,CAAC,YAAY,CAAC,CAAC,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,CAAe,CAAC;IACtE,gBAAgB,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;IAC5B,OAAO,MAAM,CAAC;AAChB,CAAC,CAAC;AAEF,0EAA0E;AAC1E,wBAAwB;AACxB,MAAM,CAAC,MAAM,QAAQ,GAAG,GAAG,EAAE,CAC3B,CAAC,CAAC,MAAM,CAAC;IACP,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC;IAC9B,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC;CAC9B,CAAC,CAAC"}
package/dist/index.d.ts CHANGED
@@ -53,7 +53,7 @@ type Condition = {
53
53
  value: string | number | boolean;
54
54
  };
55
55
  type WaitForCallbackResume = {
56
- /** Stable scope for the lookup key (e.g. "concierge:signing"). */
56
+ /** Stable scope for the lookup key (e.g. "esign:completed"). */
57
57
  namespace: string;
58
58
  /** Composed at runtime via JSONata. Resumer reads the same key. */
59
59
  lookupKey: string;
@@ -233,6 +233,16 @@ interface WebhookResponseRuleSpec {
233
233
  responseBody?: Record<string, string>;
234
234
  skipHandlers?: boolean;
235
235
  }
236
+ interface WebhookSignatureSpec {
237
+ /** The request header carrying the signature, e.g. `x-xero-signature`. */
238
+ header: string;
239
+ /** Default `hmac-sha256`, the only one supported. */
240
+ algorithm?: "hmac-sha256";
241
+ /** Default `base64`. */
242
+ encoding?: "base64" | "hex";
243
+ /** Stripped from the header value before comparing, e.g. `sha256=`. */
244
+ prefix?: string;
245
+ }
236
246
  interface WebhookSpec {
237
247
  name: string;
238
248
  description?: string;
@@ -241,6 +251,9 @@ interface WebhookSpec {
241
251
  * slug-less webhook retargets which row it updates. */
242
252
  slug?: string;
243
253
  responseRules?: WebhookResponseRuleSpec[];
254
+ /** Verify each call's HMAC signature. Omitted: the deployed webhook keeps
255
+ * whatever check it has. In a module, a webhook with a check needs a `slug`. */
256
+ signatureVerification?: WebhookSignatureSpec;
244
257
  }
245
258
  interface RecordedWebhook {
246
259
  kind: "webhook";
@@ -248,6 +261,7 @@ interface RecordedWebhook {
248
261
  description?: string;
249
262
  slug?: string;
250
263
  responseRules?: WebhookResponseRuleSpec[];
264
+ signatureVerification?: WebhookSignatureSpec;
251
265
  }
252
266
  interface WebhookModule {
253
267
  record(): RecordedWebhook;
@@ -593,4 +607,4 @@ type NodeTypeSupport = {
593
607
  declare const NODE_TYPE_SUPPORT: Record<WorkflowNodeType, NodeTypeSupport>;
594
608
 
595
609
  export { Builder, IdAllocator, NODE_TYPE_SUPPORT, artifact, contains, defineAgentRef, defineFunction, defineKnowledgeBase, defineSchedule, defineTool, defineToolWorkflow, defineWebhook, defineWholeStateFunction, defineWorkflow, encodeValue, eq, gt, gte, handleFor, isNull, isPresent, isRecordedResource, isRef, isTpl, jsonata, lt, lte, refPath, toJsonSchema, tpl, tplText };
596
- export type { AgentRefDef, AgentSpec, ApprovalSpec, BashSpec, Cond, ExecuteWorkflowSpec, FunctionDef, Handle, HutlyApi, KnowledgeBaseDef, NodeInput, NodeSpec, NodeTypeSupport, OnFailure, RecordedEntry, RecordedSchedule, RecordedWebhook, RecordedWorkflow, RefLike, ScheduleModule, ScheduleSpec, ScheduleTriggerSpec, Scope, ToolBuilder, ToolCallInput, ToolConfigFor, ToolConfigRegistry, ToolDef, ToolInstanceRegistry, ToolInstanceShape, ToolInstancesFor, ToolWorkflowSpec, TplLike, TriggerBindingsSpec, TriggerSpec, WaitForCallbackSpec, WebhookModule, WebhookResponseRuleSpec, WebhookSpec, WebhookTriggerSpec, WholeStateFunctionDef, WorkflowModule, WorkflowSpec };
610
+ export type { AgentRefDef, AgentSpec, ApprovalSpec, BashSpec, Cond, ExecuteWorkflowSpec, FunctionDef, Handle, HutlyApi, KnowledgeBaseDef, NodeInput, NodeSpec, NodeTypeSupport, OnFailure, RecordedEntry, RecordedSchedule, RecordedWebhook, RecordedWorkflow, RefLike, ScheduleModule, ScheduleSpec, ScheduleTriggerSpec, Scope, ToolBuilder, ToolCallInput, ToolConfigFor, ToolConfigRegistry, ToolDef, ToolInstanceRegistry, ToolInstanceShape, ToolInstancesFor, ToolWorkflowSpec, TplLike, TriggerBindingsSpec, TriggerSpec, WaitForCallbackSpec, WebhookModule, WebhookResponseRuleSpec, WebhookSignatureSpec, WebhookSpec, WebhookTriggerSpec, WholeStateFunctionDef, WorkflowModule, WorkflowSpec };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@intellia/workflow-sdk",
3
- "version": "0.2.1",
3
+ "version": "0.3.0",
4
4
  "license": "MIT",
5
5
  "description": "TypeScript authoring surface for Hutly workflows",
6
6
  "publishConfig": {