@mostajs/payment 0.1.0 → 0.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/dist/core/payment-engine.d.ts +26 -0
- package/dist/core/payment-engine.d.ts.map +1 -0
- package/dist/core/payment-engine.js +57 -0
- package/dist/core/payment-engine.js.map +1 -0
- package/dist/core/provider.interface.d.ts +101 -0
- package/dist/core/provider.interface.d.ts.map +1 -0
- package/dist/core/provider.interface.js +4 -0
- package/dist/core/provider.interface.js.map +1 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js.map +1 -1
- package/dist/lib/module-info.js +1 -1
- package/dist/lib/stripe.d.ts +37 -0
- package/dist/lib/stripe.d.ts.map +1 -1
- package/dist/lib/stripe.js +53 -1
- package/dist/lib/stripe.js.map +1 -1
- package/dist/providers/chargily.provider.d.ts +30 -0
- package/dist/providers/chargily.provider.d.ts.map +1 -0
- package/dist/providers/chargily.provider.js +112 -0
- package/dist/providers/chargily.provider.js.map +1 -0
- package/dist/providers/manual.provider.d.ts +20 -0
- package/dist/providers/manual.provider.d.ts.map +1 -0
- package/dist/providers/manual.provider.js +26 -0
- package/dist/providers/manual.provider.js.map +1 -0
- package/dist/providers/paypal.provider.d.ts +44 -0
- package/dist/providers/paypal.provider.d.ts.map +1 -0
- package/dist/providers/paypal.provider.js +160 -0
- package/dist/providers/paypal.provider.js.map +1 -0
- package/dist/providers/satim.provider.d.ts +38 -0
- package/dist/providers/satim.provider.d.ts.map +1 -0
- package/dist/providers/satim.provider.js +107 -0
- package/dist/providers/satim.provider.js.map +1 -0
- package/dist/providers/stripe.provider.d.ts +36 -0
- package/dist/providers/stripe.provider.d.ts.map +1 -0
- package/dist/providers/stripe.provider.js +203 -0
- package/dist/providers/stripe.provider.js.map +1 -0
- package/dist/schemas/payment.schema.d.ts +4 -0
- package/dist/schemas/payment.schema.d.ts.map +1 -1
- package/dist/schemas/payment.schema.js +20 -0
- package/dist/schemas/payment.schema.js.map +1 -1
- package/dist/server.d.ts +14 -1
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +13 -7
- package/dist/server.js.map +1 -1
- package/dist/types/index.d.ts +2 -0
- package/dist/types/index.d.ts.map +1 -1
- package/package.json +13 -6
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import type { PaymentProvider } from './provider.interface.js';
|
|
2
|
+
/**
|
|
3
|
+
* Register a payment provider.
|
|
4
|
+
*/
|
|
5
|
+
export declare function registerProvider(provider: PaymentProvider): void;
|
|
6
|
+
/**
|
|
7
|
+
* Set the default provider.
|
|
8
|
+
*/
|
|
9
|
+
export declare function setDefaultProvider(name: string): void;
|
|
10
|
+
/**
|
|
11
|
+
* Get a registered provider by name.
|
|
12
|
+
*/
|
|
13
|
+
export declare function getProvider(name?: string): PaymentProvider;
|
|
14
|
+
/**
|
|
15
|
+
* List registered provider names.
|
|
16
|
+
*/
|
|
17
|
+
export declare function listProviders(): string[];
|
|
18
|
+
/**
|
|
19
|
+
* Get the best provider for a given currency.
|
|
20
|
+
*/
|
|
21
|
+
export declare function getProviderForCurrency(currency: string): PaymentProvider | null;
|
|
22
|
+
/**
|
|
23
|
+
* Reset all providers (for testing).
|
|
24
|
+
*/
|
|
25
|
+
export declare function resetProviders(): void;
|
|
26
|
+
//# sourceMappingURL=payment-engine.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"payment-engine.d.ts","sourceRoot":"","sources":["../../src/core/payment-engine.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAA;AAK9D;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,eAAe,GAAG,IAAI,CAGhE;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAGrD;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,eAAe,CAM1D;AAED;;GAEG;AACH,wBAAgB,aAAa,IAAI,MAAM,EAAE,CAExC;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,QAAQ,EAAE,MAAM,GAAG,eAAe,GAAG,IAAI,CAO/E;AAED;;GAEG;AACH,wBAAgB,cAAc,IAAI,IAAI,CAGrC"}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
// @mostajs/payment — Payment Engine (provider router)
|
|
2
|
+
// Author: Dr Hamid MADANI drmdh@msn.com
|
|
3
|
+
const _providers = new Map();
|
|
4
|
+
let _defaultProvider = null;
|
|
5
|
+
/**
|
|
6
|
+
* Register a payment provider.
|
|
7
|
+
*/
|
|
8
|
+
export function registerProvider(provider) {
|
|
9
|
+
_providers.set(provider.name, provider);
|
|
10
|
+
if (!_defaultProvider)
|
|
11
|
+
_defaultProvider = provider.name;
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Set the default provider.
|
|
15
|
+
*/
|
|
16
|
+
export function setDefaultProvider(name) {
|
|
17
|
+
if (!_providers.has(name))
|
|
18
|
+
throw new Error(`[payment] Provider '${name}' not registered`);
|
|
19
|
+
_defaultProvider = name;
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Get a registered provider by name.
|
|
23
|
+
*/
|
|
24
|
+
export function getProvider(name) {
|
|
25
|
+
const key = name ?? _defaultProvider;
|
|
26
|
+
if (!key)
|
|
27
|
+
throw new Error('[payment] No provider registered');
|
|
28
|
+
const p = _providers.get(key);
|
|
29
|
+
if (!p)
|
|
30
|
+
throw new Error(`[payment] Provider '${key}' not registered`);
|
|
31
|
+
return p;
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* List registered provider names.
|
|
35
|
+
*/
|
|
36
|
+
export function listProviders() {
|
|
37
|
+
return Array.from(_providers.keys());
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Get the best provider for a given currency.
|
|
41
|
+
*/
|
|
42
|
+
export function getProviderForCurrency(currency) {
|
|
43
|
+
for (const p of _providers.values()) {
|
|
44
|
+
if (p.supportedCurrencies.includes('*') || p.supportedCurrencies.includes(currency.toUpperCase())) {
|
|
45
|
+
return p;
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
return null;
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Reset all providers (for testing).
|
|
52
|
+
*/
|
|
53
|
+
export function resetProviders() {
|
|
54
|
+
_providers.clear();
|
|
55
|
+
_defaultProvider = null;
|
|
56
|
+
}
|
|
57
|
+
//# sourceMappingURL=payment-engine.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"payment-engine.js","sourceRoot":"","sources":["../../src/core/payment-engine.ts"],"names":[],"mappings":"AAAA,sDAAsD;AACtD,wCAAwC;AAIxC,MAAM,UAAU,GAAG,IAAI,GAAG,EAA2B,CAAA;AACrD,IAAI,gBAAgB,GAAkB,IAAI,CAAA;AAE1C;;GAEG;AACH,MAAM,UAAU,gBAAgB,CAAC,QAAyB;IACxD,UAAU,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAA;IACvC,IAAI,CAAC,gBAAgB;QAAE,gBAAgB,GAAG,QAAQ,CAAC,IAAI,CAAA;AACzD,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,kBAAkB,CAAC,IAAY;IAC7C,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,uBAAuB,IAAI,kBAAkB,CAAC,CAAA;IACzF,gBAAgB,GAAG,IAAI,CAAA;AACzB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,WAAW,CAAC,IAAa;IACvC,MAAM,GAAG,GAAG,IAAI,IAAI,gBAAgB,CAAA;IACpC,IAAI,CAAC,GAAG;QAAE,MAAM,IAAI,KAAK,CAAC,kCAAkC,CAAC,CAAA;IAC7D,MAAM,CAAC,GAAG,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;IAC7B,IAAI,CAAC,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,uBAAuB,GAAG,kBAAkB,CAAC,CAAA;IACrE,OAAO,CAAC,CAAA;AACV,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,aAAa;IAC3B,OAAO,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC,CAAA;AACtC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,sBAAsB,CAAC,QAAgB;IACrD,KAAK,MAAM,CAAC,IAAI,UAAU,CAAC,MAAM,EAAE,EAAE,CAAC;QACpC,IAAI,CAAC,CAAC,mBAAmB,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,mBAAmB,CAAC,QAAQ,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC,EAAE,CAAC;YAClG,OAAO,CAAC,CAAA;QACV,CAAC;IACH,CAAC;IACD,OAAO,IAAI,CAAA;AACb,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,cAAc;IAC5B,UAAU,CAAC,KAAK,EAAE,CAAA;IAClB,gBAAgB,GAAG,IAAI,CAAA;AACzB,CAAC"}
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
export interface CheckoutParams {
|
|
2
|
+
orderId: string;
|
|
3
|
+
amount: number;
|
|
4
|
+
currency?: string;
|
|
5
|
+
description?: string;
|
|
6
|
+
successUrl: string;
|
|
7
|
+
cancelUrl: string;
|
|
8
|
+
webhookUrl?: string;
|
|
9
|
+
metadata?: Record<string, string>;
|
|
10
|
+
/** For subscription billing */
|
|
11
|
+
customerId?: string;
|
|
12
|
+
priceId?: string;
|
|
13
|
+
trialDays?: number;
|
|
14
|
+
}
|
|
15
|
+
export interface CheckoutResult {
|
|
16
|
+
url: string | null;
|
|
17
|
+
sessionId: string;
|
|
18
|
+
}
|
|
19
|
+
export interface CustomerParams {
|
|
20
|
+
email: string;
|
|
21
|
+
name: string;
|
|
22
|
+
metadata?: Record<string, string>;
|
|
23
|
+
}
|
|
24
|
+
export interface SubscriptionParams {
|
|
25
|
+
customerId: string;
|
|
26
|
+
priceId: string;
|
|
27
|
+
trialDays?: number;
|
|
28
|
+
metadata?: Record<string, string>;
|
|
29
|
+
}
|
|
30
|
+
export interface SubscriptionResult {
|
|
31
|
+
id: string;
|
|
32
|
+
status: string;
|
|
33
|
+
customerId: string;
|
|
34
|
+
currentPeriodEnd?: string;
|
|
35
|
+
}
|
|
36
|
+
export interface RefundParams {
|
|
37
|
+
paymentId: string;
|
|
38
|
+
amount?: number;
|
|
39
|
+
reason?: string;
|
|
40
|
+
metadata?: Record<string, string>;
|
|
41
|
+
}
|
|
42
|
+
export interface RefundResult {
|
|
43
|
+
id: string;
|
|
44
|
+
amount: number;
|
|
45
|
+
status: string;
|
|
46
|
+
}
|
|
47
|
+
export interface InvoiceResult {
|
|
48
|
+
id: string;
|
|
49
|
+
amount: number;
|
|
50
|
+
currency: string;
|
|
51
|
+
status: string;
|
|
52
|
+
paidAt?: string;
|
|
53
|
+
pdfUrl?: string;
|
|
54
|
+
}
|
|
55
|
+
export interface WebhookEvent {
|
|
56
|
+
type: string;
|
|
57
|
+
data: Record<string, unknown>;
|
|
58
|
+
raw?: unknown;
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* PaymentProvider — contract for all payment providers.
|
|
62
|
+
* Implemented by: Satim, PayPal, Chargily, Stripe, Manual
|
|
63
|
+
*/
|
|
64
|
+
export interface PaymentProvider {
|
|
65
|
+
readonly name: string;
|
|
66
|
+
readonly supportedCurrencies: string[];
|
|
67
|
+
readonly supportedMethods: string[];
|
|
68
|
+
/** Create a checkout session (redirect user to payment page) */
|
|
69
|
+
createCheckout(params: CheckoutParams): Promise<CheckoutResult>;
|
|
70
|
+
/** Verify and parse a webhook payload */
|
|
71
|
+
verifyWebhook(body: string, signature: string): Promise<WebhookEvent>;
|
|
72
|
+
/** Create a customer (optional — not all providers support) */
|
|
73
|
+
createCustomer?(params: CustomerParams): Promise<string>;
|
|
74
|
+
/** Get customer details */
|
|
75
|
+
getCustomer?(customerId: string): Promise<Record<string, unknown>>;
|
|
76
|
+
/** Update customer */
|
|
77
|
+
updateCustomer?(customerId: string, params: Partial<CustomerParams>): Promise<Record<string, unknown>>;
|
|
78
|
+
/** Create a subscription */
|
|
79
|
+
createSubscription?(params: SubscriptionParams): Promise<SubscriptionResult>;
|
|
80
|
+
/** Get subscription details */
|
|
81
|
+
getSubscription?(subscriptionId: string): Promise<SubscriptionResult>;
|
|
82
|
+
/** Cancel a subscription */
|
|
83
|
+
cancelSubscription?(subscriptionId: string, immediate?: boolean): Promise<void>;
|
|
84
|
+
/** Change subscription plan */
|
|
85
|
+
changeSubscription?(subscriptionId: string, newPriceId: string): Promise<SubscriptionResult>;
|
|
86
|
+
/** Pause subscription */
|
|
87
|
+
pauseSubscription?(subscriptionId: string): Promise<void>;
|
|
88
|
+
/** Resume subscription */
|
|
89
|
+
resumeSubscription?(subscriptionId: string): Promise<void>;
|
|
90
|
+
/** Create a refund */
|
|
91
|
+
createRefund?(params: RefundParams): Promise<RefundResult>;
|
|
92
|
+
/** List invoices for a customer */
|
|
93
|
+
listInvoices?(customerId: string, limit?: number): Promise<InvoiceResult[]>;
|
|
94
|
+
/** Get upcoming invoice */
|
|
95
|
+
getUpcomingInvoice?(customerId: string): Promise<InvoiceResult | null>;
|
|
96
|
+
/** Create a billing portal session (self-service) */
|
|
97
|
+
createPortal?(customerId: string, returnUrl: string): Promise<{
|
|
98
|
+
url: string;
|
|
99
|
+
}>;
|
|
100
|
+
}
|
|
101
|
+
//# sourceMappingURL=provider.interface.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"provider.interface.d.ts","sourceRoot":"","sources":["../../src/core/provider.interface.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"provider.interface.js","sourceRoot":"","sources":["../../src/core/provider.interface.ts"],"names":[],"mappings":"AAAA,gEAAgE;AAChE,wCAAwC"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
export type { PaymentConfig, PaymentStatus, PaymentMethodType, LineItem, CheckoutRequest, CheckoutResult, OrderSummary, PaymentDTO, } from './types/index.js';
|
|
2
|
+
export type { WebhookHandlers } from './lib/stripe.js';
|
|
2
3
|
export { PaymentSchema, createPaymentSchema } from './schemas/payment.schema.js';
|
|
3
4
|
export { PaymentPage } from './components/PaymentPage.js';
|
|
4
5
|
export { moduleInfo } from './lib/module-info.js';
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAKA,YAAY,EACV,aAAa,EACb,aAAa,EACb,iBAAiB,EACjB,QAAQ,EACR,eAAe,EACf,cAAc,EACd,YAAY,EACZ,UAAU,GACX,MAAM,kBAAkB,CAAA;AAGzB,OAAO,EAAE,aAAa,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAA;AAGhF,OAAO,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAA;AAGzD,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAA"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAKA,YAAY,EACV,aAAa,EACb,aAAa,EACb,iBAAiB,EACjB,QAAQ,EACR,eAAe,EACf,cAAc,EACd,YAAY,EACZ,UAAU,GACX,MAAM,kBAAkB,CAAA;AAGzB,YAAY,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAA;AAGtD,OAAO,EAAE,aAAa,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAA;AAGhF,OAAO,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAA;AAGzD,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAA"}
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,iDAAiD;AACjD,gDAAgD;AAChD,wCAAwC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,iDAAiD;AACjD,gDAAgD;AAChD,wCAAwC;AAiBxC,SAAS;AACT,OAAO,EAAE,aAAa,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAA;AAEhF,aAAa;AACb,OAAO,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAA;AAEzD,cAAc;AACd,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAA"}
|
package/dist/lib/module-info.js
CHANGED
package/dist/lib/stripe.d.ts
CHANGED
|
@@ -13,4 +13,41 @@ export declare function createCheckoutSession(stripe: Stripe, request: CheckoutR
|
|
|
13
13
|
* Construct and verify a Stripe webhook event.
|
|
14
14
|
*/
|
|
15
15
|
export declare function handleWebhook(stripe: Stripe, body: string | Buffer, signature: string, secret: string): Promise<Stripe.Event>;
|
|
16
|
+
/**
|
|
17
|
+
* Create a Stripe Billing (subscription) session.
|
|
18
|
+
*/
|
|
19
|
+
export declare function createBillingSession(stripe: Stripe, request: {
|
|
20
|
+
customerId: string;
|
|
21
|
+
priceId: string;
|
|
22
|
+
successUrl: string;
|
|
23
|
+
cancelUrl: string;
|
|
24
|
+
trialDays?: number;
|
|
25
|
+
metadata?: Record<string, string>;
|
|
26
|
+
}): Promise<{
|
|
27
|
+
url: string | null;
|
|
28
|
+
sessionId: string;
|
|
29
|
+
}>;
|
|
30
|
+
/**
|
|
31
|
+
* Create a Stripe Customer Portal session.
|
|
32
|
+
*/
|
|
33
|
+
export declare function createPortalSession(stripe: Stripe, customerId: string, returnUrl: string): Promise<{
|
|
34
|
+
url: string;
|
|
35
|
+
}>;
|
|
36
|
+
/**
|
|
37
|
+
* Webhook handler callbacks for Stripe billing events.
|
|
38
|
+
*/
|
|
39
|
+
export interface WebhookHandlers {
|
|
40
|
+
onCheckoutCompleted?: (session: any) => Promise<void>;
|
|
41
|
+
onInvoicePaid?: (invoice: any) => Promise<void>;
|
|
42
|
+
onSubscriptionUpdated?: (subscription: any) => Promise<void>;
|
|
43
|
+
onSubscriptionDeleted?: (subscription: any) => Promise<void>;
|
|
44
|
+
onPaymentFailed?: (invoice: any) => Promise<void>;
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Handle Stripe billing webhooks with event-type dispatch.
|
|
48
|
+
*/
|
|
49
|
+
export declare function handleBillingWebhook(stripe: Stripe, body: string | Buffer, signature: string, secret: string, handlers: WebhookHandlers): Promise<{
|
|
50
|
+
received: boolean;
|
|
51
|
+
type: string;
|
|
52
|
+
}>;
|
|
16
53
|
//# sourceMappingURL=stripe.d.ts.map
|
package/dist/lib/stripe.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"stripe.d.ts","sourceRoot":"","sources":["../../src/lib/stripe.ts"],"names":[],"mappings":"AAEA,OAAO,MAAM,MAAM,QAAQ,CAAA;AAC3B,OAAO,KAAK,EAAE,eAAe,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAA;AAEvF;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,aAAa,GAAG,MAAM,CAKhE;AAED;;;GAGG;AACH,wBAAsB,qBAAqB,CACzC,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,eAAe,EACxB,MAAM,EAAE,aAAa,GACpB,OAAO,CAAC,cAAc,CAAC,CA0BzB;AAED;;GAEG;AACH,wBAAsB,aAAa,CACjC,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,MAAM,GAAG,MAAM,EACrB,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAEvB"}
|
|
1
|
+
{"version":3,"file":"stripe.d.ts","sourceRoot":"","sources":["../../src/lib/stripe.ts"],"names":[],"mappings":"AAEA,OAAO,MAAM,MAAM,QAAQ,CAAA;AAC3B,OAAO,KAAK,EAAE,eAAe,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAA;AAEvF;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,aAAa,GAAG,MAAM,CAKhE;AAED;;;GAGG;AACH,wBAAsB,qBAAqB,CACzC,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,eAAe,EACxB,MAAM,EAAE,aAAa,GACpB,OAAO,CAAC,cAAc,CAAC,CA0BzB;AAED;;GAEG;AACH,wBAAsB,aAAa,CACjC,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,MAAM,GAAG,MAAM,EACrB,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAEvB;AAED;;GAEG;AACH,wBAAsB,oBAAoB,CACxC,MAAM,EAAE,MAAM,EACd,OAAO,EAAE;IAAE,UAAU,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;CAAE,GAC7I,OAAO,CAAC;IAAE,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,CAAC,CAcpD;AAED;;GAEG;AACH,wBAAsB,mBAAmB,CACvC,MAAM,EAAE,MAAM,EACd,UAAU,EAAE,MAAM,EAClB,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC;IAAE,GAAG,EAAE,MAAM,CAAA;CAAE,CAAC,CAM1B;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,mBAAmB,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;IACrD,aAAa,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;IAC/C,qBAAqB,CAAC,EAAE,CAAC,YAAY,EAAE,GAAG,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;IAC5D,qBAAqB,CAAC,EAAE,CAAC,YAAY,EAAE,GAAG,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;IAC5D,eAAe,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;CAClD;AAED;;GAEG;AACH,wBAAsB,oBAAoB,CACxC,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,MAAM,GAAG,MAAM,EACrB,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,eAAe,GACxB,OAAO,CAAC;IAAE,QAAQ,EAAE,OAAO,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC,CAsB9C"}
|
package/dist/lib/stripe.js
CHANGED
|
@@ -15,7 +15,7 @@ export function createStripeClient(config) {
|
|
|
15
15
|
* Generalized from booking-baloon /api/checkout — works with any line items.
|
|
16
16
|
*/
|
|
17
17
|
export async function createCheckoutSession(stripe, request, config) {
|
|
18
|
-
const currency = (request.currency ?? config.currency ?? 'usd').toLowerCase();
|
|
18
|
+
const currency = (request.currency ?? config.defaultCurrency ?? config.currency ?? 'usd').toLowerCase();
|
|
19
19
|
const session = await stripe.checkout.sessions.create({
|
|
20
20
|
payment_method_types: ['card'],
|
|
21
21
|
line_items: request.lineItems.map(item => ({
|
|
@@ -45,4 +45,56 @@ export async function createCheckoutSession(stripe, request, config) {
|
|
|
45
45
|
export async function handleWebhook(stripe, body, signature, secret) {
|
|
46
46
|
return stripe.webhooks.constructEvent(body, signature, secret);
|
|
47
47
|
}
|
|
48
|
+
/**
|
|
49
|
+
* Create a Stripe Billing (subscription) session.
|
|
50
|
+
*/
|
|
51
|
+
export async function createBillingSession(stripe, request) {
|
|
52
|
+
const params = {
|
|
53
|
+
customer: request.customerId,
|
|
54
|
+
mode: 'subscription',
|
|
55
|
+
line_items: [{ price: request.priceId, quantity: 1 }],
|
|
56
|
+
success_url: request.successUrl,
|
|
57
|
+
cancel_url: request.cancelUrl,
|
|
58
|
+
metadata: request.metadata,
|
|
59
|
+
};
|
|
60
|
+
if (request.trialDays) {
|
|
61
|
+
params.subscription_data = { trial_period_days: request.trialDays };
|
|
62
|
+
}
|
|
63
|
+
const session = await stripe.checkout.sessions.create(params);
|
|
64
|
+
return { url: session.url, sessionId: session.id };
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Create a Stripe Customer Portal session.
|
|
68
|
+
*/
|
|
69
|
+
export async function createPortalSession(stripe, customerId, returnUrl) {
|
|
70
|
+
const session = await stripe.billingPortal.sessions.create({
|
|
71
|
+
customer: customerId,
|
|
72
|
+
return_url: returnUrl,
|
|
73
|
+
});
|
|
74
|
+
return { url: session.url };
|
|
75
|
+
}
|
|
76
|
+
/**
|
|
77
|
+
* Handle Stripe billing webhooks with event-type dispatch.
|
|
78
|
+
*/
|
|
79
|
+
export async function handleBillingWebhook(stripe, body, signature, secret, handlers) {
|
|
80
|
+
const event = stripe.webhooks.constructEvent(body, signature, secret);
|
|
81
|
+
switch (event.type) {
|
|
82
|
+
case 'checkout.session.completed':
|
|
83
|
+
await handlers.onCheckoutCompleted?.(event.data.object);
|
|
84
|
+
break;
|
|
85
|
+
case 'invoice.paid':
|
|
86
|
+
await handlers.onInvoicePaid?.(event.data.object);
|
|
87
|
+
break;
|
|
88
|
+
case 'customer.subscription.updated':
|
|
89
|
+
await handlers.onSubscriptionUpdated?.(event.data.object);
|
|
90
|
+
break;
|
|
91
|
+
case 'customer.subscription.deleted':
|
|
92
|
+
await handlers.onSubscriptionDeleted?.(event.data.object);
|
|
93
|
+
break;
|
|
94
|
+
case 'invoice.payment_failed':
|
|
95
|
+
await handlers.onPaymentFailed?.(event.data.object);
|
|
96
|
+
break;
|
|
97
|
+
}
|
|
98
|
+
return { received: true, type: event.type };
|
|
99
|
+
}
|
|
48
100
|
//# sourceMappingURL=stripe.js.map
|
package/dist/lib/stripe.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"stripe.js","sourceRoot":"","sources":["../../src/lib/stripe.ts"],"names":[],"mappings":"AAAA,wCAAwC;AACxC,wCAAwC;AACxC,OAAO,MAAM,MAAM,QAAQ,CAAA;AAG3B;;GAEG;AACH,MAAM,UAAU,kBAAkB,CAAC,MAAqB;IACtD,IAAI,CAAC,MAAM,CAAC,eAAe,EAAE,CAAC;QAC5B,MAAM,IAAI,KAAK,CAAC,uCAAuC,CAAC,CAAA;IAC1D,CAAC;IACD,OAAO,IAAI,MAAM,CAAC,MAAM,CAAC,eAAe,CAAC,CAAA;AAC3C,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,qBAAqB,CACzC,MAAc,EACd,OAAwB,EACxB,MAAqB;IAErB,MAAM,QAAQ,GAAG,CAAC,OAAO,CAAC,QAAQ,IAAI,MAAM,CAAC,QAAQ,IAAI,KAAK,CAAC,CAAC,WAAW,EAAE,CAAA;
|
|
1
|
+
{"version":3,"file":"stripe.js","sourceRoot":"","sources":["../../src/lib/stripe.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import type { PaymentProvider, CheckoutParams, CheckoutResult, CustomerParams, WebhookEvent } from '../core/provider.interface.js';
|
|
2
|
+
export interface ChargilyConfig {
|
|
3
|
+
apiKey: string;
|
|
4
|
+
testMode?: boolean;
|
|
5
|
+
successUrl: string;
|
|
6
|
+
failureUrl: string;
|
|
7
|
+
webhookUrl?: string;
|
|
8
|
+
}
|
|
9
|
+
export declare class ChargilyProvider implements PaymentProvider {
|
|
10
|
+
private config;
|
|
11
|
+
readonly name = "chargily";
|
|
12
|
+
readonly supportedCurrencies: string[];
|
|
13
|
+
readonly supportedMethods: string[];
|
|
14
|
+
private baseUrl;
|
|
15
|
+
constructor(config: ChargilyConfig);
|
|
16
|
+
private headers;
|
|
17
|
+
createCheckout(params: CheckoutParams): Promise<CheckoutResult>;
|
|
18
|
+
createCustomer(params: CustomerParams): Promise<string>;
|
|
19
|
+
getCustomer(customerId: string): Promise<Record<string, unknown>>;
|
|
20
|
+
/**
|
|
21
|
+
* Get payment details by checkout ID.
|
|
22
|
+
*/
|
|
23
|
+
getPayment(checkoutId: string): Promise<Record<string, unknown>>;
|
|
24
|
+
verifyWebhook(body: string, signature: string): Promise<WebhookEvent>;
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Create a Chargily provider from environment variables.
|
|
28
|
+
*/
|
|
29
|
+
export declare function createChargilyProvider(config?: Partial<ChargilyConfig>): ChargilyProvider;
|
|
30
|
+
//# sourceMappingURL=chargily.provider.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chargily.provider.d.ts","sourceRoot":"","sources":["../../src/providers/chargily.provider.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,eAAe,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAA;AAGlI,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,MAAM,CAAA;IACd,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,UAAU,EAAE,MAAM,CAAA;IAClB,UAAU,EAAE,MAAM,CAAA;IAClB,UAAU,CAAC,EAAE,MAAM,CAAA;CACpB;AAED,qBAAa,gBAAiB,YAAW,eAAe;IAO1C,OAAO,CAAC,MAAM;IAN1B,QAAQ,CAAC,IAAI,cAAa;IAC1B,QAAQ,CAAC,mBAAmB,WAAU;IACtC,QAAQ,CAAC,gBAAgB,WAAsB;IAE/C,OAAO,CAAC,OAAO,CAAQ;gBAEH,MAAM,EAAE,cAAc;IAM1C,OAAO,CAAC,OAAO;IAOT,cAAc,CAAC,MAAM,EAAE,cAAc,GAAG,OAAO,CAAC,cAAc,CAAC;IAwB/D,cAAc,CAAC,MAAM,EAAE,cAAc,GAAG,OAAO,CAAC,MAAM,CAAC;IAgBvD,WAAW,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAMvE;;OAEG;IACG,UAAU,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAMhE,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC;CA0B5E;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC,cAAc,CAAC,GAAG,gBAAgB,CAQzF"}
|
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
// @mostajs/payment — Chargily Pay V2 provider (CIB + EDAHABIA — Algerie)
|
|
2
|
+
// Author: Dr Hamid MADANI drmdh@msn.com
|
|
3
|
+
// Ref: https://dev.chargily.com/pay-v2/api-reference/
|
|
4
|
+
// GitHub: https://github.com/chargily
|
|
5
|
+
import { createHmac } from 'node:crypto';
|
|
6
|
+
export class ChargilyProvider {
|
|
7
|
+
config;
|
|
8
|
+
name = 'chargily';
|
|
9
|
+
supportedCurrencies = ['DZD'];
|
|
10
|
+
supportedMethods = ['cib', 'edahabia'];
|
|
11
|
+
baseUrl;
|
|
12
|
+
constructor(config) {
|
|
13
|
+
this.config = config;
|
|
14
|
+
this.baseUrl = config.testMode
|
|
15
|
+
? 'https://pay.chargily.net/test/api/v2'
|
|
16
|
+
: 'https://pay.chargily.net/api/v2';
|
|
17
|
+
}
|
|
18
|
+
headers() {
|
|
19
|
+
return {
|
|
20
|
+
'Authorization': `Bearer ${this.config.apiKey}`,
|
|
21
|
+
'Content-Type': 'application/json',
|
|
22
|
+
};
|
|
23
|
+
}
|
|
24
|
+
async createCheckout(params) {
|
|
25
|
+
const res = await fetch(`${this.baseUrl}/checkouts`, {
|
|
26
|
+
method: 'POST',
|
|
27
|
+
headers: this.headers(),
|
|
28
|
+
body: JSON.stringify({
|
|
29
|
+
amount: params.amount, // DZD (pas centimes — Chargily attend le montant reel)
|
|
30
|
+
currency: 'dzd',
|
|
31
|
+
success_url: params.successUrl ?? this.config.successUrl,
|
|
32
|
+
failure_url: params.cancelUrl ?? this.config.failureUrl,
|
|
33
|
+
webhook_endpoint: params.webhookUrl ?? this.config.webhookUrl,
|
|
34
|
+
description: params.description ?? `Commande ${params.orderId}`,
|
|
35
|
+
metadata: { orderId: params.orderId, ...params.metadata },
|
|
36
|
+
}),
|
|
37
|
+
});
|
|
38
|
+
if (!res.ok) {
|
|
39
|
+
const err = await res.json().catch(() => ({}));
|
|
40
|
+
throw new Error(`[chargily] Checkout failed: ${err.message ?? res.statusText}`);
|
|
41
|
+
}
|
|
42
|
+
const data = await res.json();
|
|
43
|
+
return { url: data.checkout_url, sessionId: data.id };
|
|
44
|
+
}
|
|
45
|
+
async createCustomer(params) {
|
|
46
|
+
const res = await fetch(`${this.baseUrl}/customers`, {
|
|
47
|
+
method: 'POST',
|
|
48
|
+
headers: this.headers(),
|
|
49
|
+
body: JSON.stringify({
|
|
50
|
+
name: params.name,
|
|
51
|
+
email: params.email,
|
|
52
|
+
metadata: params.metadata,
|
|
53
|
+
}),
|
|
54
|
+
});
|
|
55
|
+
if (!res.ok)
|
|
56
|
+
throw new Error(`[chargily] Create customer failed: ${res.statusText}`);
|
|
57
|
+
const data = await res.json();
|
|
58
|
+
return data.id;
|
|
59
|
+
}
|
|
60
|
+
async getCustomer(customerId) {
|
|
61
|
+
const res = await fetch(`${this.baseUrl}/customers/${customerId}`, { headers: this.headers() });
|
|
62
|
+
if (!res.ok)
|
|
63
|
+
throw new Error(`[chargily] Get customer failed: ${res.statusText}`);
|
|
64
|
+
return res.json();
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Get payment details by checkout ID.
|
|
68
|
+
*/
|
|
69
|
+
async getPayment(checkoutId) {
|
|
70
|
+
const res = await fetch(`${this.baseUrl}/checkouts/${checkoutId}`, { headers: this.headers() });
|
|
71
|
+
if (!res.ok)
|
|
72
|
+
throw new Error(`[chargily] Get payment failed: ${res.statusText}`);
|
|
73
|
+
return res.json();
|
|
74
|
+
}
|
|
75
|
+
async verifyWebhook(body, signature) {
|
|
76
|
+
// Chargily signs with HMAC-SHA256 using the API key as secret
|
|
77
|
+
const computed = createHmac('sha256', this.config.apiKey).update(body).digest('hex');
|
|
78
|
+
if (computed !== signature) {
|
|
79
|
+
throw new Error('[chargily] Invalid webhook signature');
|
|
80
|
+
}
|
|
81
|
+
const data = JSON.parse(body);
|
|
82
|
+
const type = data.status === 'paid' ? 'payment.success'
|
|
83
|
+
: data.status === 'failed' ? 'payment.failed'
|
|
84
|
+
: data.status === 'canceled' ? 'payment.canceled'
|
|
85
|
+
: 'payment.pending';
|
|
86
|
+
return {
|
|
87
|
+
type,
|
|
88
|
+
data: {
|
|
89
|
+
checkoutId: data.id,
|
|
90
|
+
amount: data.amount,
|
|
91
|
+
currency: data.currency,
|
|
92
|
+
status: data.status,
|
|
93
|
+
metadata: data.metadata,
|
|
94
|
+
orderId: data.metadata?.orderId,
|
|
95
|
+
},
|
|
96
|
+
raw: data,
|
|
97
|
+
};
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
/**
|
|
101
|
+
* Create a Chargily provider from environment variables.
|
|
102
|
+
*/
|
|
103
|
+
export function createChargilyProvider(config) {
|
|
104
|
+
return new ChargilyProvider({
|
|
105
|
+
apiKey: config?.apiKey ?? process.env.CHARGILY_API_KEY ?? '',
|
|
106
|
+
testMode: config?.testMode ?? process.env.CHARGILY_TEST_MODE !== 'false',
|
|
107
|
+
successUrl: config?.successUrl ?? process.env.CHARGILY_SUCCESS_URL ?? '/payment/success',
|
|
108
|
+
failureUrl: config?.failureUrl ?? process.env.CHARGILY_FAILURE_URL ?? '/payment/failed',
|
|
109
|
+
webhookUrl: config?.webhookUrl ?? process.env.CHARGILY_WEBHOOK_URL,
|
|
110
|
+
});
|
|
111
|
+
}
|
|
112
|
+
//# sourceMappingURL=chargily.provider.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chargily.provider.js","sourceRoot":"","sources":["../../src/providers/chargily.provider.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import type { PaymentProvider, CheckoutParams, CheckoutResult, WebhookEvent } from '../core/provider.interface.js';
|
|
2
|
+
export interface ManualConfig {
|
|
3
|
+
bankInfo?: {
|
|
4
|
+
rib: string;
|
|
5
|
+
bankName: string;
|
|
6
|
+
holder: string;
|
|
7
|
+
};
|
|
8
|
+
confirmationUrl?: string;
|
|
9
|
+
}
|
|
10
|
+
export declare class ManualProvider implements PaymentProvider {
|
|
11
|
+
private config;
|
|
12
|
+
readonly name = "manual";
|
|
13
|
+
readonly supportedCurrencies: string[];
|
|
14
|
+
readonly supportedMethods: string[];
|
|
15
|
+
constructor(config?: ManualConfig);
|
|
16
|
+
createCheckout(params: CheckoutParams): Promise<CheckoutResult>;
|
|
17
|
+
verifyWebhook(body: string, _signature: string): Promise<WebhookEvent>;
|
|
18
|
+
}
|
|
19
|
+
export declare function createManualProvider(config?: ManualConfig): ManualProvider;
|
|
20
|
+
//# sourceMappingURL=manual.provider.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"manual.provider.d.ts","sourceRoot":"","sources":["../../src/providers/manual.provider.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,eAAe,EAAE,cAAc,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAA;AAElH,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,EAAE;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAA;IAC5D,eAAe,CAAC,EAAE,MAAM,CAAA;CACzB;AAED,qBAAa,cAAe,YAAW,eAAe;IAKxC,OAAO,CAAC,MAAM;IAJ1B,QAAQ,CAAC,IAAI,YAAW;IACxB,QAAQ,CAAC,mBAAmB,WAAQ;IACpC,QAAQ,CAAC,gBAAgB,WAA8B;gBAEnC,MAAM,GAAE,YAAiB;IAEvC,cAAc,CAAC,MAAM,EAAE,cAAc,GAAG,OAAO,CAAC,cAAc,CAAC;IAQ/D,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC;CAI7E;AAED,wBAAgB,oBAAoB,CAAC,MAAM,CAAC,EAAE,YAAY,GAAG,cAAc,CAE1E"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
// @mostajs/payment — Manual provider (cash, bank transfer, TPE)
|
|
2
|
+
// Author: Dr Hamid MADANI drmdh@msn.com
|
|
3
|
+
export class ManualProvider {
|
|
4
|
+
config;
|
|
5
|
+
name = 'manual';
|
|
6
|
+
supportedCurrencies = ['*'];
|
|
7
|
+
supportedMethods = ['cash', 'transfer', 'tpe'];
|
|
8
|
+
constructor(config = {}) {
|
|
9
|
+
this.config = config;
|
|
10
|
+
}
|
|
11
|
+
async createCheckout(params) {
|
|
12
|
+
// No external redirect — return confirmation page URL
|
|
13
|
+
const url = this.config.confirmationUrl
|
|
14
|
+
? `${this.config.confirmationUrl}?orderId=${params.orderId}`
|
|
15
|
+
: params.successUrl;
|
|
16
|
+
return { url, sessionId: `manual_${params.orderId}` };
|
|
17
|
+
}
|
|
18
|
+
async verifyWebhook(body, _signature) {
|
|
19
|
+
const data = JSON.parse(body);
|
|
20
|
+
return { type: 'payment.manual', data };
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
export function createManualProvider(config) {
|
|
24
|
+
return new ManualProvider(config);
|
|
25
|
+
}
|
|
26
|
+
//# sourceMappingURL=manual.provider.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"manual.provider.js","sourceRoot":"","sources":["../../src/providers/manual.provider.ts"],"names":[],"mappings":"AAAA,gEAAgE;AAChE,wCAAwC;AASxC,MAAM,OAAO,cAAc;IAKL;IAJX,IAAI,GAAG,QAAQ,CAAA;IACf,mBAAmB,GAAG,CAAC,GAAG,CAAC,CAAA;IAC3B,gBAAgB,GAAG,CAAC,MAAM,EAAE,UAAU,EAAE,KAAK,CAAC,CAAA;IAEvD,YAAoB,SAAuB,EAAE;QAAzB,WAAM,GAAN,MAAM,CAAmB;IAAG,CAAC;IAEjD,KAAK,CAAC,cAAc,CAAC,MAAsB;QACzC,sDAAsD;QACtD,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,eAAe;YACrC,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,eAAe,YAAY,MAAM,CAAC,OAAO,EAAE;YAC5D,CAAC,CAAC,MAAM,CAAC,UAAU,CAAA;QACrB,OAAO,EAAE,GAAG,EAAE,SAAS,EAAE,UAAU,MAAM,CAAC,OAAO,EAAE,EAAE,CAAA;IACvD,CAAC;IAED,KAAK,CAAC,aAAa,CAAC,IAAY,EAAE,UAAkB;QAClD,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;QAC7B,OAAO,EAAE,IAAI,EAAE,gBAAgB,EAAE,IAAI,EAAE,CAAA;IACzC,CAAC;CACF;AAED,MAAM,UAAU,oBAAoB,CAAC,MAAqB;IACxD,OAAO,IAAI,cAAc,CAAC,MAAM,CAAC,CAAA;AACnC,CAAC"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import type { PaymentProvider, CheckoutParams, CheckoutResult, RefundParams, RefundResult, WebhookEvent } from '../core/provider.interface.js';
|
|
2
|
+
export interface PayPalConfig {
|
|
3
|
+
clientId: string;
|
|
4
|
+
secret: string;
|
|
5
|
+
testMode?: boolean;
|
|
6
|
+
returnUrl: string;
|
|
7
|
+
cancelUrl: string;
|
|
8
|
+
webhookId?: string;
|
|
9
|
+
}
|
|
10
|
+
export declare class PayPalProvider implements PaymentProvider {
|
|
11
|
+
private config;
|
|
12
|
+
readonly name = "paypal";
|
|
13
|
+
readonly supportedCurrencies: string[];
|
|
14
|
+
readonly supportedMethods: string[];
|
|
15
|
+
private baseUrl;
|
|
16
|
+
private tokenCache;
|
|
17
|
+
constructor(config: PayPalConfig);
|
|
18
|
+
private getAccessToken;
|
|
19
|
+
private api;
|
|
20
|
+
createCheckout(params: CheckoutParams): Promise<CheckoutResult>;
|
|
21
|
+
/**
|
|
22
|
+
* Capture a PayPal order after user approval.
|
|
23
|
+
* Call this when PayPal redirects back to returnUrl with ?token=ORDER_ID
|
|
24
|
+
*/
|
|
25
|
+
captureOrder(orderId: string): Promise<{
|
|
26
|
+
status: string;
|
|
27
|
+
data: Record<string, unknown>;
|
|
28
|
+
}>;
|
|
29
|
+
/**
|
|
30
|
+
* Get order details.
|
|
31
|
+
*/
|
|
32
|
+
getOrder(orderId: string): Promise<Record<string, unknown>>;
|
|
33
|
+
createRefund(params: RefundParams): Promise<RefundResult>;
|
|
34
|
+
verifyWebhook(body: string, signature: string): Promise<WebhookEvent>;
|
|
35
|
+
/**
|
|
36
|
+
* Verify webhook signature via PayPal API (production).
|
|
37
|
+
*/
|
|
38
|
+
verifyWebhookSignature(headers: Record<string, string>, body: string): Promise<boolean>;
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Create a PayPal provider from environment variables.
|
|
42
|
+
*/
|
|
43
|
+
export declare function createPayPalProvider(config?: Partial<PayPalConfig>): PayPalProvider;
|
|
44
|
+
//# sourceMappingURL=paypal.provider.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"paypal.provider.d.ts","sourceRoot":"","sources":["../../src/providers/paypal.provider.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,eAAe,EAAE,cAAc,EAAE,cAAc,EAAE,YAAY,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAA;AAG9I,MAAM,WAAW,YAAY;IAC3B,QAAQ,EAAE,MAAM,CAAA;IAChB,MAAM,EAAE,MAAM,CAAA;IACd,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,SAAS,EAAE,MAAM,CAAA;IACjB,SAAS,EAAE,MAAM,CAAA;IACjB,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB;AAED,qBAAa,cAAe,YAAW,eAAe;IAQxC,OAAO,CAAC,MAAM;IAP1B,QAAQ,CAAC,IAAI,YAAW;IACxB,QAAQ,CAAC,mBAAmB,WAAoD;IAChF,QAAQ,CAAC,gBAAgB,WAAa;IAEtC,OAAO,CAAC,OAAO,CAAQ;IACvB,OAAO,CAAC,UAAU,CAAoD;gBAElD,MAAM,EAAE,YAAY;YAM1B,cAAc;YAwBd,GAAG;IAiBX,cAAc,CAAC,MAAM,EAAE,cAAc,GAAG,OAAO,CAAC,cAAc,CAAC;IA0BrE;;;OAGG;IACG,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;KAAE,CAAC;IAK/F;;OAEG;IACG,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAI3D,YAAY,CAAC,MAAM,EAAE,YAAY,GAAG,OAAO,CAAC,YAAY,CAAC;IAgBzD,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC;IAwB3E;;OAEG;IACG,sBAAsB,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;CAa9F;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC,YAAY,CAAC,GAAG,cAAc,CASnF"}
|