@bayarkit/testing 0.2.2 → 0.3.1

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 CHANGED
@@ -1,6 +1,6 @@
1
1
  # @bayarkit/testing
2
2
 
3
- Fake Malaysian payment gateways and the [bayarkit](https://github.com/sasateguh/bayarkit) conformance suite: test checkout and callbacks without real
3
+ Fake payment gateways (Malaysian and global) and the [bayarkit](https://github.com/sasateguh/bayarkit) conformance suite: test checkout and callbacks without real
4
4
  money, in JavaScript or in any other language. [Bahasa Melayu](#bahasa-melayu)
5
5
 
6
6
  ```bash
@@ -8,21 +8,35 @@ npm install --save-dev @bayarkit/testing
8
8
  ```
9
9
 
10
10
  Each fake answers like its gateway's API (in the shapes measured on the sandbox where one was measured) and signs
11
- callbacks exactly as the gateway does: `startFakeToyyibPay`, `startFakeBayarcash`, `startFakeBillplz`, `startFakeChip`, `startFakeStripe`, `startFakeSenangPay`, `startFakeIPay88`, `startFakeFiuu`, `startFake2C2P`, `startFakeCurlec`, `startFakeHitPay`, `startFakeGkash`, `startFakeXendit`, `startFakeEghl`.
11
+ callbacks exactly as the gateway does: `startFakeToyyibPay`, `startFakeBayarcash`, `startFakeBillplz`, `startFakeChip`, `startFakeStripe`, `startFakeSenangPay`, `startFakeIPay88`, `startFakeFiuu`, `startFake2C2P`, `startFakeCurlec`, `startFakeHitPay`, `startFakeGkash`, `startFakeXendit`, `startFakeEghl`, `startFakePaddle`, `startFakePayPal`.
12
12
  Every fake has `markPaid(id)`, `callbackFor(id)` (a correctly signed callback) and `tamper(callback)`.
13
13
 
14
14
  - `gatewayConformance(name, setup)` — the suite every adapter must pass (vitest, optional peer).
15
15
  - `npx bayarkit-fake <gateway>` — one fake as a server for PHP, Python or Go tests. It prints one JSON line
16
16
  (`url`, `control`) and serves a control API: `POST /paid/<id>`, `GET /callback/<id>`,
17
- `GET /callback/<id>/tampered`. vitest is not needed for this.
17
+ `GET /callback/<id>/tampered`, and for PayPal `POST /approve/<id>` (the buyer approves, nothing captured yet).
18
+ vitest is not needed for this.
19
+
20
+ ## Need help installing?
21
+
22
+ If you would rather not wire up a payment gateway yourself, Sasa Teguh, the studio that maintains bayarkit, can install it on your site or app and test it against the gateway sandbox before you go live.
23
+
24
+ [Contact page](https://sasateguh.com/contact) · Email: [hello@sasateguh.com](mailto:hello@sasateguh.com) · WhatsApp: [017-762 9379](https://wa.me/60177629379)
18
25
 
19
26
  ## Bahasa Melayu
20
27
 
21
- Gateway pembayaran Malaysia palsu dan set ujian keakuran [bayarkit](https://github.com/sasateguh/bayarkit): uji checkout dan callback tanpa wang
28
+ Gateway pembayaran palsu (Malaysia dan global) dan set ujian keakuran [bayarkit](https://github.com/sasateguh/bayarkit): uji checkout dan callback tanpa wang
22
29
  sebenar, dalam JavaScript atau bahasa lain. Setiap fake menjawab seperti API gatewaynya dan menandatangani callback
23
30
  sama seperti gateway itu. `npx bayarkit-fake <gateway>` menjalankan satu fake sebagai pelayan dengan API kawalan
24
- (`POST /paid/<id>`, `GET /callback/<id>`, `GET /callback/<id>/tampered`) untuk ujian PHP, Python atau Go.
31
+ (`POST /paid/<id>`, `GET /callback/<id>`, `GET /callback/<id>/tampered`, dan untuk PayPal `POST /approve/<id>`:
32
+ pembeli meluluskan, belum ditangkap) untuk ujian PHP, Python atau Go.
25
33
 
26
34
  Dokumentasi penuh: [README.ms.md](https://github.com/sasateguh/bayarkit/blob/main/README.ms.md).
27
35
 
36
+ ## Perlukan bantuan memasang?
37
+
38
+ Jika anda tidak mahu menyambung gateway pembayaran sendiri, Sasa Teguh, studio yang menyelenggara bayarkit, boleh memasangnya di laman atau aplikasi anda dan mengujinya pada sandbox gateway sebelum anda mula menerima bayaran.
39
+
40
+ [Halaman hubungi](https://sasateguh.com/ms/contact) · E-mel: [hello@sasateguh.com](mailto:hello@sasateguh.com) · WhatsApp: [017-762 9379](https://wa.me/60177629379)
41
+
28
42
  MIT © Muhammad Aiman
@@ -0,0 +1,4 @@
1
+ import type { CliFake } from './types.js';
2
+ declare const fake: CliFake;
3
+ export default fake;
4
+ //# sourceMappingURL=paddle.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"paddle.d.ts","sourceRoot":"","sources":["../../src/cli/paddle.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,YAAY,CAAA;AAEzC,QAAA,MAAM,IAAI,EAAE,OAaX,CAAA;eAEc,IAAI"}
@@ -0,0 +1,16 @@
1
+ import { startFakePaddle } from '../fakes/paddle.js';
2
+ const fake = {
3
+ defaults: {
4
+ apiKey: 'pdl_sdbx_apikey_fake',
5
+ webhookSecret: 'pdl_ntfset_fake',
6
+ defaultPaymentLink: 'https://shop.example/pay',
7
+ },
8
+ start: (o) => startFakePaddle({
9
+ apiKey: o.apiKey ?? '',
10
+ webhookSecret: o.webhookSecret ?? '',
11
+ defaultPaymentLink: o.defaultPaymentLink ?? '',
12
+ approvedDomains: o.approvedDomains ? o.approvedDomains.split(',') : [],
13
+ }),
14
+ };
15
+ export default fake;
16
+ //# sourceMappingURL=paddle.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"paddle.js","sourceRoot":"","sources":["../../src/cli/paddle.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAA;AAGpD,MAAM,IAAI,GAAY;IACpB,QAAQ,EAAE;QACR,MAAM,EAAE,sBAAsB;QAC9B,aAAa,EAAE,iBAAiB;QAChC,kBAAkB,EAAE,0BAA0B;KAC/C;IACD,KAAK,EAAE,CAAC,CAAC,EAAE,EAAE,CACX,eAAe,CAAC;QACd,MAAM,EAAE,CAAC,CAAC,MAAM,IAAI,EAAE;QACtB,aAAa,EAAE,CAAC,CAAC,aAAa,IAAI,EAAE;QACpC,kBAAkB,EAAE,CAAC,CAAC,kBAAkB,IAAI,EAAE;QAC9C,eAAe,EAAE,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,CAAC,eAAe,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE;KACvE,CAAC;CACL,CAAA;AAED,eAAe,IAAI,CAAA"}
@@ -0,0 +1,4 @@
1
+ import type { CliFake } from './types.js';
2
+ declare const fake: CliFake;
3
+ export default fake;
4
+ //# sourceMappingURL=paypal.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"paypal.d.ts","sourceRoot":"","sources":["../../src/cli/paypal.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,YAAY,CAAA;AAEzC,QAAA,MAAM,IAAI,EAAE,OAaX,CAAA;eAEc,IAAI"}
@@ -0,0 +1,16 @@
1
+ import { startFakePayPal } from '../fakes/paypal.js';
2
+ const fake = {
3
+ defaults: {
4
+ clientId: 'client_fake',
5
+ clientSecret: 'secret_fake',
6
+ webhookId: 'WH_FAKE',
7
+ },
8
+ start: (o) => startFakePayPal({
9
+ clientId: o.clientId ?? '',
10
+ clientSecret: o.clientSecret ?? '',
11
+ webhookId: o.webhookId ?? '',
12
+ ...(o.tokenTtlSeconds ? { tokenTtlSeconds: Number(o.tokenTtlSeconds) } : {}),
13
+ }),
14
+ };
15
+ export default fake;
16
+ //# sourceMappingURL=paypal.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"paypal.js","sourceRoot":"","sources":["../../src/cli/paypal.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAA;AAGpD,MAAM,IAAI,GAAY;IACpB,QAAQ,EAAE;QACR,QAAQ,EAAE,aAAa;QACvB,YAAY,EAAE,aAAa;QAC3B,SAAS,EAAE,SAAS;KACrB;IACD,KAAK,EAAE,CAAC,CAAC,EAAE,EAAE,CACX,eAAe,CAAC;QACd,QAAQ,EAAE,CAAC,CAAC,QAAQ,IAAI,EAAE;QAC1B,YAAY,EAAE,CAAC,CAAC,YAAY,IAAI,EAAE;QAClC,SAAS,EAAE,CAAC,CAAC,SAAS,IAAI,EAAE;QAC5B,GAAG,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,EAAE,eAAe,EAAE,MAAM,CAAC,CAAC,CAAC,eAAe,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KAC7E,CAAC;CACL,CAAA;AAED,eAAe,IAAI,CAAA"}
@@ -2,10 +2,11 @@
2
2
  * The conformance suite. Every adapter runs it against its fake (always) and against the real sandbox (when keys are
3
3
  * present, which is what turns `evidence.kind` into "measured"). Adding a gateway = an adapter + a fake that pass this.
4
4
  */
5
- import { type CreatePaymentInput, type Gateway } from '@bayarkit/core';
5
+ import { type CreatePaymentInput, type Gateway, type VerifyResult } from '@bayarkit/core';
6
6
  import type { FakeGateway } from './fakes/types.js';
7
7
  export interface ConformanceSetup {
8
- gateway: Gateway;
8
+ /** Any adapter: one whose `verifyCallback` answers with a Promise runs the same cases. */
9
+ gateway: Gateway<VerifyResult>;
9
10
  fake: FakeGateway;
10
11
  }
11
12
  export declare function sampleInput(overrides?: Partial<CreatePaymentInput>): CreatePaymentInput;
@@ -1 +1 @@
1
- {"version":3,"file":"conformance.d.ts","sourceRoot":"","sources":["../src/conformance.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,EAEL,KAAK,kBAAkB,EAEvB,KAAK,OAAO,EAEb,MAAM,gBAAgB,CAAA;AAEvB,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAA;AAEnD,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,OAAO,CAAA;IAChB,IAAI,EAAE,WAAW,CAAA;CAClB;AAGD,wBAAgB,WAAW,CAAC,SAAS,GAAE,OAAO,CAAC,kBAAkB,CAAM,GAAG,kBAAkB,CAW3F;AAED,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,OAAO,CAAC,gBAAgB,CAAC,GAAG,IAAI,CA4J7F"}
1
+ {"version":3,"file":"conformance.d.ts","sourceRoot":"","sources":["../src/conformance.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,EAEL,KAAK,kBAAkB,EAEvB,KAAK,OAAO,EAEZ,KAAK,YAAY,EAClB,MAAM,gBAAgB,CAAA;AAEvB,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAA;AAEnD,MAAM,WAAW,gBAAgB;IAC/B,0FAA0F;IAC1F,OAAO,EAAE,OAAO,CAAC,YAAY,CAAC,CAAA;IAC9B,IAAI,EAAE,WAAW,CAAA;CAClB;AAGD,wBAAgB,WAAW,CAAC,SAAS,GAAE,OAAO,CAAC,kBAAkB,CAAM,GAAG,kBAAkB,CAW3F;AAED,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,OAAO,CAAC,gBAAgB,CAAC,GAAG,IAAI,CAgO7F"}
@@ -57,7 +57,7 @@ export function gatewayConformance(name, setup) {
57
57
  it('reports an unpaid payment as not paid', async () => {
58
58
  const input = sampleInput();
59
59
  const created = await gateway.createPayment(input);
60
- const cb = gateway.verifyCallback(fake.callbackFor(created.id));
60
+ const cb = await gateway.verifyCallback(fake.callbackFor(created.id));
61
61
  expect(cb).not.toBeNull();
62
62
  const record = await gateway.getPayment(cb?.id ?? '');
63
63
  expect(record.status).not.toBe('paid');
@@ -71,7 +71,7 @@ export function gatewayConformance(name, setup) {
71
71
  if (result.ok) {
72
72
  expect(result.payment.reference).toBe(input.reference);
73
73
  expect(result.payment.amount).toBe(input.amount);
74
- expect(result.payment.currency).toBe('MYR');
74
+ expect(result.payment.currency).toBe(gateway.info.currency ?? 'MYR');
75
75
  }
76
76
  });
77
77
  it('refuses a callback whose signature was tampered with', async () => {
@@ -129,7 +129,7 @@ export function gatewayConformance(name, setup) {
129
129
  // And tampering changes something an adapter reads.
130
130
  expect(fake.tamper(cb)).not.toEqual(cb);
131
131
  });
132
- it('never throws on a malformed callback body', () => {
132
+ it('never throws on a malformed callback body', async () => {
133
133
  const junk = [
134
134
  { fields: {}, rawBody: '', headers: {} },
135
135
  { fields: { hash: 'x' }, rawBody: '{', headers: { 'content-type': 'application/json' } },
@@ -148,8 +148,12 @@ export function gatewayConformance(name, setup) {
148
148
  { fields: {}, rawBody: '{}', headers: { 'content-type': 'application/json', 'x-signature': '' } },
149
149
  ];
150
150
  for (const cb of [...junk, ...broken]) {
151
- expect(() => gateway.verifyCallback(cb)).not.toThrow();
152
- expect(gateway.verifyCallback(cb)).toBeNull();
151
+ let answer = null;
152
+ expect(() => {
153
+ answer = gateway.verifyCallback(cb);
154
+ }).not.toThrow();
155
+ // An adapter that verifies through its API answers with a Promise; a bad body must not reject it either.
156
+ expect(await answer).toBeNull();
153
157
  }
154
158
  });
155
159
  it('confirming the same callback twice gives the same answer (gateways retry callbacks)', async () => {
@@ -161,6 +165,62 @@ export function gatewayConformance(name, setup) {
161
165
  const second = await confirmPayment(gateway, body, input);
162
166
  expect(second).toEqual(first);
163
167
  });
168
+ // Refunds are optional: these cases run only for adapters that implement `refundPayment`.
169
+ const paidPayment = async () => {
170
+ const input = sampleInput();
171
+ const created = await gateway.createPayment(input);
172
+ fake.markPaid(created.id);
173
+ return { input, created };
174
+ };
175
+ it('refunds a paid payment in full', async (ctx) => {
176
+ if (!gateway.refundPayment)
177
+ return ctx.skip();
178
+ const { input, created } = await paidPayment();
179
+ const record = await gateway.getPayment(created.id);
180
+ const refund = await gateway.refundPayment({
181
+ paymentId: created.id,
182
+ amount: input.amount,
183
+ reason: 'conformance',
184
+ });
185
+ expect(refund.id).not.toBe('');
186
+ expect(refund.paymentId).toBe(created.id);
187
+ expect(refund.amount).toBe(input.amount);
188
+ expect(refund.currency).toBe(record.currency);
189
+ // Some gateways approve refunds before paying them out, so `pending` is a correct first answer.
190
+ expect(['pending', 'succeeded']).toContain(refund.status);
191
+ });
192
+ it('refunds part of a paid payment', async (ctx) => {
193
+ if (!gateway.refundPayment)
194
+ return ctx.skip();
195
+ const { input, created } = await paidPayment();
196
+ const amount = Math.floor(input.amount / 2);
197
+ const refund = await gateway.refundPayment({ paymentId: created.id, amount });
198
+ expect(refund.amount).toBe(amount);
199
+ expect(['pending', 'succeeded']).toContain(refund.status);
200
+ });
201
+ it('refuses to refund more than was paid, and refunds nothing when it does', async (ctx) => {
202
+ if (!gateway.refundPayment)
203
+ return ctx.skip();
204
+ const { input, created } = await paidPayment();
205
+ await expect(gateway.refundPayment({ paymentId: created.id, amount: input.amount + 1 })).rejects.toBeInstanceOf(GatewayError);
206
+ // The refused call took nothing: the full amount is still refundable.
207
+ const refund = await gateway.refundPayment({ paymentId: created.id, amount: input.amount });
208
+ expect(refund.amount).toBe(input.amount);
209
+ });
210
+ it('refuses a refund of zero, negative or fractional sen', async (ctx) => {
211
+ if (!gateway.refundPayment)
212
+ return ctx.skip();
213
+ const { created } = await paidPayment();
214
+ for (const amount of [0, -100, 10.5]) {
215
+ await expect(gateway.refundPayment({ paymentId: created.id, amount }), String(amount)).rejects.toBeInstanceOf(GatewayError);
216
+ }
217
+ });
218
+ it('refuses to refund a payment that was never paid', async (ctx) => {
219
+ if (!gateway.refundPayment)
220
+ return ctx.skip();
221
+ const created = await gateway.createPayment(sampleInput());
222
+ await expect(gateway.refundPayment({ paymentId: created.id, amount: 100 })).rejects.toBeInstanceOf(GatewayError);
223
+ });
164
224
  });
165
225
  }
166
226
  //# sourceMappingURL=conformance.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"conformance.js","sourceRoot":"","sources":["../src/conformance.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"conformance.js","sourceRoot":"","sources":["../src/conformance.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"control.d.ts","sourceRoot":"","sources":["../src/control.ts"],"names":[],"mappings":"AAcA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAA;AAEnD,wBAAsB,kBAAkB,CACtC,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,WAAW,EACjB,IAAI,SAAI,GACP,OAAO,CAAC;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAA;CAAE,CAAC,CA6BlD"}
1
+ {"version":3,"file":"control.d.ts","sourceRoot":"","sources":["../src/control.ts"],"names":[],"mappings":"AAeA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAA;AAEnD,wBAAsB,kBAAkB,CACtC,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,WAAW,EACjB,IAAI,SAAI,GACP,OAAO,CAAC;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAA;CAAE,CAAC,CAmClD"}
package/dist/control.js CHANGED
@@ -4,6 +4,7 @@
4
4
  *
5
5
  * GET /health → { ok, gateway, url }
6
6
  * POST /paid/<id> → 204 (markPaid)
7
+ * POST /approve/<id> → 204 (the buyer approves, nothing captured; PayPal only, 404 elsewhere)
7
8
  * GET /callback/<id> → CallbackInput JSON { fields, rawBody, headers }
8
9
  * GET /callback/<id>/tampered → the same callback with its signature altered
9
10
  *
@@ -26,6 +27,12 @@ export async function startControlServer(gateway, fake, port = 0) {
26
27
  fake.markPaid(paid[1]);
27
28
  return send(204);
28
29
  }
30
+ const approve = /^\/approve\/([^/]+)$/.exec(path);
31
+ const approver = fake.approve;
32
+ if (req.method === 'POST' && approve?.[1] && typeof approver === 'function') {
33
+ approver.call(fake, approve[1]);
34
+ return send(204);
35
+ }
29
36
  const cb = /^\/callback\/([^/]+)(\/tampered)?$/.exec(path);
30
37
  if (req.method === 'GET' && cb?.[1]) {
31
38
  const callback = fake.callbackFor(cb[1]);
@@ -1 +1 @@
1
- {"version":3,"file":"control.js","sourceRoot":"","sources":["../src/control.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AACH,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAA;AAIxC,MAAM,CAAC,KAAK,UAAU,kBAAkB,CACtC,OAAe,EACf,IAAiB,EACjB,IAAI,GAAG,CAAC;IAER,MAAM,MAAM,GAAG,YAAY,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE;QACvC,MAAM,IAAI,GAAG,CAAC,MAAc,EAAE,IAAc,EAAE,EAAE;YAC9C,GAAG,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,cAAc,EAAE,kBAAkB,EAAE,CAAC,CAAA;YACvF,GAAG,CAAC,GAAG,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAA;QAChE,CAAC,CAAA;QACD,MAAM,IAAI,GAAG,kBAAkB,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAA;QACpE,IAAI,CAAC;YACH,IAAI,GAAG,CAAC,MAAM,KAAK,KAAK,IAAI,IAAI,KAAK,SAAS;gBAAE,OAAO,IAAI,CAAC,GAAG,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC,CAAA;YACtG,MAAM,IAAI,GAAG,mBAAmB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;YAC3C,IAAI,GAAG,CAAC,MAAM,KAAK,MAAM,IAAI,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBACvC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAA;gBACtB,OAAO,IAAI,CAAC,GAAG,CAAC,CAAA;YAClB,CAAC;YACD,MAAM,EAAE,GAAG,oCAAoC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;YAC1D,IAAI,GAAG,CAAC,MAAM,KAAK,KAAK,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBACpC,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAA;gBACxC,OAAO,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAA;YAC5D,CAAC;YACD,IAAI,CAAC,GAAG,EAAE,EAAE,KAAK,EAAE,uBAAuB,EAAE,CAAC,CAAA;QAC/C,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,IAAI,CAAC,GAAG,EAAE,EAAE,KAAK,EAAE,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAA;QAClE,CAAC;IACH,CAAC,CAAC,CAAA;IACF,MAAM,IAAI,OAAO,CAAO,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,WAAW,EAAE,CAAC,CAAC,CAAC,CAAA;IACnE,OAAO;QACL,GAAG,EAAE,oBAAqB,MAAM,CAAC,OAAO,EAAkB,CAAC,IAAI,EAAE;QACjE,KAAK,EAAE,GAAG,EAAE,CAAC,IAAI,OAAO,CAAO,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;KAC/D,CAAA;AACH,CAAC"}
1
+ {"version":3,"file":"control.js","sourceRoot":"","sources":["../src/control.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,83 @@
1
+ import { type FakeGateway } from './types.js';
2
+ export declare const PADDLE_VERSION = "1";
3
+ type Body = Record<string, unknown>;
4
+ type Amounts = Record<'subtotal' | 'discount' | 'tax' | 'total' | 'credit' | 'balance' | 'grand_total', string> & {
5
+ fee: string | null;
6
+ earnings: string | null;
7
+ currency_code: string;
8
+ };
9
+ interface LineItem extends Body {
10
+ id: string;
11
+ totals: {
12
+ subtotal: string;
13
+ discount: string;
14
+ tax: string;
15
+ total: string;
16
+ };
17
+ }
18
+ export interface PaddleTransaction extends Body {
19
+ id: string;
20
+ status: string;
21
+ currency_code: string;
22
+ customer_id: string | null;
23
+ billed_at: string | null;
24
+ updated_at: string;
25
+ details: {
26
+ tax_rates_used: unknown[];
27
+ totals: Amounts;
28
+ adjusted_totals: Amounts;
29
+ payout_totals: null;
30
+ line_items: LineItem[];
31
+ };
32
+ payments: Body[];
33
+ checkout: {
34
+ url: string;
35
+ };
36
+ }
37
+ export interface PaddleAdjustment extends Body {
38
+ id: string;
39
+ transaction_id: string;
40
+ status: 'pending_approval' | 'approved' | 'rejected' | 'reversed';
41
+ items: {
42
+ item_id: string;
43
+ type: 'full' | 'partial';
44
+ amount: string;
45
+ }[];
46
+ totals: Record<'subtotal' | 'tax' | 'total' | 'fee' | 'earnings' | 'currency_code', string>;
47
+ updated_at: string;
48
+ }
49
+ export interface FakePaddle extends FakeGateway {
50
+ requests: {
51
+ method: string;
52
+ path: string;
53
+ body: unknown;
54
+ headers: Record<string, string | string[] | undefined>;
55
+ }[];
56
+ /** The fake's own record of a transaction (what `GET /transactions/{id}` answers under `data`). */
57
+ transaction(id: string): PaddleTransaction | undefined;
58
+ adjustment(id: string): PaddleAdjustment | undefined;
59
+ /**
60
+ * The buyer changes a line's quantity in the checkout's picker (measured). Throws outside the price's
61
+ * `quantity` range, as the picker does not offer it; totals follow, as on the sandbox.
62
+ */
63
+ setQuantity(id: string, quantity: number, line?: number): void;
64
+ /** A declined card: an `error` payment attempt, status unchanged (one-time checkout) [§3]. */
65
+ decline(id: string): void;
66
+ /** The sandbox's periodic approval run: every `pending_approval` refund becomes `approved` [§5]. */
67
+ approveRefunds(): void;
68
+ }
69
+ /**
70
+ * `ts=<ts>;h1=<hex>` exactly as Paddle builds it: HMAC-SHA256 over `${ts}:${rawBody}`, keyed with the destination's
71
+ * secret. Pass several secrets to get one `h1` each, as during a secret rotation.
72
+ */
73
+ export declare function paddleSignature(secret: string | string[], rawBody: string, ts: number): string;
74
+ export declare function startFakePaddle(opts: {
75
+ apiKey: string;
76
+ webhookSecret: string;
77
+ /** Paddle > Checkout > Default payment link. Empty = not set, so every create fails as the docs say [§2.2]. */
78
+ defaultPaymentLink?: string;
79
+ /** Approved checkout domains besides the default link's own. */
80
+ approvedDomains?: string[];
81
+ }): Promise<FakePaddle>;
82
+ export {};
83
+ //# sourceMappingURL=paddle.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"paddle.d.ts","sourceRoot":"","sources":["../../src/fakes/paddle.ts"],"names":[],"mappings":"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"}