@fiddupay/fiddupay-node 1.0.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 +248 -0
- package/dist/client.d.ts +18 -0
- package/dist/client.d.ts.map +1 -0
- package/dist/client.js +140 -0
- package/dist/client.js.map +1 -0
- package/dist/errors/index.d.ts +28 -0
- package/dist/errors/index.d.ts.map +1 -0
- package/dist/errors/index.js +59 -0
- package/dist/errors/index.js.map +1 -0
- package/dist/index.d.ts +21 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +62 -0
- package/dist/index.js.map +1 -0
- package/dist/resources/analytics.d.ts +30 -0
- package/dist/resources/analytics.d.ts.map +1 -0
- package/dist/resources/analytics.js +31 -0
- package/dist/resources/analytics.js.map +1 -0
- package/dist/resources/merchants.d.ts +47 -0
- package/dist/resources/merchants.d.ts.map +1 -0
- package/dist/resources/merchants.js +40 -0
- package/dist/resources/merchants.js.map +1 -0
- package/dist/resources/payments.d.ts +24 -0
- package/dist/resources/payments.d.ts.map +1 -0
- package/dist/resources/payments.js +83 -0
- package/dist/resources/payments.js.map +1 -0
- package/dist/resources/refunds.d.ts +27 -0
- package/dist/resources/refunds.d.ts.map +1 -0
- package/dist/resources/refunds.js +54 -0
- package/dist/resources/refunds.js.map +1 -0
- package/dist/resources/webhooks.d.ts +17 -0
- package/dist/resources/webhooks.d.ts.map +1 -0
- package/dist/resources/webhooks.js +130 -0
- package/dist/resources/webhooks.js.map +1 -0
- package/dist/types/index.d.ts +110 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +4 -0
- package/dist/types/index.js.map +1 -0
- package/package.json +65 -0
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.AnalyticsResource = void 0;
|
|
4
|
+
class AnalyticsResource {
|
|
5
|
+
constructor(client) {
|
|
6
|
+
this.client = client;
|
|
7
|
+
}
|
|
8
|
+
/**
|
|
9
|
+
* Get analytics data
|
|
10
|
+
*/
|
|
11
|
+
async retrieve(params, options) {
|
|
12
|
+
const queryParams = new URLSearchParams();
|
|
13
|
+
if (params?.start_date)
|
|
14
|
+
queryParams.append('start_date', params.start_date);
|
|
15
|
+
if (params?.end_date)
|
|
16
|
+
queryParams.append('end_date', params.end_date);
|
|
17
|
+
if (params?.granularity)
|
|
18
|
+
queryParams.append('granularity', params.granularity);
|
|
19
|
+
const query = queryParams.toString();
|
|
20
|
+
const path = query ? `/analytics?${query}` : '/analytics';
|
|
21
|
+
return this.client.get(path, options);
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Export analytics data
|
|
25
|
+
*/
|
|
26
|
+
async export(params, options) {
|
|
27
|
+
return this.client.post('/analytics/export', params, options);
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
exports.AnalyticsResource = AnalyticsResource;
|
|
31
|
+
//# sourceMappingURL=analytics.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"analytics.js","sourceRoot":"","sources":["../../src/resources/analytics.ts"],"names":[],"mappings":";;;AAGA,MAAa,iBAAiB;IAC5B,YAAoB,MAAkB;QAAlB,WAAM,GAAN,MAAM,CAAY;IAAG,CAAC;IAE1C;;OAEG;IACH,KAAK,CAAC,QAAQ,CAAC,MAId,EAAE,OAAwB;QACzB,MAAM,WAAW,GAAG,IAAI,eAAe,EAAE,CAAC;QAE1C,IAAI,MAAM,EAAE,UAAU;YAAE,WAAW,CAAC,MAAM,CAAC,YAAY,EAAE,MAAM,CAAC,UAAU,CAAC,CAAC;QAC5E,IAAI,MAAM,EAAE,QAAQ;YAAE,WAAW,CAAC,MAAM,CAAC,UAAU,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC;QACtE,IAAI,MAAM,EAAE,WAAW;YAAE,WAAW,CAAC,MAAM,CAAC,aAAa,EAAE,MAAM,CAAC,WAAW,CAAC,CAAC;QAE/E,MAAM,KAAK,GAAG,WAAW,CAAC,QAAQ,EAAE,CAAC;QACrC,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,cAAc,KAAK,EAAE,CAAC,CAAC,CAAC,YAAY,CAAC;QAE1D,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,CAAY,IAAI,EAAE,OAAO,CAAC,CAAC;IACnD,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,MAAM,CAAC,MAIZ,EAAE,OAAwB;QAQzB,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,mBAAmB,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;IAChE,CAAC;CACF;AAxCD,8CAwCC"}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import { HttpClient } from '../client';
|
|
2
|
+
import { Merchant, RequestOptions } from '../types';
|
|
3
|
+
export declare class Merchants {
|
|
4
|
+
private client;
|
|
5
|
+
constructor(client: HttpClient);
|
|
6
|
+
/**
|
|
7
|
+
* Get current merchant profile
|
|
8
|
+
*/
|
|
9
|
+
retrieve(options?: RequestOptions): Promise<Merchant>;
|
|
10
|
+
/**
|
|
11
|
+
* Update webhook URL
|
|
12
|
+
*/
|
|
13
|
+
updateWebhook(data: {
|
|
14
|
+
url: string;
|
|
15
|
+
}, options?: RequestOptions): Promise<{
|
|
16
|
+
message: string;
|
|
17
|
+
webhook_url: string;
|
|
18
|
+
}>;
|
|
19
|
+
/**
|
|
20
|
+
* Get merchant balance
|
|
21
|
+
*/
|
|
22
|
+
getBalance(options?: RequestOptions): Promise<{
|
|
23
|
+
balances: Array<{
|
|
24
|
+
crypto_type: string;
|
|
25
|
+
balance: string;
|
|
26
|
+
balance_usd: string;
|
|
27
|
+
pending: string;
|
|
28
|
+
pending_usd: string;
|
|
29
|
+
}>;
|
|
30
|
+
total_balance_usd: string;
|
|
31
|
+
total_pending_usd: string;
|
|
32
|
+
}>;
|
|
33
|
+
/**
|
|
34
|
+
* Set wallet addresses for automatic forwarding
|
|
35
|
+
*/
|
|
36
|
+
setWallets(wallets: Record<string, string>, options?: RequestOptions): Promise<{
|
|
37
|
+
message: string;
|
|
38
|
+
wallets: Record<string, string>;
|
|
39
|
+
}>;
|
|
40
|
+
/**
|
|
41
|
+
* Regenerate API key
|
|
42
|
+
*/
|
|
43
|
+
regenerateApiKey(options?: RequestOptions): Promise<{
|
|
44
|
+
api_key: string;
|
|
45
|
+
}>;
|
|
46
|
+
}
|
|
47
|
+
//# sourceMappingURL=merchants.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"merchants.d.ts","sourceRoot":"","sources":["../../src/resources/merchants.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AACvC,OAAO,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAEpD,qBAAa,SAAS;IACR,OAAO,CAAC,MAAM;gBAAN,MAAM,EAAE,UAAU;IAEtC;;OAEG;IACG,QAAQ,CAAC,OAAO,CAAC,EAAE,cAAc,GAAG,OAAO,CAAC,QAAQ,CAAC;IAI3D;;OAEG;IACG,aAAa,CAAC,IAAI,EAAE;QAAE,GAAG,EAAE,MAAM,CAAA;KAAE,EAAE,OAAO,CAAC,EAAE,cAAc,GAAG,OAAO,CAAC;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAA;KAAE,CAAC;IAIvH;;OAEG;IACG,UAAU,CAAC,OAAO,CAAC,EAAE,cAAc,GAAG,OAAO,CAAC;QAClD,QAAQ,EAAE,KAAK,CAAC;YACd,WAAW,EAAE,MAAM,CAAC;YACpB,OAAO,EAAE,MAAM,CAAC;YAChB,WAAW,EAAE,MAAM,CAAC;YACpB,OAAO,EAAE,MAAM,CAAC;YAChB,WAAW,EAAE,MAAM,CAAC;SACrB,CAAC,CAAC;QACH,iBAAiB,EAAE,MAAM,CAAC;QAC1B,iBAAiB,EAAE,MAAM,CAAC;KAC3B,CAAC;IAIF;;OAEG;IACG,UAAU,CACd,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAC/B,OAAO,CAAC,EAAE,cAAc,GACvB,OAAO,CAAC;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;KAAE,CAAC;IAIhE;;OAEG;IACG,gBAAgB,CAAC,OAAO,CAAC,EAAE,cAAc,GAAG,OAAO,CAAC;QAAE,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC;CAG/E"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.Merchants = void 0;
|
|
4
|
+
class Merchants {
|
|
5
|
+
constructor(client) {
|
|
6
|
+
this.client = client;
|
|
7
|
+
}
|
|
8
|
+
/**
|
|
9
|
+
* Get current merchant profile
|
|
10
|
+
*/
|
|
11
|
+
async retrieve(options) {
|
|
12
|
+
return this.client.get('/merchants/profile', options);
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Update webhook URL
|
|
16
|
+
*/
|
|
17
|
+
async updateWebhook(data, options) {
|
|
18
|
+
return this.client.put('/merchants/webhook', data, options);
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Get merchant balance
|
|
22
|
+
*/
|
|
23
|
+
async getBalance(options) {
|
|
24
|
+
return this.client.get('/merchants/balance', options);
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Set wallet addresses for automatic forwarding
|
|
28
|
+
*/
|
|
29
|
+
async setWallets(wallets, options) {
|
|
30
|
+
return this.client.put('/merchants/wallets', { wallets }, options);
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Regenerate API key
|
|
34
|
+
*/
|
|
35
|
+
async regenerateApiKey(options) {
|
|
36
|
+
return this.client.post('/merchants/api-key/regenerate', {}, options);
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
exports.Merchants = Merchants;
|
|
40
|
+
//# sourceMappingURL=merchants.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"merchants.js","sourceRoot":"","sources":["../../src/resources/merchants.ts"],"names":[],"mappings":";;;AAGA,MAAa,SAAS;IACpB,YAAoB,MAAkB;QAAlB,WAAM,GAAN,MAAM,CAAY;IAAG,CAAC;IAE1C;;OAEG;IACH,KAAK,CAAC,QAAQ,CAAC,OAAwB;QACrC,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,CAAW,oBAAoB,EAAE,OAAO,CAAC,CAAC;IAClE,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,aAAa,CAAC,IAAqB,EAAE,OAAwB;QACjE,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,oBAAoB,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;IAC9D,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,UAAU,CAAC,OAAwB;QAWvC,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,oBAAoB,EAAE,OAAO,CAAC,CAAC;IACxD,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,UAAU,CACd,OAA+B,EAC/B,OAAwB;QAExB,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,oBAAoB,EAAE,EAAE,OAAO,EAAE,EAAE,OAAO,CAAC,CAAC;IACrE,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,gBAAgB,CAAC,OAAwB;QAC7C,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,+BAA+B,EAAE,EAAE,EAAE,OAAO,CAAC,CAAC;IACxE,CAAC;CACF;AAlDD,8BAkDC"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { HttpClient } from '../client';
|
|
2
|
+
import { CreatePaymentRequest, Payment, ListPaymentsRequest, ListPaymentsResponse, RequestOptions } from '../types';
|
|
3
|
+
export declare class Payments {
|
|
4
|
+
private client;
|
|
5
|
+
constructor(client: HttpClient);
|
|
6
|
+
/**
|
|
7
|
+
* Create a new payment
|
|
8
|
+
*/
|
|
9
|
+
create(data: CreatePaymentRequest, options?: RequestOptions): Promise<Payment>;
|
|
10
|
+
/**
|
|
11
|
+
* Retrieve a payment by ID
|
|
12
|
+
*/
|
|
13
|
+
retrieve(paymentId: string, options?: RequestOptions): Promise<Payment>;
|
|
14
|
+
/**
|
|
15
|
+
* List payments with optional filters
|
|
16
|
+
*/
|
|
17
|
+
list(params?: ListPaymentsRequest, options?: RequestOptions): Promise<ListPaymentsResponse>;
|
|
18
|
+
/**
|
|
19
|
+
* Cancel a pending payment
|
|
20
|
+
*/
|
|
21
|
+
cancel(paymentId: string, options?: RequestOptions): Promise<Payment>;
|
|
22
|
+
private validateCreatePayment;
|
|
23
|
+
}
|
|
24
|
+
//# sourceMappingURL=payments.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"payments.d.ts","sourceRoot":"","sources":["../../src/resources/payments.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AACvC,OAAO,EACL,oBAAoB,EACpB,OAAO,EACP,mBAAmB,EACnB,oBAAoB,EACpB,cAAc,EACf,MAAM,UAAU,CAAC;AAGlB,qBAAa,QAAQ;IACP,OAAO,CAAC,MAAM;gBAAN,MAAM,EAAE,UAAU;IAEtC;;OAEG;IACG,MAAM,CAAC,IAAI,EAAE,oBAAoB,EAAE,OAAO,CAAC,EAAE,cAAc,GAAG,OAAO,CAAC,OAAO,CAAC;IAKpF;;OAEG;IACG,QAAQ,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,cAAc,GAAG,OAAO,CAAC,OAAO,CAAC;IAO7E;;OAEG;IACG,IAAI,CAAC,MAAM,CAAC,EAAE,mBAAmB,EAAE,OAAO,CAAC,EAAE,cAAc,GAAG,OAAO,CAAC,oBAAoB,CAAC;IAcjG;;OAEG;IACG,MAAM,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,cAAc,GAAG,OAAO,CAAC,OAAO,CAAC;IAO3E,OAAO,CAAC,qBAAqB;CA8C9B"}
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.Payments = void 0;
|
|
4
|
+
const errors_1 = require("../errors");
|
|
5
|
+
class Payments {
|
|
6
|
+
constructor(client) {
|
|
7
|
+
this.client = client;
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* Create a new payment
|
|
11
|
+
*/
|
|
12
|
+
async create(data, options) {
|
|
13
|
+
this.validateCreatePayment(data);
|
|
14
|
+
return this.client.post('/payments', data, options);
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Retrieve a payment by ID
|
|
18
|
+
*/
|
|
19
|
+
async retrieve(paymentId, options) {
|
|
20
|
+
if (!paymentId) {
|
|
21
|
+
throw new errors_1.FidduPayValidationError('Payment ID is required', 'payment_id');
|
|
22
|
+
}
|
|
23
|
+
return this.client.get(`/payments/${paymentId}`, options);
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* List payments with optional filters
|
|
27
|
+
*/
|
|
28
|
+
async list(params, options) {
|
|
29
|
+
const queryParams = new URLSearchParams();
|
|
30
|
+
if (params?.limit)
|
|
31
|
+
queryParams.append('limit', params.limit.toString());
|
|
32
|
+
if (params?.offset)
|
|
33
|
+
queryParams.append('offset', params.offset.toString());
|
|
34
|
+
if (params?.status)
|
|
35
|
+
queryParams.append('status', params.status);
|
|
36
|
+
if (params?.crypto_type)
|
|
37
|
+
queryParams.append('crypto_type', params.crypto_type);
|
|
38
|
+
const query = queryParams.toString();
|
|
39
|
+
const path = query ? `/payments?${query}` : '/payments';
|
|
40
|
+
return this.client.get(path, options);
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Cancel a pending payment
|
|
44
|
+
*/
|
|
45
|
+
async cancel(paymentId, options) {
|
|
46
|
+
if (!paymentId) {
|
|
47
|
+
throw new errors_1.FidduPayValidationError('Payment ID is required', 'payment_id');
|
|
48
|
+
}
|
|
49
|
+
return this.client.post(`/payments/${paymentId}/cancel`, {}, options);
|
|
50
|
+
}
|
|
51
|
+
validateCreatePayment(data) {
|
|
52
|
+
if (!data.amount_usd) {
|
|
53
|
+
throw new errors_1.FidduPayValidationError('Amount in USD is required', 'amount_usd');
|
|
54
|
+
}
|
|
55
|
+
if (!data.crypto_type) {
|
|
56
|
+
throw new errors_1.FidduPayValidationError('Crypto type is required', 'crypto_type');
|
|
57
|
+
}
|
|
58
|
+
const amount = parseFloat(data.amount_usd);
|
|
59
|
+
if (isNaN(amount) || amount <= 0) {
|
|
60
|
+
throw new errors_1.FidduPayValidationError('Amount must be a positive number', 'amount_usd');
|
|
61
|
+
}
|
|
62
|
+
if (amount < 0.01) {
|
|
63
|
+
throw new errors_1.FidduPayValidationError('Minimum amount is $0.01', 'amount_usd');
|
|
64
|
+
}
|
|
65
|
+
if (amount > 1000000) {
|
|
66
|
+
throw new errors_1.FidduPayValidationError('Maximum amount is $1,000,000', 'amount_usd');
|
|
67
|
+
}
|
|
68
|
+
const validCryptoTypes = ['SOL', 'USDT_ETH', 'USDT_BSC', 'USDT_POLYGON', 'USDT_ARBITRUM', 'USDT_SPL'];
|
|
69
|
+
if (!validCryptoTypes.includes(data.crypto_type)) {
|
|
70
|
+
throw new errors_1.FidduPayValidationError(`Invalid crypto type. Must be one of: ${validCryptoTypes.join(', ')}`, 'crypto_type');
|
|
71
|
+
}
|
|
72
|
+
if (data.expiration_minutes !== undefined) {
|
|
73
|
+
if (data.expiration_minutes < 5 || data.expiration_minutes > 1440) {
|
|
74
|
+
throw new errors_1.FidduPayValidationError('Expiration must be between 5 and 1440 minutes', 'expiration_minutes');
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
if (data.description && data.description.length > 500) {
|
|
78
|
+
throw new errors_1.FidduPayValidationError('Description must be 500 characters or less', 'description');
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
exports.Payments = Payments;
|
|
83
|
+
//# sourceMappingURL=payments.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"payments.js","sourceRoot":"","sources":["../../src/resources/payments.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { HttpClient } from '../client';
|
|
2
|
+
import { CreateRefundRequest, Refund, RequestOptions } from '../types';
|
|
3
|
+
export declare class Refunds {
|
|
4
|
+
private client;
|
|
5
|
+
constructor(client: HttpClient);
|
|
6
|
+
/**
|
|
7
|
+
* Create a refund for a confirmed payment
|
|
8
|
+
*/
|
|
9
|
+
create(data: CreateRefundRequest, options?: RequestOptions): Promise<Refund>;
|
|
10
|
+
/**
|
|
11
|
+
* Retrieve a refund by ID
|
|
12
|
+
*/
|
|
13
|
+
retrieve(refundId: string, options?: RequestOptions): Promise<Refund>;
|
|
14
|
+
/**
|
|
15
|
+
* List refunds
|
|
16
|
+
*/
|
|
17
|
+
list(params?: {
|
|
18
|
+
limit?: number;
|
|
19
|
+
offset?: number;
|
|
20
|
+
}, options?: RequestOptions): Promise<{
|
|
21
|
+
refunds: Refund[];
|
|
22
|
+
total: number;
|
|
23
|
+
has_more: boolean;
|
|
24
|
+
}>;
|
|
25
|
+
private validateCreateRefund;
|
|
26
|
+
}
|
|
27
|
+
//# sourceMappingURL=refunds.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"refunds.d.ts","sourceRoot":"","sources":["../../src/resources/refunds.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AACvC,OAAO,EAAE,mBAAmB,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAGvE,qBAAa,OAAO;IACN,OAAO,CAAC,MAAM;gBAAN,MAAM,EAAE,UAAU;IAEtC;;OAEG;IACG,MAAM,CAAC,IAAI,EAAE,mBAAmB,EAAE,OAAO,CAAC,EAAE,cAAc,GAAG,OAAO,CAAC,MAAM,CAAC;IAKlF;;OAEG;IACG,QAAQ,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,cAAc,GAAG,OAAO,CAAC,MAAM,CAAC;IAO3E;;OAEG;IACG,IAAI,CAAC,MAAM,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,EAAE,OAAO,CAAC,EAAE,cAAc,GAAG,OAAO,CAAC;QAC1F,OAAO,EAAE,MAAM,EAAE,CAAC;QAClB,KAAK,EAAE,MAAM,CAAC;QACd,QAAQ,EAAE,OAAO,CAAC;KACnB,CAAC;IAYF,OAAO,CAAC,oBAAoB;CAmB7B"}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.Refunds = void 0;
|
|
4
|
+
const errors_1 = require("../errors");
|
|
5
|
+
class Refunds {
|
|
6
|
+
constructor(client) {
|
|
7
|
+
this.client = client;
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* Create a refund for a confirmed payment
|
|
11
|
+
*/
|
|
12
|
+
async create(data, options) {
|
|
13
|
+
this.validateCreateRefund(data);
|
|
14
|
+
return this.client.post('/refunds', data, options);
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Retrieve a refund by ID
|
|
18
|
+
*/
|
|
19
|
+
async retrieve(refundId, options) {
|
|
20
|
+
if (!refundId) {
|
|
21
|
+
throw new errors_1.FidduPayValidationError('Refund ID is required', 'refund_id');
|
|
22
|
+
}
|
|
23
|
+
return this.client.get(`/refunds/${refundId}`, options);
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* List refunds
|
|
27
|
+
*/
|
|
28
|
+
async list(params, options) {
|
|
29
|
+
const queryParams = new URLSearchParams();
|
|
30
|
+
if (params?.limit)
|
|
31
|
+
queryParams.append('limit', params.limit.toString());
|
|
32
|
+
if (params?.offset)
|
|
33
|
+
queryParams.append('offset', params.offset.toString());
|
|
34
|
+
const query = queryParams.toString();
|
|
35
|
+
const path = query ? `/refunds?${query}` : '/refunds';
|
|
36
|
+
return this.client.get(path, options);
|
|
37
|
+
}
|
|
38
|
+
validateCreateRefund(data) {
|
|
39
|
+
if (!data.payment_id) {
|
|
40
|
+
throw new errors_1.FidduPayValidationError('Payment ID is required', 'payment_id');
|
|
41
|
+
}
|
|
42
|
+
if (data.amount !== undefined) {
|
|
43
|
+
const amount = parseFloat(data.amount);
|
|
44
|
+
if (isNaN(amount) || amount <= 0) {
|
|
45
|
+
throw new errors_1.FidduPayValidationError('Refund amount must be a positive number', 'amount');
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
if (data.reason && data.reason.length > 500) {
|
|
49
|
+
throw new errors_1.FidduPayValidationError('Refund reason must be 500 characters or less', 'reason');
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
exports.Refunds = Refunds;
|
|
54
|
+
//# sourceMappingURL=refunds.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"refunds.js","sourceRoot":"","sources":["../../src/resources/refunds.ts"],"names":[],"mappings":";;;AAEA,sCAAoD;AAEpD,MAAa,OAAO;IAClB,YAAoB,MAAkB;QAAlB,WAAM,GAAN,MAAM,CAAY;IAAG,CAAC;IAE1C;;OAEG;IACH,KAAK,CAAC,MAAM,CAAC,IAAyB,EAAE,OAAwB;QAC9D,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,CAAC;QAChC,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,CAAS,UAAU,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;IAC7D,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,QAAQ,CAAC,QAAgB,EAAE,OAAwB;QACvD,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,MAAM,IAAI,gCAAuB,CAAC,uBAAuB,EAAE,WAAW,CAAC,CAAC;QAC1E,CAAC;QACD,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,CAAS,YAAY,QAAQ,EAAE,EAAE,OAAO,CAAC,CAAC;IAClE,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,IAAI,CAAC,MAA4C,EAAE,OAAwB;QAK/E,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;QAE3E,MAAM,KAAK,GAAG,WAAW,CAAC,QAAQ,EAAE,CAAC;QACrC,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,YAAY,KAAK,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC;QAEtD,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IACxC,CAAC;IAEO,oBAAoB,CAAC,IAAyB;QACpD,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC;YACrB,MAAM,IAAI,gCAAuB,CAAC,wBAAwB,EAAE,YAAY,CAAC,CAAC;QAC5E,CAAC;QAED,IAAI,IAAI,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;YAC9B,MAAM,MAAM,GAAG,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YACvC,IAAI,KAAK,CAAC,MAAM,CAAC,IAAI,MAAM,IAAI,CAAC,EAAE,CAAC;gBACjC,MAAM,IAAI,gCAAuB,CAAC,yCAAyC,EAAE,QAAQ,CAAC,CAAC;YACzF,CAAC;QACH,CAAC;QAED,IAAI,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,GAAG,EAAE,CAAC;YAC5C,MAAM,IAAI,gCAAuB,CAC/B,8CAA8C,EAC9C,QAAQ,CACT,CAAC;QACJ,CAAC;IACH,CAAC;CACF;AA3DD,0BA2DC"}
|
|
@@ -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,110 @@
|
|
|
1
|
+
export type CryptoType = 'SOL' | 'ETH' | 'BNB' | 'MATIC' | 'ARB' | 'USDT_ETH' | 'USDT_BSC' | 'USDT_POLYGON' | 'USDT_ARBITRUM' | 'USDT_SPL';
|
|
2
|
+
export type PaymentStatus = 'PENDING' | 'CONFIRMING' | 'CONFIRMED' | 'FAILED' | 'EXPIRED';
|
|
3
|
+
export type WebhookEventType = 'payment.confirmed' | 'payment.expired' | 'payment.failed' | 'refund.completed' | 'refund.failed';
|
|
4
|
+
export interface FidduPayConfig {
|
|
5
|
+
apiKey: string;
|
|
6
|
+
environment?: 'sandbox' | 'production';
|
|
7
|
+
apiVersion?: string;
|
|
8
|
+
timeout?: number;
|
|
9
|
+
maxRetries?: number;
|
|
10
|
+
baseURL?: string;
|
|
11
|
+
}
|
|
12
|
+
export interface CreatePaymentRequest {
|
|
13
|
+
amount_usd: string;
|
|
14
|
+
crypto_type: CryptoType;
|
|
15
|
+
description?: string;
|
|
16
|
+
metadata?: Record<string, any>;
|
|
17
|
+
expiration_minutes?: number;
|
|
18
|
+
webhook_url?: string;
|
|
19
|
+
}
|
|
20
|
+
export interface Payment {
|
|
21
|
+
payment_id: string;
|
|
22
|
+
amount_usd: string;
|
|
23
|
+
crypto_amount: string;
|
|
24
|
+
crypto_type: CryptoType;
|
|
25
|
+
status: PaymentStatus;
|
|
26
|
+
deposit_address: string;
|
|
27
|
+
transaction_hash?: string;
|
|
28
|
+
confirmations?: number;
|
|
29
|
+
created_at: string;
|
|
30
|
+
confirmed_at?: string;
|
|
31
|
+
expires_at: string;
|
|
32
|
+
description?: string;
|
|
33
|
+
metadata?: Record<string, any>;
|
|
34
|
+
payment_link?: string;
|
|
35
|
+
qr_code_data?: string;
|
|
36
|
+
}
|
|
37
|
+
export interface ListPaymentsRequest {
|
|
38
|
+
limit?: number;
|
|
39
|
+
offset?: number;
|
|
40
|
+
status?: PaymentStatus;
|
|
41
|
+
crypto_type?: CryptoType;
|
|
42
|
+
}
|
|
43
|
+
export interface ListPaymentsResponse {
|
|
44
|
+
payments: Payment[];
|
|
45
|
+
total: number;
|
|
46
|
+
has_more: boolean;
|
|
47
|
+
}
|
|
48
|
+
export interface CreateRefundRequest {
|
|
49
|
+
payment_id: string;
|
|
50
|
+
amount?: string;
|
|
51
|
+
reason?: string;
|
|
52
|
+
}
|
|
53
|
+
export interface Refund {
|
|
54
|
+
refund_id: string;
|
|
55
|
+
payment_id: string;
|
|
56
|
+
status: 'PROCESSING' | 'COMPLETED' | 'FAILED';
|
|
57
|
+
amount: string;
|
|
58
|
+
amount_usd: string;
|
|
59
|
+
crypto_type: CryptoType;
|
|
60
|
+
refund_address: string;
|
|
61
|
+
reason?: string;
|
|
62
|
+
created_at: string;
|
|
63
|
+
processed_at?: string;
|
|
64
|
+
transaction_hash?: string;
|
|
65
|
+
}
|
|
66
|
+
export interface Merchant {
|
|
67
|
+
merchant_id: string;
|
|
68
|
+
email: string;
|
|
69
|
+
business_name: string;
|
|
70
|
+
status: 'pending_verification' | 'verified' | 'suspended';
|
|
71
|
+
balance: {
|
|
72
|
+
available_usd: string;
|
|
73
|
+
pending_usd: string;
|
|
74
|
+
};
|
|
75
|
+
created_at: string;
|
|
76
|
+
verified_at?: string;
|
|
77
|
+
}
|
|
78
|
+
export interface WebhookEvent {
|
|
79
|
+
id: string;
|
|
80
|
+
type: WebhookEventType;
|
|
81
|
+
data: Payment | Refund;
|
|
82
|
+
created_at: string;
|
|
83
|
+
}
|
|
84
|
+
export interface Analytics {
|
|
85
|
+
period: {
|
|
86
|
+
start_date: string;
|
|
87
|
+
end_date: string;
|
|
88
|
+
granularity: 'day' | 'week' | 'month';
|
|
89
|
+
};
|
|
90
|
+
summary: {
|
|
91
|
+
total_payments: number;
|
|
92
|
+
total_volume_usd: string;
|
|
93
|
+
successful_payments: number;
|
|
94
|
+
failed_payments: number;
|
|
95
|
+
success_rate: number;
|
|
96
|
+
average_payment_usd: string;
|
|
97
|
+
};
|
|
98
|
+
data: Array<{
|
|
99
|
+
date: string;
|
|
100
|
+
payments: number;
|
|
101
|
+
volume_usd: string;
|
|
102
|
+
success_rate: number;
|
|
103
|
+
}>;
|
|
104
|
+
}
|
|
105
|
+
export interface RequestOptions {
|
|
106
|
+
timeout?: number;
|
|
107
|
+
retries?: number;
|
|
108
|
+
idempotencyKey?: string;
|
|
109
|
+
}
|
|
110
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"AAEA,MAAM,MAAM,UAAU,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,GAAG,OAAO,GAAG,KAAK,GAAG,UAAU,GAAG,UAAU,GAAG,cAAc,GAAG,eAAe,GAAG,UAAU,CAAC;AAE3I,MAAM,MAAM,aAAa,GAAG,SAAS,GAAG,YAAY,GAAG,WAAW,GAAG,QAAQ,GAAG,SAAS,CAAC;AAE1F,MAAM,MAAM,gBAAgB,GACxB,mBAAmB,GACnB,iBAAiB,GACjB,gBAAgB,GAChB,kBAAkB,GAClB,eAAe,CAAC;AAEpB,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,SAAS,GAAG,YAAY,CAAC;IACvC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,oBAAoB;IACnC,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,UAAU,CAAC;IACxB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC/B,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,OAAO;IACtB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,EAAE,MAAM,CAAC;IACtB,WAAW,EAAE,UAAU,CAAC;IACxB,MAAM,EAAE,aAAa,CAAC;IACtB,eAAe,EAAE,MAAM,CAAC;IACxB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC/B,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,mBAAmB;IAClC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,aAAa,CAAC;IACvB,WAAW,CAAC,EAAE,UAAU,CAAC;CAC1B;AAED,MAAM,WAAW,oBAAoB;IACnC,QAAQ,EAAE,OAAO,EAAE,CAAC;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,OAAO,CAAC;CACnB;AAED,MAAM,WAAW,mBAAmB;IAClC,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,MAAM;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,YAAY,GAAG,WAAW,GAAG,QAAQ,CAAC;IAC9C,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,UAAU,CAAC;IACxB,cAAc,EAAE,MAAM,CAAC;IACvB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B;AAED,MAAM,WAAW,QAAQ;IACvB,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,aAAa,EAAE,MAAM,CAAC;IACtB,MAAM,EAAE,sBAAsB,GAAG,UAAU,GAAG,WAAW,CAAC;IAC1D,OAAO,EAAE;QACP,aAAa,EAAE,MAAM,CAAC;QACtB,WAAW,EAAE,MAAM,CAAC;KACrB,CAAC;IACF,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,gBAAgB,CAAC;IACvB,IAAI,EAAE,OAAO,GAAG,MAAM,CAAC;IACvB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,SAAS;IACxB,MAAM,EAAE;QACN,UAAU,EAAE,MAAM,CAAC;QACnB,QAAQ,EAAE,MAAM,CAAC;QACjB,WAAW,EAAE,KAAK,GAAG,MAAM,GAAG,OAAO,CAAC;KACvC,CAAC;IACF,OAAO,EAAE;QACP,cAAc,EAAE,MAAM,CAAC;QACvB,gBAAgB,EAAE,MAAM,CAAC;QACzB,mBAAmB,EAAE,MAAM,CAAC;QAC5B,eAAe,EAAE,MAAM,CAAC;QACxB,YAAY,EAAE,MAAM,CAAC;QACrB,mBAAmB,EAAE,MAAM,CAAC;KAC7B,CAAC;IACF,IAAI,EAAE,KAAK,CAAC;QACV,IAAI,EAAE,MAAM,CAAC;QACb,QAAQ,EAAE,MAAM,CAAC;QACjB,UAAU,EAAE,MAAM,CAAC;QACnB,YAAY,EAAE,MAAM,CAAC;KACtB,CAAC,CAAC;CACJ;AAED,MAAM,WAAW,cAAc;IAC7B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":";AAAA,8BAA8B"}
|