@mostajs/payment 0.6.0 → 0.7.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/auto-register.d.ts.map +1 -1
- package/dist/core/auto-register.js +10 -1
- package/dist/core/auto-register.js.map +1 -1
- package/dist/lib/webhook-helpers.d.ts +1 -1
- package/dist/lib/webhook-helpers.d.ts.map +1 -1
- package/dist/lib/webhook-helpers.js +10 -1
- package/dist/lib/webhook-helpers.js.map +1 -1
- package/dist/providers/guiddini.provider.d.ts +38 -0
- package/dist/providers/guiddini.provider.d.ts.map +1 -0
- package/dist/providers/guiddini.provider.js +126 -0
- package/dist/providers/guiddini.provider.js.map +1 -0
- package/dist/providers/satim.provider.d.ts +12 -0
- package/dist/providers/satim.provider.d.ts.map +1 -1
- package/dist/providers/satim.provider.js +77 -11
- package/dist/providers/satim.provider.js.map +1 -1
- package/dist/providers/slickpay.provider.d.ts +37 -0
- package/dist/providers/slickpay.provider.d.ts.map +1 -0
- package/dist/providers/slickpay.provider.js +121 -0
- package/dist/providers/slickpay.provider.js.map +1 -0
- package/dist/server.d.ts +4 -0
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +3 -0
- package/dist/server.js.map +1 -1
- package/llms.txt +5 -4
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auto-register.d.ts","sourceRoot":"","sources":["../../src/core/auto-register.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"auto-register.d.ts","sourceRoot":"","sources":["../../src/core/auto-register.ts"],"names":[],"mappings":"AAyBA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAA;AAE7D,MAAM,WAAW,mBAAmB;IAClC;;;;OAIG;IACH,SAAS,CAAC,EAAE,YAAY,EAAE,CAAA;IAC1B,4FAA4F;IAC5F,UAAU,CAAC,EAAE,YAAY,CAAA;IACzB,sEAAsE;IACtE,KAAK,CAAC,EAAE,OAAO,CAAA;CAChB;AAkCD;;;;;;;;;GASG;AACH,wBAAgB,wBAAwB,CAAC,IAAI,GAAE,mBAAwB,GAAG,MAAM,EAAE,CAoBjF;AAQD,wBAAgB,sBAAsB,CAAC,IAAI,GAAE,mBAAwB,GAAG,MAAM,EAAE,CAM/E;AAED,kEAAkE;AAClE,wBAAgB,qBAAqB,IAAI,IAAI,CAAqB"}
|
|
@@ -18,6 +18,8 @@ import { createChargilyProvider } from '../providers/chargily.provider.js';
|
|
|
18
18
|
import { createSatimProvider } from '../providers/satim.provider.js';
|
|
19
19
|
import { createPayPalProvider } from '../providers/paypal.provider.js';
|
|
20
20
|
import { createManualProvider } from '../providers/manual.provider.js';
|
|
21
|
+
import { createSlickPayProvider } from '../providers/slickpay.provider.js';
|
|
22
|
+
import { createGuiddiniProvider } from '../providers/guiddini.provider.js';
|
|
21
23
|
/** Indique si l'environnement contient de quoi instancier ce provider. */
|
|
22
24
|
function isConfigured(name) {
|
|
23
25
|
switch (name) {
|
|
@@ -25,6 +27,8 @@ function isConfigured(name) {
|
|
|
25
27
|
case 'chargily': return !!(getEnv('CHARGILY_SECRET_KEY') ?? getEnv('CHARGILY_API_KEY'));
|
|
26
28
|
case 'satim': return !!getEnv('SATIM_MERCHANT_ID');
|
|
27
29
|
case 'paypal': return !!getEnv('PAYPAL_CLIENT_ID');
|
|
30
|
+
case 'slickpay': return !!getEnv('SLICKPAY_PUBLIC_KEY');
|
|
31
|
+
case 'guiddini': return !!(getEnv('GUIDDINI_APP_KEY') && getEnv('GUIDDINI_APP_SECRET'));
|
|
28
32
|
case 'manual': return true; // aucun secret requis
|
|
29
33
|
default: return false;
|
|
30
34
|
}
|
|
@@ -35,11 +39,16 @@ function instantiate(name) {
|
|
|
35
39
|
case 'chargily': return createChargilyProvider();
|
|
36
40
|
case 'satim': return createSatimProvider();
|
|
37
41
|
case 'paypal': return createPayPalProvider();
|
|
42
|
+
case 'slickpay': return createSlickPayProvider();
|
|
43
|
+
case 'guiddini': return createGuiddiniProvider();
|
|
38
44
|
case 'manual': return createManualProvider();
|
|
39
45
|
default: return null;
|
|
40
46
|
}
|
|
41
47
|
}
|
|
42
|
-
|
|
48
|
+
// Ordre = résolution par devise (spécifiques DZD avant Stripe joker). Les
|
|
49
|
+
// agrégateurs DZ (chargily/slickpay/guiddini) et SATIM partagent DZD : le 1er
|
|
50
|
+
// configuré gagne pour getProviderForCurrency ; sinon cibler via providerName.
|
|
51
|
+
const DEFAULT_ORDER = ['chargily', 'slickpay', 'guiddini', 'satim', 'paypal', 'stripe'];
|
|
43
52
|
/**
|
|
44
53
|
* Enregistre dans le registre les providers configurés via l'environnement
|
|
45
54
|
* (cascade `MOSTA_ENV` de `@mostajs/config`). Retourne la liste des noms
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auto-register.js","sourceRoot":"","sources":["../../src/core/auto-register.ts"],"names":[],"mappings":"AAAA,8EAA8E;AAC9E,0CAA0C;AAC1C,EAAE;AACF,6EAA6E;AAC7E,2EAA2E;AAC3E,gFAAgF;AAChF,EAAE;AACF,+DAA+D;AAC/D,6EAA6E;AAC7E,4EAA4E;AAC5E,+EAA+E;AAC/E,4EAA4E;AAC5E,WAAW;AAEX,OAAO,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAA;AACxC,OAAO,EACL,gBAAgB,EAAE,kBAAkB,EAAe,aAAa,GACjE,MAAM,qBAAqB,CAAA;AAC5B,OAAO,EAAE,oBAAoB,EAAE,MAAM,iCAAiC,CAAA;AACtE,OAAO,EAAE,sBAAsB,EAAE,MAAM,mCAAmC,CAAA;AAC1E,OAAO,EAAE,mBAAmB,EAAE,MAAM,gCAAgC,CAAA;AACpE,OAAO,EAAE,oBAAoB,EAAE,MAAM,iCAAiC,CAAA;AACtE,OAAO,EAAE,oBAAoB,EAAE,MAAM,iCAAiC,CAAA;
|
|
1
|
+
{"version":3,"file":"auto-register.js","sourceRoot":"","sources":["../../src/core/auto-register.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { PaymentProvider, WebhookEvent } from '../core/provider.interface.js';
|
|
2
|
-
export type ProviderName = 'chargily' | 'stripe' | 'satim' | 'paypal' | 'manual';
|
|
2
|
+
export type ProviderName = 'chargily' | 'stripe' | 'satim' | 'paypal' | 'manual' | 'slickpay' | 'guiddini';
|
|
3
3
|
/** Liste exhaustive des noms de provider supportés. À étendre dans ce
|
|
4
4
|
* module quand un nouveau provider est ajouté → tous les consumers
|
|
5
5
|
* bénéficient automatiquement. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"webhook-helpers.d.ts","sourceRoot":"","sources":["../../src/lib/webhook-helpers.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"webhook-helpers.d.ts","sourceRoot":"","sources":["../../src/lib/webhook-helpers.ts"],"names":[],"mappings":"AAgBA,OAAO,KAAK,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAA;AAElF,MAAM,MAAM,YAAY,GAAG,UAAU,GAAG,QAAQ,GAAG,OAAO,GAAG,QAAQ,GAAG,QAAQ,GAAG,UAAU,GAAG,UAAU,CAAA;AAE1G;;mCAEmC;AACnC,eAAO,MAAM,eAAe,EAAE,SAAS,YAAY,EAAgF,CAAA;AAEnI,sEAAsE;AACtE,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,IAAI,YAAY,CAElE;AAID;;;;;GAKG;AACH,eAAO,MAAM,oBAAoB,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,CAOtE,CAAA;AAEF;;;;;GAKG;AACH,wBAAgB,sBAAsB,CACpC,QAAQ,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,EACnC,QAAQ,GAAE,YAAuB,GAChC;IAAE,IAAI,EAAE,YAAY,CAAC;IAAC,QAAQ,EAAE,eAAe,CAAA;CAAE,CAInD;AAID;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,OAAO,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,YAAY,EAAE,YAAY,GAAG,MAAM,CA2BjH;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,YAAY,GAAG,eAAe,CAUrE;AAED,MAAM,WAAW,yBAAyB;IACxC;iEAC6D;IAC7D,IAAI,EAAE,MAAM,CAAA;IACZ,kCAAkC;IAClC,OAAO,EAAE,OAAO,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IACzC,uBAAuB;IACvB,YAAY,EAAE,YAAY,CAAA;CAC3B;AAED,MAAM,MAAM,2BAA2B,GACnC;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,KAAK,EAAE,YAAY,CAAA;CAAE,GACjC;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,MAAM,EAAE,eAAe,GAAG,WAAW,GAAG,kBAAkB,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAA;AAE5F;;;;;;;;;;;;;;;GAeG;AACH,wBAAsB,qBAAqB,CAAC,IAAI,EAAE,yBAAyB,GAAG,OAAO,CAAC,2BAA2B,CAAC,CAgBjH;AAID;;;GAGG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,YAAY,GAAG,OAAO,CAOxD;AAED,sEAAsE;AACtE,wBAAgB,aAAa,CAAC,KAAK,EAAE,YAAY,GAAG,OAAO,CAS1D;AAED,gDAAgD;AAChD,wBAAgB,eAAe,CAAC,KAAK,EAAE,YAAY,GAAG,OAAO,CAK5D;AAED;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,YAAY,GAAG,MAAM,GAAG,IAAI,CASjE"}
|
|
@@ -11,10 +11,12 @@ import { createStripeProvider } from '../providers/stripe.provider.js';
|
|
|
11
11
|
import { createSatimProvider } from '../providers/satim.provider.js';
|
|
12
12
|
import { createPayPalProvider } from '../providers/paypal.provider.js';
|
|
13
13
|
import { createManualProvider } from '../providers/manual.provider.js';
|
|
14
|
+
import { createSlickPayProvider } from '../providers/slickpay.provider.js';
|
|
15
|
+
import { createGuiddiniProvider } from '../providers/guiddini.provider.js';
|
|
14
16
|
/** Liste exhaustive des noms de provider supportés. À étendre dans ce
|
|
15
17
|
* module quand un nouveau provider est ajouté → tous les consumers
|
|
16
18
|
* bénéficient automatiquement. */
|
|
17
|
-
export const KNOWN_PROVIDERS = ['chargily', 'stripe', 'satim', 'paypal', 'manual'];
|
|
19
|
+
export const KNOWN_PROVIDERS = ['chargily', 'stripe', 'satim', 'paypal', 'manual', 'slickpay', 'guiddini'];
|
|
18
20
|
/** Type-guard runtime — vrai si `name` est un ProviderName valide. */
|
|
19
21
|
export function isKnownProvider(name) {
|
|
20
22
|
return KNOWN_PROVIDERS.includes(name);
|
|
@@ -70,6 +72,11 @@ export function pickSignatureHeader(headers, providerName) {
|
|
|
70
72
|
return get('paypal-transmission-sig') || '';
|
|
71
73
|
case 'manual':
|
|
72
74
|
return get('x-signature') || '';
|
|
75
|
+
case 'slickpay':
|
|
76
|
+
case 'guiddini':
|
|
77
|
+
// Agrégateurs SATIM : confirmation par retour + interrogation statut
|
|
78
|
+
// (pas de webhook signé) → pas de header signature requis.
|
|
79
|
+
return '';
|
|
73
80
|
default:
|
|
74
81
|
return '';
|
|
75
82
|
}
|
|
@@ -85,6 +92,8 @@ export function getProviderByName(name) {
|
|
|
85
92
|
case 'satim': return createSatimProvider();
|
|
86
93
|
case 'paypal': return createPayPalProvider();
|
|
87
94
|
case 'manual': return createManualProvider();
|
|
95
|
+
case 'slickpay': return createSlickPayProvider();
|
|
96
|
+
case 'guiddini': return createGuiddiniProvider();
|
|
88
97
|
}
|
|
89
98
|
}
|
|
90
99
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"webhook-helpers.js","sourceRoot":"","sources":["../../src/lib/webhook-helpers.ts"],"names":[],"mappings":"AAAA,mEAAmE;AACnE,0CAA0C;AAC1C,EAAE;AACF,oEAAoE;AACpE,gEAAgE;AAChE,uEAAuE;AACvE,2DAA2D;AAC3D,mCAAmC;AAEnC,OAAO,EAAE,sBAAsB,EAAE,MAAM,mCAAmC,CAAA;AAC1E,OAAO,EAAE,oBAAoB,EAAE,MAAM,iCAAiC,CAAA;AACtE,OAAO,EAAE,mBAAmB,EAAE,MAAM,gCAAgC,CAAA;AACpE,OAAO,EAAE,oBAAoB,EAAE,MAAM,iCAAiC,CAAA;AACtE,OAAO,EAAE,oBAAoB,EAAE,MAAM,iCAAiC,CAAA;
|
|
1
|
+
{"version":3,"file":"webhook-helpers.js","sourceRoot":"","sources":["../../src/lib/webhook-helpers.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import type { CheckoutParams, CheckoutResult, WebhookEvent } from '../core/provider.interface.js';
|
|
2
|
+
import { AbstractPaymentProvider } from '../core/abstract-provider.js';
|
|
3
|
+
export interface GuiddiniConfig {
|
|
4
|
+
appKey: string;
|
|
5
|
+
appSecret: string;
|
|
6
|
+
testMode?: boolean;
|
|
7
|
+
/** Base API (sans slash final). Pilotable par env. */
|
|
8
|
+
baseUrl?: string;
|
|
9
|
+
/** Chemin d'initiation de paiement. Défaut '/transactions/initiate'. */
|
|
10
|
+
initiatePath?: string;
|
|
11
|
+
/** Chemin de statut (avec {id}). Défaut '/transactions'. */
|
|
12
|
+
statusPath?: string;
|
|
13
|
+
returnUrl?: string;
|
|
14
|
+
}
|
|
15
|
+
export declare class GuiddiniProvider extends AbstractPaymentProvider {
|
|
16
|
+
private config;
|
|
17
|
+
readonly name = "guiddini";
|
|
18
|
+
readonly supportedCurrencies: string[];
|
|
19
|
+
readonly supportedMethods: string[];
|
|
20
|
+
private baseUrl;
|
|
21
|
+
private initiatePath;
|
|
22
|
+
private statusPath;
|
|
23
|
+
constructor(config: GuiddiniConfig);
|
|
24
|
+
private headers;
|
|
25
|
+
protected doCheckout(params: CheckoutParams): Promise<CheckoutResult>;
|
|
26
|
+
/** Statut d'une transaction Guiddini par id. */
|
|
27
|
+
getTransaction(id: string): Promise<Record<string, unknown>>;
|
|
28
|
+
/** Mappe un statut Guiddini/SATIM vers un type d'event normalisé (pur, testable). */
|
|
29
|
+
static mapStatus(raw: Record<string, any>): string;
|
|
30
|
+
protected doVerifyWebhook(body: string, _signature: string): Promise<WebhookEvent>;
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Crée un provider Guiddini depuis l'environnement (cascade @mostajs/config).
|
|
34
|
+
* Env : GUIDDINI_APP_KEY, GUIDDINI_APP_SECRET, GUIDDINI_TEST_MODE,
|
|
35
|
+
* GUIDDINI_BASE_URL, GUIDDINI_INITIATE_PATH, GUIDDINI_STATUS_PATH, GUIDDINI_RETURN_URL.
|
|
36
|
+
*/
|
|
37
|
+
export declare function createGuiddiniProvider(config?: Partial<GuiddiniConfig>): GuiddiniProvider;
|
|
38
|
+
//# sourceMappingURL=guiddini.provider.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"guiddini.provider.d.ts","sourceRoot":"","sources":["../../src/providers/guiddini.provider.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,cAAc,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAA;AACjG,OAAO,EAAE,uBAAuB,EAAE,MAAM,8BAA8B,CAAA;AAGtE,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,MAAM,CAAA;IACd,SAAS,EAAE,MAAM,CAAA;IACjB,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,sDAAsD;IACtD,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,wEAAwE;IACxE,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,4DAA4D;IAC5D,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB;AAED,qBAAa,gBAAiB,SAAQ,uBAAuB;IAS/C,OAAO,CAAC,MAAM;IAR1B,QAAQ,CAAC,IAAI,cAAa;IAC1B,QAAQ,CAAC,mBAAmB,WAAU;IACtC,QAAQ,CAAC,gBAAgB,WAAsB;IAE/C,OAAO,CAAC,OAAO,CAAQ;IACvB,OAAO,CAAC,YAAY,CAAQ;IAC5B,OAAO,CAAC,UAAU,CAAQ;gBAEN,MAAM,EAAE,cAAc;IAS1C,OAAO,CAAC,OAAO;cASC,UAAU,CAAC,MAAM,EAAE,cAAc,GAAG,OAAO,CAAC,cAAc,CAAC;IA0B3E,gDAAgD;IAC1C,cAAc,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAMlE,qFAAqF;IACrF,MAAM,CAAC,SAAS,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,MAAM;cAQlC,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC;CAyBzF;AAED;;;;GAIG;AACH,wBAAgB,sBAAsB,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC,cAAc,CAAC,GAAG,gBAAgB,CAUzF"}
|
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
// @mostajs/payment — Guiddini provider (agrégateur Algérie : CIB + EDAHABIA via SATIM)
|
|
2
|
+
// Author: Dr Hamid MADANI <drmdh@msn.com>
|
|
3
|
+
// Ref: https://guiddini.dz/docs/api/satim · >100 marchands certifiés SATIM
|
|
4
|
+
//
|
|
5
|
+
// Guiddini Pay : agrégateur SATIM (clé/secret applicatifs). Flux : initiation →
|
|
6
|
+
// redirection vers la page SATIM → confirmation par interrogation du statut.
|
|
7
|
+
// La doc publique étant rendue côté client, les chemins/URL sont PILOTABLES PAR
|
|
8
|
+
// ENV (corrigeables sans toucher au code, §10) — défauts provisoires à confirmer
|
|
9
|
+
// en certification GIE Monétique.
|
|
10
|
+
import { AbstractPaymentProvider } from '../core/abstract-provider.js';
|
|
11
|
+
import { getEnv } from '@mostajs/config';
|
|
12
|
+
export class GuiddiniProvider extends AbstractPaymentProvider {
|
|
13
|
+
config;
|
|
14
|
+
name = 'guiddini';
|
|
15
|
+
supportedCurrencies = ['DZD'];
|
|
16
|
+
supportedMethods = ['cib', 'edahabia'];
|
|
17
|
+
baseUrl;
|
|
18
|
+
initiatePath;
|
|
19
|
+
statusPath;
|
|
20
|
+
constructor(config) {
|
|
21
|
+
super();
|
|
22
|
+
this.config = config;
|
|
23
|
+
this.baseUrl = config.baseUrl ?? (config.testMode
|
|
24
|
+
? 'https://epay.guiddini.dz/api/test'
|
|
25
|
+
: 'https://epay.guiddini.dz/api');
|
|
26
|
+
this.initiatePath = config.initiatePath ?? '/transactions/initiate';
|
|
27
|
+
this.statusPath = config.statusPath ?? '/transactions';
|
|
28
|
+
}
|
|
29
|
+
headers() {
|
|
30
|
+
return {
|
|
31
|
+
'x-app-key': this.config.appKey,
|
|
32
|
+
'x-app-secret': this.config.appSecret,
|
|
33
|
+
'Content-Type': 'application/json',
|
|
34
|
+
'Accept': 'application/json',
|
|
35
|
+
};
|
|
36
|
+
}
|
|
37
|
+
async doCheckout(params) {
|
|
38
|
+
const res = await fetch(`${this.baseUrl}${this.initiatePath}`, {
|
|
39
|
+
method: 'POST',
|
|
40
|
+
headers: this.headers(),
|
|
41
|
+
body: JSON.stringify({
|
|
42
|
+
amount: params.amount, // DZD
|
|
43
|
+
order_number: params.orderId, // notre référence (matching)
|
|
44
|
+
return_url: params.successUrl ?? this.config.returnUrl,
|
|
45
|
+
fail_url: params.cancelUrl,
|
|
46
|
+
description: params.description ?? `Commande ${params.orderId}`,
|
|
47
|
+
meta: params.metadata,
|
|
48
|
+
}),
|
|
49
|
+
});
|
|
50
|
+
if (!res.ok) {
|
|
51
|
+
const err = await res.json().catch(() => ({}));
|
|
52
|
+
throw new Error(`[guiddini] Checkout failed: ${err.message ?? res.statusText}`);
|
|
53
|
+
}
|
|
54
|
+
const data = await res.json();
|
|
55
|
+
const d = data.data ?? data;
|
|
56
|
+
// { form_url|redirect_url|checkout_url, order_id|id }
|
|
57
|
+
return {
|
|
58
|
+
url: d.form_url ?? d.redirect_url ?? d.checkout_url ?? null,
|
|
59
|
+
sessionId: String(d.order_id ?? d.id ?? d.transaction_id ?? ''),
|
|
60
|
+
};
|
|
61
|
+
}
|
|
62
|
+
/** Statut d'une transaction Guiddini par id. */
|
|
63
|
+
async getTransaction(id) {
|
|
64
|
+
const res = await fetch(`${this.baseUrl}${this.statusPath}/${id}`, { headers: this.headers() });
|
|
65
|
+
if (!res.ok)
|
|
66
|
+
throw new Error(`[guiddini] Get transaction failed: ${res.statusText}`);
|
|
67
|
+
return res.json();
|
|
68
|
+
}
|
|
69
|
+
/** Mappe un statut Guiddini/SATIM vers un type d'event normalisé (pur, testable). */
|
|
70
|
+
static mapStatus(raw) {
|
|
71
|
+
const s = String(raw?.status ?? raw?.state ?? raw?.order_status ?? '').toLowerCase();
|
|
72
|
+
if (s === 'paid' || s === 'success' || s === 'completed' || s === 'confirmed' || raw?.order_status === 2)
|
|
73
|
+
return 'payment.success';
|
|
74
|
+
if (s === 'failed' || s === 'declined' || s === 'cancelled' || s === 'canceled')
|
|
75
|
+
return 'payment.failed';
|
|
76
|
+
if (s === 'refunded')
|
|
77
|
+
return 'payment.refunded';
|
|
78
|
+
return 'payment.pending';
|
|
79
|
+
}
|
|
80
|
+
async doVerifyWebhook(body, _signature) {
|
|
81
|
+
// Confirmation par retour + interrogation. Accepte un JSON déjà résolu
|
|
82
|
+
// ({order_number,status} — testable hors-ligne) ou un JSON {id} → interrogation.
|
|
83
|
+
let raw = {};
|
|
84
|
+
try {
|
|
85
|
+
raw = JSON.parse(body);
|
|
86
|
+
}
|
|
87
|
+
catch {
|
|
88
|
+
raw = Object.fromEntries(new URLSearchParams(body));
|
|
89
|
+
}
|
|
90
|
+
const env = raw.data ?? raw;
|
|
91
|
+
let status = env;
|
|
92
|
+
const id = env.id ?? env.order_id ?? env.transaction_id;
|
|
93
|
+
if (env.status === undefined && env.order_status === undefined && id) {
|
|
94
|
+
const fetched = await this.getTransaction(String(id));
|
|
95
|
+
status = fetched.data ?? fetched;
|
|
96
|
+
}
|
|
97
|
+
return {
|
|
98
|
+
type: GuiddiniProvider.mapStatus(status),
|
|
99
|
+
data: {
|
|
100
|
+
orderId: env.order_number ?? status.order_number ?? status.orderId,
|
|
101
|
+
transactionId: id ?? status.id,
|
|
102
|
+
amount: status.amount,
|
|
103
|
+
currency: 'DZD',
|
|
104
|
+
status: status.status ?? status.order_status,
|
|
105
|
+
},
|
|
106
|
+
raw: status,
|
|
107
|
+
};
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
/**
|
|
111
|
+
* Crée un provider Guiddini depuis l'environnement (cascade @mostajs/config).
|
|
112
|
+
* Env : GUIDDINI_APP_KEY, GUIDDINI_APP_SECRET, GUIDDINI_TEST_MODE,
|
|
113
|
+
* GUIDDINI_BASE_URL, GUIDDINI_INITIATE_PATH, GUIDDINI_STATUS_PATH, GUIDDINI_RETURN_URL.
|
|
114
|
+
*/
|
|
115
|
+
export function createGuiddiniProvider(config) {
|
|
116
|
+
return new GuiddiniProvider({
|
|
117
|
+
appKey: config?.appKey ?? getEnv('GUIDDINI_APP_KEY', ''),
|
|
118
|
+
appSecret: config?.appSecret ?? getEnv('GUIDDINI_APP_SECRET', ''),
|
|
119
|
+
testMode: config?.testMode ?? getEnv('GUIDDINI_TEST_MODE') !== 'false',
|
|
120
|
+
baseUrl: config?.baseUrl ?? getEnv('GUIDDINI_BASE_URL'),
|
|
121
|
+
initiatePath: config?.initiatePath ?? getEnv('GUIDDINI_INITIATE_PATH'),
|
|
122
|
+
statusPath: config?.statusPath ?? getEnv('GUIDDINI_STATUS_PATH'),
|
|
123
|
+
returnUrl: config?.returnUrl ?? getEnv('GUIDDINI_RETURN_URL', '/payment/success'),
|
|
124
|
+
});
|
|
125
|
+
}
|
|
126
|
+
//# sourceMappingURL=guiddini.provider.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"guiddini.provider.js","sourceRoot":"","sources":["../../src/providers/guiddini.provider.ts"],"names":[],"mappings":"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"}
|
|
@@ -30,6 +30,18 @@ export declare class SatimProvider extends AbstractPaymentProvider {
|
|
|
30
30
|
* Get order status.
|
|
31
31
|
*/
|
|
32
32
|
getOrderStatus(orderId: string): Promise<Record<string, unknown>>;
|
|
33
|
+
/**
|
|
34
|
+
* Statut SATIM/BPC enrichi par identifiant de commande SATIM (mdOrder).
|
|
35
|
+
* Champs clés : OrderStatus, OrderNumber (= notre orderId), Amount (centimes),
|
|
36
|
+
* actionCode, approvalCode, ErrorCode.
|
|
37
|
+
*/
|
|
38
|
+
getOrderStatusExtended(satimOrderId: string): Promise<Record<string, unknown>>;
|
|
39
|
+
/**
|
|
40
|
+
* Mappe un code OrderStatus BPC vers un type d'event normalisé.
|
|
41
|
+
* Codes BPC : 0 enregistré · 1 pré-autorisé · 2 **autorisé/payé** ·
|
|
42
|
+
* 3 annulé · 4 remboursé · 5 ACS/3-DS en cours · 6 refusé.
|
|
43
|
+
*/
|
|
44
|
+
static mapOrderStatus(code: number | string | undefined): string;
|
|
33
45
|
protected doVerifyWebhook(body: string, _signature: string): Promise<WebhookEvent>;
|
|
34
46
|
}
|
|
35
47
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"satim.provider.d.ts","sourceRoot":"","sources":["../../src/providers/satim.provider.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,cAAc,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAA;AACjG,OAAO,EAAE,uBAAuB,EAAE,MAAM,8BAA8B,CAAA;AAGtE,MAAM,WAAW,WAAW;IAC1B,UAAU,EAAE,MAAM,CAAA;IAClB,QAAQ,EAAE,MAAM,CAAA;IAChB,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,SAAS,EAAE,MAAM,CAAA;IACjB,OAAO,EAAE,MAAM,CAAA;IACf,kDAAkD;IAClD,YAAY,CAAC,EAAE,MAAM,CAAA;CACtB;AAED,qBAAa,aAAc,SAAQ,uBAAuB;IAO5C,OAAO,CAAC,MAAM;IAN1B,QAAQ,CAAC,IAAI,WAAU;IACvB,QAAQ,CAAC,mBAAmB,WAAU;IACtC,QAAQ,CAAC,gBAAgB,WAAU;IAEnC,OAAO,CAAC,OAAO,CAAQ;gBAEH,MAAM,EAAE,WAAW;cAOvB,UAAU,CAAC,MAAM,EAAE,cAAc,GAAG,OAAO,CAAC,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"satim.provider.d.ts","sourceRoot":"","sources":["../../src/providers/satim.provider.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,cAAc,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAA;AACjG,OAAO,EAAE,uBAAuB,EAAE,MAAM,8BAA8B,CAAA;AAGtE,MAAM,WAAW,WAAW;IAC1B,UAAU,EAAE,MAAM,CAAA;IAClB,QAAQ,EAAE,MAAM,CAAA;IAChB,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,SAAS,EAAE,MAAM,CAAA;IACjB,OAAO,EAAE,MAAM,CAAA;IACf,kDAAkD;IAClD,YAAY,CAAC,EAAE,MAAM,CAAA;CACtB;AAED,qBAAa,aAAc,SAAQ,uBAAuB;IAO5C,OAAO,CAAC,MAAM;IAN1B,QAAQ,CAAC,IAAI,WAAU;IACvB,QAAQ,CAAC,mBAAmB,WAAU;IACtC,QAAQ,CAAC,gBAAgB,WAAU;IAEnC,OAAO,CAAC,OAAO,CAAQ;gBAEH,MAAM,EAAE,WAAW;cAOvB,UAAU,CAAC,MAAM,EAAE,cAAc,GAAG,OAAO,CAAC,cAAc,CAAC;IAiC3E;;;OAGG;IACG,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,IAAI,EAAE,OAAO,CAAC;QAAC,UAAU,EAAE,MAAM,CAAC;QAAC,YAAY,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAsB1G;;OAEG;IACG,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAiBvE;;;;OAIG;IACG,sBAAsB,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAepF;;;;OAIG;IACH,MAAM,CAAC,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,GAAG,MAAM;cAUhD,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC;CAqCzF;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC,WAAW,CAAC,GAAG,aAAa,CAQhF"}
|
|
@@ -29,6 +29,10 @@ export class SatimProvider extends AbstractPaymentProvider {
|
|
|
29
29
|
});
|
|
30
30
|
if (params.description)
|
|
31
31
|
body.set('description', params.description);
|
|
32
|
+
// jsonParams : champs libres (dont orderId) restitués dans getOrderStatusExtended
|
|
33
|
+
if (params.metadata && Object.keys(params.metadata).length) {
|
|
34
|
+
body.set('jsonParams', JSON.stringify(params.metadata));
|
|
35
|
+
}
|
|
32
36
|
const res = await fetch(`${this.baseUrl}/register.do`, {
|
|
33
37
|
method: 'POST',
|
|
34
38
|
headers: { 'Content-Type': 'application/x-www-form-urlencoded' },
|
|
@@ -80,19 +84,81 @@ export class SatimProvider extends AbstractPaymentProvider {
|
|
|
80
84
|
});
|
|
81
85
|
return res.json();
|
|
82
86
|
}
|
|
87
|
+
/**
|
|
88
|
+
* Statut SATIM/BPC enrichi par identifiant de commande SATIM (mdOrder).
|
|
89
|
+
* Champs clés : OrderStatus, OrderNumber (= notre orderId), Amount (centimes),
|
|
90
|
+
* actionCode, approvalCode, ErrorCode.
|
|
91
|
+
*/
|
|
92
|
+
async getOrderStatusExtended(satimOrderId) {
|
|
93
|
+
const body = new URLSearchParams({
|
|
94
|
+
orderId: satimOrderId,
|
|
95
|
+
userName: this.config.merchantId,
|
|
96
|
+
password: this.config.password,
|
|
97
|
+
language: 'FR',
|
|
98
|
+
});
|
|
99
|
+
const res = await fetch(`${this.baseUrl}/getOrderStatusExtended.do`, {
|
|
100
|
+
method: 'POST',
|
|
101
|
+
headers: { 'Content-Type': 'application/x-www-form-urlencoded' },
|
|
102
|
+
body,
|
|
103
|
+
});
|
|
104
|
+
return res.json();
|
|
105
|
+
}
|
|
106
|
+
/**
|
|
107
|
+
* Mappe un code OrderStatus BPC vers un type d'event normalisé.
|
|
108
|
+
* Codes BPC : 0 enregistré · 1 pré-autorisé · 2 **autorisé/payé** ·
|
|
109
|
+
* 3 annulé · 4 remboursé · 5 ACS/3-DS en cours · 6 refusé.
|
|
110
|
+
*/
|
|
111
|
+
static mapOrderStatus(code) {
|
|
112
|
+
switch (String(code)) {
|
|
113
|
+
case '2': return 'payment.success';
|
|
114
|
+
case '4': return 'payment.refunded';
|
|
115
|
+
case '3':
|
|
116
|
+
case '6': return 'payment.failed';
|
|
117
|
+
default: return 'payment.pending'; // 0,1,5 ou inconnu
|
|
118
|
+
}
|
|
119
|
+
}
|
|
83
120
|
async doVerifyWebhook(body, _signature) {
|
|
84
|
-
//
|
|
85
|
-
//
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
}
|
|
121
|
+
// SATIM = callback PAR REDIRECTION (pas de webhook signé) : le handler de
|
|
122
|
+
// retour reçoit l'orderId SATIM (mdOrder) ; on confirme le statut côté serveur
|
|
123
|
+
// via getOrderStatusExtended. Accepte : querystring de retour, JSON {orderId},
|
|
124
|
+
// ou JSON déjà résolu (OrderStatus présent → pas d'appel réseau, testable).
|
|
125
|
+
const trimmed = body.trim();
|
|
126
|
+
let raw = {};
|
|
127
|
+
if (trimmed.startsWith('{')) {
|
|
128
|
+
try {
|
|
129
|
+
raw = JSON.parse(trimmed);
|
|
130
|
+
}
|
|
131
|
+
catch {
|
|
132
|
+
raw = {};
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
else {
|
|
136
|
+
raw = Object.fromEntries(new URLSearchParams(body));
|
|
137
|
+
}
|
|
138
|
+
const satimOrderId = raw.orderId ?? raw.mdOrder;
|
|
139
|
+
let status = raw;
|
|
140
|
+
if (raw.OrderStatus === undefined && raw.orderStatus === undefined && satimOrderId) {
|
|
141
|
+
status = await this.getOrderStatusExtended(String(satimOrderId));
|
|
94
142
|
}
|
|
95
|
-
|
|
143
|
+
const code = status.OrderStatus ?? status.orderStatus;
|
|
144
|
+
const orderNumber = status.OrderNumber ?? status.orderNumber ?? raw.orderNumber;
|
|
145
|
+
const amount = status.Amount !== undefined ? Number(status.Amount) / 100 : undefined;
|
|
146
|
+
const type = code !== undefined
|
|
147
|
+
? SatimProvider.mapOrderStatus(code)
|
|
148
|
+
: (String(raw.actionCode) === '0' ? 'payment.success' : 'payment.pending');
|
|
149
|
+
return {
|
|
150
|
+
type,
|
|
151
|
+
data: {
|
|
152
|
+
orderId: orderNumber ?? satimOrderId, // OrderNumber = notre orderId (matching)
|
|
153
|
+
satimOrderId,
|
|
154
|
+
orderStatus: code,
|
|
155
|
+
amount,
|
|
156
|
+
currency: 'DZD',
|
|
157
|
+
approvalCode: status.approvalCode ?? status.ApprovalCode,
|
|
158
|
+
errorCode: status.ErrorCode ?? status.errorCode,
|
|
159
|
+
},
|
|
160
|
+
raw: status,
|
|
161
|
+
};
|
|
96
162
|
}
|
|
97
163
|
}
|
|
98
164
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"satim.provider.js","sourceRoot":"","sources":["../../src/providers/satim.provider.ts"],"names":[],"mappings":"AAAA,kEAAkE;AAClE,wCAAwC;AACxC,qDAAqD;AAGrD,OAAO,EAAE,uBAAuB,EAAE,MAAM,8BAA8B,CAAA;AACtE,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AAYpD,MAAM,OAAO,aAAc,SAAQ,uBAAuB;IAOpC;IANX,IAAI,GAAG,OAAO,CAAA;IACd,mBAAmB,GAAG,CAAC,KAAK,CAAC,CAAA;IAC7B,gBAAgB,GAAG,CAAC,KAAK,CAAC,CAAA;IAE3B,OAAO,CAAQ;IAEvB,YAAoB,MAAmB;QACrC,KAAK,EAAE,CAAA;QADW,WAAM,GAAN,MAAM,CAAa;QAErC,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC,QAAQ;YAC5B,CAAC,CAAC,oCAAoC;YACtC,CAAC,CAAC,mCAAmC,CAAA;IACzC,CAAC;IAES,KAAK,CAAC,UAAU,CAAC,MAAsB;QAC/C,MAAM,IAAI,GAAG,IAAI,eAAe,CAAC;YAC/B,WAAW,EAAE,MAAM,CAAC,OAAO;YAC3B,MAAM,EAAE,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,GAAG,GAAG,CAAC,CAAC,EAAE,eAAe;YAChE,QAAQ,EAAE,IAAI,CAAC,MAAM,CAAC,YAAY,IAAI,KAAK,EAAE,eAAe;YAC5D,SAAS,EAAE,MAAM,CAAC,UAAU,IAAI,IAAI,CAAC,MAAM,CAAC,SAAS;YACrD,OAAO,EAAE,MAAM,CAAC,SAAS,IAAI,IAAI,CAAC,MAAM,CAAC,OAAO;YAChD,QAAQ,EAAE,IAAI,CAAC,MAAM,CAAC,UAAU;YAChC,QAAQ,EAAE,IAAI,CAAC,MAAM,CAAC,QAAQ;YAC9B,QAAQ,EAAE,IAAI;SACf,CAAC,CAAA;QAEF,IAAI,MAAM,CAAC,WAAW;YAAE,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,MAAM,CAAC,WAAW,CAAC,CAAA;
|
|
1
|
+
{"version":3,"file":"satim.provider.js","sourceRoot":"","sources":["../../src/providers/satim.provider.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import type { CheckoutParams, CheckoutResult, WebhookEvent } from '../core/provider.interface.js';
|
|
2
|
+
import { AbstractPaymentProvider } from '../core/abstract-provider.js';
|
|
3
|
+
export interface SlickPayConfig {
|
|
4
|
+
publicKey: string;
|
|
5
|
+
testMode?: boolean;
|
|
6
|
+
/** Base API (sans slash final). Défaut test/prod v2. */
|
|
7
|
+
baseUrl?: string;
|
|
8
|
+
/** Chemin de création d'invoice. Défaut '/users/invoices'. */
|
|
9
|
+
invoicePath?: string;
|
|
10
|
+
/** URL de retour par défaut si non fournie au checkout. */
|
|
11
|
+
returnUrl?: string;
|
|
12
|
+
}
|
|
13
|
+
export declare class SlickPayProvider extends AbstractPaymentProvider {
|
|
14
|
+
private config;
|
|
15
|
+
readonly name = "slickpay";
|
|
16
|
+
readonly supportedCurrencies: string[];
|
|
17
|
+
readonly supportedMethods: string[];
|
|
18
|
+
private baseUrl;
|
|
19
|
+
private invoicePath;
|
|
20
|
+
constructor(config: SlickPayConfig);
|
|
21
|
+
private headers;
|
|
22
|
+
/** URL de retour avec orderId propagé (matching au retour). */
|
|
23
|
+
private returnWithOrder;
|
|
24
|
+
protected doCheckout(params: CheckoutParams): Promise<CheckoutResult>;
|
|
25
|
+
/** Statut d'une invoice par id (confirmation serveur). */
|
|
26
|
+
getInvoice(id: string): Promise<Record<string, unknown>>;
|
|
27
|
+
/** Mappe un statut SlickPay vers un type d'event normalisé (pur, testable). */
|
|
28
|
+
static mapStatus(raw: Record<string, any>): string;
|
|
29
|
+
protected doVerifyWebhook(body: string, _signature: string): Promise<WebhookEvent>;
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Crée un provider SlickPay depuis l'environnement (cascade @mostajs/config).
|
|
33
|
+
* Env : SLICKPAY_PUBLIC_KEY, SLICKPAY_TEST_MODE, SLICKPAY_BASE_URL,
|
|
34
|
+
* SLICKPAY_INVOICE_PATH, SLICKPAY_RETURN_URL.
|
|
35
|
+
*/
|
|
36
|
+
export declare function createSlickPayProvider(config?: Partial<SlickPayConfig>): SlickPayProvider;
|
|
37
|
+
//# sourceMappingURL=slickpay.provider.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"slickpay.provider.d.ts","sourceRoot":"","sources":["../../src/providers/slickpay.provider.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,cAAc,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAA;AACjG,OAAO,EAAE,uBAAuB,EAAE,MAAM,8BAA8B,CAAA;AAGtE,MAAM,WAAW,cAAc;IAC7B,SAAS,EAAE,MAAM,CAAA;IACjB,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,wDAAwD;IACxD,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,8DAA8D;IAC9D,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,2DAA2D;IAC3D,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB;AAED,qBAAa,gBAAiB,SAAQ,uBAAuB;IAQ/C,OAAO,CAAC,MAAM;IAP1B,QAAQ,CAAC,IAAI,cAAa;IAC1B,QAAQ,CAAC,mBAAmB,WAAU;IACtC,QAAQ,CAAC,gBAAgB,WAAsB;IAE/C,OAAO,CAAC,OAAO,CAAQ;IACvB,OAAO,CAAC,WAAW,CAAQ;gBAEP,MAAM,EAAE,cAAc;IAQ1C,OAAO,CAAC,OAAO;IAQf,+DAA+D;IAC/D,OAAO,CAAC,eAAe;cAKP,UAAU,CAAC,MAAM,EAAE,cAAc,GAAG,OAAO,CAAC,cAAc,CAAC;IAqB3E,0DAA0D;IACpD,UAAU,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAM9D,+EAA+E;IAC/E,MAAM,CAAC,SAAS,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,MAAM;cASlC,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC;CAyBzF;AAED;;;;GAIG;AACH,wBAAgB,sBAAsB,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC,cAAc,CAAC,GAAG,gBAAgB,CAQzF"}
|
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
// @mostajs/payment — SlickPay provider (agrégateur Algérie : CIB + EDAHABIA via SATIM)
|
|
2
|
+
// Author: Dr Hamid MADANI <drmdh@msn.com>
|
|
3
|
+
// Ref: https://developers.slick-pay.com/ · SDK npm @slick-pay-algeria/slickpay-npm
|
|
4
|
+
//
|
|
5
|
+
// API v2 : auth par clé publique (Bearer), création d'« invoice » qui redirige le
|
|
6
|
+
// payeur vers la page de paiement, puis confirmation par interrogation du statut.
|
|
7
|
+
// Les chemins/URL sont PILOTABLES PAR ENV (corrigeables sans toucher au code, §10)
|
|
8
|
+
// — valeurs par défaut conformes à la doc v2, à confirmer en certification GIE.
|
|
9
|
+
import { AbstractPaymentProvider } from '../core/abstract-provider.js';
|
|
10
|
+
import { getEnv } from '@mostajs/config';
|
|
11
|
+
export class SlickPayProvider extends AbstractPaymentProvider {
|
|
12
|
+
config;
|
|
13
|
+
name = 'slickpay';
|
|
14
|
+
supportedCurrencies = ['DZD'];
|
|
15
|
+
supportedMethods = ['cib', 'edahabia'];
|
|
16
|
+
baseUrl;
|
|
17
|
+
invoicePath;
|
|
18
|
+
constructor(config) {
|
|
19
|
+
super();
|
|
20
|
+
this.config = config;
|
|
21
|
+
this.baseUrl = config.baseUrl ?? (config.testMode
|
|
22
|
+
? 'https://devapi.slick-pay.com/api/v2'
|
|
23
|
+
: 'https://prodapi.slick-pay.com/api/v2');
|
|
24
|
+
this.invoicePath = config.invoicePath ?? '/users/invoices';
|
|
25
|
+
}
|
|
26
|
+
headers() {
|
|
27
|
+
return {
|
|
28
|
+
'Authorization': `Bearer ${this.config.publicKey}`,
|
|
29
|
+
'Content-Type': 'application/json',
|
|
30
|
+
'Accept': 'application/json',
|
|
31
|
+
};
|
|
32
|
+
}
|
|
33
|
+
/** URL de retour avec orderId propagé (matching au retour). */
|
|
34
|
+
returnWithOrder(url, orderId) {
|
|
35
|
+
const sep = url.includes('?') ? '&' : '?';
|
|
36
|
+
return `${url}${sep}orderId=${encodeURIComponent(orderId)}`;
|
|
37
|
+
}
|
|
38
|
+
async doCheckout(params) {
|
|
39
|
+
const url = this.returnWithOrder(params.successUrl ?? this.config.returnUrl ?? '/', params.orderId);
|
|
40
|
+
const res = await fetch(`${this.baseUrl}${this.invoicePath}`, {
|
|
41
|
+
method: 'POST',
|
|
42
|
+
headers: this.headers(),
|
|
43
|
+
body: JSON.stringify({
|
|
44
|
+
amount: params.amount, // DZD (montant réel, pas centimes)
|
|
45
|
+
url, // retour navigateur après paiement
|
|
46
|
+
webhook_url: params.webhookUrl, // notification serveur (si supporté)
|
|
47
|
+
note: params.description ?? `Commande ${params.orderId}`,
|
|
48
|
+
}),
|
|
49
|
+
});
|
|
50
|
+
if (!res.ok) {
|
|
51
|
+
const err = await res.json().catch(() => ({}));
|
|
52
|
+
throw new Error(`[slickpay] Checkout failed: ${err.message ?? res.statusText}`);
|
|
53
|
+
}
|
|
54
|
+
const data = await res.json();
|
|
55
|
+
// v2 : { success, url|redirect_url, id }
|
|
56
|
+
return { url: data.url ?? data.redirect_url ?? null, sessionId: String(data.id ?? data.uuid ?? '') };
|
|
57
|
+
}
|
|
58
|
+
/** Statut d'une invoice par id (confirmation serveur). */
|
|
59
|
+
async getInvoice(id) {
|
|
60
|
+
const res = await fetch(`${this.baseUrl}${this.invoicePath}/${id}`, { headers: this.headers() });
|
|
61
|
+
if (!res.ok)
|
|
62
|
+
throw new Error(`[slickpay] Get invoice failed: ${res.statusText}`);
|
|
63
|
+
return res.json();
|
|
64
|
+
}
|
|
65
|
+
/** Mappe un statut SlickPay vers un type d'event normalisé (pur, testable). */
|
|
66
|
+
static mapStatus(raw) {
|
|
67
|
+
const v = raw?.completed ?? raw?.status ?? raw?.state;
|
|
68
|
+
const s = String(v).toLowerCase();
|
|
69
|
+
if (v === 1 || v === true || s === 'completed' || s === 'paid' || s === 'success')
|
|
70
|
+
return 'payment.success';
|
|
71
|
+
if (s === 'failed' || s === 'cancelled' || s === 'canceled' || s === 'declined')
|
|
72
|
+
return 'payment.failed';
|
|
73
|
+
if (s === 'refunded')
|
|
74
|
+
return 'payment.refunded';
|
|
75
|
+
return 'payment.pending';
|
|
76
|
+
}
|
|
77
|
+
async doVerifyWebhook(body, _signature) {
|
|
78
|
+
// SlickPay : confirmation par retour + interrogation statut (pas de HMAC).
|
|
79
|
+
// Accepte un JSON déjà résolu ({orderId,status/completed} — testable hors-ligne)
|
|
80
|
+
// ou un JSON {id} → interrogation API.
|
|
81
|
+
let raw = {};
|
|
82
|
+
try {
|
|
83
|
+
raw = JSON.parse(body);
|
|
84
|
+
}
|
|
85
|
+
catch {
|
|
86
|
+
raw = Object.fromEntries(new URLSearchParams(body));
|
|
87
|
+
}
|
|
88
|
+
let status = raw;
|
|
89
|
+
const id = raw.id ?? raw.invoice ?? raw.uuid;
|
|
90
|
+
if (raw.completed === undefined && raw.status === undefined && raw.state === undefined && id) {
|
|
91
|
+
status = await this.getInvoice(String(id));
|
|
92
|
+
status = status.data ?? status;
|
|
93
|
+
}
|
|
94
|
+
return {
|
|
95
|
+
type: SlickPayProvider.mapStatus(status),
|
|
96
|
+
data: {
|
|
97
|
+
orderId: raw.orderId ?? status.orderId ?? status.merchant_order_id,
|
|
98
|
+
invoiceId: id ?? status.id,
|
|
99
|
+
amount: status.amount,
|
|
100
|
+
currency: 'DZD',
|
|
101
|
+
status: status.completed ?? status.status ?? status.state,
|
|
102
|
+
},
|
|
103
|
+
raw: status,
|
|
104
|
+
};
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
/**
|
|
108
|
+
* Crée un provider SlickPay depuis l'environnement (cascade @mostajs/config).
|
|
109
|
+
* Env : SLICKPAY_PUBLIC_KEY, SLICKPAY_TEST_MODE, SLICKPAY_BASE_URL,
|
|
110
|
+
* SLICKPAY_INVOICE_PATH, SLICKPAY_RETURN_URL.
|
|
111
|
+
*/
|
|
112
|
+
export function createSlickPayProvider(config) {
|
|
113
|
+
return new SlickPayProvider({
|
|
114
|
+
publicKey: config?.publicKey ?? getEnv('SLICKPAY_PUBLIC_KEY', ''),
|
|
115
|
+
testMode: config?.testMode ?? getEnv('SLICKPAY_TEST_MODE') !== 'false',
|
|
116
|
+
baseUrl: config?.baseUrl ?? getEnv('SLICKPAY_BASE_URL'),
|
|
117
|
+
invoicePath: config?.invoicePath ?? getEnv('SLICKPAY_INVOICE_PATH'),
|
|
118
|
+
returnUrl: config?.returnUrl ?? getEnv('SLICKPAY_RETURN_URL', '/payment/success'),
|
|
119
|
+
});
|
|
120
|
+
}
|
|
121
|
+
//# sourceMappingURL=slickpay.provider.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"slickpay.provider.js","sourceRoot":"","sources":["../../src/providers/slickpay.provider.ts"],"names":[],"mappings":"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"}
|
package/dist/server.d.ts
CHANGED
|
@@ -15,6 +15,10 @@ export { StripeProvider, createStripeProvider } from './providers/stripe.provide
|
|
|
15
15
|
export type { StripeConfig } from './providers/stripe.provider.js';
|
|
16
16
|
export { ManualProvider, createManualProvider } from './providers/manual.provider.js';
|
|
17
17
|
export type { ManualConfig } from './providers/manual.provider.js';
|
|
18
|
+
export { SlickPayProvider, createSlickPayProvider } from './providers/slickpay.provider.js';
|
|
19
|
+
export type { SlickPayConfig } from './providers/slickpay.provider.js';
|
|
20
|
+
export { GuiddiniProvider, createGuiddiniProvider } from './providers/guiddini.provider.js';
|
|
21
|
+
export type { GuiddiniConfig } from './providers/guiddini.provider.js';
|
|
18
22
|
export { createStripeClient, createCheckoutSession, handleWebhook, createBillingSession, createPortalSession, handleBillingWebhook, } from './lib/stripe.js';
|
|
19
23
|
export type { WebhookHandlers } from './lib/stripe.js';
|
|
20
24
|
export { getPaymentRepo, resetPaymentRepo } from './lib/payment-factory.js';
|
package/dist/server.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAIA,YAAY,EACV,eAAe,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAC/D,kBAAkB,EAAE,kBAAkB,EAAE,YAAY,EAAE,YAAY,EAClE,aAAa,EAAE,YAAY,GAC5B,MAAM,8BAA8B,CAAA;AAErC,OAAO,EACL,gBAAgB,EAAE,kBAAkB,EAAE,WAAW,EACjD,aAAa,EAAE,sBAAsB,EAAE,cAAc,GACtD,MAAM,0BAA0B,CAAA;AAGjC,OAAO,EAAE,uBAAuB,EAAE,MAAM,6BAA6B,CAAA;AAGrE,OAAO,EACL,qBAAqB,EAAE,wBAAwB,GAChD,MAAM,4BAA4B,CAAA;AACnC,YAAY,EACV,mBAAmB,EAAE,oBAAoB,EACzC,kBAAkB,EAAE,mBAAmB,GACxC,MAAM,4BAA4B,CAAA;AAGnC,OAAO,EACL,wBAAwB,EAAE,sBAAsB,EAAE,qBAAqB,GACxE,MAAM,yBAAyB,CAAA;AAChC,YAAY,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAA;AAGlE,OAAO,EAAE,aAAa,EAAE,mBAAmB,EAAE,MAAM,+BAA+B,CAAA;AAClF,YAAY,EAAE,WAAW,EAAE,MAAM,+BAA+B,CAAA;AAEhE,OAAO,EAAE,gBAAgB,EAAE,sBAAsB,EAAE,MAAM,kCAAkC,CAAA;AAC3F,YAAY,EAAE,cAAc,EAAE,MAAM,kCAAkC,CAAA;AAEtE,OAAO,EAAE,cAAc,EAAE,oBAAoB,EAAE,MAAM,gCAAgC,CAAA;AACrF,YAAY,EAAE,YAAY,EAAE,MAAM,gCAAgC,CAAA;AAElE,OAAO,EAAE,cAAc,EAAE,oBAAoB,EAAE,MAAM,gCAAgC,CAAA;AACrF,YAAY,EAAE,YAAY,EAAE,MAAM,gCAAgC,CAAA;AAElE,OAAO,EAAE,cAAc,EAAE,oBAAoB,EAAE,MAAM,gCAAgC,CAAA;AACrF,YAAY,EAAE,YAAY,EAAE,MAAM,gCAAgC,CAAA;AAGlE,OAAO,EACL,kBAAkB,EAAE,qBAAqB,EAAE,aAAa,EACxD,oBAAoB,EAAE,mBAAmB,EAAE,oBAAoB,GAChE,MAAM,iBAAiB,CAAA;AACxB,YAAY,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAA;AAGtD,OAAO,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAA;AAG3E,OAAO,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAA;AAC/D,OAAO,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAA;AAG/D,OAAO,EACL,qBAAqB,EACrB,mBAAmB,EACnB,iBAAiB,EACjB,WAAW,EACX,aAAa,EACb,eAAe,EACf,cAAc,EACd,eAAe,EACf,eAAe,EACf,sBAAsB,EACtB,oBAAoB,GACrB,MAAM,0BAA0B,CAAA;AACjC,YAAY,EACV,YAAY,EACZ,yBAAyB,EACzB,2BAA2B,GAC5B,MAAM,0BAA0B,CAAA;AAGjC,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAA;AAC7D,OAAO,EAAE,yBAAyB,EAAE,MAAM,eAAe,CAAA"}
|
|
1
|
+
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAIA,YAAY,EACV,eAAe,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAC/D,kBAAkB,EAAE,kBAAkB,EAAE,YAAY,EAAE,YAAY,EAClE,aAAa,EAAE,YAAY,GAC5B,MAAM,8BAA8B,CAAA;AAErC,OAAO,EACL,gBAAgB,EAAE,kBAAkB,EAAE,WAAW,EACjD,aAAa,EAAE,sBAAsB,EAAE,cAAc,GACtD,MAAM,0BAA0B,CAAA;AAGjC,OAAO,EAAE,uBAAuB,EAAE,MAAM,6BAA6B,CAAA;AAGrE,OAAO,EACL,qBAAqB,EAAE,wBAAwB,GAChD,MAAM,4BAA4B,CAAA;AACnC,YAAY,EACV,mBAAmB,EAAE,oBAAoB,EACzC,kBAAkB,EAAE,mBAAmB,GACxC,MAAM,4BAA4B,CAAA;AAGnC,OAAO,EACL,wBAAwB,EAAE,sBAAsB,EAAE,qBAAqB,GACxE,MAAM,yBAAyB,CAAA;AAChC,YAAY,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAA;AAGlE,OAAO,EAAE,aAAa,EAAE,mBAAmB,EAAE,MAAM,+BAA+B,CAAA;AAClF,YAAY,EAAE,WAAW,EAAE,MAAM,+BAA+B,CAAA;AAEhE,OAAO,EAAE,gBAAgB,EAAE,sBAAsB,EAAE,MAAM,kCAAkC,CAAA;AAC3F,YAAY,EAAE,cAAc,EAAE,MAAM,kCAAkC,CAAA;AAEtE,OAAO,EAAE,cAAc,EAAE,oBAAoB,EAAE,MAAM,gCAAgC,CAAA;AACrF,YAAY,EAAE,YAAY,EAAE,MAAM,gCAAgC,CAAA;AAElE,OAAO,EAAE,cAAc,EAAE,oBAAoB,EAAE,MAAM,gCAAgC,CAAA;AACrF,YAAY,EAAE,YAAY,EAAE,MAAM,gCAAgC,CAAA;AAElE,OAAO,EAAE,cAAc,EAAE,oBAAoB,EAAE,MAAM,gCAAgC,CAAA;AACrF,YAAY,EAAE,YAAY,EAAE,MAAM,gCAAgC,CAAA;AAGlE,OAAO,EAAE,gBAAgB,EAAE,sBAAsB,EAAE,MAAM,kCAAkC,CAAA;AAC3F,YAAY,EAAE,cAAc,EAAE,MAAM,kCAAkC,CAAA;AAEtE,OAAO,EAAE,gBAAgB,EAAE,sBAAsB,EAAE,MAAM,kCAAkC,CAAA;AAC3F,YAAY,EAAE,cAAc,EAAE,MAAM,kCAAkC,CAAA;AAGtE,OAAO,EACL,kBAAkB,EAAE,qBAAqB,EAAE,aAAa,EACxD,oBAAoB,EAAE,mBAAmB,EAAE,oBAAoB,GAChE,MAAM,iBAAiB,CAAA;AACxB,YAAY,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAA;AAGtD,OAAO,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAA;AAG3E,OAAO,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAA;AAC/D,OAAO,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAA;AAG/D,OAAO,EACL,qBAAqB,EACrB,mBAAmB,EACnB,iBAAiB,EACjB,WAAW,EACX,aAAa,EACb,eAAe,EACf,cAAc,EACd,eAAe,EACf,eAAe,EACf,sBAAsB,EACtB,oBAAoB,GACrB,MAAM,0BAA0B,CAAA;AACjC,YAAY,EACV,YAAY,EACZ,yBAAyB,EACzB,2BAA2B,GAC5B,MAAM,0BAA0B,CAAA;AAGjC,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAA;AAC7D,OAAO,EAAE,yBAAyB,EAAE,MAAM,eAAe,CAAA"}
|
package/dist/server.js
CHANGED
|
@@ -13,6 +13,9 @@ export { ChargilyProvider, createChargilyProvider } from './providers/chargily.p
|
|
|
13
13
|
export { PayPalProvider, createPayPalProvider } from './providers/paypal.provider.js';
|
|
14
14
|
export { StripeProvider, createStripeProvider } from './providers/stripe.provider.js';
|
|
15
15
|
export { ManualProvider, createManualProvider } from './providers/manual.provider.js';
|
|
16
|
+
// Agrégateurs Algérie (CIB/EDAHABIA via SATIM) — v0.7
|
|
17
|
+
export { SlickPayProvider, createSlickPayProvider } from './providers/slickpay.provider.js';
|
|
18
|
+
export { GuiddiniProvider, createGuiddiniProvider } from './providers/guiddini.provider.js';
|
|
16
19
|
// ─── Legacy Stripe functions (backward compat) ─
|
|
17
20
|
export { createStripeClient, createCheckoutSession, handleWebhook, createBillingSession, createPortalSession, handleBillingWebhook, } from './lib/stripe.js';
|
|
18
21
|
// ─── Repository ─────────────────────────────────
|
package/dist/server.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA,8CAA8C;AAC9C,wCAAwC;AASxC,OAAO,EACL,gBAAgB,EAAE,kBAAkB,EAAE,WAAW,EACjD,aAAa,EAAE,sBAAsB,EAAE,cAAc,GACtD,MAAM,0BAA0B,CAAA;AAEjC,4EAA4E;AAC5E,OAAO,EAAE,uBAAuB,EAAE,MAAM,6BAA6B,CAAA;AAErE,4DAA4D;AAC5D,OAAO,EACL,qBAAqB,EAAE,wBAAwB,GAChD,MAAM,4BAA4B,CAAA;AAMnC,qEAAqE;AACrE,OAAO,EACL,wBAAwB,EAAE,sBAAsB,EAAE,qBAAqB,GACxE,MAAM,yBAAyB,CAAA;AAGhC,mDAAmD;AACnD,OAAO,EAAE,aAAa,EAAE,mBAAmB,EAAE,MAAM,+BAA+B,CAAA;AAGlF,OAAO,EAAE,gBAAgB,EAAE,sBAAsB,EAAE,MAAM,kCAAkC,CAAA;AAG3F,OAAO,EAAE,cAAc,EAAE,oBAAoB,EAAE,MAAM,gCAAgC,CAAA;AAGrF,OAAO,EAAE,cAAc,EAAE,oBAAoB,EAAE,MAAM,gCAAgC,CAAA;AAGrF,OAAO,EAAE,cAAc,EAAE,oBAAoB,EAAE,MAAM,gCAAgC,CAAA;AAGrF,kDAAkD;AAClD,OAAO,EACL,kBAAkB,EAAE,qBAAqB,EAAE,aAAa,EACxD,oBAAoB,EAAE,mBAAmB,EAAE,oBAAoB,GAChE,MAAM,iBAAiB,CAAA;AAGxB,mDAAmD;AACnD,OAAO,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAA;AAE3E,mDAAmD;AACnD,OAAO,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAA;AAC/D,OAAO,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAA;AAE/D,wDAAwD;AACxD,OAAO,EACL,qBAAqB,EACrB,mBAAmB,EACnB,iBAAiB,EACjB,WAAW,EACX,aAAa,EACb,eAAe,EACf,cAAc,EACd,eAAe,EACf,eAAe,EACf,sBAAsB,EACtB,oBAAoB,GACrB,MAAM,0BAA0B,CAAA;AAOjC,mDAAmD;AACnD,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAA;AAC7D,OAAO,EAAE,yBAAyB,EAAE,MAAM,eAAe,CAAA"}
|
|
1
|
+
{"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA,8CAA8C;AAC9C,wCAAwC;AASxC,OAAO,EACL,gBAAgB,EAAE,kBAAkB,EAAE,WAAW,EACjD,aAAa,EAAE,sBAAsB,EAAE,cAAc,GACtD,MAAM,0BAA0B,CAAA;AAEjC,4EAA4E;AAC5E,OAAO,EAAE,uBAAuB,EAAE,MAAM,6BAA6B,CAAA;AAErE,4DAA4D;AAC5D,OAAO,EACL,qBAAqB,EAAE,wBAAwB,GAChD,MAAM,4BAA4B,CAAA;AAMnC,qEAAqE;AACrE,OAAO,EACL,wBAAwB,EAAE,sBAAsB,EAAE,qBAAqB,GACxE,MAAM,yBAAyB,CAAA;AAGhC,mDAAmD;AACnD,OAAO,EAAE,aAAa,EAAE,mBAAmB,EAAE,MAAM,+BAA+B,CAAA;AAGlF,OAAO,EAAE,gBAAgB,EAAE,sBAAsB,EAAE,MAAM,kCAAkC,CAAA;AAG3F,OAAO,EAAE,cAAc,EAAE,oBAAoB,EAAE,MAAM,gCAAgC,CAAA;AAGrF,OAAO,EAAE,cAAc,EAAE,oBAAoB,EAAE,MAAM,gCAAgC,CAAA;AAGrF,OAAO,EAAE,cAAc,EAAE,oBAAoB,EAAE,MAAM,gCAAgC,CAAA;AAGrF,sDAAsD;AACtD,OAAO,EAAE,gBAAgB,EAAE,sBAAsB,EAAE,MAAM,kCAAkC,CAAA;AAG3F,OAAO,EAAE,gBAAgB,EAAE,sBAAsB,EAAE,MAAM,kCAAkC,CAAA;AAG3F,kDAAkD;AAClD,OAAO,EACL,kBAAkB,EAAE,qBAAqB,EAAE,aAAa,EACxD,oBAAoB,EAAE,mBAAmB,EAAE,oBAAoB,GAChE,MAAM,iBAAiB,CAAA;AAGxB,mDAAmD;AACnD,OAAO,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAA;AAE3E,mDAAmD;AACnD,OAAO,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAA;AAC/D,OAAO,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAA;AAE/D,wDAAwD;AACxD,OAAO,EACL,qBAAqB,EACrB,mBAAmB,EACnB,iBAAiB,EACjB,WAAW,EACX,aAAa,EACb,eAAe,EACf,cAAc,EACd,eAAe,EACf,eAAe,EACf,sBAAsB,EACtB,oBAAoB,GACrB,MAAM,0BAA0B,CAAA;AAOjC,mDAAmD;AACnD,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAA;AAC7D,OAAO,EAAE,yBAAyB,EAAE,MAAM,eAAe,CAAA"}
|
package/llms.txt
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
# @mostajs/payment — fiche LLM
|
|
2
2
|
> Module de paiement multi-provider (Stripe, Satim/CIB, Chargily, PayPal, Manuel), multi-méthode, multi-devise.
|
|
3
3
|
|
|
4
|
-
- Version: 0.
|
|
4
|
+
- Version: 0.7.0 · Licence: AGPL-3.0-or-later · Auteur: Dr Hamid MADANI <drmdh@msn.com>
|
|
5
5
|
- Chemin: mostajs/mosta-payment · Statut audit: complet (dist/)
|
|
6
6
|
|
|
7
7
|
## RÔLE
|
|
8
|
-
Abstraction unifiée du paiement pour l'écosystème `@mostajs/*`. Un contrat `PaymentProvider` commun couvre
|
|
8
|
+
Abstraction unifiée du paiement pour l'écosystème `@mostajs/*`. Un contrat `PaymentProvider` commun couvre **7 dialectes** (Stripe, Satim, Chargily, PayPal, Manuel, **SlickPay**, **Guiddini**). Fournit checkout, webhooks normalisés, billing/abonnements (Stripe), schéma ORM `Payment`, composant React `PaymentPage` et handlers de routes Next.js App Router. Sélection automatique du provider par devise (DZD → Chargily par défaut, autres → Stripe ; cibler SATIM/SlickPay/Guiddini via `providerName`).
|
|
9
9
|
|
|
10
10
|
## MODÈLE DIALECTE (v0.6) — calqué sur @mostajs/orm
|
|
11
11
|
Chaque **fournisseur = un dialecte de paiement**, exactement comme un dialecte ORM :
|
|
@@ -30,7 +30,7 @@ Entrée `@mostajs/payment/server` (serveur uniquement) :
|
|
|
30
30
|
- Dialecte base (v0.6): `AbstractPaymentProvider` (classe abstraite — étendue par les 5 providers)
|
|
31
31
|
- Orchestration (v0.6): `createPaymentCheckout(input)`, `settlePaymentFromWebhook(input)` + types `CreateCheckoutInput`/`CreateCheckoutOutput`/`SettleWebhookInput`/`SettleWebhookOutput`
|
|
32
32
|
- Auto-enregistrement (v0.5.4+): `registerProvidersFromEnv(opts?)`, `ensureProvidersFromEnv(opts?)`, `resetEnsuredProviders()` + type `AutoRegisterOptions`
|
|
33
|
-
- Providers (classes + factories env): `StripeProvider`/`createStripeProvider`, `SatimProvider`/`createSatimProvider`, `ChargilyProvider`/`createChargilyProvider`, `PayPalProvider`/`createPayPalProvider`, `ManualProvider`/`createManualProvider`
|
|
33
|
+
- Providers/dialectes (classes + factories env): `StripeProvider`/`createStripeProvider`, `SatimProvider`/`createSatimProvider`, `ChargilyProvider`/`createChargilyProvider`, `PayPalProvider`/`createPayPalProvider`, `ManualProvider`/`createManualProvider`, **`SlickPayProvider`/`createSlickPayProvider`**, **`GuiddiniProvider`/`createGuiddiniProvider`** (+ configs `SlickPayConfig`/`GuiddiniConfig`). SATIM expose `getOrderStatusExtended` + statique `mapOrderStatus(code)` ; SlickPay/Guiddini exposent `mapStatus(raw)`.
|
|
34
34
|
- Stripe bas niveau: `createStripeClient`, `createCheckoutSession`, `handleWebhook`, `createBillingSession`, `createPortalSession`, `handleBillingWebhook`
|
|
35
35
|
- Webhook helpers: `handleProviderWebhook`, `pickSignatureHeader`, `getProviderByName`, `isPaidEvent`, `isFailedEvent`, `isRefundedEvent`, `extractOrderId`, `pickProviderByCurrency`, `isKnownProvider`, constantes `KNOWN_PROVIDERS`, `CURRENCY_TO_PROVIDER`
|
|
36
36
|
- Repo: `getPaymentRepo`, `resetPaymentRepo`
|
|
@@ -57,7 +57,7 @@ Interface `PaymentProvider` : `name`, `supportedCurrencies`, `supportedMethods`,
|
|
|
57
57
|
## TYPES CLÉS
|
|
58
58
|
- `PaymentStatus = 'pending'|'paid'|'refunded'|'failed'`
|
|
59
59
|
- `PaymentMethodType = 'card'|'transfer'|'cash'|'tpe'`
|
|
60
|
-
- `ProviderName = 'chargily'|'stripe'|'satim'|'paypal'|'manual'`
|
|
60
|
+
- `ProviderName = 'chargily'|'stripe'|'satim'|'paypal'|'manual'|'slickpay'|'guiddini'`
|
|
61
61
|
- `PaymentConfig { currency: string; defaultCurrency?; stripeSecretKey?; stripePublicKey?; stripeWebhookSecret?; successUrlTemplate: string; cancelUrlTemplate: string; methods?: PaymentMethodType[]; bankInfo?: { rib; bankName; holder } }` — templates avec `{orderId}` substitué
|
|
62
62
|
- `LineItem { name; description?; unitAmount: number; quantity: number }` — unitAmount en unités de base (PAS en centimes)
|
|
63
63
|
- `CheckoutRequest { orderId; lineItems: LineItem[]; currency?; returnUrl?; metadata? }`
|
|
@@ -110,6 +110,7 @@ if (s.status === 'paid') { /* activer la campagne sponsor (métier) */ }
|
|
|
110
110
|
- Sélection devise : `CURRENCY_TO_PROVIDER` mappe DZD → Chargily, le reste → Stripe ; pour CIB-only Algérie sans Chargily, passer `fallback` à `pickProviderByCurrency`.
|
|
111
111
|
- Les factories `create*Provider` lisent l'env en fallback (cascade `@mostajs/config`) ; defaults testMode : Chargily test-on (`!== 'false'`), Satim test-off (`=== 'true'`), PayPal test-on.
|
|
112
112
|
- `ChargilyProvider` : préférer `CHARGILY_SECRET_KEY` ; `CHARGILY_API_KEY` est un alias legacy.
|
|
113
|
+
- **Dialectes DZ (v0.7)** : `SatimProvider` (acquéreur direct, codes BPC OrderStatus, matching par `OrderNumber`), `SlickPayProvider` (env `SLICKPAY_PUBLIC_KEY` + base/chemins `SLICKPAY_BASE_URL`/`_INVOICE_PATH`), `GuiddiniProvider` (env `GUIDDINI_APP_KEY`/`_APP_SECRET` + `GUIDDINI_BASE_URL`/`_INITIATE_PATH`/`_STATUS_PATH`). DZD partagé : par défaut → Chargily ; cibler SATIM/SlickPay/Guiddini via `providerName` (ou ordre/`setDefault`). Confirmation par retour+statut (pas de HMAC) ; chemins SlickPay/Guiddini provisoires, pilotés par env, à confirmer en certification GIE.
|
|
113
114
|
- `getPaymentRepo` met en cache via WeakMap par identité de dialect — un changement de dialect reconstruit le repo ; `resetPaymentRepo` est un no-op de rétro-compat.
|
|
114
115
|
- Méthodes optionnelles de `PaymentProvider` (subscriptions, refunds…) : seul Stripe les implémente toutes ; vérifier la présence avant appel sur Satim/Chargily/Manual.
|
|
115
116
|
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@mostajs/payment",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.7.0",
|
|
4
4
|
"description": "Payment module for @mostajs — Multi-provider (Stripe, Satim/CIB, Chargily, PayPal), multi-method, multi-currency",
|
|
5
5
|
"author": "Dr Hamid MADANI <drmdh@msn.com>",
|
|
6
6
|
"license": "AGPL-3.0-or-later",
|