tupay 0.9.0 → 0.11.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.
Files changed (105) hide show
  1. package/dist/cjs/errors.d.ts +36 -0
  2. package/dist/cjs/errors.d.ts.map +1 -1
  3. package/dist/cjs/errors.js +49 -19
  4. package/dist/cjs/errors.js.map +1 -1
  5. package/dist/cjs/index.d.ts +38 -1
  6. package/dist/cjs/index.d.ts.map +1 -1
  7. package/dist/cjs/index.js +47 -1
  8. package/dist/cjs/index.js.map +1 -1
  9. package/dist/cjs/resources/checkout-sessions.d.ts +85 -0
  10. package/dist/cjs/resources/checkout-sessions.d.ts.map +1 -0
  11. package/dist/cjs/resources/checkout-sessions.js +69 -0
  12. package/dist/cjs/resources/checkout-sessions.js.map +1 -0
  13. package/dist/cjs/resources/customers.d.ts +80 -0
  14. package/dist/cjs/resources/customers.d.ts.map +1 -0
  15. package/dist/cjs/resources/customers.js +77 -0
  16. package/dist/cjs/resources/customers.js.map +1 -0
  17. package/dist/cjs/resources/payment-intents.d.ts +27 -0
  18. package/dist/cjs/resources/payment-intents.d.ts.map +1 -1
  19. package/dist/cjs/resources/payment-intents.js.map +1 -1
  20. package/dist/cjs/resources/payment-links.d.ts +26 -1
  21. package/dist/cjs/resources/payment-links.d.ts.map +1 -1
  22. package/dist/cjs/resources/payment-links.js.map +1 -1
  23. package/dist/cjs/resources/payment-methods.d.ts +76 -0
  24. package/dist/cjs/resources/payment-methods.d.ts.map +1 -0
  25. package/dist/cjs/resources/payment-methods.js +77 -0
  26. package/dist/cjs/resources/payment-methods.js.map +1 -0
  27. package/dist/cjs/resources/prices.d.ts +73 -0
  28. package/dist/cjs/resources/prices.d.ts.map +1 -0
  29. package/dist/cjs/resources/prices.js +78 -0
  30. package/dist/cjs/resources/prices.js.map +1 -0
  31. package/dist/cjs/resources/products.d.ts +56 -0
  32. package/dist/cjs/resources/products.d.ts.map +1 -0
  33. package/dist/cjs/resources/products.js +70 -0
  34. package/dist/cjs/resources/products.js.map +1 -0
  35. package/dist/cjs/resources/receipts.d.ts +40 -0
  36. package/dist/cjs/resources/receipts.d.ts.map +1 -0
  37. package/dist/cjs/resources/receipts.js +49 -0
  38. package/dist/cjs/resources/receipts.js.map +1 -0
  39. package/dist/cjs/resources/setup-intents.d.ts +46 -0
  40. package/dist/cjs/resources/setup-intents.d.ts.map +1 -0
  41. package/dist/cjs/resources/setup-intents.js +62 -0
  42. package/dist/cjs/resources/setup-intents.js.map +1 -0
  43. package/dist/cjs/resources/subscriptions.d.ts +55 -0
  44. package/dist/cjs/resources/subscriptions.d.ts.map +1 -0
  45. package/dist/cjs/resources/subscriptions.js +61 -0
  46. package/dist/cjs/resources/subscriptions.js.map +1 -0
  47. package/dist/cjs/resources/transactions.d.ts +7 -0
  48. package/dist/cjs/resources/transactions.d.ts.map +1 -1
  49. package/dist/cjs/resources/transactions.js +1 -0
  50. package/dist/cjs/resources/transactions.js.map +1 -1
  51. package/dist/cjs/types.d.ts +351 -0
  52. package/dist/cjs/types.d.ts.map +1 -1
  53. package/dist/esm/errors.d.ts +36 -0
  54. package/dist/esm/errors.d.ts.map +1 -1
  55. package/dist/esm/errors.js +47 -18
  56. package/dist/esm/errors.js.map +1 -1
  57. package/dist/esm/index.d.ts +38 -1
  58. package/dist/esm/index.d.ts.map +1 -1
  59. package/dist/esm/index.js +38 -1
  60. package/dist/esm/index.js.map +1 -1
  61. package/dist/esm/resources/checkout-sessions.d.ts +85 -0
  62. package/dist/esm/resources/checkout-sessions.d.ts.map +1 -0
  63. package/dist/esm/resources/checkout-sessions.js +65 -0
  64. package/dist/esm/resources/checkout-sessions.js.map +1 -0
  65. package/dist/esm/resources/customers.d.ts +80 -0
  66. package/dist/esm/resources/customers.d.ts.map +1 -0
  67. package/dist/esm/resources/customers.js +73 -0
  68. package/dist/esm/resources/customers.js.map +1 -0
  69. package/dist/esm/resources/payment-intents.d.ts +27 -0
  70. package/dist/esm/resources/payment-intents.d.ts.map +1 -1
  71. package/dist/esm/resources/payment-intents.js.map +1 -1
  72. package/dist/esm/resources/payment-links.d.ts +26 -1
  73. package/dist/esm/resources/payment-links.d.ts.map +1 -1
  74. package/dist/esm/resources/payment-links.js.map +1 -1
  75. package/dist/esm/resources/payment-methods.d.ts +76 -0
  76. package/dist/esm/resources/payment-methods.d.ts.map +1 -0
  77. package/dist/esm/resources/payment-methods.js +73 -0
  78. package/dist/esm/resources/payment-methods.js.map +1 -0
  79. package/dist/esm/resources/prices.d.ts +73 -0
  80. package/dist/esm/resources/prices.d.ts.map +1 -0
  81. package/dist/esm/resources/prices.js +74 -0
  82. package/dist/esm/resources/prices.js.map +1 -0
  83. package/dist/esm/resources/products.d.ts +56 -0
  84. package/dist/esm/resources/products.d.ts.map +1 -0
  85. package/dist/esm/resources/products.js +66 -0
  86. package/dist/esm/resources/products.js.map +1 -0
  87. package/dist/esm/resources/receipts.d.ts +40 -0
  88. package/dist/esm/resources/receipts.d.ts.map +1 -0
  89. package/dist/esm/resources/receipts.js +45 -0
  90. package/dist/esm/resources/receipts.js.map +1 -0
  91. package/dist/esm/resources/setup-intents.d.ts +46 -0
  92. package/dist/esm/resources/setup-intents.d.ts.map +1 -0
  93. package/dist/esm/resources/setup-intents.js +58 -0
  94. package/dist/esm/resources/setup-intents.js.map +1 -0
  95. package/dist/esm/resources/subscriptions.d.ts +55 -0
  96. package/dist/esm/resources/subscriptions.d.ts.map +1 -0
  97. package/dist/esm/resources/subscriptions.js +57 -0
  98. package/dist/esm/resources/subscriptions.js.map +1 -0
  99. package/dist/esm/resources/transactions.d.ts +7 -0
  100. package/dist/esm/resources/transactions.d.ts.map +1 -1
  101. package/dist/esm/resources/transactions.js +1 -0
  102. package/dist/esm/resources/transactions.js.map +1 -1
  103. package/dist/esm/types.d.ts +351 -0
  104. package/dist/esm/types.d.ts.map +1 -1
  105. package/package.json +1 -1
@@ -0,0 +1,73 @@
1
+ import { TupayClient } from '../client.js';
2
+ import { normaliserListe, parametresListe, } from '../liste.js';
3
+ /**
4
+ * Les cartes enregistrées de vos clients.
5
+ *
6
+ * @example
7
+ * // Le jeton vient de Stripe.js, dans le navigateur du porteur.
8
+ * const moyen = await tupay.paymentMethods.create({
9
+ * customer: client.id,
10
+ * token: jetonDuNavigateur,
11
+ * })
12
+ * moyen.last4 // '4242'
13
+ * moyen.default // true — c'était le premier
14
+ */
15
+ export class PaymentMethods {
16
+ client;
17
+ constructor(client) {
18
+ this.client = client;
19
+ }
20
+ async create(params) {
21
+ const { idempotencyKey, ...body } = params;
22
+ const { data } = await this.client.request({
23
+ method: 'POST',
24
+ path: '/payment-methods',
25
+ body,
26
+ idempotencyKey: idempotencyKey ?? TupayClient.idempotencyKey(),
27
+ });
28
+ return data;
29
+ }
30
+ /** Rend aussi les moyens détachés, qui portent `detached: true`. */
31
+ async retrieve(id) {
32
+ const { data } = await this.client.request({
33
+ method: 'GET',
34
+ path: `/payment-methods/${encodeURIComponent(id)}`,
35
+ });
36
+ return data;
37
+ }
38
+ /** Les moyens détachés ne figurent pas dans la liste. */
39
+ async list(params = {}) {
40
+ return normaliserListe(await this.client.request({
41
+ method: 'GET',
42
+ path: '/payment-methods',
43
+ query: { ...parametresListe(params), customer: params.customer },
44
+ }));
45
+ }
46
+ async update(id, params) {
47
+ const { data } = await this.client.request({
48
+ method: 'PATCH',
49
+ path: `/payment-methods/${encodeURIComponent(id)}`,
50
+ body: params,
51
+ });
52
+ return data;
53
+ }
54
+ /** Raccourci lisible pour `update(id, { default: true })`. */
55
+ async setDefault(id) {
56
+ return this.update(id, { default: true });
57
+ }
58
+ /**
59
+ * Détache le moyen : il cesse d'être utilisable, **sans que rien ne
60
+ * soit effacé**. Il quitte la liste et reste lisible — les paiements
61
+ * qu'il a servis le désignent.
62
+ *
63
+ * `del` et non `delete` : mot réservé de JavaScript.
64
+ */
65
+ async del(id) {
66
+ const { data } = await this.client.request({
67
+ method: 'DELETE',
68
+ path: `/payment-methods/${encodeURIComponent(id)}`,
69
+ });
70
+ return data;
71
+ }
72
+ }
73
+ //# sourceMappingURL=payment-methods.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"payment-methods.js","sourceRoot":"","sources":["../../../src/resources/payment-methods.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAA;AAE1C,OAAO,EACL,eAAe,EACf,eAAe,GAGhB,MAAM,aAAa,CAAA;AA6CpB;;;;;;;;;;;GAWG;AACH,MAAM,OAAO,cAAc;IACI;IAA7B,YAA6B,MAAmB;QAAnB,WAAM,GAAN,MAAM,CAAa;IAAG,CAAC;IAEpD,KAAK,CAAC,MAAM,CAAC,MAAiC;QAC5C,MAAM,EAAE,cAAc,EAAE,GAAG,IAAI,EAAE,GAAG,MAAM,CAAA;QAC1C,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,OAAO,CAA0B;YAClE,MAAM,EAAE,MAAM;YACd,IAAI,EAAE,kBAAkB;YACxB,IAAI;YACJ,cAAc,EAAE,cAAc,IAAI,WAAW,CAAC,cAAc,EAAE;SAC/D,CAAC,CAAA;QACF,OAAO,IAAI,CAAA;IACb,CAAC;IAED,oEAAoE;IACpE,KAAK,CAAC,QAAQ,CAAC,EAAU;QACvB,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,OAAO,CAA0B;YAClE,MAAM,EAAE,KAAK;YACb,IAAI,EAAE,oBAAoB,kBAAkB,CAAC,EAAE,CAAC,EAAE;SACnD,CAAC,CAAA;QACF,OAAO,IAAI,CAAA;IACb,CAAC;IAED,yDAAyD;IACzD,KAAK,CAAC,IAAI,CAAC,SAAmC,EAAE;QAC9C,OAAO,eAAe,CACpB,MAAM,IAAI,CAAC,MAAM,CAAC,OAAO,CAA4B;YACnD,MAAM,EAAE,KAAK;YACb,IAAI,EAAE,kBAAkB;YACxB,KAAK,EAAE,EAAE,GAAG,eAAe,CAAC,MAAM,CAAC,EAAE,QAAQ,EAAE,MAAM,CAAC,QAAQ,EAAE;SACjE,CAAC,CACH,CAAA;IACH,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,EAAU,EAAE,MAAiC;QACxD,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,OAAO,CAA0B;YAClE,MAAM,EAAE,OAAO;YACf,IAAI,EAAE,oBAAoB,kBAAkB,CAAC,EAAE,CAAC,EAAE;YAClD,IAAI,EAAE,MAAM;SACb,CAAC,CAAA;QACF,OAAO,IAAI,CAAA;IACb,CAAC;IAED,8DAA8D;IAC9D,KAAK,CAAC,UAAU,CAAC,EAAU;QACzB,OAAO,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAA;IAC3C,CAAC;IAED;;;;;;OAMG;IACH,KAAK,CAAC,GAAG,CAAC,EAAU;QAClB,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,OAAO,CAA0B;YAClE,MAAM,EAAE,QAAQ;YAChB,IAAI,EAAE,oBAAoB,kBAAkB,CAAC,EAAE,CAAC,EAAE;SACnD,CAAC,CAAA;QACF,OAAO,IAAI,CAAA;IACb,CAAC;CACF"}
@@ -0,0 +1,73 @@
1
+ import { TupayClient } from '../client.js';
2
+ import type { ListResult, Price, RecurringInterval } from '../types.js';
3
+ import { type ListParams } from '../liste.js';
4
+ export interface CreatePriceParams {
5
+ /** Article auquel attacher ce prix — `<uuid>` ou `prod_<uuid>`. */
6
+ product: string;
7
+ /**
8
+ * Entier de francs pacifiques.
9
+ *
10
+ * ⚠️ **Le XPF n'a pas de centimes.** 6 000 XPF s'écrit `6000`, jamais
11
+ * `6000.50` ni `600000` — si vous venez de Stripe, ce n'est pas la
12
+ * plus petite unité, c'est le franc.
13
+ */
14
+ amountXpf: number;
15
+ /** Absent = tarif ponctuel. */
16
+ recurring?: {
17
+ interval: RecurringInterval;
18
+ /** « tous les 3 mois » = `month` + `3`. Défaut 1. */
19
+ intervalCount?: number;
20
+ };
21
+ nickname?: string;
22
+ metadata?: Record<string, string>;
23
+ /** Omise, le SDK en génère une (UUID v4) : la requête devient rejouable. */
24
+ idempotencyKey?: string;
25
+ }
26
+ /**
27
+ * ⚠️ Ni `amountXpf`, ni `recurring`, ni `product` — **un tarif est
28
+ * immuable**. Pour changer un prix : créez-en un nouveau, puis
29
+ * désactivez l'ancien. Vos liens existants continueront de fonctionner.
30
+ */
31
+ export interface UpdatePriceParams {
32
+ nickname?: string | null;
33
+ active?: boolean;
34
+ metadata?: Record<string, string | null> | null;
35
+ }
36
+ export interface ListPricesParams extends ListParams {
37
+ /** N'obtenir que les tarifs de cet article. */
38
+ product?: string;
39
+ active?: boolean;
40
+ }
41
+ /**
42
+ * Les prix de votre catalogue.
43
+ *
44
+ * @example
45
+ * const unitaire = await tupay.prices.create({
46
+ * product: article.id,
47
+ * amountXpf: 6000,
48
+ * })
49
+ * const abonnement = await tupay.prices.create({
50
+ * product: article.id,
51
+ * amountXpf: 45000,
52
+ * recurring: { interval: 'month' },
53
+ * })
54
+ */
55
+ export declare class Prices {
56
+ private readonly client;
57
+ constructor(client: TupayClient);
58
+ create(params: CreatePriceParams): Promise<Price>;
59
+ /** Rend aussi les tarifs désactivés — pour savoir à combien on vendait. */
60
+ retrieve(id: string): Promise<Price>;
61
+ list(params?: ListPricesParams): Promise<ListResult<Price>>;
62
+ /**
63
+ * Modifie l'ÉTIQUETAGE seulement.
64
+ *
65
+ * Une tentative de changer le prix lève une `TupayConflictError` : le
66
+ * montant est immuable, y compris en base.
67
+ */
68
+ update(id: string, params: UpdatePriceParams): Promise<Price>;
69
+ /** Retire le tarif des nouvelles ventes. Réversible. */
70
+ deactivate(id: string): Promise<Price>;
71
+ activate(id: string): Promise<Price>;
72
+ }
73
+ //# sourceMappingURL=prices.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prices.d.ts","sourceRoot":"","sources":["../../../src/resources/prices.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAA;AAC1C,OAAO,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAA;AACvE,OAAO,EAIL,KAAK,UAAU,EAChB,MAAM,aAAa,CAAA;AAEpB,MAAM,WAAW,iBAAiB;IAChC,mEAAmE;IACnE,OAAO,EAAE,MAAM,CAAA;IACf;;;;;;OAMG;IACH,SAAS,EAAE,MAAM,CAAA;IACjB,+BAA+B;IAC/B,SAAS,CAAC,EAAE;QACV,QAAQ,EAAE,iBAAiB,CAAA;QAC3B,qDAAqD;QACrD,aAAa,CAAC,EAAE,MAAM,CAAA;KACvB,CAAA;IACD,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IACjC,4EAA4E;IAC5E,cAAc,CAAC,EAAE,MAAM,CAAA;CACxB;AAED;;;;GAIG;AACH,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACxB,MAAM,CAAC,EAAE,OAAO,CAAA;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC,GAAG,IAAI,CAAA;CAChD;AAED,MAAM,WAAW,gBAAiB,SAAQ,UAAU;IAClD,+CAA+C;IAC/C,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,MAAM,CAAC,EAAE,OAAO,CAAA;CACjB;AAED;;;;;;;;;;;;;GAaG;AACH,qBAAa,MAAM;IACL,OAAO,CAAC,QAAQ,CAAC,MAAM;gBAAN,MAAM,EAAE,WAAW;IAE1C,MAAM,CAAC,MAAM,EAAE,iBAAiB,GAAG,OAAO,CAAC,KAAK,CAAC;IAWvD,2EAA2E;IACrE,QAAQ,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC;IAQpC,IAAI,CAAC,MAAM,GAAE,gBAAqB,GAAG,OAAO,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;IAerE;;;;;OAKG;IACG,MAAM,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,iBAAiB,GAAG,OAAO,CAAC,KAAK,CAAC;IASnE,wDAAwD;IAClD,UAAU,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC;IAItC,QAAQ,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC;CAG3C"}
@@ -0,0 +1,74 @@
1
+ import { TupayClient } from '../client.js';
2
+ import { normaliserListe, parametresListe, } from '../liste.js';
3
+ /**
4
+ * Les prix de votre catalogue.
5
+ *
6
+ * @example
7
+ * const unitaire = await tupay.prices.create({
8
+ * product: article.id,
9
+ * amountXpf: 6000,
10
+ * })
11
+ * const abonnement = await tupay.prices.create({
12
+ * product: article.id,
13
+ * amountXpf: 45000,
14
+ * recurring: { interval: 'month' },
15
+ * })
16
+ */
17
+ export class Prices {
18
+ client;
19
+ constructor(client) {
20
+ this.client = client;
21
+ }
22
+ async create(params) {
23
+ const { idempotencyKey, ...body } = params;
24
+ const { data } = await this.client.request({
25
+ method: 'POST',
26
+ path: '/prices',
27
+ body,
28
+ idempotencyKey: idempotencyKey ?? TupayClient.idempotencyKey(),
29
+ });
30
+ return data;
31
+ }
32
+ /** Rend aussi les tarifs désactivés — pour savoir à combien on vendait. */
33
+ async retrieve(id) {
34
+ const { data } = await this.client.request({
35
+ method: 'GET',
36
+ path: `/prices/${encodeURIComponent(id)}`,
37
+ });
38
+ return data;
39
+ }
40
+ async list(params = {}) {
41
+ return normaliserListe(await this.client.request({
42
+ method: 'GET',
43
+ path: '/prices',
44
+ query: {
45
+ ...parametresListe(params),
46
+ product: params.product,
47
+ // `undefined` disparaît de la requête ; `false` doit survivre.
48
+ active: params.active === undefined ? undefined : String(params.active),
49
+ },
50
+ }));
51
+ }
52
+ /**
53
+ * Modifie l'ÉTIQUETAGE seulement.
54
+ *
55
+ * Une tentative de changer le prix lève une `TupayConflictError` : le
56
+ * montant est immuable, y compris en base.
57
+ */
58
+ async update(id, params) {
59
+ const { data } = await this.client.request({
60
+ method: 'PATCH',
61
+ path: `/prices/${encodeURIComponent(id)}`,
62
+ body: params,
63
+ });
64
+ return data;
65
+ }
66
+ /** Retire le tarif des nouvelles ventes. Réversible. */
67
+ async deactivate(id) {
68
+ return this.update(id, { active: false });
69
+ }
70
+ async activate(id) {
71
+ return this.update(id, { active: true });
72
+ }
73
+ }
74
+ //# sourceMappingURL=prices.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prices.js","sourceRoot":"","sources":["../../../src/resources/prices.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAA;AAE1C,OAAO,EACL,eAAe,EACf,eAAe,GAGhB,MAAM,aAAa,CAAA;AA0CpB;;;;;;;;;;;;;GAaG;AACH,MAAM,OAAO,MAAM;IACY;IAA7B,YAA6B,MAAmB;QAAnB,WAAM,GAAN,MAAM,CAAa;IAAG,CAAC;IAEpD,KAAK,CAAC,MAAM,CAAC,MAAyB;QACpC,MAAM,EAAE,cAAc,EAAE,GAAG,IAAI,EAAE,GAAG,MAAM,CAAA;QAC1C,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,OAAO,CAAkB;YAC1D,MAAM,EAAE,MAAM;YACd,IAAI,EAAE,SAAS;YACf,IAAI;YACJ,cAAc,EAAE,cAAc,IAAI,WAAW,CAAC,cAAc,EAAE;SAC/D,CAAC,CAAA;QACF,OAAO,IAAI,CAAA;IACb,CAAC;IAED,2EAA2E;IAC3E,KAAK,CAAC,QAAQ,CAAC,EAAU;QACvB,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,OAAO,CAAkB;YAC1D,MAAM,EAAE,KAAK;YACb,IAAI,EAAE,WAAW,kBAAkB,CAAC,EAAE,CAAC,EAAE;SAC1C,CAAC,CAAA;QACF,OAAO,IAAI,CAAA;IACb,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,SAA2B,EAAE;QACtC,OAAO,eAAe,CACpB,MAAM,IAAI,CAAC,MAAM,CAAC,OAAO,CAAoB;YAC3C,MAAM,EAAE,KAAK;YACb,IAAI,EAAE,SAAS;YACf,KAAK,EAAE;gBACL,GAAG,eAAe,CAAC,MAAM,CAAC;gBAC1B,OAAO,EAAE,MAAM,CAAC,OAAO;gBACvB,+DAA+D;gBAC/D,MAAM,EAAE,MAAM,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC;aACxE;SACF,CAAC,CACH,CAAA;IACH,CAAC;IAED;;;;;OAKG;IACH,KAAK,CAAC,MAAM,CAAC,EAAU,EAAE,MAAyB;QAChD,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,OAAO,CAAkB;YAC1D,MAAM,EAAE,OAAO;YACf,IAAI,EAAE,WAAW,kBAAkB,CAAC,EAAE,CAAC,EAAE;YACzC,IAAI,EAAE,MAAM;SACb,CAAC,CAAA;QACF,OAAO,IAAI,CAAA;IACb,CAAC;IAED,wDAAwD;IACxD,KAAK,CAAC,UAAU,CAAC,EAAU;QACzB,OAAO,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAA;IAC3C,CAAC;IAED,KAAK,CAAC,QAAQ,CAAC,EAAU;QACvB,OAAO,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAA;IAC1C,CAAC;CACF"}
@@ -0,0 +1,56 @@
1
+ import { TupayClient } from '../client.js';
2
+ import type { ListResult, Product } from '../types.js';
3
+ import { type ListParams } from '../liste.js';
4
+ export interface CreateProductParams {
5
+ /** Le seul champ requis. Deux articles peuvent porter le même nom. */
6
+ name: string;
7
+ description?: string;
8
+ metadata?: Record<string, string>;
9
+ /** Omise, le SDK en génère une (UUID v4) : la requête devient rejouable. */
10
+ idempotencyKey?: string;
11
+ }
12
+ /**
13
+ * `null` EFFACE la description ; l'omettre la laisse inchangée.
14
+ *
15
+ * `name` n'est pas effaçable — un article sans nom n'existe pas.
16
+ */
17
+ export interface UpdateProductParams {
18
+ name?: string;
19
+ description?: string | null;
20
+ /**
21
+ * `false` retire l'article des nouvelles ventes **sans rien détruire** :
22
+ * ses tarifs existants continuent de fonctionner. Réversible.
23
+ */
24
+ active?: boolean;
25
+ metadata?: Record<string, string | null> | null;
26
+ }
27
+ export interface ListProductsParams extends ListParams {
28
+ /** Omis, la liste montre TOUT — actifs et inactifs. */
29
+ active?: boolean;
30
+ }
31
+ /**
32
+ * Le catalogue : ce que vous vendez.
33
+ *
34
+ * @example
35
+ * const article = await tupay.products.create({ name: 'Sortie lagon' })
36
+ * // Plus tard, hors saison :
37
+ * await tupay.products.deactivate(article.id)
38
+ */
39
+ export declare class Products {
40
+ private readonly client;
41
+ constructor(client: TupayClient);
42
+ create(params: CreateProductParams): Promise<Product>;
43
+ /** Rend aussi les articles désactivés — le seul moyen de les réactiver. */
44
+ retrieve(id: string): Promise<Product>;
45
+ list(params?: ListProductsParams): Promise<ListResult<Product>>;
46
+ update(id: string, params: UpdateProductParams): Promise<Product>;
47
+ /**
48
+ * Retire l'article des nouvelles ventes.
49
+ *
50
+ * Il n'y a pas de `del()` : un article se désactive, il ne se supprime
51
+ * pas. `activate()` défait exactement ceci.
52
+ */
53
+ deactivate(id: string): Promise<Product>;
54
+ activate(id: string): Promise<Product>;
55
+ }
56
+ //# sourceMappingURL=products.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"products.d.ts","sourceRoot":"","sources":["../../../src/resources/products.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAA;AAC1C,OAAO,KAAK,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,aAAa,CAAA;AACtD,OAAO,EAIL,KAAK,UAAU,EAChB,MAAM,aAAa,CAAA;AAEpB,MAAM,WAAW,mBAAmB;IAClC,sEAAsE;IACtE,IAAI,EAAE,MAAM,CAAA;IACZ,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IACjC,4EAA4E;IAC5E,cAAc,CAAC,EAAE,MAAM,CAAA;CACxB;AAED;;;;GAIG;AACH,MAAM,WAAW,mBAAmB;IAClC,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IAC3B;;;OAGG;IACH,MAAM,CAAC,EAAE,OAAO,CAAA;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC,GAAG,IAAI,CAAA;CAChD;AAED,MAAM,WAAW,kBAAmB,SAAQ,UAAU;IACpD,uDAAuD;IACvD,MAAM,CAAC,EAAE,OAAO,CAAA;CACjB;AAED;;;;;;;GAOG;AACH,qBAAa,QAAQ;IACP,OAAO,CAAC,QAAQ,CAAC,MAAM;gBAAN,MAAM,EAAE,WAAW;IAE1C,MAAM,CAAC,MAAM,EAAE,mBAAmB,GAAG,OAAO,CAAC,OAAO,CAAC;IAW3D,2EAA2E;IACrE,QAAQ,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAQtC,IAAI,CAAC,MAAM,GAAE,kBAAuB,GAAG,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;IAcnE,MAAM,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,mBAAmB,GAAG,OAAO,CAAC,OAAO,CAAC;IASvE;;;;;OAKG;IACG,UAAU,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAIxC,QAAQ,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;CAG7C"}
@@ -0,0 +1,66 @@
1
+ import { TupayClient } from '../client.js';
2
+ import { normaliserListe, parametresListe, } from '../liste.js';
3
+ /**
4
+ * Le catalogue : ce que vous vendez.
5
+ *
6
+ * @example
7
+ * const article = await tupay.products.create({ name: 'Sortie lagon' })
8
+ * // Plus tard, hors saison :
9
+ * await tupay.products.deactivate(article.id)
10
+ */
11
+ export class Products {
12
+ client;
13
+ constructor(client) {
14
+ this.client = client;
15
+ }
16
+ async create(params) {
17
+ const { idempotencyKey, ...body } = params;
18
+ const { data } = await this.client.request({
19
+ method: 'POST',
20
+ path: '/products',
21
+ body,
22
+ idempotencyKey: idempotencyKey ?? TupayClient.idempotencyKey(),
23
+ });
24
+ return data;
25
+ }
26
+ /** Rend aussi les articles désactivés — le seul moyen de les réactiver. */
27
+ async retrieve(id) {
28
+ const { data } = await this.client.request({
29
+ method: 'GET',
30
+ path: `/products/${encodeURIComponent(id)}`,
31
+ });
32
+ return data;
33
+ }
34
+ async list(params = {}) {
35
+ return normaliserListe(await this.client.request({
36
+ method: 'GET',
37
+ path: '/products',
38
+ query: {
39
+ ...parametresListe(params),
40
+ // `undefined` disparaît de la requête ; `false` doit survivre.
41
+ active: params.active === undefined ? undefined : String(params.active),
42
+ },
43
+ }));
44
+ }
45
+ async update(id, params) {
46
+ const { data } = await this.client.request({
47
+ method: 'PATCH',
48
+ path: `/products/${encodeURIComponent(id)}`,
49
+ body: params,
50
+ });
51
+ return data;
52
+ }
53
+ /**
54
+ * Retire l'article des nouvelles ventes.
55
+ *
56
+ * Il n'y a pas de `del()` : un article se désactive, il ne se supprime
57
+ * pas. `activate()` défait exactement ceci.
58
+ */
59
+ async deactivate(id) {
60
+ return this.update(id, { active: false });
61
+ }
62
+ async activate(id) {
63
+ return this.update(id, { active: true });
64
+ }
65
+ }
66
+ //# sourceMappingURL=products.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"products.js","sourceRoot":"","sources":["../../../src/resources/products.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAA;AAE1C,OAAO,EACL,eAAe,EACf,eAAe,GAGhB,MAAM,aAAa,CAAA;AAgCpB;;;;;;;GAOG;AACH,MAAM,OAAO,QAAQ;IACU;IAA7B,YAA6B,MAAmB;QAAnB,WAAM,GAAN,MAAM,CAAa;IAAG,CAAC;IAEpD,KAAK,CAAC,MAAM,CAAC,MAA2B;QACtC,MAAM,EAAE,cAAc,EAAE,GAAG,IAAI,EAAE,GAAG,MAAM,CAAA;QAC1C,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,OAAO,CAAoB;YAC5D,MAAM,EAAE,MAAM;YACd,IAAI,EAAE,WAAW;YACjB,IAAI;YACJ,cAAc,EAAE,cAAc,IAAI,WAAW,CAAC,cAAc,EAAE;SAC/D,CAAC,CAAA;QACF,OAAO,IAAI,CAAA;IACb,CAAC;IAED,2EAA2E;IAC3E,KAAK,CAAC,QAAQ,CAAC,EAAU;QACvB,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,OAAO,CAAoB;YAC5D,MAAM,EAAE,KAAK;YACb,IAAI,EAAE,aAAa,kBAAkB,CAAC,EAAE,CAAC,EAAE;SAC5C,CAAC,CAAA;QACF,OAAO,IAAI,CAAA;IACb,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,SAA6B,EAAE;QACxC,OAAO,eAAe,CACpB,MAAM,IAAI,CAAC,MAAM,CAAC,OAAO,CAAsB;YAC7C,MAAM,EAAE,KAAK;YACb,IAAI,EAAE,WAAW;YACjB,KAAK,EAAE;gBACL,GAAG,eAAe,CAAC,MAAM,CAAC;gBAC1B,+DAA+D;gBAC/D,MAAM,EAAE,MAAM,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC;aACxE;SACF,CAAC,CACH,CAAA;IACH,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,EAAU,EAAE,MAA2B;QAClD,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,OAAO,CAAoB;YAC5D,MAAM,EAAE,OAAO;YACf,IAAI,EAAE,aAAa,kBAAkB,CAAC,EAAE,CAAC,EAAE;YAC3C,IAAI,EAAE,MAAM;SACb,CAAC,CAAA;QACF,OAAO,IAAI,CAAA;IACb,CAAC;IAED;;;;;OAKG;IACH,KAAK,CAAC,UAAU,CAAC,EAAU;QACzB,OAAO,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAA;IAC3C,CAAC;IAED,KAAK,CAAC,QAAQ,CAAC,EAAU;QACvB,OAAO,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAA;IAC1C,CAAC;CACF"}
@@ -0,0 +1,40 @@
1
+ import type { ListResult, Receipt, ReceiptStatus } from '../types.js';
2
+ import { TupayClient } from '../client.js';
3
+ import { type ListParams } from '../liste.js';
4
+ export interface ListReceiptsParams extends ListParams {
5
+ /**
6
+ * `'failed'` et `'exhausted'` sont les deux à surveiller : votre
7
+ * client n'a rien reçu, et vous êtes le seul à pouvoir le savoir.
8
+ */
9
+ status?: ReceiptStatus;
10
+ }
11
+ /**
12
+ * Les reçus envoyés à vos clients.
13
+ *
14
+ * Vous n'avez rien à déclencher : un reçu part tout seul dès qu'un
15
+ * paiement aboutit avec une adresse connue. Ces méthodes sont le
16
+ * **journal** — à quelle adresse, quand, et ce qui a échoué.
17
+ *
18
+ * @example
19
+ * const aTraiter = await tupay.receipts.list({ status: 'exhausted' })
20
+ * for (const recu of aTraiter.data) {
21
+ * console.log(recu.email, recu.lastError)
22
+ * }
23
+ */
24
+ export declare class Receipts {
25
+ private readonly client;
26
+ constructor(client: TupayClient);
27
+ list(params?: ListReceiptsParams): Promise<ListResult<Receipt>>;
28
+ /**
29
+ * Remet un reçu en file.
30
+ *
31
+ * Le rejeu automatique s'arrête au bout de sept tentatives (~34 h).
32
+ * Passé ce délai, vous seul savez si la cause a disparu.
33
+ *
34
+ * **Aucun second reçu n'est créé** : la ligne existante repart à zéro.
35
+ * Un reçu déjà parti lève une `TupayConflictError` — le renvoyer ferait
36
+ * douter votre client d'un second débit.
37
+ */
38
+ resend(id: string): Promise<Receipt>;
39
+ }
40
+ //# sourceMappingURL=receipts.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"receipts.d.ts","sourceRoot":"","sources":["../../../src/resources/receipts.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAA;AACrE,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAA;AAC1C,OAAO,EAIL,KAAK,UAAU,EAChB,MAAM,aAAa,CAAA;AAEpB,MAAM,WAAW,kBAAmB,SAAQ,UAAU;IACpD;;;OAGG;IACH,MAAM,CAAC,EAAE,aAAa,CAAA;CACvB;AAED;;;;;;;;;;;;GAYG;AACH,qBAAa,QAAQ;IACP,OAAO,CAAC,QAAQ,CAAC,MAAM;gBAAN,MAAM,EAAE,WAAW;IAE1C,IAAI,CAAC,MAAM,GAAE,kBAAuB,GAAG,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;IAUzE;;;;;;;;;OASG;IACG,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;CAO3C"}
@@ -0,0 +1,45 @@
1
+ import { normaliserListe, parametresListe, } from '../liste.js';
2
+ /**
3
+ * Les reçus envoyés à vos clients.
4
+ *
5
+ * Vous n'avez rien à déclencher : un reçu part tout seul dès qu'un
6
+ * paiement aboutit avec une adresse connue. Ces méthodes sont le
7
+ * **journal** — à quelle adresse, quand, et ce qui a échoué.
8
+ *
9
+ * @example
10
+ * const aTraiter = await tupay.receipts.list({ status: 'exhausted' })
11
+ * for (const recu of aTraiter.data) {
12
+ * console.log(recu.email, recu.lastError)
13
+ * }
14
+ */
15
+ export class Receipts {
16
+ client;
17
+ constructor(client) {
18
+ this.client = client;
19
+ }
20
+ async list(params = {}) {
21
+ return normaliserListe(await this.client.request({
22
+ method: 'GET',
23
+ path: '/receipts',
24
+ query: { ...parametresListe(params), status: params.status },
25
+ }));
26
+ }
27
+ /**
28
+ * Remet un reçu en file.
29
+ *
30
+ * Le rejeu automatique s'arrête au bout de sept tentatives (~34 h).
31
+ * Passé ce délai, vous seul savez si la cause a disparu.
32
+ *
33
+ * **Aucun second reçu n'est créé** : la ligne existante repart à zéro.
34
+ * Un reçu déjà parti lève une `TupayConflictError` — le renvoyer ferait
35
+ * douter votre client d'un second débit.
36
+ */
37
+ async resend(id) {
38
+ const { data } = await this.client.request({
39
+ method: 'POST',
40
+ path: `/receipts/${encodeURIComponent(id)}/resend`,
41
+ });
42
+ return data;
43
+ }
44
+ }
45
+ //# sourceMappingURL=receipts.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"receipts.js","sourceRoot":"","sources":["../../../src/resources/receipts.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,eAAe,EACf,eAAe,GAGhB,MAAM,aAAa,CAAA;AAUpB;;;;;;;;;;;;GAYG;AACH,MAAM,OAAO,QAAQ;IACU;IAA7B,YAA6B,MAAmB;QAAnB,WAAM,GAAN,MAAM,CAAa;IAAG,CAAC;IAEpD,KAAK,CAAC,IAAI,CAAC,SAA6B,EAAE;QACxC,OAAO,eAAe,CACpB,MAAM,IAAI,CAAC,MAAM,CAAC,OAAO,CAAsB;YAC7C,MAAM,EAAE,KAAK;YACb,IAAI,EAAE,WAAW;YACjB,KAAK,EAAE,EAAE,GAAG,eAAe,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE;SAC7D,CAAC,CACH,CAAA;IACH,CAAC;IAED;;;;;;;;;OASG;IACH,KAAK,CAAC,MAAM,CAAC,EAAU;QACrB,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,OAAO,CAAoB;YAC5D,MAAM,EAAE,MAAM;YACd,IAAI,EAAE,aAAa,kBAAkB,CAAC,EAAE,CAAC,SAAS;SACnD,CAAC,CAAA;QACF,OAAO,IAAI,CAAA;IACb,CAAC;CACF"}
@@ -0,0 +1,46 @@
1
+ import { TupayClient } from '../client.js';
2
+ import type { ListResult, SetupIntent, SetupIntentWithSecret } from '../types.js';
3
+ import { type ListParams } from '../liste.js';
4
+ export interface CreateSetupIntentParams {
5
+ /** Client pour lequel enregistrer la carte — `<uuid>` ou `cus_<uuid>`. */
6
+ customer: string;
7
+ metadata?: Record<string, string>;
8
+ /** Omise, le SDK en génère une (UUID v4) : la requête devient rejouable. */
9
+ idempotencyKey?: string;
10
+ }
11
+ export interface ListSetupIntentsParams extends ListParams {
12
+ customer?: string;
13
+ }
14
+ /**
15
+ * Enregistrer une carte sans débiter.
16
+ *
17
+ * ⚠️ **Aucun montant n'est accepté ni débité par ce chemin.** Pour
18
+ * encaisser, c'est `tupay.paymentIntents.create()`.
19
+ *
20
+ * @example
21
+ * const intention = await tupay.setupIntents.create({ customer: client.id })
22
+ * // Transmettez `intention.clientSecret` au navigateur du porteur :
23
+ * // il y saisit sa carte, chez le prestataire, sans passer par vous.
24
+ */
25
+ export declare class SetupIntents {
26
+ private readonly client;
27
+ constructor(client: TupayClient);
28
+ /**
29
+ * Ouvre l'enregistrement et rend le secret de session.
30
+ *
31
+ * ⚠️ `clientSecret` n'est servi qu'ICI. Ni `retrieve()` ni `list()` ne
32
+ * le rendent : un secret relisible à volonté, avec n'importe quelle
33
+ * clé, n'en est plus un. Transmettez-le au navigateur tout de suite,
34
+ * ou rouvrez un enregistrement.
35
+ */
36
+ create(params: CreateSetupIntentParams): Promise<SetupIntentWithSecret>;
37
+ /**
38
+ * Le statut de l'enregistrement.
39
+ *
40
+ * Sur un échec, `failureCode` porte un code machine stable et
41
+ * `failureMessage` une phrase française montrable au porteur.
42
+ */
43
+ retrieve(id: string): Promise<SetupIntent>;
44
+ list(params?: ListSetupIntentsParams): Promise<ListResult<SetupIntent>>;
45
+ }
46
+ //# sourceMappingURL=setup-intents.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"setup-intents.d.ts","sourceRoot":"","sources":["../../../src/resources/setup-intents.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAA;AAC1C,OAAO,KAAK,EAAE,UAAU,EAAE,WAAW,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAA;AACjF,OAAO,EAIL,KAAK,UAAU,EAChB,MAAM,aAAa,CAAA;AAEpB,MAAM,WAAW,uBAAuB;IACtC,0EAA0E;IAC1E,QAAQ,EAAE,MAAM,CAAA;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IACjC,4EAA4E;IAC5E,cAAc,CAAC,EAAE,MAAM,CAAA;CACxB;AAED,MAAM,WAAW,sBAAuB,SAAQ,UAAU;IACxD,QAAQ,CAAC,EAAE,MAAM,CAAA;CAClB;AAED;;;;;;;;;;GAUG;AACH,qBAAa,YAAY;IACX,OAAO,CAAC,QAAQ,CAAC,MAAM;gBAAN,MAAM,EAAE,WAAW;IAEhD;;;;;;;OAOG;IACG,MAAM,CAAC,MAAM,EAAE,uBAAuB,GAAG,OAAO,CAAC,qBAAqB,CAAC;IAW7E;;;;;OAKG;IACG,QAAQ,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC;IAQ1C,IAAI,CAAC,MAAM,GAAE,sBAA2B,GAAG,OAAO,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;CASlF"}
@@ -0,0 +1,58 @@
1
+ import { TupayClient } from '../client.js';
2
+ import { normaliserListe, parametresListe, } from '../liste.js';
3
+ /**
4
+ * Enregistrer une carte sans débiter.
5
+ *
6
+ * ⚠️ **Aucun montant n'est accepté ni débité par ce chemin.** Pour
7
+ * encaisser, c'est `tupay.paymentIntents.create()`.
8
+ *
9
+ * @example
10
+ * const intention = await tupay.setupIntents.create({ customer: client.id })
11
+ * // Transmettez `intention.clientSecret` au navigateur du porteur :
12
+ * // il y saisit sa carte, chez le prestataire, sans passer par vous.
13
+ */
14
+ export class SetupIntents {
15
+ client;
16
+ constructor(client) {
17
+ this.client = client;
18
+ }
19
+ /**
20
+ * Ouvre l'enregistrement et rend le secret de session.
21
+ *
22
+ * ⚠️ `clientSecret` n'est servi qu'ICI. Ni `retrieve()` ni `list()` ne
23
+ * le rendent : un secret relisible à volonté, avec n'importe quelle
24
+ * clé, n'en est plus un. Transmettez-le au navigateur tout de suite,
25
+ * ou rouvrez un enregistrement.
26
+ */
27
+ async create(params) {
28
+ const { idempotencyKey, ...body } = params;
29
+ const { data } = await this.client.request({
30
+ method: 'POST',
31
+ path: '/setup-intents',
32
+ body,
33
+ idempotencyKey: idempotencyKey ?? TupayClient.idempotencyKey(),
34
+ });
35
+ return data;
36
+ }
37
+ /**
38
+ * Le statut de l'enregistrement.
39
+ *
40
+ * Sur un échec, `failureCode` porte un code machine stable et
41
+ * `failureMessage` une phrase française montrable au porteur.
42
+ */
43
+ async retrieve(id) {
44
+ const { data } = await this.client.request({
45
+ method: 'GET',
46
+ path: `/setup-intents/${encodeURIComponent(id)}`,
47
+ });
48
+ return data;
49
+ }
50
+ async list(params = {}) {
51
+ return normaliserListe(await this.client.request({
52
+ method: 'GET',
53
+ path: '/setup-intents',
54
+ query: { ...parametresListe(params), customer: params.customer },
55
+ }));
56
+ }
57
+ }
58
+ //# sourceMappingURL=setup-intents.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"setup-intents.js","sourceRoot":"","sources":["../../../src/resources/setup-intents.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAA;AAE1C,OAAO,EACL,eAAe,EACf,eAAe,GAGhB,MAAM,aAAa,CAAA;AAcpB;;;;;;;;;;GAUG;AACH,MAAM,OAAO,YAAY;IACM;IAA7B,YAA6B,MAAmB;QAAnB,WAAM,GAAN,MAAM,CAAa;IAAG,CAAC;IAEpD;;;;;;;OAOG;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,CAAkC;YAC1E,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;;;;;OAKG;IACH,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,SAAiC,EAAE;QAC5C,OAAO,eAAe,CACpB,MAAM,IAAI,CAAC,MAAM,CAAC,OAAO,CAA0B;YACjD,MAAM,EAAE,KAAK;YACb,IAAI,EAAE,gBAAgB;YACtB,KAAK,EAAE,EAAE,GAAG,eAAe,CAAC,MAAM,CAAC,EAAE,QAAQ,EAAE,MAAM,CAAC,QAAQ,EAAE;SACjE,CAAC,CACH,CAAA;IACH,CAAC;CACF"}
@@ -0,0 +1,55 @@
1
+ import { TupayClient } from '../client.js';
2
+ import type { ListResult, Subscription, SubscriptionStatus } from '../types.js';
3
+ import { type ListParams } from '../liste.js';
4
+ export interface CreateSubscriptionParams {
5
+ /** Fiche client — `<uuid>` ou `cus_<uuid>`. */
6
+ customer: string;
7
+ /**
8
+ * Tarif **récurrent** — `<uuid>` ou `price_<uuid>`.
9
+ *
10
+ * Un tarif ponctuel lève une `TupayValidationError` : il prélèverait
11
+ * indéfiniment pour un achat unique.
12
+ */
13
+ price: string;
14
+ /**
15
+ * Carte à utiliser. Absente, la carte **par défaut** du client est
16
+ * retenue. Une carte détachée n'est jamais retenue.
17
+ */
18
+ paymentMethod?: string;
19
+ metadata?: Record<string, string>;
20
+ /** Omise, le SDK en génère une (UUID v4) : la requête devient rejouable. */
21
+ idempotencyKey?: string;
22
+ }
23
+ export interface ListSubscriptionsParams extends ListParams {
24
+ status?: SubscriptionStatus;
25
+ /** N'obtenir que les abonnements de ce client. */
26
+ customer?: string;
27
+ }
28
+ /**
29
+ * Les abonnements : un client lié à un tarif récurrent.
30
+ *
31
+ * @example
32
+ * const abo = await tupay.subscriptions.create({
33
+ * customer: client.id,
34
+ * price: tarifMensuel.id,
35
+ * })
36
+ * abo.currentPeriodEnd // la prochaine échéance
37
+ */
38
+ export declare class Subscriptions {
39
+ private readonly client;
40
+ constructor(client: TupayClient);
41
+ /**
42
+ * Lie un client à un tarif récurrent.
43
+ *
44
+ * **Un abonnement qui ne peut pas aboutir n'est pas créé** — c'est
45
+ * délibéré, et ça vous évite de l'apprendre à la première échéance :
46
+ *
47
+ * - client sans carte enregistrée → `TupayConflictError` ;
48
+ * - tarif ponctuel → `TupayValidationError` ;
49
+ * - tarif désactivé → `TupayConflictError`.
50
+ */
51
+ create(params: CreateSubscriptionParams): Promise<Subscription>;
52
+ retrieve(id: string): Promise<Subscription>;
53
+ list(params?: ListSubscriptionsParams): Promise<ListResult<Subscription>>;
54
+ }
55
+ //# sourceMappingURL=subscriptions.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"subscriptions.d.ts","sourceRoot":"","sources":["../../../src/resources/subscriptions.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAA;AAC1C,OAAO,KAAK,EAAE,UAAU,EAAE,YAAY,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAA;AAC/E,OAAO,EAIL,KAAK,UAAU,EAChB,MAAM,aAAa,CAAA;AAEpB,MAAM,WAAW,wBAAwB;IACvC,+CAA+C;IAC/C,QAAQ,EAAE,MAAM,CAAA;IAChB;;;;;OAKG;IACH,KAAK,EAAE,MAAM,CAAA;IACb;;;OAGG;IACH,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IACjC,4EAA4E;IAC5E,cAAc,CAAC,EAAE,MAAM,CAAA;CACxB;AAED,MAAM,WAAW,uBAAwB,SAAQ,UAAU;IACzD,MAAM,CAAC,EAAE,kBAAkB,CAAA;IAC3B,kDAAkD;IAClD,QAAQ,CAAC,EAAE,MAAM,CAAA;CAClB;AAED;;;;;;;;;GASG;AACH,qBAAa,aAAa;IACZ,OAAO,CAAC,QAAQ,CAAC,MAAM;gBAAN,MAAM,EAAE,WAAW;IAEhD;;;;;;;;;OASG;IACG,MAAM,CAAC,MAAM,EAAE,wBAAwB,GAAG,OAAO,CAAC,YAAY,CAAC;IAW/D,QAAQ,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC;IAQ3C,IAAI,CACR,MAAM,GAAE,uBAA4B,GACnC,OAAO,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC;CAarC"}