@zapier/zapier-sdk 0.79.0 → 0.80.1

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.
@@ -53,18 +53,20 @@ function buildRegistry({
53
53
  sdk,
54
54
  meta,
55
55
  formatters,
56
+ boundResolvers,
57
+ positional,
56
58
  packageFilter
57
59
  }) {
58
60
  const definitionsByKey = /* @__PURE__ */ new Map();
59
61
  const objectDeclaredKeys = /* @__PURE__ */ new Set();
60
62
  for (const m of Object.values(meta)) {
61
63
  for (const ref of m.categories ?? []) {
62
- const key = typeof ref === "string" ? ref : ref.key;
64
+ const key2 = typeof ref === "string" ? ref : ref.key;
63
65
  if (typeof ref === "object") {
64
- objectDeclaredKeys.add(key);
65
- definitionsByKey.set(key, resolveCategoryDefinition(ref));
66
- } else if (!objectDeclaredKeys.has(key)) {
67
- definitionsByKey.set(key, resolveCategoryDefinition(ref));
66
+ objectDeclaredKeys.add(key2);
67
+ definitionsByKey.set(key2, resolveCategoryDefinition(ref));
68
+ } else if (!objectDeclaredKeys.has(key2)) {
69
+ definitionsByKey.set(key2, resolveCategoryDefinition(ref));
68
70
  }
69
71
  }
70
72
  }
@@ -72,16 +74,16 @@ function buildRegistry({
72
74
  definitionsByKey.set("other", resolveCategoryDefinition("other"));
73
75
  }
74
76
  const knownCategories = Array.from(definitionsByKey.keys());
75
- const functions = Object.keys(meta).filter((key) => {
76
- const property = sdk[key];
77
+ const functions = Object.keys(meta).filter((key2) => {
78
+ const property = sdk[key2];
77
79
  if (typeof property === "function") return true;
78
- const [rootKey] = key.split(".");
80
+ const [rootKey] = key2.split(".");
79
81
  const rootProperty = sdk[rootKey];
80
82
  return typeof rootProperty === "object" && rootProperty !== null;
81
- }).map((key) => {
82
- const m = meta[key];
83
+ }).map((key2) => {
84
+ const m = meta[key2];
83
85
  return {
84
- name: key,
86
+ name: key2,
85
87
  description: m.description,
86
88
  type: m.type,
87
89
  itemType: m.itemType,
@@ -89,11 +91,13 @@ function buildRegistry({
89
91
  inputSchema: canonicalInputSchema(m.inputSchema),
90
92
  inputParameters: m.inputParameters,
91
93
  outputSchema: m.outputSchema,
94
+ positional: positional?.[key2],
92
95
  categories: (m.categories ?? []).map(
93
96
  (c) => typeof c === "string" ? c : c.key
94
97
  ),
95
98
  resolvers: m.resolvers,
96
- formatter: formatters?.[key],
99
+ boundResolvers: boundResolvers?.[key2],
100
+ formatter: formatters?.[key2],
97
101
  experimental: m.experimental,
98
102
  packages: m.packages,
99
103
  confirm: m.confirm ?? (m.type === "delete" ? "delete" : void 0),
@@ -131,8 +135,8 @@ function composeVoid(existing, added) {
131
135
  }
132
136
  function buildHooks(existing, added) {
133
137
  const result = {};
134
- const start = composeVoid(existing.onMethodStart, added.onMethodStart);
135
- if (start) result.onMethodStart = start;
138
+ const start2 = composeVoid(existing.onMethodStart, added.onMethodStart);
139
+ if (start2) result.onMethodStart = start2;
136
140
  const end = composeVoid(existing.onMethodEnd, added.onMethodEnd);
137
141
  if (end) result.onMethodEnd = end;
138
142
  return result;
@@ -765,11 +769,11 @@ var RESERVED_ROOT_KEYS = /* @__PURE__ */ new Set([
765
769
  "context",
766
770
  "getRegistry"
767
771
  ]);
768
- function hasOwn(obj, key) {
769
- return Object.prototype.hasOwnProperty.call(obj, key);
772
+ function hasOwn(obj, key2) {
773
+ return Object.prototype.hasOwnProperty.call(obj, key2);
770
774
  }
771
- function setOwn(target, key, value) {
772
- Object.defineProperty(target, key, {
775
+ function setOwn(target, key2, value) {
776
+ Object.defineProperty(target, key2, {
773
777
  value,
774
778
  enumerable: true,
775
779
  configurable: true,
@@ -781,31 +785,31 @@ function checkCollisions(target, source, kind, callerLabel, override) {
781
785
  checkRootKeyCollisions(target, Object.keys(source), override, callerLabel);
782
786
  return;
783
787
  }
784
- for (const key of Object.keys(source)) {
785
- if (!override && hasOwn(target, key)) {
788
+ for (const key2 of Object.keys(source)) {
789
+ if (!override && hasOwn(target, key2)) {
786
790
  throw new Error(
787
- `${callerLabel}: duplicate ${kind} "${key}". If the override is intentional, pass { override: true } in the options.`
791
+ `${callerLabel}: duplicate ${kind} "${key2}". If the override is intentional, pass { override: true } in the options.`
788
792
  );
789
793
  }
790
794
  }
791
795
  }
792
796
  function checkRootKeyCollisions(target, keys, override, callerLabel) {
793
- for (const key of keys) {
794
- if (RESERVED_ROOT_KEYS.has(key)) {
797
+ for (const key2 of keys) {
798
+ if (RESERVED_ROOT_KEYS.has(key2)) {
795
799
  throw new Error(
796
- `${callerLabel}: plugin attempted to register reserved root key "${key}". The SDK uses this key for its own accessor; rename the plugin's method.`
800
+ `${callerLabel}: plugin attempted to register reserved root key "${key2}". The SDK uses this key for its own accessor; rename the plugin's method.`
797
801
  );
798
802
  }
799
- if (!override && hasOwn(target, key)) {
803
+ if (!override && hasOwn(target, key2)) {
800
804
  throw new Error(
801
- `${callerLabel}: duplicate root key "${key}". If the override is intentional, pass { override: true } in the options.`
805
+ `${callerLabel}: duplicate root key "${key2}". If the override is intentional, pass { override: true } in the options.`
802
806
  );
803
807
  }
804
808
  }
805
809
  }
806
810
  function applyOwnProperties(target, source) {
807
- for (const key of Object.keys(source)) {
808
- setOwn(target, key, source[key]);
811
+ for (const key2 of Object.keys(source)) {
812
+ setOwn(target, key2, source[key2]);
809
813
  }
810
814
  }
811
815
  function createPluginAccumulator(initialProperties = {}, initialContext = {}) {
@@ -1053,8 +1057,8 @@ function normalizeImports(deps) {
1053
1057
  }
1054
1058
  function collectLeafMeta(config) {
1055
1059
  let meta;
1056
- for (const key of LEAF_META_KEYS) {
1057
- if (config[key] !== void 0) (meta ?? (meta = {}))[key] = config[key];
1060
+ for (const key2 of LEAF_META_KEYS) {
1061
+ if (config[key2] !== void 0) (meta ?? (meta = {}))[key2] = config[key2];
1058
1062
  }
1059
1063
  return meta;
1060
1064
  }
@@ -1077,12 +1081,66 @@ function defineMethod(config) {
1077
1081
  run: config.run
1078
1082
  };
1079
1083
  }
1084
+ function defineResolver(config) {
1085
+ const deps = normalizeImports(config.imports);
1086
+ const base = { imports: deps.plugins, importBindings: deps.bindings };
1087
+ const gates = {
1088
+ requireParameters: config.requireParameters
1089
+ };
1090
+ switch (config.type) {
1091
+ case "static":
1092
+ return {
1093
+ ...base,
1094
+ ...gates,
1095
+ type: "static",
1096
+ inputType: config.inputType,
1097
+ placeholder: config.placeholder
1098
+ };
1099
+ case "constant":
1100
+ return { ...base, ...gates, type: "constant", value: config.value };
1101
+ case "info":
1102
+ return { ...base, type: "info", text: config.text ?? "" };
1103
+ case "object":
1104
+ return {
1105
+ ...base,
1106
+ ...gates,
1107
+ type: "object",
1108
+ properties: config.properties,
1109
+ definitions: config.definitions,
1110
+ getProperties: config.getProperties
1111
+ };
1112
+ case "array":
1113
+ return {
1114
+ ...base,
1115
+ ...gates,
1116
+ type: "array",
1117
+ items: config.items,
1118
+ minItems: config.minItems,
1119
+ maxItems: config.maxItems,
1120
+ itemValueType: config.itemValueType,
1121
+ definitions: config.definitions
1122
+ };
1123
+ default:
1124
+ return {
1125
+ ...base,
1126
+ ...gates,
1127
+ type: "dynamic",
1128
+ inputType: config.inputType,
1129
+ placeholder: config.placeholder,
1130
+ getContext: config.getContext,
1131
+ listItems: config.listItems,
1132
+ prompt: config.prompt,
1133
+ tryResolveWithoutPrompt: config.tryResolveWithoutPrompt,
1134
+ tryResolveFromSearch: config.tryResolveFromSearch
1135
+ };
1136
+ }
1137
+ }
1080
1138
  function defineFormatter(config) {
1081
1139
  const deps = normalizeImports(config.imports);
1082
1140
  return {
1083
1141
  imports: deps.plugins,
1084
1142
  importBindings: deps.bindings,
1085
- fetchContext: config.fetchContext,
1143
+ getContext: config.getContext,
1086
1144
  format: config.format
1087
1145
  };
1088
1146
  }
@@ -1211,7 +1269,7 @@ function legacyGraphEntry(name, value, pluginMeta) {
1211
1269
  function adaptLegacyFormatter(legacy, sdk) {
1212
1270
  const legacyFetch = legacy.fetch;
1213
1271
  return {
1214
- fetchContext: legacyFetch ? async ({ items, input, context }) => {
1272
+ getContext: legacyFetch ? async ({ items, input, context }) => {
1215
1273
  let ctx = context;
1216
1274
  for (const item of items) {
1217
1275
  ctx = await legacyFetch(sdk, input, item, ctx);
@@ -1227,6 +1285,14 @@ function normalizeFormatter(entry, sdk) {
1227
1285
  const legacy = entry.meta?.formatter;
1228
1286
  return legacy ? adaptLegacyFormatter(legacy, sdk) : void 0;
1229
1287
  }
1288
+ function normalizeBoundResolvers(entry) {
1289
+ if (entry.pluginType !== "method") return void 0;
1290
+ return entry.resolvers;
1291
+ }
1292
+ function methodPositional(entry) {
1293
+ if (entry.pluginType !== "method") return void 0;
1294
+ return entry.positional;
1295
+ }
1230
1296
  function pluginEntryMeta(entry) {
1231
1297
  if (entry.pluginType === "method" && entry.meta) {
1232
1298
  return entry.inputSchema ? { ...entry.meta, inputSchema: entry.inputSchema } : entry.meta;
@@ -1247,11 +1313,24 @@ function buildSurfaceRegistry(context, packageFilter) {
1247
1313
  if (m) meta[binding] = m;
1248
1314
  }
1249
1315
  const formatters = {};
1316
+ const boundResolvers = {};
1317
+ const positional = {};
1250
1318
  for (const [binding, entry] of Object.entries(entries)) {
1251
1319
  const f = normalizeFormatter(entry, surface);
1252
1320
  if (f) formatters[binding] = f;
1253
- }
1254
- return buildRegistry({ sdk: surface, meta, formatters, packageFilter });
1321
+ const r = normalizeBoundResolvers(entry);
1322
+ if (r) boundResolvers[binding] = r;
1323
+ const p = methodPositional(entry);
1324
+ if (p) positional[binding] = p;
1325
+ }
1326
+ return buildRegistry({
1327
+ sdk: surface,
1328
+ meta,
1329
+ formatters,
1330
+ boundResolvers,
1331
+ positional,
1332
+ packageFilter
1333
+ });
1255
1334
  }
1256
1335
  var dangerousContextPlugin = {
1257
1336
  pluginType: "property",
@@ -1368,15 +1447,15 @@ function collectPlugins(root, materialized = /* @__PURE__ */ new Set()) {
1368
1447
  }
1369
1448
  return byId;
1370
1449
  }
1371
- function bindValue(target, key, entry) {
1450
+ function bindValue(target, key2, entry) {
1372
1451
  if (entry.pluginType === "property" && entry.getValue) {
1373
- Object.defineProperty(target, key, {
1452
+ Object.defineProperty(target, key2, {
1374
1453
  get: entry.getValue,
1375
1454
  enumerable: true,
1376
1455
  configurable: true
1377
1456
  });
1378
1457
  } else {
1379
- Object.defineProperty(target, key, {
1458
+ Object.defineProperty(target, key2, {
1380
1459
  value: entry.value,
1381
1460
  writable: true,
1382
1461
  enumerable: true,
@@ -1428,8 +1507,7 @@ function bindResolver(resolver, plugins) {
1428
1507
  case "static":
1429
1508
  return {
1430
1509
  type: "static",
1431
- requireParams: resolver.requireParams,
1432
- requireCapabilities: resolver.requireCapabilities,
1510
+ requireParameters: resolver.requireParameters,
1433
1511
  inputType: resolver.inputType,
1434
1512
  placeholder: resolver.placeholder
1435
1513
  };
@@ -1437,8 +1515,7 @@ function bindResolver(resolver, plugins) {
1437
1515
  return {
1438
1516
  type: "constant",
1439
1517
  value: resolver.value,
1440
- requireParams: resolver.requireParams,
1441
- requireCapabilities: resolver.requireCapabilities
1518
+ requireParameters: resolver.requireParameters
1442
1519
  };
1443
1520
  case "info":
1444
1521
  return { type: "info", text: resolver.text };
@@ -1446,24 +1523,24 @@ function bindResolver(resolver, plugins) {
1446
1523
  const imports = buildImports(plugins, resolver.importBindings);
1447
1524
  const bound = {
1448
1525
  type: "object",
1449
- requireParams: resolver.requireParams,
1450
- requireCapabilities: resolver.requireCapabilities
1526
+ requireParameters: resolver.requireParameters
1451
1527
  };
1452
1528
  if (resolver.properties)
1453
1529
  bound.properties = bindFields(resolver.properties, plugins);
1454
1530
  if (resolver.definitions)
1455
1531
  bound.definitions = bindDefinitions(resolver.definitions, plugins);
1456
- const { fetch: fetch2 } = resolver;
1457
- if (fetch2) bound.fetch = ({ params }) => fetch2({ imports, params });
1532
+ const { getProperties } = resolver;
1533
+ if (getProperties)
1534
+ bound.getProperties = ({ input }) => getProperties({ imports, input });
1458
1535
  return bound;
1459
1536
  }
1460
1537
  case "array": {
1461
1538
  const bound = {
1462
1539
  type: "array",
1463
- requireParams: resolver.requireParams,
1464
- requireCapabilities: resolver.requireCapabilities,
1540
+ requireParameters: resolver.requireParameters,
1465
1541
  minItems: resolver.minItems,
1466
1542
  maxItems: resolver.maxItems,
1543
+ itemValueType: resolver.itemValueType,
1467
1544
  items: isResolverRef(resolver.items) ? resolver.items : bindResolver(resolver.items, plugins)
1468
1545
  };
1469
1546
  if (resolver.definitions)
@@ -1474,17 +1551,26 @@ function bindResolver(resolver, plugins) {
1474
1551
  const imports = buildImports(plugins, resolver.importBindings);
1475
1552
  const bound = {
1476
1553
  type: "dynamic",
1477
- requireParams: resolver.requireParams,
1478
- requireCapabilities: resolver.requireCapabilities,
1554
+ requireParameters: resolver.requireParameters,
1479
1555
  inputType: resolver.inputType,
1480
1556
  placeholder: resolver.placeholder,
1481
1557
  prompt: resolver.prompt
1482
1558
  };
1483
- const { fetch: fetch2, tryResolveWithoutPrompt } = resolver;
1484
- if (fetch2)
1485
- bound.fetch = ({ params, search }) => fetch2({ imports, params, search });
1559
+ const {
1560
+ getContext: getContext2,
1561
+ listItems,
1562
+ tryResolveWithoutPrompt,
1563
+ tryResolveFromSearch
1564
+ } = resolver;
1565
+ if (getContext2)
1566
+ bound.getContext = ({ input }) => getContext2({ imports, input });
1567
+ if (listItems)
1568
+ bound.listItems = ({ input, context, search, cursor }) => listItems({ imports, input, context, search, cursor });
1486
1569
  if (tryResolveWithoutPrompt) {
1487
- bound.tryResolveWithoutPrompt = ({ params }) => tryResolveWithoutPrompt({ imports, params });
1570
+ bound.tryResolveWithoutPrompt = ({ input }) => tryResolveWithoutPrompt({ imports, input });
1571
+ }
1572
+ if (tryResolveFromSearch) {
1573
+ bound.tryResolveFromSearch = ({ input, search }) => tryResolveFromSearch({ imports, input, search });
1488
1574
  }
1489
1575
  return bound;
1490
1576
  }
@@ -1492,8 +1578,8 @@ function bindResolver(resolver, plugins) {
1492
1578
  }
1493
1579
  function bindFields(fields, plugins) {
1494
1580
  const out = {};
1495
- for (const [key, field] of Object.entries(fields)) {
1496
- out[key] = {
1581
+ for (const [key2, field] of Object.entries(fields)) {
1582
+ out[key2] = {
1497
1583
  ...field,
1498
1584
  resolver: isResolverRef(field.resolver) ? field.resolver : bindResolver(field.resolver, plugins)
1499
1585
  };
@@ -1502,17 +1588,17 @@ function bindFields(fields, plugins) {
1502
1588
  }
1503
1589
  function bindDefinitions(definitions, plugins) {
1504
1590
  const out = {};
1505
- for (const [key, def] of Object.entries(definitions)) {
1506
- out[key] = bindResolver(def, plugins);
1591
+ for (const [key2, def] of Object.entries(definitions)) {
1592
+ out[key2] = bindResolver(def, plugins);
1507
1593
  }
1508
1594
  return out;
1509
1595
  }
1510
1596
  function bindFormatter(formatter, plugins) {
1511
1597
  const imports = buildImports(plugins, formatter.importBindings);
1512
1598
  const bound = { format: formatter.format };
1513
- const { fetchContext } = formatter;
1514
- if (fetchContext)
1515
- bound.fetchContext = ({ items, input, context }) => fetchContext({ imports, items, input, context });
1599
+ const { getContext: getContext2 } = formatter;
1600
+ if (getContext2)
1601
+ bound.getContext = ({ items, input, context }) => getContext2({ imports, items, input, context });
1516
1602
  return bound;
1517
1603
  }
1518
1604
  function bindAttachments(descriptors, context) {
@@ -1560,6 +1646,7 @@ function runLegacyPass(descriptors, context) {
1560
1646
  const sdk = this ?? exports;
1561
1647
  const meta2 = {};
1562
1648
  const formatters = {};
1649
+ const boundResolvers = {};
1563
1650
  for (const [binding, id2] of Object.entries(context.surface)) {
1564
1651
  const entry = context.plugins[id2];
1565
1652
  if (!entry || entry.pluginType === "aggregate") continue;
@@ -1567,12 +1654,15 @@ function runLegacyPass(descriptors, context) {
1567
1654
  if (m) meta2[binding] = m;
1568
1655
  const f = normalizeFormatter(entry, sdk);
1569
1656
  if (f) formatters[binding] = f;
1657
+ const r = normalizeBoundResolvers(entry);
1658
+ if (r) boundResolvers[binding] = r;
1570
1659
  }
1571
1660
  Object.assign(meta2, context.meta);
1572
1661
  return buildRegistry({
1573
1662
  sdk,
1574
1663
  meta: meta2,
1575
1664
  formatters,
1665
+ boundResolvers,
1576
1666
  packageFilter: options?.package
1577
1667
  });
1578
1668
  };
@@ -1788,7 +1878,7 @@ function createSdk(root) {
1788
1878
  pluginSurface = {};
1789
1879
  bindValue(pluginSurface, plugin.name, plugins2[plugin.id]);
1790
1880
  }
1791
- for (const key of Object.keys(legacyExports)) context.surface[key] = key;
1881
+ for (const key2 of Object.keys(legacyExports)) context.surface[key2] = key2;
1792
1882
  if (plugin.pluginType === "aggregate") {
1793
1883
  recordExportSurface(context, plugin.exports);
1794
1884
  } else {
@@ -1858,6 +1948,756 @@ function addPlugin(sdk, plugin, options) {
1858
1948
  options ?? {}
1859
1949
  );
1860
1950
  }
1951
+ var CORE_SIGNAL_SYMBOL = Symbol.for("kitcore.signal");
1952
+ var CoreSignal = class extends Error {
1953
+ constructor(message) {
1954
+ super(message);
1955
+ Object.setPrototypeOf(this, new.target.prototype);
1956
+ Object.defineProperty(this, CORE_SIGNAL_SYMBOL, {
1957
+ value: true,
1958
+ enumerable: false,
1959
+ configurable: true,
1960
+ writable: false
1961
+ });
1962
+ }
1963
+ };
1964
+ function isCoreSignal(value) {
1965
+ return Boolean(
1966
+ value && typeof value === "object" && value[CORE_SIGNAL_SYMBOL] === true
1967
+ );
1968
+ }
1969
+ var CoreCancelledSignal = class extends CoreSignal {
1970
+ constructor(message = "resolution cancelled") {
1971
+ super(message);
1972
+ this.name = "CoreCancelledSignal";
1973
+ this.code = "CANCELLED";
1974
+ }
1975
+ };
1976
+ function unwrap(schema) {
1977
+ let inner = schema;
1978
+ let required = true;
1979
+ for (; ; ) {
1980
+ if (inner instanceof zod.z.ZodOptional) {
1981
+ required = false;
1982
+ inner = inner._zod.def.innerType;
1983
+ } else if (inner instanceof zod.z.ZodDefault) {
1984
+ required = false;
1985
+ inner = inner._zod.def.innerType;
1986
+ } else if (inner instanceof zod.z.ZodNullable) {
1987
+ inner = inner._zod.def.innerType;
1988
+ } else {
1989
+ break;
1990
+ }
1991
+ }
1992
+ return { inner, required };
1993
+ }
1994
+ function valueTypeOf(inner) {
1995
+ if (inner instanceof zod.z.ZodString) return "string";
1996
+ if (inner instanceof zod.z.ZodNumber) return "number";
1997
+ if (inner instanceof zod.z.ZodBoolean) return "boolean";
1998
+ if (inner instanceof zod.z.ZodEnum) return "string";
1999
+ if (inner instanceof zod.z.ZodArray) return "array";
2000
+ if (inner instanceof zod.z.ZodObject) return "object";
2001
+ return void 0;
2002
+ }
2003
+ function staticChoicesOf(inner) {
2004
+ if (inner instanceof zod.z.ZodEnum) {
2005
+ const values = inner.options;
2006
+ return values.map((value) => ({ label: value, value }));
2007
+ }
2008
+ return void 0;
2009
+ }
2010
+ function objectShape(schema) {
2011
+ const { inner } = schema ? unwrap(schema) : { inner: void 0 };
2012
+ if (inner instanceof zod.z.ZodObject) {
2013
+ return inner.shape;
2014
+ }
2015
+ return void 0;
2016
+ }
2017
+ function topoOrder2(specs) {
2018
+ const byName = new Map(specs.map((s) => [s.name, s]));
2019
+ const ordered = [];
2020
+ const placed = /* @__PURE__ */ new Set();
2021
+ let progressed = true;
2022
+ while (ordered.length < specs.length && progressed) {
2023
+ progressed = false;
2024
+ for (const spec of specs) {
2025
+ if (placed.has(spec.name)) continue;
2026
+ const ready = spec.requires.every((r) => !byName.has(r) || placed.has(r));
2027
+ if (ready) {
2028
+ ordered.push(spec);
2029
+ placed.add(spec.name);
2030
+ progressed = true;
2031
+ }
2032
+ }
2033
+ }
2034
+ for (const spec of specs) if (!placed.has(spec.name)) ordered.push(spec);
2035
+ return ordered;
2036
+ }
2037
+ function planParameters(entry) {
2038
+ const shape = objectShape(entry.inputSchema);
2039
+ const resolvers = entry.boundResolvers ?? {};
2040
+ const names = shape ? Object.keys(shape) : Object.keys(resolvers);
2041
+ const specs = names.map((name) => {
2042
+ const field = shape?.[name];
2043
+ const { inner, required } = field ? unwrap(field) : { inner: void 0, required: false };
2044
+ const resolver = resolvers[name];
2045
+ return {
2046
+ name,
2047
+ required,
2048
+ valueType: inner ? valueTypeOf(inner) : void 0,
2049
+ staticChoices: inner ? staticChoicesOf(inner) : void 0,
2050
+ resolver,
2051
+ requires: resolver?.requireParameters ?? []
2052
+ };
2053
+ });
2054
+ return { parameters: topoOrder2(specs) };
2055
+ }
2056
+ function getAtPath(root, path) {
2057
+ let node = root;
2058
+ for (const seg of path) {
2059
+ if (node == null || typeof node !== "object") return void 0;
2060
+ node = node[seg];
2061
+ }
2062
+ return node;
2063
+ }
2064
+ function setAtPath(root, path, value) {
2065
+ let node = root;
2066
+ for (let i = 0; i < path.length - 1; i++) {
2067
+ const seg = path[i];
2068
+ if (node[seg] == null || typeof node[seg] !== "object") node[seg] = {};
2069
+ node = node[seg];
2070
+ }
2071
+ node[path[path.length - 1]] = value;
2072
+ }
2073
+ var key = (path) => path.join(".");
2074
+ function isSettled(state, path) {
2075
+ return state.settled.includes(key(path));
2076
+ }
2077
+ function settle(state, path) {
2078
+ const k = key(path);
2079
+ if (!state.settled.includes(k)) state.settled.push(k);
2080
+ }
2081
+ function clone(state) {
2082
+ return JSON.parse(JSON.stringify(state));
2083
+ }
2084
+ function coerce(leaf, raw) {
2085
+ if (typeof raw !== "string") return raw;
2086
+ if (leaf.valueType === "number") {
2087
+ const n = Number(raw);
2088
+ return raw.trim() !== "" && !Number.isNaN(n) ? n : raw;
2089
+ }
2090
+ if (leaf.valueType === "boolean") {
2091
+ if (raw === "true") return true;
2092
+ if (raw === "false") return false;
2093
+ }
2094
+ return raw;
2095
+ }
2096
+ async function validationError(leaf, value, state) {
2097
+ const context = await resolveContext(leaf, state.resolved);
2098
+ const config = leaf.resolver?.prompt?.({
2099
+ items: state.listing?.items ?? [],
2100
+ input: mergeInput(state.resolved, leaf.extraInput),
2101
+ context
2102
+ });
2103
+ if (!config?.validate) return null;
2104
+ const verdict = config.validate(value);
2105
+ if (verdict === true) return null;
2106
+ return typeof verdict === "string" ? verdict : `${leaf.name}: invalid value`;
2107
+ }
2108
+ function toChoice(c) {
2109
+ const label = "label" in c ? c.label : c.name;
2110
+ const hint = Array.isArray(c.hint) ? c.hint.join(", ") : c.hint;
2111
+ return { label, value: String(c.value), hint };
2112
+ }
2113
+ function isRef(r) {
2114
+ return typeof r === "object" && r !== null && "ref" in r;
2115
+ }
2116
+ function toLeaf(name, field, definitions) {
2117
+ let resolver;
2118
+ let extraInput;
2119
+ if (isRef(field.resolver)) {
2120
+ resolver = definitions?.[field.resolver.ref];
2121
+ extraInput = field.resolver.input;
2122
+ } else {
2123
+ resolver = field.resolver;
2124
+ }
2125
+ return {
2126
+ name,
2127
+ required: field.required ?? false,
2128
+ resolver,
2129
+ extraInput,
2130
+ // Carry the field's value type so nested answers coerce (number/boolean)
2131
+ // the same way top-level params do. Without this a nested `z.number()`
2132
+ // field's typed answer stays a string and fails final validation.
2133
+ valueType: field.valueType,
2134
+ requires: resolver?.requireParameters ?? []
2135
+ };
2136
+ }
2137
+ async function objectChildren(resolver, input) {
2138
+ if (resolver.properties) {
2139
+ return Object.entries(resolver.properties).map(
2140
+ ([name, field]) => toLeaf(name, field, resolver.definitions)
2141
+ );
2142
+ }
2143
+ if (!resolver.getProperties) return [];
2144
+ const fields = await resolver.getProperties({ input });
2145
+ return Object.entries(fields).map(([name, field]) => {
2146
+ if (!isRef(field.resolver) && (field.resolver.imports?.length ?? 0) > 0) {
2147
+ throw new Error(
2148
+ `dynamic object field "${name}" inlines an import-bearing resolver; use { ref } into the object's definitions so its imports bind`
2149
+ );
2150
+ }
2151
+ return toLeaf(name, field, resolver.definitions);
2152
+ });
2153
+ }
2154
+ function arrayItem(resolver) {
2155
+ const items = resolver.items;
2156
+ const valueType = resolver.itemValueType;
2157
+ if (isRef(items)) {
2158
+ return {
2159
+ name: "",
2160
+ required: true,
2161
+ resolver: resolver.definitions?.[items.ref],
2162
+ extraInput: items.input,
2163
+ valueType,
2164
+ requires: []
2165
+ };
2166
+ }
2167
+ return {
2168
+ name: "",
2169
+ required: true,
2170
+ resolver: items,
2171
+ valueType,
2172
+ requires: []
2173
+ };
2174
+ }
2175
+ function mergeInput(input, extra) {
2176
+ return extra ? { ...input, ...extra } : input;
2177
+ }
2178
+ async function childrenAt(ctx, path, resolved) {
2179
+ if (path.length === 0) return ctx.parameters;
2180
+ const leaf = await leafAt(ctx, path, resolved);
2181
+ if (!leaf?.resolver || leaf.resolver.type !== "object") return [];
2182
+ return objectChildren(leaf.resolver, mergeInput(resolved, leaf.extraInput));
2183
+ }
2184
+ async function leafAt(ctx, path, resolved) {
2185
+ let children = ctx.parameters;
2186
+ let leaf;
2187
+ for (let i = 0; i < path.length; i++) {
2188
+ const seg = path[i];
2189
+ if (typeof seg === "number") {
2190
+ if (leaf?.resolver?.type !== "array") return void 0;
2191
+ leaf = arrayItem(leaf.resolver);
2192
+ } else {
2193
+ leaf = children.find((c) => c.name === seg);
2194
+ if (!leaf) return void 0;
2195
+ }
2196
+ if (i < path.length - 1 && typeof path[i + 1] === "string") {
2197
+ if (leaf?.resolver?.type !== "object") return void 0;
2198
+ children = await objectChildren(
2199
+ leaf.resolver,
2200
+ mergeInput(resolved, leaf.extraInput)
2201
+ );
2202
+ }
2203
+ }
2204
+ return leaf;
2205
+ }
2206
+ async function arrayInfoAt(ctx, path, resolved) {
2207
+ const leaf = await leafAt(ctx, path, resolved);
2208
+ const resolver = leaf?.resolver;
2209
+ if (resolver?.type !== "array") {
2210
+ throw new Error(`expected an array resolver at "${key(path)}"`);
2211
+ }
2212
+ return {
2213
+ min: resolver.minItems ?? 0,
2214
+ max: resolver.maxItems ?? Infinity,
2215
+ item: { ...arrayItem(resolver), name: String(path[path.length - 1]) }
2216
+ };
2217
+ }
2218
+ var AFFORDANCE = {
2219
+ choose: { action: "choose", description: "Pick one of the listed options" },
2220
+ custom: {
2221
+ action: "custom",
2222
+ description: "Provide a value directly",
2223
+ supply: "value"
2224
+ },
2225
+ search: {
2226
+ action: "search",
2227
+ description: "Filter the options by a search term",
2228
+ supply: "term"
2229
+ },
2230
+ more: { action: "more", description: "Load more options" },
2231
+ skip: { action: "skip", description: "Omit this optional parameter" },
2232
+ add: { action: "add", description: "Add another item" },
2233
+ done: { action: "done", description: "Finish the list" },
2234
+ retry: { action: "retry", description: "Retry loading the options" },
2235
+ cancel: { action: "cancel", description: "Cancel resolution" }
2236
+ };
2237
+ async function firstPage(result) {
2238
+ const page = await result;
2239
+ return {
2240
+ data: Array.isArray(page?.data) ? page.data : [],
2241
+ nextCursor: page?.nextCursor
2242
+ };
2243
+ }
2244
+ async function resolveContext(leaf, input) {
2245
+ return leaf.resolver?.getContext?.({
2246
+ input: mergeInput(input, leaf.extraInput)
2247
+ });
2248
+ }
2249
+ async function fetchListing(leaf, input, opts = {}) {
2250
+ const page = await firstPage(
2251
+ leaf.resolver?.listItems?.({
2252
+ input: mergeInput(input, leaf.extraInput),
2253
+ context: opts.context,
2254
+ search: opts.search,
2255
+ cursor: opts.cursor
2256
+ })
2257
+ );
2258
+ return {
2259
+ items: [...opts.priorItems ?? [], ...page.data],
2260
+ cursor: page.nextCursor,
2261
+ search: opts.search,
2262
+ exhausted: page.nextCursor == null
2263
+ };
2264
+ }
2265
+ function selectActions(leaf, listing, multiple) {
2266
+ const actions = multiple ? [AFFORDANCE.choose] : [AFFORDANCE.choose, AFFORDANCE.custom];
2267
+ if (leaf.resolver?.inputType === "search") actions.push(AFFORDANCE.search);
2268
+ if (listing.cursor) actions.push(AFFORDANCE.more);
2269
+ if (!leaf.required) actions.push(AFFORDANCE.skip);
2270
+ return actions;
2271
+ }
2272
+ function selectQuestion(leaf, input, listing, context) {
2273
+ const config = leaf.resolver?.prompt?.({
2274
+ items: listing.items,
2275
+ input: mergeInput(input, leaf.extraInput),
2276
+ context
2277
+ });
2278
+ const multiple = config?.type === "checkbox";
2279
+ return {
2280
+ type: "select",
2281
+ message: config?.message ?? `Select ${leaf.name}:`,
2282
+ choices: (config?.choices ?? []).map(toChoice),
2283
+ ...multiple ? { multiple: true } : {},
2284
+ ...config?.notes?.length ? { notes: config.notes } : {},
2285
+ actions: selectActions(leaf, listing, multiple)
2286
+ };
2287
+ }
2288
+ function toControllerError(error) {
2289
+ if (error instanceof Error) {
2290
+ const code = error.code;
2291
+ return {
2292
+ name: error.name,
2293
+ message: error.message,
2294
+ ...typeof code === "string" ? { code } : {}
2295
+ };
2296
+ }
2297
+ return { name: "Error", message: String(error) };
2298
+ }
2299
+ function failedResult(state, name, error) {
2300
+ return {
2301
+ state,
2302
+ result: {
2303
+ status: "failed",
2304
+ error: toControllerError(error),
2305
+ question: {
2306
+ type: "select",
2307
+ message: `Could not load options for ${name}.`,
2308
+ choices: [],
2309
+ actions: [AFFORDANCE.retry, AFFORDANCE.cancel]
2310
+ }
2311
+ }
2312
+ };
2313
+ }
2314
+ async function buildQuestion(leaf, input) {
2315
+ const optional = !leaf.required;
2316
+ const resolver = leaf.resolver;
2317
+ if (resolver?.listItems) {
2318
+ const context = await resolveContext(leaf, input);
2319
+ const listing = await fetchListing(leaf, input, { context });
2320
+ return {
2321
+ question: selectQuestion(leaf, input, listing, context),
2322
+ listing
2323
+ };
2324
+ }
2325
+ if (leaf.staticChoices) {
2326
+ const actions2 = [AFFORDANCE.choose];
2327
+ if (optional) actions2.push(AFFORDANCE.skip);
2328
+ return {
2329
+ question: {
2330
+ type: "select",
2331
+ message: `Select ${leaf.name}:`,
2332
+ choices: leaf.staticChoices,
2333
+ actions: actions2
2334
+ }
2335
+ };
2336
+ }
2337
+ const inputType = resolver?.inputType && resolver.inputType !== "search" ? resolver.inputType : "text";
2338
+ const actions = [AFFORDANCE.custom];
2339
+ if (optional) actions.push(AFFORDANCE.skip);
2340
+ return {
2341
+ question: {
2342
+ type: "input",
2343
+ message: `Enter ${leaf.name}:`,
2344
+ inputType,
2345
+ placeholder: resolver?.placeholder,
2346
+ actions
2347
+ }
2348
+ };
2349
+ }
2350
+ function finalize(ctx, resolved) {
2351
+ if (!ctx.schema) return { status: "done", value: resolved };
2352
+ const parsed = ctx.schema.safeParse(resolved);
2353
+ if (parsed.success) {
2354
+ return { status: "done", value: parsed.data };
2355
+ }
2356
+ const issues = parsed.error.issues.map((i) => ({
2357
+ parameter: i.path.map(String).join(".") || void 0,
2358
+ message: i.message
2359
+ }));
2360
+ return { status: "invalid", issues };
2361
+ }
2362
+ function collectionQuestion(t) {
2363
+ const actions = [AFFORDANCE.add];
2364
+ if (t.count >= t.min) actions.push(AFFORDANCE.done);
2365
+ return {
2366
+ type: "collection",
2367
+ message: `Add another ${t.path[t.path.length - 1]}? (${t.count} so far)`,
2368
+ count: t.count,
2369
+ min: t.min,
2370
+ // An unbounded array's max is Infinity, which JSON.stringify turns to null;
2371
+ // omit it so the question round-trips across the wall as plain data.
2372
+ ...Number.isFinite(t.max) ? { max: t.max } : {},
2373
+ actions
2374
+ };
2375
+ }
2376
+ async function findInArray(ctx, state, path) {
2377
+ if (isSettled(state, path)) return null;
2378
+ if (getAtPath(state.resolved, path) == null)
2379
+ setAtPath(state.resolved, path, []);
2380
+ if (!state.interactive) {
2381
+ settle(state, path);
2382
+ return null;
2383
+ }
2384
+ const { min, max, item } = await arrayInfoAt(ctx, path, state.resolved);
2385
+ const items = getAtPath(state.resolved, path);
2386
+ const len = items.length;
2387
+ const itemType = item.resolver?.type;
2388
+ if (len > 0 && (itemType === "object" || itemType === "array")) {
2389
+ const inner = await findNext(ctx, state, [...path, len - 1]);
2390
+ if (inner) return inner;
2391
+ }
2392
+ if (len < min) return descendItem(ctx, state, path, len, item);
2393
+ if (len < max) return { kind: "array", path, count: len, min, max };
2394
+ settle(state, path);
2395
+ return null;
2396
+ }
2397
+ function seedItemSlot(state, itemPath, item) {
2398
+ const type = item.resolver?.type;
2399
+ if (type === "object") {
2400
+ setAtPath(state.resolved, itemPath, {});
2401
+ return "object";
2402
+ }
2403
+ if (type === "array") {
2404
+ setAtPath(state.resolved, itemPath, []);
2405
+ return "array";
2406
+ }
2407
+ return "leaf";
2408
+ }
2409
+ async function descendItem(ctx, state, arrayPath, index, item) {
2410
+ const itemPath = [...arrayPath, index];
2411
+ const kind = seedItemSlot(state, itemPath, item);
2412
+ if (kind === "object") return findNext(ctx, state, itemPath);
2413
+ if (kind === "array") return findInArray(ctx, state, itemPath);
2414
+ return { kind: "leaf", path: itemPath, leaf: item };
2415
+ }
2416
+ async function findNext(ctx, state, path = []) {
2417
+ const container = getAtPath(state.resolved, path) ?? {};
2418
+ for (const leaf of await childrenAt(ctx, path, state.resolved)) {
2419
+ const childPath = [...path, leaf.name];
2420
+ if (!leaf.requires.every((r) => container[r] !== void 0)) continue;
2421
+ if (leaf.resolver?.type === "object") {
2422
+ if (getAtPath(state.resolved, childPath) == null)
2423
+ setAtPath(state.resolved, childPath, {});
2424
+ const inner = await findNext(ctx, state, childPath);
2425
+ if (inner) return inner;
2426
+ continue;
2427
+ }
2428
+ if (leaf.resolver?.type === "array") {
2429
+ const inner = await findInArray(ctx, state, childPath);
2430
+ if (inner) return inner;
2431
+ continue;
2432
+ }
2433
+ if (container[leaf.name] !== void 0 || isSettled(state, childPath))
2434
+ continue;
2435
+ return { kind: "leaf", path: childPath, leaf };
2436
+ }
2437
+ return null;
2438
+ }
2439
+ async function askLeaf(state, path, leaf, opts = {}) {
2440
+ state.current = path;
2441
+ try {
2442
+ const { question, listing } = await buildQuestion(leaf, state.resolved);
2443
+ state.listing = listing;
2444
+ return {
2445
+ state,
2446
+ result: {
2447
+ status: "ask",
2448
+ question,
2449
+ ...opts.error ? { error: opts.error } : {}
2450
+ }
2451
+ };
2452
+ } catch (error) {
2453
+ state.listing = { items: [], exhausted: false };
2454
+ return failedResult(state, leaf.name, error);
2455
+ }
2456
+ }
2457
+ async function advance(ctx, state) {
2458
+ for (; ; ) {
2459
+ const target = await findNext(ctx, state);
2460
+ if (!target) {
2461
+ delete state.current;
2462
+ delete state.listing;
2463
+ return { state, result: finalize(ctx, state.resolved) };
2464
+ }
2465
+ if (target.kind === "array") {
2466
+ state.current = target.path;
2467
+ delete state.listing;
2468
+ return {
2469
+ state,
2470
+ result: { status: "ask", question: collectionQuestion(target) }
2471
+ };
2472
+ }
2473
+ const { path, leaf } = target;
2474
+ const auto = await leaf.resolver?.tryResolveWithoutPrompt?.({
2475
+ input: mergeInput(state.resolved, leaf.extraInput)
2476
+ });
2477
+ if (auto) {
2478
+ if (auto.resolvedValue !== void 0)
2479
+ setAtPath(state.resolved, path, auto.resolvedValue);
2480
+ settle(state, path);
2481
+ continue;
2482
+ }
2483
+ if (!state.interactive) {
2484
+ if (!leaf.required) {
2485
+ settle(state, path);
2486
+ continue;
2487
+ }
2488
+ } else if (!leaf.required && !leaf.resolver) {
2489
+ settle(state, path);
2490
+ continue;
2491
+ }
2492
+ return askLeaf(state, path, leaf);
2493
+ }
2494
+ }
2495
+ async function start(ctx, input = {}, interactive = true) {
2496
+ const resolved = {};
2497
+ for (const spec of ctx.parameters) {
2498
+ if (spec.resolver?.type === "constant")
2499
+ resolved[spec.name] = spec.resolver.value;
2500
+ }
2501
+ Object.assign(resolved, input);
2502
+ return advance(ctx, {
2503
+ method: ctx.method,
2504
+ resolved,
2505
+ settled: [],
2506
+ interactive
2507
+ });
2508
+ }
2509
+ async function step(ctx, prior, action) {
2510
+ const state = clone(prior);
2511
+ if (action.type === "cancel") {
2512
+ delete state.current;
2513
+ delete state.listing;
2514
+ return { state, result: { status: "cancelled" } };
2515
+ }
2516
+ const path = state.current;
2517
+ if (!path) throw new Error("step called with no outstanding question");
2518
+ const leaf = await leafAt(ctx, path, state.resolved);
2519
+ if (leaf && (action.type === "search" || action.type === "more" || action.type === "retry")) {
2520
+ return refine(ctx, state, leaf, path, action);
2521
+ }
2522
+ if (action.type === "add" || action.type === "done") {
2523
+ delete state.current;
2524
+ delete state.listing;
2525
+ if (action.type === "done") {
2526
+ settle(state, path);
2527
+ return advance(ctx, state);
2528
+ }
2529
+ const items = getAtPath(state.resolved, path) ?? [];
2530
+ const { item } = await arrayInfoAt(ctx, path, state.resolved);
2531
+ const itemPath = [...path, items.length];
2532
+ if (seedItemSlot(state, itemPath, item) === "leaf")
2533
+ return askLeaf(state, itemPath, item);
2534
+ return advance(ctx, state);
2535
+ }
2536
+ switch (action.type) {
2537
+ case "choose":
2538
+ case "custom": {
2539
+ if (leaf) {
2540
+ const error = await validationError(leaf, action.value, state);
2541
+ if (error) return askLeaf(state, path, leaf, { error });
2542
+ }
2543
+ setAtPath(
2544
+ state.resolved,
2545
+ path,
2546
+ leaf ? coerce(leaf, action.value) : action.value
2547
+ );
2548
+ break;
2549
+ }
2550
+ case "skip":
2551
+ settle(state, path);
2552
+ break;
2553
+ default:
2554
+ throw new Error(`action "${action.type}" is not supported here`);
2555
+ }
2556
+ delete state.current;
2557
+ delete state.listing;
2558
+ return advance(ctx, state);
2559
+ }
2560
+ async function refine(ctx, state, leaf, path, action) {
2561
+ const attempt = action.type === "search" ? { search: action.term, cursor: void 0, priorItems: [] } : {
2562
+ search: state.listing?.search,
2563
+ cursor: state.listing?.cursor,
2564
+ priorItems: state.listing?.items ?? []
2565
+ };
2566
+ try {
2567
+ if (action.type === "search") {
2568
+ const exact = await leaf.resolver?.tryResolveFromSearch?.({
2569
+ input: mergeInput(state.resolved, leaf.extraInput),
2570
+ search: action.term
2571
+ });
2572
+ if (exact) {
2573
+ setAtPath(state.resolved, path, coerce(leaf, exact.resolvedValue));
2574
+ delete state.current;
2575
+ delete state.listing;
2576
+ return advance(ctx, state);
2577
+ }
2578
+ }
2579
+ const context = await resolveContext(leaf, state.resolved);
2580
+ state.listing = await fetchListing(leaf, state.resolved, {
2581
+ ...attempt,
2582
+ context
2583
+ });
2584
+ return {
2585
+ state,
2586
+ result: {
2587
+ status: "ask",
2588
+ question: selectQuestion(leaf, state.resolved, state.listing, context)
2589
+ }
2590
+ };
2591
+ } catch (error) {
2592
+ state.listing = {
2593
+ items: attempt.priorItems,
2594
+ search: attempt.search,
2595
+ cursor: attempt.cursor,
2596
+ exhausted: false
2597
+ };
2598
+ return failedResult(state, leaf.name, error);
2599
+ }
2600
+ }
2601
+ function toJsonSchema(schema) {
2602
+ if (!schema) return void 0;
2603
+ try {
2604
+ return zod.z.toJSONSchema(schema);
2605
+ } catch {
2606
+ return void 0;
2607
+ }
2608
+ }
2609
+ function projectSummary(entry) {
2610
+ return {
2611
+ name: entry.name,
2612
+ ...entry.description ? { description: entry.description } : {},
2613
+ ...entry.categories?.length ? { categories: entry.categories } : {}
2614
+ };
2615
+ }
2616
+ function projectMethod(entry) {
2617
+ const inputProperties = toJsonSchema(entry.inputSchema)?.properties;
2618
+ const parameters = {};
2619
+ for (const spec of planParameters(entry).parameters) {
2620
+ parameters[spec.name] = {
2621
+ required: spec.required,
2622
+ dynamic: Boolean(spec.resolver?.listItems),
2623
+ ...spec.resolver?.inputType === "search" ? { searchable: true } : {},
2624
+ ...inputProperties?.[spec.name] ? { schema: inputProperties[spec.name] } : {},
2625
+ ...spec.staticChoices ? { choices: spec.staticChoices } : {},
2626
+ ...spec.requires.length ? { requireParameters: spec.requires } : {}
2627
+ };
2628
+ }
2629
+ const output = toJsonSchema(entry.outputSchema);
2630
+ return {
2631
+ name: entry.name,
2632
+ ...entry.description ? { description: entry.description } : {},
2633
+ ...entry.categories?.length ? { categories: entry.categories } : {},
2634
+ parameters,
2635
+ ...entry.positional?.length ? { positional: entry.positional } : {},
2636
+ ...output ? { output } : {}
2637
+ };
2638
+ }
2639
+ function createController(sdk) {
2640
+ function entryFor(method) {
2641
+ const entry = sdk.getRegistry().functions.find((f) => f.name === method);
2642
+ if (!entry) throw new Error(`unknown method "${method}"`);
2643
+ return entry;
2644
+ }
2645
+ function contextFor(method) {
2646
+ const entry = entryFor(method);
2647
+ return {
2648
+ method,
2649
+ schema: entry.inputSchema,
2650
+ parameters: planParameters(entry).parameters
2651
+ };
2652
+ }
2653
+ const start2 = ({ method, input, interactive }) => start(contextFor(method), input, interactive);
2654
+ const step2 = ({ state, action }) => step(contextFor(state.method), state, action);
2655
+ const resolve2 = async ({
2656
+ method,
2657
+ input,
2658
+ answer,
2659
+ interactive
2660
+ }) => {
2661
+ const ctx = contextFor(method);
2662
+ let { state, result } = await start(ctx, input, interactive);
2663
+ while (result.status === "ask" || result.status === "failed") {
2664
+ const action = await answer({ state, result });
2665
+ ({ state, result } = await step(ctx, state, action));
2666
+ }
2667
+ if (result.status === "done") return result.value;
2668
+ if (result.status === "cancelled") {
2669
+ throw new CoreCancelledSignal(`resolution cancelled for "${method}"`);
2670
+ }
2671
+ const detail = result.issues.map((i) => i.parameter ? `${i.parameter}: ${i.message}` : i.message).join("; ");
2672
+ throw new Error(`invalid input for "${method}": ${detail}`);
2673
+ };
2674
+ const listMethods = () => ({
2675
+ data: sdk.getRegistry().functions.map(projectSummary)
2676
+ });
2677
+ const getMethod = ({ method }) => ({
2678
+ data: projectMethod(entryFor(method))
2679
+ });
2680
+ const listChoices = async ({
2681
+ method,
2682
+ parameter,
2683
+ input = {},
2684
+ search,
2685
+ cursor
2686
+ }) => {
2687
+ const spec = contextFor(method).parameters.find(
2688
+ (p) => p.name === parameter
2689
+ );
2690
+ if (!spec?.resolver?.listItems) return { data: [] };
2691
+ const context = await spec.resolver.getContext?.({ input });
2692
+ const page = await firstPage(
2693
+ spec.resolver.listItems({ input, context, search, cursor })
2694
+ );
2695
+ const config = spec.resolver.prompt?.({ items: page.data, input, context });
2696
+ const data = (config?.choices ?? []).map(toChoice);
2697
+ return { data, nextCursor: page.nextCursor };
2698
+ };
2699
+ return { resolve: resolve2, start: start2, step: step2, listMethods, getMethod, listChoices };
2700
+ }
1861
2701
  function createCorePlugin(options) {
1862
2702
  return () => ({
1863
2703
  context: {
@@ -2825,8 +3665,8 @@ function normalizeHeaders(optionsHeaders) {
2825
3665
  return headers;
2826
3666
  }
2827
3667
  const headerEntries = optionsHeaders instanceof Headers ? Array.from(optionsHeaders.entries()) : Array.isArray(optionsHeaders) ? optionsHeaders : Object.entries(optionsHeaders);
2828
- for (const [key, value] of headerEntries) {
2829
- headers[key] = value;
3668
+ for (const [key2, value] of headerEntries) {
3669
+ headers[key2] = value;
2830
3670
  }
2831
3671
  return headers;
2832
3672
  }
@@ -3116,28 +3956,28 @@ function censorHeaders(headers) {
3116
3956
  if (!headers) return headers;
3117
3957
  const headersObj = new Headers(headers);
3118
3958
  const authKeys = ["authorization", "x-api-key"];
3119
- for (const [key, value] of headersObj.entries()) {
3120
- if (authKeys.some((authKey) => key.toLowerCase() === authKey)) {
3959
+ for (const [key2, value] of headersObj.entries()) {
3960
+ if (authKeys.some((authKey) => key2.toLowerCase() === authKey)) {
3121
3961
  const spaceIndex = value.indexOf(" ");
3122
3962
  if (spaceIndex > 0 && spaceIndex < value.length - 1) {
3123
3963
  const prefix = value.substring(0, spaceIndex + 1);
3124
3964
  const token = value.substring(spaceIndex + 1);
3125
3965
  if (token.length > 12) {
3126
- const start = token.substring(0, 4);
3966
+ const start2 = token.substring(0, 4);
3127
3967
  const end = token.substring(token.length - 4);
3128
- headersObj.set(key, `${prefix}${start}...${end}`);
3968
+ headersObj.set(key2, `${prefix}${start2}...${end}`);
3129
3969
  } else {
3130
3970
  const firstChar = token.charAt(0);
3131
- headersObj.set(key, `${prefix}${firstChar}...`);
3971
+ headersObj.set(key2, `${prefix}${firstChar}...`);
3132
3972
  }
3133
3973
  } else {
3134
3974
  if (value.length > 12) {
3135
- const start = value.substring(0, 4);
3975
+ const start2 = value.substring(0, 4);
3136
3976
  const end = value.substring(value.length - 4);
3137
- headersObj.set(key, `${start}...${end}`);
3977
+ headersObj.set(key2, `${start2}...${end}`);
3138
3978
  } else {
3139
3979
  const firstChar = value.charAt(0);
3140
- headersObj.set(key, `${firstChar}...`);
3980
+ headersObj.set(key2, `${firstChar}...`);
3141
3981
  }
3142
3982
  }
3143
3983
  }
@@ -3706,21 +4546,21 @@ function getClientIdFromCredentials(credentials) {
3706
4546
  function createMemoryCache() {
3707
4547
  const store = /* @__PURE__ */ new Map();
3708
4548
  return {
3709
- async get(key) {
3710
- const entry = store.get(key);
4549
+ async get(key2) {
4550
+ const entry = store.get(key2);
3711
4551
  if (!entry) return void 0;
3712
4552
  if (entry.expiresAt !== void 0 && entry.expiresAt <= Date.now()) {
3713
- store.delete(key);
4553
+ store.delete(key2);
3714
4554
  return void 0;
3715
4555
  }
3716
4556
  return { value: entry.value, expiresAt: entry.expiresAt };
3717
4557
  },
3718
- async set(key, value, options) {
4558
+ async set(key2, value, options) {
3719
4559
  const expiresAt = options?.ttl ? Date.now() + options.ttl * 1e3 : void 0;
3720
- store.set(key, { value, expiresAt });
4560
+ store.set(key2, { value, expiresAt });
3721
4561
  },
3722
- async delete(key) {
3723
- store.delete(key);
4562
+ async delete(key2) {
4563
+ store.delete(key2);
3724
4564
  }
3725
4565
  };
3726
4566
  }
@@ -4211,14 +5051,14 @@ function createSseParserStream() {
4211
5051
  transform(chunk, controller) {
4212
5052
  buffer += chunk;
4213
5053
  const newline = /\r\n|\r|\n/g;
4214
- let start = 0;
5054
+ let start2 = 0;
4215
5055
  let match;
4216
5056
  while ((match = newline.exec(buffer)) !== null) {
4217
5057
  if (match[0] === "\r" && match.index === buffer.length - 1) break;
4218
- processLine(buffer.slice(start, match.index), controller);
4219
- start = match.index + match[0].length;
5058
+ processLine(buffer.slice(start2, match.index), controller);
5059
+ start2 = match.index + match[0].length;
4220
5060
  }
4221
- buffer = buffer.slice(start);
5061
+ buffer = buffer.slice(start2);
4222
5062
  },
4223
5063
  flush(controller) {
4224
5064
  if (buffer.endsWith("\r")) {
@@ -4376,7 +5216,7 @@ function parseDeprecationDate(value) {
4376
5216
  }
4377
5217
 
4378
5218
  // src/sdk-version.ts
4379
- var SDK_VERSION = (typeof process !== "undefined" && process.env ? "0.79.0" : void 0) || "unknown";
5219
+ var SDK_VERSION = (typeof process !== "undefined" && process.env ? "0.80.1" : void 0) || "unknown";
4380
5220
 
4381
5221
  // src/utils/open-url.ts
4382
5222
  var nodePrefix = "node:";
@@ -4622,11 +5462,11 @@ var ZapierApiClient = class {
4622
5462
  );
4623
5463
  const inputHeaders = new Headers(init?.headers ?? {});
4624
5464
  const mergedHeaders = new Headers();
4625
- builtHeaders.forEach((value, key) => {
4626
- mergedHeaders.set(key, value);
5465
+ builtHeaders.forEach((value, key2) => {
5466
+ mergedHeaders.set(key2, value);
4627
5467
  });
4628
- inputHeaders.forEach((value, key) => {
4629
- mergedHeaders.set(key, value);
5468
+ inputHeaders.forEach((value, key2) => {
5469
+ mergedHeaders.set(key2, value);
4630
5470
  });
4631
5471
  this.applyTelemetryHeaders(mergedHeaders);
4632
5472
  let retries = 0;
@@ -5151,8 +5991,8 @@ var ZapierApiClient = class {
5151
5991
  canSendDeprecationMessaging
5152
5992
  } = this.applyPathConfiguration(path);
5153
5993
  if (searchParams) {
5154
- Object.entries(searchParams).forEach(([key, value]) => {
5155
- url.searchParams.set(key, value);
5994
+ Object.entries(searchParams).forEach(([key2, value]) => {
5995
+ url.searchParams.set(key2, value);
5156
5996
  });
5157
5997
  }
5158
5998
  return {
@@ -5662,7 +6502,8 @@ function getOrCreateApiClient(config) {
5662
6502
  token,
5663
6503
  api: providedApi,
5664
6504
  debug = false,
5665
- fetch: customFetch
6505
+ fetch: customFetch,
6506
+ callerPackage
5666
6507
  } = config;
5667
6508
  if (providedApi) {
5668
6509
  return providedApi;
@@ -5672,7 +6513,8 @@ function getOrCreateApiClient(config) {
5672
6513
  credentials,
5673
6514
  token,
5674
6515
  debug,
5675
- fetch: customFetch
6516
+ fetch: customFetch,
6517
+ callerPackage
5676
6518
  });
5677
6519
  }
5678
6520
 
@@ -5803,7 +6645,7 @@ var listAppsPlugin = definePlugin(
5803
6645
  locator
5804
6646
  ];
5805
6647
  }
5806
- const duplicatedLookupAppKeys = Object.keys(implementationNameToLocator).filter((key) => implementationNameToLocator[key].length > 1).map((key) => implementationNameToLocator[key]).flat().map((locator) => locator.lookupAppKey);
6648
+ const duplicatedLookupAppKeys = Object.keys(implementationNameToLocator).filter((key2) => implementationNameToLocator[key2].length > 1).map((key2) => implementationNameToLocator[key2]).flat().map((locator) => locator.lookupAppKey);
5807
6649
  if (duplicatedLookupAppKeys.length > 0) {
5808
6650
  throw new Error(
5809
6651
  `Duplicate lookup app keys found: ${duplicatedLookupAppKeys.join(", ")}`
@@ -6296,7 +7138,7 @@ function formatRecordError(fieldId, err) {
6296
7138
  function formatResponseError(err) {
6297
7139
  const message = err.human_title || err.title || "Unknown error";
6298
7140
  if (err.meta && Object.keys(err.meta).length > 0) {
6299
- const metaParts = Object.entries(err.meta).map(([key, val]) => `${key}: ${JSON.stringify(val)}`).join(", ");
7141
+ const metaParts = Object.entries(err.meta).map(([key2, val]) => `${key2}: ${JSON.stringify(val)}`).join(", ");
6300
7142
  return `${message} (${metaParts})`;
6301
7143
  }
6302
7144
  return message;
@@ -6331,8 +7173,8 @@ var TrashSchema = zod.z.enum(["exclude", "include", "only"]).optional().describe
6331
7173
  'Control soft-deleted item visibility. "exclude" (default) returns active items only, "include" returns both active and soft-deleted, "only" returns soft-deleted items only.'
6332
7174
  );
6333
7175
  var FIELD_ID_PATTERN = /^f\d+$/;
6334
- function isFieldId(key) {
6335
- return FIELD_ID_PATTERN.test(key);
7176
+ function isFieldId(key2) {
7177
+ return FIELD_ID_PATTERN.test(key2);
6336
7178
  }
6337
7179
  var NESTED_COMPONENTS = {
6338
7180
  labeled_string: /* @__PURE__ */ new Set(["value"]),
@@ -6370,7 +7212,7 @@ async function resolveFieldKeys({
6370
7212
  fieldKeys
6371
7213
  }) {
6372
7214
  const allAreIds = fieldKeys.every(
6373
- (key) => typeof key === "number" || /^(f?\d+)$/.test(key)
7215
+ (key2) => typeof key2 === "number" || /^(f?\d+)$/.test(key2)
6374
7216
  );
6375
7217
  if (allAreIds) {
6376
7218
  return fieldKeys.map(toNumericFieldId);
@@ -6379,13 +7221,13 @@ async function resolveFieldKeys({
6379
7221
  if (!mapping) {
6380
7222
  return fieldKeys.map(toNumericFieldId);
6381
7223
  }
6382
- return fieldKeys.map((key) => {
6383
- if (typeof key === "number") return key;
6384
- if (FIELD_ID_PATTERN.test(key)) return toNumericFieldId(key);
6385
- const id = mapping.nameToId.get(key);
7224
+ return fieldKeys.map((key2) => {
7225
+ if (typeof key2 === "number") return key2;
7226
+ if (FIELD_ID_PATTERN.test(key2)) return toNumericFieldId(key2);
7227
+ const id = mapping.nameToId.get(key2);
6386
7228
  if (!id) {
6387
7229
  throw new ZapierValidationError(
6388
- `Unknown field name: "${key}". Use a valid field name or ID.`
7230
+ `Unknown field name: "${key2}". Use a valid field name or ID.`
6389
7231
  );
6390
7232
  }
6391
7233
  return toNumericFieldId(id);
@@ -6401,13 +7243,13 @@ async function createFieldKeyTranslator({
6401
7243
  translateInput(data) {
6402
7244
  if (!mapping) return data;
6403
7245
  const result = {};
6404
- for (const [key, value] of Object.entries(data)) {
6405
- if (FIELD_ID_PATTERN.test(key) && mapping.idToName.has(key)) {
6406
- result[key] = value;
6407
- } else if (mapping.nameToId.has(key)) {
6408
- result[mapping.nameToId.get(key)] = value;
7246
+ for (const [key2, value] of Object.entries(data)) {
7247
+ if (FIELD_ID_PATTERN.test(key2) && mapping.idToName.has(key2)) {
7248
+ result[key2] = value;
7249
+ } else if (mapping.nameToId.has(key2)) {
7250
+ result[mapping.nameToId.get(key2)] = value;
6409
7251
  } else {
6410
- result[key] = value;
7252
+ result[key2] = value;
6411
7253
  }
6412
7254
  }
6413
7255
  return result;
@@ -6415,29 +7257,29 @@ async function createFieldKeyTranslator({
6415
7257
  translateOutput(data) {
6416
7258
  if (!mapping) return data;
6417
7259
  const result = {};
6418
- for (const [key, value] of Object.entries(data)) {
6419
- if (mapping.idToName.has(key)) {
6420
- result[mapping.idToName.get(key)] = value;
7260
+ for (const [key2, value] of Object.entries(data)) {
7261
+ if (mapping.idToName.has(key2)) {
7262
+ result[mapping.idToName.get(key2)] = value;
6421
7263
  } else {
6422
- result[key] = value;
7264
+ result[key2] = value;
6423
7265
  }
6424
7266
  }
6425
7267
  return result;
6426
7268
  },
6427
- translateFieldKey(key) {
6428
- if (!mapping) return key;
6429
- if (FIELD_ID_PATTERN.test(key) && mapping.idToName.has(key)) {
6430
- const fieldType = mapping.idToType.get(key);
7269
+ translateFieldKey(key2) {
7270
+ if (!mapping) return key2;
7271
+ if (FIELD_ID_PATTERN.test(key2) && mapping.idToName.has(key2)) {
7272
+ const fieldType = mapping.idToType.get(key2);
6431
7273
  if (fieldType) {
6432
7274
  const components = NESTED_COMPONENTS[fieldType];
6433
7275
  if (components?.size === 1) {
6434
- return `${key}__${[...components][0]}`;
7276
+ return `${key2}__${[...components][0]}`;
6435
7277
  }
6436
7278
  }
6437
- return key;
7279
+ return key2;
6438
7280
  }
6439
- if (mapping.nameToId.has(key)) {
6440
- const fieldId = mapping.nameToId.get(key);
7281
+ if (mapping.nameToId.has(key2)) {
7282
+ const fieldId = mapping.nameToId.get(key2);
6441
7283
  const fieldType = mapping.idToType.get(fieldId);
6442
7284
  if (fieldType) {
6443
7285
  const components = NESTED_COMPONENTS[fieldType];
@@ -6447,10 +7289,10 @@ async function createFieldKeyTranslator({
6447
7289
  }
6448
7290
  return fieldId;
6449
7291
  }
6450
- const sepIndex = key.lastIndexOf("__");
7292
+ const sepIndex = key2.lastIndexOf("__");
6451
7293
  if (sepIndex > 0) {
6452
- const prefix = key.slice(0, sepIndex);
6453
- const component = key.slice(sepIndex + 2);
7294
+ const prefix = key2.slice(0, sepIndex);
7295
+ const component = key2.slice(sepIndex + 2);
6454
7296
  let fieldId;
6455
7297
  if (FIELD_ID_PATTERN.test(prefix) && mapping.idToName.has(prefix)) {
6456
7298
  fieldId = prefix;
@@ -6464,7 +7306,7 @@ async function createFieldKeyTranslator({
6464
7306
  }
6465
7307
  }
6466
7308
  }
6467
- return key;
7309
+ return key2;
6468
7310
  }
6469
7311
  };
6470
7312
  }
@@ -7381,9 +8223,9 @@ var RunActionSchemaDeprecated = zod.z.object({
7381
8223
  var RunActionInputSchema = zod.z.union([RunActionSchema, RunActionSchemaDeprecated]).describe(RunActionDescription);
7382
8224
 
7383
8225
  // src/formatters/actionResult.ts
7384
- function getStringProperty(obj, key) {
7385
- if (typeof obj === "object" && obj !== null && key in obj) {
7386
- const value = obj[key];
8226
+ function getStringProperty(obj, key2) {
8227
+ if (typeof obj === "object" && obj !== null && key2 in obj) {
8228
+ const value = obj[key2];
7387
8229
  return typeof value === "string" ? value : void 0;
7388
8230
  }
7389
8231
  return void 0;
@@ -7470,13 +8312,13 @@ var runActionPlugin = definePlugin(
7470
8312
  let oldestKey;
7471
8313
  let oldestExpiry = Infinity;
7472
8314
  let evictedAny = false;
7473
- for (const [key, entry] of runActionContextCache) {
8315
+ for (const [key2, entry] of runActionContextCache) {
7474
8316
  if (now >= entry.expiresAt) {
7475
- runActionContextCache.delete(key);
8317
+ runActionContextCache.delete(key2);
7476
8318
  evictedAny = true;
7477
8319
  } else if (entry.expiresAt < oldestExpiry) {
7478
8320
  oldestExpiry = entry.expiresAt;
7479
- oldestKey = key;
8321
+ oldestKey = key2;
7480
8322
  }
7481
8323
  }
7482
8324
  if (!evictedAny && oldestKey) {
@@ -8104,36 +8946,36 @@ var createConnectionPlugin = definePlugin(
8104
8946
  sdk: inner,
8105
8947
  options
8106
8948
  }) => {
8107
- const { data: start } = await inner.getConnectionStartUrl({
8949
+ const { data: start2 } = await inner.getConnectionStartUrl({
8108
8950
  app: options.app
8109
8951
  });
8110
- setMethodMetadata({ selectedApi: start.app });
8952
+ setMethodMetadata({ selectedApi: start2.app });
8111
8953
  console.error(
8112
8954
  `
8113
8955
  Open this URL to complete the connection:
8114
- ${start.url}
8956
+ ${start2.url}
8115
8957
  `
8116
8958
  );
8117
8959
  const shouldOpen = options.browser === "always" || options.browser === "auto" && shouldOpenBrowser();
8118
8960
  if (shouldOpen) {
8119
8961
  try {
8120
- await open_url_default(start.url);
8962
+ await open_url_default(start2.url);
8121
8963
  } catch {
8122
8964
  }
8123
8965
  }
8124
8966
  const { data: fresh } = await inner.waitForNewConnection({
8125
- app: start.app,
8967
+ app: start2.app,
8126
8968
  // Server-stamped mint time: measured on the same clock as a
8127
8969
  // connection's `date`, so the freshness check is immune to
8128
8970
  // client/server clock skew.
8129
- startedAt: start.startedAt,
8971
+ startedAt: start2.startedAt,
8130
8972
  timeoutMs: options.timeoutMs,
8131
8973
  pollIntervalMs: options.pollIntervalMs
8132
8974
  });
8133
8975
  return {
8134
8976
  data: CreateConnectionItemSchema.parse({
8135
8977
  id: fresh.id,
8136
- app: start.app,
8978
+ app: start2.app,
8137
8979
  title: fresh.title ?? null
8138
8980
  })
8139
8981
  };
@@ -10132,9 +10974,9 @@ function findManifestEntry({
10132
10974
  return [slug, manifest.apps[slug]];
10133
10975
  }
10134
10976
  }
10135
- for (const [key, entry] of Object.entries(manifest.apps)) {
10977
+ for (const [key2, entry] of Object.entries(manifest.apps)) {
10136
10978
  if (entry.implementationName === appKeyWithoutVersion) {
10137
- return [key, entry];
10979
+ return [key2, entry];
10138
10980
  }
10139
10981
  }
10140
10982
  return null;
@@ -10391,21 +11233,21 @@ var manifestPlugin = definePlugin(
10391
11233
  );
10392
11234
 
10393
11235
  // src/plugins/capabilities/index.ts
10394
- function toDescription(key) {
10395
- const words = key.replace(/^can/, "").replace(/([A-Z])/g, " $1").trim().toLowerCase();
11236
+ function toDescription(key2) {
11237
+ const words = key2.replace(/^can/, "").replace(/([A-Z])/g, " $1").trim().toLowerCase();
10396
11238
  return `To ${words}`;
10397
11239
  }
10398
- function toEnvVar(key) {
10399
- return "ZAPIER_" + key.replace(/([A-Z])/g, "_$1").toUpperCase();
11240
+ function toEnvVar(key2) {
11241
+ return "ZAPIER_" + key2.replace(/([A-Z])/g, "_$1").toUpperCase();
10400
11242
  }
10401
- function toCliFlag(key) {
10402
- return "--" + key.replace(/([A-Z])/g, "-$1").toLowerCase();
11243
+ function toCliFlag(key2) {
11244
+ return "--" + key2.replace(/([A-Z])/g, "-$1").toLowerCase();
10403
11245
  }
10404
- function buildCapabilityMessage(key) {
11246
+ function buildCapabilityMessage(key2) {
10405
11247
  return [
10406
- `${toDescription(key)}, use ${toCliFlag(key)} in the CLI,`,
10407
- `set ${key}: true in SDK options or .zapierrc,`,
10408
- `or set ${toEnvVar(key)}=true.`
11248
+ `${toDescription(key2)}, use ${toCliFlag(key2)} in the CLI,`,
11249
+ `set ${key2}: true in SDK options or .zapierrc,`,
11250
+ `or set ${toEnvVar(key2)}=true.`
10409
11251
  ].join(" ");
10410
11252
  }
10411
11253
  var GATED_FLAGS = [
@@ -10413,8 +11255,8 @@ var GATED_FLAGS = [
10413
11255
  "canIncludeSharedTables",
10414
11256
  "canDeleteTables"
10415
11257
  ];
10416
- function isEnabledByEnv(key) {
10417
- const value = globalThis.process?.env?.[toEnvVar(key)];
11258
+ function isEnabledByEnv(key2) {
11259
+ const value = globalThis.process?.env?.[toEnvVar(key2)];
10418
11260
  if (value === void 0) return void 0;
10419
11261
  if (value === "true" || value === "1") return true;
10420
11262
  if (value === "false" || value === "0") return false;
@@ -10437,17 +11279,17 @@ var capabilitiesPlugin = definePlugin(
10437
11279
  }
10438
11280
  return {
10439
11281
  context: {
10440
- checkCapability: async (key) => {
11282
+ checkCapability: async (key2) => {
10441
11283
  const flags = await resolveFlags();
10442
- if (flags[key]) return;
11284
+ if (flags[key2]) return;
10443
11285
  throw new ZapierConfigurationError(
10444
- buildCapabilityMessage(key) + " (If you are an AI agent, you MUST NOT retry. Ask the user if they want to enable this.)",
10445
- { configType: key }
11286
+ buildCapabilityMessage(key2) + " (If you are an AI agent, you MUST NOT retry. Ask the user if they want to enable this.)",
11287
+ { configType: key2 }
10446
11288
  );
10447
11289
  },
10448
- hasCapability: async (key) => {
11290
+ hasCapability: async (key2) => {
10449
11291
  const flags = await resolveFlags();
10450
- return flags[key];
11292
+ return flags[key2];
10451
11293
  }
10452
11294
  }
10453
11295
  };
@@ -10605,8 +11447,8 @@ function getOsInfo() {
10605
11447
  function getPlatformVersions() {
10606
11448
  const versions = {};
10607
11449
  if (typeof globalThis.process?.versions === "object") {
10608
- for (const [key, value] of Object.entries(globalThis.process.versions)) {
10609
- versions[key] = value || null;
11450
+ for (const [key2, value] of Object.entries(globalThis.process.versions)) {
11451
+ versions[key2] = value || null;
10610
11452
  }
10611
11453
  }
10612
11454
  return versions;
@@ -10848,9 +11690,9 @@ async function emitWithTimeout(transport, subject, event) {
10848
11690
  }
10849
11691
  function mergeUserContext(event, userContext) {
10850
11692
  const merged = { ...event };
10851
- for (const [key, value] of Object.entries(userContext)) {
10852
- if (merged[key] == null) {
10853
- merged[key] = value;
11693
+ for (const [key2, value] of Object.entries(userContext)) {
11694
+ if (merged[key2] == null) {
11695
+ merged[key2] = value;
10854
11696
  }
10855
11697
  }
10856
11698
  return merged;
@@ -12123,9 +12965,9 @@ function createWaiter() {
12123
12965
  }
12124
12966
  };
12125
12967
  }
12126
- function addToMap(m, key, value) {
12127
- const existing = m.get(key) ?? [];
12128
- m.set(key, [...existing, value]);
12968
+ function addToMap(m, key2, value) {
12969
+ const existing = m.get(key2) ?? [];
12970
+ m.set(key2, [...existing, value]);
12129
12971
  }
12130
12972
  async function runBatchedDrainPipeline(options) {
12131
12973
  const {
@@ -12928,14 +13770,14 @@ function toWireConnections(connections) {
12928
13770
  }
12929
13771
  function toWireAppVersions(appVersions) {
12930
13772
  const wire = {};
12931
- for (const [key, entry] of Object.entries(appVersions)) {
13773
+ for (const [key2, entry] of Object.entries(appVersions)) {
12932
13774
  const implementationName = entry.implementationName ?? entry.implementation_name;
12933
13775
  if (implementationName === void 0) {
12934
13776
  throw new ZapierValidationError(
12935
- `appVersions["${key}"] is missing implementationName`
13777
+ `appVersions["${key2}"] is missing implementationName`
12936
13778
  );
12937
13779
  }
12938
- wire[key] = {
13780
+ wire[key2] = {
12939
13781
  implementation_name: implementationName,
12940
13782
  ...entry.version !== void 0 ? { version: entry.version } : {}
12941
13783
  };
@@ -14357,13 +15199,16 @@ exports.BaseSdkOptionsSchema = BaseSdkOptionsSchema;
14357
15199
  exports.CONTEXT_CACHE_MAX_SIZE = CONTEXT_CACHE_MAX_SIZE;
14358
15200
  exports.CONTEXT_CACHE_TTL_MS = CONTEXT_CACHE_TTL_MS;
14359
15201
  exports.CORE_ERROR_SYMBOL = CORE_ERROR_SYMBOL;
15202
+ exports.CORE_SIGNAL_SYMBOL = CORE_SIGNAL_SYMBOL;
14360
15203
  exports.ClientCredentialsObjectSchema = ClientCredentialsObjectSchema;
14361
15204
  exports.ConnectionEntrySchema = ConnectionEntrySchema;
14362
15205
  exports.ConnectionIdPropertySchema = ConnectionIdPropertySchema;
14363
15206
  exports.ConnectionPropertySchema = ConnectionPropertySchema;
14364
15207
  exports.ConnectionsMapSchema = ConnectionsMapSchema;
14365
15208
  exports.ConnectionsPropertySchema = ConnectionsPropertySchema;
15209
+ exports.CoreCancelledSignal = CoreCancelledSignal;
14366
15210
  exports.CoreErrorCode = CoreErrorCode;
15211
+ exports.CoreSignal = CoreSignal;
14367
15212
  exports.CredentialsFunctionSchema = CredentialsFunctionSchema;
14368
15213
  exports.CredentialsObjectSchema = CredentialsObjectSchema;
14369
15214
  exports.CredentialsSchema = CredentialsSchema;
@@ -14443,6 +15288,7 @@ exports.connectionIdResolver = connectionIdResolver;
14443
15288
  exports.connectionsPlugin = connectionsPlugin;
14444
15289
  exports.createBaseEvent = createBaseEvent;
14445
15290
  exports.createClientCredentialsPlugin = createClientCredentialsPlugin;
15291
+ exports.createController = createController;
14446
15292
  exports.createCorePlugin = createCorePlugin;
14447
15293
  exports.createFunction = createFunction;
14448
15294
  exports.createMemoryCache = createMemoryCache;
@@ -14466,6 +15312,7 @@ exports.defineLegacyMerge = defineLegacyMerge;
14466
15312
  exports.defineMethod = defineMethod;
14467
15313
  exports.definePlugin = definePlugin;
14468
15314
  exports.defineProperty = defineProperty;
15315
+ exports.defineResolver = defineResolver;
14469
15316
  exports.deleteClientCredentialsPlugin = deleteClientCredentialsPlugin;
14470
15317
  exports.deleteTableFieldsPlugin = deleteTableFieldsPlugin;
14471
15318
  exports.deleteTablePlugin = deleteTablePlugin;
@@ -14518,6 +15365,7 @@ exports.isCi = isCi;
14518
15365
  exports.isCliLoginAvailable = isCliLoginAvailable;
14519
15366
  exports.isClientCredentials = isClientCredentials;
14520
15367
  exports.isCoreError = isCoreError;
15368
+ exports.isCoreSignal = isCoreSignal;
14521
15369
  exports.isCredentialsFunction = isCredentialsFunction;
14522
15370
  exports.isCredentialsObject = isCredentialsObject;
14523
15371
  exports.isPermanentHttpError = isPermanentHttpError;