@zapier/zapier-sdk 0.33.4 → 0.34.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 +6 -0
- package/README.md +36 -36
- package/dist/index.cjs +113 -46
- package/dist/index.d.mts +21 -6
- package/dist/index.mjs +113 -46
- package/dist/plugins/listInputFieldChoices/schemas.d.ts.map +1 -1
- package/dist/plugins/listInputFieldChoices/schemas.js +3 -1
- package/dist/plugins/listInputFields/schemas.d.ts.map +1 -1
- package/dist/plugins/listInputFields/schemas.js +3 -1
- package/dist/plugins/registry/index.d.ts.map +1 -1
- package/dist/plugins/registry/index.js +1 -0
- package/dist/plugins/runAction/schemas.d.ts.map +1 -1
- package/dist/plugins/runAction/schemas.js +3 -1
- package/dist/types/errors.d.ts +14 -0
- package/dist/types/errors.d.ts.map +1 -1
- package/dist/types/errors.js +13 -0
- package/dist/types/functions.d.ts +4 -5
- package/dist/types/functions.d.ts.map +1 -1
- package/dist/types/sdk.d.ts +2 -0
- package/dist/types/sdk.d.ts.map +1 -1
- package/dist/utils/pagination-utils.d.ts +8 -2
- package/dist/utils/pagination-utils.d.ts.map +1 -1
- package/dist/utils/pagination-utils.js +101 -44
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"functions.d.ts","sourceRoot":"","sources":["../../src/types/functions.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAC9C;;GAEG;AAGH,MAAM,WAAW,eAAe;IAC9B,8BAA8B;IAC9B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,2BAA2B;IAC3B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,2DAA2D;IAC3D,QAAQ,CAAC,EAAE,MAAM,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAAC;IAC7C,2CAA2C;IAC3C,GAAG,CAAC,EAAE,SAAS,CAAC;IAChB,2BAA2B;IAC3B,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,kCAAkC;IAClC,KAAK,CAAC,EAAE,OAAO,UAAU,CAAC,KAAK,CAAC;CACjC;AAGD,MAAM,MAAM,oBAAoB,CAAC,QAAQ,EAAE,KAAK,IAAI,CAClD,OAAO,EAAE,QAAQ,KACd,OAAO,CAAC
|
|
1
|
+
{"version":3,"file":"functions.d.ts","sourceRoot":"","sources":["../../src/types/functions.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAC9C;;GAEG;AAGH,MAAM,WAAW,eAAe;IAC9B,8BAA8B;IAC9B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,2BAA2B;IAC3B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,2DAA2D;IAC3D,QAAQ,CAAC,EAAE,MAAM,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAAC;IAC7C,2CAA2C;IAC3C,GAAG,CAAC,EAAE,SAAS,CAAC;IAChB,2BAA2B;IAC3B,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,kCAAkC;IAClC,KAAK,CAAC,EAAE,OAAO,UAAU,CAAC,KAAK,CAAC;CACjC;AAED,MAAM,WAAW,OAAO,CAAC,CAAC,GAAG,OAAO;IAClC,IAAI,EAAE,CAAC,EAAE,CAAC;IACV,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAGD,MAAM,MAAM,oBAAoB,CAAC,QAAQ,EAAE,KAAK,IAAI,CAClD,OAAO,EAAE,QAAQ,KACd,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,GAC1B,aAAa,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,GAAG;IAC9B,KAAK,IAAI,aAAa,CAAC,KAAK,CAAC,CAAC;CAC/B,CAAC"}
|
package/dist/types/sdk.d.ts
CHANGED
|
@@ -126,6 +126,8 @@ export interface FunctionRegistryEntry {
|
|
|
126
126
|
deprecatedParameters?: string[];
|
|
127
127
|
/** Short flag aliases for CLI options (e.g., { request: "X", header: "H" }) */
|
|
128
128
|
aliases?: Record<string, string>;
|
|
129
|
+
/** Defaults to true. Set to false to suppress --json (e.g. login/logout/init). */
|
|
130
|
+
supportsJsonOutput: boolean;
|
|
129
131
|
}
|
|
130
132
|
export interface FunctionDeprecation {
|
|
131
133
|
/** User-facing deprecation message for why/how to migrate */
|
package/dist/types/sdk.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sdk.d.ts","sourceRoot":"","sources":["../../src/types/sdk.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"sdk.d.ts","sourceRoot":"","sources":["../../src/types/sdk.ts"],"names":[],"mappings":"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"}
|
|
@@ -7,14 +7,20 @@ type TPageOptions<TOptions> = TOptions extends undefined ? {
|
|
|
7
7
|
maxItems?: number;
|
|
8
8
|
pageSize?: number;
|
|
9
9
|
};
|
|
10
|
+
export declare function decodeIncomingCursor(incoming?: string): {
|
|
11
|
+
offset: number;
|
|
12
|
+
cursor: string | undefined;
|
|
13
|
+
};
|
|
10
14
|
export declare function createPrefixedCursor(prefix: string, cursor: string | undefined): string;
|
|
11
15
|
export declare function splitPrefixedCursor(cursor: string | undefined, prefixes?: string[]): [string | undefined, string | undefined];
|
|
12
16
|
/**
|
|
13
|
-
* Utility for paginating through API endpoints that return cursor-based pages
|
|
17
|
+
* Utility for paginating through API endpoints that return cursor-based pages.
|
|
18
|
+
* Accepts and yields SDK-encoded cursor envelopes. Any incoming cursor is decoded
|
|
19
|
+
* before being passed to the page function; all outgoing cursors are encoded.
|
|
14
20
|
*
|
|
15
21
|
* @param pageFunction - Function that fetches a single page with {data, nextCursor} structure
|
|
16
22
|
* @param pageOptions - Options to pass to the page function (cursor will be managed automatically)
|
|
17
|
-
* @returns Async iterator that yields pages
|
|
23
|
+
* @returns Async iterator that yields pages with encoded cursors
|
|
18
24
|
*/
|
|
19
25
|
export declare function paginateMaxItems<TOptions, TPage extends {
|
|
20
26
|
data: any[];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pagination-utils.d.ts","sourceRoot":"","sources":["../../src/utils/pagination-utils.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"pagination-utils.d.ts","sourceRoot":"","sources":["../../src/utils/pagination-utils.ts"],"names":[],"mappings":"AAsBA,KAAK,YAAY,CAAC,QAAQ,IAAI,QAAQ,SAAS,SAAS,GACpD;IAAE,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;CAAE,GACzD,QAAQ,GAAG;IAAE,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC;AAmCzE,wBAAgB,oBAAoB,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG;IACvD,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC;CAC5B,CAyBA;AAED,wBAAgB,oBAAoB,CAClC,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,MAAM,GAAG,SAAS,GACzB,MAAM,CAKR;AAED,wBAAgB,mBAAmB,CACjC,MAAM,EAAE,MAAM,GAAG,SAAS,EAC1B,QAAQ,CAAC,EAAE,MAAM,EAAE,GAClB,CAAC,MAAM,GAAG,SAAS,EAAE,MAAM,GAAG,SAAS,CAAC,CAkB1C;AAuDD;;;;;;;;GAQG;AACH,wBAAuB,gBAAgB,CACrC,QAAQ,EACR,KAAK,SAAS;IAAE,IAAI,EAAE,GAAG,EAAE,CAAC;IAAC,UAAU,CAAC,EAAE,MAAM,CAAA;CAAE,EAElD,YAAY,EAAE,CACZ,OAAO,EAAE,QAAQ,GAAG;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB,KACE,OAAO,CAAC,KAAK,CAAC,EACnB,WAAW,CAAC,EAAE,YAAY,CAAC,QAAQ,CAAC,GACnC,qBAAqB,CAAC,KAAK,CAAC,CAkB9B;AAED,wBAAuB,gBAAgB,CACrC,QAAQ,EACR,KAAK,SAAS;IAAE,IAAI,EAAE,GAAG,EAAE,CAAC;IAAC,UAAU,CAAC,EAAE,MAAM,CAAA;CAAE,EAElD,YAAY,EAAE,CACZ,OAAO,EAAE,QAAQ,GAAG;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB,KACE,OAAO,CAAC,KAAK,CAAC,EACnB,WAAW,CAAC,EAAE,YAAY,CAAC,QAAQ,CAAC,GACnC,qBAAqB,CAAC,KAAK,CAAC,CA2H9B;AAED,eAAO,MAAM,QAAQ,yBAAmB,CAAC"}
|
|
@@ -1,29 +1,53 @@
|
|
|
1
|
-
const
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
1
|
+
const CURSOR_VERSION = 1;
|
|
2
|
+
const CURSOR_SOURCE = {
|
|
3
|
+
API: "api",
|
|
4
|
+
SDK: "sdk",
|
|
5
|
+
};
|
|
6
|
+
function encodeBase64(str) {
|
|
7
|
+
return btoa(Array.from(new TextEncoder().encode(str), (b) => String.fromCharCode(b)).join(""));
|
|
8
|
+
}
|
|
9
|
+
function decodeBase64(str) {
|
|
10
|
+
return new TextDecoder().decode(Uint8Array.from(atob(str), (c) => c.charCodeAt(0)));
|
|
11
|
+
}
|
|
12
|
+
function encodeApiCursor(cursor) {
|
|
13
|
+
const envelope = {
|
|
14
|
+
v: CURSOR_VERSION,
|
|
15
|
+
source: CURSOR_SOURCE.API,
|
|
16
|
+
cursor,
|
|
17
|
+
};
|
|
18
|
+
return encodeBase64(JSON.stringify(envelope));
|
|
19
|
+
}
|
|
20
|
+
function encodeSdkCursor(offset, cursor) {
|
|
21
|
+
const envelope = {
|
|
22
|
+
v: CURSOR_VERSION,
|
|
23
|
+
source: CURSOR_SOURCE.SDK,
|
|
24
|
+
cursor,
|
|
25
|
+
offset,
|
|
26
|
+
};
|
|
27
|
+
return encodeBase64(JSON.stringify(envelope));
|
|
28
|
+
}
|
|
29
|
+
export function decodeIncomingCursor(incoming) {
|
|
30
|
+
if (!incoming) {
|
|
31
|
+
return { offset: 0, cursor: undefined };
|
|
5
32
|
}
|
|
6
33
|
try {
|
|
7
|
-
const
|
|
8
|
-
|
|
9
|
-
|
|
34
|
+
const decoded = decodeBase64(incoming);
|
|
35
|
+
const envelope = JSON.parse(decoded);
|
|
36
|
+
if (envelope.v !== CURSOR_VERSION) {
|
|
37
|
+
return { offset: 0, cursor: incoming };
|
|
10
38
|
}
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
return [0, cursor];
|
|
39
|
+
if (envelope.source === CURSOR_SOURCE.SDK) {
|
|
40
|
+
return { offset: envelope.offset ?? 0, cursor: envelope.cursor };
|
|
14
41
|
}
|
|
15
|
-
if (
|
|
16
|
-
return
|
|
42
|
+
if (envelope.source === CURSOR_SOURCE.API) {
|
|
43
|
+
return { offset: 0, cursor: envelope.cursor };
|
|
17
44
|
}
|
|
18
|
-
return
|
|
45
|
+
return { offset: 0, cursor: incoming };
|
|
19
46
|
}
|
|
20
47
|
catch {
|
|
21
|
-
return
|
|
48
|
+
return { offset: 0, cursor: incoming };
|
|
22
49
|
}
|
|
23
50
|
}
|
|
24
|
-
function createOffsetCursor(offset, currentCursor) {
|
|
25
|
-
return JSON.stringify([offsetCursorMarker, offset, currentCursor]);
|
|
26
|
-
}
|
|
27
51
|
export function createPrefixedCursor(prefix, cursor) {
|
|
28
52
|
if (!cursor) {
|
|
29
53
|
return `${prefix}::`;
|
|
@@ -45,13 +69,10 @@ export function splitPrefixedCursor(cursor, prefixes) {
|
|
|
45
69
|
return [prefix, cursor];
|
|
46
70
|
}
|
|
47
71
|
/**
|
|
48
|
-
*
|
|
49
|
-
*
|
|
50
|
-
* @param pageFunction - Function that fetches a single page with {data, nextCursor} structure
|
|
51
|
-
* @param pageOptions - Options to pass to the page function (cursor will be managed automatically)
|
|
52
|
-
* @returns Async iterator that yields pages
|
|
72
|
+
* Internal primitive: paginates through a page function using raw (unencoded) cursors.
|
|
73
|
+
* Encoding and decoding of cursors is the responsibility of the public wrappers.
|
|
53
74
|
*/
|
|
54
|
-
|
|
75
|
+
async function* paginateMaxItemsWithUnencodedCursor(pageFunction, pageOptions) {
|
|
55
76
|
let cursor = pageOptions?.cursor;
|
|
56
77
|
let totalItemsYielded = 0;
|
|
57
78
|
const maxItems = pageOptions?.maxItems;
|
|
@@ -68,12 +89,11 @@ export async function* paginateMaxItems(pageFunction, pageOptions) {
|
|
|
68
89
|
if (maxItems !== undefined) {
|
|
69
90
|
const remainingItems = maxItems - totalItemsYielded;
|
|
70
91
|
if (page.data.length >= remainingItems) {
|
|
71
|
-
|
|
92
|
+
yield {
|
|
72
93
|
...page,
|
|
73
94
|
data: page.data.slice(0, remainingItems),
|
|
74
95
|
nextCursor: undefined,
|
|
75
96
|
};
|
|
76
|
-
yield yieldedPage;
|
|
77
97
|
break;
|
|
78
98
|
}
|
|
79
99
|
}
|
|
@@ -82,18 +102,60 @@ export async function* paginateMaxItems(pageFunction, pageOptions) {
|
|
|
82
102
|
cursor = page.nextCursor;
|
|
83
103
|
} while (cursor);
|
|
84
104
|
}
|
|
105
|
+
/**
|
|
106
|
+
* Utility for paginating through API endpoints that return cursor-based pages.
|
|
107
|
+
* Accepts and yields SDK-encoded cursor envelopes. Any incoming cursor is decoded
|
|
108
|
+
* before being passed to the page function; all outgoing cursors are encoded.
|
|
109
|
+
*
|
|
110
|
+
* @param pageFunction - Function that fetches a single page with {data, nextCursor} structure
|
|
111
|
+
* @param pageOptions - Options to pass to the page function (cursor will be managed automatically)
|
|
112
|
+
* @returns Async iterator that yields pages with encoded cursors
|
|
113
|
+
*/
|
|
114
|
+
export async function* paginateMaxItems(pageFunction, pageOptions) {
|
|
115
|
+
const { cursor } = decodeIncomingCursor(pageOptions?.cursor);
|
|
116
|
+
const options = {
|
|
117
|
+
...(pageOptions || {}),
|
|
118
|
+
cursor,
|
|
119
|
+
};
|
|
120
|
+
for await (const page of paginateMaxItemsWithUnencodedCursor(pageFunction, options)) {
|
|
121
|
+
yield {
|
|
122
|
+
...page,
|
|
123
|
+
nextCursor: page.nextCursor
|
|
124
|
+
? encodeApiCursor(page.nextCursor)
|
|
125
|
+
: undefined,
|
|
126
|
+
};
|
|
127
|
+
}
|
|
128
|
+
}
|
|
85
129
|
export async function* paginateBuffered(pageFunction, pageOptions) {
|
|
86
130
|
const pageSize = pageOptions?.pageSize;
|
|
87
|
-
const
|
|
131
|
+
const { offset: cursorOffset, cursor: initialCursor } = decodeIncomingCursor(pageOptions?.cursor);
|
|
132
|
+
const requestedMaxItems = pageOptions?.maxItems;
|
|
88
133
|
const options = {
|
|
89
134
|
...(pageOptions || {}),
|
|
90
|
-
cursor:
|
|
135
|
+
cursor: initialCursor,
|
|
136
|
+
// SDK cursors can carry an offset into a raw backend page. Since maxItems
|
|
137
|
+
// is expected to be relative to the resumed position, we add that offset
|
|
138
|
+
// so raw pagination still yields enough items after offset slicing.
|
|
139
|
+
maxItems: requestedMaxItems !== undefined && cursorOffset > 0
|
|
140
|
+
? requestedMaxItems + cursorOffset
|
|
141
|
+
: requestedMaxItems,
|
|
91
142
|
};
|
|
92
|
-
|
|
143
|
+
if (!pageSize) {
|
|
144
|
+
for await (const page of paginateMaxItemsWithUnencodedCursor(pageFunction, options)) {
|
|
145
|
+
yield {
|
|
146
|
+
...page,
|
|
147
|
+
nextCursor: page.nextCursor
|
|
148
|
+
? encodeApiCursor(page.nextCursor)
|
|
149
|
+
: undefined,
|
|
150
|
+
};
|
|
151
|
+
}
|
|
152
|
+
return;
|
|
153
|
+
}
|
|
93
154
|
let bufferedPages = [];
|
|
94
155
|
let isFirstPage = true;
|
|
95
|
-
let
|
|
96
|
-
for await (let page of
|
|
156
|
+
let rawCursor;
|
|
157
|
+
for await (let page of paginateMaxItemsWithUnencodedCursor(pageFunction, options)) {
|
|
158
|
+
const nextRawCursor = page.nextCursor;
|
|
97
159
|
if (isFirstPage) {
|
|
98
160
|
isFirstPage = false;
|
|
99
161
|
if (cursorOffset) {
|
|
@@ -103,16 +165,11 @@ export async function* paginateBuffered(pageFunction, pageOptions) {
|
|
|
103
165
|
};
|
|
104
166
|
}
|
|
105
167
|
}
|
|
106
|
-
|
|
107
|
-
yield page;
|
|
108
|
-
cursor = page.nextCursor;
|
|
109
|
-
continue;
|
|
110
|
-
}
|
|
111
|
-
const bufferedLength = bufferedPages.reduce((acc, page) => acc + page.data.length, 0);
|
|
168
|
+
const bufferedLength = bufferedPages.reduce((acc, p) => acc + p.data.length, 0);
|
|
112
169
|
// If we don't have enough to fill a page, buffer this page.
|
|
113
170
|
if (bufferedLength + page.data.length < pageSize) {
|
|
114
171
|
bufferedPages.push(page);
|
|
115
|
-
|
|
172
|
+
rawCursor = nextRawCursor;
|
|
116
173
|
continue;
|
|
117
174
|
}
|
|
118
175
|
// Let's yield a page from our buffered pages.
|
|
@@ -125,24 +182,24 @@ export async function* paginateBuffered(pageFunction, pageOptions) {
|
|
|
125
182
|
yield {
|
|
126
183
|
...page,
|
|
127
184
|
data: pageItems,
|
|
128
|
-
nextCursor:
|
|
185
|
+
nextCursor: nextRawCursor ? encodeApiCursor(nextRawCursor) : undefined,
|
|
129
186
|
};
|
|
130
187
|
bufferedPages = [];
|
|
131
|
-
|
|
188
|
+
rawCursor = nextRawCursor;
|
|
132
189
|
continue;
|
|
133
190
|
}
|
|
134
191
|
// Yield our items with a cursor to offset into this page.
|
|
135
192
|
yield {
|
|
136
193
|
...page,
|
|
137
194
|
data: pageItems,
|
|
138
|
-
nextCursor:
|
|
195
|
+
nextCursor: encodeSdkCursor(page.data.length - remainingItems.length, rawCursor),
|
|
139
196
|
};
|
|
140
197
|
while (remainingItems.length > pageSize) {
|
|
141
|
-
const
|
|
198
|
+
const chunkItems = remainingItems.splice(0, pageSize);
|
|
142
199
|
yield {
|
|
143
200
|
...page,
|
|
144
|
-
data:
|
|
145
|
-
nextCursor:
|
|
201
|
+
data: chunkItems,
|
|
202
|
+
nextCursor: encodeSdkCursor(page.data.length - remainingItems.length, rawCursor),
|
|
146
203
|
};
|
|
147
204
|
}
|
|
148
205
|
bufferedPages = [
|
|
@@ -151,7 +208,7 @@ export async function* paginateBuffered(pageFunction, pageOptions) {
|
|
|
151
208
|
data: remainingItems,
|
|
152
209
|
},
|
|
153
210
|
];
|
|
154
|
-
|
|
211
|
+
rawCursor = nextRawCursor;
|
|
155
212
|
}
|
|
156
213
|
if (bufferedPages.length > 0) {
|
|
157
214
|
const lastBufferedPage = bufferedPages.slice(-1)[0];
|