@zapier/zapier-sdk 0.77.2 → 0.79.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.
@@ -52,6 +52,7 @@ function canonicalInputSchema(schema) {
52
52
  function buildRegistry({
53
53
  sdk,
54
54
  meta,
55
+ formatters,
55
56
  packageFilter
56
57
  }) {
57
58
  const definitionsByKey = /* @__PURE__ */ new Map();
@@ -92,7 +93,7 @@ function buildRegistry({
92
93
  (c) => typeof c === "string" ? c : c.key
93
94
  ),
94
95
  resolvers: m.resolvers,
95
- formatter: m.formatter,
96
+ formatter: formatters?.[key],
96
97
  experimental: m.experimental,
97
98
  packages: m.packages,
98
99
  confirm: m.confirm ?? (m.type === "delete" ? "delete" : void 0),
@@ -518,8 +519,8 @@ function normalizeError(error, adaptError) {
518
519
  );
519
520
  }
520
521
  function createFunction(coreFn, options) {
521
- const { sdk, schema } = options;
522
- const functionName = coreFn.name;
522
+ const { sdk, schema, name } = options;
523
+ const functionName = name || coreFn.name;
523
524
  const namedFunctions = {
524
525
  [functionName]: async function(callOptions) {
525
526
  return runInMethodScope(async () => {
@@ -694,9 +695,6 @@ function createPaginatedFunction(coreFn, options) {
694
695
  };
695
696
  return namedFunctions[functionName];
696
697
  }
697
- function definePlugin(fn) {
698
- return fn;
699
- }
700
698
  function createPluginMethod(sdk, config) {
701
699
  const { name, inputSchema, handler, ...metaFields } = config;
702
700
  const namedHandlers = {
@@ -765,8 +763,7 @@ function splitPluginContribution(result) {
765
763
  }
766
764
  var RESERVED_ROOT_KEYS = /* @__PURE__ */ new Set([
767
765
  "context",
768
- "getRegistry",
769
- "addPlugin"
766
+ "getRegistry"
770
767
  ]);
771
768
  function hasOwn(obj, key) {
772
769
  return Object.prototype.hasOwnProperty.call(obj, key);
@@ -780,15 +777,28 @@ function setOwn(target, key, value) {
780
777
  });
781
778
  }
782
779
  function checkCollisions(target, source, kind, callerLabel, override) {
780
+ if (kind === "root key") {
781
+ checkRootKeyCollisions(target, Object.keys(source), override, callerLabel);
782
+ return;
783
+ }
783
784
  for (const key of Object.keys(source)) {
784
- if (kind === "root key" && RESERVED_ROOT_KEYS.has(key)) {
785
+ if (!override && hasOwn(target, key)) {
786
+ throw new Error(
787
+ `${callerLabel}: duplicate ${kind} "${key}". If the override is intentional, pass { override: true } in the options.`
788
+ );
789
+ }
790
+ }
791
+ }
792
+ function checkRootKeyCollisions(target, keys, override, callerLabel) {
793
+ for (const key of keys) {
794
+ if (RESERVED_ROOT_KEYS.has(key)) {
785
795
  throw new Error(
786
796
  `${callerLabel}: plugin attempted to register reserved root key "${key}". The SDK uses this key for its own accessor; rename the plugin's method.`
787
797
  );
788
798
  }
789
799
  if (!override && hasOwn(target, key)) {
790
800
  throw new Error(
791
- `${callerLabel}: duplicate ${kind} "${key}". If the override is intentional, pass { override: true } in the options.`
801
+ `${callerLabel}: duplicate root key "${key}". If the override is intentional, pass { override: true } in the options.`
792
802
  );
793
803
  }
794
804
  }
@@ -839,7 +849,7 @@ function mergeContribution(propertiesTarget, contextTarget, contribution, option
839
849
  function applyPluginContribution(acc, contribution, options) {
840
850
  mergeContribution(acc.view, acc.context, contribution, options);
841
851
  }
842
- function wrapAsSdk(properties, context, opts) {
852
+ function wrapAsSdk(properties, context) {
843
853
  const sdk = {
844
854
  ...properties,
845
855
  context,
@@ -851,9 +861,6 @@ function wrapAsSdk(properties, context, opts) {
851
861
  });
852
862
  }
853
863
  };
854
- if (opts?.addPlugin !== void 0) {
855
- sdk.addPlugin = opts.addPlugin;
856
- }
857
864
  return sdk;
858
865
  }
859
866
  function wrapAccumulatorAsSdk(acc) {
@@ -872,126 +879,92 @@ function applyPluginToSdk(sdk, plugin, options) {
872
879
  callerLabel: "addPlugin",
873
880
  override: options.override === true
874
881
  });
882
+ return contribution;
875
883
  }
876
- function buildStackAccumulator(head, callerLabel) {
877
- const ordered = [];
884
+ function resolveStack(head) {
885
+ const entries = [];
878
886
  let node = head;
879
887
  while (node) {
880
- ordered.unshift(node);
888
+ entries.unshift({ apply: node.entry, override: node.override });
881
889
  node = node.prev;
882
890
  }
883
- const acc = createPluginAccumulator();
884
- for (const { plugin, override } of ordered) {
885
- const contribution = splitPluginContribution(
886
- plugin(acc.view)
887
- );
888
- applyPluginContribution(acc, contribution, { callerLabel, override });
889
- }
890
- return acc;
891
- }
892
- function addPlugin(sdk, plugin, options) {
893
- applyPluginToSdk(
894
- sdk,
895
- plugin,
896
- options ?? {}
897
- );
891
+ return entries;
892
+ }
893
+ function composeStackHooks(hooks) {
894
+ let composed = {};
895
+ for (const h of hooks) composed = buildHooks(composed, h);
896
+ return composed;
897
+ }
898
+ function collapseStackEntries(entries, callerLabel) {
899
+ return (outerSdk) => {
900
+ const { context: outerContext, ...outerProperties } = outerSdk ?? {};
901
+ const viewAcc = createPluginAccumulator(outerProperties, outerContext);
902
+ const contribsAcc = createPluginAccumulator();
903
+ const hooks = [];
904
+ for (const { apply, override } of entries) {
905
+ const contribution = splitPluginContribution(
906
+ apply(viewAcc.view)
907
+ );
908
+ const hookless = { ...contribution, hooks: {} };
909
+ applyPluginContribution(viewAcc, hookless, { callerLabel, override });
910
+ applyPluginContribution(contribsAcc, hookless, { callerLabel, override });
911
+ hooks.push(contribution.hooks);
912
+ }
913
+ const stackHooks = composeStackHooks(hooks);
914
+ viewAcc.context.hooks = buildHooks(viewAcc.context.hooks, stackHooks);
915
+ contribsAcc.context.hooks = stackHooks;
916
+ const { context: _ignored, ...contributedRoot } = contribsAcc.view;
917
+ return {
918
+ ...contributedRoot,
919
+ context: contribsAcc.context
920
+ };
921
+ };
898
922
  }
899
- function buildSdk(properties, context) {
900
- const addPlugin2 = (plugin, options) => {
901
- logDeprecation(
902
- "sdk.addPlugin(plugin) (the chain-style extension) is deprecated. Build the SDK in one pass with createPluginStack().use(...).toSdk() instead \u2014 each .toSdk() produces fresh plugin closures and avoids the closure-sharing semantics that caused this to be deprecated."
903
- );
923
+ function buildStackAccumulator(head, callerLabel) {
924
+ const entries = resolveStack(head);
925
+ const acc = createPluginAccumulator();
926
+ const hooks = [];
927
+ for (const { apply, override } of entries) {
904
928
  const contribution = splitPluginContribution(
905
- plugin({ ...properties, context })
929
+ apply(acc.view)
906
930
  );
907
- const mergedProperties = { ...properties };
908
- const mergedContext = {
909
- ...context,
910
- meta: { ...context.meta },
911
- hooks: { ...context.hooks }
912
- };
913
- mergeContribution(mergedProperties, mergedContext, contribution, {
914
- callerLabel: "addPlugin",
915
- override: options?.override === true
916
- });
917
- return buildSdk(
918
- mergedProperties,
919
- mergedContext
931
+ applyPluginContribution(
932
+ acc,
933
+ { ...contribution, hooks: {} },
934
+ { callerLabel, override }
920
935
  );
921
- };
922
- return wrapAsSdk(properties, context, { addPlugin: addPlugin2 });
923
- }
924
- function withDeprecatedAddPlugin(sdk) {
925
- const initialProperties = {};
926
- for (const key of Object.keys(sdk)) {
927
- if (key === "context" || key === "getRegistry" || key === "addPlugin") {
928
- continue;
929
- }
930
- initialProperties[key] = sdk[key];
936
+ hooks.push(contribution.hooks);
931
937
  }
932
- const initialContext = sdk.context;
933
- return buildSdk(
934
- initialProperties,
935
- initialContext
936
- );
938
+ acc.context.hooks = composeStackHooks(hooks);
939
+ return acc;
937
940
  }
938
941
  function composePlugins(...plugins) {
939
942
  logDeprecation(
940
- "composePlugins(...) is deprecated. Use createPluginStack().use(a).use(b).use(c).toPlugin() instead. The stack carries the same collision-detection and hook-composition behavior, supports per-step { override: true } for intentional duplicates, and progressively narrows types so dependency mistakes surface at the specific .use call."
941
- );
942
- let stack = buildPluginStack(
943
- null,
944
- "composePlugins"
943
+ "composePlugins(...) is deprecated. Use createPluginStack().use(a).use(b).use(c).toPlugin({ name }) instead. The stack carries the same collision-detection and hook-composition behavior and supports per-step { override: true } for intentional duplicates."
945
944
  );
945
+ let head = null;
946
946
  for (const plugin of plugins) {
947
- stack = stack.use(plugin);
947
+ head = { entry: plugin, override: false, prev: head };
948
948
  }
949
- return stack.toPlugin();
949
+ const entries = resolveStack(head);
950
+ return collapseStackEntries(entries, "composePlugins");
950
951
  }
951
952
  function createPluginStack() {
952
953
  return buildPluginStack(null, "createPluginStack");
953
954
  }
954
955
  function buildPluginStack(head, callerLabel) {
955
- return {
956
+ const stack = {
956
957
  use(plugin, options) {
957
958
  const next = {
958
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
959
- plugin,
959
+ entry: plugin,
960
960
  override: options?.override === true,
961
961
  prev: head
962
962
  };
963
963
  return buildPluginStack(next, callerLabel);
964
964
  },
965
965
  toPlugin() {
966
- const ordered = [];
967
- let node = head;
968
- while (node) {
969
- ordered.unshift(node);
970
- node = node.prev;
971
- }
972
- return (outerSdk) => {
973
- const { context: outerContext, ...outerProperties } = outerSdk ?? {};
974
- const viewAcc = createPluginAccumulator(outerProperties, outerContext);
975
- const contribsAcc = createPluginAccumulator();
976
- for (const { plugin: subPlugin, override } of ordered) {
977
- const contribution = splitPluginContribution(
978
- subPlugin(viewAcc.view)
979
- );
980
- applyPluginContribution(viewAcc, contribution, {
981
- callerLabel,
982
- override
983
- });
984
- applyPluginContribution(contribsAcc, contribution, {
985
- callerLabel,
986
- override
987
- });
988
- }
989
- const { context: _ignored, ...contributedRoot } = contribsAcc.view;
990
- return {
991
- ...contributedRoot,
992
- context: contribsAcc.context
993
- };
994
- };
966
+ const entries = resolveStack(head);
967
+ return collapseStackEntries(entries, callerLabel);
995
968
  },
996
969
  toSdk() {
997
970
  return wrapAccumulatorAsSdk(
@@ -999,6 +972,891 @@ function buildPluginStack(head, callerLabel) {
999
972
  );
1000
973
  }
1001
974
  };
975
+ return stack;
976
+ }
977
+ function parseId(id) {
978
+ const at = id.lastIndexOf("/");
979
+ return at === -1 ? { name: id, namespace: void 0 } : { name: id.slice(at + 1), namespace: id.slice(0, at) };
980
+ }
981
+ function makeId(name, namespace, kind = "leaf") {
982
+ validateName(name, kind);
983
+ if (namespace !== void 0) validateNamespace(namespace);
984
+ return namespace ? `${namespace}/${name}` : name;
985
+ }
986
+ var NAME_RE = /^[A-Za-z_$][A-Za-z0-9_$]*$/;
987
+ var SEGMENT_RE = /^@?[A-Za-z0-9._-]+$/;
988
+ function validateName(name, kind) {
989
+ if (name === "") throw new Error("Plugin name must not be empty.");
990
+ if (kind === "leaf") {
991
+ if (!NAME_RE.test(name)) {
992
+ throw new Error(
993
+ `Plugin name "${name}" must be a valid JS identifier (it is the binding name).`
994
+ );
995
+ }
996
+ } else if (!SEGMENT_RE.test(name)) {
997
+ throw new Error(
998
+ `Plugin name "${name}" must be package-like (letters, digits, ".", "_", "-", optional leading "@") with no "/".`
999
+ );
1000
+ }
1001
+ }
1002
+ function validateNamespace(namespace) {
1003
+ if (namespace === "") throw new Error("Plugin namespace must not be empty.");
1004
+ for (const segment of namespace.split("/")) {
1005
+ if (!SEGMENT_RE.test(segment)) {
1006
+ throw new Error(
1007
+ `Plugin namespace "${namespace}" is invalid: each "/"-separated segment must be package-like (letters, digits, ".", "_", "-", optional leading "@").`
1008
+ );
1009
+ }
1010
+ }
1011
+ }
1012
+ var LEAF_META_KEYS = [
1013
+ "description",
1014
+ "categories",
1015
+ "type",
1016
+ "itemType",
1017
+ "returnType",
1018
+ "outputSchema",
1019
+ "inputParameters",
1020
+ "packages",
1021
+ "experimental",
1022
+ "confirm",
1023
+ "deprecation",
1024
+ "aliases",
1025
+ "supportsJsonOutput"
1026
+ ];
1027
+ function normalizeImports(deps) {
1028
+ if (!deps) return { plugins: [], bindings: [] };
1029
+ const seen = /* @__PURE__ */ new Map();
1030
+ const bindings = [];
1031
+ const add = (binding, id) => {
1032
+ const priorId = seen.get(binding);
1033
+ if (priorId !== void 0 && priorId !== id) {
1034
+ throw new Error(
1035
+ `Import binding "${binding}" is declared twice. Two different plugins ("${priorId}" and "${id}") bind the same name; wrap one in selectExports to rename it.`
1036
+ );
1037
+ }
1038
+ if (priorId === void 0) {
1039
+ seen.set(binding, id);
1040
+ bindings.push({ binding, id });
1041
+ }
1042
+ };
1043
+ for (const plugin of deps) {
1044
+ if (plugin.pluginType === "aggregate") {
1045
+ for (const [binding, child] of Object.entries(plugin.exports)) {
1046
+ add(binding, child.id);
1047
+ }
1048
+ } else {
1049
+ add(plugin.name, plugin.id);
1050
+ }
1051
+ }
1052
+ return { plugins: deps, bindings };
1053
+ }
1054
+ function collectLeafMeta(config) {
1055
+ let meta;
1056
+ for (const key of LEAF_META_KEYS) {
1057
+ if (config[key] !== void 0) (meta ?? (meta = {}))[key] = config[key];
1058
+ }
1059
+ return meta;
1060
+ }
1061
+ function defineMethod(config) {
1062
+ const deps = normalizeImports(config.imports);
1063
+ return {
1064
+ pluginType: "method",
1065
+ name: config.name,
1066
+ namespace: config.namespace,
1067
+ id: makeId(config.name, config.namespace),
1068
+ imports: deps.plugins,
1069
+ importBindings: deps.bindings,
1070
+ inputSchema: config.inputSchema,
1071
+ meta: collectLeafMeta(config),
1072
+ resolvers: config.resolvers,
1073
+ formatter: config.formatter,
1074
+ output: config.output,
1075
+ positional: config.positional,
1076
+ setup: config.setup,
1077
+ run: config.run
1078
+ };
1079
+ }
1080
+ function defineFormatter(config) {
1081
+ const deps = normalizeImports(config.imports);
1082
+ return {
1083
+ imports: deps.plugins,
1084
+ importBindings: deps.bindings,
1085
+ fetchContext: config.fetchContext,
1086
+ format: config.format
1087
+ };
1088
+ }
1089
+ function declareMethod(config) {
1090
+ const { name, namespace } = parseId(config.id);
1091
+ const id = makeId(name, namespace);
1092
+ return {
1093
+ pluginType: "method",
1094
+ name,
1095
+ namespace,
1096
+ id,
1097
+ standIn: true,
1098
+ imports: [],
1099
+ importBindings: [],
1100
+ run: () => {
1101
+ throw new Error(
1102
+ `Plugin "${id}" is a stand-in (declareMethod) with no implementation. Register the real plugin under this id.`
1103
+ );
1104
+ }
1105
+ };
1106
+ }
1107
+ function defineProperty(config) {
1108
+ const deps = normalizeImports(config.imports);
1109
+ return {
1110
+ pluginType: "property",
1111
+ name: config.name,
1112
+ namespace: config.namespace,
1113
+ id: makeId(config.name, config.namespace),
1114
+ imports: deps.plugins,
1115
+ importBindings: deps.bindings,
1116
+ setup: config.setup,
1117
+ value: config.value,
1118
+ get: config.get,
1119
+ meta: collectLeafMeta(config)
1120
+ };
1121
+ }
1122
+ function declareProperty(config) {
1123
+ const { name, namespace } = parseId(config.id);
1124
+ return {
1125
+ pluginType: "property",
1126
+ name,
1127
+ namespace,
1128
+ id: makeId(name, namespace),
1129
+ standIn: true,
1130
+ imports: [],
1131
+ importBindings: []
1132
+ };
1133
+ }
1134
+ function definePlugin(fnOrConfig) {
1135
+ if (typeof fnOrConfig === "function") return fnOrConfig;
1136
+ const config = fnOrConfig;
1137
+ const deps = normalizeImports(config.imports);
1138
+ return {
1139
+ pluginType: "aggregate",
1140
+ name: config.name,
1141
+ namespace: config.namespace,
1142
+ id: makeId(config.name, config.namespace, "aggregate"),
1143
+ imports: deps.plugins,
1144
+ importBindings: deps.bindings,
1145
+ exports: normalizeExports(config.exports),
1146
+ middleware: config.middleware
1147
+ };
1148
+ }
1149
+ function normalizeExports(exports) {
1150
+ if (!exports) return {};
1151
+ const out = {};
1152
+ const add = (binding, leaf) => {
1153
+ const existing = out[binding];
1154
+ if (existing && existing.id !== leaf.id) {
1155
+ throw new Error(
1156
+ `definePlugin: duplicate export binding "${binding}". Two different plugins ("${existing.id}" and "${leaf.id}") bind the same name; wrap one in selectExports to rename it.`
1157
+ );
1158
+ }
1159
+ out[binding] = leaf;
1160
+ };
1161
+ for (const element of exports) {
1162
+ if (element.pluginType === "aggregate") {
1163
+ for (const [binding, child] of Object.entries(element.exports)) {
1164
+ add(binding, child);
1165
+ }
1166
+ } else {
1167
+ add(element.name, element);
1168
+ }
1169
+ }
1170
+ return out;
1171
+ }
1172
+ function fromFunctionPlugin(fn, config) {
1173
+ return {
1174
+ pluginType: "legacy",
1175
+ name: config.name,
1176
+ namespace: config.namespace,
1177
+ id: makeId(config.name, config.namespace, "aggregate"),
1178
+ imports: [],
1179
+ importBindings: [],
1180
+ run: fn
1181
+ };
1182
+ }
1183
+ function defineLegacyMerge(args) {
1184
+ return {
1185
+ pluginType: "legacy-merge",
1186
+ name: args.name,
1187
+ namespace: args.namespace,
1188
+ id: makeId(args.name, args.namespace, "aggregate"),
1189
+ legacy: fromFunctionPlugin(args.legacy, {
1190
+ name: args.name,
1191
+ namespace: args.namespace
1192
+ }),
1193
+ plugin: args.plugin
1194
+ };
1195
+ }
1196
+ function legacyGraphEntry(name, value, pluginMeta) {
1197
+ const { inputSchema, ...rest } = pluginMeta ?? {};
1198
+ const meta = Object.keys(rest).length ? rest : void 0;
1199
+ if (typeof value === "function") {
1200
+ return {
1201
+ pluginType: "method",
1202
+ name,
1203
+ value,
1204
+ chain: [],
1205
+ ...inputSchema ? { inputSchema } : {},
1206
+ ...meta ? { meta } : {}
1207
+ };
1208
+ }
1209
+ return { pluginType: "property", name, value, ...meta ? { meta } : {} };
1210
+ }
1211
+ function adaptLegacyFormatter(legacy, sdk) {
1212
+ const legacyFetch = legacy.fetch;
1213
+ return {
1214
+ fetchContext: legacyFetch ? async ({ items, input, context }) => {
1215
+ let ctx = context;
1216
+ for (const item of items) {
1217
+ ctx = await legacyFetch(sdk, input, item, ctx);
1218
+ }
1219
+ return ctx;
1220
+ } : void 0,
1221
+ format: ({ item, context }) => legacy.format(item, context)
1222
+ };
1223
+ }
1224
+ function normalizeFormatter(entry, sdk) {
1225
+ if (entry.pluginType !== "method") return void 0;
1226
+ if (entry.formatter) return entry.formatter;
1227
+ const legacy = entry.meta?.formatter;
1228
+ return legacy ? adaptLegacyFormatter(legacy, sdk) : void 0;
1229
+ }
1230
+ function pluginEntryMeta(entry) {
1231
+ if (entry.pluginType === "method" && entry.meta) {
1232
+ return entry.inputSchema ? { ...entry.meta, inputSchema: entry.inputSchema } : entry.meta;
1233
+ }
1234
+ if (entry.pluginType === "property" && entry.meta) return entry.meta;
1235
+ return void 0;
1236
+ }
1237
+ function buildSurfaceRegistry(context, packageFilter) {
1238
+ const meta = {};
1239
+ const surface = {};
1240
+ const entries = {};
1241
+ for (const [binding, id] of Object.entries(context.surface)) {
1242
+ const entry = context.plugins[id];
1243
+ if (!entry || entry.pluginType === "aggregate") continue;
1244
+ surface[binding] = entry.value;
1245
+ entries[binding] = entry;
1246
+ const m = pluginEntryMeta(entry);
1247
+ if (m) meta[binding] = m;
1248
+ }
1249
+ const formatters = {};
1250
+ for (const [binding, entry] of Object.entries(entries)) {
1251
+ const f = normalizeFormatter(entry, surface);
1252
+ if (f) formatters[binding] = f;
1253
+ }
1254
+ return buildRegistry({ sdk: surface, meta, formatters, packageFilter });
1255
+ }
1256
+ var dangerousContextPlugin = {
1257
+ pluginType: "property",
1258
+ name: "context",
1259
+ namespace: "kitcore",
1260
+ id: "kitcore/context",
1261
+ imports: [],
1262
+ importBindings: [],
1263
+ privileged: true
1264
+ };
1265
+ defineMethod({
1266
+ name: "getRegistry",
1267
+ namespace: "kitcore",
1268
+ imports: [dangerousContextPlugin],
1269
+ inputSchema: zod.z.object({ package: zod.z.string().optional() }).optional(),
1270
+ run: ({ imports, input }) => buildSurfaceRegistry(imports.context, input?.package)
1271
+ });
1272
+ function normalizeOutput(output) {
1273
+ if (output === void 0) return { type: "raw" };
1274
+ if (typeof output === "string") return { type: output };
1275
+ return output;
1276
+ }
1277
+ var CONTEXT = Symbol("kitcore.context");
1278
+ function getContext(sdk) {
1279
+ return sdk[CONTEXT];
1280
+ }
1281
+ function isResolverRef(value) {
1282
+ return "ref" in value;
1283
+ }
1284
+ function nestedResolvers(resolver) {
1285
+ const out = [];
1286
+ if (resolver.type === "object") {
1287
+ for (const field of Object.values(resolver.properties ?? {})) {
1288
+ if (!isResolverRef(field.resolver)) out.push(field.resolver);
1289
+ }
1290
+ out.push(...Object.values(resolver.definitions ?? {}));
1291
+ } else if (resolver.type === "array") {
1292
+ if (!isResolverRef(resolver.items)) out.push(resolver.items);
1293
+ out.push(...Object.values(resolver.definitions ?? {}));
1294
+ }
1295
+ return out;
1296
+ }
1297
+ function resolverImportEdges(resolver) {
1298
+ const out = [...resolver.imports];
1299
+ for (const child of nestedResolvers(resolver)) {
1300
+ out.push(...resolverImportEdges(child));
1301
+ }
1302
+ return out;
1303
+ }
1304
+ function methodAttachmentEdges(plugin) {
1305
+ const out = [];
1306
+ if (plugin.resolvers) {
1307
+ for (const resolver of Object.values(plugin.resolvers)) {
1308
+ out.push(...resolverImportEdges(resolver));
1309
+ }
1310
+ }
1311
+ if (plugin.formatter) out.push(...plugin.formatter.imports);
1312
+ return out;
1313
+ }
1314
+ function edgesOf(plugin) {
1315
+ if (plugin.pluginType === "aggregate") {
1316
+ return [...Object.values(plugin.exports), ...plugin.imports];
1317
+ }
1318
+ if (plugin.pluginType === "method") {
1319
+ return [...plugin.imports, ...methodAttachmentEdges(plugin)];
1320
+ }
1321
+ return plugin.imports;
1322
+ }
1323
+ function isStandIn(plugin) {
1324
+ return (plugin.pluginType === "method" || plugin.pluginType === "property" || plugin.pluginType === "aggregate") && plugin.standIn === true;
1325
+ }
1326
+ function topoOrder(descriptors) {
1327
+ const order = [];
1328
+ const visited = /* @__PURE__ */ new Set();
1329
+ const visit = (id) => {
1330
+ if (visited.has(id)) return;
1331
+ visited.add(id);
1332
+ const descriptor = descriptors.get(id);
1333
+ if (descriptor) for (const edge of edgesOf(descriptor)) visit(edge.id);
1334
+ order.push(id);
1335
+ };
1336
+ for (const id of descriptors.keys()) visit(id);
1337
+ return order;
1338
+ }
1339
+ function collectPlugins(root, materialized = /* @__PURE__ */ new Set()) {
1340
+ const byId = /* @__PURE__ */ new Map();
1341
+ const visit = (plugin) => {
1342
+ if (materialized.has(plugin.id)) return;
1343
+ const existing = byId.get(plugin.id);
1344
+ if (existing === plugin) return;
1345
+ if (existing) {
1346
+ const bothReal = !isStandIn(existing) && !isStandIn(plugin);
1347
+ if (bothReal) {
1348
+ throw new Error(
1349
+ `createSdk: duplicate plugin id "${plugin.id}". Two different plugins registered under the same id.`
1350
+ );
1351
+ }
1352
+ if (isStandIn(existing) && !isStandIn(plugin)) {
1353
+ byId.set(plugin.id, plugin);
1354
+ for (const edge of edgesOf(plugin)) visit(edge);
1355
+ }
1356
+ return;
1357
+ }
1358
+ byId.set(plugin.id, plugin);
1359
+ for (const edge of edgesOf(plugin)) visit(edge);
1360
+ };
1361
+ visit(root);
1362
+ for (const [id, plugin] of byId) {
1363
+ if (isStandIn(plugin)) {
1364
+ throw new Error(
1365
+ `createSdk: missing dependency "${id}". A plugin depends on it (via a stand-in) but no implementation was registered.`
1366
+ );
1367
+ }
1368
+ }
1369
+ return byId;
1370
+ }
1371
+ function bindValue(target, key, entry) {
1372
+ if (entry.pluginType === "property" && entry.getValue) {
1373
+ Object.defineProperty(target, key, {
1374
+ get: entry.getValue,
1375
+ enumerable: true,
1376
+ configurable: true
1377
+ });
1378
+ } else {
1379
+ Object.defineProperty(target, key, {
1380
+ value: entry.value,
1381
+ writable: true,
1382
+ enumerable: true,
1383
+ configurable: true
1384
+ });
1385
+ }
1386
+ }
1387
+ function buildSurface(context, ...maps) {
1388
+ const sdk = {};
1389
+ for (const map of maps) {
1390
+ Object.defineProperties(sdk, Object.getOwnPropertyDescriptors(map));
1391
+ }
1392
+ sdk.context = context;
1393
+ sdk[CONTEXT] = context;
1394
+ return sdk;
1395
+ }
1396
+ function buildImports(plugins, importBindings) {
1397
+ const imports = {};
1398
+ for (const { binding, id } of importBindings) {
1399
+ bindValue(imports, binding, plugins[id]);
1400
+ }
1401
+ return imports;
1402
+ }
1403
+ function mirrorLegacyRootKeys(context, rootKeys, meta) {
1404
+ const exports = {};
1405
+ for (const [name, value] of Object.entries(rootKeys)) {
1406
+ context.plugins[name] = legacyGraphEntry(name, value, meta[name]);
1407
+ exports[name] = value;
1408
+ }
1409
+ return exports;
1410
+ }
1411
+ function recordExportSurface(context, exports) {
1412
+ for (const [binding, child] of Object.entries(exports)) {
1413
+ context.surface[binding] = child.id;
1414
+ }
1415
+ }
1416
+ function materialize(descriptors, context) {
1417
+ const states = /* @__PURE__ */ new Map();
1418
+ runLegacyPass(descriptors, context);
1419
+ buildMethodEntries(descriptors, context, states);
1420
+ buildEagerArtifacts(descriptors, context, states);
1421
+ bindAttachments(descriptors, context);
1422
+ resolveAggregates(descriptors, context);
1423
+ assembleMiddleware(descriptors, context);
1424
+ return context.plugins;
1425
+ }
1426
+ function bindResolver(resolver, plugins) {
1427
+ switch (resolver.type) {
1428
+ case "static":
1429
+ return {
1430
+ type: "static",
1431
+ requireParams: resolver.requireParams,
1432
+ requireCapabilities: resolver.requireCapabilities,
1433
+ inputType: resolver.inputType,
1434
+ placeholder: resolver.placeholder
1435
+ };
1436
+ case "constant":
1437
+ return {
1438
+ type: "constant",
1439
+ value: resolver.value,
1440
+ requireParams: resolver.requireParams,
1441
+ requireCapabilities: resolver.requireCapabilities
1442
+ };
1443
+ case "info":
1444
+ return { type: "info", text: resolver.text };
1445
+ case "object": {
1446
+ const imports = buildImports(plugins, resolver.importBindings);
1447
+ const bound = {
1448
+ type: "object",
1449
+ requireParams: resolver.requireParams,
1450
+ requireCapabilities: resolver.requireCapabilities
1451
+ };
1452
+ if (resolver.properties)
1453
+ bound.properties = bindFields(resolver.properties, plugins);
1454
+ if (resolver.definitions)
1455
+ bound.definitions = bindDefinitions(resolver.definitions, plugins);
1456
+ const { fetch: fetch2 } = resolver;
1457
+ if (fetch2) bound.fetch = ({ params }) => fetch2({ imports, params });
1458
+ return bound;
1459
+ }
1460
+ case "array": {
1461
+ const bound = {
1462
+ type: "array",
1463
+ requireParams: resolver.requireParams,
1464
+ requireCapabilities: resolver.requireCapabilities,
1465
+ minItems: resolver.minItems,
1466
+ maxItems: resolver.maxItems,
1467
+ items: isResolverRef(resolver.items) ? resolver.items : bindResolver(resolver.items, plugins)
1468
+ };
1469
+ if (resolver.definitions)
1470
+ bound.definitions = bindDefinitions(resolver.definitions, plugins);
1471
+ return bound;
1472
+ }
1473
+ default: {
1474
+ const imports = buildImports(plugins, resolver.importBindings);
1475
+ const bound = {
1476
+ type: "dynamic",
1477
+ requireParams: resolver.requireParams,
1478
+ requireCapabilities: resolver.requireCapabilities,
1479
+ inputType: resolver.inputType,
1480
+ placeholder: resolver.placeholder,
1481
+ prompt: resolver.prompt
1482
+ };
1483
+ const { fetch: fetch2, tryResolveWithoutPrompt } = resolver;
1484
+ if (fetch2)
1485
+ bound.fetch = ({ params, search }) => fetch2({ imports, params, search });
1486
+ if (tryResolveWithoutPrompt) {
1487
+ bound.tryResolveWithoutPrompt = ({ params }) => tryResolveWithoutPrompt({ imports, params });
1488
+ }
1489
+ return bound;
1490
+ }
1491
+ }
1492
+ }
1493
+ function bindFields(fields, plugins) {
1494
+ const out = {};
1495
+ for (const [key, field] of Object.entries(fields)) {
1496
+ out[key] = {
1497
+ ...field,
1498
+ resolver: isResolverRef(field.resolver) ? field.resolver : bindResolver(field.resolver, plugins)
1499
+ };
1500
+ }
1501
+ return out;
1502
+ }
1503
+ function bindDefinitions(definitions, plugins) {
1504
+ const out = {};
1505
+ for (const [key, def] of Object.entries(definitions)) {
1506
+ out[key] = bindResolver(def, plugins);
1507
+ }
1508
+ return out;
1509
+ }
1510
+ function bindFormatter(formatter, plugins) {
1511
+ const imports = buildImports(plugins, formatter.importBindings);
1512
+ const bound = { format: formatter.format };
1513
+ const { fetchContext } = formatter;
1514
+ if (fetchContext)
1515
+ bound.fetchContext = ({ items, input, context }) => fetchContext({ imports, items, input, context });
1516
+ return bound;
1517
+ }
1518
+ function bindAttachments(descriptors, context) {
1519
+ const plugins = context.plugins;
1520
+ for (const [id, descriptor] of descriptors) {
1521
+ if (descriptor.pluginType !== "method") continue;
1522
+ const entry = plugins[id];
1523
+ if (!entry || entry.pluginType !== "method") continue;
1524
+ if (descriptor.resolvers) {
1525
+ const bound = {};
1526
+ for (const [param, resolver] of Object.entries(descriptor.resolvers)) {
1527
+ bound[param] = bindResolver(resolver, plugins);
1528
+ }
1529
+ entry.resolvers = bound;
1530
+ }
1531
+ if (descriptor.formatter) {
1532
+ entry.formatter = bindFormatter(descriptor.formatter, plugins);
1533
+ }
1534
+ }
1535
+ }
1536
+ function runLegacyPass(descriptors, context) {
1537
+ const plugins = context.plugins;
1538
+ const compatView = new Proxy(
1539
+ {},
1540
+ {
1541
+ get: (_target, prop) => {
1542
+ if (prop === "context") return context;
1543
+ const entry = plugins[prop];
1544
+ return entry?.value;
1545
+ }
1546
+ }
1547
+ );
1548
+ for (const id of topoOrder(descriptors)) {
1549
+ const descriptor = descriptors.get(id);
1550
+ if (!descriptor || descriptor.pluginType !== "legacy") continue;
1551
+ const { rootKeys, meta, hooks, contextRest } = splitPluginContribution(
1552
+ descriptor.run(compatView)
1553
+ );
1554
+ Object.assign(context.meta, meta);
1555
+ Object.assign(context, contextRest);
1556
+ context.hooks = buildHooks(context.hooks, hooks);
1557
+ const exports = mirrorLegacyRootKeys(context, rootKeys, meta);
1558
+ if (!("getRegistry" in exports)) {
1559
+ let getRegistry2 = function(options) {
1560
+ const sdk = this ?? exports;
1561
+ const meta2 = {};
1562
+ const formatters = {};
1563
+ for (const [binding, id2] of Object.entries(context.surface)) {
1564
+ const entry = context.plugins[id2];
1565
+ if (!entry || entry.pluginType === "aggregate") continue;
1566
+ const m = pluginEntryMeta(entry);
1567
+ if (m) meta2[binding] = m;
1568
+ const f = normalizeFormatter(entry, sdk);
1569
+ if (f) formatters[binding] = f;
1570
+ }
1571
+ Object.assign(meta2, context.meta);
1572
+ return buildRegistry({
1573
+ sdk,
1574
+ meta: meta2,
1575
+ formatters,
1576
+ packageFilter: options?.package
1577
+ });
1578
+ };
1579
+ exports.getRegistry = getRegistry2;
1580
+ plugins.getRegistry = {
1581
+ pluginType: "method",
1582
+ name: "getRegistry",
1583
+ value: getRegistry2,
1584
+ chain: []
1585
+ };
1586
+ }
1587
+ plugins[id] = { pluginType: "aggregate", name: descriptor.name, exports };
1588
+ }
1589
+ }
1590
+ function buildMethodEntries(descriptors, context, states) {
1591
+ const plugins = context.plugins;
1592
+ for (const [id, descriptor] of descriptors) {
1593
+ if (descriptor.pluginType !== "method") continue;
1594
+ const out = normalizeOutput(descriptor.output);
1595
+ const entry = {
1596
+ pluginType: "method",
1597
+ name: descriptor.name,
1598
+ chain: [],
1599
+ inputSchema: descriptor.inputSchema,
1600
+ // Derive the presentation type from the output mode when the author did
1601
+ // not set one; an explicit meta.type (e.g. "create") still wins.
1602
+ meta: out.type === "raw" || descriptor.meta?.type ? descriptor.meta : { ...descriptor.meta, type: out.type },
1603
+ output: out,
1604
+ // Replaced below; never called.
1605
+ value: () => void 0
1606
+ };
1607
+ const callRun = (input) => descriptor.run({
1608
+ imports: buildImports(plugins, descriptor.importBindings),
1609
+ state: states.get(id),
1610
+ input
1611
+ });
1612
+ const fold = (coreFn) => (input) => {
1613
+ let next = coreFn;
1614
+ for (const wrap of entry.chain) {
1615
+ const inner = next;
1616
+ next = (i) => wrap.run({
1617
+ imports: buildImports(plugins, wrap.owner.importBindings),
1618
+ next: inner,
1619
+ input: i
1620
+ });
1621
+ }
1622
+ return next(input);
1623
+ };
1624
+ const sdk = { context };
1625
+ if (out.type === "list") {
1626
+ entry.value = createPaginatedFunction(
1627
+ fold(callRun),
1628
+ {
1629
+ sdk,
1630
+ schema: descriptor.inputSchema,
1631
+ name: descriptor.name,
1632
+ defaultPageSize: out.defaultPageSize,
1633
+ adaptPage: out.adaptPage
1634
+ }
1635
+ );
1636
+ } else if (out.type === "item") {
1637
+ const itemCore = async (input) => ({
1638
+ data: await callRun(input)
1639
+ });
1640
+ entry.value = createFunction(
1641
+ fold(itemCore),
1642
+ { sdk, schema: descriptor.inputSchema, name: descriptor.name }
1643
+ );
1644
+ } else {
1645
+ entry.value = (rawInput) => {
1646
+ const input = descriptor.inputSchema ? descriptor.inputSchema.parse(rawInput) : rawInput;
1647
+ return fold(callRun)(input);
1648
+ };
1649
+ }
1650
+ if (descriptor.positional) {
1651
+ const names = descriptor.positional;
1652
+ const canonicalValue = entry.value;
1653
+ entry.value = (...args) => {
1654
+ const packed = {};
1655
+ names.forEach((name, i) => {
1656
+ if (i < args.length) packed[name] = args[i];
1657
+ });
1658
+ return canonicalValue(packed);
1659
+ };
1660
+ entry.positional = names;
1661
+ }
1662
+ plugins[id] = entry;
1663
+ }
1664
+ }
1665
+ function buildEagerArtifacts(descriptors, context, states) {
1666
+ const plugins = context.plugins;
1667
+ const built = /* @__PURE__ */ new Set();
1668
+ const building = /* @__PURE__ */ new Set();
1669
+ const ensureBuilt = (id) => {
1670
+ if (built.has(id)) return;
1671
+ const descriptor = descriptors.get(id);
1672
+ if (!descriptor || descriptor.pluginType === "aggregate" || descriptor.pluginType === "legacy") {
1673
+ built.add(id);
1674
+ return;
1675
+ }
1676
+ if (building.has(id)) {
1677
+ throw new Error(`createSdk: dependency cycle at "${id}".`);
1678
+ }
1679
+ building.add(id);
1680
+ for (const { id: depId } of descriptor.importBindings) ensureBuilt(depId);
1681
+ if (descriptor.pluginType === "method") {
1682
+ states.set(
1683
+ id,
1684
+ descriptor.setup ? descriptor.setup({
1685
+ imports: buildImports(plugins, descriptor.importBindings)
1686
+ }) : void 0
1687
+ );
1688
+ } else {
1689
+ states.set(
1690
+ id,
1691
+ descriptor.setup ? descriptor.setup({
1692
+ imports: buildImports(plugins, descriptor.importBindings)
1693
+ }) : void 0
1694
+ );
1695
+ if (descriptor.privileged) {
1696
+ plugins[id] = {
1697
+ pluginType: "property",
1698
+ name: descriptor.name,
1699
+ value: context,
1700
+ meta: descriptor.meta
1701
+ };
1702
+ } else if (descriptor.get) {
1703
+ const get = descriptor.get;
1704
+ const importBindings = descriptor.importBindings;
1705
+ plugins[id] = {
1706
+ pluginType: "property",
1707
+ name: descriptor.name,
1708
+ getValue: () => get({
1709
+ imports: buildImports(plugins, importBindings),
1710
+ state: states.get(id)
1711
+ }),
1712
+ meta: descriptor.meta
1713
+ };
1714
+ } else {
1715
+ plugins[id] = {
1716
+ pluginType: "property",
1717
+ name: descriptor.name,
1718
+ value: descriptor.value,
1719
+ meta: descriptor.meta
1720
+ };
1721
+ }
1722
+ }
1723
+ building.delete(id);
1724
+ built.add(id);
1725
+ };
1726
+ for (const id of descriptors.keys()) ensureBuilt(id);
1727
+ }
1728
+ function resolveAggregates(descriptors, context) {
1729
+ const plugins = context.plugins;
1730
+ for (const [id, descriptor] of descriptors) {
1731
+ if (descriptor.pluginType !== "aggregate") continue;
1732
+ const exports = {};
1733
+ for (const [binding, child] of Object.entries(descriptor.exports)) {
1734
+ bindValue(exports, binding, plugins[child.id]);
1735
+ }
1736
+ plugins[id] = { pluginType: "aggregate", name: descriptor.name, exports };
1737
+ }
1738
+ }
1739
+ function assembleMiddleware(descriptors, context) {
1740
+ const plugins = context.plugins;
1741
+ for (const id of topoOrder(descriptors)) {
1742
+ const descriptor = descriptors.get(id);
1743
+ if (!descriptor || descriptor.pluginType !== "aggregate" || !descriptor.middleware) {
1744
+ continue;
1745
+ }
1746
+ for (const [targetBinding, fn] of Object.entries(descriptor.middleware)) {
1747
+ const edge = descriptor.importBindings.find(
1748
+ (b) => b.binding === targetBinding
1749
+ );
1750
+ if (!edge) {
1751
+ throw new Error(
1752
+ `createSdk: middleware target "${targetBinding}" in plugin "${id}" is not a direct dependency. A middleware target must be a declared dependency of the wrapping plugin.`
1753
+ );
1754
+ }
1755
+ const target = plugins[edge.id];
1756
+ if (!target || target.pluginType !== "method") {
1757
+ throw new Error(
1758
+ `createSdk: middleware target "${targetBinding}" in plugin "${id}" does not resolve to a method.`
1759
+ );
1760
+ }
1761
+ if (target.output?.type === "list") {
1762
+ throw new Error(
1763
+ `createSdk: middleware target "${targetBinding}" in plugin "${id}" resolves to a list-output method, which does not support middleware yet.`
1764
+ );
1765
+ }
1766
+ target.chain.push({ run: fn, owner: descriptor });
1767
+ }
1768
+ }
1769
+ }
1770
+ function createSdk(root) {
1771
+ const context = { plugins: {}, meta: {}, hooks: {}, surface: {} };
1772
+ if (root.pluginType === "legacy-merge") {
1773
+ const { legacy, plugin } = root;
1774
+ const collectRoot = {
1775
+ pluginType: "aggregate",
1776
+ name: root.name,
1777
+ id: `${root.id}:merge`,
1778
+ imports: [legacy, plugin],
1779
+ importBindings: [],
1780
+ exports: {}
1781
+ };
1782
+ const plugins2 = materialize(collectPlugins(collectRoot), context);
1783
+ const legacyExports = plugins2[legacy.id].exports;
1784
+ let pluginSurface;
1785
+ if (plugin.pluginType === "aggregate") {
1786
+ pluginSurface = plugins2[plugin.id].exports;
1787
+ } else {
1788
+ pluginSurface = {};
1789
+ bindValue(pluginSurface, plugin.name, plugins2[plugin.id]);
1790
+ }
1791
+ for (const key of Object.keys(legacyExports)) context.surface[key] = key;
1792
+ if (plugin.pluginType === "aggregate") {
1793
+ recordExportSurface(context, plugin.exports);
1794
+ } else {
1795
+ context.surface[plugin.name] = plugin.id;
1796
+ }
1797
+ return buildSurface(context, legacyExports, pluginSurface);
1798
+ }
1799
+ const plugins = materialize(collectPlugins(root), context);
1800
+ if (root.pluginType === "method" || root.pluginType === "property") {
1801
+ context.surface[root.name] = root.id;
1802
+ const sdk = buildSurface(context);
1803
+ bindValue(sdk, root.name, plugins[root.id]);
1804
+ return sdk;
1805
+ }
1806
+ if (root.pluginType === "aggregate")
1807
+ recordExportSurface(context, root.exports);
1808
+ return buildSurface(context, plugins[root.id].exports);
1809
+ }
1810
+ function addModelPlugin(sdk, plugin, options = {}) {
1811
+ const override = options.override === true;
1812
+ const context = getContext(sdk);
1813
+ const surfaceKeys = plugin.pluginType === "aggregate" ? Object.keys(plugin.exports) : [plugin.name];
1814
+ checkRootKeyCollisions(sdk, surfaceKeys, override, "addPlugin");
1815
+ const materialized = new Set(Object.keys(context.plugins));
1816
+ if (override && materialized.has(plugin.id)) {
1817
+ throw new Error(
1818
+ `addPlugin: cannot override already-materialized plugin "${plugin.id}" on the incremental path. Rebuild the SDK with the replacement via createSdk.`
1819
+ );
1820
+ }
1821
+ materialize(collectPlugins(plugin, materialized), context);
1822
+ const entry = context.plugins[plugin.id];
1823
+ if (entry.pluginType === "aggregate") {
1824
+ Object.defineProperties(
1825
+ sdk,
1826
+ Object.getOwnPropertyDescriptors(entry.exports)
1827
+ );
1828
+ for (const [binding, child] of Object.entries(
1829
+ plugin.exports
1830
+ )) {
1831
+ context.surface[binding] = child.id;
1832
+ }
1833
+ } else {
1834
+ bindValue(sdk, plugin.name, entry);
1835
+ context.surface[plugin.name] = plugin.id;
1836
+ }
1837
+ }
1838
+ function addPlugin(sdk, plugin, options) {
1839
+ if (typeof plugin === "function") {
1840
+ const record = sdk;
1841
+ const contribution = applyPluginToSdk(
1842
+ record,
1843
+ plugin,
1844
+ options ?? {}
1845
+ );
1846
+ const context = record[CONTEXT];
1847
+ if (context) {
1848
+ mirrorLegacyRootKeys(context, contribution.rootKeys, contribution.meta);
1849
+ for (const name of Object.keys(contribution.rootKeys)) {
1850
+ context.surface[name] = name;
1851
+ }
1852
+ }
1853
+ return;
1854
+ }
1855
+ addModelPlugin(
1856
+ sdk,
1857
+ plugin,
1858
+ options ?? {}
1859
+ );
1002
1860
  }
1003
1861
  function createCorePlugin(options) {
1004
1862
  return () => ({
@@ -1282,6 +2140,66 @@ var zapierCorePlugin = createCorePlugin({
1282
2140
  function createZapierCoreStack() {
1283
2141
  return createPluginStack().use(zapierCorePlugin);
1284
2142
  }
2143
+ var GetProfileSchema = zod.z.object({}).optional().describe("Get current user's profile information");
2144
+ var UserProfileItemSchema = zod.z.object({
2145
+ id: zod.z.string(),
2146
+ first_name: zod.z.string(),
2147
+ last_name: zod.z.string(),
2148
+ full_name: zod.z.string(),
2149
+ email: zod.z.string(),
2150
+ email_confirmed: zod.z.boolean(),
2151
+ timezone: zod.z.string()
2152
+ });
2153
+
2154
+ // src/formatters/userProfile.ts
2155
+ var userProfileItemFormatter = defineFormatter({
2156
+ format: ({
2157
+ item
2158
+ }) => {
2159
+ const details = [];
2160
+ if (item.email) {
2161
+ details.push({ text: item.email, style: "dim" });
2162
+ }
2163
+ if (item.timezone) {
2164
+ details.push({
2165
+ text: `Timezone: ${item.timezone}`,
2166
+ style: "accent"
2167
+ });
2168
+ }
2169
+ return {
2170
+ title: item.full_name,
2171
+ hint: item.id,
2172
+ details
2173
+ };
2174
+ }
2175
+ });
2176
+
2177
+ // src/plugins/getProfile/index.ts
2178
+ var getProfilePlugin = defineMethod({
2179
+ name: "getProfile",
2180
+ imports: [dangerousContextPlugin],
2181
+ inputSchema: GetProfileSchema,
2182
+ output: "item",
2183
+ formatter: userProfileItemFormatter,
2184
+ categories: ["account"],
2185
+ itemType: "Profile",
2186
+ outputSchema: UserProfileItemSchema,
2187
+ run: async ({ imports }) => {
2188
+ const api = imports.context.api;
2189
+ const profile = await api.get("/zapier/api/v4/profile/", {
2190
+ authRequired: true
2191
+ });
2192
+ return {
2193
+ id: String(profile.public_id ?? profile.id),
2194
+ first_name: profile.first_name,
2195
+ last_name: profile.last_name,
2196
+ full_name: `${profile.first_name} ${profile.last_name}`,
2197
+ email: profile.email,
2198
+ email_confirmed: profile.email_confirmed,
2199
+ timezone: profile.timezone
2200
+ };
2201
+ }
2202
+ });
1285
2203
 
1286
2204
  // src/constants.ts
1287
2205
  var ZAPIER_BASE_URL = globalThis.process?.env?.ZAPIER_BASE_URL || "https://zapier.com";
@@ -3402,8 +4320,63 @@ function parseApprovalReviewStreamPayload(parsed, toolNames) {
3402
4320
  }
3403
4321
  }
3404
4322
 
4323
+ // src/api/deprecation.ts
4324
+ var DEPRECATION_MESSAGE_HEADER = "zapier-sdk-deprecation-message";
4325
+ var DEPRECATION_ID_HEADER = "zapier-sdk-deprecation-id";
4326
+ var DEPRECATION_NOTICE_EVENT = "api:deprecation_notice";
4327
+ var displayedNoticeIds = /* @__PURE__ */ new Set();
4328
+ function handleDeprecationNotice({
4329
+ response,
4330
+ canSendDeprecationMessaging,
4331
+ onEvent
4332
+ }) {
4333
+ try {
4334
+ sniffDeprecationNotice({ response, canSendDeprecationMessaging, onEvent });
4335
+ } catch {
4336
+ }
4337
+ }
4338
+ function sniffDeprecationNotice({
4339
+ response,
4340
+ canSendDeprecationMessaging,
4341
+ onEvent
4342
+ }) {
4343
+ if (!canSendDeprecationMessaging) return;
4344
+ const message = response.headers?.get(DEPRECATION_MESSAGE_HEADER);
4345
+ if (!message) return;
4346
+ const id = response.headers.get(DEPRECATION_ID_HEADER) ?? message;
4347
+ if (!displayedNoticeIds.has(id)) {
4348
+ displayedNoticeIds.add(id);
4349
+ console.warn(`[zapier-sdk] Deprecation: ${message}`);
4350
+ }
4351
+ if (onEvent) {
4352
+ const payload = { id, message };
4353
+ const deprecation = parseDeprecationDate(
4354
+ response.headers.get("deprecation")
4355
+ );
4356
+ if (deprecation !== void 0) payload.deprecation = deprecation;
4357
+ const maybePromise = onEvent({
4358
+ type: DEPRECATION_NOTICE_EVENT,
4359
+ payload: { ...payload },
4360
+ timestamp: Date.now()
4361
+ });
4362
+ if (isPromiseLike(maybePromise)) {
4363
+ void Promise.resolve(maybePromise).catch(() => {
4364
+ });
4365
+ }
4366
+ }
4367
+ }
4368
+ function isPromiseLike(value) {
4369
+ return (typeof value === "object" || typeof value === "function") && value !== null && "then" in value && typeof value.then === "function";
4370
+ }
4371
+ function parseDeprecationDate(value) {
4372
+ if (!value) return void 0;
4373
+ const match = /^@(-?\d+)$/.exec(value.trim());
4374
+ if (!match) return void 0;
4375
+ return Number(match[1]) * 1e3;
4376
+ }
4377
+
3405
4378
  // src/sdk-version.ts
3406
- var SDK_VERSION = (typeof process !== "undefined" && process.env ? "0.77.2" : void 0) || "unknown";
4379
+ var SDK_VERSION = (typeof process !== "undefined" && process.env ? "0.79.0" : void 0) || "unknown";
3407
4380
 
3408
4381
  // src/utils/open-url.ts
3409
4382
  var nodePrefix = "node:";
@@ -3515,6 +4488,30 @@ var PollApprovalResponseSchema = zod.z.object({
3515
4488
  reason: zod.z.string().optional()
3516
4489
  });
3517
4490
  var APPROVAL_MAX_POLLING_INTERVAL_MS = 5e3;
4491
+ function validateSdkPath(path) {
4492
+ if (!path.startsWith("/") || path.startsWith("//")) {
4493
+ throw new ZapierValidationError(
4494
+ `fetch expects a path starting with a single '/', got: ${path}`
4495
+ );
4496
+ }
4497
+ }
4498
+ function findPathConfigEntries({
4499
+ path,
4500
+ matchResolvedGatewayPath = false
4501
+ }) {
4502
+ const pathSegments = path.split("/").filter(Boolean);
4503
+ return Object.entries(pathConfig).filter(([configPath, config]) => {
4504
+ if (!matchResolvedGatewayPath) {
4505
+ return path === configPath || path.startsWith(`${configPath}/`);
4506
+ }
4507
+ const prefixSegments = (config.pathPrefix ?? configPath).split("/").filter(Boolean);
4508
+ return pathSegments.some(
4509
+ (_, startIndex) => prefixSegments.every(
4510
+ (segment, offset) => pathSegments[startIndex + offset] === segment
4511
+ )
4512
+ );
4513
+ }).map(([configPath, config]) => ({ configPath, config }));
4514
+ }
3518
4515
  function parseRateLimitHeaders(response) {
3519
4516
  const info = {};
3520
4517
  const retryAfter = response.headers.get("retry-after");
@@ -3559,8 +4556,18 @@ var pathConfig = {
3559
4556
  // e.g. /relay -> https://sdkapi.zapier.com/api/v0/sdk/relay/...
3560
4557
  "/relay": {
3561
4558
  authHeader: "X-Relay-Authorization",
3562
- pathPrefix: "/api/v0/sdk/relay"
4559
+ pathPrefix: "/api/v0/sdk/relay",
4560
+ omitDeprecationMessaging: true
4561
+ },
4562
+ // The concrete gateway form of the relay route. Callers that pass the
4563
+ // already-prefixed path reach the same third-party upstreams, so it must
4564
+ // classify as relay too; without this entry it would match nothing and
4565
+ // sniff deprecation headers off a relay response.
4566
+ "/api/v0/sdk/relay": {
4567
+ omitDeprecationMessaging: true
3563
4568
  },
4569
+ // Concrete sdkapi routes that do not live behind /api/v0/sdk/<service>.
4570
+ "/api/v0": {},
3564
4571
  // e.g. /zapier -> https://sdkapi.zapier.com/api/v0/sdk/zapier/...
3565
4572
  "/zapier": {
3566
4573
  authHeader: "Authorization",
@@ -3709,17 +4716,50 @@ var ZapierApiClient = class {
3709
4716
  * parallelism into the queue.
3710
4717
  */
3711
4718
  this.rawFetch = async (path, init) => {
3712
- if (!path.startsWith("/")) {
3713
- throw new ZapierValidationError(
3714
- `fetch expects a path starting with '/', got: ${path}`
3715
- );
3716
- }
4719
+ validateSdkPath(path);
3717
4720
  const { url, pathConfig: pathConfig2 } = this.buildUrl(path, init?.searchParams);
3718
4721
  return this.withSemaphore(
3719
4722
  { url, method: init?.method ?? "GET", signal: init?.signal },
3720
4723
  () => this.rawFetchUrl(url, init, pathConfig2)
3721
4724
  );
3722
4725
  };
4726
+ this.runApprovalFetchLoop = async ({
4727
+ path,
4728
+ init,
4729
+ maxRetries,
4730
+ approvalMode,
4731
+ approvalContext
4732
+ }) => {
4733
+ for (let attempt = 0; attempt <= maxRetries; attempt++) {
4734
+ const response = await this.rawFetch(path, init);
4735
+ if (response.status !== 403) {
4736
+ return { response };
4737
+ }
4738
+ const errorType = response.headers.get("x-zapier-error-type");
4739
+ if (errorType !== "approval_required") {
4740
+ return { response };
4741
+ }
4742
+ if (attempt === maxRetries) {
4743
+ return { response };
4744
+ }
4745
+ if (approvalMode === "disabled") {
4746
+ return { response };
4747
+ }
4748
+ if (!approvalContext) {
4749
+ return { response };
4750
+ }
4751
+ try {
4752
+ await this.runOneApprovalRound(
4753
+ approvalContext,
4754
+ approvalMode,
4755
+ init?.signal ?? void 0
4756
+ );
4757
+ } catch (error) {
4758
+ return { response, approvalRoundError: error };
4759
+ }
4760
+ }
4761
+ throw new ZapierApiError("Approval retry loop ended unexpectedly");
4762
+ };
3723
4763
  /**
3724
4764
  * Approval-aware HTTP fetch.
3725
4765
  *
@@ -3749,46 +4789,62 @@ var ZapierApiClient = class {
3749
4789
  * `max_retries_exceeded` instead.
3750
4790
  */
3751
4791
  this.fetch = async (path, init) => {
4792
+ validateSdkPath(path);
3752
4793
  const maxRetries = this.options.maxApprovalRetries ?? DEFAULT_MAX_APPROVAL_RETRIES;
3753
- for (let attempt = 0; attempt <= maxRetries; attempt++) {
3754
- const response = await this.rawFetch(path, init);
3755
- if (response.status !== 403) return response;
3756
- const errorType = response.headers.get("x-zapier-error-type");
3757
- if (errorType === "request_denied_by_policy") {
3758
- const { data } = await this.parseResult(response);
3759
- const { message, errors } = this.parseErrorResponse({
3760
- status: response.status,
3761
- statusText: response.statusText,
3762
- data
3763
- });
3764
- throw new ZapierApprovalError(
3765
- message || "Request explicitly denied by policy",
3766
- {
3767
- status: "policy_denied",
3768
- statusCode: response.status,
3769
- errors
3770
- }
3771
- );
3772
- }
3773
- if (errorType !== "approval_required") return response;
3774
- if (attempt === maxRetries) break;
3775
- const mode = this.options.approvalMode ?? getZapierApprovalMode() ?? getZapierDefaultApprovalMode();
3776
- if (mode === "disabled") {
3777
- throw new ZapierApprovalError(
3778
- "Approvals are disabled. Set approvalMode to 'poll' or 'throw' (or ZAPIER_APPROVAL_MODE) to enable.",
3779
- { status: "approval_required" }
3780
- );
3781
- }
3782
- if (!init?.approvalContext) {
3783
- throw new ZapierApiError(
3784
- `Received 403 approval_required for ${path}, but the caller did not provide an approvalContext builder. Every approval-capable request must pass approvalContext so the SDK can create the approval with the correct policy context.`,
3785
- { statusCode: 403 }
3786
- );
3787
- }
3788
- await this.runOneApprovalRound(
3789
- init.approvalContext,
3790
- mode,
3791
- init.signal ?? void 0
4794
+ const { canSendDeprecationMessaging } = this.buildUrl(
4795
+ path,
4796
+ init?.searchParams
4797
+ );
4798
+ const approvalMode = this.options.approvalMode ?? getZapierApprovalMode() ?? getZapierDefaultApprovalMode();
4799
+ const approvalContext = init?.approvalContext;
4800
+ const { response, approvalRoundError } = await this.runApprovalFetchLoop({
4801
+ path,
4802
+ init,
4803
+ maxRetries,
4804
+ approvalMode,
4805
+ approvalContext
4806
+ });
4807
+ handleDeprecationNotice({
4808
+ response,
4809
+ canSendDeprecationMessaging,
4810
+ onEvent: this.options.onEvent
4811
+ });
4812
+ if (response.status !== 403) {
4813
+ return response;
4814
+ }
4815
+ const errorType = response.headers.get("x-zapier-error-type");
4816
+ if (errorType === "request_denied_by_policy") {
4817
+ const { data } = await this.parseResult(response);
4818
+ const { message, errors } = this.parseErrorResponse({
4819
+ status: response.status,
4820
+ statusText: response.statusText,
4821
+ data
4822
+ });
4823
+ throw new ZapierApprovalError(
4824
+ message || "Request explicitly denied by policy",
4825
+ {
4826
+ status: "policy_denied",
4827
+ statusCode: response.status,
4828
+ errors
4829
+ }
4830
+ );
4831
+ }
4832
+ if (errorType !== "approval_required") {
4833
+ return response;
4834
+ }
4835
+ if (approvalRoundError) {
4836
+ throw approvalRoundError;
4837
+ }
4838
+ if (approvalMode === "disabled") {
4839
+ throw new ZapierApprovalError(
4840
+ "Approvals are disabled. Set approvalMode to 'poll' or 'throw' (or ZAPIER_APPROVAL_MODE) to enable.",
4841
+ { status: "approval_required" }
4842
+ );
4843
+ }
4844
+ if (!approvalContext) {
4845
+ throw new ZapierApiError(
4846
+ `Received 403 approval_required for ${path}, but the caller did not provide an approvalContext builder. Every approval-capable request must pass approvalContext so the SDK can create the approval with the correct policy context.`,
4847
+ { statusCode: 403 }
3792
4848
  );
3793
4849
  }
3794
4850
  throw new ZapierApprovalError(
@@ -4050,40 +5106,60 @@ var ZapierApiClient = class {
4050
5106
  }
4051
5107
  // Apply any special routing logic for configured paths.
4052
5108
  applyPathConfiguration(path) {
4053
- const matchingPathKey = Object.keys(pathConfig).find(
4054
- (configPath) => path === configPath || path.startsWith(configPath + "/")
4055
- );
4056
- const config = matchingPathKey ? pathConfig[matchingPathKey] : void 0;
5109
+ const matchingPathEntries = findPathConfigEntries({ path });
5110
+ const routingMatch = matchingPathEntries[0];
5111
+ const buildResult = (url2) => {
5112
+ const resolvedPathEntries = findPathConfigEntries({
5113
+ path: url2.pathname,
5114
+ matchResolvedGatewayPath: true
5115
+ });
5116
+ const deprecationPathMatches = [
5117
+ ...matchingPathEntries,
5118
+ ...resolvedPathEntries
5119
+ ];
5120
+ const canSendDeprecationMessaging = deprecationPathMatches.length > 0 && deprecationPathMatches.every(
5121
+ ({ config }) => config.omitDeprecationMessaging !== true
5122
+ );
5123
+ return {
5124
+ url: url2,
5125
+ pathConfig: routingMatch?.config,
5126
+ canSendDeprecationMessaging
5127
+ };
5128
+ };
4057
5129
  let finalPath = path;
4058
- if (config && "pathPrefix" in config && config.pathPrefix && matchingPathKey) {
4059
- const pathWithoutPrefix = path.slice(matchingPathKey.length) || "/";
4060
- finalPath = `${config.pathPrefix}${pathWithoutPrefix}`;
5130
+ if (routingMatch?.config.pathPrefix) {
5131
+ const pathWithoutPrefix = path.slice(routingMatch.configPath.length) || "/";
5132
+ finalPath = `${routingMatch.config.pathPrefix}${pathWithoutPrefix}`;
4061
5133
  }
4062
5134
  const zapierBaseUrl = getZapierBaseUrl(this.options.baseUrl);
4063
5135
  if (zapierBaseUrl === this.options.baseUrl.replace(/\/$/, "")) {
4064
5136
  const originalBaseUrl = new URL(this.options.baseUrl);
4065
5137
  const finalBaseUrl = `https://sdkapi.${originalBaseUrl.hostname}`;
4066
- return {
4067
- url: new URL(finalPath, finalBaseUrl),
4068
- pathConfig: config
4069
- };
5138
+ const url2 = new URL(finalPath, finalBaseUrl);
5139
+ return buildResult(url2);
4070
5140
  }
4071
5141
  const baseUrl = new URL(this.options.baseUrl);
4072
5142
  const basePath = baseUrl.pathname.replace(/\/$/, "");
4073
- return {
4074
- url: new URL(basePath + finalPath, baseUrl.origin),
4075
- pathConfig: config
4076
- };
5143
+ const url = new URL(basePath + finalPath, baseUrl.origin);
5144
+ return buildResult(url);
4077
5145
  }
4078
5146
  // Helper to build full URLs and return routing info
4079
5147
  buildUrl(path, searchParams) {
4080
- const { url, pathConfig: config } = this.applyPathConfiguration(path);
5148
+ const {
5149
+ url,
5150
+ pathConfig: config,
5151
+ canSendDeprecationMessaging
5152
+ } = this.applyPathConfiguration(path);
4081
5153
  if (searchParams) {
4082
5154
  Object.entries(searchParams).forEach(([key, value]) => {
4083
5155
  url.searchParams.set(key, value);
4084
5156
  });
4085
5157
  }
4086
- return { url: url.toString(), pathConfig: config };
5158
+ return {
5159
+ url: url.toString(),
5160
+ pathConfig: config,
5161
+ canSendDeprecationMessaging
5162
+ };
4087
5163
  }
4088
5164
  // Helper to build headers
4089
5165
  async buildHeaders(options = {}, pathConfig2) {
@@ -4647,67 +5723,6 @@ var apiPlugin = definePlugin(
4647
5723
  };
4648
5724
  }
4649
5725
  );
4650
- var GetProfileSchema = zod.z.object({}).optional().describe("Get current user's profile information");
4651
- var UserProfileItemSchema = zod.z.object({
4652
- id: zod.z.string(),
4653
- first_name: zod.z.string(),
4654
- last_name: zod.z.string(),
4655
- full_name: zod.z.string(),
4656
- email: zod.z.string(),
4657
- email_confirmed: zod.z.boolean(),
4658
- timezone: zod.z.string()
4659
- });
4660
-
4661
- // src/formatters/userProfile.ts
4662
- var userProfileItemFormatter = {
4663
- format: (item) => {
4664
- const details = [];
4665
- if (item.email) {
4666
- details.push({ text: item.email, style: "dim" });
4667
- }
4668
- if (item.timezone) {
4669
- details.push({
4670
- text: `Timezone: ${item.timezone}`,
4671
- style: "accent"
4672
- });
4673
- }
4674
- return {
4675
- title: item.full_name,
4676
- id: item.id,
4677
- details
4678
- };
4679
- }
4680
- };
4681
-
4682
- // src/plugins/getProfile/index.ts
4683
- var getProfilePlugin = definePlugin(
4684
- (sdk) => createPluginMethod(sdk, {
4685
- name: "getProfile",
4686
- categories: ["account"],
4687
- type: "item",
4688
- itemType: "Profile",
4689
- inputSchema: GetProfileSchema,
4690
- outputSchema: UserProfileItemSchema,
4691
- formatter: userProfileItemFormatter,
4692
- handler: async ({ sdk: sdk2 }) => {
4693
- const profile = await sdk2.context.api.get(
4694
- "/zapier/api/v4/profile/",
4695
- { authRequired: true }
4696
- );
4697
- return {
4698
- data: {
4699
- id: String(profile.public_id ?? profile.id),
4700
- first_name: profile.first_name,
4701
- last_name: profile.last_name,
4702
- full_name: `${profile.first_name} ${profile.last_name}`,
4703
- email: profile.email,
4704
- email_confirmed: profile.email_confirmed,
4705
- timezone: profile.timezone
4706
- }
4707
- };
4708
- }
4709
- })
4710
- );
4711
5726
 
4712
5727
  // src/utils/pagination.ts
4713
5728
  function extractCursorFromUrl(url) {
@@ -6382,7 +7397,7 @@ var actionResultItemFormatter = {
6382
7397
  id: getStringProperty(obj, "id"),
6383
7398
  key: getStringProperty(obj, "key"),
6384
7399
  description: getStringProperty(obj, "description"),
6385
- data: item,
7400
+ raw: item,
6386
7401
  details: []
6387
7402
  };
6388
7403
  }
@@ -10154,12 +11169,6 @@ var eventEmissionPlugin = definePlugin(
10154
11169
  function createOptionsPlugin(options) {
10155
11170
  return () => ({ context: { options } });
10156
11171
  }
10157
- function createSdk() {
10158
- logDeprecation2(
10159
- "createSdk() is deprecated. Build SDKs with createPluginStack().use(...).toSdk() instead. The chain pattern shares plugin closures (and their state) across derived SDKs in ways that are rarely what callers expect; stacks produce fresh closures per .toSdk() call."
10160
- );
10161
- return withDeprecatedAddPlugin(createZapierCoreStack().toSdk());
10162
- }
10163
11172
  function createZapierSdkWithoutRegistry(options = {}) {
10164
11173
  logDeprecation2(
10165
11174
  "createZapierSdkWithoutRegistry is deprecated; use createZapierSdk instead. getRegistry is now available on every sdk."
@@ -10167,10 +11176,22 @@ function createZapierSdkWithoutRegistry(options = {}) {
10167
11176
  return createZapierSdk(options);
10168
11177
  }
10169
11178
  function createZapierSdkStack(options = {}) {
10170
- return createZapierCoreStack().use(createOptionsPlugin(options)).use(eventEmissionPlugin).use(apiPlugin).use(manifestPlugin).use(capabilitiesPlugin).use(connectionsPlugin).use(listAppsPlugin).use(getAppPlugin).use(listConnectionsPlugin).use(getConnectionPlugin).use(findFirstConnectionPlugin).use(findUniqueConnectionPlugin).use(getConnectionStartUrlPlugin).use(waitForNewConnectionPlugin).use(createConnectionPlugin).use(listActionsPlugin).use(getActionPlugin).use(listActionInputFieldsPlugin).use(getActionInputFieldsSchemaPlugin).use(listActionInputFieldChoicesPlugin).use(listInputFieldsDeprecatedPlugin).use(getInputFieldsSchemaDeprecatedPlugin).use(listInputFieldChoicesDeprecatedPlugin).use(runActionPlugin).use(listAuthenticationsPlugin).use(getAuthenticationPlugin).use(findFirstAuthenticationPlugin).use(findUniqueAuthenticationPlugin).use(listClientCredentialsPlugin).use(createClientCredentialsPlugin).use(deleteClientCredentialsPlugin).use(fetchPlugin).use(requestPlugin).use(listTablesPlugin).use(getTablePlugin).use(deleteTablePlugin).use(createTablePlugin).use(listTableFieldsPlugin).use(createTableFieldsPlugin).use(deleteTableFieldsPlugin).use(listTableRecordsPlugin).use(getTableRecordPlugin).use(createTableRecordsPlugin).use(deleteTableRecordsPlugin).use(updateTableRecordsPlugin).use(appsPlugin).use(getProfilePlugin);
11179
+ return createZapierCoreStack().use(createOptionsPlugin(options)).use(eventEmissionPlugin).use(apiPlugin).use(manifestPlugin).use(capabilitiesPlugin).use(connectionsPlugin).use(listAppsPlugin).use(getAppPlugin).use(listConnectionsPlugin).use(getConnectionPlugin).use(findFirstConnectionPlugin).use(findUniqueConnectionPlugin).use(getConnectionStartUrlPlugin).use(waitForNewConnectionPlugin).use(createConnectionPlugin).use(listActionsPlugin).use(getActionPlugin).use(listActionInputFieldsPlugin).use(getActionInputFieldsSchemaPlugin).use(listActionInputFieldChoicesPlugin).use(listInputFieldsDeprecatedPlugin).use(getInputFieldsSchemaDeprecatedPlugin).use(listInputFieldChoicesDeprecatedPlugin).use(runActionPlugin).use(listAuthenticationsPlugin).use(getAuthenticationPlugin).use(findFirstAuthenticationPlugin).use(findUniqueAuthenticationPlugin).use(listClientCredentialsPlugin).use(createClientCredentialsPlugin).use(deleteClientCredentialsPlugin).use(fetchPlugin).use(requestPlugin).use(listTablesPlugin).use(getTablePlugin).use(deleteTablePlugin).use(createTablePlugin).use(listTableFieldsPlugin).use(createTableFieldsPlugin).use(deleteTableFieldsPlugin).use(listTableRecordsPlugin).use(getTableRecordPlugin).use(createTableRecordsPlugin).use(deleteTableRecordsPlugin).use(updateTableRecordsPlugin).use(appsPlugin);
10171
11180
  }
11181
+ var zapierSdkPlugin = definePlugin({
11182
+ namespace: "zapier",
11183
+ name: "sdk",
11184
+ exports: [getProfilePlugin]
11185
+ });
10172
11186
  function createZapierSdk(options = {}) {
10173
- return withDeprecatedAddPlugin(createZapierSdkStack(options).toSdk());
11187
+ return createSdk(
11188
+ defineLegacyMerge({
11189
+ namespace: "zapier",
11190
+ name: "sdk-stack-merge",
11191
+ legacy: createZapierSdkStack(options).toPlugin(),
11192
+ plugin: zapierSdkPlugin
11193
+ })
11194
+ );
10174
11195
  }
10175
11196
  var TriggerInboxStatusSchema = zod.z.union([
10176
11197
  zod.z.enum([
@@ -13310,10 +14331,17 @@ var registryPlugin = definePlugin((_sdk) => {
13310
14331
 
13311
14332
  // src/experimental.ts
13312
14333
  function createZapierSdkStack2(options = {}) {
13313
- return createZapierCoreStack().use(createOptionsPlugin(options)).use(eventEmissionPlugin).use(apiPlugin).use(manifestPlugin).use(capabilitiesPlugin).use(connectionsPlugin).use(listAppsPlugin).use(getAppPlugin).use(listConnectionsPlugin).use(getConnectionPlugin).use(findFirstConnectionPlugin).use(findUniqueConnectionPlugin).use(getConnectionStartUrlPlugin).use(waitForNewConnectionPlugin).use(createConnectionPlugin).use(listActionsPlugin).use(getActionPlugin).use(listActionInputFieldsPlugin).use(getActionInputFieldsSchemaPlugin).use(listActionInputFieldChoicesPlugin).use(listInputFieldsDeprecatedPlugin).use(getInputFieldsSchemaDeprecatedPlugin).use(listInputFieldChoicesDeprecatedPlugin).use(runActionPlugin).use(listAuthenticationsPlugin).use(getAuthenticationPlugin).use(findFirstAuthenticationPlugin).use(findUniqueAuthenticationPlugin).use(listClientCredentialsPlugin).use(createClientCredentialsPlugin).use(deleteClientCredentialsPlugin).use(fetchPlugin).use(requestPlugin).use(listTriggerInboxesPlugin).use(createTriggerInboxPlugin).use(ensureTriggerInboxPlugin).use(getTriggerInboxPlugin).use(updateTriggerInboxPlugin).use(deleteTriggerInboxPlugin).use(pauseTriggerInboxPlugin).use(resumeTriggerInboxPlugin).use(listTriggerInboxMessagesPlugin).use(leaseTriggerInboxMessagesPlugin).use(ackTriggerInboxMessagesPlugin).use(releaseTriggerInboxMessagesPlugin).use(drainTriggerInboxPlugin).use(watchTriggerInboxPlugin).use(listTriggersPlugin).use(listTriggerInputFieldsPlugin).use(listTriggerInputFieldChoicesPlugin).use(getTriggerInputFieldsSchemaPlugin).use(listTablesPlugin).use(getTablePlugin).use(deleteTablePlugin).use(createTablePlugin).use(listTableFieldsPlugin).use(createTableFieldsPlugin).use(deleteTableFieldsPlugin).use(listTableRecordsPlugin).use(getTableRecordPlugin).use(createTableRecordsPlugin).use(deleteTableRecordsPlugin).use(updateTableRecordsPlugin).use(listWorkflowsPlugin).use(getWorkflowPlugin).use(createWorkflowPlugin).use(updateWorkflowPlugin).use(enableWorkflowPlugin).use(disableWorkflowPlugin).use(deleteWorkflowPlugin).use(listDurableRunsPlugin).use(getDurableRunPlugin).use(runDurablePlugin).use(cancelDurableRunPlugin).use(publishWorkflowVersionPlugin).use(listWorkflowVersionsPlugin).use(getWorkflowVersionPlugin).use(listWorkflowRunsPlugin).use(getWorkflowRunPlugin).use(getTriggerRunPlugin).use(triggerWorkflowPlugin).use(appsPlugin).use(getProfilePlugin);
14334
+ return createZapierCoreStack().use(createOptionsPlugin(options)).use(eventEmissionPlugin).use(apiPlugin).use(manifestPlugin).use(capabilitiesPlugin).use(connectionsPlugin).use(listAppsPlugin).use(getAppPlugin).use(listConnectionsPlugin).use(getConnectionPlugin).use(findFirstConnectionPlugin).use(findUniqueConnectionPlugin).use(getConnectionStartUrlPlugin).use(waitForNewConnectionPlugin).use(createConnectionPlugin).use(listActionsPlugin).use(getActionPlugin).use(listActionInputFieldsPlugin).use(getActionInputFieldsSchemaPlugin).use(listActionInputFieldChoicesPlugin).use(listInputFieldsDeprecatedPlugin).use(getInputFieldsSchemaDeprecatedPlugin).use(listInputFieldChoicesDeprecatedPlugin).use(runActionPlugin).use(listAuthenticationsPlugin).use(getAuthenticationPlugin).use(findFirstAuthenticationPlugin).use(findUniqueAuthenticationPlugin).use(listClientCredentialsPlugin).use(createClientCredentialsPlugin).use(deleteClientCredentialsPlugin).use(fetchPlugin).use(requestPlugin).use(listTriggerInboxesPlugin).use(createTriggerInboxPlugin).use(ensureTriggerInboxPlugin).use(getTriggerInboxPlugin).use(updateTriggerInboxPlugin).use(deleteTriggerInboxPlugin).use(pauseTriggerInboxPlugin).use(resumeTriggerInboxPlugin).use(listTriggerInboxMessagesPlugin).use(leaseTriggerInboxMessagesPlugin).use(ackTriggerInboxMessagesPlugin).use(releaseTriggerInboxMessagesPlugin).use(drainTriggerInboxPlugin).use(watchTriggerInboxPlugin).use(listTriggersPlugin).use(listTriggerInputFieldsPlugin).use(listTriggerInputFieldChoicesPlugin).use(getTriggerInputFieldsSchemaPlugin).use(listTablesPlugin).use(getTablePlugin).use(deleteTablePlugin).use(createTablePlugin).use(listTableFieldsPlugin).use(createTableFieldsPlugin).use(deleteTableFieldsPlugin).use(listTableRecordsPlugin).use(getTableRecordPlugin).use(createTableRecordsPlugin).use(deleteTableRecordsPlugin).use(updateTableRecordsPlugin).use(listWorkflowsPlugin).use(getWorkflowPlugin).use(createWorkflowPlugin).use(updateWorkflowPlugin).use(enableWorkflowPlugin).use(disableWorkflowPlugin).use(deleteWorkflowPlugin).use(listDurableRunsPlugin).use(getDurableRunPlugin).use(runDurablePlugin).use(cancelDurableRunPlugin).use(publishWorkflowVersionPlugin).use(listWorkflowVersionsPlugin).use(getWorkflowVersionPlugin).use(listWorkflowRunsPlugin).use(getWorkflowRunPlugin).use(getTriggerRunPlugin).use(triggerWorkflowPlugin).use(appsPlugin);
13314
14335
  }
13315
14336
  function createZapierSdk2(options = {}) {
13316
- return withDeprecatedAddPlugin(createZapierSdkStack2(options).toSdk());
14337
+ return createSdk(
14338
+ defineLegacyMerge({
14339
+ namespace: "zapier",
14340
+ name: "experimental-stack-merge",
14341
+ legacy: createZapierSdkStack2(options).toPlugin(),
14342
+ plugin: zapierSdkPlugin
14343
+ })
14344
+ );
13317
14345
  }
13318
14346
 
13319
14347
  exports.ActionKeyPropertySchema = ActionKeyPropertySchema;
@@ -13344,6 +14372,7 @@ exports.DEFAULT_APPROVAL_TIMEOUT_MS = DEFAULT_APPROVAL_TIMEOUT_MS;
13344
14372
  exports.DEFAULT_CONFIG_PATH = DEFAULT_CONFIG_PATH;
13345
14373
  exports.DEFAULT_MAX_APPROVAL_RETRIES = DEFAULT_MAX_APPROVAL_RETRIES;
13346
14374
  exports.DEFAULT_PAGE_SIZE = DEFAULT_PAGE_SIZE;
14375
+ exports.DEPRECATION_NOTICE_EVENT = DEPRECATION_NOTICE_EVENT;
13347
14376
  exports.DebugPropertySchema = DebugPropertySchema;
13348
14377
  exports.FieldsPropertySchema = FieldsPropertySchema;
13349
14378
  exports.InputFieldPropertySchema = InputFieldPropertySchema;
@@ -13430,7 +14459,13 @@ exports.createZapierCoreStack = createZapierCoreStack;
13430
14459
  exports.createZapierSdk = createZapierSdk2;
13431
14460
  exports.createZapierSdkStack = createZapierSdkStack2;
13432
14461
  exports.createZapierSdkWithoutRegistry = createZapierSdkWithoutRegistry;
14462
+ exports.dangerousContextPlugin = dangerousContextPlugin;
14463
+ exports.declareMethod = declareMethod;
14464
+ exports.declareProperty = declareProperty;
14465
+ exports.defineLegacyMerge = defineLegacyMerge;
14466
+ exports.defineMethod = defineMethod;
13433
14467
  exports.definePlugin = definePlugin;
14468
+ exports.defineProperty = defineProperty;
13434
14469
  exports.deleteClientCredentialsPlugin = deleteClientCredentialsPlugin;
13435
14470
  exports.deleteTableFieldsPlugin = deleteTableFieldsPlugin;
13436
14471
  exports.deleteTablePlugin = deleteTablePlugin;
@@ -13442,6 +14477,7 @@ exports.findFirstConnectionPlugin = findFirstConnectionPlugin;
13442
14477
  exports.findManifestEntry = findManifestEntry;
13443
14478
  exports.findUniqueConnectionPlugin = findUniqueConnectionPlugin;
13444
14479
  exports.formatErrorMessage = formatErrorMessage;
14480
+ exports.fromFunctionPlugin = fromFunctionPlugin;
13445
14481
  exports.generateEventId = generateEventId;
13446
14482
  exports.getActionInputFieldsSchemaPlugin = getActionInputFieldsSchemaPlugin;
13447
14483
  exports.getActionPlugin = getActionPlugin;
@@ -13452,6 +14488,7 @@ exports.getCallerContext = getCallerContext;
13452
14488
  exports.getCiPlatform = getCiPlatform;
13453
14489
  exports.getClientIdFromCredentials = getClientIdFromCredentials;
13454
14490
  exports.getConnectionPlugin = getConnectionPlugin;
14491
+ exports.getContext = getContext;
13455
14492
  exports.getCoreErrorCause = getCoreErrorCause;
13456
14493
  exports.getCoreErrorCode = getCoreErrorCode;
13457
14494
  exports.getCpuTime = getCpuTime;
@@ -13529,3 +14566,4 @@ exports.workflowIdResolver = workflowIdResolver;
13529
14566
  exports.workflowRunIdResolver = workflowRunIdResolver;
13530
14567
  exports.workflowVersionIdResolver = workflowVersionIdResolver;
13531
14568
  exports.zapierAdaptError = zapierAdaptError;
14569
+ exports.zapierSdkPlugin = zapierSdkPlugin;