@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.
- package/CHANGELOG.md +16 -0
- package/dist/experimental.cjs +1278 -240
- package/dist/experimental.d.mts +22 -38
- package/dist/experimental.d.ts +22 -38
- package/dist/experimental.mjs +1269 -241
- package/dist/{index-kC0bJpsG.d.mts → index-DgX1b0Sv.d.mts} +4721 -3769
- package/dist/{index-kC0bJpsG.d.ts → index-DgX1b0Sv.d.ts} +4721 -3769
- package/dist/index.cjs +2815 -1784
- package/dist/index.d.mts +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.mjs +2806 -1785
- package/package.json +2 -2
package/dist/experimental.cjs
CHANGED
|
@@ -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:
|
|
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 (
|
|
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
|
|
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
|
|
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
|
|
877
|
-
const
|
|
884
|
+
function resolveStack(head) {
|
|
885
|
+
const entries = [];
|
|
878
886
|
let node = head;
|
|
879
887
|
while (node) {
|
|
880
|
-
|
|
888
|
+
entries.unshift({ apply: node.entry, override: node.override });
|
|
881
889
|
node = node.prev;
|
|
882
890
|
}
|
|
883
|
-
|
|
884
|
-
|
|
885
|
-
|
|
886
|
-
|
|
887
|
-
|
|
888
|
-
|
|
889
|
-
|
|
890
|
-
|
|
891
|
-
|
|
892
|
-
|
|
893
|
-
|
|
894
|
-
|
|
895
|
-
|
|
896
|
-
|
|
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
|
|
900
|
-
const
|
|
901
|
-
|
|
902
|
-
|
|
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
|
-
|
|
929
|
+
apply(acc.view)
|
|
906
930
|
);
|
|
907
|
-
|
|
908
|
-
|
|
909
|
-
...
|
|
910
|
-
|
|
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
|
-
|
|
933
|
-
return
|
|
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
|
|
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
|
-
|
|
947
|
+
head = { entry: plugin, override: false, prev: head };
|
|
948
948
|
}
|
|
949
|
-
|
|
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
|
-
|
|
956
|
+
const stack = {
|
|
956
957
|
use(plugin, options) {
|
|
957
958
|
const next = {
|
|
958
|
-
|
|
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
|
|
967
|
-
|
|
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.
|
|
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
|
-
|
|
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
|
-
|
|
3754
|
-
|
|
3755
|
-
|
|
3756
|
-
|
|
3757
|
-
|
|
3758
|
-
|
|
3759
|
-
|
|
3760
|
-
|
|
3761
|
-
|
|
3762
|
-
|
|
3763
|
-
|
|
3764
|
-
|
|
3765
|
-
|
|
3766
|
-
|
|
3767
|
-
|
|
3768
|
-
|
|
3769
|
-
|
|
3770
|
-
|
|
3771
|
-
|
|
3772
|
-
|
|
3773
|
-
|
|
3774
|
-
|
|
3775
|
-
|
|
3776
|
-
|
|
3777
|
-
|
|
3778
|
-
|
|
3779
|
-
|
|
3780
|
-
|
|
3781
|
-
}
|
|
3782
|
-
|
|
3783
|
-
|
|
3784
|
-
|
|
3785
|
-
|
|
3786
|
-
|
|
3787
|
-
|
|
3788
|
-
|
|
3789
|
-
|
|
3790
|
-
|
|
3791
|
-
|
|
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
|
|
4054
|
-
|
|
4055
|
-
)
|
|
4056
|
-
|
|
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
|
|
4059
|
-
const pathWithoutPrefix = path.slice(
|
|
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
|
-
|
|
4067
|
-
|
|
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
|
-
|
|
4074
|
-
|
|
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 {
|
|
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 {
|
|
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
|
-
|
|
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)
|
|
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
|
|
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)
|
|
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
|
|
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;
|