@tryfinch/finch-api 5.1.0 → 5.3.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 +43 -0
- package/README.md +28 -21
- package/_shims/MultipartBody.d.ts +9 -0
- package/_shims/MultipartBody.d.ts.map +1 -0
- package/_shims/MultipartBody.js +16 -0
- package/_shims/MultipartBody.js.map +1 -0
- package/_shims/MultipartBody.mjs +12 -0
- package/_shims/MultipartBody.mjs.map +1 -0
- package/_shims/README.md +46 -0
- package/{src/_shims/ReadableStream-node.ts → _shims/auto/runtime-bun.d.ts} +2 -3
- package/_shims/auto/runtime-bun.d.ts.map +1 -0
- package/_shims/auto/runtime-bun.js +21 -0
- package/_shims/auto/runtime-bun.js.map +1 -0
- package/_shims/auto/runtime-bun.mjs +2 -0
- package/_shims/auto/runtime-bun.mjs.map +1 -0
- package/_shims/auto/runtime-node.d.ts +5 -0
- package/_shims/auto/runtime-node.d.ts.map +1 -0
- package/_shims/auto/runtime-node.js +21 -0
- package/_shims/auto/runtime-node.js.map +1 -0
- package/_shims/auto/runtime-node.mjs +2 -0
- package/_shims/auto/runtime-node.mjs.map +1 -0
- package/_shims/auto/runtime.d.ts +5 -0
- package/_shims/auto/runtime.d.ts.map +1 -0
- package/_shims/auto/runtime.js +21 -0
- package/_shims/auto/runtime.js.map +1 -0
- package/_shims/auto/runtime.mjs +2 -0
- package/_shims/auto/runtime.mjs.map +1 -0
- package/_shims/auto/types-node.d.ts +5 -0
- package/_shims/auto/types-node.d.ts.map +1 -0
- package/_shims/auto/types-node.js +21 -0
- package/_shims/auto/types-node.js.map +1 -0
- package/_shims/auto/types-node.mjs +2 -0
- package/_shims/auto/types-node.mjs.map +1 -0
- package/_shims/auto/types.d.ts +99 -0
- package/_shims/{ReadableStream.js → auto/types.js} +0 -2
- package/{src/_shims/ReadableStream.js → _shims/auto/types.mjs} +0 -2
- package/_shims/bun-runtime.d.ts +6 -0
- package/_shims/bun-runtime.d.ts.map +1 -0
- package/_shims/bun-runtime.js +14 -0
- package/_shims/bun-runtime.js.map +1 -0
- package/_shims/bun-runtime.mjs +10 -0
- package/_shims/bun-runtime.mjs.map +1 -0
- package/_shims/index.d.ts +79 -0
- package/_shims/index.js +13 -0
- package/_shims/index.mjs +7 -0
- package/_shims/manual-types.d.ts +12 -0
- package/_shims/manual-types.js +3 -0
- package/_shims/manual-types.mjs +3 -0
- package/_shims/node-runtime.d.ts +3 -0
- package/_shims/node-runtime.d.ts.map +1 -0
- package/_shims/node-runtime.js +87 -0
- package/_shims/node-runtime.js.map +1 -0
- package/_shims/node-runtime.mjs +54 -0
- package/_shims/node-runtime.mjs.map +1 -0
- package/_shims/node-types.d.ts +42 -0
- package/_shims/node-types.js +3 -0
- package/_shims/node-types.mjs +3 -0
- package/_shims/registry.d.ts +35 -0
- package/_shims/registry.d.ts.map +1 -0
- package/_shims/registry.js +39 -0
- package/_shims/registry.js.map +1 -0
- package/_shims/registry.mjs +35 -0
- package/_shims/registry.mjs.map +1 -0
- package/_shims/web-runtime.d.ts +5 -0
- package/_shims/web-runtime.d.ts.map +1 -0
- package/_shims/web-runtime.js +70 -0
- package/_shims/web-runtime.js.map +1 -0
- package/_shims/web-runtime.mjs +63 -0
- package/_shims/web-runtime.mjs.map +1 -0
- package/_shims/web-types.d.ts +82 -0
- package/_shims/web-types.js +3 -0
- package/_shims/web-types.mjs +3 -0
- package/core.d.ts +170 -223
- package/core.d.ts.map +1 -1
- package/core.js +682 -729
- package/core.js.map +1 -1
- package/core.mjs +676 -680
- package/core.mjs.map +1 -1
- package/error.d.ts +32 -32
- package/error.d.ts.map +1 -1
- package/error.js +95 -106
- package/error.js.map +1 -1
- package/error.mjs +91 -91
- package/error.mjs.map +1 -1
- package/index.d.mts +145 -178
- package/index.d.ts +145 -178
- package/index.d.ts.map +1 -1
- package/index.js +145 -201
- package/index.js.map +1 -1
- package/index.mjs +123 -149
- package/index.mjs.map +1 -1
- package/package.json +31 -23
- package/pagination.d.ts +47 -167
- package/pagination.d.ts.map +1 -1
- package/pagination.js +72 -202
- package/pagination.js.map +1 -1
- package/pagination.mjs +68 -187
- package/pagination.mjs.map +1 -1
- package/resource.d.ts +10 -10
- package/resource.js +12 -12
- package/resource.mjs +10 -10
- package/resources/account.d.ts +44 -44
- package/resources/account.js +20 -19
- package/resources/account.mjs +17 -16
- package/resources/hris/benefits/benefits.d.ts +127 -154
- package/resources/hris/benefits/benefits.js +74 -89
- package/resources/hris/benefits/benefits.mjs +50 -48
- package/resources/hris/benefits/index.d.ts +3 -28
- package/resources/hris/benefits/index.js +13 -55
- package/resources/hris/benefits/index.mjs +3 -8
- package/resources/hris/benefits/individuals.d.ts +129 -147
- package/resources/hris/benefits/individuals.js +59 -59
- package/resources/hris/benefits/individuals.mjs +53 -49
- package/resources/hris/company.d.ts +80 -80
- package/resources/hris/company.js +12 -13
- package/resources/hris/company.mjs +9 -8
- package/resources/hris/directory.d.ts +53 -55
- package/resources/hris/directory.js +13 -12
- package/resources/hris/directory.mjs +8 -7
- package/resources/hris/employments.d.ts +124 -126
- package/resources/hris/employments.js +23 -21
- package/resources/hris/employments.mjs +19 -17
- package/resources/hris/hris.d.ts +113 -123
- package/resources/hris/hris.js +54 -71
- package/resources/hris/hris.mjs +32 -32
- package/resources/hris/index.d.ts +9 -41
- package/resources/hris/index.js +26 -110
- package/resources/hris/index.mjs +9 -9
- package/resources/hris/individuals.d.ts +65 -67
- package/resources/hris/individuals.js +19 -17
- package/resources/hris/individuals.mjs +14 -12
- package/resources/hris/pay-statements.d.ts +146 -162
- package/resources/hris/pay-statements.js +22 -20
- package/resources/hris/pay-statements.mjs +18 -16
- package/resources/hris/payments.d.ts +47 -49
- package/resources/hris/payments.js +15 -13
- package/resources/hris/payments.mjs +11 -9
- package/resources/index.d.ts +5 -7
- package/resources/index.d.ts.map +1 -1
- package/resources/index.js +13 -51
- package/resources/index.js.map +1 -1
- package/resources/index.mjs +5 -6
- package/resources/index.mjs.map +1 -1
- package/resources/providers.d.ts +43 -42
- package/resources/providers.js +15 -13
- package/resources/providers.mjs +11 -9
- package/resources/top-level.d.ts +1 -1
- package/resources/top-level.js +3 -3
- package/resources/top-level.mjs +1 -1
- package/resources/webhooks.d.ts +18 -18
- package/resources/webhooks.js +103 -107
- package/resources/webhooks.mjs +98 -102
- package/shims/node.d.ts +29 -0
- package/shims/node.d.ts.map +1 -0
- package/shims/node.js +31 -0
- package/shims/node.js.map +1 -0
- package/shims/node.mjs +5 -0
- package/shims/node.mjs.map +1 -0
- package/shims/web.d.ts +26 -0
- package/shims/web.d.ts.map +1 -0
- package/shims/web.js +31 -0
- package/shims/web.js.map +1 -0
- package/shims/web.mjs +5 -0
- package/shims/web.mjs.map +1 -0
- package/src/_shims/MultipartBody.ts +9 -0
- package/src/_shims/README.md +46 -0
- package/src/_shims/auto/runtime-bun.ts +4 -0
- package/src/_shims/auto/runtime-node.ts +4 -0
- package/src/_shims/auto/runtime.ts +4 -0
- package/src/_shims/auto/types-node.ts +4 -0
- package/src/_shims/auto/types.d.ts +99 -0
- package/src/_shims/auto/types.js +3 -0
- package/src/_shims/auto/types.mjs +3 -0
- package/src/_shims/bun-runtime.ts +14 -0
- package/src/_shims/index.d.ts +79 -0
- package/src/_shims/index.js +13 -0
- package/src/_shims/index.mjs +7 -0
- package/src/_shims/manual-types.d.ts +12 -0
- package/src/_shims/manual-types.js +3 -0
- package/src/_shims/manual-types.mjs +3 -0
- package/src/_shims/node-runtime.ts +79 -0
- package/src/_shims/node-types.d.ts +42 -0
- package/src/_shims/node-types.js +3 -0
- package/src/_shims/node-types.mjs +3 -0
- package/src/_shims/registry.ts +64 -0
- package/src/_shims/web-runtime.ts +91 -0
- package/src/_shims/web-types.d.ts +82 -0
- package/src/_shims/web-types.js +3 -0
- package/src/_shims/web-types.mjs +3 -0
- package/src/core.ts +75 -44
- package/src/error.ts +6 -4
- package/src/index.ts +8 -25
- package/src/pagination.ts +2 -261
- package/src/resource.ts +1 -1
- package/src/resources/account.ts +3 -3
- package/src/resources/hris/benefits/benefits.ts +6 -6
- package/src/resources/hris/benefits/index.ts +2 -2
- package/src/resources/hris/benefits/individuals.ts +6 -6
- package/src/resources/hris/company.ts +4 -4
- package/src/resources/hris/directory.ts +5 -5
- package/src/resources/hris/employments.ts +5 -5
- package/src/resources/hris/hris.ts +9 -9
- package/src/resources/hris/index.ts +8 -8
- package/src/resources/hris/individuals.ts +6 -6
- package/src/resources/hris/pay-statements.ts +6 -6
- package/src/resources/hris/payments.ts +5 -5
- package/src/resources/index.ts +4 -6
- package/src/resources/providers.ts +4 -4
- package/src/resources/webhooks.ts +2 -2
- package/src/shims/node.ts +50 -0
- package/src/shims/web.ts +50 -0
- package/src/uploads.ts +12 -16
- package/src/version.ts +1 -1
- package/uploads.d.ts +23 -39
- package/uploads.d.ts.map +1 -1
- package/uploads.js +115 -157
- package/uploads.js.map +1 -1
- package/uploads.mjs +111 -133
- package/uploads.mjs.map +1 -1
- package/version.d.ts +2 -2
- package/version.js +4 -4
- package/version.mjs +2 -2
- package/_shims/ReadableStream-node.d.ts +0 -6
- package/_shims/ReadableStream-node.d.ts.map +0 -1
- package/_shims/ReadableStream-node.js +0 -14
- package/_shims/ReadableStream-node.js.map +0 -1
- package/_shims/ReadableStream-node.mjs +0 -3
- package/_shims/ReadableStream-node.mjs.map +0 -1
- package/_shims/ReadableStream.d.ts +0 -38
- package/_shims/ReadableStream.mjs +0 -7
- package/_shims/agent-node.d.ts +0 -7
- package/_shims/agent-node.d.ts.map +0 -1
- package/_shims/agent-node.js +0 -28
- package/_shims/agent-node.js.map +0 -1
- package/_shims/agent-node.mjs +0 -16
- package/_shims/agent-node.mjs.map +0 -1
- package/_shims/agent.d.ts +0 -9
- package/_shims/agent.d.ts.map +0 -1
- package/_shims/agent.js +0 -14
- package/_shims/agent.js.map +0 -1
- package/_shims/agent.mjs +0 -10
- package/_shims/agent.mjs.map +0 -1
- package/_shims/fetch-node.d.ts +0 -64
- package/_shims/fetch-node.js +0 -12
- package/_shims/fetch-node.mjs +0 -14
- package/_shims/fetch.d.ts +0 -60
- package/_shims/fetch.js +0 -13
- package/_shims/fetch.mjs +0 -15
- package/_shims/fileFromPath-node.d.ts +0 -17
- package/_shims/fileFromPath-node.d.ts.map +0 -1
- package/_shims/fileFromPath-node.js +0 -17
- package/_shims/fileFromPath-node.js.map +0 -1
- package/_shims/fileFromPath-node.mjs +0 -13
- package/_shims/fileFromPath-node.mjs.map +0 -1
- package/_shims/fileFromPath.d.ts +0 -22
- package/_shims/fileFromPath.d.ts.map +0 -1
- package/_shims/fileFromPath.js +0 -16
- package/_shims/fileFromPath.js.map +0 -1
- package/_shims/fileFromPath.mjs +0 -12
- package/_shims/fileFromPath.mjs.map +0 -1
- package/_shims/form-data-node.d.ts +0 -45
- package/_shims/form-data-node.js +0 -11
- package/_shims/form-data-node.mjs +0 -9
- package/_shims/form-data.d.ts +0 -43
- package/_shims/form-data.js +0 -17
- package/_shims/form-data.mjs +0 -20
- package/_shims/getMultipartRequestOptions-node.d.ts +0 -10
- package/_shims/getMultipartRequestOptions-node.d.ts.map +0 -1
- package/_shims/getMultipartRequestOptions-node.js +0 -22
- package/_shims/getMultipartRequestOptions-node.js.map +0 -1
- package/_shims/getMultipartRequestOptions-node.mjs +0 -18
- package/_shims/getMultipartRequestOptions-node.mjs.map +0 -1
- package/_shims/getMultipartRequestOptions.d.ts +0 -10
- package/_shims/getMultipartRequestOptions.d.ts.map +0 -1
- package/_shims/getMultipartRequestOptions.js +0 -12
- package/_shims/getMultipartRequestOptions.js.map +0 -1
- package/_shims/getMultipartRequestOptions.mjs +0 -8
- package/_shims/getMultipartRequestOptions.mjs.map +0 -1
- package/_shims/node-readable-node.d.ts +0 -8
- package/_shims/node-readable-node.d.ts.map +0 -1
- package/_shims/node-readable-node.js +0 -9
- package/_shims/node-readable-node.js.map +0 -1
- package/_shims/node-readable-node.mjs +0 -5
- package/_shims/node-readable-node.mjs.map +0 -1
- package/_shims/node-readable.d.ts +0 -23
- package/_shims/node-readable.d.ts.map +0 -1
- package/_shims/node-readable.js +0 -11
- package/_shims/node-readable.js.map +0 -1
- package/_shims/node-readable.mjs +0 -7
- package/_shims/node-readable.mjs.map +0 -1
- package/resources/ats/applications.d.ts +0 -39
- package/resources/ats/applications.d.ts.map +0 -1
- package/resources/ats/applications.js +0 -24
- package/resources/ats/applications.js.map +0 -1
- package/resources/ats/applications.mjs +0 -20
- package/resources/ats/applications.mjs.map +0 -1
- package/resources/ats/ats.d.ts +0 -32
- package/resources/ats/ats.d.ts.map +0 -1
- package/resources/ats/ats.js +0 -71
- package/resources/ats/ats.js.map +0 -1
- package/resources/ats/ats.mjs +0 -27
- package/resources/ats/ats.mjs.map +0 -1
- package/resources/ats/candidates.d.ts +0 -53
- package/resources/ats/candidates.d.ts.map +0 -1
- package/resources/ats/candidates.js +0 -25
- package/resources/ats/candidates.js.map +0 -1
- package/resources/ats/candidates.mjs +0 -21
- package/resources/ats/candidates.mjs.map +0 -1
- package/resources/ats/index.d.ts +0 -7
- package/resources/ats/index.d.ts.map +0 -1
- package/resources/ats/index.js +0 -60
- package/resources/ats/index.js.map +0 -1
- package/resources/ats/index.mjs +0 -8
- package/resources/ats/index.mjs.map +0 -1
- package/resources/ats/jobs.d.ts +0 -47
- package/resources/ats/jobs.d.ts.map +0 -1
- package/resources/ats/jobs.js +0 -24
- package/resources/ats/jobs.js.map +0 -1
- package/resources/ats/jobs.mjs +0 -20
- package/resources/ats/jobs.mjs.map +0 -1
- package/resources/ats/offers.d.ts +0 -39
- package/resources/ats/offers.d.ts.map +0 -1
- package/resources/ats/offers.js +0 -24
- package/resources/ats/offers.js.map +0 -1
- package/resources/ats/offers.mjs +0 -20
- package/resources/ats/offers.mjs.map +0 -1
- package/resources/ats/stages.d.ts +0 -30
- package/resources/ats/stages.d.ts.map +0 -1
- package/resources/ats/stages.js +0 -22
- package/resources/ats/stages.js.map +0 -1
- package/resources/ats/stages.mjs +0 -17
- package/resources/ats/stages.mjs.map +0 -1
- package/src/_shims/ReadableStream.d.ts +0 -38
- package/src/_shims/ReadableStream.mjs +0 -7
- package/src/_shims/agent-node.ts +0 -22
- package/src/_shims/agent.ts +0 -12
- package/src/_shims/fetch-node.d.ts +0 -64
- package/src/_shims/fetch-node.js +0 -12
- package/src/_shims/fetch-node.mjs +0 -14
- package/src/_shims/fetch.d.ts +0 -60
- package/src/_shims/fetch.js +0 -13
- package/src/_shims/fetch.mjs +0 -15
- package/src/_shims/fileFromPath-node.ts +0 -29
- package/src/_shims/fileFromPath.ts +0 -29
- package/src/_shims/form-data-node.d.ts +0 -45
- package/src/_shims/form-data-node.js +0 -11
- package/src/_shims/form-data-node.mjs +0 -9
- package/src/_shims/form-data.d.ts +0 -43
- package/src/_shims/form-data.js +0 -17
- package/src/_shims/form-data.mjs +0 -20
- package/src/_shims/getMultipartRequestOptions-node.ts +0 -25
- package/src/_shims/getMultipartRequestOptions.ts +0 -14
- package/src/_shims/node-readable-node.ts +0 -10
- package/src/_shims/node-readable.ts +0 -30
- package/src/resources/ats/applications.ts +0 -64
- package/src/resources/ats/ats.ts +0 -39
- package/src/resources/ats/candidates.ts +0 -83
- package/src/resources/ats/index.ts +0 -8
- package/src/resources/ats/jobs.ts +0 -76
- package/src/resources/ats/offers.ts +0 -63
- package/src/resources/ats/stages.ts +0 -39
package/resources/webhooks.mjs
CHANGED
|
@@ -3,112 +3,108 @@ import { APIResource } from '@tryfinch/finch-api/resource';
|
|
|
3
3
|
import { createHmac } from 'crypto';
|
|
4
4
|
import { getHeader } from '@tryfinch/finch-api/core';
|
|
5
5
|
export class Webhooks extends APIResource {
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
}
|
|
13
|
-
parseSecret(secret) {
|
|
14
|
-
if (!secret) {
|
|
15
|
-
throw new Error(
|
|
16
|
-
"The webhook secret must either be set using the env var, FINCH_WEBHOOK_SECRET, on the client class, Finch({ webhook_secret: '123' }), or passed to this function",
|
|
17
|
-
);
|
|
6
|
+
/**
|
|
7
|
+
* Validates that the given payload was sent by Finch and parses the payload.
|
|
8
|
+
*/
|
|
9
|
+
unwrap(payload, headers, secret = this.client.webhookSecret) {
|
|
10
|
+
this.verifySignature(payload, headers, secret);
|
|
11
|
+
return JSON.parse(payload);
|
|
18
12
|
}
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
13
|
+
parseSecret(secret) {
|
|
14
|
+
if (!secret) {
|
|
15
|
+
throw new Error("The webhook secret must either be set using the env var, FINCH_WEBHOOK_SECRET, on the client class, Finch({ webhook_secret: '123' }), or passed to this function");
|
|
16
|
+
}
|
|
17
|
+
const buf = Buffer.from(secret, 'base64');
|
|
18
|
+
if (buf.toString('base64') !== secret) {
|
|
19
|
+
throw new Error(`Given secret is not valid`);
|
|
20
|
+
}
|
|
21
|
+
return new Uint8Array(buf);
|
|
22
22
|
}
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
hmac.update(toSign);
|
|
30
|
-
return `v1,${hmac.digest('base64')}`;
|
|
31
|
-
}
|
|
32
|
-
/** Make an assertion, if not `true`, then throw. */
|
|
33
|
-
assert(expr, msg = '') {
|
|
34
|
-
if (!expr) {
|
|
35
|
-
throw new Error(msg);
|
|
23
|
+
signPayload(payload, { eventId, timestamp, secret }) {
|
|
24
|
+
const encoder = new TextEncoder();
|
|
25
|
+
const toSign = encoder.encode(`${eventId}.${timestamp.getTime() / 1000}.${payload}`);
|
|
26
|
+
const hmac = createHmac('sha256', secret);
|
|
27
|
+
hmac.update(toSign);
|
|
28
|
+
return `v1,${hmac.digest('base64')}`;
|
|
36
29
|
}
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
return false;
|
|
30
|
+
/** Make an assertion, if not `true`, then throw. */
|
|
31
|
+
assert(expr, msg = '') {
|
|
32
|
+
if (!expr) {
|
|
33
|
+
throw new Error(msg);
|
|
34
|
+
}
|
|
43
35
|
}
|
|
44
|
-
|
|
45
|
-
|
|
36
|
+
/** Compare to array buffers or data views in a way that timing based attacks
|
|
37
|
+
* cannot gain information about the platform. */
|
|
38
|
+
timingSafeEqual(a, b) {
|
|
39
|
+
if (a.byteLength !== b.byteLength) {
|
|
40
|
+
return false;
|
|
41
|
+
}
|
|
42
|
+
if (!(a instanceof DataView)) {
|
|
43
|
+
a = new DataView(ArrayBuffer.isView(a) ? a.buffer : a);
|
|
44
|
+
}
|
|
45
|
+
if (!(b instanceof DataView)) {
|
|
46
|
+
b = new DataView(ArrayBuffer.isView(b) ? b.buffer : b);
|
|
47
|
+
}
|
|
48
|
+
this.assert(a instanceof DataView);
|
|
49
|
+
this.assert(b instanceof DataView);
|
|
50
|
+
const length = a.byteLength;
|
|
51
|
+
let out = 0;
|
|
52
|
+
let i = -1;
|
|
53
|
+
while (++i < length) {
|
|
54
|
+
out |= a.getUint8(i) ^ b.getUint8(i);
|
|
55
|
+
}
|
|
56
|
+
return out === 0;
|
|
46
57
|
}
|
|
47
|
-
|
|
48
|
-
|
|
58
|
+
/**
|
|
59
|
+
* Validates whether or not the webhook payload was sent by Finch.
|
|
60
|
+
*
|
|
61
|
+
* An error will be raised if the webhook payload was not sent by Finch.
|
|
62
|
+
*/
|
|
63
|
+
verifySignature(body, headers, secret = this.client.webhookSecret) {
|
|
64
|
+
const parsedSecret = this.parseSecret(secret);
|
|
65
|
+
const eventId = getHeader(headers, 'finch-event-id');
|
|
66
|
+
if (!eventId) {
|
|
67
|
+
throw new Error('Could not find finch-event-id header');
|
|
68
|
+
}
|
|
69
|
+
const msgTimestamp = getHeader(headers, 'finch-timestamp');
|
|
70
|
+
if (!msgTimestamp) {
|
|
71
|
+
throw new Error('Could not find finch-timestamp header');
|
|
72
|
+
}
|
|
73
|
+
const msgSignature = getHeader(headers, 'finch-signature');
|
|
74
|
+
if (!msgSignature) {
|
|
75
|
+
throw new Error('Could not find finch-signature header');
|
|
76
|
+
}
|
|
77
|
+
const now = Math.floor(Date.now() / 1000);
|
|
78
|
+
const timestampSeconds = parseInt(msgTimestamp, 10);
|
|
79
|
+
if (isNaN(timestampSeconds)) {
|
|
80
|
+
throw new Error(`Invalid timestamp header: ${msgTimestamp}`);
|
|
81
|
+
}
|
|
82
|
+
if (typeof body !== 'string') {
|
|
83
|
+
throw new Error('Webhook body must be passed as the raw JSON string sent from the server (do not parse it first).');
|
|
84
|
+
}
|
|
85
|
+
const webhook_tolerance_in_seconds = 5 * 60; // 5 minutes
|
|
86
|
+
if (now - timestampSeconds > webhook_tolerance_in_seconds) {
|
|
87
|
+
throw new Error('Webhook timestamp is too old');
|
|
88
|
+
}
|
|
89
|
+
if (timestampSeconds > now + webhook_tolerance_in_seconds) {
|
|
90
|
+
throw new Error('Webhook timestamp is too new');
|
|
91
|
+
}
|
|
92
|
+
const timestamp = new Date(timestampSeconds * 1000);
|
|
93
|
+
const computedSignature = this.signPayload(body, { eventId, timestamp, secret: parsedSecret });
|
|
94
|
+
const expectedSignature = computedSignature.split(',')[1];
|
|
95
|
+
const passedSignatures = msgSignature.split(' ');
|
|
96
|
+
const encoder = new globalThis.TextEncoder();
|
|
97
|
+
for (const versionedSignature of passedSignatures) {
|
|
98
|
+
const [version, signature] = versionedSignature.split(',');
|
|
99
|
+
if (version !== 'v1') {
|
|
100
|
+
continue;
|
|
101
|
+
}
|
|
102
|
+
if (this.timingSafeEqual(encoder.encode(signature), encoder.encode(expectedSignature))) {
|
|
103
|
+
// valid!
|
|
104
|
+
return;
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
throw new Error('None of the given webhook signatures match the expected signature');
|
|
49
108
|
}
|
|
50
|
-
this.assert(a instanceof DataView);
|
|
51
|
-
this.assert(b instanceof DataView);
|
|
52
|
-
const length = a.byteLength;
|
|
53
|
-
let out = 0;
|
|
54
|
-
let i = -1;
|
|
55
|
-
while (++i < length) {
|
|
56
|
-
out |= a.getUint8(i) ^ b.getUint8(i);
|
|
57
|
-
}
|
|
58
|
-
return out === 0;
|
|
59
|
-
}
|
|
60
|
-
/**
|
|
61
|
-
* Validates whether or not the webhook payload was sent by Finch.
|
|
62
|
-
*
|
|
63
|
-
* An error will be raised if the webhook payload was not sent by Finch.
|
|
64
|
-
*/
|
|
65
|
-
verifySignature(body, headers, secret = this.client.webhookSecret) {
|
|
66
|
-
const parsedSecret = this.parseSecret(secret);
|
|
67
|
-
const eventId = getHeader(headers, 'finch-event-id');
|
|
68
|
-
if (!eventId) {
|
|
69
|
-
throw new Error('Could not find finch-event-id header');
|
|
70
|
-
}
|
|
71
|
-
const msgTimestamp = getHeader(headers, 'finch-timestamp');
|
|
72
|
-
if (!msgTimestamp) {
|
|
73
|
-
throw new Error('Could not find finch-timestamp header');
|
|
74
|
-
}
|
|
75
|
-
const msgSignature = getHeader(headers, 'finch-signature');
|
|
76
|
-
if (!msgSignature) {
|
|
77
|
-
throw new Error('Could not find finch-signature header');
|
|
78
|
-
}
|
|
79
|
-
const now = Math.floor(Date.now() / 1000);
|
|
80
|
-
const timestampSeconds = parseInt(msgTimestamp, 10);
|
|
81
|
-
if (isNaN(timestampSeconds)) {
|
|
82
|
-
throw new Error(`Invalid timestamp header: ${msgTimestamp}`);
|
|
83
|
-
}
|
|
84
|
-
if (typeof body !== 'string') {
|
|
85
|
-
throw new Error(
|
|
86
|
-
'Webhook body must be passed as the raw JSON string sent from the server (do not parse it first).',
|
|
87
|
-
);
|
|
88
|
-
}
|
|
89
|
-
const webhook_tolerance_in_seconds = 5 * 60; // 5 minutes
|
|
90
|
-
if (now - timestampSeconds > webhook_tolerance_in_seconds) {
|
|
91
|
-
throw new Error('Webhook timestamp is too old');
|
|
92
|
-
}
|
|
93
|
-
if (timestampSeconds > now + webhook_tolerance_in_seconds) {
|
|
94
|
-
throw new Error('Webhook timestamp is too new');
|
|
95
|
-
}
|
|
96
|
-
const timestamp = new Date(timestampSeconds * 1000);
|
|
97
|
-
const computedSignature = this.signPayload(body, { eventId, timestamp, secret: parsedSecret });
|
|
98
|
-
const expectedSignature = computedSignature.split(',')[1];
|
|
99
|
-
const passedSignatures = msgSignature.split(' ');
|
|
100
|
-
const encoder = new globalThis.TextEncoder();
|
|
101
|
-
for (const versionedSignature of passedSignatures) {
|
|
102
|
-
const [version, signature] = versionedSignature.split(',');
|
|
103
|
-
if (version !== 'v1') {
|
|
104
|
-
continue;
|
|
105
|
-
}
|
|
106
|
-
if (this.timingSafeEqual(encoder.encode(signature), encoder.encode(expectedSignature))) {
|
|
107
|
-
// valid!
|
|
108
|
-
return;
|
|
109
|
-
}
|
|
110
|
-
}
|
|
111
|
-
throw new Error('None of the given webhook signatures match the expected signature');
|
|
112
|
-
}
|
|
113
109
|
}
|
|
114
|
-
//# sourceMappingURL=webhooks.mjs.map
|
|
110
|
+
//# sourceMappingURL=webhooks.mjs.map
|
package/shims/node.d.ts
ADDED
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
import * as types from "../_shims/node-types.js";
|
|
5
|
+
declare module '../_shims/manual-types' {
|
|
6
|
+
namespace manual {
|
|
7
|
+
type Agent = types.Agent;
|
|
8
|
+
export import fetch = types.fetch;
|
|
9
|
+
type Request = types.Request;
|
|
10
|
+
type RequestInfo = types.RequestInfo;
|
|
11
|
+
type RequestInit = types.RequestInit;
|
|
12
|
+
type Response = types.Response;
|
|
13
|
+
type ResponseInit = types.ResponseInit;
|
|
14
|
+
type ResponseType = types.ResponseType;
|
|
15
|
+
type BodyInit = types.BodyInit;
|
|
16
|
+
type Headers = types.Headers;
|
|
17
|
+
type HeadersInit = types.HeadersInit;
|
|
18
|
+
type BlobPropertyBag = types.BlobPropertyBag;
|
|
19
|
+
type FilePropertyBag = types.FilePropertyBag;
|
|
20
|
+
type FileFromPathOptions = types.FileFromPathOptions;
|
|
21
|
+
export import FormData = types.FormData;
|
|
22
|
+
export import File = types.File;
|
|
23
|
+
export import Blob = types.Blob;
|
|
24
|
+
type Readable = types.Readable;
|
|
25
|
+
type FsReadStream = types.FsReadStream;
|
|
26
|
+
type ReadableStream = types.ReadableStream;
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
//# sourceMappingURL=node.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"node.d.ts","sourceRoot":"","sources":["../src/shims/node.ts"],"names":[],"mappings":";;;AACA,OAAO,KAAK,KAAK,MAAM,sBAAsB,CAAC;AAK9C,OAAO,QAAQ,wBAAwB,CAAC;IACtC,UAAiB,MAAM,CAAC;QAEtB,KAAY,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC;QAEhC,MAAM,QAAQ,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC;QAElC,KAAY,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC;QAEpC,KAAY,WAAW,GAAG,KAAK,CAAC,WAAW,CAAC;QAE5C,KAAY,WAAW,GAAG,KAAK,CAAC,WAAW,CAAC;QAE5C,KAAY,QAAQ,GAAG,KAAK,CAAC,QAAQ,CAAC;QAEtC,KAAY,YAAY,GAAG,KAAK,CAAC,YAAY,CAAC;QAE9C,KAAY,YAAY,GAAG,KAAK,CAAC,YAAY,CAAC;QAE9C,KAAY,QAAQ,GAAG,KAAK,CAAC,QAAQ,CAAC;QAEtC,KAAY,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC;QAEpC,KAAY,WAAW,GAAG,KAAK,CAAC,WAAW,CAAC;QAE5C,KAAY,eAAe,GAAG,KAAK,CAAC,eAAe,CAAC;QAEpD,KAAY,eAAe,GAAG,KAAK,CAAC,eAAe,CAAC;QAEpD,KAAY,mBAAmB,GAAG,KAAK,CAAC,mBAAmB,CAAC;QAE5D,MAAM,QAAQ,QAAQ,GAAG,KAAK,CAAC,QAAQ,CAAC;QAExC,MAAM,QAAQ,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC;QAEhC,MAAM,QAAQ,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC;QAEhC,KAAY,QAAQ,GAAG,KAAK,CAAC,QAAQ,CAAC;QAEtC,KAAY,YAAY,GAAG,KAAK,CAAC,YAAY,CAAC;QAE9C,KAAY,cAAc,GAAG,KAAK,CAAC,cAAc,CAAC;KACnD;CACF"}
|
package/shims/node.js
ADDED
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
|
19
|
+
if (mod && mod.__esModule) return mod;
|
|
20
|
+
var result = {};
|
|
21
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
22
|
+
__setModuleDefault(result, mod);
|
|
23
|
+
return result;
|
|
24
|
+
};
|
|
25
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
26
|
+
// @ts-ignore
|
|
27
|
+
const types = __importStar(require("../_shims/node-types.js"));
|
|
28
|
+
const registry_1 = require("../_shims/registry.js");
|
|
29
|
+
const node_runtime_1 = require("../_shims/node-runtime.js");
|
|
30
|
+
(0, registry_1.setShims)((0, node_runtime_1.getRuntime)());
|
|
31
|
+
//# sourceMappingURL=node.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"node.js","sourceRoot":"","sources":["../src/shims/node.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;AAAA,aAAa;AACb,+DAA8C;AAC9C,oDAA8C;AAC9C,4DAAoD;AACpD,IAAA,mBAAQ,EAAC,IAAA,yBAAU,GAAE,CAAC,CAAC"}
|
package/shims/node.mjs
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"node.mjs","sourceRoot":"","sources":["../src/shims/node.ts"],"names":[],"mappings":"OACO,KAAK,KAAK;OACV,EAAE,QAAQ,EAAE;OACZ,EAAE,UAAU,EAAE;AACrB,QAAQ,CAAC,UAAU,EAAE,CAAC,CAAC"}
|
package/shims/web.d.ts
ADDED
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import * as types from "../_shims/web-types.js";
|
|
2
|
+
declare module '../_shims/manual-types' {
|
|
3
|
+
namespace manual {
|
|
4
|
+
type Agent = types.Agent;
|
|
5
|
+
export import fetch = types.fetch;
|
|
6
|
+
type Request = types.Request;
|
|
7
|
+
type RequestInfo = types.RequestInfo;
|
|
8
|
+
type RequestInit = types.RequestInit;
|
|
9
|
+
type Response = types.Response;
|
|
10
|
+
type ResponseInit = types.ResponseInit;
|
|
11
|
+
type ResponseType = types.ResponseType;
|
|
12
|
+
type BodyInit = types.BodyInit;
|
|
13
|
+
type Headers = types.Headers;
|
|
14
|
+
type HeadersInit = types.HeadersInit;
|
|
15
|
+
type BlobPropertyBag = types.BlobPropertyBag;
|
|
16
|
+
type FilePropertyBag = types.FilePropertyBag;
|
|
17
|
+
type FileFromPathOptions = types.FileFromPathOptions;
|
|
18
|
+
export import FormData = types.FormData;
|
|
19
|
+
export import File = types.File;
|
|
20
|
+
export import Blob = types.Blob;
|
|
21
|
+
type Readable = types.Readable;
|
|
22
|
+
type FsReadStream = types.FsReadStream;
|
|
23
|
+
type ReadableStream = types.ReadableStream;
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
//# sourceMappingURL=web.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"web.d.ts","sourceRoot":"","sources":["../src/shims/web.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,KAAK,MAAM,qBAAqB,CAAC;AAK7C,OAAO,QAAQ,wBAAwB,CAAC;IACtC,UAAiB,MAAM,CAAC;QAEtB,KAAY,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC;QAEhC,MAAM,QAAQ,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC;QAElC,KAAY,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC;QAEpC,KAAY,WAAW,GAAG,KAAK,CAAC,WAAW,CAAC;QAE5C,KAAY,WAAW,GAAG,KAAK,CAAC,WAAW,CAAC;QAE5C,KAAY,QAAQ,GAAG,KAAK,CAAC,QAAQ,CAAC;QAEtC,KAAY,YAAY,GAAG,KAAK,CAAC,YAAY,CAAC;QAE9C,KAAY,YAAY,GAAG,KAAK,CAAC,YAAY,CAAC;QAE9C,KAAY,QAAQ,GAAG,KAAK,CAAC,QAAQ,CAAC;QAEtC,KAAY,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC;QAEpC,KAAY,WAAW,GAAG,KAAK,CAAC,WAAW,CAAC;QAE5C,KAAY,eAAe,GAAG,KAAK,CAAC,eAAe,CAAC;QAEpD,KAAY,eAAe,GAAG,KAAK,CAAC,eAAe,CAAC;QAEpD,KAAY,mBAAmB,GAAG,KAAK,CAAC,mBAAmB,CAAC;QAE5D,MAAM,QAAQ,QAAQ,GAAG,KAAK,CAAC,QAAQ,CAAC;QAExC,MAAM,QAAQ,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC;QAEhC,MAAM,QAAQ,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC;QAEhC,KAAY,QAAQ,GAAG,KAAK,CAAC,QAAQ,CAAC;QAEtC,KAAY,YAAY,GAAG,KAAK,CAAC,YAAY,CAAC;QAE9C,KAAY,cAAc,GAAG,KAAK,CAAC,cAAc,CAAC;KACnD;CACF"}
|
package/shims/web.js
ADDED
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
|
19
|
+
if (mod && mod.__esModule) return mod;
|
|
20
|
+
var result = {};
|
|
21
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
22
|
+
__setModuleDefault(result, mod);
|
|
23
|
+
return result;
|
|
24
|
+
};
|
|
25
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
26
|
+
// @ts-ignore
|
|
27
|
+
const types = __importStar(require("../_shims/web-types.js"));
|
|
28
|
+
const registry_1 = require("../_shims/registry.js");
|
|
29
|
+
const web_runtime_1 = require("../_shims/web-runtime.js");
|
|
30
|
+
(0, registry_1.setShims)((0, web_runtime_1.getRuntime)({ manuallyImported: true }));
|
|
31
|
+
//# sourceMappingURL=web.js.map
|
package/shims/web.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"web.js","sourceRoot":"","sources":["../src/shims/web.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;AAAA,aAAa;AACb,8DAA6C;AAC7C,oDAA8C;AAC9C,0DAAmD;AACnD,IAAA,mBAAQ,EAAC,IAAA,wBAAU,EAAC,EAAE,gBAAgB,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC"}
|
package/shims/web.mjs
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"web.mjs","sourceRoot":"","sources":["../src/shims/web.ts"],"names":[],"mappings":"OACO,KAAK,KAAK;OACV,EAAE,QAAQ,EAAE;OACZ,EAAE,UAAU,EAAE;AACrB,QAAQ,CAAC,UAAU,CAAC,EAAE,gBAAgB,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
# 👋 Wondering what everything in here does?
|
|
2
|
+
|
|
3
|
+
`@tryfinch/finch-api` supports a wide variety of runtime environments like Node.js, Deno, Bun, browsers, and various
|
|
4
|
+
edge runtimes, as well as both CommonJS (CJS) and EcmaScript Modules (ESM).
|
|
5
|
+
|
|
6
|
+
To do this, `@tryfinch/finch-api` provides shims for either using `node-fetch` when in Node (because `fetch` is still experimental there) or the global `fetch` API built into the environment when not in Node.
|
|
7
|
+
|
|
8
|
+
It uses [conditional exports](https://nodejs.org/api/packages.html#conditional-exports) to
|
|
9
|
+
automatically select the correct shims for each environment. However, conditional exports are a fairly new
|
|
10
|
+
feature and not supported everywhere. For instance, the TypeScript `"moduleResolution": "node"`
|
|
11
|
+
|
|
12
|
+
setting doesn't consult the `exports` map, compared to `"moduleResolution": "nodeNext"`, which does.
|
|
13
|
+
Unfortunately that's still the default setting, and it can result in errors like
|
|
14
|
+
getting the wrong raw `Response` type from `.asResponse()`, for example.
|
|
15
|
+
|
|
16
|
+
The user can work around these issues by manually importing one of:
|
|
17
|
+
|
|
18
|
+
- `import '@tryfinch/finch-api/shims/node'`
|
|
19
|
+
- `import '@tryfinch/finch-api/shims/web'`
|
|
20
|
+
|
|
21
|
+
All of the code here in `_shims` handles selecting the automatic default shims or manual overrides.
|
|
22
|
+
|
|
23
|
+
### How it works - Runtime
|
|
24
|
+
|
|
25
|
+
Runtime shims get installed by calling `setShims` exported by `@tryfinch/finch-api/_shims/registry`.
|
|
26
|
+
|
|
27
|
+
Manually importing `@tryfinch/finch-api/shims/node` or `@tryfinch/finch-api/shims/web`, calls `setShims` with the respective runtime shims.
|
|
28
|
+
|
|
29
|
+
All client code imports shims from `@tryfinch/finch-api/_shims/index`, which:
|
|
30
|
+
|
|
31
|
+
- checks if shims have been set manually
|
|
32
|
+
- if not, calls `setShims` with the shims from `@tryfinch/finch-api/_shims/auto/runtime`
|
|
33
|
+
- re-exports the installed shims from `@tryfinch/finch-api/_shims/registry`.
|
|
34
|
+
|
|
35
|
+
`@tryfinch/finch-api/_shims/auto/runtime` exports web runtime shims.
|
|
36
|
+
If the `node` export condition is set, the export map replaces it with `@tryfinch/finch-api/_shims/auto/runtime-node`.
|
|
37
|
+
|
|
38
|
+
### How it works - Type time
|
|
39
|
+
|
|
40
|
+
All client code imports shim types from `@tryfinch/finch-api/_shims/index`, which selects the manual types from `@tryfinch/finch-api/_shims/manual-types` if they have been declared, otherwise it exports the auto types from `@tryfinch/finch-api/_shims/auto/types`.
|
|
41
|
+
|
|
42
|
+
`@tryfinch/finch-api/_shims/manual-types` exports an empty namespace.
|
|
43
|
+
Manually importing `@tryfinch/finch-api/shims/node` or `@tryfinch/finch-api/shims/web` merges declarations into this empty namespace, so they get picked up by `@tryfinch/finch-api/_shims/index`.
|
|
44
|
+
|
|
45
|
+
`@tryfinch/finch-api/_shims/auto/types` exports web type definitions.
|
|
46
|
+
If the `node` export condition is set, the export map replaces it with `@tryfinch/finch-api/_shims/auto/types-node`, though TS only picks this up if `"moduleResolution": "nodenext"` or `"moduleResolution": "bundler"`.
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Disclaimer: modules in _shims aren't intended to be imported by SDK users.
|
|
3
|
+
*/
|
|
4
|
+
export type Agent = any;
|
|
5
|
+
|
|
6
|
+
// @ts-ignore
|
|
7
|
+
declare const _fetch: typeof fetch;
|
|
8
|
+
export { _fetch as fetch };
|
|
9
|
+
|
|
10
|
+
// @ts-ignore
|
|
11
|
+
type _Request = Request;
|
|
12
|
+
export { _Request as Request };
|
|
13
|
+
|
|
14
|
+
// @ts-ignore
|
|
15
|
+
type _RequestInfo = RequestInfo;
|
|
16
|
+
export { type _RequestInfo as RequestInfo };
|
|
17
|
+
|
|
18
|
+
// @ts-ignore
|
|
19
|
+
type _RequestInit = RequestInit;
|
|
20
|
+
export { type _RequestInit as RequestInit };
|
|
21
|
+
|
|
22
|
+
// @ts-ignore
|
|
23
|
+
type _Response = Response;
|
|
24
|
+
export { _Response as Response };
|
|
25
|
+
|
|
26
|
+
// @ts-ignore
|
|
27
|
+
type _ResponseInit = ResponseInit;
|
|
28
|
+
export { type _ResponseInit as ResponseInit };
|
|
29
|
+
|
|
30
|
+
// @ts-ignore
|
|
31
|
+
type _ResponseType = ResponseType;
|
|
32
|
+
export { type _ResponseType as ResponseType };
|
|
33
|
+
|
|
34
|
+
// @ts-ignore
|
|
35
|
+
type _BodyInit = BodyInit;
|
|
36
|
+
export { type _BodyInit as BodyInit };
|
|
37
|
+
|
|
38
|
+
// @ts-ignore
|
|
39
|
+
type _Headers = Headers;
|
|
40
|
+
export { _Headers as Headers };
|
|
41
|
+
|
|
42
|
+
// @ts-ignore
|
|
43
|
+
type _HeadersInit = HeadersInit;
|
|
44
|
+
export { type _HeadersInit as HeadersInit };
|
|
45
|
+
|
|
46
|
+
type EndingType = 'native' | 'transparent';
|
|
47
|
+
|
|
48
|
+
export interface BlobPropertyBag {
|
|
49
|
+
endings?: EndingType;
|
|
50
|
+
type?: string;
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
export interface FilePropertyBag extends BlobPropertyBag {
|
|
54
|
+
lastModified?: number;
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
export type FileFromPathOptions = Omit<FilePropertyBag, 'lastModified'>;
|
|
58
|
+
|
|
59
|
+
// @ts-ignore
|
|
60
|
+
type _FormData = FormData;
|
|
61
|
+
// @ts-ignore
|
|
62
|
+
declare const _FormData: typeof FormData;
|
|
63
|
+
export { _FormData as FormData };
|
|
64
|
+
|
|
65
|
+
// @ts-ignore
|
|
66
|
+
type _File = File;
|
|
67
|
+
// @ts-ignore
|
|
68
|
+
declare const _File: typeof File;
|
|
69
|
+
export { _File as File };
|
|
70
|
+
|
|
71
|
+
// @ts-ignore
|
|
72
|
+
type _Blob = Blob;
|
|
73
|
+
// @ts-ignore
|
|
74
|
+
declare const _Blob: typeof Blob;
|
|
75
|
+
export { _Blob as Blob };
|
|
76
|
+
|
|
77
|
+
export declare class Readable {
|
|
78
|
+
readable: boolean;
|
|
79
|
+
readonly readableEnded: boolean;
|
|
80
|
+
readonly readableFlowing: boolean | null;
|
|
81
|
+
readonly readableHighWaterMark: number;
|
|
82
|
+
readonly readableLength: number;
|
|
83
|
+
readonly readableObjectMode: boolean;
|
|
84
|
+
destroyed: boolean;
|
|
85
|
+
read(size?: number): any;
|
|
86
|
+
pause(): this;
|
|
87
|
+
resume(): this;
|
|
88
|
+
isPaused(): boolean;
|
|
89
|
+
destroy(error?: Error): this;
|
|
90
|
+
[Symbol.asyncIterator](): AsyncIterableIterator<any>;
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
export declare class FsReadStream extends Readable {
|
|
94
|
+
path: {}; // node type is string | Buffer
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
// @ts-ignore
|
|
98
|
+
type _ReadableStream<R = any> = ReadableStream<R>;
|
|
99
|
+
export { type _ReadableStream as ReadableStream };
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Disclaimer: modules in _shims aren't intended to be imported by SDK users.
|
|
3
|
+
*/
|
|
4
|
+
import { type Shims } from './registry';
|
|
5
|
+
import { getRuntime as getWebRuntime } from './web-runtime';
|
|
6
|
+
import { ReadStream as FsReadStream } from 'node:fs';
|
|
7
|
+
|
|
8
|
+
export function getRuntime(): Shims {
|
|
9
|
+
const runtime = getWebRuntime();
|
|
10
|
+
function isFsReadStream(value: any): value is FsReadStream {
|
|
11
|
+
return value instanceof FsReadStream;
|
|
12
|
+
}
|
|
13
|
+
return { ...runtime, isFsReadStream };
|
|
14
|
+
}
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Disclaimer: modules in _shims aren't intended to be imported by SDK users.
|
|
3
|
+
*/
|
|
4
|
+
import { manual } from './manual-types';
|
|
5
|
+
import * as auto from "../ch/finch-api/_shims/auto/types";
|
|
6
|
+
import { type RequestOptions } from '../core';
|
|
7
|
+
|
|
8
|
+
type SelectType<Manual, Auto> = unknown extends Manual ? Auto : Manual;
|
|
9
|
+
|
|
10
|
+
export const kind: string;
|
|
11
|
+
|
|
12
|
+
// @ts-ignore
|
|
13
|
+
export type Agent = SelectType<manual.Agent, auto.Agent>;
|
|
14
|
+
|
|
15
|
+
// @ts-ignore
|
|
16
|
+
export const fetch: SelectType<typeof manual.fetch, typeof auto.fetch>;
|
|
17
|
+
|
|
18
|
+
// @ts-ignore
|
|
19
|
+
export type Request = SelectType<manual.Request, auto.Request>;
|
|
20
|
+
// @ts-ignore
|
|
21
|
+
export type RequestInfo = SelectType<manual.RequestInfo, auto.RequestInfo>;
|
|
22
|
+
// @ts-ignore
|
|
23
|
+
export type RequestInit = SelectType<manual.RequestInit, auto.RequestInit>;
|
|
24
|
+
|
|
25
|
+
// @ts-ignore
|
|
26
|
+
export type Response = SelectType<manual.Response, auto.Response>;
|
|
27
|
+
// @ts-ignore
|
|
28
|
+
export type ResponseInit = SelectType<manual.ResponseInit, auto.ResponseInit>;
|
|
29
|
+
// @ts-ignore
|
|
30
|
+
export type ResponseType = SelectType<manual.ResponseType, auto.ResponseType>;
|
|
31
|
+
// @ts-ignore
|
|
32
|
+
export type BodyInit = SelectType<manual.BodyInit, auto.BodyInit>;
|
|
33
|
+
// @ts-ignore
|
|
34
|
+
export type Headers = SelectType<manual.Headers, auto.Headers>;
|
|
35
|
+
// @ts-ignore
|
|
36
|
+
export const Headers: SelectType<typeof manual.Headers, typeof auto.Headers>;
|
|
37
|
+
// @ts-ignore
|
|
38
|
+
export type HeadersInit = SelectType<manual.HeadersInit, auto.HeadersInit>;
|
|
39
|
+
|
|
40
|
+
// @ts-ignore
|
|
41
|
+
export type BlobPropertyBag = SelectType<manual.BlobPropertyBag, auto.BlobPropertyBag>;
|
|
42
|
+
// @ts-ignore
|
|
43
|
+
export type FilePropertyBag = SelectType<manual.FilePropertyBag, auto.FilePropertyBag>;
|
|
44
|
+
// @ts-ignore
|
|
45
|
+
export type FileFromPathOptions = SelectType<manual.FileFromPathOptions, auto.FileFromPathOptions>;
|
|
46
|
+
// @ts-ignore
|
|
47
|
+
export type FormData = SelectType<manual.FormData, auto.FormData>;
|
|
48
|
+
// @ts-ignore
|
|
49
|
+
export const FormData: SelectType<typeof manual.FormData, typeof auto.FormData>;
|
|
50
|
+
// @ts-ignore
|
|
51
|
+
export type File = SelectType<manual.File, auto.File>;
|
|
52
|
+
// @ts-ignore
|
|
53
|
+
export const File: SelectType<typeof manual.File, typeof auto.File>;
|
|
54
|
+
// @ts-ignore
|
|
55
|
+
export type Blob = SelectType<manual.Blob, auto.Blob>;
|
|
56
|
+
// @ts-ignore
|
|
57
|
+
export const Blob: SelectType<typeof manual.Blob, typeof auto.Blob>;
|
|
58
|
+
|
|
59
|
+
// @ts-ignore
|
|
60
|
+
export type Readable = SelectType<manual.Readable, auto.Readable>;
|
|
61
|
+
// @ts-ignore
|
|
62
|
+
export type FsReadStream = SelectType<manual.FsReadStream, auto.FsReadStream>;
|
|
63
|
+
// @ts-ignore
|
|
64
|
+
export type ReadableStream = SelectType<manual.ReadableStream, auto.ReadableStream>;
|
|
65
|
+
|
|
66
|
+
export function getMultipartRequestOptions<T extends {} = Record<string, unknown>>(
|
|
67
|
+
form: FormData,
|
|
68
|
+
opts: RequestOptions<T>,
|
|
69
|
+
): Promise<RequestOptions<T>>;
|
|
70
|
+
|
|
71
|
+
export function getDefaultAgent(url: string): any;
|
|
72
|
+
|
|
73
|
+
// @ts-ignore
|
|
74
|
+
export type FileFromPathOptions = SelectType<manual.FileFromPathOptions, auto.FileFromPathOptions>;
|
|
75
|
+
|
|
76
|
+
export function fileFromPath(path: string, options?: FileFromPathOptions): Promise<File>;
|
|
77
|
+
export function fileFromPath(path: string, filename?: string, options?: FileFromPathOptions): Promise<File>;
|
|
78
|
+
|
|
79
|
+
export function isFsReadStream(value: any): value is FsReadStream;
|