tupay 0.5.2

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.
Files changed (116) hide show
  1. package/README.md +358 -0
  2. package/dist/cjs/client.d.ts +48 -0
  3. package/dist/cjs/client.d.ts.map +1 -0
  4. package/dist/cjs/client.js +165 -0
  5. package/dist/cjs/client.js.map +1 -0
  6. package/dist/cjs/errors.d.ts +66 -0
  7. package/dist/cjs/errors.d.ts.map +1 -0
  8. package/dist/cjs/errors.js +105 -0
  9. package/dist/cjs/errors.js.map +1 -0
  10. package/dist/cjs/index.d.ts +86 -0
  11. package/dist/cjs/index.d.ts.map +1 -0
  12. package/dist/cjs/index.js +110 -0
  13. package/dist/cjs/index.js.map +1 -0
  14. package/dist/cjs/liste.d.ts +54 -0
  15. package/dist/cjs/liste.d.ts.map +1 -0
  16. package/dist/cjs/liste.js +36 -0
  17. package/dist/cjs/liste.js.map +1 -0
  18. package/dist/cjs/package.json +3 -0
  19. package/dist/cjs/resources/events.d.ts +64 -0
  20. package/dist/cjs/resources/events.d.ts.map +1 -0
  21. package/dist/cjs/resources/events.js +104 -0
  22. package/dist/cjs/resources/events.js.map +1 -0
  23. package/dist/cjs/resources/merchants.d.ts +19 -0
  24. package/dist/cjs/resources/merchants.d.ts.map +1 -0
  25. package/dist/cjs/resources/merchants.js +29 -0
  26. package/dist/cjs/resources/merchants.js.map +1 -0
  27. package/dist/cjs/resources/payment-intents.d.ts +29 -0
  28. package/dist/cjs/resources/payment-intents.d.ts.map +1 -0
  29. package/dist/cjs/resources/payment-intents.js +22 -0
  30. package/dist/cjs/resources/payment-intents.js.map +1 -0
  31. package/dist/cjs/resources/payment-links.d.ts +38 -0
  32. package/dist/cjs/resources/payment-links.d.ts.map +1 -0
  33. package/dist/cjs/resources/payment-links.js +56 -0
  34. package/dist/cjs/resources/payment-links.js.map +1 -0
  35. package/dist/cjs/resources/refunds.d.ts +27 -0
  36. package/dist/cjs/resources/refunds.d.ts.map +1 -0
  37. package/dist/cjs/resources/refunds.js +33 -0
  38. package/dist/cjs/resources/refunds.js.map +1 -0
  39. package/dist/cjs/resources/test-helpers.d.ts +42 -0
  40. package/dist/cjs/resources/test-helpers.d.ts.map +1 -0
  41. package/dist/cjs/resources/test-helpers.js +50 -0
  42. package/dist/cjs/resources/test-helpers.js.map +1 -0
  43. package/dist/cjs/resources/transactions.d.ts +29 -0
  44. package/dist/cjs/resources/transactions.d.ts.map +1 -0
  45. package/dist/cjs/resources/transactions.js +65 -0
  46. package/dist/cjs/resources/transactions.js.map +1 -0
  47. package/dist/cjs/resources/webhook-endpoints.d.ts +43 -0
  48. package/dist/cjs/resources/webhook-endpoints.d.ts.map +1 -0
  49. package/dist/cjs/resources/webhook-endpoints.js +71 -0
  50. package/dist/cjs/resources/webhook-endpoints.js.map +1 -0
  51. package/dist/cjs/types.d.ts +166 -0
  52. package/dist/cjs/types.d.ts.map +1 -0
  53. package/dist/cjs/types.js +10 -0
  54. package/dist/cjs/types.js.map +1 -0
  55. package/dist/cjs/webhooks.d.ts +31 -0
  56. package/dist/cjs/webhooks.d.ts.map +1 -0
  57. package/dist/cjs/webhooks.js +81 -0
  58. package/dist/cjs/webhooks.js.map +1 -0
  59. package/dist/esm/client.d.ts +48 -0
  60. package/dist/esm/client.d.ts.map +1 -0
  61. package/dist/esm/client.js +161 -0
  62. package/dist/esm/client.js.map +1 -0
  63. package/dist/esm/errors.d.ts +66 -0
  64. package/dist/esm/errors.d.ts.map +1 -0
  65. package/dist/esm/errors.js +90 -0
  66. package/dist/esm/errors.js.map +1 -0
  67. package/dist/esm/index.d.ts +86 -0
  68. package/dist/esm/index.d.ts.map +1 -0
  69. package/dist/esm/index.js +90 -0
  70. package/dist/esm/index.js.map +1 -0
  71. package/dist/esm/liste.d.ts +54 -0
  72. package/dist/esm/liste.d.ts.map +1 -0
  73. package/dist/esm/liste.js +32 -0
  74. package/dist/esm/liste.js.map +1 -0
  75. package/dist/esm/package.json +3 -0
  76. package/dist/esm/resources/events.d.ts +64 -0
  77. package/dist/esm/resources/events.d.ts.map +1 -0
  78. package/dist/esm/resources/events.js +100 -0
  79. package/dist/esm/resources/events.js.map +1 -0
  80. package/dist/esm/resources/merchants.d.ts +19 -0
  81. package/dist/esm/resources/merchants.d.ts.map +1 -0
  82. package/dist/esm/resources/merchants.js +25 -0
  83. package/dist/esm/resources/merchants.js.map +1 -0
  84. package/dist/esm/resources/payment-intents.d.ts +29 -0
  85. package/dist/esm/resources/payment-intents.d.ts.map +1 -0
  86. package/dist/esm/resources/payment-intents.js +18 -0
  87. package/dist/esm/resources/payment-intents.js.map +1 -0
  88. package/dist/esm/resources/payment-links.d.ts +38 -0
  89. package/dist/esm/resources/payment-links.d.ts.map +1 -0
  90. package/dist/esm/resources/payment-links.js +52 -0
  91. package/dist/esm/resources/payment-links.js.map +1 -0
  92. package/dist/esm/resources/refunds.d.ts +27 -0
  93. package/dist/esm/resources/refunds.d.ts.map +1 -0
  94. package/dist/esm/resources/refunds.js +29 -0
  95. package/dist/esm/resources/refunds.js.map +1 -0
  96. package/dist/esm/resources/test-helpers.d.ts +42 -0
  97. package/dist/esm/resources/test-helpers.d.ts.map +1 -0
  98. package/dist/esm/resources/test-helpers.js +46 -0
  99. package/dist/esm/resources/test-helpers.js.map +1 -0
  100. package/dist/esm/resources/transactions.d.ts +29 -0
  101. package/dist/esm/resources/transactions.d.ts.map +1 -0
  102. package/dist/esm/resources/transactions.js +61 -0
  103. package/dist/esm/resources/transactions.js.map +1 -0
  104. package/dist/esm/resources/webhook-endpoints.d.ts +43 -0
  105. package/dist/esm/resources/webhook-endpoints.d.ts.map +1 -0
  106. package/dist/esm/resources/webhook-endpoints.js +67 -0
  107. package/dist/esm/resources/webhook-endpoints.js.map +1 -0
  108. package/dist/esm/types.d.ts +166 -0
  109. package/dist/esm/types.d.ts.map +1 -0
  110. package/dist/esm/types.js +9 -0
  111. package/dist/esm/types.js.map +1 -0
  112. package/dist/esm/webhooks.d.ts +31 -0
  113. package/dist/esm/webhooks.d.ts.map +1 -0
  114. package/dist/esm/webhooks.js +77 -0
  115. package/dist/esm/webhooks.js.map +1 -0
  116. package/package.json +53 -0
@@ -0,0 +1,105 @@
1
+ "use strict";
2
+ /**
3
+ * Hiérarchie d'erreurs du SDK.
4
+ *
5
+ * Toutes héritent de `TupayError` : un `catch (err)` unique suffit, et
6
+ * `err instanceof TupayRateLimitError` permet d'affiner si besoin.
7
+ *
8
+ * `code` est le code machine renvoyé par l'API (`validation_error`,
9
+ * `livemode_mismatch`, …). C'est lui qu'il faut tester — le `message`
10
+ * est en français, destiné à un humain, et peut changer sans préavis.
11
+ */
12
+ 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;
14
+ exports.errorFromResponse = errorFromResponse;
15
+ class TupayError extends Error {
16
+ /** Code machine stable renvoyé par l'API. */
17
+ code;
18
+ /** Statut HTTP, absent si l'erreur est survenue avant toute réponse. */
19
+ statusCode;
20
+ /** Identifiant de requête, à citer au support. */
21
+ requestId;
22
+ constructor(message, options) {
23
+ super(message, { cause: options.cause });
24
+ this.name = new.target.name;
25
+ this.code = options.code;
26
+ this.statusCode = options.statusCode;
27
+ this.requestId = options.requestId;
28
+ }
29
+ }
30
+ exports.TupayError = TupayError;
31
+ /** 401 — clé absente, invalide ou révoquée. */
32
+ class TupayAuthenticationError extends TupayError {
33
+ }
34
+ exports.TupayAuthenticationError = TupayAuthenticationError;
35
+ /** 403 — opération interdite dans ce contexte (dont `livemode_mismatch`). */
36
+ class TupayPermissionError extends TupayError {
37
+ }
38
+ exports.TupayPermissionError = TupayPermissionError;
39
+ /** 404 — ressource inexistante ou hors du périmètre de la clé. */
40
+ class TupayNotFoundError extends TupayError {
41
+ }
42
+ exports.TupayNotFoundError = TupayNotFoundError;
43
+ /** 400 / 422 — corps de requête invalide. */
44
+ class TupayValidationError extends TupayError {
45
+ }
46
+ exports.TupayValidationError = TupayValidationError;
47
+ /** 409 — état incompatible (déjà remboursé, limite atteinte). */
48
+ class TupayConflictError extends TupayError {
49
+ }
50
+ exports.TupayConflictError = TupayConflictError;
51
+ /** 429 — 100 req/min par marchand dépassées. */
52
+ class TupayRateLimitError extends TupayError {
53
+ }
54
+ exports.TupayRateLimitError = TupayRateLimitError;
55
+ /** 5xx — incident côté Tupay. */
56
+ class TupayApiError extends TupayError {
57
+ }
58
+ exports.TupayApiError = TupayApiError;
59
+ /** 502 — le prestataire bancaire a refusé l'opération. */
60
+ class TupayBaasError extends TupayError {
61
+ }
62
+ exports.TupayBaasError = TupayBaasError;
63
+ /** Panne réseau, DNS, TLS ou dépassement du timeout. Aucune réponse reçue. */
64
+ class TupayConnectionError extends TupayError {
65
+ constructor(message, cause) {
66
+ super(message, { code: 'connection_error', cause });
67
+ }
68
+ }
69
+ exports.TupayConnectionError = TupayConnectionError;
70
+ /** La signature d'un webhook n'a pas pu être vérifiée. */
71
+ class TupaySignatureVerificationError extends TupayError {
72
+ constructor(message) {
73
+ super(message, { code: 'signature_verification_failed' });
74
+ }
75
+ }
76
+ exports.TupaySignatureVerificationError = TupaySignatureVerificationError;
77
+ /**
78
+ * Construit l'erreur typée correspondant à une réponse HTTP.
79
+ * Le mapping suit le catalogue documenté dans `docs/api-integration.md`.
80
+ */
81
+ function errorFromResponse(status, body, requestId) {
82
+ const code = body?.error ?? 'server_error';
83
+ const message = body?.message ?? `Requête échouée (HTTP ${status}).`;
84
+ const options = { code, statusCode: status, requestId };
85
+ switch (status) {
86
+ case 400:
87
+ case 422:
88
+ return new TupayValidationError(message, options);
89
+ case 401:
90
+ return new TupayAuthenticationError(message, options);
91
+ case 403:
92
+ return new TupayPermissionError(message, options);
93
+ case 404:
94
+ return new TupayNotFoundError(message, options);
95
+ case 409:
96
+ return new TupayConflictError(message, options);
97
+ case 429:
98
+ return new TupayRateLimitError(message, options);
99
+ case 502:
100
+ return new TupayBaasError(message, options);
101
+ default:
102
+ return new TupayApiError(message, options);
103
+ }
104
+ }
105
+ //# sourceMappingURL=errors.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/errors.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,86 @@
1
+ /**
2
+ * SDK Node officiel de Tupay — encaissement en XPF, Polynésie française.
3
+ *
4
+ * @example
5
+ * import { Tupay } from 'tupay'
6
+ *
7
+ * const tupay = new Tupay(process.env.TUPAY_SECRET_KEY!)
8
+ *
9
+ * const link = await tupay.paymentLinks.create({
10
+ * amountXpf: 4500,
11
+ * description: 'Location paddle 2 h',
12
+ * returnUrl: 'https://ma-boutique.pf/merci',
13
+ * })
14
+ * console.log(link.url)
15
+ */
16
+ import { type TupayOptions } from './client.js';
17
+ import { PaymentIntents } from './resources/payment-intents.js';
18
+ import { PaymentLinks } from './resources/payment-links.js';
19
+ import { Transactions } from './resources/transactions.js';
20
+ import { Refunds } from './resources/refunds.js';
21
+ import { WebhookEndpoints } from './resources/webhook-endpoints.js';
22
+ import { Merchants } from './resources/merchants.js';
23
+ import { Events } from './resources/events.js';
24
+ import { TestHelpers } from './resources/test-helpers.js';
25
+ import { type ConstructEventOptions } from './webhooks.js';
26
+ import type { WebhookEvent } from './types.js';
27
+ export declare class Tupay {
28
+ #private;
29
+ readonly paymentIntents: PaymentIntents;
30
+ readonly paymentLinks: PaymentLinks;
31
+ readonly transactions: Transactions;
32
+ readonly refunds: Refunds;
33
+ readonly webhookEndpoints: WebhookEndpoints;
34
+ readonly merchants: Merchants;
35
+ /** Historique des événements émis — consultation et rejeu. */
36
+ readonly events: Events;
37
+ /** Utilitaires de mode test — lèvent une erreur avec une clé live. */
38
+ readonly testHelpers: TestHelpers;
39
+ /** `true` si la clé fournie est une `tpk_live_`. Déduit du préfixe. */
40
+ readonly livemode: boolean;
41
+ constructor(apiKey: string, options?: TupayOptions);
42
+ /**
43
+ * Vérifie la signature d'un webhook et renvoie l'événement typé.
44
+ *
45
+ * ⚠️ `payload` doit être le corps **brut** de la requête. Un objet déjà
46
+ * parsé puis re-sérialisé ne produira pas le même HMAC.
47
+ *
48
+ * @example
49
+ * app.post('/hook', express.raw({ type: 'application/json' }), (req, res) => {
50
+ * let event
51
+ * try {
52
+ * event = tupay.webhooks.constructEvent(
53
+ * req.body,
54
+ * req.get('tupay-signature'),
55
+ * process.env.TUPAY_WEBHOOK_SECRET,
56
+ * )
57
+ * } catch {
58
+ * return res.status(400).send('signature invalide')
59
+ * }
60
+ * res.sendStatus(200) // acquittez vite
61
+ * traiter(event) // puis traitez
62
+ * })
63
+ */
64
+ readonly webhooks: {
65
+ constructEvent(payload: string | Buffer, header: string | null | undefined, secret: string, options?: ConstructEventOptions): WebhookEvent;
66
+ };
67
+ /** Génère une clé d'idempotence (UUID v4). */
68
+ static idempotencyKey(): string;
69
+ }
70
+ export default Tupay;
71
+ export { TupayClient } from './client.js';
72
+ export type { TupayOptions, RequestOptions } from './client.js';
73
+ export { constructEvent, DEFAULT_TOLERANCE_SECONDS } from './webhooks.js';
74
+ export type { ConstructEventOptions } from './webhooks.js';
75
+ export { TupayError, TupayAuthenticationError, TupayPermissionError, TupayNotFoundError, TupayValidationError, TupayConflictError, TupayRateLimitError, TupayApiError, TupayBaasError, TupayConnectionError, TupaySignatureVerificationError, } from './errors.js';
76
+ export type * from './types.js';
77
+ export type { CreatePaymentIntentParams } from './resources/payment-intents.js';
78
+ export type { CreatePaymentLinkParams } from './resources/payment-links.js';
79
+ export type { ListTransactionsParams } from './resources/transactions.js';
80
+ export type { CreateRefundParams, ListRefundsParams } from './resources/refunds.js';
81
+ export type { CreateWebhookEndpointParams, UpdateWebhookEndpointParams, ListDeliveriesParams, } from './resources/webhook-endpoints.js';
82
+ export type { ListEventsParams } from './resources/events.js';
83
+ export { Events } from './resources/events.js';
84
+ export type { SimulateOutcome, SimulateResult } from './resources/test-helpers.js';
85
+ export { TestHelpers } from './resources/test-helpers.js';
86
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +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"}
@@ -0,0 +1,110 @@
1
+ "use strict";
2
+ /**
3
+ * SDK Node officiel de Tupay — encaissement en XPF, Polynésie française.
4
+ *
5
+ * @example
6
+ * import { Tupay } from 'tupay'
7
+ *
8
+ * const tupay = new Tupay(process.env.TUPAY_SECRET_KEY!)
9
+ *
10
+ * const link = await tupay.paymentLinks.create({
11
+ * amountXpf: 4500,
12
+ * description: 'Location paddle 2 h',
13
+ * returnUrl: 'https://ma-boutique.pf/merci',
14
+ * })
15
+ * console.log(link.url)
16
+ */
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;
19
+ const client_js_1 = require("./client.js");
20
+ const payment_intents_js_1 = require("./resources/payment-intents.js");
21
+ const payment_links_js_1 = require("./resources/payment-links.js");
22
+ const transactions_js_1 = require("./resources/transactions.js");
23
+ const refunds_js_1 = require("./resources/refunds.js");
24
+ const webhook_endpoints_js_1 = require("./resources/webhook-endpoints.js");
25
+ const merchants_js_1 = require("./resources/merchants.js");
26
+ const events_js_1 = require("./resources/events.js");
27
+ const test_helpers_js_1 = require("./resources/test-helpers.js");
28
+ const webhooks_js_1 = require("./webhooks.js");
29
+ class Tupay {
30
+ paymentIntents;
31
+ paymentLinks;
32
+ transactions;
33
+ refunds;
34
+ webhookEndpoints;
35
+ merchants;
36
+ /** Historique des événements émis — consultation et rejeu. */
37
+ events;
38
+ /** Utilitaires de mode test — lèvent une erreur avec une clé live. */
39
+ testHelpers;
40
+ /** `true` si la clé fournie est une `tpk_live_`. Déduit du préfixe. */
41
+ livemode;
42
+ #client;
43
+ constructor(apiKey, options = {}) {
44
+ this.#client = new client_js_1.TupayClient(apiKey, options);
45
+ this.livemode = this.#client.livemode;
46
+ this.paymentIntents = new payment_intents_js_1.PaymentIntents(this.#client);
47
+ this.paymentLinks = new payment_links_js_1.PaymentLinks(this.#client);
48
+ this.transactions = new transactions_js_1.Transactions(this.#client);
49
+ this.refunds = new refunds_js_1.Refunds(this.#client);
50
+ this.webhookEndpoints = new webhook_endpoints_js_1.WebhookEndpoints(this.#client);
51
+ this.merchants = new merchants_js_1.Merchants(this.#client);
52
+ this.events = new events_js_1.Events(this.#client);
53
+ this.testHelpers = new test_helpers_js_1.TestHelpers(this.#client);
54
+ }
55
+ /**
56
+ * Vérifie la signature d'un webhook et renvoie l'événement typé.
57
+ *
58
+ * ⚠️ `payload` doit être le corps **brut** de la requête. Un objet déjà
59
+ * parsé puis re-sérialisé ne produira pas le même HMAC.
60
+ *
61
+ * @example
62
+ * app.post('/hook', express.raw({ type: 'application/json' }), (req, res) => {
63
+ * let event
64
+ * try {
65
+ * event = tupay.webhooks.constructEvent(
66
+ * req.body,
67
+ * req.get('tupay-signature'),
68
+ * process.env.TUPAY_WEBHOOK_SECRET,
69
+ * )
70
+ * } catch {
71
+ * return res.status(400).send('signature invalide')
72
+ * }
73
+ * res.sendStatus(200) // acquittez vite
74
+ * traiter(event) // puis traitez
75
+ * })
76
+ */
77
+ webhooks = {
78
+ constructEvent(payload, header, secret, options) {
79
+ return (0, webhooks_js_1.constructEvent)(payload, header, secret, options);
80
+ },
81
+ };
82
+ /** Génère une clé d'idempotence (UUID v4). */
83
+ static idempotencyKey() {
84
+ return client_js_1.TupayClient.idempotencyKey();
85
+ }
86
+ }
87
+ exports.Tupay = Tupay;
88
+ exports.default = Tupay;
89
+ var client_js_2 = require("./client.js");
90
+ Object.defineProperty(exports, "TupayClient", { enumerable: true, get: function () { return client_js_2.TupayClient; } });
91
+ var webhooks_js_2 = require("./webhooks.js");
92
+ Object.defineProperty(exports, "constructEvent", { enumerable: true, get: function () { return webhooks_js_2.constructEvent; } });
93
+ Object.defineProperty(exports, "DEFAULT_TOLERANCE_SECONDS", { enumerable: true, get: function () { return webhooks_js_2.DEFAULT_TOLERANCE_SECONDS; } });
94
+ var errors_js_1 = require("./errors.js");
95
+ Object.defineProperty(exports, "TupayError", { enumerable: true, get: function () { return errors_js_1.TupayError; } });
96
+ Object.defineProperty(exports, "TupayAuthenticationError", { enumerable: true, get: function () { return errors_js_1.TupayAuthenticationError; } });
97
+ Object.defineProperty(exports, "TupayPermissionError", { enumerable: true, get: function () { return errors_js_1.TupayPermissionError; } });
98
+ Object.defineProperty(exports, "TupayNotFoundError", { enumerable: true, get: function () { return errors_js_1.TupayNotFoundError; } });
99
+ Object.defineProperty(exports, "TupayValidationError", { enumerable: true, get: function () { return errors_js_1.TupayValidationError; } });
100
+ Object.defineProperty(exports, "TupayConflictError", { enumerable: true, get: function () { return errors_js_1.TupayConflictError; } });
101
+ Object.defineProperty(exports, "TupayRateLimitError", { enumerable: true, get: function () { return errors_js_1.TupayRateLimitError; } });
102
+ Object.defineProperty(exports, "TupayApiError", { enumerable: true, get: function () { return errors_js_1.TupayApiError; } });
103
+ Object.defineProperty(exports, "TupayBaasError", { enumerable: true, get: function () { return errors_js_1.TupayBaasError; } });
104
+ Object.defineProperty(exports, "TupayConnectionError", { enumerable: true, get: function () { return errors_js_1.TupayConnectionError; } });
105
+ Object.defineProperty(exports, "TupaySignatureVerificationError", { enumerable: true, get: function () { return errors_js_1.TupaySignatureVerificationError; } });
106
+ var events_js_2 = require("./resources/events.js");
107
+ Object.defineProperty(exports, "Events", { enumerable: true, get: function () { return events_js_2.Events; } });
108
+ var test_helpers_js_2 = require("./resources/test-helpers.js");
109
+ Object.defineProperty(exports, "TestHelpers", { enumerable: true, get: function () { return test_helpers_js_2.TestHelpers; } });
110
+ //# sourceMappingURL=index.js.map
@@ -0,0 +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,yCAYoB;AAXlB,uGAAA,UAAU,OAAA;AACV,qHAAA,wBAAwB,OAAA;AACxB,iHAAA,oBAAoB,OAAA;AACpB,+GAAA,kBAAkB,OAAA;AAClB,iHAAA,oBAAoB,OAAA;AACpB,+GAAA,kBAAkB,OAAA;AAClB,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"}
@@ -0,0 +1,54 @@
1
+ /**
2
+ * Collections : paramètres émis et réponse normalisée.
3
+ *
4
+ * ── Pourquoi ce module existe ──────────────────────────────────────
5
+ * L'API a rendu longtemps `{ data, hasMore }` en camelCase. Elle rend
6
+ * désormais les DEUX clés, `has_more` étant la canonique, et retirera
7
+ * `hasMore` dans une version datée future.
8
+ *
9
+ * Un SDK qui lirait l'une des deux se casserait à un moment ou à un
10
+ * autre, et se casserait en SILENCE : `page.hasMore` vaudrait
11
+ * `undefined`, la condition de boucle deviendrait fausse, et
12
+ * l'intégrateur croirait avoir fini de parcourir. Pas d'exception, pas
13
+ * de log, juste des pages manquantes.
14
+ *
15
+ * `normaliserListe` lit donc `has_more` avec repli sur `hasMore`, et
16
+ * remplit les deux dans ce qu'elle rend. Un SDK neuf parle à une API
17
+ * ancienne, un SDK ancien à une API neuve.
18
+ */
19
+ import type { ListResult } from './types.js';
20
+ /** La réponse telle qu'elle arrive : l'une des deux clés peut manquer. */
21
+ export interface ListeBrute<T> {
22
+ data?: T[];
23
+ has_more?: boolean;
24
+ hasMore?: boolean;
25
+ }
26
+ export declare function normaliserListe<T>(brut: ListeBrute<T>): ListResult<T>;
27
+ /** Ce qui est commun aux six collections. */
28
+ export interface ListParams {
29
+ /** Entre 1 et 100. Défaut 25. Une valeur hors bornes est refusée en 400. */
30
+ limit?: number;
31
+ /**
32
+ * Curseur : ne rend que les éléments postérieurs à celui-ci dans
33
+ * l'ordre de parcours, donc plus anciens. L'élément désigné n'est
34
+ * jamais inclus.
35
+ */
36
+ startingAfter?: string;
37
+ /**
38
+ * Curseur inverse : ne rend que les éléments antérieurs, donc plus
39
+ * récents. `hasMore` parle alors de ce qui reste AVANT la page.
40
+ */
41
+ endingBefore?: string;
42
+ /**
43
+ * @deprecated Utilisez `startingAfter`. Supporté au minimum douze mois.
44
+ *
45
+ * Un décalage nomme une position dans un classement qui bouge : dès
46
+ * qu'une ligne naît pendant votre parcours, tout ce qui suit glisse
47
+ * d'un cran et vous sautez un élément sans rien voir. Il n'est jamais
48
+ * envoyé par défaut, et ne se combine pas avec un curseur.
49
+ */
50
+ offset?: number;
51
+ }
52
+ /** Traduit les paramètres communs en chaîne de requête. */
53
+ export declare function parametresListe(params: ListParams): Record<string, string | number | boolean | undefined>;
54
+ //# sourceMappingURL=liste.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"liste.d.ts","sourceRoot":"","sources":["../../src/liste.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAA;AAE5C,0EAA0E;AAC1E,MAAM,WAAW,UAAU,CAAC,CAAC;IAC3B,IAAI,CAAC,EAAE,CAAC,EAAE,CAAA;IACV,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,OAAO,CAAC,EAAE,OAAO,CAAA;CAClB;AAED,wBAAgB,eAAe,CAAC,CAAC,EAAE,IAAI,EAAE,UAAU,CAAC,CAAC,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC,CAGrE;AAED,6CAA6C;AAC7C,MAAM,WAAW,UAAU;IACzB,4EAA4E;IAC5E,KAAK,CAAC,EAAE,MAAM,CAAA;IACd;;;;OAIG;IACH,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB;;;OAGG;IACH,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB;;;;;;;OAOG;IACH,MAAM,CAAC,EAAE,MAAM,CAAA;CAChB;AAED,2DAA2D;AAC3D,wBAAgB,eAAe,CAC7B,MAAM,EAAE,UAAU,GACjB,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,SAAS,CAAC,CAOvD"}
@@ -0,0 +1,36 @@
1
+ "use strict";
2
+ /**
3
+ * Collections : paramètres émis et réponse normalisée.
4
+ *
5
+ * ── Pourquoi ce module existe ──────────────────────────────────────
6
+ * L'API a rendu longtemps `{ data, hasMore }` en camelCase. Elle rend
7
+ * désormais les DEUX clés, `has_more` étant la canonique, et retirera
8
+ * `hasMore` dans une version datée future.
9
+ *
10
+ * Un SDK qui lirait l'une des deux se casserait à un moment ou à un
11
+ * autre, et se casserait en SILENCE : `page.hasMore` vaudrait
12
+ * `undefined`, la condition de boucle deviendrait fausse, et
13
+ * l'intégrateur croirait avoir fini de parcourir. Pas d'exception, pas
14
+ * de log, juste des pages manquantes.
15
+ *
16
+ * `normaliserListe` lit donc `has_more` avec repli sur `hasMore`, et
17
+ * remplit les deux dans ce qu'elle rend. Un SDK neuf parle à une API
18
+ * ancienne, un SDK ancien à une API neuve.
19
+ */
20
+ Object.defineProperty(exports, "__esModule", { value: true });
21
+ exports.normaliserListe = normaliserListe;
22
+ exports.parametresListe = parametresListe;
23
+ function normaliserListe(brut) {
24
+ const encore = brut.has_more ?? brut.hasMore ?? false;
25
+ return { data: brut.data ?? [], has_more: encore, hasMore: encore };
26
+ }
27
+ /** Traduit les paramètres communs en chaîne de requête. */
28
+ function parametresListe(params) {
29
+ return {
30
+ limit: params.limit,
31
+ starting_after: params.startingAfter,
32
+ ending_before: params.endingBefore,
33
+ offset: params.offset,
34
+ };
35
+ }
36
+ //# sourceMappingURL=liste.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"liste.js","sourceRoot":"","sources":["../../src/liste.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;GAiBG;;AAWH,0CAGC;AA6BD,0CASC;AAzCD,SAAgB,eAAe,CAAI,IAAmB;IACpD,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,OAAO,IAAI,KAAK,CAAA;IACrD,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,IAAI,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,CAAA;AACrE,CAAC;AA4BD,2DAA2D;AAC3D,SAAgB,eAAe,CAC7B,MAAkB;IAElB,OAAO;QACL,KAAK,EAAE,MAAM,CAAC,KAAK;QACnB,cAAc,EAAE,MAAM,CAAC,aAAa;QACpC,aAAa,EAAE,MAAM,CAAC,YAAY;QAClC,MAAM,EAAE,MAAM,CAAC,MAAM;KACtB,CAAA;AACH,CAAC"}
@@ -0,0 +1,3 @@
1
+ {
2
+ "type": "commonjs"
3
+ }
@@ -0,0 +1,64 @@
1
+ import type { TupayClient } from '../client.js';
2
+ import type { ListResult, TupayEvent, WebhookEventType, ResendResult } from '../types.js';
3
+ import { type ListParams } from '../liste.js';
4
+ export interface ListEventsParams extends ListParams {
5
+ /**
6
+ * @deprecated Renommé `startingAfter`. Alias strict, même
7
+ * comportement, accepté au minimum douze mois.
8
+ *
9
+ * Il est traduit en `starting_after` à l'émission : mélanger l'ancien
10
+ * et le nouveau nom dans un même appel est refusé par l'API, et une
11
+ * seule des deux formes part sur le réseau.
12
+ */
13
+ apres?: string;
14
+ type?: WebhookEventType;
15
+ }
16
+ export declare class Events {
17
+ private readonly client;
18
+ constructor(client: TupayClient);
19
+ /**
20
+ * Les événements du marchand, du plus récent au plus ancien.
21
+ *
22
+ * Le mode vient de la clé : une clé `tpk_test_` ne voit jamais les
23
+ * événements live, et réciproquement.
24
+ *
25
+ * Pagination par CURSEUR, comme les cinq autres collections. Un
26
+ * `offset` glisserait dès qu'un événement naît pendant le parcours, et
27
+ * l'on en sauterait, silencieusement. Le curseur est ancré sur une
28
+ * ligne précise, et un curseur qui ne se résout pas est refusé par un
29
+ * `400 invalid_cursor` plutôt que par une page vide.
30
+ */
31
+ list(params?: ListEventsParams): Promise<ListResult<TupayEvent>>;
32
+ /**
33
+ * Un événement précis.
34
+ *
35
+ * Le geste courant du débogage : un webhook arrive, vous tenez son
36
+ * `id`, vous voulez revoir l'objet exact que Tupay a émis.
37
+ */
38
+ retrieve(id: string): Promise<TupayEvent>;
39
+ /**
40
+ * Rejoue un événement vers vos endpoints actifs.
41
+ *
42
+ * ⚠️ Le rejeu **crée** une nouvelle livraison, il ne modifie pas
43
+ * l'ancienne. Votre gestionnaire recevra donc l'événement une fois de
44
+ * plus, avec le même `id` : dédupliquez dessus.
45
+ *
46
+ * @example
47
+ * // Votre serveur était en panne à 3 h du matin.
48
+ * const { data } = await tupay.events.list({ type: 'payment.succeeded' })
49
+ * for (const event of data) {
50
+ * await tupay.events.resend(event.id)
51
+ * }
52
+ */
53
+ resend(id: string): Promise<ResendResult>;
54
+ /**
55
+ * Parcourt toutes les pages, un événement à la fois.
56
+ *
57
+ * @example
58
+ * for await (const event of tupay.events.autoPagingEach()) {
59
+ * console.log(event.type, event.created)
60
+ * }
61
+ */
62
+ autoPagingEach(params?: ListEventsParams): AsyncGenerator<TupayEvent, void, undefined>;
63
+ }
64
+ //# sourceMappingURL=events.d.ts.map
@@ -0,0 +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;IAQ/C;;;;;;;OAOG;IACI,cAAc,CACnB,MAAM,GAAE,gBAAqB,GAC5B,cAAc,CAAC,UAAU,EAAE,IAAI,EAAE,SAAS,CAAC;CAyB/C"}
@@ -0,0 +1,104 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Events = void 0;
4
+ const liste_js_1 = require("../liste.js");
5
+ class Events {
6
+ client;
7
+ constructor(client) {
8
+ this.client = client;
9
+ }
10
+ /**
11
+ * Les événements du marchand, du plus récent au plus ancien.
12
+ *
13
+ * Le mode vient de la clé : une clé `tpk_test_` ne voit jamais les
14
+ * événements live, et réciproquement.
15
+ *
16
+ * Pagination par CURSEUR, comme les cinq autres collections. Un
17
+ * `offset` glisserait dès qu'un événement naît pendant le parcours, et
18
+ * l'on en sauterait, silencieusement. Le curseur est ancré sur une
19
+ * ligne précise, et un curseur qui ne se résout pas est refusé par un
20
+ * `400 invalid_cursor` plutôt que par une page vide.
21
+ */
22
+ async list(params = {}) {
23
+ const communs = (0, liste_js_1.parametresListe)({
24
+ ...params,
25
+ startingAfter: params.startingAfter ?? params.apres,
26
+ });
27
+ return (0, liste_js_1.normaliserListe)(await this.client.request({
28
+ method: 'GET',
29
+ path: '/events',
30
+ query: { ...communs, type: params.type },
31
+ }));
32
+ }
33
+ /**
34
+ * Un événement précis.
35
+ *
36
+ * Le geste courant du débogage : un webhook arrive, vous tenez son
37
+ * `id`, vous voulez revoir l'objet exact que Tupay a émis.
38
+ */
39
+ async retrieve(id) {
40
+ const { data } = await this.client.request({
41
+ method: 'GET',
42
+ path: `/events/${encodeURIComponent(id)}`,
43
+ });
44
+ return data;
45
+ }
46
+ /**
47
+ * Rejoue un événement vers vos endpoints actifs.
48
+ *
49
+ * ⚠️ Le rejeu **crée** une nouvelle livraison, il ne modifie pas
50
+ * l'ancienne. Votre gestionnaire recevra donc l'événement une fois de
51
+ * plus, avec le même `id` : dédupliquez dessus.
52
+ *
53
+ * @example
54
+ * // Votre serveur était en panne à 3 h du matin.
55
+ * const { data } = await tupay.events.list({ type: 'payment.succeeded' })
56
+ * for (const event of data) {
57
+ * await tupay.events.resend(event.id)
58
+ * }
59
+ */
60
+ async resend(id) {
61
+ const { data } = await this.client.request({
62
+ method: 'POST',
63
+ path: `/events/${encodeURIComponent(id)}/resend`,
64
+ });
65
+ return data;
66
+ }
67
+ /**
68
+ * Parcourt toutes les pages, un événement à la fois.
69
+ *
70
+ * @example
71
+ * for await (const event of tupay.events.autoPagingEach()) {
72
+ * console.log(event.type, event.created)
73
+ * }
74
+ */
75
+ async *autoPagingEach(params = {}) {
76
+ const limit = params.limit ?? 100;
77
+ let startingAfter = params.startingAfter ?? params.apres;
78
+ let precedent;
79
+ for (;;) {
80
+ const page = await this.list({
81
+ ...params,
82
+ limit,
83
+ apres: undefined,
84
+ startingAfter,
85
+ });
86
+ for (const event of page.data)
87
+ yield event;
88
+ // Une page vide signifie la fin, même si le serveur annonçait
89
+ // `hasMore` : ceinture et bretelles contre une boucle infinie.
90
+ const dernier = page.data[page.data.length - 1];
91
+ if (!page.hasMore || !dernier)
92
+ return;
93
+ // Et si le curseur n'avance pas non plus. Une API plus ancienne que
94
+ // ce SDK ignorerait `starting_after` et rendrait indéfiniment la
95
+ // première page.
96
+ if (dernier.id === precedent)
97
+ return;
98
+ precedent = dernier.id;
99
+ startingAfter = dernier.id;
100
+ }
101
+ }
102
+ }
103
+ exports.Events = Events;
104
+ //# sourceMappingURL=events.js.map
@@ -0,0 +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;QACrB,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;SACjD,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;AApGD,wBAoGC"}
@@ -0,0 +1,19 @@
1
+ import type { TupayClient } from '../client.js';
2
+ import type { Merchant } from '../types.js';
3
+ export declare class Merchants {
4
+ private readonly client;
5
+ constructor(client: TupayClient);
6
+ /**
7
+ * Profil du marchand associé à la clé.
8
+ *
9
+ * Utile au démarrage : `kyb_status` doit valoir `validated` pour
10
+ * encaisser en mode live, et `id` est le `merchantId` attendu par
11
+ * `paymentIntents.create`.
12
+ *
13
+ * La mise à jour du profil (nom, IBAN) n'est pas exposée : elle exige
14
+ * une session humaine sur le dashboard, parce que changer l'IBAN
15
+ * redirige les virements.
16
+ */
17
+ me(): Promise<Merchant>;
18
+ }
19
+ //# sourceMappingURL=merchants.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"merchants.d.ts","sourceRoot":"","sources":["../../../src/resources/merchants.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAA;AAC/C,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAA;AAE3C,qBAAa,SAAS;IACR,OAAO,CAAC,QAAQ,CAAC,MAAM;gBAAN,MAAM,EAAE,WAAW;IAEhD;;;;;;;;;;OAUG;IACG,EAAE,IAAI,OAAO,CAAC,QAAQ,CAAC;CAO9B"}