@zapier/zapier-sdk 0.91.1 → 0.92.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 +12 -0
- package/README.md +16 -15
- package/dist/{chunk-6HEA7RSA.cjs → chunk-F5I2GDLO.cjs} +264 -22
- package/dist/{chunk-22USOWAR.mjs → chunk-G52V3IGZ.mjs} +264 -22
- package/dist/experimental.cjs +476 -374
- package/dist/experimental.d.mts +140 -3
- package/dist/experimental.d.ts +140 -3
- package/dist/experimental.mjs +105 -3
- package/dist/{index-BBBkZ80x.d.mts → index-ixzNJW7G.d.mts} +211 -4
- package/dist/{index-BBBkZ80x.d.ts → index-ixzNJW7G.d.ts} +211 -4
- package/dist/index.cjs +272 -272
- package/dist/index.d.mts +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.mjs +1 -1
- package/package.json +2 -2
|
@@ -823,7 +823,8 @@ function isSdkPage(value) {
|
|
|
823
823
|
}
|
|
824
824
|
function createPageFunction(coreFn, {
|
|
825
825
|
sdk,
|
|
826
|
-
adaptPage
|
|
826
|
+
adaptPage,
|
|
827
|
+
finalizePage
|
|
827
828
|
}) {
|
|
828
829
|
const functionName = coreFn.name + "Page";
|
|
829
830
|
const namedFunctions = {
|
|
@@ -836,7 +837,7 @@ function createPageFunction(coreFn, {
|
|
|
836
837
|
`${functionName}: paginated result must be exactly { data: TItem[], nextCursor? } (produced by the handler or its \`adaptPage\`); got keys [${page && typeof page === "object" ? Object.keys(page).join(", ") : typeof page}]. If the handler returns a raw shape, set \`adaptPage\` to translate it; if \`adaptPage\` already runs, it must return only \`data\`/\`nextCursor\`.`
|
|
837
838
|
);
|
|
838
839
|
}
|
|
839
|
-
return page;
|
|
840
|
+
return finalizePage ? finalizePage(page) : page;
|
|
840
841
|
} catch (error) {
|
|
841
842
|
throw normalizeError(
|
|
842
843
|
error,
|
|
@@ -855,9 +856,14 @@ function createPaginatedFunction(coreFn, options) {
|
|
|
855
856
|
defaultPageSize,
|
|
856
857
|
adaptPage,
|
|
857
858
|
annotator,
|
|
859
|
+
finalizePage,
|
|
858
860
|
getDeprecation
|
|
859
861
|
} = options;
|
|
860
|
-
const pageFunction = createPageFunction(coreFn, {
|
|
862
|
+
const pageFunction = createPageFunction(coreFn, {
|
|
863
|
+
sdk,
|
|
864
|
+
adaptPage,
|
|
865
|
+
finalizePage
|
|
866
|
+
});
|
|
861
867
|
const functionName = name || coreFn.name;
|
|
862
868
|
const namedFunctions = {
|
|
863
869
|
[functionName]: function(callOptions) {
|
|
@@ -1374,6 +1380,7 @@ function defineMethod(config) {
|
|
|
1374
1380
|
importBindings: deps.bindings,
|
|
1375
1381
|
inputSchema: config.inputSchema,
|
|
1376
1382
|
skipInputValidation: config.skipInputValidation,
|
|
1383
|
+
skipOutputValidation: config.skipOutputValidation,
|
|
1377
1384
|
meta: collectLeafMeta(config),
|
|
1378
1385
|
resolvers: config.resolvers,
|
|
1379
1386
|
formatter: config.formatter,
|
|
@@ -1814,6 +1821,95 @@ var getRegistryPlugin = defineMethod({
|
|
|
1814
1821
|
inputSchema: zod.z.object({ package: zod.z.string().optional() }).optional(),
|
|
1815
1822
|
run: ({ imports, input }) => buildSurfaceRegistry(imports.context, input?.package)
|
|
1816
1823
|
});
|
|
1824
|
+
function isRecord(value) {
|
|
1825
|
+
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
1826
|
+
}
|
|
1827
|
+
function diffDroppedPaths(raw, parsed, prefix = "") {
|
|
1828
|
+
const paths = [];
|
|
1829
|
+
walkDroppedPaths(raw, parsed, prefix, paths);
|
|
1830
|
+
return paths;
|
|
1831
|
+
}
|
|
1832
|
+
function walkDroppedPaths(raw, parsed, prefix, out) {
|
|
1833
|
+
if (Array.isArray(raw) && Array.isArray(parsed)) {
|
|
1834
|
+
const seen = /* @__PURE__ */ new Set();
|
|
1835
|
+
const length = Math.min(raw.length, parsed.length);
|
|
1836
|
+
for (let index = 0; index < length; index++) {
|
|
1837
|
+
const elementPaths = [];
|
|
1838
|
+
walkDroppedPaths(raw[index], parsed[index], `${prefix}[]`, elementPaths);
|
|
1839
|
+
for (const path of elementPaths) {
|
|
1840
|
+
if (seen.has(path)) continue;
|
|
1841
|
+
seen.add(path);
|
|
1842
|
+
out.push(path);
|
|
1843
|
+
}
|
|
1844
|
+
}
|
|
1845
|
+
return;
|
|
1846
|
+
}
|
|
1847
|
+
if (isRecord(raw) && isRecord(parsed)) {
|
|
1848
|
+
for (const key of Object.keys(raw)) {
|
|
1849
|
+
const path = prefix ? `${prefix}.${key}` : key;
|
|
1850
|
+
if (!(key in parsed)) {
|
|
1851
|
+
out.push(path);
|
|
1852
|
+
continue;
|
|
1853
|
+
}
|
|
1854
|
+
walkDroppedPaths(raw[key], parsed[key], path, out);
|
|
1855
|
+
}
|
|
1856
|
+
return;
|
|
1857
|
+
}
|
|
1858
|
+
}
|
|
1859
|
+
function parseOutput(schema, value, policy, locator) {
|
|
1860
|
+
const result = schema.safeParse(value);
|
|
1861
|
+
if (result.success) return result.data;
|
|
1862
|
+
const issues = result.error.issues.map((issue) => {
|
|
1863
|
+
const path = issue.path.length > 0 ? issue.path.join(".") : "data";
|
|
1864
|
+
return `${path}: ${issue.message}`;
|
|
1865
|
+
});
|
|
1866
|
+
const subject = policy.methodName ? ` for "${policy.methodName}"` : "";
|
|
1867
|
+
const at = locator ? ` at ${locator}` : "";
|
|
1868
|
+
throw createCoreError(
|
|
1869
|
+
{
|
|
1870
|
+
code: CoreErrorCode.Validation,
|
|
1871
|
+
message: `Output validation failed${subject}${at}:
|
|
1872
|
+
${issues.join("\n ")}
|
|
1873
|
+
|
|
1874
|
+
The response does not match the method's \`outputSchema\`. Correct the schema, or set \`skipOutputValidation: true\` on the method to pass the response through unvalidated.`,
|
|
1875
|
+
details: { zodErrors: result.error.issues, output: value }
|
|
1876
|
+
},
|
|
1877
|
+
policy.adaptError
|
|
1878
|
+
);
|
|
1879
|
+
}
|
|
1880
|
+
function applyItemOutputPolicy(result, policy) {
|
|
1881
|
+
const schema = policy.outputSchema;
|
|
1882
|
+
if (!schema || policy.skipOutputValidation) return result;
|
|
1883
|
+
if (!isRecord(result) || !("data" in result)) return result;
|
|
1884
|
+
const data = parseOutput(schema, result.data, policy);
|
|
1885
|
+
const next = { ...result, data };
|
|
1886
|
+
if (policy.includeOutputValidationDroppedPaths) {
|
|
1887
|
+
const droppedPaths = diffDroppedPaths(result.data, data);
|
|
1888
|
+
if (droppedPaths.length > 0) {
|
|
1889
|
+
next.meta = withOutputValidation(result.meta, droppedPaths);
|
|
1890
|
+
}
|
|
1891
|
+
}
|
|
1892
|
+
return next;
|
|
1893
|
+
}
|
|
1894
|
+
function withOutputValidation(existing, droppedPaths) {
|
|
1895
|
+
const base = isRecord(existing) ? existing : {};
|
|
1896
|
+
return { ...base, outputValidation: { droppedPaths } };
|
|
1897
|
+
}
|
|
1898
|
+
function applyListOutputPolicy(page, policy) {
|
|
1899
|
+
const schema = policy.outputSchema;
|
|
1900
|
+
if (!schema || policy.skipOutputValidation) return page;
|
|
1901
|
+
const data = page.data.map(
|
|
1902
|
+
(item, index) => parseOutput(schema, item, policy, `data[${index}]`)
|
|
1903
|
+
);
|
|
1904
|
+
const next = { ...page, data };
|
|
1905
|
+
if (policy.includeOutputValidationDroppedPaths) {
|
|
1906
|
+
const droppedPaths = diffDroppedPaths(page.data, data);
|
|
1907
|
+
if (droppedPaths.length > 0) {
|
|
1908
|
+
next.meta = { ...page.meta, outputValidation: { droppedPaths } };
|
|
1909
|
+
}
|
|
1910
|
+
}
|
|
1911
|
+
return next;
|
|
1912
|
+
}
|
|
1817
1913
|
var FRAMEWORK_CONFIGURATION_IDS = /* @__PURE__ */ new Set([
|
|
1818
1914
|
CORE_OPTIONS_ID
|
|
1819
1915
|
]);
|
|
@@ -1876,6 +1972,9 @@ function edgesOf(plugin) {
|
|
|
1876
1972
|
function isStandIn(plugin) {
|
|
1877
1973
|
return (plugin.pluginType === "method" || plugin.pluginType === "property" || plugin.pluginType === "aggregate") && plugin.standIn === true;
|
|
1878
1974
|
}
|
|
1975
|
+
function isDefault(plugin) {
|
|
1976
|
+
return (plugin.pluginType === "method" || plugin.pluginType === "property") && plugin.defaultSource !== void 0;
|
|
1977
|
+
}
|
|
1879
1978
|
function topoOrder(descriptors) {
|
|
1880
1979
|
const order = [];
|
|
1881
1980
|
const visited = /* @__PURE__ */ new Set();
|
|
@@ -1890,28 +1989,89 @@ function topoOrder(descriptors) {
|
|
|
1890
1989
|
return order;
|
|
1891
1990
|
}
|
|
1892
1991
|
function collectPlugins(root, materialized = /* @__PURE__ */ new Set(), configuration) {
|
|
1992
|
+
const rank = (plugin) => isStandIn(plugin) ? 0 : isDefault(plugin) ? 1 : 2;
|
|
1993
|
+
const allNodes = [];
|
|
1994
|
+
const seen = /* @__PURE__ */ new Set();
|
|
1995
|
+
const collect = (plugin) => {
|
|
1996
|
+
if (materialized.has(plugin.id) || seen.has(plugin)) return;
|
|
1997
|
+
seen.add(plugin);
|
|
1998
|
+
allNodes.push(plugin);
|
|
1999
|
+
for (const edge of edgesOf(plugin)) collect(edge);
|
|
2000
|
+
};
|
|
2001
|
+
collect(root);
|
|
2002
|
+
const childrenOf = /* @__PURE__ */ new Map();
|
|
2003
|
+
const candidatesById = /* @__PURE__ */ new Map();
|
|
2004
|
+
for (const node of allNodes) {
|
|
2005
|
+
childrenOf.set(
|
|
2006
|
+
node,
|
|
2007
|
+
edgesOf(node).filter((edge) => seen.has(edge))
|
|
2008
|
+
);
|
|
2009
|
+
const candidates = candidatesById.get(node.id);
|
|
2010
|
+
if (candidates) candidates.push(node);
|
|
2011
|
+
else candidatesById.set(node.id, [node]);
|
|
2012
|
+
}
|
|
2013
|
+
const live = new Set(allNodes);
|
|
2014
|
+
for (; ; ) {
|
|
2015
|
+
const reachable = /* @__PURE__ */ new Set();
|
|
2016
|
+
if (live.has(root)) reachable.add(root);
|
|
2017
|
+
const queue = reachable.has(root) ? [root] : [];
|
|
2018
|
+
while (queue.length) {
|
|
2019
|
+
const node = queue.pop();
|
|
2020
|
+
for (const child of childrenOf.get(node) ?? []) {
|
|
2021
|
+
if (reachable.has(child)) continue;
|
|
2022
|
+
reachable.add(child);
|
|
2023
|
+
if (live.has(child)) queue.push(child);
|
|
2024
|
+
}
|
|
2025
|
+
}
|
|
2026
|
+
let changed = false;
|
|
2027
|
+
for (const node of live) {
|
|
2028
|
+
if (!reachable.has(node)) {
|
|
2029
|
+
live.delete(node);
|
|
2030
|
+
changed = true;
|
|
2031
|
+
}
|
|
2032
|
+
}
|
|
2033
|
+
for (const candidates of candidatesById.values()) {
|
|
2034
|
+
let maxRank = -1;
|
|
2035
|
+
for (const candidate of candidates) {
|
|
2036
|
+
if (live.has(candidate)) maxRank = Math.max(maxRank, rank(candidate));
|
|
2037
|
+
}
|
|
2038
|
+
if (maxRank < 0) continue;
|
|
2039
|
+
for (const candidate of candidates) {
|
|
2040
|
+
if (live.has(candidate) && rank(candidate) < maxRank) {
|
|
2041
|
+
live.delete(candidate);
|
|
2042
|
+
changed = true;
|
|
2043
|
+
}
|
|
2044
|
+
}
|
|
2045
|
+
}
|
|
2046
|
+
if (!changed) break;
|
|
2047
|
+
}
|
|
1893
2048
|
const byId = /* @__PURE__ */ new Map();
|
|
1894
|
-
const
|
|
1895
|
-
|
|
1896
|
-
|
|
1897
|
-
|
|
1898
|
-
|
|
1899
|
-
|
|
1900
|
-
|
|
2049
|
+
const conflictedDefaults = /* @__PURE__ */ new Set();
|
|
2050
|
+
const isOptional = (plugin) => "optional" in plugin && plugin.optional === true;
|
|
2051
|
+
for (const [id, candidates] of candidatesById) {
|
|
2052
|
+
const liveCandidates = candidates.filter(
|
|
2053
|
+
(candidate) => live.has(candidate)
|
|
2054
|
+
);
|
|
2055
|
+
const winner = liveCandidates.find((candidate) => !isOptional(candidate)) ?? liveCandidates[0];
|
|
2056
|
+
if (!winner) continue;
|
|
2057
|
+
if (liveCandidates.length > 1) {
|
|
2058
|
+
const winnerRank = rank(winner);
|
|
2059
|
+
if (winnerRank === 2) {
|
|
1901
2060
|
throw new Error(
|
|
1902
|
-
`createSdk: duplicate plugin id "${
|
|
2061
|
+
`createSdk: duplicate plugin id "${id}". Two different plugins registered under the same id.`
|
|
1903
2062
|
);
|
|
1904
2063
|
}
|
|
1905
|
-
if (
|
|
1906
|
-
|
|
1907
|
-
|
|
2064
|
+
if (winnerRank === 1) {
|
|
2065
|
+
const sources = new Set(
|
|
2066
|
+
liveCandidates.map(
|
|
2067
|
+
(candidate) => candidate.defaultSource
|
|
2068
|
+
)
|
|
2069
|
+
);
|
|
2070
|
+
if (sources.size > 1) conflictedDefaults.add(id);
|
|
1908
2071
|
}
|
|
1909
|
-
return;
|
|
1910
2072
|
}
|
|
1911
|
-
byId.set(
|
|
1912
|
-
|
|
1913
|
-
};
|
|
1914
|
-
visit(root);
|
|
2073
|
+
byId.set(id, winner);
|
|
2074
|
+
}
|
|
1915
2075
|
if (configuration) {
|
|
1916
2076
|
for (const [id, value] of Object.entries(configuration)) {
|
|
1917
2077
|
const existing = byId.get(id);
|
|
@@ -1962,6 +2122,14 @@ function collectPlugins(root, materialized = /* @__PURE__ */ new Set(), configur
|
|
|
1962
2122
|
);
|
|
1963
2123
|
}
|
|
1964
2124
|
}
|
|
2125
|
+
for (const id of conflictedDefaults) {
|
|
2126
|
+
const winner = byId.get(id);
|
|
2127
|
+
if (winner && isDefault(winner)) {
|
|
2128
|
+
throw new Error(
|
|
2129
|
+
`createSdk: conflicting defaults for "${id}". Two different plugins were declared as defaults for the same id and nothing else provides it. Register an explicit (non-default) plugin for this id to choose the winner, or give the implementations distinct ids if they are meant to coexist.`
|
|
2130
|
+
);
|
|
2131
|
+
}
|
|
2132
|
+
}
|
|
1965
2133
|
return byId;
|
|
1966
2134
|
}
|
|
1967
2135
|
function bindValue({
|
|
@@ -2284,6 +2452,7 @@ function buildMethodEntries(descriptors, context, states) {
|
|
|
2284
2452
|
const plugins = context.plugins;
|
|
2285
2453
|
for (const [id, descriptor] of descriptors) {
|
|
2286
2454
|
if (descriptor.pluginType !== "method") continue;
|
|
2455
|
+
if (isStandIn(descriptor)) continue;
|
|
2287
2456
|
const out = normalizeOutput(descriptor.output);
|
|
2288
2457
|
const entry = {
|
|
2289
2458
|
pluginType: "method",
|
|
@@ -2336,6 +2505,16 @@ function buildMethodEntries(descriptors, context, states) {
|
|
|
2336
2505
|
const sdk = { context };
|
|
2337
2506
|
const methodAnnotator = descriptor.annotator;
|
|
2338
2507
|
const boundAnnotator = methodAnnotator ? (input) => methodAnnotator({ input }) : void 0;
|
|
2508
|
+
const outputPolicy = () => {
|
|
2509
|
+
const core = resolveCoreOptions(context);
|
|
2510
|
+
return {
|
|
2511
|
+
outputSchema: descriptor.meta?.outputSchema,
|
|
2512
|
+
skipOutputValidation: descriptor.skipOutputValidation,
|
|
2513
|
+
includeOutputValidationDroppedPaths: core?.includeOutputValidationDroppedPaths,
|
|
2514
|
+
methodName: descriptor.name,
|
|
2515
|
+
adaptError: core?.adaptError
|
|
2516
|
+
};
|
|
2517
|
+
};
|
|
2339
2518
|
if (out.type === "list") {
|
|
2340
2519
|
entry.value = createPaginatedFunction(
|
|
2341
2520
|
fold(callRun),
|
|
@@ -2346,11 +2525,15 @@ function buildMethodEntries(descriptors, context, states) {
|
|
|
2346
2525
|
defaultPageSize: out.defaultPageSize,
|
|
2347
2526
|
adaptPage: out.adaptPage,
|
|
2348
2527
|
annotator: boundAnnotator,
|
|
2528
|
+
// Validate + strip each item against the item `outputSchema`
|
|
2529
|
+
// (item mode's sibling); dropped paths surface as `[].x` in the page's
|
|
2530
|
+
// `meta`, unioned across items.
|
|
2531
|
+
finalizePage: (page) => applyListOutputPolicy(page, outputPolicy()),
|
|
2349
2532
|
getDeprecation: () => entry.meta?.deprecation
|
|
2350
2533
|
}
|
|
2351
2534
|
);
|
|
2352
2535
|
} else if (out.type === "item") {
|
|
2353
|
-
const itemCore = async (input, ctx) => callRun(input, ctx);
|
|
2536
|
+
const itemCore = async (input, ctx) => applyItemOutputPolicy(await callRun(input, ctx), outputPolicy());
|
|
2354
2537
|
entry.value = createFunction(
|
|
2355
2538
|
fold(itemCore),
|
|
2356
2539
|
{
|
|
@@ -4290,6 +4473,7 @@ var ZapierConflictError = class extends ZapierError {
|
|
|
4290
4473
|
this.name = "ZapierConflictError";
|
|
4291
4474
|
this.code = "ZAPIER_CONFLICT_ERROR";
|
|
4292
4475
|
this.resourceType = options.resourceType;
|
|
4476
|
+
this.meta = options.meta;
|
|
4293
4477
|
}
|
|
4294
4478
|
};
|
|
4295
4479
|
var ZapierRateLimitError = class extends ZapierError {
|
|
@@ -5999,7 +6183,7 @@ function parseDeprecationDate(value) {
|
|
|
5999
6183
|
}
|
|
6000
6184
|
|
|
6001
6185
|
// src/sdk-version.ts
|
|
6002
|
-
var SDK_VERSION = (typeof process !== "undefined" && process.env ? "0.
|
|
6186
|
+
var SDK_VERSION = (typeof process !== "undefined" && process.env ? "0.92.0" : void 0) || "unknown";
|
|
6003
6187
|
|
|
6004
6188
|
// src/utils/open-url.ts
|
|
6005
6189
|
var nodePrefix = "node:";
|
|
@@ -9960,6 +10144,7 @@ var listActionsPlugin = defineMethod({
|
|
|
9960
10144
|
itemType: "Action",
|
|
9961
10145
|
inputSchema: ListActionsInputSchema,
|
|
9962
10146
|
outputSchema: ActionItemSchema,
|
|
10147
|
+
skipOutputValidation: true,
|
|
9963
10148
|
formatter: actionItemFormatter,
|
|
9964
10149
|
output: { type: "list", defaultPageSize: DEFAULT_PAGE_SIZE },
|
|
9965
10150
|
// Only `app` carries a resolver: `actionType` is an optional filter, and the
|
|
@@ -10024,6 +10209,7 @@ var getActionPlugin = defineMethod({
|
|
|
10024
10209
|
itemType: "Action",
|
|
10025
10210
|
inputSchema: GetActionInputSchema,
|
|
10026
10211
|
outputSchema: ActionItemSchema,
|
|
10212
|
+
skipOutputValidation: true,
|
|
10027
10213
|
output: "item",
|
|
10028
10214
|
formatter: actionItemFormatter,
|
|
10029
10215
|
resolvers: {
|
|
@@ -10115,6 +10301,7 @@ var runActionPlugin = defineMethod({
|
|
|
10115
10301
|
itemType: "ActionResult",
|
|
10116
10302
|
inputSchema: RunActionInputSchema,
|
|
10117
10303
|
outputSchema: ActionResultItemSchema,
|
|
10304
|
+
skipOutputValidation: true,
|
|
10118
10305
|
formatter: actionResultItemFormatter,
|
|
10119
10306
|
// No defaultPageSize — leave the default to the Actions API rather than
|
|
10120
10307
|
// eagerly running more actions than the user intends (avoids app rate limits).
|
|
@@ -10441,7 +10628,8 @@ var appsPlugin = defineProperty({
|
|
|
10441
10628
|
type: "list",
|
|
10442
10629
|
inputSchema: ActionExecutionInputSchema,
|
|
10443
10630
|
itemType: "ActionResult",
|
|
10444
|
-
outputSchema: ActionResultItemSchema
|
|
10631
|
+
outputSchema: ActionResultItemSchema,
|
|
10632
|
+
skipOutputValidation: true
|
|
10445
10633
|
}
|
|
10446
10634
|
]
|
|
10447
10635
|
});
|
|
@@ -10489,6 +10677,7 @@ var listAppsPlugin = defineMethod({
|
|
|
10489
10677
|
itemType: "App",
|
|
10490
10678
|
inputSchema: ListAppsSchema,
|
|
10491
10679
|
outputSchema: AppItemSchema,
|
|
10680
|
+
skipOutputValidation: true,
|
|
10492
10681
|
formatter: appItemFormatter,
|
|
10493
10682
|
output: {
|
|
10494
10683
|
type: "list",
|
|
@@ -10846,6 +11035,7 @@ var listActionInputFieldsPlugin = defineMethod({
|
|
|
10846
11035
|
itemType: "RootField",
|
|
10847
11036
|
inputSchema: ListActionInputFieldsInputSchema,
|
|
10848
11037
|
outputSchema: RootFieldItemSchema,
|
|
11038
|
+
skipOutputValidation: true,
|
|
10849
11039
|
formatter: rootFieldItemFormatter,
|
|
10850
11040
|
output: { type: "list", defaultPageSize: DEFAULT_PAGE_SIZE },
|
|
10851
11041
|
resolvers: {
|
|
@@ -10982,6 +11172,7 @@ var listActionInputFieldChoicesPlugin = defineMethod({
|
|
|
10982
11172
|
itemType: "InputFieldChoice",
|
|
10983
11173
|
inputSchema: ListActionInputFieldChoicesInputSchema,
|
|
10984
11174
|
outputSchema: InputFieldChoiceItemSchema,
|
|
11175
|
+
skipOutputValidation: true,
|
|
10985
11176
|
formatter: inputFieldChoiceItemFormatter,
|
|
10986
11177
|
output: { type: "list", defaultPageSize: DEFAULT_PAGE_SIZE },
|
|
10987
11178
|
resolvers: {
|
|
@@ -11290,6 +11481,7 @@ var listConnectionsPlugin = defineMethod({
|
|
|
11290
11481
|
itemType: "Connection",
|
|
11291
11482
|
inputSchema: ListConnectionsQuerySchema,
|
|
11292
11483
|
outputSchema: connections.ConnectionItemSchema,
|
|
11484
|
+
skipOutputValidation: true,
|
|
11293
11485
|
formatter: connectionItemFormatter,
|
|
11294
11486
|
// `app` is an optional, search-backed filter: the controller offers the app
|
|
11295
11487
|
// search (skippable) so you can narrow connections to one app.
|
|
@@ -11431,6 +11623,7 @@ var listClientCredentialsPlugin = defineMethod({
|
|
|
11431
11623
|
itemType: "ClientCredentials",
|
|
11432
11624
|
inputSchema: ListClientCredentialsQuerySchema,
|
|
11433
11625
|
outputSchema: ClientCredentialsItemSchema,
|
|
11626
|
+
skipOutputValidation: true,
|
|
11434
11627
|
formatter: clientCredentialsItemFormatter,
|
|
11435
11628
|
output: {
|
|
11436
11629
|
type: "list",
|
|
@@ -11471,6 +11664,7 @@ var createClientCredentialsPlugin = defineMethod({
|
|
|
11471
11664
|
itemType: "ClientCredentials",
|
|
11472
11665
|
inputSchema: CreateClientCredentialsSchema,
|
|
11473
11666
|
outputSchema: ClientCredentialsCreatedItemSchema,
|
|
11667
|
+
skipOutputValidation: true,
|
|
11474
11668
|
formatter: clientCredentialsCreatedItemFormatter,
|
|
11475
11669
|
confirm: "create-secret",
|
|
11476
11670
|
output: "item",
|
|
@@ -11537,6 +11731,7 @@ var getAppPlugin = defineMethod({
|
|
|
11537
11731
|
itemType: "App",
|
|
11538
11732
|
inputSchema: GetAppInputSchema,
|
|
11539
11733
|
outputSchema: AppItemSchema,
|
|
11734
|
+
skipOutputValidation: true,
|
|
11540
11735
|
output: "item",
|
|
11541
11736
|
formatter: appItemFormatter,
|
|
11542
11737
|
resolvers: { app: appKeyResolver },
|
|
@@ -11574,6 +11769,7 @@ var getConnectionPlugin = defineMethod({
|
|
|
11574
11769
|
itemType: "Connection",
|
|
11575
11770
|
inputSchema: GetConnectionInputSchema,
|
|
11576
11771
|
outputSchema: connections.ConnectionItemSchema,
|
|
11772
|
+
skipOutputValidation: true,
|
|
11577
11773
|
output: "item",
|
|
11578
11774
|
formatter: connectionItemFormatter,
|
|
11579
11775
|
resolvers: { connection: connectionIdGenericResolver },
|
|
@@ -11611,6 +11807,7 @@ var findFirstConnectionPlugin = defineMethod({
|
|
|
11611
11807
|
itemType: "Connection",
|
|
11612
11808
|
inputSchema: FindFirstConnectionSchema,
|
|
11613
11809
|
outputSchema: connections.ConnectionItemSchema,
|
|
11810
|
+
skipOutputValidation: true,
|
|
11614
11811
|
output: "item",
|
|
11615
11812
|
formatter: connectionItemFormatter,
|
|
11616
11813
|
run: async ({ imports, input }) => {
|
|
@@ -11646,6 +11843,7 @@ var findUniqueConnectionPlugin = defineMethod({
|
|
|
11646
11843
|
itemType: "Connection",
|
|
11647
11844
|
inputSchema: FindUniqueConnectionSchema,
|
|
11648
11845
|
outputSchema: connections.ConnectionItemSchema,
|
|
11846
|
+
skipOutputValidation: true,
|
|
11649
11847
|
output: "item",
|
|
11650
11848
|
formatter: connectionItemFormatter,
|
|
11651
11849
|
run: async ({ imports, input }) => {
|
|
@@ -11774,6 +11972,7 @@ var getProfilePlugin = defineMethod({
|
|
|
11774
11972
|
categories: ["account"],
|
|
11775
11973
|
itemType: "Profile",
|
|
11776
11974
|
outputSchema: UserProfileItemSchema,
|
|
11975
|
+
skipOutputValidation: true,
|
|
11777
11976
|
run: async ({ imports }) => {
|
|
11778
11977
|
const api = imports.api;
|
|
11779
11978
|
const profile = await api.get("/zapier/api/v4/profile/", {
|
|
@@ -11832,6 +12031,7 @@ var getConnectionStartUrlPlugin = defineMethod({
|
|
|
11832
12031
|
itemType: "ConnectionStartUrl",
|
|
11833
12032
|
inputSchema: GetConnectionStartUrlSchema,
|
|
11834
12033
|
outputSchema: GetConnectionStartUrlItemSchema,
|
|
12034
|
+
skipOutputValidation: true,
|
|
11835
12035
|
output: "item",
|
|
11836
12036
|
resolvers: { app: appKeyResolver },
|
|
11837
12037
|
run: async ({ imports, input, annotate }) => {
|
|
@@ -11896,6 +12096,7 @@ var waitForNewConnectionPlugin = defineMethod({
|
|
|
11896
12096
|
itemType: "Connection",
|
|
11897
12097
|
inputSchema: WaitForNewConnectionSchema,
|
|
11898
12098
|
outputSchema: WaitForNewConnectionItemSchema,
|
|
12099
|
+
skipOutputValidation: true,
|
|
11899
12100
|
output: "item",
|
|
11900
12101
|
resolvers: { app: appKeyResolver },
|
|
11901
12102
|
run: async ({ imports, input, annotate }) => {
|
|
@@ -12009,6 +12210,7 @@ var createConnectionPlugin = defineMethod({
|
|
|
12009
12210
|
itemType: "Connection",
|
|
12010
12211
|
inputSchema: CreateConnectionSchema,
|
|
12011
12212
|
outputSchema: CreateConnectionItemSchema,
|
|
12213
|
+
skipOutputValidation: true,
|
|
12012
12214
|
output: "item",
|
|
12013
12215
|
resolvers: { app: appKeyResolver },
|
|
12014
12216
|
formatter: defineFormatter({
|
|
@@ -12074,6 +12276,10 @@ var listAuthenticationsPlugin = defineMethod({
|
|
|
12074
12276
|
deprecation: { message: "Use listConnections instead." },
|
|
12075
12277
|
itemType: "Connection",
|
|
12076
12278
|
outputSchema: connections.ConnectionItemSchema,
|
|
12279
|
+
// Matches `listConnections`: an alias must not enforce a schema its target
|
|
12280
|
+
// passes through, or the deprecated name strips (or rejects) responses the
|
|
12281
|
+
// supported name returns intact.
|
|
12282
|
+
skipOutputValidation: true,
|
|
12077
12283
|
formatter: connectionItemFormatter,
|
|
12078
12284
|
run: async ({ imports, input }) => {
|
|
12079
12285
|
return await imports.listConnections(input);
|
|
@@ -12091,6 +12297,10 @@ var getAuthenticationPlugin = defineMethod({
|
|
|
12091
12297
|
type: "item",
|
|
12092
12298
|
itemType: "Connection",
|
|
12093
12299
|
outputSchema: connections.ConnectionItemSchema,
|
|
12300
|
+
// Inert while the output is `raw` (that mode never validates), set so every
|
|
12301
|
+
// method declaring an `outputSchema` states its stance, and so switching this
|
|
12302
|
+
// alias to `item` keeps mirroring `getConnection`'s opt-out.
|
|
12303
|
+
skipOutputValidation: true,
|
|
12094
12304
|
formatter: connectionItemFormatter,
|
|
12095
12305
|
run: ({ imports, input }) => {
|
|
12096
12306
|
return imports.getConnection(input);
|
|
@@ -12108,6 +12318,7 @@ var findFirstAuthenticationPlugin = defineMethod({
|
|
|
12108
12318
|
type: "item",
|
|
12109
12319
|
itemType: "Connection",
|
|
12110
12320
|
outputSchema: connections.ConnectionItemSchema,
|
|
12321
|
+
skipOutputValidation: true,
|
|
12111
12322
|
formatter: connectionItemFormatter,
|
|
12112
12323
|
run: ({ imports, input }) => {
|
|
12113
12324
|
return imports.findFirstConnection(input);
|
|
@@ -12125,6 +12336,7 @@ var findUniqueAuthenticationPlugin = defineMethod({
|
|
|
12125
12336
|
type: "item",
|
|
12126
12337
|
itemType: "Connection",
|
|
12127
12338
|
outputSchema: connections.ConnectionItemSchema,
|
|
12339
|
+
skipOutputValidation: true,
|
|
12128
12340
|
formatter: connectionItemFormatter,
|
|
12129
12341
|
run: ({ imports, input }) => {
|
|
12130
12342
|
return imports.findUniqueConnection(input);
|
|
@@ -12146,6 +12358,10 @@ var listInputFieldsDeprecatedPlugin = defineMethod({
|
|
|
12146
12358
|
deprecation: { message: "Use listActionInputFields instead." },
|
|
12147
12359
|
itemType: "RootField",
|
|
12148
12360
|
outputSchema: RootFieldItemSchema,
|
|
12361
|
+
// Matches `listActionInputFields`: an alias must not enforce a schema its
|
|
12362
|
+
// target passes through, or the deprecated name strips (or rejects)
|
|
12363
|
+
// responses the supported name returns intact.
|
|
12364
|
+
skipOutputValidation: true,
|
|
12149
12365
|
formatter: rootFieldItemFormatter,
|
|
12150
12366
|
run: async ({ imports, input }) => {
|
|
12151
12367
|
return await imports.listActionInputFields(input);
|
|
@@ -12160,6 +12376,8 @@ var listInputFieldChoicesDeprecatedPlugin = defineMethod({
|
|
|
12160
12376
|
deprecation: { message: "Use listActionInputFieldChoices instead." },
|
|
12161
12377
|
itemType: "InputFieldChoiceItem",
|
|
12162
12378
|
outputSchema: InputFieldChoiceItemSchema,
|
|
12379
|
+
// See `listInputFields` above: the alias mirrors its target's opt-out.
|
|
12380
|
+
skipOutputValidation: true,
|
|
12163
12381
|
formatter: inputFieldChoiceItemFormatter,
|
|
12164
12382
|
run: async ({ imports, input }) => {
|
|
12165
12383
|
return await imports.listActionInputFieldChoices(input);
|
|
@@ -12327,6 +12545,7 @@ var createTriggerInboxPlugin = defineMethod({
|
|
|
12327
12545
|
itemType: "TriggerInbox",
|
|
12328
12546
|
inputSchema: CreateTriggerInboxSchema,
|
|
12329
12547
|
outputSchema: TriggerInboxItemSchema,
|
|
12548
|
+
skipOutputValidation: true,
|
|
12330
12549
|
output: "item",
|
|
12331
12550
|
formatter: triggerInboxItemFormatter,
|
|
12332
12551
|
annotator: deriveReadOperation,
|
|
@@ -12432,6 +12651,7 @@ var ensureTriggerInboxPlugin = defineMethod({
|
|
|
12432
12651
|
itemType: "TriggerInbox",
|
|
12433
12652
|
inputSchema: EnsureTriggerInboxInputSchema,
|
|
12434
12653
|
outputSchema: TriggerInboxItemSchema,
|
|
12654
|
+
skipOutputValidation: true,
|
|
12435
12655
|
output: "item",
|
|
12436
12656
|
formatter: triggerInboxItemFormatter,
|
|
12437
12657
|
annotator: deriveReadOperation,
|
|
@@ -12532,6 +12752,7 @@ var listTriggerInboxesPlugin = defineMethod({
|
|
|
12532
12752
|
itemType: "TriggerInbox",
|
|
12533
12753
|
inputSchema: ListTriggerInboxesSchema,
|
|
12534
12754
|
outputSchema: TriggerInboxItemSchema,
|
|
12755
|
+
skipOutputValidation: true,
|
|
12535
12756
|
// The handler returns a raw `{ data, next }` wire envelope, so `adaptPage`
|
|
12536
12757
|
// normalizes it into an `SdkPage` (cursor pulled from the `next` URL).
|
|
12537
12758
|
output: {
|
|
@@ -12579,6 +12800,7 @@ var getTriggerInboxPlugin = defineMethod({
|
|
|
12579
12800
|
itemType: "TriggerInbox",
|
|
12580
12801
|
inputSchema: GetTriggerInboxSchema,
|
|
12581
12802
|
outputSchema: TriggerInboxItemSchema,
|
|
12803
|
+
skipOutputValidation: true,
|
|
12582
12804
|
output: "item",
|
|
12583
12805
|
formatter: triggerInboxItemFormatter,
|
|
12584
12806
|
resolvers: { inbox: triggerInboxResolver },
|
|
@@ -12612,6 +12834,7 @@ var updateTriggerInboxPlugin = defineMethod({
|
|
|
12612
12834
|
itemType: "TriggerInbox",
|
|
12613
12835
|
inputSchema: UpdateTriggerInboxSchema,
|
|
12614
12836
|
outputSchema: TriggerInboxItemSchema,
|
|
12837
|
+
skipOutputValidation: true,
|
|
12615
12838
|
output: "item",
|
|
12616
12839
|
formatter: triggerInboxItemFormatter,
|
|
12617
12840
|
resolvers: { inbox: triggerInboxResolver },
|
|
@@ -12647,6 +12870,7 @@ var deleteTriggerInboxPlugin = defineMethod({
|
|
|
12647
12870
|
itemType: "TriggerInbox",
|
|
12648
12871
|
inputSchema: DeleteTriggerInboxSchema,
|
|
12649
12872
|
outputSchema: TriggerInboxItemSchema,
|
|
12873
|
+
skipOutputValidation: true,
|
|
12650
12874
|
// Delete returns the deleted inbox verbatim (the legacy `{ data }` surface),
|
|
12651
12875
|
// so `output: "raw"` passes the handler's shape through unwrapped.
|
|
12652
12876
|
output: "raw",
|
|
@@ -12681,6 +12905,7 @@ var pauseTriggerInboxPlugin = defineMethod({
|
|
|
12681
12905
|
itemType: "TriggerInbox",
|
|
12682
12906
|
inputSchema: PauseTriggerInboxSchema,
|
|
12683
12907
|
outputSchema: TriggerInboxItemSchema,
|
|
12908
|
+
skipOutputValidation: true,
|
|
12684
12909
|
output: "item",
|
|
12685
12910
|
formatter: triggerInboxItemFormatter,
|
|
12686
12911
|
resolvers: { inbox: triggerInboxResolver },
|
|
@@ -12712,6 +12937,7 @@ var resumeTriggerInboxPlugin = defineMethod({
|
|
|
12712
12937
|
itemType: "TriggerInbox",
|
|
12713
12938
|
inputSchema: ResumeTriggerInboxSchema,
|
|
12714
12939
|
outputSchema: TriggerInboxItemSchema,
|
|
12940
|
+
skipOutputValidation: true,
|
|
12715
12941
|
output: "item",
|
|
12716
12942
|
formatter: triggerInboxItemFormatter,
|
|
12717
12943
|
resolvers: { inbox: triggerInboxResolver },
|
|
@@ -12806,6 +13032,7 @@ var listTriggerInboxMessagesPlugin = defineMethod({
|
|
|
12806
13032
|
itemType: "TriggerMessage",
|
|
12807
13033
|
inputSchema: ListTriggerInboxMessagesSchema,
|
|
12808
13034
|
outputSchema: TriggerMessageItemSchema,
|
|
13035
|
+
skipOutputValidation: true,
|
|
12809
13036
|
// The handler returns a raw `{ data, next }` wire envelope, so `adaptPage`
|
|
12810
13037
|
// normalizes it into an `SdkPage` (cursor pulled from the `next` URL).
|
|
12811
13038
|
output: {
|
|
@@ -12881,6 +13108,7 @@ var leaseTriggerInboxMessagesPlugin = defineMethod({
|
|
|
12881
13108
|
itemType: "TriggerInboxLease",
|
|
12882
13109
|
inputSchema: LeaseTriggerInboxMessagesSchema,
|
|
12883
13110
|
outputSchema: LeaseTriggerInboxMessagesItemSchema,
|
|
13111
|
+
skipOutputValidation: true,
|
|
12884
13112
|
output: "item",
|
|
12885
13113
|
resolvers: {
|
|
12886
13114
|
inbox: triggerInboxResolver,
|
|
@@ -12942,6 +13170,7 @@ var ackTriggerInboxMessagesPlugin = defineMethod({
|
|
|
12942
13170
|
itemType: "TriggerInboxAck",
|
|
12943
13171
|
inputSchema: AckTriggerInboxMessagesSchema,
|
|
12944
13172
|
outputSchema: AckTriggerInboxMessagesItemSchema,
|
|
13173
|
+
skipOutputValidation: true,
|
|
12945
13174
|
output: "item",
|
|
12946
13175
|
resolvers: {
|
|
12947
13176
|
inbox: triggerInboxResolver,
|
|
@@ -12992,6 +13221,7 @@ var releaseTriggerInboxMessagesPlugin = defineMethod({
|
|
|
12992
13221
|
itemType: "TriggerInboxRelease",
|
|
12993
13222
|
inputSchema: ReleaseTriggerInboxMessagesSchema,
|
|
12994
13223
|
outputSchema: ReleaseTriggerInboxMessagesItemSchema,
|
|
13224
|
+
skipOutputValidation: true,
|
|
12995
13225
|
output: "item",
|
|
12996
13226
|
resolvers: {
|
|
12997
13227
|
inbox: triggerInboxResolver,
|
|
@@ -13704,6 +13934,7 @@ var listTriggersPlugin = defineMethod({
|
|
|
13704
13934
|
itemType: "Action",
|
|
13705
13935
|
inputSchema: ListTriggersSchema,
|
|
13706
13936
|
outputSchema: ActionItemSchema,
|
|
13937
|
+
skipOutputValidation: true,
|
|
13707
13938
|
output: { type: "list", defaultPageSize: DEFAULT_PAGE_SIZE },
|
|
13708
13939
|
formatter: actionItemFormatter,
|
|
13709
13940
|
resolvers: { app: appKeyResolver },
|
|
@@ -13737,6 +13968,7 @@ var listTriggerInputFieldsPlugin = defineMethod({
|
|
|
13737
13968
|
itemType: "RootField",
|
|
13738
13969
|
inputSchema: ListTriggerInputFieldsSchema,
|
|
13739
13970
|
outputSchema: RootFieldItemSchema,
|
|
13971
|
+
skipOutputValidation: true,
|
|
13740
13972
|
output: { type: "list", defaultPageSize: DEFAULT_PAGE_SIZE },
|
|
13741
13973
|
formatter: rootFieldItemFormatter,
|
|
13742
13974
|
annotator: deriveReadOperation,
|
|
@@ -13784,6 +14016,7 @@ var listTriggerInputFieldChoicesPlugin = defineMethod({
|
|
|
13784
14016
|
itemType: "InputFieldChoice",
|
|
13785
14017
|
inputSchema: ListTriggerInputFieldChoicesSchema,
|
|
13786
14018
|
outputSchema: InputFieldChoiceItemSchema,
|
|
14019
|
+
skipOutputValidation: true,
|
|
13787
14020
|
output: { type: "list", defaultPageSize: DEFAULT_PAGE_SIZE },
|
|
13788
14021
|
formatter: inputFieldChoiceItemFormatter,
|
|
13789
14022
|
annotator: deriveReadOperation,
|
|
@@ -13971,6 +14204,7 @@ var listTablesPlugin = defineMethod({
|
|
|
13971
14204
|
itemType: "Table",
|
|
13972
14205
|
inputSchema: ListTablesOptionsSchema,
|
|
13973
14206
|
outputSchema: TableItemSchema,
|
|
14207
|
+
skipOutputValidation: true,
|
|
13974
14208
|
output: "list",
|
|
13975
14209
|
run: async ({ imports, input }) => {
|
|
13976
14210
|
return await imports.listTablesInternal({
|
|
@@ -13999,6 +14233,7 @@ var getTablePlugin = defineMethod({
|
|
|
13999
14233
|
itemType: "Table",
|
|
14000
14234
|
inputSchema: GetTableOptionsInputSchema,
|
|
14001
14235
|
outputSchema: TableItemSchema,
|
|
14236
|
+
skipOutputValidation: true,
|
|
14002
14237
|
output: "item",
|
|
14003
14238
|
resolvers: { table: tableIdResolver },
|
|
14004
14239
|
run: async ({ imports, input }) => {
|
|
@@ -14059,6 +14294,7 @@ var createTablePlugin = defineMethod({
|
|
|
14059
14294
|
type: "create",
|
|
14060
14295
|
inputSchema: CreateTableOptionsSchema,
|
|
14061
14296
|
outputSchema: TableItemSchema,
|
|
14297
|
+
skipOutputValidation: true,
|
|
14062
14298
|
output: "item",
|
|
14063
14299
|
resolvers: { name: tableNameResolver },
|
|
14064
14300
|
run: async ({ imports, input }) => {
|
|
@@ -14095,6 +14331,7 @@ var listTableFieldsPlugin = defineMethod({
|
|
|
14095
14331
|
type: "list",
|
|
14096
14332
|
inputSchema: ListTableFieldsOptionsInputSchema,
|
|
14097
14333
|
outputSchema: FieldItemSchema,
|
|
14334
|
+
skipOutputValidation: true,
|
|
14098
14335
|
output: "item",
|
|
14099
14336
|
formatter: tableFieldItemFormatter,
|
|
14100
14337
|
resolvers: { table: tableIdResolver },
|
|
@@ -14164,6 +14401,7 @@ var createTableFieldsPlugin = defineMethod({
|
|
|
14164
14401
|
returnType: "FieldItem[]",
|
|
14165
14402
|
inputSchema: CreateTableFieldsOptionsInputSchema,
|
|
14166
14403
|
outputSchema: FieldItemSchema,
|
|
14404
|
+
skipOutputValidation: true,
|
|
14167
14405
|
// Item output with an array payload: callers get `{ data: FieldItem[] }`
|
|
14168
14406
|
// directly rather than a paginated list.
|
|
14169
14407
|
output: "item",
|
|
@@ -14303,6 +14541,7 @@ var getTableRecordPlugin = defineMethod({
|
|
|
14303
14541
|
itemType: "Record",
|
|
14304
14542
|
inputSchema: GetTableRecordOptionsInputSchema,
|
|
14305
14543
|
outputSchema: RecordItemSchema,
|
|
14544
|
+
skipOutputValidation: true,
|
|
14306
14545
|
output: "item",
|
|
14307
14546
|
resolvers: { table: tableIdResolver, record: tableRecordIdResolver },
|
|
14308
14547
|
formatter: tableRecordFormatter,
|
|
@@ -14394,6 +14633,7 @@ var listTableRecordsPlugin = defineMethod({
|
|
|
14394
14633
|
itemType: "Record",
|
|
14395
14634
|
inputSchema: ListTableRecordsOptionsInputSchema,
|
|
14396
14635
|
outputSchema: RecordItemSchema,
|
|
14636
|
+
skipOutputValidation: true,
|
|
14397
14637
|
// The handler already returns a clean `{ data, nextCursor }` page, so the
|
|
14398
14638
|
// standard list output (no `adaptPage`) applies.
|
|
14399
14639
|
output: { type: "list", defaultPageSize: DEFAULT_PAGE_SIZE },
|
|
@@ -14503,6 +14743,7 @@ var createTableRecordsPlugin = defineMethod({
|
|
|
14503
14743
|
returnType: "RecordItem[]",
|
|
14504
14744
|
inputSchema: CreateTableRecordsOptionsInputSchema,
|
|
14505
14745
|
outputSchema: RecordItemSchema,
|
|
14746
|
+
skipOutputValidation: true,
|
|
14506
14747
|
// Item output with an array payload: callers get `{ data: RecordItem[] }`
|
|
14507
14748
|
// directly rather than a paginated list.
|
|
14508
14749
|
output: "item",
|
|
@@ -14615,6 +14856,7 @@ var updateTableRecordsPlugin = defineMethod({
|
|
|
14615
14856
|
returnType: "RecordItem[]",
|
|
14616
14857
|
inputSchema: UpdateTableRecordsOptionsInputSchema,
|
|
14617
14858
|
outputSchema: RecordItemSchema,
|
|
14859
|
+
skipOutputValidation: true,
|
|
14618
14860
|
// Item output with an array payload: callers get `{ data: RecordItem[] }`
|
|
14619
14861
|
// directly rather than a paginated list.
|
|
14620
14862
|
output: "item",
|