tupay 0.5.2 → 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/README.md +6 -2
- package/dist/cjs/errors.d.ts +39 -2
- package/dist/cjs/errors.d.ts.map +1 -1
- package/dist/cjs/errors.js +55 -4
- package/dist/cjs/errors.js.map +1 -1
- package/dist/cjs/index.d.ts +1 -1
- package/dist/cjs/index.d.ts.map +1 -1
- package/dist/cjs/index.js +2 -1
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/resources/events.d.ts +1 -1
- package/dist/cjs/resources/events.d.ts.map +1 -1
- package/dist/cjs/resources/events.js +7 -1
- package/dist/cjs/resources/events.js.map +1 -1
- package/dist/cjs/resources/payment-links.d.ts +14 -4
- package/dist/cjs/resources/payment-links.d.ts.map +1 -1
- package/dist/cjs/resources/payment-links.js +12 -4
- package/dist/cjs/resources/payment-links.js.map +1 -1
- package/dist/cjs/resources/test-helpers.d.ts +1 -1
- package/dist/cjs/resources/test-helpers.d.ts.map +1 -1
- package/dist/cjs/resources/test-helpers.js +5 -1
- package/dist/cjs/resources/test-helpers.js.map +1 -1
- package/dist/cjs/resources/webhook-endpoints.d.ts +14 -0
- package/dist/cjs/resources/webhook-endpoints.d.ts.map +1 -1
- package/dist/cjs/resources/webhook-endpoints.js +3 -1
- package/dist/cjs/resources/webhook-endpoints.js.map +1 -1
- package/dist/esm/errors.d.ts +39 -2
- package/dist/esm/errors.d.ts.map +1 -1
- package/dist/esm/errors.js +53 -3
- package/dist/esm/errors.js.map +1 -1
- package/dist/esm/index.d.ts +1 -1
- package/dist/esm/index.d.ts.map +1 -1
- package/dist/esm/index.js +1 -1
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/resources/events.d.ts +1 -1
- package/dist/esm/resources/events.d.ts.map +1 -1
- package/dist/esm/resources/events.js +7 -1
- package/dist/esm/resources/events.js.map +1 -1
- package/dist/esm/resources/payment-links.d.ts +14 -4
- package/dist/esm/resources/payment-links.d.ts.map +1 -1
- package/dist/esm/resources/payment-links.js +12 -4
- package/dist/esm/resources/payment-links.js.map +1 -1
- package/dist/esm/resources/test-helpers.d.ts +1 -1
- package/dist/esm/resources/test-helpers.d.ts.map +1 -1
- package/dist/esm/resources/test-helpers.js +5 -1
- package/dist/esm/resources/test-helpers.js.map +1 -1
- package/dist/esm/resources/webhook-endpoints.d.ts +14 -0
- package/dist/esm/resources/webhook-endpoints.d.ts.map +1 -1
- package/dist/esm/resources/webhook-endpoints.js +3 -1
- package/dist/esm/resources/webhook-endpoints.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -220,7 +220,7 @@ tx.refundedAmountXpf // 1500 ← c'est ce champ qui fait foi
|
|
|
220
220
|
|
|
221
221
|
## Idempotence et reprises
|
|
222
222
|
|
|
223
|
-
Le SDK génère une clé d'idempotence (UUID v4) sur `paymentIntents.create` et `
|
|
223
|
+
Le SDK génère une clé d'idempotence (UUID v4) sur `paymentIntents.create`, `refunds.create` et `paymentLinks.create`. Une reprise après timeout ne débitera jamais deux fois, et ne créera pas un second lien.
|
|
224
224
|
|
|
225
225
|
Fournissez la vôtre pour qu'un retry applicatif ultérieur retombe sur le même résultat :
|
|
226
226
|
|
|
@@ -232,7 +232,11 @@ await tupay.paymentIntents.create({
|
|
|
232
232
|
})
|
|
233
233
|
```
|
|
234
234
|
|
|
235
|
-
**Politique de reprise :** le SDK retente sur 429, 5xx et pannes réseau, avec backoff exponentiel et gigue (`Retry-After` respecté). Il ne retente **que** les GET et les écritures porteuses d'une clé d'idempotence
|
|
235
|
+
**Politique de reprise :** le SDK retente sur 429, 5xx et pannes réseau, avec backoff exponentiel et gigue (`Retry-After` respecté). Il ne retente **que** les GET et les écritures porteuses d'une clé d'idempotence.
|
|
236
|
+
|
|
237
|
+
**Deux créations n'en portent pas, à dessein :** `webhookEndpoints.create` et la création de clé API rendent un secret **une seule fois**, et l'API ne le conserve pas avec le corps mémorisé. Une reprise sous clé rendrait donc la ressource avec son secret à `null`, c'est-à-dire un endpoint que vous ne pourriez pas signer. Sans clé, une reprise crée une seconde ressource dont le secret est lisible, et vous supprimez la première. Fournissez `idempotencyKey` si vous préférez l'inverse, en connaissance de cause.
|
|
238
|
+
|
|
239
|
+
**Refus possibles.** Rejouer une clé avec un corps différent rend `409 idempotency_key_reuse` : ni l'ancien corps n'est rendu, ni le nouveau exécuté, choisissez une nouvelle clé. Une seconde requête arrivant pendant que la première s'exécute rend `409 idempotency_in_progress` : retentez à l'identique dans un instant. Les clés vivent **24 heures** ; passé ce délai, rejouer crée une nouvelle ressource.
|
|
236
240
|
|
|
237
241
|
```ts
|
|
238
242
|
new Tupay(key, { maxRetries: 0, timeout: 5000 })
|
package/dist/cjs/errors.d.ts
CHANGED
|
@@ -7,9 +7,19 @@
|
|
|
7
7
|
* `code` est le code machine renvoyé par l'API (`validation_error`,
|
|
8
8
|
* `livemode_mismatch`, …). C'est lui qu'il faut tester — le `message`
|
|
9
9
|
* est en français, destiné à un humain, et peut changer sans préavis.
|
|
10
|
+
*
|
|
11
|
+
* `type` est la CLASSE de l'erreur : `invalid_request`, `authentication`,
|
|
12
|
+
* `permission`, `not_found`, `conflict`, `idempotency`, `rate_limit`,
|
|
13
|
+
* `provider`, `api`. Elle permet de traiter une famille entière sans
|
|
14
|
+
* énumérer chaque code, et c'est elle qui choisit la sous-classe
|
|
15
|
+
* ci-dessous. Retirer ou renommer un code est un changement cassant,
|
|
16
|
+
* réservé à une version datée ; en ajouter un ne l'est pas, et un code
|
|
17
|
+
* inconnu se traite par sa classe.
|
|
10
18
|
*/
|
|
11
19
|
export interface TupayErrorOptions {
|
|
12
20
|
code: string;
|
|
21
|
+
/** Classe d'erreur. Absente sur une API antérieure à la story 2.4. */
|
|
22
|
+
type?: string;
|
|
13
23
|
statusCode?: number;
|
|
14
24
|
requestId?: string;
|
|
15
25
|
cause?: unknown;
|
|
@@ -17,6 +27,8 @@ export interface TupayErrorOptions {
|
|
|
17
27
|
export declare class TupayError extends Error {
|
|
18
28
|
/** Code machine stable renvoyé par l'API. */
|
|
19
29
|
readonly code: string;
|
|
30
|
+
/** Classe d'erreur. `undefined` si l'API ne l'a pas renvoyée. */
|
|
31
|
+
readonly type?: string;
|
|
20
32
|
/** Statut HTTP, absent si l'erreur est survenue avant toute réponse. */
|
|
21
33
|
readonly statusCode?: number;
|
|
22
34
|
/** Identifiant de requête, à citer au support. */
|
|
@@ -35,9 +47,23 @@ export declare class TupayNotFoundError extends TupayError {
|
|
|
35
47
|
/** 400 / 422 — corps de requête invalide. */
|
|
36
48
|
export declare class TupayValidationError extends TupayError {
|
|
37
49
|
}
|
|
38
|
-
/** 409 — état incompatible (déjà remboursé,
|
|
50
|
+
/** 409 / 422 — état incompatible (déjà remboursé, plafond atteint). */
|
|
39
51
|
export declare class TupayConflictError extends TupayError {
|
|
40
52
|
}
|
|
53
|
+
/**
|
|
54
|
+
* 409 — le refus porte sur la clé d'idempotence, pas sur la requête.
|
|
55
|
+
*
|
|
56
|
+
* Hérite de `TupayConflictError` à dessein : ces deux codes sortaient
|
|
57
|
+
* déjà en 409, et tout `catch (err) { if (err instanceof
|
|
58
|
+
* TupayConflictError) }` existant doit continuer de les attraper. La
|
|
59
|
+
* sous-classe ajoute de la précision, elle n'en retire pas.
|
|
60
|
+
*
|
|
61
|
+
* `code` distingue les deux reprises, et elles sont opposées :
|
|
62
|
+
* `idempotency_key_reuse` → changez de clé, celle-ci a servi ailleurs
|
|
63
|
+
* `idempotency_in_progress` → retentez LE MÊME appel dans un instant
|
|
64
|
+
*/
|
|
65
|
+
export declare class TupayIdempotencyError extends TupayConflictError {
|
|
66
|
+
}
|
|
41
67
|
/** 429 — 100 req/min par marchand dépassées. */
|
|
42
68
|
export declare class TupayRateLimitError extends TupayError {
|
|
43
69
|
}
|
|
@@ -57,10 +83,21 @@ export declare class TupaySignatureVerificationError extends TupayError {
|
|
|
57
83
|
}
|
|
58
84
|
/**
|
|
59
85
|
* Construit l'erreur typée correspondant à une réponse HTTP.
|
|
60
|
-
*
|
|
86
|
+
*
|
|
87
|
+
* ── `type` d'abord, statut ensuite ─────────────────────────────────
|
|
88
|
+
* Le choix se faisait sur le seul statut HTTP. C'est une règle de forme,
|
|
89
|
+
* et elle se trompait : un 422 `limit_reached` devenait une
|
|
90
|
+
* `TupayValidationError`, alors que rien n'est invalide dans la requête
|
|
91
|
+
* — c'est une place qu'il faut libérer. Un 409 `idempotency_in_progress`
|
|
92
|
+
* devenait un `TupayConflictError` générique, alors que sa reprise est
|
|
93
|
+
* l'inverse de celle d'un conflit : retenter à l'identique.
|
|
94
|
+
*
|
|
95
|
+
* Le statut reste le repli, pour une API antérieure à la story 2.4 qui
|
|
96
|
+
* ne renverrait pas encore `type`.
|
|
61
97
|
*/
|
|
62
98
|
export declare function errorFromResponse(status: number, body: {
|
|
63
99
|
error?: string;
|
|
64
100
|
message?: string;
|
|
101
|
+
type?: string;
|
|
65
102
|
} | null, requestId?: string): TupayError;
|
|
66
103
|
//# sourceMappingURL=errors.d.ts.map
|
package/dist/cjs/errors.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../src/errors.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../src/errors.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,MAAM,CAAA;IACZ,sEAAsE;IACtE,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,KAAK,CAAC,EAAE,OAAO,CAAA;CAChB;AAED,qBAAa,UAAW,SAAQ,KAAK;IACnC,6CAA6C;IAC7C,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,iEAAiE;IACjE,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAA;IACtB,wEAAwE;IACxE,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAA;IAC5B,kDAAkD;IAClD,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAA;gBAEf,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,iBAAiB;CAQxD;AAED,+CAA+C;AAC/C,qBAAa,wBAAyB,SAAQ,UAAU;CAAG;AAE3D,6EAA6E;AAC7E,qBAAa,oBAAqB,SAAQ,UAAU;CAAG;AAEvD,kEAAkE;AAClE,qBAAa,kBAAmB,SAAQ,UAAU;CAAG;AAErD,6CAA6C;AAC7C,qBAAa,oBAAqB,SAAQ,UAAU;CAAG;AAEvD,uEAAuE;AACvE,qBAAa,kBAAmB,SAAQ,UAAU;CAAG;AAErD;;;;;;;;;;;GAWG;AACH,qBAAa,qBAAsB,SAAQ,kBAAkB;CAAG;AAEhE,gDAAgD;AAChD,qBAAa,mBAAoB,SAAQ,UAAU;CAAG;AAEtD,iCAAiC;AACjC,qBAAa,aAAc,SAAQ,UAAU;CAAG;AAEhD,0DAA0D;AAC1D,qBAAa,cAAe,SAAQ,UAAU;CAAG;AAEjD,8EAA8E;AAC9E,qBAAa,oBAAqB,SAAQ,UAAU;gBACtC,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,OAAO;CAG7C;AAED,0DAA0D;AAC1D,qBAAa,+BAAgC,SAAQ,UAAU;gBACjD,OAAO,EAAE,MAAM;CAG5B;AAeD;;;;;;;;;;;;;GAaG;AACH,wBAAgB,iBAAiB,CAC/B,MAAM,EAAE,MAAM,EACd,IAAI,EAAE;IAAE,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,EAChE,SAAS,CAAC,EAAE,MAAM,GACjB,UAAU,CA2BZ"}
|
package/dist/cjs/errors.js
CHANGED
|
@@ -8,13 +8,23 @@
|
|
|
8
8
|
* `code` est le code machine renvoyé par l'API (`validation_error`,
|
|
9
9
|
* `livemode_mismatch`, …). C'est lui qu'il faut tester — le `message`
|
|
10
10
|
* est en français, destiné à un humain, et peut changer sans préavis.
|
|
11
|
+
*
|
|
12
|
+
* `type` est la CLASSE de l'erreur : `invalid_request`, `authentication`,
|
|
13
|
+
* `permission`, `not_found`, `conflict`, `idempotency`, `rate_limit`,
|
|
14
|
+
* `provider`, `api`. Elle permet de traiter une famille entière sans
|
|
15
|
+
* énumérer chaque code, et c'est elle qui choisit la sous-classe
|
|
16
|
+
* ci-dessous. Retirer ou renommer un code est un changement cassant,
|
|
17
|
+
* réservé à une version datée ; en ajouter un ne l'est pas, et un code
|
|
18
|
+
* inconnu se traite par sa classe.
|
|
11
19
|
*/
|
|
12
20
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
13
|
-
exports.TupaySignatureVerificationError = exports.TupayConnectionError = exports.TupayBaasError = exports.TupayApiError = exports.TupayRateLimitError = exports.TupayConflictError = exports.TupayValidationError = exports.TupayNotFoundError = exports.TupayPermissionError = exports.TupayAuthenticationError = exports.TupayError = void 0;
|
|
21
|
+
exports.TupaySignatureVerificationError = exports.TupayConnectionError = exports.TupayBaasError = exports.TupayApiError = exports.TupayRateLimitError = exports.TupayIdempotencyError = exports.TupayConflictError = exports.TupayValidationError = exports.TupayNotFoundError = exports.TupayPermissionError = exports.TupayAuthenticationError = exports.TupayError = void 0;
|
|
14
22
|
exports.errorFromResponse = errorFromResponse;
|
|
15
23
|
class TupayError extends Error {
|
|
16
24
|
/** Code machine stable renvoyé par l'API. */
|
|
17
25
|
code;
|
|
26
|
+
/** Classe d'erreur. `undefined` si l'API ne l'a pas renvoyée. */
|
|
27
|
+
type;
|
|
18
28
|
/** Statut HTTP, absent si l'erreur est survenue avant toute réponse. */
|
|
19
29
|
statusCode;
|
|
20
30
|
/** Identifiant de requête, à citer au support. */
|
|
@@ -23,6 +33,7 @@ class TupayError extends Error {
|
|
|
23
33
|
super(message, { cause: options.cause });
|
|
24
34
|
this.name = new.target.name;
|
|
25
35
|
this.code = options.code;
|
|
36
|
+
this.type = options.type;
|
|
26
37
|
this.statusCode = options.statusCode;
|
|
27
38
|
this.requestId = options.requestId;
|
|
28
39
|
}
|
|
@@ -44,10 +55,25 @@ exports.TupayNotFoundError = TupayNotFoundError;
|
|
|
44
55
|
class TupayValidationError extends TupayError {
|
|
45
56
|
}
|
|
46
57
|
exports.TupayValidationError = TupayValidationError;
|
|
47
|
-
/** 409 — état incompatible (déjà remboursé,
|
|
58
|
+
/** 409 / 422 — état incompatible (déjà remboursé, plafond atteint). */
|
|
48
59
|
class TupayConflictError extends TupayError {
|
|
49
60
|
}
|
|
50
61
|
exports.TupayConflictError = TupayConflictError;
|
|
62
|
+
/**
|
|
63
|
+
* 409 — le refus porte sur la clé d'idempotence, pas sur la requête.
|
|
64
|
+
*
|
|
65
|
+
* Hérite de `TupayConflictError` à dessein : ces deux codes sortaient
|
|
66
|
+
* déjà en 409, et tout `catch (err) { if (err instanceof
|
|
67
|
+
* TupayConflictError) }` existant doit continuer de les attraper. La
|
|
68
|
+
* sous-classe ajoute de la précision, elle n'en retire pas.
|
|
69
|
+
*
|
|
70
|
+
* `code` distingue les deux reprises, et elles sont opposées :
|
|
71
|
+
* `idempotency_key_reuse` → changez de clé, celle-ci a servi ailleurs
|
|
72
|
+
* `idempotency_in_progress` → retentez LE MÊME appel dans un instant
|
|
73
|
+
*/
|
|
74
|
+
class TupayIdempotencyError extends TupayConflictError {
|
|
75
|
+
}
|
|
76
|
+
exports.TupayIdempotencyError = TupayIdempotencyError;
|
|
51
77
|
/** 429 — 100 req/min par marchand dépassées. */
|
|
52
78
|
class TupayRateLimitError extends TupayError {
|
|
53
79
|
}
|
|
@@ -74,14 +100,39 @@ class TupaySignatureVerificationError extends TupayError {
|
|
|
74
100
|
}
|
|
75
101
|
}
|
|
76
102
|
exports.TupaySignatureVerificationError = TupaySignatureVerificationError;
|
|
103
|
+
/** La classe d'erreur de l'API vers la sous-classe du SDK. */
|
|
104
|
+
const PAR_TYPE = {
|
|
105
|
+
invalid_request: TupayValidationError,
|
|
106
|
+
authentication: TupayAuthenticationError,
|
|
107
|
+
permission: TupayPermissionError,
|
|
108
|
+
not_found: TupayNotFoundError,
|
|
109
|
+
conflict: TupayConflictError,
|
|
110
|
+
idempotency: TupayIdempotencyError,
|
|
111
|
+
rate_limit: TupayRateLimitError,
|
|
112
|
+
provider: TupayBaasError,
|
|
113
|
+
api: TupayApiError,
|
|
114
|
+
};
|
|
77
115
|
/**
|
|
78
116
|
* Construit l'erreur typée correspondant à une réponse HTTP.
|
|
79
|
-
*
|
|
117
|
+
*
|
|
118
|
+
* ── `type` d'abord, statut ensuite ─────────────────────────────────
|
|
119
|
+
* Le choix se faisait sur le seul statut HTTP. C'est une règle de forme,
|
|
120
|
+
* et elle se trompait : un 422 `limit_reached` devenait une
|
|
121
|
+
* `TupayValidationError`, alors que rien n'est invalide dans la requête
|
|
122
|
+
* — c'est une place qu'il faut libérer. Un 409 `idempotency_in_progress`
|
|
123
|
+
* devenait un `TupayConflictError` générique, alors que sa reprise est
|
|
124
|
+
* l'inverse de celle d'un conflit : retenter à l'identique.
|
|
125
|
+
*
|
|
126
|
+
* Le statut reste le repli, pour une API antérieure à la story 2.4 qui
|
|
127
|
+
* ne renverrait pas encore `type`.
|
|
80
128
|
*/
|
|
81
129
|
function errorFromResponse(status, body, requestId) {
|
|
82
130
|
const code = body?.error ?? 'server_error';
|
|
83
131
|
const message = body?.message ?? `Requête échouée (HTTP ${status}).`;
|
|
84
|
-
const options = { code, statusCode: status, requestId };
|
|
132
|
+
const options = { code, type: body?.type, statusCode: status, requestId };
|
|
133
|
+
const parType = body?.type ? PAR_TYPE[body.type] : undefined;
|
|
134
|
+
if (parType)
|
|
135
|
+
return new parType(message, options);
|
|
85
136
|
switch (status) {
|
|
86
137
|
case 400:
|
|
87
138
|
case 422:
|
package/dist/cjs/errors.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/errors.ts"],"names":[],"mappings":";AAAA
|
|
1
|
+
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/errors.ts"],"names":[],"mappings":"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"}
|
package/dist/cjs/index.d.ts
CHANGED
|
@@ -72,7 +72,7 @@ export { TupayClient } from './client.js';
|
|
|
72
72
|
export type { TupayOptions, RequestOptions } from './client.js';
|
|
73
73
|
export { constructEvent, DEFAULT_TOLERANCE_SECONDS } from './webhooks.js';
|
|
74
74
|
export type { ConstructEventOptions } from './webhooks.js';
|
|
75
|
-
export { TupayError, TupayAuthenticationError, TupayPermissionError, TupayNotFoundError, TupayValidationError, TupayConflictError, TupayRateLimitError, TupayApiError, TupayBaasError, TupayConnectionError, TupaySignatureVerificationError, } from './errors.js';
|
|
75
|
+
export { TupayError, TupayAuthenticationError, TupayPermissionError, TupayNotFoundError, TupayValidationError, TupayConflictError, TupayIdempotencyError, TupayRateLimitError, TupayApiError, TupayBaasError, TupayConnectionError, TupaySignatureVerificationError, } from './errors.js';
|
|
76
76
|
export type * from './types.js';
|
|
77
77
|
export type { CreatePaymentIntentParams } from './resources/payment-intents.js';
|
|
78
78
|
export type { CreatePaymentLinkParams } from './resources/payment-links.js';
|
package/dist/cjs/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,EAAe,KAAK,YAAY,EAAE,MAAM,aAAa,CAAA;AAC5D,OAAO,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAA;AAC/D,OAAO,EAAE,YAAY,EAAE,MAAM,8BAA8B,CAAA;AAC3D,OAAO,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAA;AAC1D,OAAO,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAA;AAChD,OAAO,EAAE,gBAAgB,EAAE,MAAM,kCAAkC,CAAA;AACnE,OAAO,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAA;AACpD,OAAO,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAA;AAC9C,OAAO,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAA;AACzD,OAAO,EAAkB,KAAK,qBAAqB,EAAE,MAAM,eAAe,CAAA;AAC1E,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAA;AAE9C,qBAAa,KAAK;;IAChB,QAAQ,CAAC,cAAc,EAAE,cAAc,CAAA;IACvC,QAAQ,CAAC,YAAY,EAAE,YAAY,CAAA;IACnC,QAAQ,CAAC,YAAY,EAAE,YAAY,CAAA;IACnC,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAA;IACzB,QAAQ,CAAC,gBAAgB,EAAE,gBAAgB,CAAA;IAC3C,QAAQ,CAAC,SAAS,EAAE,SAAS,CAAA;IAC7B,8DAA8D;IAC9D,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;IACvB,sEAAsE;IACtE,QAAQ,CAAC,WAAW,EAAE,WAAW,CAAA;IAEjC,uEAAuE;IACvE,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAA;gBAId,MAAM,EAAE,MAAM,EAAE,OAAO,GAAE,YAAiB;IActD;;;;;;;;;;;;;;;;;;;;;OAqBG;IACH,QAAQ,CAAC,QAAQ;gCAEJ,MAAM,GAAG,MAAM,UAChB,MAAM,GAAG,IAAI,GAAG,SAAS,UACzB,MAAM,YACJ,qBAAqB,GAC9B,YAAY;MAGhB;IAED,8CAA8C;IAC9C,MAAM,CAAC,cAAc,IAAI,MAAM;CAGhC;AAED,eAAe,KAAK,CAAA;AAEpB,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAA;AACzC,YAAY,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;AAC/D,OAAO,EAAE,cAAc,EAAE,yBAAyB,EAAE,MAAM,eAAe,CAAA;AACzE,YAAY,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAA;AAE1D,OAAO,EACL,UAAU,EACV,wBAAwB,EACxB,oBAAoB,EACpB,kBAAkB,EAClB,oBAAoB,EACpB,kBAAkB,EAClB,mBAAmB,EACnB,aAAa,EACb,cAAc,EACd,oBAAoB,EACpB,+BAA+B,GAChC,MAAM,aAAa,CAAA;AAEpB,mBAAmB,YAAY,CAAA;AAE/B,YAAY,EAAE,yBAAyB,EAAE,MAAM,gCAAgC,CAAA;AAC/E,YAAY,EAAE,uBAAuB,EAAE,MAAM,8BAA8B,CAAA;AAC3E,YAAY,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAA;AACzE,YAAY,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAA;AACnF,YAAY,EACV,2BAA2B,EAC3B,2BAA2B,EAC3B,oBAAoB,GACrB,MAAM,kCAAkC,CAAA;AACzC,YAAY,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAA;AAC7D,OAAO,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAA;AAC9C,YAAY,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAA;AAClF,OAAO,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAA"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,EAAe,KAAK,YAAY,EAAE,MAAM,aAAa,CAAA;AAC5D,OAAO,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAA;AAC/D,OAAO,EAAE,YAAY,EAAE,MAAM,8BAA8B,CAAA;AAC3D,OAAO,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAA;AAC1D,OAAO,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAA;AAChD,OAAO,EAAE,gBAAgB,EAAE,MAAM,kCAAkC,CAAA;AACnE,OAAO,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAA;AACpD,OAAO,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAA;AAC9C,OAAO,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAA;AACzD,OAAO,EAAkB,KAAK,qBAAqB,EAAE,MAAM,eAAe,CAAA;AAC1E,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAA;AAE9C,qBAAa,KAAK;;IAChB,QAAQ,CAAC,cAAc,EAAE,cAAc,CAAA;IACvC,QAAQ,CAAC,YAAY,EAAE,YAAY,CAAA;IACnC,QAAQ,CAAC,YAAY,EAAE,YAAY,CAAA;IACnC,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAA;IACzB,QAAQ,CAAC,gBAAgB,EAAE,gBAAgB,CAAA;IAC3C,QAAQ,CAAC,SAAS,EAAE,SAAS,CAAA;IAC7B,8DAA8D;IAC9D,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;IACvB,sEAAsE;IACtE,QAAQ,CAAC,WAAW,EAAE,WAAW,CAAA;IAEjC,uEAAuE;IACvE,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAA;gBAId,MAAM,EAAE,MAAM,EAAE,OAAO,GAAE,YAAiB;IActD;;;;;;;;;;;;;;;;;;;;;OAqBG;IACH,QAAQ,CAAC,QAAQ;gCAEJ,MAAM,GAAG,MAAM,UAChB,MAAM,GAAG,IAAI,GAAG,SAAS,UACzB,MAAM,YACJ,qBAAqB,GAC9B,YAAY;MAGhB;IAED,8CAA8C;IAC9C,MAAM,CAAC,cAAc,IAAI,MAAM;CAGhC;AAED,eAAe,KAAK,CAAA;AAEpB,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAA;AACzC,YAAY,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;AAC/D,OAAO,EAAE,cAAc,EAAE,yBAAyB,EAAE,MAAM,eAAe,CAAA;AACzE,YAAY,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAA;AAE1D,OAAO,EACL,UAAU,EACV,wBAAwB,EACxB,oBAAoB,EACpB,kBAAkB,EAClB,oBAAoB,EACpB,kBAAkB,EAClB,qBAAqB,EACrB,mBAAmB,EACnB,aAAa,EACb,cAAc,EACd,oBAAoB,EACpB,+BAA+B,GAChC,MAAM,aAAa,CAAA;AAEpB,mBAAmB,YAAY,CAAA;AAE/B,YAAY,EAAE,yBAAyB,EAAE,MAAM,gCAAgC,CAAA;AAC/E,YAAY,EAAE,uBAAuB,EAAE,MAAM,8BAA8B,CAAA;AAC3E,YAAY,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAA;AACzE,YAAY,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAA;AACnF,YAAY,EACV,2BAA2B,EAC3B,2BAA2B,EAC3B,oBAAoB,GACrB,MAAM,kCAAkC,CAAA;AACzC,YAAY,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAA;AAC7D,OAAO,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAA;AAC9C,YAAY,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAA;AAClF,OAAO,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAA"}
|
package/dist/cjs/index.js
CHANGED
|
@@ -15,7 +15,7 @@
|
|
|
15
15
|
* console.log(link.url)
|
|
16
16
|
*/
|
|
17
17
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
18
|
-
exports.TestHelpers = exports.Events = exports.TupaySignatureVerificationError = exports.TupayConnectionError = exports.TupayBaasError = exports.TupayApiError = exports.TupayRateLimitError = exports.TupayConflictError = exports.TupayValidationError = exports.TupayNotFoundError = exports.TupayPermissionError = exports.TupayAuthenticationError = exports.TupayError = exports.DEFAULT_TOLERANCE_SECONDS = exports.constructEvent = exports.TupayClient = exports.Tupay = void 0;
|
|
18
|
+
exports.TestHelpers = exports.Events = exports.TupaySignatureVerificationError = exports.TupayConnectionError = exports.TupayBaasError = exports.TupayApiError = exports.TupayRateLimitError = exports.TupayIdempotencyError = exports.TupayConflictError = exports.TupayValidationError = exports.TupayNotFoundError = exports.TupayPermissionError = exports.TupayAuthenticationError = exports.TupayError = exports.DEFAULT_TOLERANCE_SECONDS = exports.constructEvent = exports.TupayClient = exports.Tupay = void 0;
|
|
19
19
|
const client_js_1 = require("./client.js");
|
|
20
20
|
const payment_intents_js_1 = require("./resources/payment-intents.js");
|
|
21
21
|
const payment_links_js_1 = require("./resources/payment-links.js");
|
|
@@ -98,6 +98,7 @@ Object.defineProperty(exports, "TupayPermissionError", { enumerable: true, get:
|
|
|
98
98
|
Object.defineProperty(exports, "TupayNotFoundError", { enumerable: true, get: function () { return errors_js_1.TupayNotFoundError; } });
|
|
99
99
|
Object.defineProperty(exports, "TupayValidationError", { enumerable: true, get: function () { return errors_js_1.TupayValidationError; } });
|
|
100
100
|
Object.defineProperty(exports, "TupayConflictError", { enumerable: true, get: function () { return errors_js_1.TupayConflictError; } });
|
|
101
|
+
Object.defineProperty(exports, "TupayIdempotencyError", { enumerable: true, get: function () { return errors_js_1.TupayIdempotencyError; } });
|
|
101
102
|
Object.defineProperty(exports, "TupayRateLimitError", { enumerable: true, get: function () { return errors_js_1.TupayRateLimitError; } });
|
|
102
103
|
Object.defineProperty(exports, "TupayApiError", { enumerable: true, get: function () { return errors_js_1.TupayApiError; } });
|
|
103
104
|
Object.defineProperty(exports, "TupayBaasError", { enumerable: true, get: function () { return errors_js_1.TupayBaasError; } });
|
package/dist/cjs/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;GAcG;;;AAEH,2CAA4D;AAC5D,uEAA+D;AAC/D,mEAA2D;AAC3D,iEAA0D;AAC1D,uDAAgD;AAChD,2EAAmE;AACnE,2DAAoD;AACpD,qDAA8C;AAC9C,iEAAyD;AACzD,+CAA0E;AAG1E,MAAa,KAAK;IACP,cAAc,CAAgB;IAC9B,YAAY,CAAc;IAC1B,YAAY,CAAc;IAC1B,OAAO,CAAS;IAChB,gBAAgB,CAAkB;IAClC,SAAS,CAAW;IAC7B,8DAA8D;IACrD,MAAM,CAAQ;IACvB,sEAAsE;IAC7D,WAAW,CAAa;IAEjC,uEAAuE;IAC9D,QAAQ,CAAS;IAEjB,OAAO,CAAa;IAE7B,YAAY,MAAc,EAAE,UAAwB,EAAE;QACpD,IAAI,CAAC,OAAO,GAAG,IAAI,uBAAW,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;QAC/C,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAA;QAErC,IAAI,CAAC,cAAc,GAAG,IAAI,mCAAc,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;QACtD,IAAI,CAAC,YAAY,GAAG,IAAI,+BAAY,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;QAClD,IAAI,CAAC,YAAY,GAAG,IAAI,8BAAY,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;QAClD,IAAI,CAAC,OAAO,GAAG,IAAI,oBAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;QACxC,IAAI,CAAC,gBAAgB,GAAG,IAAI,uCAAgB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;QAC1D,IAAI,CAAC,SAAS,GAAG,IAAI,wBAAS,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;QAC5C,IAAI,CAAC,MAAM,GAAG,IAAI,kBAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;QACtC,IAAI,CAAC,WAAW,GAAG,IAAI,6BAAW,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;IAClD,CAAC;IAED;;;;;;;;;;;;;;;;;;;;;OAqBG;IACM,QAAQ,GAAG;QAClB,cAAc,CACZ,OAAwB,EACxB,MAAiC,EACjC,MAAc,EACd,OAA+B;YAE/B,OAAO,IAAA,4BAAc,EAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,CAAA;QACzD,CAAC;KACF,CAAA;IAED,8CAA8C;IAC9C,MAAM,CAAC,cAAc;QACnB,OAAO,uBAAW,CAAC,cAAc,EAAE,CAAA;IACrC,CAAC;CACF;AApED,sBAoEC;AAED,kBAAe,KAAK,CAAA;AAEpB,yCAAyC;AAAhC,wGAAA,WAAW,OAAA;AAEpB,6CAAyE;AAAhE,6GAAA,cAAc,OAAA;AAAE,wHAAA,yBAAyB,OAAA;AAGlD,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;GAcG;;;AAEH,2CAA4D;AAC5D,uEAA+D;AAC/D,mEAA2D;AAC3D,iEAA0D;AAC1D,uDAAgD;AAChD,2EAAmE;AACnE,2DAAoD;AACpD,qDAA8C;AAC9C,iEAAyD;AACzD,+CAA0E;AAG1E,MAAa,KAAK;IACP,cAAc,CAAgB;IAC9B,YAAY,CAAc;IAC1B,YAAY,CAAc;IAC1B,OAAO,CAAS;IAChB,gBAAgB,CAAkB;IAClC,SAAS,CAAW;IAC7B,8DAA8D;IACrD,MAAM,CAAQ;IACvB,sEAAsE;IAC7D,WAAW,CAAa;IAEjC,uEAAuE;IAC9D,QAAQ,CAAS;IAEjB,OAAO,CAAa;IAE7B,YAAY,MAAc,EAAE,UAAwB,EAAE;QACpD,IAAI,CAAC,OAAO,GAAG,IAAI,uBAAW,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;QAC/C,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAA;QAErC,IAAI,CAAC,cAAc,GAAG,IAAI,mCAAc,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;QACtD,IAAI,CAAC,YAAY,GAAG,IAAI,+BAAY,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;QAClD,IAAI,CAAC,YAAY,GAAG,IAAI,8BAAY,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;QAClD,IAAI,CAAC,OAAO,GAAG,IAAI,oBAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;QACxC,IAAI,CAAC,gBAAgB,GAAG,IAAI,uCAAgB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;QAC1D,IAAI,CAAC,SAAS,GAAG,IAAI,wBAAS,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;QAC5C,IAAI,CAAC,MAAM,GAAG,IAAI,kBAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;QACtC,IAAI,CAAC,WAAW,GAAG,IAAI,6BAAW,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;IAClD,CAAC;IAED;;;;;;;;;;;;;;;;;;;;;OAqBG;IACM,QAAQ,GAAG;QAClB,cAAc,CACZ,OAAwB,EACxB,MAAiC,EACjC,MAAc,EACd,OAA+B;YAE/B,OAAO,IAAA,4BAAc,EAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,CAAA;QACzD,CAAC;KACF,CAAA;IAED,8CAA8C;IAC9C,MAAM,CAAC,cAAc;QACnB,OAAO,uBAAW,CAAC,cAAc,EAAE,CAAA;IACrC,CAAC;CACF;AApED,sBAoEC;AAED,kBAAe,KAAK,CAAA;AAEpB,yCAAyC;AAAhC,wGAAA,WAAW,OAAA;AAEpB,6CAAyE;AAAhE,6GAAA,cAAc,OAAA;AAAE,wHAAA,yBAAyB,OAAA;AAGlD,yCAaoB;AAZlB,uGAAA,UAAU,OAAA;AACV,qHAAA,wBAAwB,OAAA;AACxB,iHAAA,oBAAoB,OAAA;AACpB,+GAAA,kBAAkB,OAAA;AAClB,iHAAA,oBAAoB,OAAA;AACpB,+GAAA,kBAAkB,OAAA;AAClB,kHAAA,qBAAqB,OAAA;AACrB,gHAAA,mBAAmB,OAAA;AACnB,0GAAA,aAAa,OAAA;AACb,2GAAA,cAAc,OAAA;AACd,iHAAA,oBAAoB,OAAA;AACpB,4HAAA,+BAA+B,OAAA;AAejC,mDAA8C;AAArC,mGAAA,MAAM,OAAA;AAEf,+DAAyD;AAAhD,8GAAA,WAAW,OAAA"}
|
|
@@ -50,7 +50,7 @@ export declare class Events {
|
|
|
50
50
|
* await tupay.events.resend(event.id)
|
|
51
51
|
* }
|
|
52
52
|
*/
|
|
53
|
-
resend(id: string): Promise<ResendResult>;
|
|
53
|
+
resend(id: string, idempotencyKey?: string): Promise<ResendResult>;
|
|
54
54
|
/**
|
|
55
55
|
* Parcourt toutes les pages, un événement à la fois.
|
|
56
56
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"events.d.ts","sourceRoot":"","sources":["../../../src/resources/events.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAA;AAC/C,OAAO,KAAK,EACV,UAAU,EACV,UAAU,EACV,gBAAgB,EAChB,YAAY,EACb,MAAM,aAAa,CAAA;AACpB,OAAO,EAIL,KAAK,UAAU,EAChB,MAAM,aAAa,CAAA;AAEpB,MAAM,WAAW,gBAAiB,SAAQ,UAAU;IAClD;;;;;;;OAOG;IACH,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,IAAI,CAAC,EAAE,gBAAgB,CAAA;CACxB;AAED,qBAAa,MAAM;IACL,OAAO,CAAC,QAAQ,CAAC,MAAM;gBAAN,MAAM,EAAE,WAAW;IAEhD;;;;;;;;;;;OAWG;IACG,IAAI,CAAC,MAAM,GAAE,gBAAqB,GAAG,OAAO,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;IAc1E;;;;;OAKG;IACG,QAAQ,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC;IAQ/C;;;;;;;;;;;;;OAaG;IACG,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"events.d.ts","sourceRoot":"","sources":["../../../src/resources/events.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAA;AAC/C,OAAO,KAAK,EACV,UAAU,EACV,UAAU,EACV,gBAAgB,EAChB,YAAY,EACb,MAAM,aAAa,CAAA;AACpB,OAAO,EAIL,KAAK,UAAU,EAChB,MAAM,aAAa,CAAA;AAEpB,MAAM,WAAW,gBAAiB,SAAQ,UAAU;IAClD;;;;;;;OAOG;IACH,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,IAAI,CAAC,EAAE,gBAAgB,CAAA;CACxB;AAED,qBAAa,MAAM;IACL,OAAO,CAAC,QAAQ,CAAC,MAAM;gBAAN,MAAM,EAAE,WAAW;IAEhD;;;;;;;;;;;OAWG;IACG,IAAI,CAAC,MAAM,GAAE,gBAAqB,GAAG,OAAO,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;IAc1E;;;;;OAKG;IACG,QAAQ,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC;IAQ/C;;;;;;;;;;;;;OAaG;IACG,MAAM,CAAC,EAAE,EAAE,MAAM,EAAE,cAAc,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC;IAcxE;;;;;;;OAOG;IACI,cAAc,CACnB,MAAM,GAAE,gBAAqB,GAC5B,cAAc,CAAC,UAAU,EAAE,IAAI,EAAE,SAAS,CAAC;CAyB/C"}
|
|
@@ -57,10 +57,16 @@ class Events {
|
|
|
57
57
|
* await tupay.events.resend(event.id)
|
|
58
58
|
* }
|
|
59
59
|
*/
|
|
60
|
-
async resend(id) {
|
|
60
|
+
async resend(id, idempotencyKey) {
|
|
61
|
+
// Aucune clé n'est générée par défaut ici, contrairement aux autres
|
|
62
|
+
// créations. Le rejeu d'un événement CRÉE une livraison : c'est sa
|
|
63
|
+
// raison d'être, et deux appels délibérés doivent en créer deux.
|
|
64
|
+
// Fournir une clé rend l'appel rejouable sans risque, mais c'est un
|
|
65
|
+
// choix de l'appelant, pas un défaut du SDK.
|
|
61
66
|
const { data } = await this.client.request({
|
|
62
67
|
method: 'POST',
|
|
63
68
|
path: `/events/${encodeURIComponent(id)}/resend`,
|
|
69
|
+
idempotencyKey,
|
|
64
70
|
});
|
|
65
71
|
return data;
|
|
66
72
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"events.js","sourceRoot":"","sources":["../../../src/resources/events.ts"],"names":[],"mappings":";;;AAOA,0CAKoB;AAepB,MAAa,MAAM;IACY;IAA7B,YAA6B,MAAmB;QAAnB,WAAM,GAAN,MAAM,CAAa;IAAG,CAAC;IAEpD;;;;;;;;;;;OAWG;IACH,KAAK,CAAC,IAAI,CAAC,SAA2B,EAAE;QACtC,MAAM,OAAO,GAAG,IAAA,0BAAe,EAAC;YAC9B,GAAG,MAAM;YACT,aAAa,EAAE,MAAM,CAAC,aAAa,IAAI,MAAM,CAAC,KAAK;SACpD,CAAC,CAAA;QACF,OAAO,IAAA,0BAAe,EACpB,MAAM,IAAI,CAAC,MAAM,CAAC,OAAO,CAAyB;YAChD,MAAM,EAAE,KAAK;YACb,IAAI,EAAE,SAAS;YACf,KAAK,EAAE,EAAE,GAAG,OAAO,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE;SACzC,CAAC,CACH,CAAA;IACH,CAAC;IAED;;;;;OAKG;IACH,KAAK,CAAC,QAAQ,CAAC,EAAU;QACvB,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,OAAO,CAAuB;YAC/D,MAAM,EAAE,KAAK;YACb,IAAI,EAAE,WAAW,kBAAkB,CAAC,EAAE,CAAC,EAAE;SAC1C,CAAC,CAAA;QACF,OAAO,IAAI,CAAA;IACb,CAAC;IAED;;;;;;;;;;;;;OAaG;IACH,KAAK,CAAC,MAAM,CAAC,EAAU;
|
|
1
|
+
{"version":3,"file":"events.js","sourceRoot":"","sources":["../../../src/resources/events.ts"],"names":[],"mappings":";;;AAOA,0CAKoB;AAepB,MAAa,MAAM;IACY;IAA7B,YAA6B,MAAmB;QAAnB,WAAM,GAAN,MAAM,CAAa;IAAG,CAAC;IAEpD;;;;;;;;;;;OAWG;IACH,KAAK,CAAC,IAAI,CAAC,SAA2B,EAAE;QACtC,MAAM,OAAO,GAAG,IAAA,0BAAe,EAAC;YAC9B,GAAG,MAAM;YACT,aAAa,EAAE,MAAM,CAAC,aAAa,IAAI,MAAM,CAAC,KAAK;SACpD,CAAC,CAAA;QACF,OAAO,IAAA,0BAAe,EACpB,MAAM,IAAI,CAAC,MAAM,CAAC,OAAO,CAAyB;YAChD,MAAM,EAAE,KAAK;YACb,IAAI,EAAE,SAAS;YACf,KAAK,EAAE,EAAE,GAAG,OAAO,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE;SACzC,CAAC,CACH,CAAA;IACH,CAAC;IAED;;;;;OAKG;IACH,KAAK,CAAC,QAAQ,CAAC,EAAU;QACvB,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,OAAO,CAAuB;YAC/D,MAAM,EAAE,KAAK;YACb,IAAI,EAAE,WAAW,kBAAkB,CAAC,EAAE,CAAC,EAAE;SAC1C,CAAC,CAAA;QACF,OAAO,IAAI,CAAA;IACb,CAAC;IAED;;;;;;;;;;;;;OAaG;IACH,KAAK,CAAC,MAAM,CAAC,EAAU,EAAE,cAAuB;QAC9C,oEAAoE;QACpE,mEAAmE;QACnE,iEAAiE;QACjE,oEAAoE;QACpE,6CAA6C;QAC7C,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,OAAO,CAAyB;YACjE,MAAM,EAAE,MAAM;YACd,IAAI,EAAE,WAAW,kBAAkB,CAAC,EAAE,CAAC,SAAS;YAChD,cAAc;SACf,CAAC,CAAA;QACF,OAAO,IAAI,CAAA;IACb,CAAC;IAED;;;;;;;OAOG;IACH,KAAK,CAAC,CAAC,cAAc,CACnB,SAA2B,EAAE;QAE7B,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,IAAI,GAAG,CAAA;QACjC,IAAI,aAAa,GAAG,MAAM,CAAC,aAAa,IAAI,MAAM,CAAC,KAAK,CAAA;QACxD,IAAI,SAA6B,CAAA;QAEjC,SAAS,CAAC;YACR,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC;gBAC3B,GAAG,MAAM;gBACT,KAAK;gBACL,KAAK,EAAE,SAAS;gBAChB,aAAa;aACd,CAAC,CAAA;YACF,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,IAAI;gBAAE,MAAM,KAAK,CAAA;YAC1C,8DAA8D;YAC9D,+DAA+D;YAC/D,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAA;YAC/C,IAAI,CAAC,IAAI,CAAC,OAAO,IAAI,CAAC,OAAO;gBAAE,OAAM;YACrC,oEAAoE;YACpE,iEAAiE;YACjE,iBAAiB;YACjB,IAAI,OAAO,CAAC,EAAE,KAAK,SAAS;gBAAE,OAAM;YACpC,SAAS,GAAG,OAAO,CAAC,EAAE,CAAA;YACtB,aAAa,GAAG,OAAO,CAAC,EAAE,CAAA;QAC5B,CAAC;IACH,CAAC;CACF;AA1GD,wBA0GC"}
|
|
@@ -1,7 +1,12 @@
|
|
|
1
|
-
import
|
|
1
|
+
import { TupayClient } from '../client.js';
|
|
2
2
|
import type { ListResult, PaymentLink } from '../types.js';
|
|
3
3
|
import { type ListParams } from '../liste.js';
|
|
4
4
|
export interface CreatePaymentLinkParams {
|
|
5
|
+
/**
|
|
6
|
+
* Clé d'idempotence. Omise, le SDK en génère une (UUID v4) : la
|
|
7
|
+
* requête devient rejouable, et une reprise ne crée pas un second lien.
|
|
8
|
+
*/
|
|
9
|
+
idempotencyKey?: string;
|
|
5
10
|
/** Entier XPF, entre 100 et 10 000 000. Le XPF n'a pas de centimes. */
|
|
6
11
|
amountXpf: number;
|
|
7
12
|
description: string;
|
|
@@ -24,9 +29,14 @@ export declare class PaymentLinks {
|
|
|
24
29
|
/**
|
|
25
30
|
* Crée un lien de paiement partageable.
|
|
26
31
|
*
|
|
27
|
-
*
|
|
28
|
-
*
|
|
29
|
-
*
|
|
32
|
+
* Rejouable : le SDK envoie une clé d'idempotence, générée si vous n'en
|
|
33
|
+
* fournissez pas. Une reprise après timeout rend le lien déjà créé au
|
|
34
|
+
* lieu d'en créer un second avec un second slug.
|
|
35
|
+
*
|
|
36
|
+
* L'API a longtemps ignoré cet en-tête ici, et ce commentaire disait le
|
|
37
|
+
* contraire de ce qu'il dit aujourd'hui. Elle l'honore depuis la
|
|
38
|
+
* version qui documente `Idempotency-Key` comme facultatif sur cette
|
|
39
|
+
* opération.
|
|
30
40
|
*/
|
|
31
41
|
create(params: CreatePaymentLinkParams): Promise<PaymentLink>;
|
|
32
42
|
retrieve(id: string): Promise<PaymentLink>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"payment-links.d.ts","sourceRoot":"","sources":["../../../src/resources/payment-links.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"payment-links.d.ts","sourceRoot":"","sources":["../../../src/resources/payment-links.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAA;AAC1C,OAAO,KAAK,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,aAAa,CAAA;AAC1D,OAAO,EAIL,KAAK,UAAU,EAChB,MAAM,aAAa,CAAA;AAEpB,MAAM,WAAW,uBAAuB;IACtC;;;OAGG;IACH,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,uEAAuE;IACvE,SAAS,EAAE,MAAM,CAAA;IACjB,WAAW,EAAE,MAAM,CAAA;IACnB;;;;;;;OAOG;IACH,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,uEAAuE;IACvE,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;CAClC;AAED,qBAAa,YAAY;;IACX,OAAO,CAAC,QAAQ,CAAC,MAAM;gBAAN,MAAM,EAAE,WAAW;IAEhD;;;;;;;;;;;OAWG;IACG,MAAM,CAAC,MAAM,EAAE,uBAAuB,GAAG,OAAO,CAAC,WAAW,CAAC;IAW7D,QAAQ,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC;IAQ1C,IAAI,CAAC,MAAM,GAAE,UAAe,GAAG,OAAO,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;IAUrE,yEAAyE;IACnE,UAAU,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC;IAI5C,QAAQ,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC;CAYjD"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.PaymentLinks = void 0;
|
|
4
|
+
const client_js_1 = require("../client.js");
|
|
4
5
|
const liste_js_1 = require("../liste.js");
|
|
5
6
|
class PaymentLinks {
|
|
6
7
|
client;
|
|
@@ -10,15 +11,22 @@ class PaymentLinks {
|
|
|
10
11
|
/**
|
|
11
12
|
* Crée un lien de paiement partageable.
|
|
12
13
|
*
|
|
13
|
-
*
|
|
14
|
-
*
|
|
15
|
-
*
|
|
14
|
+
* Rejouable : le SDK envoie une clé d'idempotence, générée si vous n'en
|
|
15
|
+
* fournissez pas. Une reprise après timeout rend le lien déjà créé au
|
|
16
|
+
* lieu d'en créer un second avec un second slug.
|
|
17
|
+
*
|
|
18
|
+
* L'API a longtemps ignoré cet en-tête ici, et ce commentaire disait le
|
|
19
|
+
* contraire de ce qu'il dit aujourd'hui. Elle l'honore depuis la
|
|
20
|
+
* version qui documente `Idempotency-Key` comme facultatif sur cette
|
|
21
|
+
* opération.
|
|
16
22
|
*/
|
|
17
23
|
async create(params) {
|
|
24
|
+
const { idempotencyKey, ...body } = params;
|
|
18
25
|
const { data } = await this.client.request({
|
|
19
26
|
method: 'POST',
|
|
20
27
|
path: '/payment-links',
|
|
21
|
-
body
|
|
28
|
+
body,
|
|
29
|
+
idempotencyKey: idempotencyKey ?? client_js_1.TupayClient.idempotencyKey(),
|
|
22
30
|
});
|
|
23
31
|
return data;
|
|
24
32
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"payment-links.js","sourceRoot":"","sources":["../../../src/resources/payment-links.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"payment-links.js","sourceRoot":"","sources":["../../../src/resources/payment-links.ts"],"names":[],"mappings":";;;AAAA,4CAA0C;AAE1C,0CAKoB;AAwBpB,MAAa,YAAY;IACM;IAA7B,YAA6B,MAAmB;QAAnB,WAAM,GAAN,MAAM,CAAa;IAAG,CAAC;IAEpD;;;;;;;;;;;OAWG;IACH,KAAK,CAAC,MAAM,CAAC,MAA+B;QAC1C,MAAM,EAAE,cAAc,EAAE,GAAG,IAAI,EAAE,GAAG,MAAM,CAAA;QAC1C,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,OAAO,CAAwB;YAChE,MAAM,EAAE,MAAM;YACd,IAAI,EAAE,gBAAgB;YACtB,IAAI;YACJ,cAAc,EAAE,cAAc,IAAI,uBAAW,CAAC,cAAc,EAAE;SAC/D,CAAC,CAAA;QACF,OAAO,IAAI,CAAA;IACb,CAAC;IAED,KAAK,CAAC,QAAQ,CAAC,EAAU;QACvB,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,OAAO,CAAwB;YAChE,MAAM,EAAE,KAAK;YACb,IAAI,EAAE,kBAAkB,kBAAkB,CAAC,EAAE,CAAC,EAAE;SACjD,CAAC,CAAA;QACF,OAAO,IAAI,CAAA;IACb,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,SAAqB,EAAE;QAChC,OAAO,IAAA,0BAAe,EACpB,MAAM,IAAI,CAAC,MAAM,CAAC,OAAO,CAA0B;YACjD,MAAM,EAAE,KAAK;YACb,IAAI,EAAE,gBAAgB;YACtB,KAAK,EAAE,IAAA,0BAAe,EAAC,MAAM,CAAC;SAC/B,CAAC,CACH,CAAA;IACH,CAAC;IAED,yEAAyE;IACzE,KAAK,CAAC,UAAU,CAAC,EAAU;QACzB,OAAO,IAAI,CAAC,UAAU,CAAC,EAAE,EAAE,KAAK,CAAC,CAAA;IACnC,CAAC;IAED,KAAK,CAAC,QAAQ,CAAC,EAAU;QACvB,OAAO,IAAI,CAAC,UAAU,CAAC,EAAE,EAAE,IAAI,CAAC,CAAA;IAClC,CAAC;IAED,KAAK,CAAC,UAAU,CAAC,EAAU,EAAE,MAAe;QAC1C,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,OAAO,CAAwB;YAChE,MAAM,EAAE,OAAO;YACf,IAAI,EAAE,kBAAkB,kBAAkB,CAAC,EAAE,CAAC,EAAE;YAChD,IAAI,EAAE,EAAE,MAAM,EAAE;SACjB,CAAC,CAAA;QACF,OAAO,IAAI,CAAA;IACb,CAAC;CACF;AA7DD,oCA6DC"}
|
|
@@ -25,7 +25,7 @@ export declare class TestHelpers {
|
|
|
25
25
|
* @throws {TupayError} si le client a été construit avec une clé live —
|
|
26
26
|
* on échoue localement plutôt que d'envoyer une requête vouée au 403.
|
|
27
27
|
*/
|
|
28
|
-
simulatePayment(transactionId: string, outcome: SimulateOutcome): Promise<SimulateResult>;
|
|
28
|
+
simulatePayment(transactionId: string, outcome: SimulateOutcome, idempotencyKey?: string): Promise<SimulateResult>;
|
|
29
29
|
/**
|
|
30
30
|
* Montants XPF qui provoquent un échec **dès la création** de l'intent.
|
|
31
31
|
* Pratique pour tester vos écrans d'erreur.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"test-helpers.d.ts","sourceRoot":"","sources":["../../../src/resources/test-helpers.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAA;AAC/C,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAA;AAE9C,MAAM,MAAM,eAAe,GAAG,WAAW,GAAG,QAAQ,GAAG,YAAY,CAAA;AAEnE,MAAM,WAAW,cAAe,SAAQ,WAAW;IACjD,SAAS,EAAE,IAAI,CAAA;IACf,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,iBAAiB,CAAC,EAAE,MAAM,CAAA;IAC1B,cAAc,CAAC,EAAE,OAAO,CAAA;CACzB;AAED;;;;;;GAMG;AACH,qBAAa,WAAW;IACV,OAAO,CAAC,QAAQ,CAAC,MAAM;gBAAN,MAAM,EAAE,WAAW;IAEhD;;;;;;;OAOG;IACG,eAAe,CACnB,aAAa,EAAE,MAAM,EACrB,OAAO,EAAE,eAAe,
|
|
1
|
+
{"version":3,"file":"test-helpers.d.ts","sourceRoot":"","sources":["../../../src/resources/test-helpers.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAA;AAC/C,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAA;AAE9C,MAAM,MAAM,eAAe,GAAG,WAAW,GAAG,QAAQ,GAAG,YAAY,CAAA;AAEnE,MAAM,WAAW,cAAe,SAAQ,WAAW;IACjD,SAAS,EAAE,IAAI,CAAA;IACf,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,iBAAiB,CAAC,EAAE,MAAM,CAAA;IAC1B,cAAc,CAAC,EAAE,OAAO,CAAA;CACzB;AAED;;;;;;GAMG;AACH,qBAAa,WAAW;IACV,OAAO,CAAC,QAAQ,CAAC,MAAM;gBAAN,MAAM,EAAE,WAAW;IAEhD;;;;;;;OAOG;IACG,eAAe,CACnB,aAAa,EAAE,MAAM,EACrB,OAAO,EAAE,eAAe,EACxB,cAAc,CAAC,EAAE,MAAM,GACtB,OAAO,CAAC,cAAc,CAAC;IAoB1B;;;OAGG;IACH,MAAM,CAAC,QAAQ,CAAC,YAAY;QAC1B,wBAAwB;;QAExB,6BAA6B;;QAE7B,6CAA6C;;MAErC;CACX"}
|
|
@@ -22,7 +22,7 @@ class TestHelpers {
|
|
|
22
22
|
* @throws {TupayError} si le client a été construit avec une clé live —
|
|
23
23
|
* on échoue localement plutôt que d'envoyer une requête vouée au 403.
|
|
24
24
|
*/
|
|
25
|
-
async simulatePayment(transactionId, outcome) {
|
|
25
|
+
async simulatePayment(transactionId, outcome, idempotencyKey) {
|
|
26
26
|
if (this.client.livemode) {
|
|
27
27
|
throw new errors_js_1.TupayError('simulatePayment est réservé au mode test. Construisez le client avec une clé tpk_test_.', { code: 'livemode_mismatch' });
|
|
28
28
|
}
|
|
@@ -30,6 +30,10 @@ class TestHelpers {
|
|
|
30
30
|
method: 'POST',
|
|
31
31
|
path: '/test/simulate',
|
|
32
32
|
body: { transactionId, outcome },
|
|
33
|
+
// Aucune clé générée par défaut : forcer deux fois la même issue
|
|
34
|
+
// est déjà sans effet côté serveur (`alreadyInState`), et un
|
|
35
|
+
// développeur qui simule veut voir chaque appel partir.
|
|
36
|
+
idempotencyKey,
|
|
33
37
|
});
|
|
34
38
|
return data;
|
|
35
39
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"test-helpers.js","sourceRoot":"","sources":["../../../src/resources/test-helpers.ts"],"names":[],"mappings":";;;AAAA,4CAAyC;AAazC;;;;;;GAMG;AACH,MAAa,WAAW;IACO;IAA7B,YAA6B,MAAmB;QAAnB,WAAM,GAAN,MAAM,CAAa;IAAG,CAAC;IAEpD;;;;;;;OAOG;IACH,KAAK,CAAC,eAAe,CACnB,aAAqB,EACrB,OAAwB;
|
|
1
|
+
{"version":3,"file":"test-helpers.js","sourceRoot":"","sources":["../../../src/resources/test-helpers.ts"],"names":[],"mappings":";;;AAAA,4CAAyC;AAazC;;;;;;GAMG;AACH,MAAa,WAAW;IACO;IAA7B,YAA6B,MAAmB;QAAnB,WAAM,GAAN,MAAM,CAAa;IAAG,CAAC;IAEpD;;;;;;;OAOG;IACH,KAAK,CAAC,eAAe,CACnB,aAAqB,EACrB,OAAwB,EACxB,cAAuB;QAEvB,IAAI,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC;YACzB,MAAM,IAAI,sBAAU,CAClB,yFAAyF,EACzF,EAAE,IAAI,EAAE,mBAAmB,EAAE,CAC9B,CAAA;QACH,CAAC;QAED,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,OAAO,CAA2B;YACnE,MAAM,EAAE,MAAM;YACd,IAAI,EAAE,gBAAgB;YACtB,IAAI,EAAE,EAAE,aAAa,EAAE,OAAO,EAAE;YAChC,iEAAiE;YACjE,6DAA6D;YAC7D,wDAAwD;YACxD,cAAc;SACf,CAAC,CAAA;QACF,OAAO,IAAI,CAAA;IACb,CAAC;IAED;;;OAGG;IACH,MAAM,CAAU,YAAY,GAAG;QAC7B,wBAAwB;QACxB,YAAY,EAAE,GAAG;QACjB,6BAA6B;QAC7B,iBAAiB,EAAE,GAAG;QACtB,6CAA6C;QAC7C,WAAW,EAAE,GAAG;KACR,CAAA;;AA9CZ,kCA+CC"}
|
|
@@ -2,6 +2,20 @@ import type { TupayClient } from '../client.js';
|
|
|
2
2
|
import type { ListResult, WebhookDelivery, WebhookEndpoint, WebhookEndpointWithSecret, WebhookEventType } from '../types.js';
|
|
3
3
|
import { type ListParams } from '../liste.js';
|
|
4
4
|
export interface CreateWebhookEndpointParams {
|
|
5
|
+
/**
|
|
6
|
+
* Clé d'idempotence. Le SDK n'en génère PAS ici, à dessein.
|
|
7
|
+
*
|
|
8
|
+
* Le `secret` n'est rendu qu'une fois et n'est pas conservé côté
|
|
9
|
+
* serveur : une reprise sous la même clé rend l'endpoint déjà créé
|
|
10
|
+
* avec `secret` à `null`, donc un endpoint que vous ne pourrez pas
|
|
11
|
+
* signer. Sans clé, une reprise crée un second endpoint, avec un
|
|
12
|
+
* secret lisible : c'est le moindre mal, et vous supprimez le
|
|
13
|
+
* premier.
|
|
14
|
+
*
|
|
15
|
+
* Fournissez-en une si vous préférez l'inverse, en connaissance de
|
|
16
|
+
* cause.
|
|
17
|
+
*/
|
|
18
|
+
idempotencyKey?: string;
|
|
5
19
|
/** HTTPS et port 443 obligatoires en mode live. */
|
|
6
20
|
url: string;
|
|
7
21
|
description?: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"webhook-endpoints.d.ts","sourceRoot":"","sources":["../../../src/resources/webhook-endpoints.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAA;AAC/C,OAAO,KAAK,EACV,UAAU,EACV,eAAe,EACf,eAAe,EACf,yBAAyB,EACzB,gBAAgB,EACjB,MAAM,aAAa,CAAA;AACpB,OAAO,EAIL,KAAK,UAAU,EAChB,MAAM,aAAa,CAAA;AAEpB,MAAM,WAAW,2BAA2B;IAC1C,mDAAmD;IACnD,GAAG,EAAE,MAAM,CAAA;IACX,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,sCAAsC;IACtC,aAAa,CAAC,EAAE,CAAC,gBAAgB,GAAG,GAAG,CAAC,EAAE,CAAA;CAC3C;AAED,MAAM,WAAW,2BAA2B;IAC1C,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IAC3B,aAAa,CAAC,EAAE,CAAC,gBAAgB,GAAG,GAAG,CAAC,EAAE,CAAA;IAC1C,MAAM,CAAC,EAAE,SAAS,GAAG,UAAU,CAAA;CAChC;AAED,MAAM,WAAW,oBAAqB,SAAQ,UAAU;IACtD,MAAM,CAAC,EAAE,eAAe,CAAC,QAAQ,CAAC,CAAA;IAClC,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB;AAED,qBAAa,gBAAgB;IACf,OAAO,CAAC,QAAQ,CAAC,MAAM;gBAAN,MAAM,EAAE,WAAW;IAEhD;;;;;;OAMG;IACG,MAAM,CACV,MAAM,EAAE,2BAA2B,GAClC,OAAO,CAAC,yBAAyB,CAAC;
|
|
1
|
+
{"version":3,"file":"webhook-endpoints.d.ts","sourceRoot":"","sources":["../../../src/resources/webhook-endpoints.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAA;AAC/C,OAAO,KAAK,EACV,UAAU,EACV,eAAe,EACf,eAAe,EACf,yBAAyB,EACzB,gBAAgB,EACjB,MAAM,aAAa,CAAA;AACpB,OAAO,EAIL,KAAK,UAAU,EAChB,MAAM,aAAa,CAAA;AAEpB,MAAM,WAAW,2BAA2B;IAC1C;;;;;;;;;;;;OAYG;IACH,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,mDAAmD;IACnD,GAAG,EAAE,MAAM,CAAA;IACX,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,sCAAsC;IACtC,aAAa,CAAC,EAAE,CAAC,gBAAgB,GAAG,GAAG,CAAC,EAAE,CAAA;CAC3C;AAED,MAAM,WAAW,2BAA2B;IAC1C,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IAC3B,aAAa,CAAC,EAAE,CAAC,gBAAgB,GAAG,GAAG,CAAC,EAAE,CAAA;IAC1C,MAAM,CAAC,EAAE,SAAS,GAAG,UAAU,CAAA;CAChC;AAED,MAAM,WAAW,oBAAqB,SAAQ,UAAU;IACtD,MAAM,CAAC,EAAE,eAAe,CAAC,QAAQ,CAAC,CAAA;IAClC,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB;AAED,qBAAa,gBAAgB;IACf,OAAO,CAAC,QAAQ,CAAC,MAAM;gBAAN,MAAM,EAAE,WAAW;IAEhD;;;;;;OAMG;IACG,MAAM,CACV,MAAM,EAAE,2BAA2B,GAClC,OAAO,CAAC,yBAAyB,CAAC;IAa/B,QAAQ,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC;IAQ9C,IAAI,CAAC,MAAM,GAAE,UAAe,GAAG,OAAO,CAAC,UAAU,CAAC,eAAe,CAAC,CAAC;IAUnE,MAAM,CACV,EAAE,EAAE,MAAM,EACV,MAAM,EAAE,2BAA2B,GAClC,OAAO,CAAC,eAAe,CAAC;IAS3B,2EAA2E;IACrE,GAAG,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAOpC;;;OAGG;IACG,cAAc,CAClB,EAAE,EAAE,MAAM,EACV,MAAM,GAAE,oBAAyB,GAChC,OAAO,CAAC,UAAU,CAAC,eAAe,CAAC,CAAC;CAaxC"}
|
|
@@ -15,10 +15,12 @@ class WebhookEndpoints {
|
|
|
15
15
|
* lisible ensuite. Perdu = supprimer l'endpoint et en recréer un.
|
|
16
16
|
*/
|
|
17
17
|
async create(params) {
|
|
18
|
+
const { idempotencyKey, ...body } = params;
|
|
18
19
|
const { data } = await this.client.request({
|
|
19
20
|
method: 'POST',
|
|
20
21
|
path: '/webhook-endpoints',
|
|
21
|
-
body
|
|
22
|
+
body,
|
|
23
|
+
idempotencyKey,
|
|
22
24
|
});
|
|
23
25
|
return data;
|
|
24
26
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"webhook-endpoints.js","sourceRoot":"","sources":["../../../src/resources/webhook-endpoints.ts"],"names":[],"mappings":";;;AAQA,0CAKoB;
|
|
1
|
+
{"version":3,"file":"webhook-endpoints.js","sourceRoot":"","sources":["../../../src/resources/webhook-endpoints.ts"],"names":[],"mappings":";;;AAQA,0CAKoB;AAoCpB,MAAa,gBAAgB;IACE;IAA7B,YAA6B,MAAmB;QAAnB,WAAM,GAAN,MAAM,CAAa;IAAG,CAAC;IAEpD;;;;;;OAMG;IACH,KAAK,CAAC,MAAM,CACV,MAAmC;QAEnC,MAAM,EAAE,cAAc,EAAE,GAAG,IAAI,EAAE,GAAG,MAAM,CAAA;QAC1C,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,OAAO,CAEvC;YACD,MAAM,EAAE,MAAM;YACd,IAAI,EAAE,oBAAoB;YAC1B,IAAI;YACJ,cAAc;SACf,CAAC,CAAA;QACF,OAAO,IAAI,CAAA;IACb,CAAC;IAED,KAAK,CAAC,QAAQ,CAAC,EAAU;QACvB,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,OAAO,CAA4B;YACpE,MAAM,EAAE,KAAK;YACb,IAAI,EAAE,sBAAsB,kBAAkB,CAAC,EAAE,CAAC,EAAE;SACrD,CAAC,CAAA;QACF,OAAO,IAAI,CAAA;IACb,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,SAAqB,EAAE;QAChC,OAAO,IAAA,0BAAe,EACpB,MAAM,IAAI,CAAC,MAAM,CAAC,OAAO,CAA8B;YACrD,MAAM,EAAE,KAAK;YACb,IAAI,EAAE,oBAAoB;YAC1B,KAAK,EAAE,IAAA,0BAAe,EAAC,MAAM,CAAC;SAC/B,CAAC,CACH,CAAA;IACH,CAAC;IAED,KAAK,CAAC,MAAM,CACV,EAAU,EACV,MAAmC;QAEnC,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,OAAO,CAA4B;YACpE,MAAM,EAAE,OAAO;YACf,IAAI,EAAE,sBAAsB,kBAAkB,CAAC,EAAE,CAAC,EAAE;YACpD,IAAI,EAAE,MAAM;SACb,CAAC,CAAA;QACF,OAAO,IAAI,CAAA;IACb,CAAC;IAED,2EAA2E;IAC3E,KAAK,CAAC,GAAG,CAAC,EAAU;QAClB,MAAM,IAAI,CAAC,MAAM,CAAC,OAAO,CAAU;YACjC,MAAM,EAAE,QAAQ;YAChB,IAAI,EAAE,sBAAsB,kBAAkB,CAAC,EAAE,CAAC,EAAE;SACrD,CAAC,CAAA;IACJ,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,cAAc,CAClB,EAAU,EACV,SAA+B,EAAE;QAEjC,OAAO,IAAA,0BAAe,EACpB,MAAM,IAAI,CAAC,MAAM,CAAC,OAAO,CAA8B;YACrD,MAAM,EAAE,KAAK;YACb,IAAI,EAAE,sBAAsB,kBAAkB,CAAC,EAAE,CAAC,aAAa;YAC/D,KAAK,EAAE;gBACL,GAAG,IAAA,0BAAe,EAAC,MAAM,CAAC;gBAC1B,MAAM,EAAE,MAAM,CAAC,MAAM;gBACrB,SAAS,EAAE,MAAM,CAAC,SAAS;aAC5B;SACF,CAAC,CACH,CAAA;IACH,CAAC;CACF;AAnFD,4CAmFC"}
|
package/dist/esm/errors.d.ts
CHANGED
|
@@ -7,9 +7,19 @@
|
|
|
7
7
|
* `code` est le code machine renvoyé par l'API (`validation_error`,
|
|
8
8
|
* `livemode_mismatch`, …). C'est lui qu'il faut tester — le `message`
|
|
9
9
|
* est en français, destiné à un humain, et peut changer sans préavis.
|
|
10
|
+
*
|
|
11
|
+
* `type` est la CLASSE de l'erreur : `invalid_request`, `authentication`,
|
|
12
|
+
* `permission`, `not_found`, `conflict`, `idempotency`, `rate_limit`,
|
|
13
|
+
* `provider`, `api`. Elle permet de traiter une famille entière sans
|
|
14
|
+
* énumérer chaque code, et c'est elle qui choisit la sous-classe
|
|
15
|
+
* ci-dessous. Retirer ou renommer un code est un changement cassant,
|
|
16
|
+
* réservé à une version datée ; en ajouter un ne l'est pas, et un code
|
|
17
|
+
* inconnu se traite par sa classe.
|
|
10
18
|
*/
|
|
11
19
|
export interface TupayErrorOptions {
|
|
12
20
|
code: string;
|
|
21
|
+
/** Classe d'erreur. Absente sur une API antérieure à la story 2.4. */
|
|
22
|
+
type?: string;
|
|
13
23
|
statusCode?: number;
|
|
14
24
|
requestId?: string;
|
|
15
25
|
cause?: unknown;
|
|
@@ -17,6 +27,8 @@ export interface TupayErrorOptions {
|
|
|
17
27
|
export declare class TupayError extends Error {
|
|
18
28
|
/** Code machine stable renvoyé par l'API. */
|
|
19
29
|
readonly code: string;
|
|
30
|
+
/** Classe d'erreur. `undefined` si l'API ne l'a pas renvoyée. */
|
|
31
|
+
readonly type?: string;
|
|
20
32
|
/** Statut HTTP, absent si l'erreur est survenue avant toute réponse. */
|
|
21
33
|
readonly statusCode?: number;
|
|
22
34
|
/** Identifiant de requête, à citer au support. */
|
|
@@ -35,9 +47,23 @@ export declare class TupayNotFoundError extends TupayError {
|
|
|
35
47
|
/** 400 / 422 — corps de requête invalide. */
|
|
36
48
|
export declare class TupayValidationError extends TupayError {
|
|
37
49
|
}
|
|
38
|
-
/** 409 — état incompatible (déjà remboursé,
|
|
50
|
+
/** 409 / 422 — état incompatible (déjà remboursé, plafond atteint). */
|
|
39
51
|
export declare class TupayConflictError extends TupayError {
|
|
40
52
|
}
|
|
53
|
+
/**
|
|
54
|
+
* 409 — le refus porte sur la clé d'idempotence, pas sur la requête.
|
|
55
|
+
*
|
|
56
|
+
* Hérite de `TupayConflictError` à dessein : ces deux codes sortaient
|
|
57
|
+
* déjà en 409, et tout `catch (err) { if (err instanceof
|
|
58
|
+
* TupayConflictError) }` existant doit continuer de les attraper. La
|
|
59
|
+
* sous-classe ajoute de la précision, elle n'en retire pas.
|
|
60
|
+
*
|
|
61
|
+
* `code` distingue les deux reprises, et elles sont opposées :
|
|
62
|
+
* `idempotency_key_reuse` → changez de clé, celle-ci a servi ailleurs
|
|
63
|
+
* `idempotency_in_progress` → retentez LE MÊME appel dans un instant
|
|
64
|
+
*/
|
|
65
|
+
export declare class TupayIdempotencyError extends TupayConflictError {
|
|
66
|
+
}
|
|
41
67
|
/** 429 — 100 req/min par marchand dépassées. */
|
|
42
68
|
export declare class TupayRateLimitError extends TupayError {
|
|
43
69
|
}
|
|
@@ -57,10 +83,21 @@ export declare class TupaySignatureVerificationError extends TupayError {
|
|
|
57
83
|
}
|
|
58
84
|
/**
|
|
59
85
|
* Construit l'erreur typée correspondant à une réponse HTTP.
|
|
60
|
-
*
|
|
86
|
+
*
|
|
87
|
+
* ── `type` d'abord, statut ensuite ─────────────────────────────────
|
|
88
|
+
* Le choix se faisait sur le seul statut HTTP. C'est une règle de forme,
|
|
89
|
+
* et elle se trompait : un 422 `limit_reached` devenait une
|
|
90
|
+
* `TupayValidationError`, alors que rien n'est invalide dans la requête
|
|
91
|
+
* — c'est une place qu'il faut libérer. Un 409 `idempotency_in_progress`
|
|
92
|
+
* devenait un `TupayConflictError` générique, alors que sa reprise est
|
|
93
|
+
* l'inverse de celle d'un conflit : retenter à l'identique.
|
|
94
|
+
*
|
|
95
|
+
* Le statut reste le repli, pour une API antérieure à la story 2.4 qui
|
|
96
|
+
* ne renverrait pas encore `type`.
|
|
61
97
|
*/
|
|
62
98
|
export declare function errorFromResponse(status: number, body: {
|
|
63
99
|
error?: string;
|
|
64
100
|
message?: string;
|
|
101
|
+
type?: string;
|
|
65
102
|
} | null, requestId?: string): TupayError;
|
|
66
103
|
//# sourceMappingURL=errors.d.ts.map
|
package/dist/esm/errors.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../src/errors.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../src/errors.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,MAAM,CAAA;IACZ,sEAAsE;IACtE,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,KAAK,CAAC,EAAE,OAAO,CAAA;CAChB;AAED,qBAAa,UAAW,SAAQ,KAAK;IACnC,6CAA6C;IAC7C,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,iEAAiE;IACjE,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAA;IACtB,wEAAwE;IACxE,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAA;IAC5B,kDAAkD;IAClD,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAA;gBAEf,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,iBAAiB;CAQxD;AAED,+CAA+C;AAC/C,qBAAa,wBAAyB,SAAQ,UAAU;CAAG;AAE3D,6EAA6E;AAC7E,qBAAa,oBAAqB,SAAQ,UAAU;CAAG;AAEvD,kEAAkE;AAClE,qBAAa,kBAAmB,SAAQ,UAAU;CAAG;AAErD,6CAA6C;AAC7C,qBAAa,oBAAqB,SAAQ,UAAU;CAAG;AAEvD,uEAAuE;AACvE,qBAAa,kBAAmB,SAAQ,UAAU;CAAG;AAErD;;;;;;;;;;;GAWG;AACH,qBAAa,qBAAsB,SAAQ,kBAAkB;CAAG;AAEhE,gDAAgD;AAChD,qBAAa,mBAAoB,SAAQ,UAAU;CAAG;AAEtD,iCAAiC;AACjC,qBAAa,aAAc,SAAQ,UAAU;CAAG;AAEhD,0DAA0D;AAC1D,qBAAa,cAAe,SAAQ,UAAU;CAAG;AAEjD,8EAA8E;AAC9E,qBAAa,oBAAqB,SAAQ,UAAU;gBACtC,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,OAAO;CAG7C;AAED,0DAA0D;AAC1D,qBAAa,+BAAgC,SAAQ,UAAU;gBACjD,OAAO,EAAE,MAAM;CAG5B;AAeD;;;;;;;;;;;;;GAaG;AACH,wBAAgB,iBAAiB,CAC/B,MAAM,EAAE,MAAM,EACd,IAAI,EAAE;IAAE,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,EAChE,SAAS,CAAC,EAAE,MAAM,GACjB,UAAU,CA2BZ"}
|
package/dist/esm/errors.js
CHANGED
|
@@ -7,10 +7,20 @@
|
|
|
7
7
|
* `code` est le code machine renvoyé par l'API (`validation_error`,
|
|
8
8
|
* `livemode_mismatch`, …). C'est lui qu'il faut tester — le `message`
|
|
9
9
|
* est en français, destiné à un humain, et peut changer sans préavis.
|
|
10
|
+
*
|
|
11
|
+
* `type` est la CLASSE de l'erreur : `invalid_request`, `authentication`,
|
|
12
|
+
* `permission`, `not_found`, `conflict`, `idempotency`, `rate_limit`,
|
|
13
|
+
* `provider`, `api`. Elle permet de traiter une famille entière sans
|
|
14
|
+
* énumérer chaque code, et c'est elle qui choisit la sous-classe
|
|
15
|
+
* ci-dessous. Retirer ou renommer un code est un changement cassant,
|
|
16
|
+
* réservé à une version datée ; en ajouter un ne l'est pas, et un code
|
|
17
|
+
* inconnu se traite par sa classe.
|
|
10
18
|
*/
|
|
11
19
|
export class TupayError extends Error {
|
|
12
20
|
/** Code machine stable renvoyé par l'API. */
|
|
13
21
|
code;
|
|
22
|
+
/** Classe d'erreur. `undefined` si l'API ne l'a pas renvoyée. */
|
|
23
|
+
type;
|
|
14
24
|
/** Statut HTTP, absent si l'erreur est survenue avant toute réponse. */
|
|
15
25
|
statusCode;
|
|
16
26
|
/** Identifiant de requête, à citer au support. */
|
|
@@ -19,6 +29,7 @@ export class TupayError extends Error {
|
|
|
19
29
|
super(message, { cause: options.cause });
|
|
20
30
|
this.name = new.target.name;
|
|
21
31
|
this.code = options.code;
|
|
32
|
+
this.type = options.type;
|
|
22
33
|
this.statusCode = options.statusCode;
|
|
23
34
|
this.requestId = options.requestId;
|
|
24
35
|
}
|
|
@@ -35,9 +46,23 @@ export class TupayNotFoundError extends TupayError {
|
|
|
35
46
|
/** 400 / 422 — corps de requête invalide. */
|
|
36
47
|
export class TupayValidationError extends TupayError {
|
|
37
48
|
}
|
|
38
|
-
/** 409 — état incompatible (déjà remboursé,
|
|
49
|
+
/** 409 / 422 — état incompatible (déjà remboursé, plafond atteint). */
|
|
39
50
|
export class TupayConflictError extends TupayError {
|
|
40
51
|
}
|
|
52
|
+
/**
|
|
53
|
+
* 409 — le refus porte sur la clé d'idempotence, pas sur la requête.
|
|
54
|
+
*
|
|
55
|
+
* Hérite de `TupayConflictError` à dessein : ces deux codes sortaient
|
|
56
|
+
* déjà en 409, et tout `catch (err) { if (err instanceof
|
|
57
|
+
* TupayConflictError) }` existant doit continuer de les attraper. La
|
|
58
|
+
* sous-classe ajoute de la précision, elle n'en retire pas.
|
|
59
|
+
*
|
|
60
|
+
* `code` distingue les deux reprises, et elles sont opposées :
|
|
61
|
+
* `idempotency_key_reuse` → changez de clé, celle-ci a servi ailleurs
|
|
62
|
+
* `idempotency_in_progress` → retentez LE MÊME appel dans un instant
|
|
63
|
+
*/
|
|
64
|
+
export class TupayIdempotencyError extends TupayConflictError {
|
|
65
|
+
}
|
|
41
66
|
/** 429 — 100 req/min par marchand dépassées. */
|
|
42
67
|
export class TupayRateLimitError extends TupayError {
|
|
43
68
|
}
|
|
@@ -59,14 +84,39 @@ export class TupaySignatureVerificationError extends TupayError {
|
|
|
59
84
|
super(message, { code: 'signature_verification_failed' });
|
|
60
85
|
}
|
|
61
86
|
}
|
|
87
|
+
/** La classe d'erreur de l'API vers la sous-classe du SDK. */
|
|
88
|
+
const PAR_TYPE = {
|
|
89
|
+
invalid_request: TupayValidationError,
|
|
90
|
+
authentication: TupayAuthenticationError,
|
|
91
|
+
permission: TupayPermissionError,
|
|
92
|
+
not_found: TupayNotFoundError,
|
|
93
|
+
conflict: TupayConflictError,
|
|
94
|
+
idempotency: TupayIdempotencyError,
|
|
95
|
+
rate_limit: TupayRateLimitError,
|
|
96
|
+
provider: TupayBaasError,
|
|
97
|
+
api: TupayApiError,
|
|
98
|
+
};
|
|
62
99
|
/**
|
|
63
100
|
* Construit l'erreur typée correspondant à une réponse HTTP.
|
|
64
|
-
*
|
|
101
|
+
*
|
|
102
|
+
* ── `type` d'abord, statut ensuite ─────────────────────────────────
|
|
103
|
+
* Le choix se faisait sur le seul statut HTTP. C'est une règle de forme,
|
|
104
|
+
* et elle se trompait : un 422 `limit_reached` devenait une
|
|
105
|
+
* `TupayValidationError`, alors que rien n'est invalide dans la requête
|
|
106
|
+
* — c'est une place qu'il faut libérer. Un 409 `idempotency_in_progress`
|
|
107
|
+
* devenait un `TupayConflictError` générique, alors que sa reprise est
|
|
108
|
+
* l'inverse de celle d'un conflit : retenter à l'identique.
|
|
109
|
+
*
|
|
110
|
+
* Le statut reste le repli, pour une API antérieure à la story 2.4 qui
|
|
111
|
+
* ne renverrait pas encore `type`.
|
|
65
112
|
*/
|
|
66
113
|
export function errorFromResponse(status, body, requestId) {
|
|
67
114
|
const code = body?.error ?? 'server_error';
|
|
68
115
|
const message = body?.message ?? `Requête échouée (HTTP ${status}).`;
|
|
69
|
-
const options = { code, statusCode: status, requestId };
|
|
116
|
+
const options = { code, type: body?.type, statusCode: status, requestId };
|
|
117
|
+
const parType = body?.type ? PAR_TYPE[body.type] : undefined;
|
|
118
|
+
if (parType)
|
|
119
|
+
return new parType(message, options);
|
|
70
120
|
switch (status) {
|
|
71
121
|
case 400:
|
|
72
122
|
case 422:
|
package/dist/esm/errors.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/errors.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/errors.ts"],"names":[],"mappings":"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"}
|
package/dist/esm/index.d.ts
CHANGED
|
@@ -72,7 +72,7 @@ export { TupayClient } from './client.js';
|
|
|
72
72
|
export type { TupayOptions, RequestOptions } from './client.js';
|
|
73
73
|
export { constructEvent, DEFAULT_TOLERANCE_SECONDS } from './webhooks.js';
|
|
74
74
|
export type { ConstructEventOptions } from './webhooks.js';
|
|
75
|
-
export { TupayError, TupayAuthenticationError, TupayPermissionError, TupayNotFoundError, TupayValidationError, TupayConflictError, TupayRateLimitError, TupayApiError, TupayBaasError, TupayConnectionError, TupaySignatureVerificationError, } from './errors.js';
|
|
75
|
+
export { TupayError, TupayAuthenticationError, TupayPermissionError, TupayNotFoundError, TupayValidationError, TupayConflictError, TupayIdempotencyError, TupayRateLimitError, TupayApiError, TupayBaasError, TupayConnectionError, TupaySignatureVerificationError, } from './errors.js';
|
|
76
76
|
export type * from './types.js';
|
|
77
77
|
export type { CreatePaymentIntentParams } from './resources/payment-intents.js';
|
|
78
78
|
export type { CreatePaymentLinkParams } from './resources/payment-links.js';
|
package/dist/esm/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,EAAe,KAAK,YAAY,EAAE,MAAM,aAAa,CAAA;AAC5D,OAAO,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAA;AAC/D,OAAO,EAAE,YAAY,EAAE,MAAM,8BAA8B,CAAA;AAC3D,OAAO,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAA;AAC1D,OAAO,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAA;AAChD,OAAO,EAAE,gBAAgB,EAAE,MAAM,kCAAkC,CAAA;AACnE,OAAO,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAA;AACpD,OAAO,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAA;AAC9C,OAAO,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAA;AACzD,OAAO,EAAkB,KAAK,qBAAqB,EAAE,MAAM,eAAe,CAAA;AAC1E,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAA;AAE9C,qBAAa,KAAK;;IAChB,QAAQ,CAAC,cAAc,EAAE,cAAc,CAAA;IACvC,QAAQ,CAAC,YAAY,EAAE,YAAY,CAAA;IACnC,QAAQ,CAAC,YAAY,EAAE,YAAY,CAAA;IACnC,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAA;IACzB,QAAQ,CAAC,gBAAgB,EAAE,gBAAgB,CAAA;IAC3C,QAAQ,CAAC,SAAS,EAAE,SAAS,CAAA;IAC7B,8DAA8D;IAC9D,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;IACvB,sEAAsE;IACtE,QAAQ,CAAC,WAAW,EAAE,WAAW,CAAA;IAEjC,uEAAuE;IACvE,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAA;gBAId,MAAM,EAAE,MAAM,EAAE,OAAO,GAAE,YAAiB;IActD;;;;;;;;;;;;;;;;;;;;;OAqBG;IACH,QAAQ,CAAC,QAAQ;gCAEJ,MAAM,GAAG,MAAM,UAChB,MAAM,GAAG,IAAI,GAAG,SAAS,UACzB,MAAM,YACJ,qBAAqB,GAC9B,YAAY;MAGhB;IAED,8CAA8C;IAC9C,MAAM,CAAC,cAAc,IAAI,MAAM;CAGhC;AAED,eAAe,KAAK,CAAA;AAEpB,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAA;AACzC,YAAY,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;AAC/D,OAAO,EAAE,cAAc,EAAE,yBAAyB,EAAE,MAAM,eAAe,CAAA;AACzE,YAAY,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAA;AAE1D,OAAO,EACL,UAAU,EACV,wBAAwB,EACxB,oBAAoB,EACpB,kBAAkB,EAClB,oBAAoB,EACpB,kBAAkB,EAClB,mBAAmB,EACnB,aAAa,EACb,cAAc,EACd,oBAAoB,EACpB,+BAA+B,GAChC,MAAM,aAAa,CAAA;AAEpB,mBAAmB,YAAY,CAAA;AAE/B,YAAY,EAAE,yBAAyB,EAAE,MAAM,gCAAgC,CAAA;AAC/E,YAAY,EAAE,uBAAuB,EAAE,MAAM,8BAA8B,CAAA;AAC3E,YAAY,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAA;AACzE,YAAY,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAA;AACnF,YAAY,EACV,2BAA2B,EAC3B,2BAA2B,EAC3B,oBAAoB,GACrB,MAAM,kCAAkC,CAAA;AACzC,YAAY,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAA;AAC7D,OAAO,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAA;AAC9C,YAAY,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAA;AAClF,OAAO,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAA"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,EAAe,KAAK,YAAY,EAAE,MAAM,aAAa,CAAA;AAC5D,OAAO,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAA;AAC/D,OAAO,EAAE,YAAY,EAAE,MAAM,8BAA8B,CAAA;AAC3D,OAAO,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAA;AAC1D,OAAO,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAA;AAChD,OAAO,EAAE,gBAAgB,EAAE,MAAM,kCAAkC,CAAA;AACnE,OAAO,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAA;AACpD,OAAO,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAA;AAC9C,OAAO,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAA;AACzD,OAAO,EAAkB,KAAK,qBAAqB,EAAE,MAAM,eAAe,CAAA;AAC1E,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAA;AAE9C,qBAAa,KAAK;;IAChB,QAAQ,CAAC,cAAc,EAAE,cAAc,CAAA;IACvC,QAAQ,CAAC,YAAY,EAAE,YAAY,CAAA;IACnC,QAAQ,CAAC,YAAY,EAAE,YAAY,CAAA;IACnC,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAA;IACzB,QAAQ,CAAC,gBAAgB,EAAE,gBAAgB,CAAA;IAC3C,QAAQ,CAAC,SAAS,EAAE,SAAS,CAAA;IAC7B,8DAA8D;IAC9D,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;IACvB,sEAAsE;IACtE,QAAQ,CAAC,WAAW,EAAE,WAAW,CAAA;IAEjC,uEAAuE;IACvE,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAA;gBAId,MAAM,EAAE,MAAM,EAAE,OAAO,GAAE,YAAiB;IActD;;;;;;;;;;;;;;;;;;;;;OAqBG;IACH,QAAQ,CAAC,QAAQ;gCAEJ,MAAM,GAAG,MAAM,UAChB,MAAM,GAAG,IAAI,GAAG,SAAS,UACzB,MAAM,YACJ,qBAAqB,GAC9B,YAAY;MAGhB;IAED,8CAA8C;IAC9C,MAAM,CAAC,cAAc,IAAI,MAAM;CAGhC;AAED,eAAe,KAAK,CAAA;AAEpB,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAA;AACzC,YAAY,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;AAC/D,OAAO,EAAE,cAAc,EAAE,yBAAyB,EAAE,MAAM,eAAe,CAAA;AACzE,YAAY,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAA;AAE1D,OAAO,EACL,UAAU,EACV,wBAAwB,EACxB,oBAAoB,EACpB,kBAAkB,EAClB,oBAAoB,EACpB,kBAAkB,EAClB,qBAAqB,EACrB,mBAAmB,EACnB,aAAa,EACb,cAAc,EACd,oBAAoB,EACpB,+BAA+B,GAChC,MAAM,aAAa,CAAA;AAEpB,mBAAmB,YAAY,CAAA;AAE/B,YAAY,EAAE,yBAAyB,EAAE,MAAM,gCAAgC,CAAA;AAC/E,YAAY,EAAE,uBAAuB,EAAE,MAAM,8BAA8B,CAAA;AAC3E,YAAY,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAA;AACzE,YAAY,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAA;AACnF,YAAY,EACV,2BAA2B,EAC3B,2BAA2B,EAC3B,oBAAoB,GACrB,MAAM,kCAAkC,CAAA;AACzC,YAAY,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAA;AAC7D,OAAO,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAA;AAC9C,YAAY,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAA;AAClF,OAAO,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAA"}
|
package/dist/esm/index.js
CHANGED
|
@@ -84,7 +84,7 @@ export class Tupay {
|
|
|
84
84
|
export default Tupay;
|
|
85
85
|
export { TupayClient } from './client.js';
|
|
86
86
|
export { constructEvent, DEFAULT_TOLERANCE_SECONDS } from './webhooks.js';
|
|
87
|
-
export { TupayError, TupayAuthenticationError, TupayPermissionError, TupayNotFoundError, TupayValidationError, TupayConflictError, TupayRateLimitError, TupayApiError, TupayBaasError, TupayConnectionError, TupaySignatureVerificationError, } from './errors.js';
|
|
87
|
+
export { TupayError, TupayAuthenticationError, TupayPermissionError, TupayNotFoundError, TupayValidationError, TupayConflictError, TupayIdempotencyError, TupayRateLimitError, TupayApiError, TupayBaasError, TupayConnectionError, TupaySignatureVerificationError, } from './errors.js';
|
|
88
88
|
export { Events } from './resources/events.js';
|
|
89
89
|
export { TestHelpers } from './resources/test-helpers.js';
|
|
90
90
|
//# sourceMappingURL=index.js.map
|
package/dist/esm/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -50,7 +50,7 @@ export declare class Events {
|
|
|
50
50
|
* await tupay.events.resend(event.id)
|
|
51
51
|
* }
|
|
52
52
|
*/
|
|
53
|
-
resend(id: string): Promise<ResendResult>;
|
|
53
|
+
resend(id: string, idempotencyKey?: string): Promise<ResendResult>;
|
|
54
54
|
/**
|
|
55
55
|
* Parcourt toutes les pages, un événement à la fois.
|
|
56
56
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"events.d.ts","sourceRoot":"","sources":["../../../src/resources/events.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAA;AAC/C,OAAO,KAAK,EACV,UAAU,EACV,UAAU,EACV,gBAAgB,EAChB,YAAY,EACb,MAAM,aAAa,CAAA;AACpB,OAAO,EAIL,KAAK,UAAU,EAChB,MAAM,aAAa,CAAA;AAEpB,MAAM,WAAW,gBAAiB,SAAQ,UAAU;IAClD;;;;;;;OAOG;IACH,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,IAAI,CAAC,EAAE,gBAAgB,CAAA;CACxB;AAED,qBAAa,MAAM;IACL,OAAO,CAAC,QAAQ,CAAC,MAAM;gBAAN,MAAM,EAAE,WAAW;IAEhD;;;;;;;;;;;OAWG;IACG,IAAI,CAAC,MAAM,GAAE,gBAAqB,GAAG,OAAO,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;IAc1E;;;;;OAKG;IACG,QAAQ,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC;IAQ/C;;;;;;;;;;;;;OAaG;IACG,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"events.d.ts","sourceRoot":"","sources":["../../../src/resources/events.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAA;AAC/C,OAAO,KAAK,EACV,UAAU,EACV,UAAU,EACV,gBAAgB,EAChB,YAAY,EACb,MAAM,aAAa,CAAA;AACpB,OAAO,EAIL,KAAK,UAAU,EAChB,MAAM,aAAa,CAAA;AAEpB,MAAM,WAAW,gBAAiB,SAAQ,UAAU;IAClD;;;;;;;OAOG;IACH,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,IAAI,CAAC,EAAE,gBAAgB,CAAA;CACxB;AAED,qBAAa,MAAM;IACL,OAAO,CAAC,QAAQ,CAAC,MAAM;gBAAN,MAAM,EAAE,WAAW;IAEhD;;;;;;;;;;;OAWG;IACG,IAAI,CAAC,MAAM,GAAE,gBAAqB,GAAG,OAAO,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;IAc1E;;;;;OAKG;IACG,QAAQ,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC;IAQ/C;;;;;;;;;;;;;OAaG;IACG,MAAM,CAAC,EAAE,EAAE,MAAM,EAAE,cAAc,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC;IAcxE;;;;;;;OAOG;IACI,cAAc,CACnB,MAAM,GAAE,gBAAqB,GAC5B,cAAc,CAAC,UAAU,EAAE,IAAI,EAAE,SAAS,CAAC;CAyB/C"}
|
|
@@ -54,10 +54,16 @@ export class Events {
|
|
|
54
54
|
* await tupay.events.resend(event.id)
|
|
55
55
|
* }
|
|
56
56
|
*/
|
|
57
|
-
async resend(id) {
|
|
57
|
+
async resend(id, idempotencyKey) {
|
|
58
|
+
// Aucune clé n'est générée par défaut ici, contrairement aux autres
|
|
59
|
+
// créations. Le rejeu d'un événement CRÉE une livraison : c'est sa
|
|
60
|
+
// raison d'être, et deux appels délibérés doivent en créer deux.
|
|
61
|
+
// Fournir une clé rend l'appel rejouable sans risque, mais c'est un
|
|
62
|
+
// choix de l'appelant, pas un défaut du SDK.
|
|
58
63
|
const { data } = await this.client.request({
|
|
59
64
|
method: 'POST',
|
|
60
65
|
path: `/events/${encodeURIComponent(id)}/resend`,
|
|
66
|
+
idempotencyKey,
|
|
61
67
|
});
|
|
62
68
|
return data;
|
|
63
69
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"events.js","sourceRoot":"","sources":["../../../src/resources/events.ts"],"names":[],"mappings":"AAOA,OAAO,EACL,eAAe,EACf,eAAe,GAGhB,MAAM,aAAa,CAAA;AAepB,MAAM,OAAO,MAAM;IACY;IAA7B,YAA6B,MAAmB;QAAnB,WAAM,GAAN,MAAM,CAAa;IAAG,CAAC;IAEpD;;;;;;;;;;;OAWG;IACH,KAAK,CAAC,IAAI,CAAC,SAA2B,EAAE;QACtC,MAAM,OAAO,GAAG,eAAe,CAAC;YAC9B,GAAG,MAAM;YACT,aAAa,EAAE,MAAM,CAAC,aAAa,IAAI,MAAM,CAAC,KAAK;SACpD,CAAC,CAAA;QACF,OAAO,eAAe,CACpB,MAAM,IAAI,CAAC,MAAM,CAAC,OAAO,CAAyB;YAChD,MAAM,EAAE,KAAK;YACb,IAAI,EAAE,SAAS;YACf,KAAK,EAAE,EAAE,GAAG,OAAO,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE;SACzC,CAAC,CACH,CAAA;IACH,CAAC;IAED;;;;;OAKG;IACH,KAAK,CAAC,QAAQ,CAAC,EAAU;QACvB,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,OAAO,CAAuB;YAC/D,MAAM,EAAE,KAAK;YACb,IAAI,EAAE,WAAW,kBAAkB,CAAC,EAAE,CAAC,EAAE;SAC1C,CAAC,CAAA;QACF,OAAO,IAAI,CAAA;IACb,CAAC;IAED;;;;;;;;;;;;;OAaG;IACH,KAAK,CAAC,MAAM,CAAC,EAAU;
|
|
1
|
+
{"version":3,"file":"events.js","sourceRoot":"","sources":["../../../src/resources/events.ts"],"names":[],"mappings":"AAOA,OAAO,EACL,eAAe,EACf,eAAe,GAGhB,MAAM,aAAa,CAAA;AAepB,MAAM,OAAO,MAAM;IACY;IAA7B,YAA6B,MAAmB;QAAnB,WAAM,GAAN,MAAM,CAAa;IAAG,CAAC;IAEpD;;;;;;;;;;;OAWG;IACH,KAAK,CAAC,IAAI,CAAC,SAA2B,EAAE;QACtC,MAAM,OAAO,GAAG,eAAe,CAAC;YAC9B,GAAG,MAAM;YACT,aAAa,EAAE,MAAM,CAAC,aAAa,IAAI,MAAM,CAAC,KAAK;SACpD,CAAC,CAAA;QACF,OAAO,eAAe,CACpB,MAAM,IAAI,CAAC,MAAM,CAAC,OAAO,CAAyB;YAChD,MAAM,EAAE,KAAK;YACb,IAAI,EAAE,SAAS;YACf,KAAK,EAAE,EAAE,GAAG,OAAO,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE;SACzC,CAAC,CACH,CAAA;IACH,CAAC;IAED;;;;;OAKG;IACH,KAAK,CAAC,QAAQ,CAAC,EAAU;QACvB,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,OAAO,CAAuB;YAC/D,MAAM,EAAE,KAAK;YACb,IAAI,EAAE,WAAW,kBAAkB,CAAC,EAAE,CAAC,EAAE;SAC1C,CAAC,CAAA;QACF,OAAO,IAAI,CAAA;IACb,CAAC;IAED;;;;;;;;;;;;;OAaG;IACH,KAAK,CAAC,MAAM,CAAC,EAAU,EAAE,cAAuB;QAC9C,oEAAoE;QACpE,mEAAmE;QACnE,iEAAiE;QACjE,oEAAoE;QACpE,6CAA6C;QAC7C,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,OAAO,CAAyB;YACjE,MAAM,EAAE,MAAM;YACd,IAAI,EAAE,WAAW,kBAAkB,CAAC,EAAE,CAAC,SAAS;YAChD,cAAc;SACf,CAAC,CAAA;QACF,OAAO,IAAI,CAAA;IACb,CAAC;IAED;;;;;;;OAOG;IACH,KAAK,CAAC,CAAC,cAAc,CACnB,SAA2B,EAAE;QAE7B,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,IAAI,GAAG,CAAA;QACjC,IAAI,aAAa,GAAG,MAAM,CAAC,aAAa,IAAI,MAAM,CAAC,KAAK,CAAA;QACxD,IAAI,SAA6B,CAAA;QAEjC,SAAS,CAAC;YACR,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC;gBAC3B,GAAG,MAAM;gBACT,KAAK;gBACL,KAAK,EAAE,SAAS;gBAChB,aAAa;aACd,CAAC,CAAA;YACF,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,IAAI;gBAAE,MAAM,KAAK,CAAA;YAC1C,8DAA8D;YAC9D,+DAA+D;YAC/D,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAA;YAC/C,IAAI,CAAC,IAAI,CAAC,OAAO,IAAI,CAAC,OAAO;gBAAE,OAAM;YACrC,oEAAoE;YACpE,iEAAiE;YACjE,iBAAiB;YACjB,IAAI,OAAO,CAAC,EAAE,KAAK,SAAS;gBAAE,OAAM;YACpC,SAAS,GAAG,OAAO,CAAC,EAAE,CAAA;YACtB,aAAa,GAAG,OAAO,CAAC,EAAE,CAAA;QAC5B,CAAC;IACH,CAAC;CACF"}
|
|
@@ -1,7 +1,12 @@
|
|
|
1
|
-
import
|
|
1
|
+
import { TupayClient } from '../client.js';
|
|
2
2
|
import type { ListResult, PaymentLink } from '../types.js';
|
|
3
3
|
import { type ListParams } from '../liste.js';
|
|
4
4
|
export interface CreatePaymentLinkParams {
|
|
5
|
+
/**
|
|
6
|
+
* Clé d'idempotence. Omise, le SDK en génère une (UUID v4) : la
|
|
7
|
+
* requête devient rejouable, et une reprise ne crée pas un second lien.
|
|
8
|
+
*/
|
|
9
|
+
idempotencyKey?: string;
|
|
5
10
|
/** Entier XPF, entre 100 et 10 000 000. Le XPF n'a pas de centimes. */
|
|
6
11
|
amountXpf: number;
|
|
7
12
|
description: string;
|
|
@@ -24,9 +29,14 @@ export declare class PaymentLinks {
|
|
|
24
29
|
/**
|
|
25
30
|
* Crée un lien de paiement partageable.
|
|
26
31
|
*
|
|
27
|
-
*
|
|
28
|
-
*
|
|
29
|
-
*
|
|
32
|
+
* Rejouable : le SDK envoie une clé d'idempotence, générée si vous n'en
|
|
33
|
+
* fournissez pas. Une reprise après timeout rend le lien déjà créé au
|
|
34
|
+
* lieu d'en créer un second avec un second slug.
|
|
35
|
+
*
|
|
36
|
+
* L'API a longtemps ignoré cet en-tête ici, et ce commentaire disait le
|
|
37
|
+
* contraire de ce qu'il dit aujourd'hui. Elle l'honore depuis la
|
|
38
|
+
* version qui documente `Idempotency-Key` comme facultatif sur cette
|
|
39
|
+
* opération.
|
|
30
40
|
*/
|
|
31
41
|
create(params: CreatePaymentLinkParams): Promise<PaymentLink>;
|
|
32
42
|
retrieve(id: string): Promise<PaymentLink>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"payment-links.d.ts","sourceRoot":"","sources":["../../../src/resources/payment-links.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"payment-links.d.ts","sourceRoot":"","sources":["../../../src/resources/payment-links.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAA;AAC1C,OAAO,KAAK,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,aAAa,CAAA;AAC1D,OAAO,EAIL,KAAK,UAAU,EAChB,MAAM,aAAa,CAAA;AAEpB,MAAM,WAAW,uBAAuB;IACtC;;;OAGG;IACH,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,uEAAuE;IACvE,SAAS,EAAE,MAAM,CAAA;IACjB,WAAW,EAAE,MAAM,CAAA;IACnB;;;;;;;OAOG;IACH,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,uEAAuE;IACvE,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;CAClC;AAED,qBAAa,YAAY;;IACX,OAAO,CAAC,QAAQ,CAAC,MAAM;gBAAN,MAAM,EAAE,WAAW;IAEhD;;;;;;;;;;;OAWG;IACG,MAAM,CAAC,MAAM,EAAE,uBAAuB,GAAG,OAAO,CAAC,WAAW,CAAC;IAW7D,QAAQ,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC;IAQ1C,IAAI,CAAC,MAAM,GAAE,UAAe,GAAG,OAAO,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;IAUrE,yEAAyE;IACnE,UAAU,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC;IAI5C,QAAQ,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC;CAYjD"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { TupayClient } from '../client.js';
|
|
1
2
|
import { normaliserListe, parametresListe, } from '../liste.js';
|
|
2
3
|
export class PaymentLinks {
|
|
3
4
|
client;
|
|
@@ -7,15 +8,22 @@ export class PaymentLinks {
|
|
|
7
8
|
/**
|
|
8
9
|
* Crée un lien de paiement partageable.
|
|
9
10
|
*
|
|
10
|
-
*
|
|
11
|
-
*
|
|
12
|
-
*
|
|
11
|
+
* Rejouable : le SDK envoie une clé d'idempotence, générée si vous n'en
|
|
12
|
+
* fournissez pas. Une reprise après timeout rend le lien déjà créé au
|
|
13
|
+
* lieu d'en créer un second avec un second slug.
|
|
14
|
+
*
|
|
15
|
+
* L'API a longtemps ignoré cet en-tête ici, et ce commentaire disait le
|
|
16
|
+
* contraire de ce qu'il dit aujourd'hui. Elle l'honore depuis la
|
|
17
|
+
* version qui documente `Idempotency-Key` comme facultatif sur cette
|
|
18
|
+
* opération.
|
|
13
19
|
*/
|
|
14
20
|
async create(params) {
|
|
21
|
+
const { idempotencyKey, ...body } = params;
|
|
15
22
|
const { data } = await this.client.request({
|
|
16
23
|
method: 'POST',
|
|
17
24
|
path: '/payment-links',
|
|
18
|
-
body
|
|
25
|
+
body,
|
|
26
|
+
idempotencyKey: idempotencyKey ?? TupayClient.idempotencyKey(),
|
|
19
27
|
});
|
|
20
28
|
return data;
|
|
21
29
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"payment-links.js","sourceRoot":"","sources":["../../../src/resources/payment-links.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"payment-links.js","sourceRoot":"","sources":["../../../src/resources/payment-links.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAA;AAE1C,OAAO,EACL,eAAe,EACf,eAAe,GAGhB,MAAM,aAAa,CAAA;AAwBpB,MAAM,OAAO,YAAY;IACM;IAA7B,YAA6B,MAAmB;QAAnB,WAAM,GAAN,MAAM,CAAa;IAAG,CAAC;IAEpD;;;;;;;;;;;OAWG;IACH,KAAK,CAAC,MAAM,CAAC,MAA+B;QAC1C,MAAM,EAAE,cAAc,EAAE,GAAG,IAAI,EAAE,GAAG,MAAM,CAAA;QAC1C,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,OAAO,CAAwB;YAChE,MAAM,EAAE,MAAM;YACd,IAAI,EAAE,gBAAgB;YACtB,IAAI;YACJ,cAAc,EAAE,cAAc,IAAI,WAAW,CAAC,cAAc,EAAE;SAC/D,CAAC,CAAA;QACF,OAAO,IAAI,CAAA;IACb,CAAC;IAED,KAAK,CAAC,QAAQ,CAAC,EAAU;QACvB,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,OAAO,CAAwB;YAChE,MAAM,EAAE,KAAK;YACb,IAAI,EAAE,kBAAkB,kBAAkB,CAAC,EAAE,CAAC,EAAE;SACjD,CAAC,CAAA;QACF,OAAO,IAAI,CAAA;IACb,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,SAAqB,EAAE;QAChC,OAAO,eAAe,CACpB,MAAM,IAAI,CAAC,MAAM,CAAC,OAAO,CAA0B;YACjD,MAAM,EAAE,KAAK;YACb,IAAI,EAAE,gBAAgB;YACtB,KAAK,EAAE,eAAe,CAAC,MAAM,CAAC;SAC/B,CAAC,CACH,CAAA;IACH,CAAC;IAED,yEAAyE;IACzE,KAAK,CAAC,UAAU,CAAC,EAAU;QACzB,OAAO,IAAI,CAAC,UAAU,CAAC,EAAE,EAAE,KAAK,CAAC,CAAA;IACnC,CAAC;IAED,KAAK,CAAC,QAAQ,CAAC,EAAU;QACvB,OAAO,IAAI,CAAC,UAAU,CAAC,EAAE,EAAE,IAAI,CAAC,CAAA;IAClC,CAAC;IAED,KAAK,CAAC,UAAU,CAAC,EAAU,EAAE,MAAe;QAC1C,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,OAAO,CAAwB;YAChE,MAAM,EAAE,OAAO;YACf,IAAI,EAAE,kBAAkB,kBAAkB,CAAC,EAAE,CAAC,EAAE;YAChD,IAAI,EAAE,EAAE,MAAM,EAAE;SACjB,CAAC,CAAA;QACF,OAAO,IAAI,CAAA;IACb,CAAC;CACF"}
|
|
@@ -25,7 +25,7 @@ export declare class TestHelpers {
|
|
|
25
25
|
* @throws {TupayError} si le client a été construit avec une clé live —
|
|
26
26
|
* on échoue localement plutôt que d'envoyer une requête vouée au 403.
|
|
27
27
|
*/
|
|
28
|
-
simulatePayment(transactionId: string, outcome: SimulateOutcome): Promise<SimulateResult>;
|
|
28
|
+
simulatePayment(transactionId: string, outcome: SimulateOutcome, idempotencyKey?: string): Promise<SimulateResult>;
|
|
29
29
|
/**
|
|
30
30
|
* Montants XPF qui provoquent un échec **dès la création** de l'intent.
|
|
31
31
|
* Pratique pour tester vos écrans d'erreur.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"test-helpers.d.ts","sourceRoot":"","sources":["../../../src/resources/test-helpers.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAA;AAC/C,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAA;AAE9C,MAAM,MAAM,eAAe,GAAG,WAAW,GAAG,QAAQ,GAAG,YAAY,CAAA;AAEnE,MAAM,WAAW,cAAe,SAAQ,WAAW;IACjD,SAAS,EAAE,IAAI,CAAA;IACf,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,iBAAiB,CAAC,EAAE,MAAM,CAAA;IAC1B,cAAc,CAAC,EAAE,OAAO,CAAA;CACzB;AAED;;;;;;GAMG;AACH,qBAAa,WAAW;IACV,OAAO,CAAC,QAAQ,CAAC,MAAM;gBAAN,MAAM,EAAE,WAAW;IAEhD;;;;;;;OAOG;IACG,eAAe,CACnB,aAAa,EAAE,MAAM,EACrB,OAAO,EAAE,eAAe,
|
|
1
|
+
{"version":3,"file":"test-helpers.d.ts","sourceRoot":"","sources":["../../../src/resources/test-helpers.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAA;AAC/C,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAA;AAE9C,MAAM,MAAM,eAAe,GAAG,WAAW,GAAG,QAAQ,GAAG,YAAY,CAAA;AAEnE,MAAM,WAAW,cAAe,SAAQ,WAAW;IACjD,SAAS,EAAE,IAAI,CAAA;IACf,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,iBAAiB,CAAC,EAAE,MAAM,CAAA;IAC1B,cAAc,CAAC,EAAE,OAAO,CAAA;CACzB;AAED;;;;;;GAMG;AACH,qBAAa,WAAW;IACV,OAAO,CAAC,QAAQ,CAAC,MAAM;gBAAN,MAAM,EAAE,WAAW;IAEhD;;;;;;;OAOG;IACG,eAAe,CACnB,aAAa,EAAE,MAAM,EACrB,OAAO,EAAE,eAAe,EACxB,cAAc,CAAC,EAAE,MAAM,GACtB,OAAO,CAAC,cAAc,CAAC;IAoB1B;;;OAGG;IACH,MAAM,CAAC,QAAQ,CAAC,YAAY;QAC1B,wBAAwB;;QAExB,6BAA6B;;QAE7B,6CAA6C;;MAErC;CACX"}
|
|
@@ -19,7 +19,7 @@ export class TestHelpers {
|
|
|
19
19
|
* @throws {TupayError} si le client a été construit avec une clé live —
|
|
20
20
|
* on échoue localement plutôt que d'envoyer une requête vouée au 403.
|
|
21
21
|
*/
|
|
22
|
-
async simulatePayment(transactionId, outcome) {
|
|
22
|
+
async simulatePayment(transactionId, outcome, idempotencyKey) {
|
|
23
23
|
if (this.client.livemode) {
|
|
24
24
|
throw new TupayError('simulatePayment est réservé au mode test. Construisez le client avec une clé tpk_test_.', { code: 'livemode_mismatch' });
|
|
25
25
|
}
|
|
@@ -27,6 +27,10 @@ export class TestHelpers {
|
|
|
27
27
|
method: 'POST',
|
|
28
28
|
path: '/test/simulate',
|
|
29
29
|
body: { transactionId, outcome },
|
|
30
|
+
// Aucune clé générée par défaut : forcer deux fois la même issue
|
|
31
|
+
// est déjà sans effet côté serveur (`alreadyInState`), et un
|
|
32
|
+
// développeur qui simule veut voir chaque appel partir.
|
|
33
|
+
idempotencyKey,
|
|
30
34
|
});
|
|
31
35
|
return data;
|
|
32
36
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"test-helpers.js","sourceRoot":"","sources":["../../../src/resources/test-helpers.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAA;AAazC;;;;;;GAMG;AACH,MAAM,OAAO,WAAW;IACO;IAA7B,YAA6B,MAAmB;QAAnB,WAAM,GAAN,MAAM,CAAa;IAAG,CAAC;IAEpD;;;;;;;OAOG;IACH,KAAK,CAAC,eAAe,CACnB,aAAqB,EACrB,OAAwB;
|
|
1
|
+
{"version":3,"file":"test-helpers.js","sourceRoot":"","sources":["../../../src/resources/test-helpers.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAA;AAazC;;;;;;GAMG;AACH,MAAM,OAAO,WAAW;IACO;IAA7B,YAA6B,MAAmB;QAAnB,WAAM,GAAN,MAAM,CAAa;IAAG,CAAC;IAEpD;;;;;;;OAOG;IACH,KAAK,CAAC,eAAe,CACnB,aAAqB,EACrB,OAAwB,EACxB,cAAuB;QAEvB,IAAI,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC;YACzB,MAAM,IAAI,UAAU,CAClB,yFAAyF,EACzF,EAAE,IAAI,EAAE,mBAAmB,EAAE,CAC9B,CAAA;QACH,CAAC;QAED,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,OAAO,CAA2B;YACnE,MAAM,EAAE,MAAM;YACd,IAAI,EAAE,gBAAgB;YACtB,IAAI,EAAE,EAAE,aAAa,EAAE,OAAO,EAAE;YAChC,iEAAiE;YACjE,6DAA6D;YAC7D,wDAAwD;YACxD,cAAc;SACf,CAAC,CAAA;QACF,OAAO,IAAI,CAAA;IACb,CAAC;IAED;;;OAGG;IACH,MAAM,CAAU,YAAY,GAAG;QAC7B,wBAAwB;QACxB,YAAY,EAAE,GAAG;QACjB,6BAA6B;QAC7B,iBAAiB,EAAE,GAAG;QACtB,6CAA6C;QAC7C,WAAW,EAAE,GAAG;KACR,CAAA"}
|
|
@@ -2,6 +2,20 @@ import type { TupayClient } from '../client.js';
|
|
|
2
2
|
import type { ListResult, WebhookDelivery, WebhookEndpoint, WebhookEndpointWithSecret, WebhookEventType } from '../types.js';
|
|
3
3
|
import { type ListParams } from '../liste.js';
|
|
4
4
|
export interface CreateWebhookEndpointParams {
|
|
5
|
+
/**
|
|
6
|
+
* Clé d'idempotence. Le SDK n'en génère PAS ici, à dessein.
|
|
7
|
+
*
|
|
8
|
+
* Le `secret` n'est rendu qu'une fois et n'est pas conservé côté
|
|
9
|
+
* serveur : une reprise sous la même clé rend l'endpoint déjà créé
|
|
10
|
+
* avec `secret` à `null`, donc un endpoint que vous ne pourrez pas
|
|
11
|
+
* signer. Sans clé, une reprise crée un second endpoint, avec un
|
|
12
|
+
* secret lisible : c'est le moindre mal, et vous supprimez le
|
|
13
|
+
* premier.
|
|
14
|
+
*
|
|
15
|
+
* Fournissez-en une si vous préférez l'inverse, en connaissance de
|
|
16
|
+
* cause.
|
|
17
|
+
*/
|
|
18
|
+
idempotencyKey?: string;
|
|
5
19
|
/** HTTPS et port 443 obligatoires en mode live. */
|
|
6
20
|
url: string;
|
|
7
21
|
description?: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"webhook-endpoints.d.ts","sourceRoot":"","sources":["../../../src/resources/webhook-endpoints.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAA;AAC/C,OAAO,KAAK,EACV,UAAU,EACV,eAAe,EACf,eAAe,EACf,yBAAyB,EACzB,gBAAgB,EACjB,MAAM,aAAa,CAAA;AACpB,OAAO,EAIL,KAAK,UAAU,EAChB,MAAM,aAAa,CAAA;AAEpB,MAAM,WAAW,2BAA2B;IAC1C,mDAAmD;IACnD,GAAG,EAAE,MAAM,CAAA;IACX,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,sCAAsC;IACtC,aAAa,CAAC,EAAE,CAAC,gBAAgB,GAAG,GAAG,CAAC,EAAE,CAAA;CAC3C;AAED,MAAM,WAAW,2BAA2B;IAC1C,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IAC3B,aAAa,CAAC,EAAE,CAAC,gBAAgB,GAAG,GAAG,CAAC,EAAE,CAAA;IAC1C,MAAM,CAAC,EAAE,SAAS,GAAG,UAAU,CAAA;CAChC;AAED,MAAM,WAAW,oBAAqB,SAAQ,UAAU;IACtD,MAAM,CAAC,EAAE,eAAe,CAAC,QAAQ,CAAC,CAAA;IAClC,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB;AAED,qBAAa,gBAAgB;IACf,OAAO,CAAC,QAAQ,CAAC,MAAM;gBAAN,MAAM,EAAE,WAAW;IAEhD;;;;;;OAMG;IACG,MAAM,CACV,MAAM,EAAE,2BAA2B,GAClC,OAAO,CAAC,yBAAyB,CAAC;
|
|
1
|
+
{"version":3,"file":"webhook-endpoints.d.ts","sourceRoot":"","sources":["../../../src/resources/webhook-endpoints.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAA;AAC/C,OAAO,KAAK,EACV,UAAU,EACV,eAAe,EACf,eAAe,EACf,yBAAyB,EACzB,gBAAgB,EACjB,MAAM,aAAa,CAAA;AACpB,OAAO,EAIL,KAAK,UAAU,EAChB,MAAM,aAAa,CAAA;AAEpB,MAAM,WAAW,2BAA2B;IAC1C;;;;;;;;;;;;OAYG;IACH,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,mDAAmD;IACnD,GAAG,EAAE,MAAM,CAAA;IACX,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,sCAAsC;IACtC,aAAa,CAAC,EAAE,CAAC,gBAAgB,GAAG,GAAG,CAAC,EAAE,CAAA;CAC3C;AAED,MAAM,WAAW,2BAA2B;IAC1C,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IAC3B,aAAa,CAAC,EAAE,CAAC,gBAAgB,GAAG,GAAG,CAAC,EAAE,CAAA;IAC1C,MAAM,CAAC,EAAE,SAAS,GAAG,UAAU,CAAA;CAChC;AAED,MAAM,WAAW,oBAAqB,SAAQ,UAAU;IACtD,MAAM,CAAC,EAAE,eAAe,CAAC,QAAQ,CAAC,CAAA;IAClC,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB;AAED,qBAAa,gBAAgB;IACf,OAAO,CAAC,QAAQ,CAAC,MAAM;gBAAN,MAAM,EAAE,WAAW;IAEhD;;;;;;OAMG;IACG,MAAM,CACV,MAAM,EAAE,2BAA2B,GAClC,OAAO,CAAC,yBAAyB,CAAC;IAa/B,QAAQ,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC;IAQ9C,IAAI,CAAC,MAAM,GAAE,UAAe,GAAG,OAAO,CAAC,UAAU,CAAC,eAAe,CAAC,CAAC;IAUnE,MAAM,CACV,EAAE,EAAE,MAAM,EACV,MAAM,EAAE,2BAA2B,GAClC,OAAO,CAAC,eAAe,CAAC;IAS3B,2EAA2E;IACrE,GAAG,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAOpC;;;OAGG;IACG,cAAc,CAClB,EAAE,EAAE,MAAM,EACV,MAAM,GAAE,oBAAyB,GAChC,OAAO,CAAC,UAAU,CAAC,eAAe,CAAC,CAAC;CAaxC"}
|
|
@@ -12,10 +12,12 @@ export class WebhookEndpoints {
|
|
|
12
12
|
* lisible ensuite. Perdu = supprimer l'endpoint et en recréer un.
|
|
13
13
|
*/
|
|
14
14
|
async create(params) {
|
|
15
|
+
const { idempotencyKey, ...body } = params;
|
|
15
16
|
const { data } = await this.client.request({
|
|
16
17
|
method: 'POST',
|
|
17
18
|
path: '/webhook-endpoints',
|
|
18
|
-
body
|
|
19
|
+
body,
|
|
20
|
+
idempotencyKey,
|
|
19
21
|
});
|
|
20
22
|
return data;
|
|
21
23
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"webhook-endpoints.js","sourceRoot":"","sources":["../../../src/resources/webhook-endpoints.ts"],"names":[],"mappings":"AAQA,OAAO,EACL,eAAe,EACf,eAAe,GAGhB,MAAM,aAAa,CAAA;
|
|
1
|
+
{"version":3,"file":"webhook-endpoints.js","sourceRoot":"","sources":["../../../src/resources/webhook-endpoints.ts"],"names":[],"mappings":"AAQA,OAAO,EACL,eAAe,EACf,eAAe,GAGhB,MAAM,aAAa,CAAA;AAoCpB,MAAM,OAAO,gBAAgB;IACE;IAA7B,YAA6B,MAAmB;QAAnB,WAAM,GAAN,MAAM,CAAa;IAAG,CAAC;IAEpD;;;;;;OAMG;IACH,KAAK,CAAC,MAAM,CACV,MAAmC;QAEnC,MAAM,EAAE,cAAc,EAAE,GAAG,IAAI,EAAE,GAAG,MAAM,CAAA;QAC1C,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,OAAO,CAEvC;YACD,MAAM,EAAE,MAAM;YACd,IAAI,EAAE,oBAAoB;YAC1B,IAAI;YACJ,cAAc;SACf,CAAC,CAAA;QACF,OAAO,IAAI,CAAA;IACb,CAAC;IAED,KAAK,CAAC,QAAQ,CAAC,EAAU;QACvB,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,OAAO,CAA4B;YACpE,MAAM,EAAE,KAAK;YACb,IAAI,EAAE,sBAAsB,kBAAkB,CAAC,EAAE,CAAC,EAAE;SACrD,CAAC,CAAA;QACF,OAAO,IAAI,CAAA;IACb,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,SAAqB,EAAE;QAChC,OAAO,eAAe,CACpB,MAAM,IAAI,CAAC,MAAM,CAAC,OAAO,CAA8B;YACrD,MAAM,EAAE,KAAK;YACb,IAAI,EAAE,oBAAoB;YAC1B,KAAK,EAAE,eAAe,CAAC,MAAM,CAAC;SAC/B,CAAC,CACH,CAAA;IACH,CAAC;IAED,KAAK,CAAC,MAAM,CACV,EAAU,EACV,MAAmC;QAEnC,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,OAAO,CAA4B;YACpE,MAAM,EAAE,OAAO;YACf,IAAI,EAAE,sBAAsB,kBAAkB,CAAC,EAAE,CAAC,EAAE;YACpD,IAAI,EAAE,MAAM;SACb,CAAC,CAAA;QACF,OAAO,IAAI,CAAA;IACb,CAAC;IAED,2EAA2E;IAC3E,KAAK,CAAC,GAAG,CAAC,EAAU;QAClB,MAAM,IAAI,CAAC,MAAM,CAAC,OAAO,CAAU;YACjC,MAAM,EAAE,QAAQ;YAChB,IAAI,EAAE,sBAAsB,kBAAkB,CAAC,EAAE,CAAC,EAAE;SACrD,CAAC,CAAA;IACJ,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,cAAc,CAClB,EAAU,EACV,SAA+B,EAAE;QAEjC,OAAO,eAAe,CACpB,MAAM,IAAI,CAAC,MAAM,CAAC,OAAO,CAA8B;YACrD,MAAM,EAAE,KAAK;YACb,IAAI,EAAE,sBAAsB,kBAAkB,CAAC,EAAE,CAAC,aAAa;YAC/D,KAAK,EAAE;gBACL,GAAG,eAAe,CAAC,MAAM,CAAC;gBAC1B,MAAM,EAAE,MAAM,CAAC,MAAM;gBACrB,SAAS,EAAE,MAAM,CAAC,SAAS;aAC5B;SACF,CAAC,CACH,CAAA;IACH,CAAC;CACF"}
|