tupay 0.5.2 → 0.6.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/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/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 })
|
|
@@ -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"}
|
|
@@ -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"}
|