@fiddupay/fiddupay-node 2.4.5 → 2.4.7
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 +50 -7
- package/dist/src/client.d.ts +19 -0
- package/dist/src/client.d.ts.map +1 -0
- package/dist/src/client.js +148 -0
- package/dist/src/client.js.map +1 -0
- package/dist/src/errors/index.d.ts +28 -0
- package/dist/src/errors/index.d.ts.map +1 -0
- package/dist/src/errors/index.js +59 -0
- package/dist/src/errors/index.js.map +1 -0
- package/dist/src/index.d.ts +41 -0
- package/dist/src/index.d.ts.map +1 -0
- package/dist/src/index.js +98 -0
- package/dist/src/index.js.map +1 -0
- package/dist/src/resources/analytics.d.ts +23 -0
- package/dist/src/resources/analytics.d.ts.map +1 -0
- package/dist/src/resources/analytics.js +36 -0
- package/dist/src/resources/analytics.js.map +1 -0
- package/dist/src/resources/balances.d.ts +23 -0
- package/dist/src/resources/balances.d.ts.map +1 -0
- package/dist/src/resources/balances.js +54 -0
- package/dist/src/resources/balances.js.map +1 -0
- package/dist/src/resources/contact.d.ts +19 -0
- package/dist/src/resources/contact.d.ts.map +1 -0
- package/dist/src/resources/contact.js +17 -0
- package/dist/src/resources/contact.js.map +1 -0
- package/dist/src/resources/customers.d.ts +104 -0
- package/dist/src/resources/customers.d.ts.map +1 -0
- package/dist/src/resources/customers.js +106 -0
- package/dist/src/resources/customers.js.map +1 -0
- package/dist/src/resources/invoices.d.ts +14 -0
- package/dist/src/resources/invoices.d.ts.map +1 -0
- package/dist/src/resources/invoices.js +19 -0
- package/dist/src/resources/invoices.js.map +1 -0
- package/dist/src/resources/merchants.d.ts +102 -0
- package/dist/src/resources/merchants.d.ts.map +1 -0
- package/dist/src/resources/merchants.js +104 -0
- package/dist/src/resources/merchants.js.map +1 -0
- package/dist/src/resources/payments.d.ts +71 -0
- package/dist/src/resources/payments.d.ts.map +1 -0
- package/dist/src/resources/payments.js +206 -0
- package/dist/src/resources/payments.js.map +1 -0
- package/dist/src/resources/refunds.d.ts +31 -0
- package/dist/src/resources/refunds.d.ts.map +1 -0
- package/dist/src/resources/refunds.js +66 -0
- package/dist/src/resources/refunds.js.map +1 -0
- package/dist/src/resources/sandbox.d.ts +11 -0
- package/dist/src/resources/sandbox.d.ts.map +1 -0
- package/dist/src/resources/sandbox.js +16 -0
- package/dist/src/resources/sandbox.js.map +1 -0
- package/dist/src/resources/security.d.ts +56 -0
- package/dist/src/resources/security.d.ts.map +1 -0
- package/dist/src/resources/security.js +70 -0
- package/dist/src/resources/security.js.map +1 -0
- package/dist/src/resources/transactions.d.ts +25 -0
- package/dist/src/resources/transactions.d.ts.map +1 -0
- package/dist/src/resources/transactions.js +21 -0
- package/dist/src/resources/transactions.js.map +1 -0
- package/dist/src/resources/wallets.d.ts +64 -0
- package/dist/src/resources/wallets.d.ts.map +1 -0
- package/dist/src/resources/wallets.js +78 -0
- package/dist/src/resources/wallets.js.map +1 -0
- package/dist/src/resources/webhooks.d.ts +17 -0
- package/dist/src/resources/webhooks.d.ts.map +1 -0
- package/dist/src/resources/webhooks.js +130 -0
- package/dist/src/resources/webhooks.js.map +1 -0
- package/dist/src/resources/withdrawals.d.ts +39 -0
- package/dist/src/resources/withdrawals.d.ts.map +1 -0
- package/dist/src/resources/withdrawals.js +69 -0
- package/dist/src/resources/withdrawals.js.map +1 -0
- package/dist/src/types/index.d.ts +530 -0
- package/dist/src/types/index.d.ts.map +1 -0
- package/dist/src/types/index.js +8 -0
- package/dist/src/types/index.js.map +1 -0
- package/dist/tests/error-handling.test.d.ts +2 -0
- package/dist/tests/error-handling.test.d.ts.map +1 -0
- package/dist/tests/error-handling.test.js +168 -0
- package/dist/tests/error-handling.test.js.map +1 -0
- package/dist/tests/fiddupay.test.d.ts +2 -0
- package/dist/tests/fiddupay.test.d.ts.map +1 -0
- package/dist/tests/fiddupay.test.js +336 -0
- package/dist/tests/fiddupay.test.js.map +1 -0
- package/dist/tests/sdk-integration.test.d.ts +2 -0
- package/dist/tests/sdk-integration.test.d.ts.map +1 -0
- package/dist/tests/sdk-integration.test.js +229 -0
- package/dist/tests/sdk-integration.test.js.map +1 -0
- package/dist/tests/setup.d.ts +2 -0
- package/dist/tests/setup.d.ts.map +1 -0
- package/dist/tests/setup.js +22 -0
- package/dist/tests/setup.js.map +1 -0
- package/dist/tests/webhooks.test.d.ts +2 -0
- package/dist/tests/webhooks.test.d.ts.map +1 -0
- package/dist/tests/webhooks.test.js +63 -0
- package/dist/tests/webhooks.test.js.map +1 -0
- package/package.json +2 -2
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
import { HttpClient } from '../client';
|
|
2
|
+
import { RequestOptions } from '../types';
|
|
3
|
+
export declare class Wallets {
|
|
4
|
+
private client;
|
|
5
|
+
constructor(client: HttpClient);
|
|
6
|
+
/**
|
|
7
|
+
* Get wallet configurations
|
|
8
|
+
*/
|
|
9
|
+
getConfigurations(options?: RequestOptions): Promise<any>;
|
|
10
|
+
/**
|
|
11
|
+
* Get actual wallet balances and volume statistics
|
|
12
|
+
*/
|
|
13
|
+
getBalances(options?: RequestOptions): Promise<{
|
|
14
|
+
wallets: any[];
|
|
15
|
+
}>;
|
|
16
|
+
/**
|
|
17
|
+
* Unified wallet setup (address, generate, or import)
|
|
18
|
+
*/
|
|
19
|
+
setup(data: {
|
|
20
|
+
crypto_type: string;
|
|
21
|
+
mode: 'address' | 'generate';
|
|
22
|
+
address?: string;
|
|
23
|
+
enable_all_evm?: boolean;
|
|
24
|
+
}, options?: RequestOptions): Promise<any>;
|
|
25
|
+
/**
|
|
26
|
+
* Generate a new wallet for a cryptocurrency
|
|
27
|
+
* @deprecated Use setup with mode 'generate' instead
|
|
28
|
+
*/
|
|
29
|
+
generate(data: {
|
|
30
|
+
crypto_type: string;
|
|
31
|
+
}, options?: RequestOptions): Promise<any>;
|
|
32
|
+
/**
|
|
33
|
+
* Configure a wallet with just an address (no private key)
|
|
34
|
+
* @deprecated Use setup with mode 'address' instead
|
|
35
|
+
*/
|
|
36
|
+
configureAddress(data: {
|
|
37
|
+
crypto_type: string;
|
|
38
|
+
address: string;
|
|
39
|
+
}, options?: RequestOptions): Promise<any>;
|
|
40
|
+
/**
|
|
41
|
+
* Get gas estimates
|
|
42
|
+
*/
|
|
43
|
+
getGasEstimates(options?: RequestOptions): Promise<any>;
|
|
44
|
+
/**
|
|
45
|
+
* Check gas requirements (alias for gasCheck with parameters)
|
|
46
|
+
*/
|
|
47
|
+
checkGasRequirements(params?: {
|
|
48
|
+
crypto_type?: string;
|
|
49
|
+
amount?: number;
|
|
50
|
+
}, options?: RequestOptions): Promise<any>;
|
|
51
|
+
/**
|
|
52
|
+
* Check wallet gas status
|
|
53
|
+
*/
|
|
54
|
+
gasCheck(options?: RequestOptions): Promise<any>;
|
|
55
|
+
/**
|
|
56
|
+
* Check withdrawal capability for crypto type
|
|
57
|
+
*/
|
|
58
|
+
checkWithdrawalCapability(cryptoType: string, options?: RequestOptions): Promise<any>;
|
|
59
|
+
/**
|
|
60
|
+
* Revoke/Remove wallet configuration
|
|
61
|
+
*/
|
|
62
|
+
revoke(cryptoType: string, options?: RequestOptions): Promise<any>;
|
|
63
|
+
}
|
|
64
|
+
//# sourceMappingURL=wallets.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wallets.d.ts","sourceRoot":"","sources":["../../../src/resources/wallets.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AACvC,OAAO,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAE1C,qBAAa,OAAO;IACN,OAAO,CAAC,MAAM;gBAAN,MAAM,EAAE,UAAU;IAEtC;;OAEG;IACG,iBAAiB,CAAC,OAAO,CAAC,EAAE,cAAc,GAAG,OAAO,CAAC,GAAG,CAAC;IAI/D;;OAEG;IACG,WAAW,CAAC,OAAO,CAAC,EAAE,cAAc,GAAG,OAAO,CAAC;QAAE,OAAO,EAAE,GAAG,EAAE,CAAA;KAAE,CAAC;IAIxE;;OAEG;IACG,KAAK,CAAC,IAAI,EAAE;QAChB,WAAW,EAAE,MAAM,CAAC;QACpB,IAAI,EAAE,SAAS,GAAG,UAAU,CAAC;QAC7B,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,cAAc,CAAC,EAAE,OAAO,CAAC;KAC1B,EAAE,OAAO,CAAC,EAAE,cAAc,GAAG,OAAO,CAAC,GAAG,CAAC;IAI1C;;;OAGG;IACG,QAAQ,CAAC,IAAI,EAAE;QAAE,WAAW,EAAE,MAAM,CAAA;KAAE,EAAE,OAAO,CAAC,EAAE,cAAc,GAAG,OAAO,CAAC,GAAG,CAAC;IAKrF;;;OAGG;IACG,gBAAgB,CAAC,IAAI,EAAE;QAC3B,WAAW,EAAE,MAAM,CAAC;QACpB,OAAO,EAAE,MAAM,CAAC;KACjB,EAAE,OAAO,CAAC,EAAE,cAAc,GAAG,OAAO,CAAC,GAAG,CAAC;IAK1C;;OAEG;IACG,eAAe,CAAC,OAAO,CAAC,EAAE,cAAc,GAAG,OAAO,CAAC,GAAG,CAAC;IAI7D;;OAEG;IACG,oBAAoB,CAAC,MAAM,CAAC,EAAE;QAClC,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,MAAM,CAAC,EAAE,MAAM,CAAC;KACjB,EAAE,OAAO,CAAC,EAAE,cAAc,GAAG,OAAO,CAAC,GAAG,CAAC;IAS1C;;OAEG;IACG,QAAQ,CAAC,OAAO,CAAC,EAAE,cAAc,GAAG,OAAO,CAAC,GAAG,CAAC;IAItD;;OAEG;IACG,yBAAyB,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,cAAc,GAAG,OAAO,CAAC,GAAG,CAAC;IAI3F;;OAEG;IACG,MAAM,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,cAAc,GAAG,OAAO,CAAC,GAAG,CAAC;CAGzE"}
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.Wallets = void 0;
|
|
4
|
+
class Wallets {
|
|
5
|
+
constructor(client) {
|
|
6
|
+
this.client = client;
|
|
7
|
+
}
|
|
8
|
+
/**
|
|
9
|
+
* Get wallet configurations
|
|
10
|
+
*/
|
|
11
|
+
async getConfigurations(options) {
|
|
12
|
+
return this.client.request('GET', '/api/v1/merchants/wallets');
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Get actual wallet balances and volume statistics
|
|
16
|
+
*/
|
|
17
|
+
async getBalances(options) {
|
|
18
|
+
return this.client.request('GET', '/api/v1/merchants/wallets/balances');
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Unified wallet setup (address, generate, or import)
|
|
22
|
+
*/
|
|
23
|
+
async setup(data, options) {
|
|
24
|
+
return this.client.request('POST', '/api/v1/merchants/wallets', data);
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Generate a new wallet for a cryptocurrency
|
|
28
|
+
* @deprecated Use setup with mode 'generate' instead
|
|
29
|
+
*/
|
|
30
|
+
async generate(data, options) {
|
|
31
|
+
return this.client.request('POST', '/api/v1/merchants/wallets/generate', data);
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Configure a wallet with just an address (no private key)
|
|
35
|
+
* @deprecated Use setup with mode 'address' instead
|
|
36
|
+
*/
|
|
37
|
+
async configureAddress(data, options) {
|
|
38
|
+
return this.client.request('POST', '/api/v1/merchants/wallets/configure-address', data);
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Get gas estimates
|
|
42
|
+
*/
|
|
43
|
+
async getGasEstimates(options) {
|
|
44
|
+
return this.client.request('GET', '/api/v1/merchants/wallets/gas-estimates');
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Check gas requirements (alias for gasCheck with parameters)
|
|
48
|
+
*/
|
|
49
|
+
async checkGasRequirements(params, options) {
|
|
50
|
+
const queryParams = new URLSearchParams();
|
|
51
|
+
if (params?.crypto_type)
|
|
52
|
+
queryParams.append('crypto_type', params.crypto_type);
|
|
53
|
+
if (params?.amount)
|
|
54
|
+
queryParams.append('amount', params.amount.toString());
|
|
55
|
+
const url = `/api/v1/merchants/wallets/gas-check${queryParams.toString() ? `?${queryParams.toString()}` : '?crypto_type=ETH&amount=1.0'}`;
|
|
56
|
+
return this.client.request('GET', url);
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Check wallet gas status
|
|
60
|
+
*/
|
|
61
|
+
async gasCheck(options) {
|
|
62
|
+
return this.client.request('GET', '/api/v1/merchants/wallets/gas-check');
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* Check withdrawal capability for crypto type
|
|
66
|
+
*/
|
|
67
|
+
async checkWithdrawalCapability(cryptoType, options) {
|
|
68
|
+
return this.client.request('GET', `/api/v1/merchants/wallets/withdrawal-capability/${cryptoType}`);
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* Revoke/Remove wallet configuration
|
|
72
|
+
*/
|
|
73
|
+
async revoke(cryptoType, options) {
|
|
74
|
+
return this.client.request('DELETE', `/api/v1/merchants/wallets/${cryptoType}`);
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
exports.Wallets = Wallets;
|
|
78
|
+
//# sourceMappingURL=wallets.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wallets.js","sourceRoot":"","sources":["../../../src/resources/wallets.ts"],"names":[],"mappings":";;;AAGA,MAAa,OAAO;IAClB,YAAoB,MAAkB;QAAlB,WAAM,GAAN,MAAM,CAAY;IAAI,CAAC;IAE3C;;OAEG;IACH,KAAK,CAAC,iBAAiB,CAAC,OAAwB;QAC9C,OAAO,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,EAAE,2BAA2B,CAAC,CAAC;IACjE,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,WAAW,CAAC,OAAwB;QACxC,OAAO,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,EAAE,oCAAoC,CAAC,CAAC;IAC1E,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,KAAK,CAAC,IAKX,EAAE,OAAwB;QACzB,OAAO,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,EAAE,2BAA2B,EAAE,IAAI,CAAC,CAAC;IACxE,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,QAAQ,CAAC,IAA6B,EAAE,OAAwB;QACpE,OAAO,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,EAAE,oCAAoC,EAAE,IAAI,CAAC,CAAC;IACjF,CAAC;IAGD;;;OAGG;IACH,KAAK,CAAC,gBAAgB,CAAC,IAGtB,EAAE,OAAwB;QACzB,OAAO,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,EAAE,6CAA6C,EAAE,IAAI,CAAC,CAAC;IAC1F,CAAC;IAGD;;OAEG;IACH,KAAK,CAAC,eAAe,CAAC,OAAwB;QAC5C,OAAO,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,EAAE,yCAAyC,CAAC,CAAC;IAC/E,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,oBAAoB,CAAC,MAG1B,EAAE,OAAwB;QACzB,MAAM,WAAW,GAAG,IAAI,eAAe,EAAE,CAAC;QAC1C,IAAI,MAAM,EAAE,WAAW;YAAE,WAAW,CAAC,MAAM,CAAC,aAAa,EAAE,MAAM,CAAC,WAAW,CAAC,CAAC;QAC/E,IAAI,MAAM,EAAE,MAAM;YAAE,WAAW,CAAC,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC;QAE3E,MAAM,GAAG,GAAG,sCAAsC,WAAW,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,IAAI,WAAW,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,CAAC,6BAA6B,EAAE,CAAC;QAC1I,OAAO,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;IACzC,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,QAAQ,CAAC,OAAwB;QACrC,OAAO,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,EAAE,qCAAqC,CAAC,CAAC;IAC3E,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,yBAAyB,CAAC,UAAkB,EAAE,OAAwB;QAC1E,OAAO,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,EAAE,mDAAmD,UAAU,EAAE,CAAC,CAAC;IACrG,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,MAAM,CAAC,UAAkB,EAAE,OAAwB;QACvD,OAAO,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,QAAQ,EAAE,6BAA6B,UAAU,EAAE,CAAC,CAAC;IAClF,CAAC;CACF;AA5FD,0BA4FC"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { WebhookEvent } from '../types';
|
|
2
|
+
export declare class Webhooks {
|
|
3
|
+
/**
|
|
4
|
+
* Construct and verify a webhook event from the request body and signature
|
|
5
|
+
*/
|
|
6
|
+
static constructEvent(payload: string | Buffer, signature: string, secret: string, tolerance?: number): WebhookEvent;
|
|
7
|
+
/**
|
|
8
|
+
* Verify webhook signature
|
|
9
|
+
*/
|
|
10
|
+
static verifySignature(payload: string, signature: string, secret: string, tolerance?: number): boolean;
|
|
11
|
+
/**
|
|
12
|
+
* Generate webhook signature for testing
|
|
13
|
+
*/
|
|
14
|
+
static generateSignature(payload: string, secret: string): string;
|
|
15
|
+
private static validateWebhookEvent;
|
|
16
|
+
}
|
|
17
|
+
//# sourceMappingURL=webhooks.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"webhooks.d.ts","sourceRoot":"","sources":["../../../src/resources/webhooks.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAoB,MAAM,UAAU,CAAC;AAG1D,qBAAa,QAAQ;IACnB;;OAEG;IACH,MAAM,CAAC,cAAc,CACnB,OAAO,EAAE,MAAM,GAAG,MAAM,EACxB,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,MAAM,EACd,SAAS,GAAE,MAAY,GACtB,YAAY;IAmBf;;OAEG;IACH,MAAM,CAAC,eAAe,CACpB,OAAO,EAAE,MAAM,EACf,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,MAAM,EACd,SAAS,GAAE,MAAY,GACtB,OAAO;IAoCV;;OAEG;IACH,MAAM,CAAC,iBAAiB,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM;IAWjE,OAAO,CAAC,MAAM,CAAC,oBAAoB;CA6BpC"}
|
|
@@ -0,0 +1,130 @@
|
|
|
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 () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.Webhooks = void 0;
|
|
37
|
+
const crypto = __importStar(require("crypto"));
|
|
38
|
+
const errors_1 = require("../errors");
|
|
39
|
+
class Webhooks {
|
|
40
|
+
/**
|
|
41
|
+
* Construct and verify a webhook event from the request body and signature
|
|
42
|
+
*/
|
|
43
|
+
static constructEvent(payload, signature, secret, tolerance = 300 // 5 minutes
|
|
44
|
+
) {
|
|
45
|
+
const payloadString = typeof payload === 'string' ? payload : payload.toString('utf8');
|
|
46
|
+
if (!this.verifySignature(payloadString, signature, secret, tolerance)) {
|
|
47
|
+
throw new errors_1.FidduPayError('Invalid webhook signature', 'webhook_signature_verification_failed');
|
|
48
|
+
}
|
|
49
|
+
try {
|
|
50
|
+
const event = JSON.parse(payloadString);
|
|
51
|
+
this.validateWebhookEvent(event);
|
|
52
|
+
return event;
|
|
53
|
+
}
|
|
54
|
+
catch (error) {
|
|
55
|
+
if (error instanceof errors_1.FidduPayError) {
|
|
56
|
+
throw error;
|
|
57
|
+
}
|
|
58
|
+
throw new errors_1.FidduPayError('Invalid webhook payload', 'webhook_payload_invalid');
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Verify webhook signature
|
|
63
|
+
*/
|
|
64
|
+
static verifySignature(payload, signature, secret, tolerance = 300) {
|
|
65
|
+
try {
|
|
66
|
+
// Parse signature header (format: "t=timestamp,v1=signature")
|
|
67
|
+
const elements = signature.split(',');
|
|
68
|
+
const timestamp = elements.find(el => el.startsWith('t='))?.split('=')[1];
|
|
69
|
+
const sig = elements.find(el => el.startsWith('v1='))?.split('=')[1];
|
|
70
|
+
if (!timestamp || !sig) {
|
|
71
|
+
return false;
|
|
72
|
+
}
|
|
73
|
+
// Check timestamp tolerance
|
|
74
|
+
const timestampNum = parseInt(timestamp, 10);
|
|
75
|
+
const now = Math.floor(Date.now() / 1000);
|
|
76
|
+
if (Math.abs(now - timestampNum) > tolerance) {
|
|
77
|
+
return false;
|
|
78
|
+
}
|
|
79
|
+
// Compute expected signature
|
|
80
|
+
const signedPayload = `${timestamp}.${payload}`;
|
|
81
|
+
const expectedSig = crypto
|
|
82
|
+
.createHmac('sha256', secret)
|
|
83
|
+
.update(signedPayload, 'utf8')
|
|
84
|
+
.digest('hex');
|
|
85
|
+
// Compare signatures using constant-time comparison
|
|
86
|
+
return crypto.timingSafeEqual(Buffer.from(sig, 'hex'), Buffer.from(expectedSig, 'hex'));
|
|
87
|
+
}
|
|
88
|
+
catch (error) {
|
|
89
|
+
return false;
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* Generate webhook signature for testing
|
|
94
|
+
*/
|
|
95
|
+
static generateSignature(payload, secret) {
|
|
96
|
+
const timestamp = Math.floor(Date.now() / 1000);
|
|
97
|
+
const signedPayload = `${timestamp}.${payload}`;
|
|
98
|
+
const signature = crypto
|
|
99
|
+
.createHmac('sha256', secret)
|
|
100
|
+
.update(signedPayload, 'utf8')
|
|
101
|
+
.digest('hex');
|
|
102
|
+
return `t=${timestamp},v1=${signature}`;
|
|
103
|
+
}
|
|
104
|
+
static validateWebhookEvent(event) {
|
|
105
|
+
if (!event.id || typeof event.id !== 'string') {
|
|
106
|
+
throw new errors_1.FidduPayError('Invalid webhook event: missing or invalid id', 'webhook_event_invalid');
|
|
107
|
+
}
|
|
108
|
+
if (!event.type || typeof event.type !== 'string') {
|
|
109
|
+
throw new errors_1.FidduPayError('Invalid webhook event: missing or invalid type', 'webhook_event_invalid');
|
|
110
|
+
}
|
|
111
|
+
const validTypes = [
|
|
112
|
+
'payment.confirmed',
|
|
113
|
+
'payment.expired',
|
|
114
|
+
'payment.failed',
|
|
115
|
+
'refund.completed',
|
|
116
|
+
'refund.failed'
|
|
117
|
+
];
|
|
118
|
+
if (!validTypes.includes(event.type)) {
|
|
119
|
+
throw new errors_1.FidduPayError(`Invalid webhook event type: ${event.type}`, 'webhook_event_invalid');
|
|
120
|
+
}
|
|
121
|
+
if (!event.data) {
|
|
122
|
+
throw new errors_1.FidduPayError('Invalid webhook event: missing data', 'webhook_event_invalid');
|
|
123
|
+
}
|
|
124
|
+
if (!event.created_at || typeof event.created_at !== 'string') {
|
|
125
|
+
throw new errors_1.FidduPayError('Invalid webhook event: missing or invalid created_at', 'webhook_event_invalid');
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
exports.Webhooks = Webhooks;
|
|
130
|
+
//# sourceMappingURL=webhooks.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"webhooks.js","sourceRoot":"","sources":["../../../src/resources/webhooks.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import { HttpClient } from '../client';
|
|
2
|
+
import { Withdrawal, CreateWithdrawalRequest, ListWithdrawalsParams, PaginatedResponse } from '../types';
|
|
3
|
+
export declare class Withdrawals {
|
|
4
|
+
private client;
|
|
5
|
+
constructor(client: HttpClient);
|
|
6
|
+
/**
|
|
7
|
+
* Create a new withdrawal
|
|
8
|
+
*/
|
|
9
|
+
create(data: CreateWithdrawalRequest): Promise<Withdrawal>;
|
|
10
|
+
/**
|
|
11
|
+
* List withdrawals with optional filters
|
|
12
|
+
*/
|
|
13
|
+
list(params?: ListWithdrawalsParams): Promise<PaginatedResponse<Withdrawal>>;
|
|
14
|
+
/**
|
|
15
|
+
* Get withdrawal by ID
|
|
16
|
+
*/
|
|
17
|
+
get(withdrawalId: string): Promise<Withdrawal>;
|
|
18
|
+
/**
|
|
19
|
+
* Cancel withdrawal
|
|
20
|
+
*/
|
|
21
|
+
cancel(withdrawalId: string): Promise<Withdrawal>;
|
|
22
|
+
/**
|
|
23
|
+
* Process withdrawal (managed mode or admin triggered)
|
|
24
|
+
*/
|
|
25
|
+
process(withdrawalId: string, encryptionPassword?: string): Promise<Withdrawal>;
|
|
26
|
+
/**
|
|
27
|
+
* Validate gas requirements for a withdrawal
|
|
28
|
+
*/
|
|
29
|
+
validateGas(cryptoType: string, amount: string): Promise<any>;
|
|
30
|
+
/**
|
|
31
|
+
* Get gas price estimates for all supported networks
|
|
32
|
+
*/
|
|
33
|
+
getGasEstimates(): Promise<any>;
|
|
34
|
+
/**
|
|
35
|
+
* Check if withdrawal is possible for a specific cryptocurrency
|
|
36
|
+
*/
|
|
37
|
+
checkCapability(cryptoType: string): Promise<any>;
|
|
38
|
+
}
|
|
39
|
+
//# sourceMappingURL=withdrawals.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"withdrawals.d.ts","sourceRoot":"","sources":["../../../src/resources/withdrawals.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AACvC,OAAO,EACL,UAAU,EACV,uBAAuB,EACvB,qBAAqB,EACrB,iBAAiB,EAClB,MAAM,UAAU,CAAC;AAElB,qBAAa,WAAW;IACV,OAAO,CAAC,MAAM;gBAAN,MAAM,EAAE,UAAU;IAEtC;;OAEG;IACG,MAAM,CAAC,IAAI,EAAE,uBAAuB,GAAG,OAAO,CAAC,UAAU,CAAC;IAIhE;;OAEG;IACG,IAAI,CAAC,MAAM,CAAC,EAAE,qBAAqB,GAAG,OAAO,CAAC,iBAAiB,CAAC,UAAU,CAAC,CAAC;IAYlF;;OAEG;IACG,GAAG,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC;IAIpD;;OAEG;IACG,MAAM,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC;IAIvD;;OAEG;IACG,OAAO,CAAC,YAAY,EAAE,MAAM,EAAE,kBAAkB,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC;IAKrF;;OAEG;IACG,WAAW,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC;IAInE;;OAEG;IACG,eAAe,IAAI,OAAO,CAAC,GAAG,CAAC;IAIrC;;OAEG;IACG,eAAe,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC;CAGxD"}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.Withdrawals = void 0;
|
|
4
|
+
class Withdrawals {
|
|
5
|
+
constructor(client) {
|
|
6
|
+
this.client = client;
|
|
7
|
+
}
|
|
8
|
+
/**
|
|
9
|
+
* Create a new withdrawal
|
|
10
|
+
*/
|
|
11
|
+
async create(data) {
|
|
12
|
+
return this.client.request('POST', '/api/v1/merchants/withdrawals', data);
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* List withdrawals with optional filters
|
|
16
|
+
*/
|
|
17
|
+
async list(params) {
|
|
18
|
+
const queryParams = new URLSearchParams();
|
|
19
|
+
if (params?.limit)
|
|
20
|
+
queryParams.append('limit', params.limit.toString());
|
|
21
|
+
if (params?.offset)
|
|
22
|
+
queryParams.append('offset', params.offset.toString());
|
|
23
|
+
if (params?.status)
|
|
24
|
+
queryParams.append('status', params.status);
|
|
25
|
+
if (params?.crypto_type)
|
|
26
|
+
queryParams.append('crypto_type', params.crypto_type);
|
|
27
|
+
const url = `/api/v1/merchants/withdrawals${queryParams.toString() ? `?${queryParams.toString()}` : ''}`;
|
|
28
|
+
return this.client.request('GET', url);
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Get withdrawal by ID
|
|
32
|
+
*/
|
|
33
|
+
async get(withdrawalId) {
|
|
34
|
+
return this.client.request('GET', `/api/v1/merchants/withdrawals/${withdrawalId}`);
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Cancel withdrawal
|
|
38
|
+
*/
|
|
39
|
+
async cancel(withdrawalId) {
|
|
40
|
+
return this.client.request('POST', `/api/v1/merchants/withdrawals/${withdrawalId}/cancel`);
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Process withdrawal (managed mode or admin triggered)
|
|
44
|
+
*/
|
|
45
|
+
async process(withdrawalId, encryptionPassword) {
|
|
46
|
+
const data = encryptionPassword ? { encryption_password: encryptionPassword } : {};
|
|
47
|
+
return this.client.request('POST', `/api/v1/merchants/withdrawals/${withdrawalId}/process`, data);
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Validate gas requirements for a withdrawal
|
|
51
|
+
*/
|
|
52
|
+
async validateGas(cryptoType, amount) {
|
|
53
|
+
return this.client.request('GET', `/api/v1/merchants/wallets/gas-check?crypto_type=${cryptoType}&amount=${amount}`);
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Get gas price estimates for all supported networks
|
|
57
|
+
*/
|
|
58
|
+
async getGasEstimates() {
|
|
59
|
+
return this.client.request('GET', '/api/v1/merchants/wallets/gas-estimates');
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Check if withdrawal is possible for a specific cryptocurrency
|
|
63
|
+
*/
|
|
64
|
+
async checkCapability(cryptoType) {
|
|
65
|
+
return this.client.request('GET', `/api/v1/merchants/wallets/withdrawal-capability/${cryptoType}`);
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
exports.Withdrawals = Withdrawals;
|
|
69
|
+
//# sourceMappingURL=withdrawals.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"withdrawals.js","sourceRoot":"","sources":["../../../src/resources/withdrawals.ts"],"names":[],"mappings":";;;AAQA,MAAa,WAAW;IACtB,YAAoB,MAAkB;QAAlB,WAAM,GAAN,MAAM,CAAY;IAAI,CAAC;IAE3C;;OAEG;IACH,KAAK,CAAC,MAAM,CAAC,IAA6B;QACxC,OAAO,IAAI,CAAC,MAAM,CAAC,OAAO,CAAa,MAAM,EAAE,+BAA+B,EAAE,IAAI,CAAC,CAAC;IACxF,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,IAAI,CAAC,MAA8B;QACvC,MAAM,WAAW,GAAG,IAAI,eAAe,EAAE,CAAC;QAE1C,IAAI,MAAM,EAAE,KAAK;YAAE,WAAW,CAAC,MAAM,CAAC,OAAO,EAAE,MAAM,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC;QACxE,IAAI,MAAM,EAAE,MAAM;YAAE,WAAW,CAAC,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC;QAC3E,IAAI,MAAM,EAAE,MAAM;YAAE,WAAW,CAAC,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;QAChE,IAAI,MAAM,EAAE,WAAW;YAAE,WAAW,CAAC,MAAM,CAAC,aAAa,EAAE,MAAM,CAAC,WAAW,CAAC,CAAC;QAE/E,MAAM,GAAG,GAAG,gCAAgC,WAAW,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,IAAI,WAAW,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;QACzG,OAAO,IAAI,CAAC,MAAM,CAAC,OAAO,CAAgC,KAAK,EAAE,GAAG,CAAC,CAAC;IACxE,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,GAAG,CAAC,YAAoB;QAC5B,OAAO,IAAI,CAAC,MAAM,CAAC,OAAO,CAAa,KAAK,EAAE,iCAAiC,YAAY,EAAE,CAAC,CAAC;IACjG,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,MAAM,CAAC,YAAoB;QAC/B,OAAO,IAAI,CAAC,MAAM,CAAC,OAAO,CAAa,MAAM,EAAE,iCAAiC,YAAY,SAAS,CAAC,CAAC;IACzG,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,OAAO,CAAC,YAAoB,EAAE,kBAA2B;QAC7D,MAAM,IAAI,GAAG,kBAAkB,CAAC,CAAC,CAAC,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACnF,OAAO,IAAI,CAAC,MAAM,CAAC,OAAO,CAAa,MAAM,EAAE,iCAAiC,YAAY,UAAU,EAAE,IAAI,CAAC,CAAC;IAChH,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,WAAW,CAAC,UAAkB,EAAE,MAAc;QAClD,OAAO,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,EAAE,mDAAmD,UAAU,WAAW,MAAM,EAAE,CAAC,CAAC;IACtH,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,eAAe;QACnB,OAAO,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,EAAE,yCAAyC,CAAC,CAAC;IAC/E,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,eAAe,CAAC,UAAkB;QACtC,OAAO,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,EAAE,mDAAmD,UAAU,EAAE,CAAC,CAAC;IACrG,CAAC;CACF;AAnED,kCAmEC"}
|