fintoc 1.1.2 → 1.2.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/README.md +75 -296
- package/build/main/index.d.ts +3 -0
- package/build/main/index.js +13 -2
- package/build/main/interfaces/client/constructorOptions.d.ts +1 -0
- package/build/main/interfaces/client/index.js +6 -2
- package/build/main/interfaces/client/requestOptions.d.ts +1 -0
- package/build/main/interfaces/mixins/index.js +6 -2
- package/build/main/interfaces/paginator/index.js +6 -2
- package/build/main/interfaces/paginator/paginationOptions.d.ts +1 -0
- package/build/main/lib/client.d.ts +6 -1
- package/build/main/lib/client.js +50 -24
- package/build/main/lib/core.d.ts +18 -2
- package/build/main/lib/core.js +23 -6
- package/build/main/lib/errors.d.ts +2 -0
- package/build/main/lib/errors.js +5 -2
- package/build/main/lib/jws.d.ts +25 -0
- package/build/main/lib/jws.js +130 -0
- package/build/main/lib/managers/accountsManager.d.ts +4 -0
- package/build/main/lib/managers/accountsManager.js +7 -2
- package/build/main/lib/managers/index.js +6 -2
- package/build/main/lib/managers/invoicesManager.js +2 -2
- package/build/main/lib/managers/linksManager.js +2 -2
- package/build/main/lib/managers/movementsManager.js +2 -2
- package/build/main/lib/managers/paymentIntentsManager.js +2 -2
- package/build/main/lib/managers/refreshIntentsManager.js +2 -2
- package/build/main/lib/managers/subscriptionsManager.js +2 -2
- package/build/main/lib/managers/taxReturnsManager.js +2 -2
- package/build/main/lib/managers/v2/accountNumbersManager.d.ts +6 -0
- package/build/main/lib/managers/v2/accountNumbersManager.js +10 -0
- package/build/main/lib/managers/v2/accountsManager.d.ts +6 -0
- package/build/main/lib/managers/v2/accountsManager.js +10 -0
- package/build/main/lib/managers/v2/index.d.ts +4 -0
- package/build/main/lib/managers/v2/index.js +21 -0
- package/build/main/lib/managers/v2/simulateManager.d.ts +8 -0
- package/build/main/lib/managers/v2/simulateManager.js +15 -0
- package/build/main/lib/managers/v2/transfersManager.d.ts +6 -0
- package/build/main/lib/managers/v2/transfersManager.js +10 -0
- package/build/main/lib/managers/webhookEndpointsManager.js +2 -2
- package/build/main/lib/mixins/index.js +6 -2
- package/build/main/lib/mixins/managerMixin.d.ts +21 -6
- package/build/main/lib/mixins/managerMixin.js +35 -19
- package/build/main/lib/mixins/resourceMixin.js +10 -11
- package/build/main/lib/paginator.d.ts +1 -1
- package/build/main/lib/paginator.js +16 -13
- package/build/main/lib/resourceHandlers.d.ts +1 -1
- package/build/main/lib/resourceHandlers.js +15 -14
- package/build/main/lib/resources/account.d.ts +4 -0
- package/build/main/lib/resources/account.js +7 -2
- package/build/main/lib/resources/link.d.ts +20 -0
- package/build/main/lib/resources/link.js +31 -6
- package/build/main/lib/resources/v2/account.d.ts +3 -0
- package/build/main/lib/resources/v2/account.js +8 -0
- package/build/main/lib/resources/v2/accountNumber.d.ts +3 -0
- package/build/main/lib/resources/v2/accountNumber.js +8 -0
- package/build/main/lib/resources/v2/index.d.ts +3 -0
- package/build/main/lib/resources/v2/index.js +20 -0
- package/build/main/lib/resources/v2/transfer.d.ts +3 -0
- package/build/main/lib/resources/v2/transfer.js +8 -0
- package/build/main/lib/utils.d.ts +3 -3
- package/build/main/lib/utils.js +36 -23
- package/build/main/lib/version.js +1 -1
- package/build/main/lib/webhook.d.ts +17 -0
- package/build/main/lib/webhook.js +109 -0
- package/build/main/spec/client/creationFunctionality.spec.js +11 -11
- package/build/main/spec/client/requestFunctionality.spec.js +36 -11
- package/build/main/spec/core.spec.js +2 -2
- package/build/main/spec/integration.spec.d.ts +1 -0
- package/build/main/spec/integration.spec.js +587 -0
- package/build/main/spec/jws.spec.d.ts +1 -0
- package/build/main/spec/jws.spec.js +185 -0
- package/build/main/spec/managers/linkManagers.spec.js +5 -5
- package/build/main/spec/mixins/managerMixin/creation.spec.js +9 -9
- package/build/main/spec/mixins/managerMixin/handlers.spec.js +10 -14
- package/build/main/spec/mixins/managerMixin/methods.spec.js +10 -10
- package/build/main/spec/mixins/managerMixin/mocks/complexMockManager.d.ts +1 -1
- package/build/main/spec/mixins/managerMixin/mocks/complexMockManager.js +4 -4
- package/build/main/spec/mixins/managerMixin/mocks/emptyMockManager.js +2 -2
- package/build/main/spec/mixins/resourceMixin/creation.spec.js +6 -6
- package/build/main/spec/mixins/resourceMixin/methods.spec.js +7 -7
- package/build/main/spec/mixins/resourceMixin/serialization.spec.js +5 -5
- package/build/main/spec/mocks/client/axiosInstance.js +6 -5
- package/build/main/spec/mocks/client/response.d.ts +3 -0
- package/build/main/spec/mocks/client/response.js +8 -3
- package/build/main/spec/mocks/initializers.d.ts +1 -1
- package/build/main/spec/mocks/initializers.js +4 -5
- package/build/main/spec/paginator/paginate.spec.js +7 -7
- package/build/main/spec/paginator/parseLink.spec.js +13 -13
- package/build/main/spec/paginator/parseLinkHeaders.spec.js +8 -8
- package/build/main/spec/paginator/request.spec.js +10 -8
- package/build/main/spec/resources/account.spec.js +2 -2
- package/build/main/spec/resources/link.spec.js +6 -6
- package/build/main/spec/shared/utils.js +3 -4
- package/build/main/spec/utils/canRaiseHTTPError.spec.js +4 -4
- package/build/main/spec/utils/getErrorClass.spec.js +5 -5
- package/build/main/spec/utils/getResourceClass.spec.js +13 -13
- package/build/main/spec/utils/isISODate.spec.js +5 -5
- package/build/main/spec/utils/objetize.spec.js +14 -14
- package/build/main/spec/utils/objetizeGenerator.spec.js +6 -6
- package/build/main/spec/utils/serialize.spec.js +14 -14
- package/build/main/spec/utils/shared/getGenerator.js +2 -3
- package/build/main/spec/utils/singularize.spec.js +7 -7
- package/build/main/spec/utils/snakeToPascal.spec.js +7 -7
- package/build/main/spec/webhook.spec.d.ts +1 -0
- package/build/main/spec/webhook.spec.js +120 -0
- package/build/main/types/genericFunction.d.ts +1 -1
- package/build/main/types/index.js +6 -2
- package/build/main/types/resourceArguments.d.ts +1 -1
- package/build/module/index.d.ts +3 -0
- package/build/module/index.js +4 -1
- package/build/module/interfaces/client/constructorOptions.d.ts +1 -0
- package/build/module/interfaces/client/requestOptions.d.ts +1 -0
- package/build/module/interfaces/paginator/paginationOptions.d.ts +1 -0
- package/build/module/lib/client.d.ts +6 -1
- package/build/module/lib/client.js +41 -14
- package/build/module/lib/core.d.ts +18 -2
- package/build/module/lib/core.js +35 -8
- package/build/module/lib/errors.d.ts +2 -0
- package/build/module/lib/errors.js +3 -1
- package/build/module/lib/jws.d.ts +25 -0
- package/build/module/lib/jws.js +94 -0
- package/build/module/lib/managers/accountsManager.d.ts +4 -0
- package/build/module/lib/managers/accountsManager.js +8 -2
- package/build/module/lib/managers/invoicesManager.js +2 -2
- package/build/module/lib/managers/linksManager.js +2 -2
- package/build/module/lib/managers/movementsManager.js +2 -2
- package/build/module/lib/managers/paymentIntentsManager.js +2 -2
- package/build/module/lib/managers/refreshIntentsManager.js +2 -2
- package/build/module/lib/managers/subscriptionsManager.js +2 -2
- package/build/module/lib/managers/taxReturnsManager.js +2 -2
- package/build/module/lib/managers/v2/accountNumbersManager.d.ts +6 -0
- package/build/module/lib/managers/v2/accountNumbersManager.js +6 -0
- package/build/module/lib/managers/v2/accountsManager.d.ts +6 -0
- package/build/module/lib/managers/v2/accountsManager.js +6 -0
- package/build/module/lib/managers/v2/index.d.ts +4 -0
- package/build/module/lib/managers/v2/index.js +5 -0
- package/build/module/lib/managers/v2/simulateManager.d.ts +8 -0
- package/build/module/lib/managers/v2/simulateManager.js +11 -0
- package/build/module/lib/managers/v2/transfersManager.d.ts +6 -0
- package/build/module/lib/managers/v2/transfersManager.js +6 -0
- package/build/module/lib/managers/webhookEndpointsManager.js +2 -2
- package/build/module/lib/mixins/managerMixin.d.ts +21 -6
- package/build/module/lib/mixins/managerMixin.js +32 -16
- package/build/module/lib/mixins/resourceMixin.js +2 -3
- package/build/module/lib/paginator.d.ts +1 -1
- package/build/module/lib/paginator.js +12 -8
- package/build/module/lib/resourceHandlers.d.ts +1 -1
- package/build/module/lib/resourceHandlers.js +5 -3
- package/build/module/lib/resources/account.d.ts +4 -0
- package/build/module/lib/resources/account.js +7 -2
- package/build/module/lib/resources/link.d.ts +20 -0
- package/build/module/lib/resources/link.js +31 -6
- package/build/module/lib/resources/v2/account.d.ts +3 -0
- package/build/module/lib/resources/v2/account.js +4 -0
- package/build/module/lib/resources/v2/accountNumber.d.ts +3 -0
- package/build/module/lib/resources/v2/accountNumber.js +4 -0
- package/build/module/lib/resources/v2/index.d.ts +3 -0
- package/build/module/lib/resources/v2/index.js +4 -0
- package/build/module/lib/resources/v2/transfer.d.ts +3 -0
- package/build/module/lib/resources/v2/transfer.js +4 -0
- package/build/module/lib/utils.d.ts +3 -3
- package/build/module/lib/utils.js +1 -1
- package/build/module/lib/version.js +1 -1
- package/build/module/lib/webhook.d.ts +17 -0
- package/build/module/lib/webhook.js +72 -0
- package/build/module/spec/client/creationFunctionality.spec.js +6 -6
- package/build/module/spec/client/requestFunctionality.spec.js +26 -1
- package/build/module/spec/integration.spec.d.ts +1 -0
- package/build/module/spec/integration.spec.js +582 -0
- package/build/module/spec/jws.spec.d.ts +1 -0
- package/build/module/spec/jws.spec.js +147 -0
- package/build/module/spec/mixins/managerMixin/handlers.spec.js +6 -10
- package/build/module/spec/mixins/managerMixin/methods.spec.js +1 -1
- package/build/module/spec/mixins/managerMixin/mocks/complexMockManager.d.ts +1 -1
- package/build/module/spec/mixins/managerMixin/mocks/complexMockManager.js +4 -4
- package/build/module/spec/mixins/managerMixin/mocks/emptyMockManager.js +2 -2
- package/build/module/spec/mocks/client/axiosInstance.js +4 -3
- package/build/module/spec/mocks/client/response.d.ts +3 -0
- package/build/module/spec/mocks/client/response.js +9 -3
- package/build/module/spec/mocks/initializers.d.ts +1 -1
- package/build/module/spec/paginator/paginate.spec.js +2 -2
- package/build/module/spec/paginator/request.spec.js +6 -4
- package/build/module/spec/utils/objetizeGenerator.spec.js +1 -1
- package/build/module/spec/utils/shared/getGenerator.js +1 -1
- package/build/module/spec/webhook.spec.d.ts +1 -0
- package/build/module/spec/webhook.spec.js +115 -0
- package/build/module/types/genericFunction.d.ts +1 -1
- package/build/module/types/resourceArguments.d.ts +1 -1
- package/package.json +7 -7
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
import * as crypto from 'crypto';
|
|
2
|
+
import { WebhookSignatureError } from './errors';
|
|
3
|
+
const DEFAULT_TOLERANCE_SECONDS = 300;
|
|
4
|
+
export class WebhookSignature {
|
|
5
|
+
/**
|
|
6
|
+
* Verifies the authenticity of incoming webhooks from Fintoc by validating the signature.
|
|
7
|
+
*
|
|
8
|
+
* @param payload - The raw request body as a string or Buffer
|
|
9
|
+
* @param header - The Fintoc-Signature header value
|
|
10
|
+
* @param secret - Your webhook secret key (found in your Fintoc dashboard)
|
|
11
|
+
* @param tolerance - Number of seconds to tolerate when checking timestamp (default: 300)
|
|
12
|
+
* @throws {WebhookSignatureError} If the signature is invalid or timestamp is outside
|
|
13
|
+
* tolerance window
|
|
14
|
+
*/
|
|
15
|
+
static verifyHeader(payload, header, secret, tolerance = DEFAULT_TOLERANCE_SECONDS) {
|
|
16
|
+
if (!header) {
|
|
17
|
+
throw new WebhookSignatureError('Missing Fintoc-Signature header.');
|
|
18
|
+
}
|
|
19
|
+
if (!secret) {
|
|
20
|
+
throw new WebhookSignatureError('Webhook secret is required for verification.');
|
|
21
|
+
}
|
|
22
|
+
const { timestamp, signature } = WebhookSignature.parseHeader(header);
|
|
23
|
+
WebhookSignature.verifyTimestamp(timestamp, tolerance);
|
|
24
|
+
const expectedSignature = WebhookSignature.computeSignature(payload, timestamp, secret);
|
|
25
|
+
if (!WebhookSignature.secureCompare(signature, expectedSignature)) {
|
|
26
|
+
throw new WebhookSignatureError('Signature mismatch. The webhook signature is not valid.');
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
static parseHeader(header) {
|
|
30
|
+
const parts = header.split(',');
|
|
31
|
+
let timestampStr;
|
|
32
|
+
let signature;
|
|
33
|
+
for (const part of parts) {
|
|
34
|
+
const [key, value] = part.split('=');
|
|
35
|
+
if (key === 't') {
|
|
36
|
+
timestampStr = value;
|
|
37
|
+
}
|
|
38
|
+
else if (key === 'v1') {
|
|
39
|
+
signature = value;
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
if (!timestampStr || !signature) {
|
|
43
|
+
throw new WebhookSignatureError('Unable to extract timestamp and signatures from header');
|
|
44
|
+
}
|
|
45
|
+
const timestamp = parseInt(timestampStr, 10);
|
|
46
|
+
if (Number.isNaN(timestamp)) {
|
|
47
|
+
throw new WebhookSignatureError('Unable to extract timestamp and signatures from header');
|
|
48
|
+
}
|
|
49
|
+
return { timestamp, signature };
|
|
50
|
+
}
|
|
51
|
+
static verifyTimestamp(timestamp, toleranceSeconds) {
|
|
52
|
+
const nowSeconds = Math.floor(Date.now() / 1000);
|
|
53
|
+
const timeDifference = Math.abs(nowSeconds - timestamp);
|
|
54
|
+
if (timeDifference > toleranceSeconds) {
|
|
55
|
+
throw new WebhookSignatureError(`Timestamp outside the tolerance zone (${timestamp})`);
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
static computeSignature(payload, timestamp, secret) {
|
|
59
|
+
const signedPayload = `${timestamp}.${payload.toString('utf8')}`;
|
|
60
|
+
return crypto
|
|
61
|
+
.createHmac('sha256', secret)
|
|
62
|
+
.update(signedPayload)
|
|
63
|
+
.digest('hex');
|
|
64
|
+
}
|
|
65
|
+
static secureCompare(a, b) {
|
|
66
|
+
if (a.length !== b.length) {
|
|
67
|
+
return false;
|
|
68
|
+
}
|
|
69
|
+
return crypto.timingSafeEqual(Buffer.from(a), Buffer.from(b));
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2ViaG9vay5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9saWIvd2ViaG9vay50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssTUFBTSxNQUFNLFFBQVEsQ0FBQztBQUVqQyxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFFakQsTUFBTSx5QkFBeUIsR0FBRyxHQUFHLENBQUM7QUFFdEMsTUFBTSxPQUFPLGdCQUFnQjtJQUMzQjs7Ozs7Ozs7O09BU0c7SUFDSSxNQUFNLENBQUMsWUFBWSxDQUN4QixPQUF3QixFQUN4QixNQUFjLEVBQ2QsTUFBYyxFQUNkLFlBQW9CLHlCQUF5QjtRQUU3QyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDWixNQUFNLElBQUkscUJBQXFCLENBQzdCLGtDQUFrQyxDQUNuQyxDQUFDO1FBQ0osQ0FBQztRQUVELElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUNaLE1BQU0sSUFBSSxxQkFBcUIsQ0FDN0IsOENBQThDLENBQy9DLENBQUM7UUFDSixDQUFDO1FBRUQsTUFBTSxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsR0FBRyxnQkFBZ0IsQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLENBQUM7UUFFdEUsZ0JBQWdCLENBQUMsZUFBZSxDQUFDLFNBQVMsRUFBRSxTQUFTLENBQUMsQ0FBQztRQUV2RCxNQUFNLGlCQUFpQixHQUFHLGdCQUFnQixDQUFDLGdCQUFnQixDQUN6RCxPQUFPLEVBQ1AsU0FBUyxFQUNULE1BQU0sQ0FDUCxDQUFDO1FBRUYsSUFBSSxDQUFDLGdCQUFnQixDQUFDLGFBQWEsQ0FBQyxTQUFTLEVBQUUsaUJBQWlCLENBQUMsRUFBRSxDQUFDO1lBQ2xFLE1BQU0sSUFBSSxxQkFBcUIsQ0FDN0IseURBQXlELENBQzFELENBQUM7UUFDSixDQUFDO0lBQ0gsQ0FBQztJQUVPLE1BQU0sQ0FBQyxXQUFXLENBQUMsTUFBYztRQUN2QyxNQUFNLEtBQUssR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ2hDLElBQUksWUFBZ0MsQ0FBQztRQUNyQyxJQUFJLFNBQTZCLENBQUM7UUFFbEMsS0FBSyxNQUFNLElBQUksSUFBSSxLQUFLLEVBQUUsQ0FBQztZQUN6QixNQUFNLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDckMsSUFBSSxHQUFHLEtBQUssR0FBRyxFQUFFLENBQUM7Z0JBQ2hCLFlBQVksR0FBRyxLQUFLLENBQUM7WUFDdkIsQ0FBQztpQkFBTSxJQUFJLEdBQUcsS0FBSyxJQUFJLEVBQUUsQ0FBQztnQkFDeEIsU0FBUyxHQUFHLEtBQUssQ0FBQztZQUNwQixDQUFDO1FBQ0gsQ0FBQztRQUVELElBQUksQ0FBQyxZQUFZLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztZQUNoQyxNQUFNLElBQUkscUJBQXFCLENBQzdCLHdEQUF3RCxDQUN6RCxDQUFDO1FBQ0osQ0FBQztRQUVELE1BQU0sU0FBUyxHQUFHLFFBQVEsQ0FBQyxZQUFZLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDN0MsSUFBSSxNQUFNLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUM7WUFDNUIsTUFBTSxJQUFJLHFCQUFxQixDQUM3Qix3REFBd0QsQ0FDekQsQ0FBQztRQUNKLENBQUM7UUFFRCxPQUFPLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxDQUFDO0lBQ2xDLENBQUM7SUFFTyxNQUFNLENBQUMsZUFBZSxDQUFDLFNBQWlCLEVBQUUsZ0JBQXdCO1FBQ3hFLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDO1FBQ2pELE1BQU0sY0FBYyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsVUFBVSxHQUFHLFNBQVMsQ0FBQyxDQUFDO1FBRXhELElBQUksY0FBYyxHQUFHLGdCQUFnQixFQUFFLENBQUM7WUFDdEMsTUFBTSxJQUFJLHFCQUFxQixDQUM3Qix5Q0FBeUMsU0FBUyxHQUFHLENBQ3RELENBQUM7UUFDSixDQUFDO0lBQ0gsQ0FBQztJQUVPLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FDN0IsT0FBd0IsRUFDeEIsU0FBaUIsRUFDakIsTUFBYztRQUVkLE1BQU0sYUFBYSxHQUFHLEdBQUcsU0FBUyxJQUFJLE9BQU8sQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQztRQUNqRSxPQUFPLE1BQU07YUFDVixVQUFVLENBQUMsUUFBUSxFQUFFLE1BQU0sQ0FBQzthQUM1QixNQUFNLENBQUMsYUFBYSxDQUFDO2FBQ3JCLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNuQixDQUFDO0lBRU8sTUFBTSxDQUFDLGFBQWEsQ0FBQyxDQUFTLEVBQUUsQ0FBUztRQUMvQyxJQUFJLENBQUMsQ0FBQyxNQUFNLEtBQUssQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQzFCLE9BQU8sS0FBSyxDQUFDO1FBQ2YsQ0FBQztRQUNELE9BQU8sTUFBTSxDQUFDLGVBQWUsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNoRSxDQUFDO0NBQ0YifQ==
|
|
@@ -40,11 +40,11 @@ test('"Client" headers', (t) => {
|
|
|
40
40
|
const ctx = t.context;
|
|
41
41
|
const client = ctx.createClient();
|
|
42
42
|
t.assert(client instanceof Client);
|
|
43
|
-
t.assert(Object.keys(client.
|
|
44
|
-
t.assert('Authorization' in client.
|
|
45
|
-
t.assert('User-Agent' in client.
|
|
46
|
-
t.assert(client.
|
|
47
|
-
t.assert(client.
|
|
43
|
+
t.assert(Object.keys(client.staticHeaders).length === 3);
|
|
44
|
+
t.assert('Authorization' in client.staticHeaders);
|
|
45
|
+
t.assert('User-Agent' in client.staticHeaders);
|
|
46
|
+
t.assert(client.staticHeaders.Authorization === ctx.apiKey);
|
|
47
|
+
t.assert(client.staticHeaders['User-Agent'] === ctx.userAgent);
|
|
48
48
|
});
|
|
49
49
|
test('"Client" extension', (t) => {
|
|
50
50
|
const ctx = t.context;
|
|
@@ -65,4 +65,4 @@ test('"Client" params extension', (t) => {
|
|
|
65
65
|
t.assert(Object.keys(newClient.params).length === Object.keys(client.params).length + 1);
|
|
66
66
|
t.assert(newClient.params.first_param !== client.params.first_param);
|
|
67
67
|
});
|
|
68
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
68
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JlYXRpb25GdW5jdGlvbmFsaXR5LnNwZWMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvc3BlYy9jbGllbnQvY3JlYXRpb25GdW5jdGlvbmFsaXR5LnNwZWMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxJQUFJLE1BQU0sS0FBSyxDQUFDO0FBRXZCLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUUxQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUU7SUFDcEIsTUFBTSxHQUFHLEdBQVEsQ0FBQyxDQUFDLE9BQU8sQ0FBQztJQUMzQixHQUFHLENBQUMsT0FBTyxHQUFHLGtCQUFrQixDQUFDO0lBQ2pDLEdBQUcsQ0FBQyxNQUFNLEdBQUcsc0JBQXNCLENBQUM7SUFDcEMsR0FBRyxDQUFDLFNBQVMsR0FBRyxrQkFBa0IsQ0FBQztJQUNuQyxHQUFHLENBQUMsTUFBTSxHQUFHLEVBQUUsV0FBVyxFQUFFLGFBQWEsRUFBRSxZQUFZLEVBQUUsY0FBYyxFQUFFLENBQUM7SUFFMUUsU0FBUyxZQUFZLENBQUMsTUFBTSxHQUFHLEtBQUs7UUFDbEMsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQ1osT0FBTyxJQUFJLE1BQU0sQ0FBQyxFQUFFLE9BQU8sRUFBRSxHQUFHLENBQUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxHQUFHLENBQUMsTUFBTSxFQUFFLFNBQVMsRUFBRSxHQUFHLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQztRQUM1RixDQUFDO1FBQ0QsT0FBTyxJQUFJLE1BQU0sQ0FBQztZQUNoQixPQUFPLEVBQUUsR0FBRyxDQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUUsR0FBRyxDQUFDLE1BQU0sRUFBRSxTQUFTLEVBQUUsR0FBRyxDQUFDLFNBQVMsRUFBRSxNQUFNLEVBQUUsR0FBRyxDQUFDLE1BQU07U0FDdkYsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELEdB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
|
|
@@ -37,4 +37,29 @@ test('"Client" delete request', async (t) => {
|
|
|
37
37
|
t.assert(isDictLike(data));
|
|
38
38
|
t.assert(Object.keys(data).length === 0);
|
|
39
39
|
});
|
|
40
|
-
|
|
40
|
+
test('"Client" post request without idempotency key adds one automatically', async (t) => {
|
|
41
|
+
const ctx = t.context;
|
|
42
|
+
const data = await ctx.client.request({
|
|
43
|
+
path: '/movements',
|
|
44
|
+
method: 'post',
|
|
45
|
+
json: { test: 'data' },
|
|
46
|
+
});
|
|
47
|
+
t.assert(!isAsyncGenerator(data));
|
|
48
|
+
t.assert(isDictLike(data));
|
|
49
|
+
t.assert(typeof data.headers['Idempotency-Key'] === 'string');
|
|
50
|
+
t.assert(data.headers['Idempotency-Key'].length > 0);
|
|
51
|
+
});
|
|
52
|
+
test('"Client" post request with idempotency key uses provided key', async (t) => {
|
|
53
|
+
const ctx = t.context;
|
|
54
|
+
const testIdempotencyKey = 'test-idempotency-key-123';
|
|
55
|
+
const data = await ctx.client.request({
|
|
56
|
+
path: '/movements',
|
|
57
|
+
method: 'post',
|
|
58
|
+
json: { test: 'data' },
|
|
59
|
+
idempotencyKey: testIdempotencyKey,
|
|
60
|
+
});
|
|
61
|
+
t.assert(!isAsyncGenerator(data));
|
|
62
|
+
t.assert(isDictLike(data));
|
|
63
|
+
t.assert(data.headers['Idempotency-Key'] === testIdempotencyKey);
|
|
64
|
+
});
|
|
65
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVxdWVzdEZ1bmN0aW9uYWxpdHkuc3BlYy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9zcGVjL2NsaWVudC9yZXF1ZXN0RnVuY3Rpb25hbGl0eS5zcGVjLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sSUFBSSxNQUFNLEtBQUssQ0FBQztBQUV2QixPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDMUMsT0FBTyxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUMzRCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsVUFBVSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFFL0QsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFO0lBQ2hCLE1BQU0sR0FBRyxHQUFRLENBQUMsQ0FBQyxPQUFPLENBQUM7SUFDM0IsR0FBRyxDQUFDLFNBQVMsR0FBRyxTQUFTLEVBQUUsQ0FBQztBQUM5QixDQUFDLENBQUMsQ0FBQztBQUVILElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRTtJQUNmLE1BQU0sR0FBRyxHQUFRLENBQUMsQ0FBQyxPQUFPLENBQUM7SUFDM0IsT0FBTyxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQztBQUN6QixDQUFDLENBQUMsQ0FBQztBQUVILElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRTtJQUNwQixNQUFNLEdBQUcsR0FBUSxDQUFDLENBQUMsT0FBTyxDQUFDO0lBQzNCLEdBQUcsQ0FBQyxPQUFPLEdBQUcsa0JBQWtCLENBQUM7SUFDakMsR0FBRyxDQUFDLE1BQU0sR0FBRyxzQkFBc0IsQ0FBQztJQUNwQyxHQUFHLENBQUMsU0FBUyxHQUFHLGtCQUFrQixDQUFDO0lBQ25DLEdBQUcsQ0FBQyxNQUFNLEdBQUcsRUFBRSxXQUFXLEVBQUUsYUFBYSxFQUFFLFlBQVksRUFBRSxj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
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|