@birtalanrobert/commerce 3.0.0 → 4.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +6 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -1
- package/dist/index.js.map +1 -1
- package/dist/nestjs/commerce.service.d.ts.map +1 -1
- package/dist/nestjs/commerce.service.js +30 -13
- package/dist/nestjs/commerce.service.js.map +1 -1
- package/dist/nestjs/index.d.ts +1 -1
- package/dist/providers/none.d.ts +50 -0
- package/dist/providers/none.d.ts.map +1 -0
- package/dist/providers/none.js +75 -0
- package/dist/providers/none.js.map +1 -0
- package/dist/providers/port.d.ts +35 -3
- package/dist/providers/port.d.ts.map +1 -1
- package/dist/providers/stripe.d.ts +1 -1
- package/dist/providers/stripe.d.ts.map +1 -1
- package/dist/providers/stripe.js +22 -5
- package/dist/providers/stripe.js.map +1 -1
- package/package.json +5 -5
- package/src/index.ts +2 -0
- package/src/nestjs/commerce.service.ts +33 -18
- package/src/providers/none.ts +92 -0
- package/src/providers/port.ts +40 -3
- package/src/providers/stripe.ts +23 -4
package/README.md
CHANGED
|
@@ -55,6 +55,12 @@ export class PaymentsModule {}
|
|
|
55
55
|
Register `commerceEntities` and `commerceMigrations` with the data source, as
|
|
56
56
|
with every other package here.
|
|
57
57
|
|
|
58
|
+
Where a deployment takes no card payments — which is most of them in some
|
|
59
|
+
categories — provide `NoPayments` instead of `StripeConnect`. It reports `none`
|
|
60
|
+
and refuses every operation, so every gate that already asks whether a business
|
|
61
|
+
can be paid out answers no. **Do not construct the vendor client with an empty
|
|
62
|
+
key**: it throws inside its own constructor and the application does not start.
|
|
63
|
+
|
|
58
64
|
**Three entry points, and the split is deliberate.** The root is pure — what a
|
|
59
65
|
deposit comes to, whether a business may sell yet, whether a payment can still
|
|
60
66
|
be refunded — because a console decides all three while somebody drags a
|
package/dist/index.d.ts
CHANGED
|
@@ -21,5 +21,6 @@
|
|
|
21
21
|
*/
|
|
22
22
|
export { balanceAfter, canTakeMoney, depositFor, payoutBlockReason, type DepositKind, type DepositPolicy, type PayoutStatus, } from './deposits';
|
|
23
23
|
export { isRefundable, refundableAmount, type PaymentKind, type PaymentMethod, type PaymentState, } from './payments';
|
|
24
|
+
export { NoPayments } from './providers/none';
|
|
24
25
|
export type { ChargeRequest, ChargeResult, OnboardingLink, PaymentProvider, ProviderAccount, ProviderEvent, RefundRequest, SaveCardRequest, SaveCardResult, StoredCard, } from './providers/port';
|
|
25
26
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,OAAO,EACL,YAAY,EACZ,YAAY,EACZ,UAAU,EACV,iBAAiB,EACjB,KAAK,WAAW,EAChB,KAAK,aAAa,EAClB,KAAK,YAAY,GAClB,MAAM,YAAY,CAAC;AAEpB,OAAO,EACL,YAAY,EACZ,gBAAgB,EAChB,KAAK,WAAW,EAChB,KAAK,aAAa,EAClB,KAAK,YAAY,GAClB,MAAM,YAAY,CAAC;AAEpB,YAAY,EACV,aAAa,EACb,YAAY,EACZ,cAAc,EACd,eAAe,EACf,eAAe,EACf,aAAa,EACb,aAAa,EACb,eAAe,EACf,cAAc,EACd,UAAU,GACX,MAAM,kBAAkB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,OAAO,EACL,YAAY,EACZ,YAAY,EACZ,UAAU,EACV,iBAAiB,EACjB,KAAK,WAAW,EAChB,KAAK,aAAa,EAClB,KAAK,YAAY,GAClB,MAAM,YAAY,CAAC;AAEpB,OAAO,EACL,YAAY,EACZ,gBAAgB,EAChB,KAAK,WAAW,EAChB,KAAK,aAAa,EAClB,KAAK,YAAY,GAClB,MAAM,YAAY,CAAC;AAEpB,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAE9C,YAAY,EACV,aAAa,EACb,YAAY,EACZ,cAAc,EACd,eAAe,EACf,eAAe,EACf,aAAa,EACb,aAAa,EACb,eAAe,EACf,cAAc,EACd,UAAU,GACX,MAAM,kBAAkB,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.refundableAmount = exports.isRefundable = exports.payoutBlockReason = exports.depositFor = exports.canTakeMoney = exports.balanceAfter = void 0;
|
|
3
|
+
exports.NoPayments = exports.refundableAmount = exports.isRefundable = exports.payoutBlockReason = exports.depositFor = exports.canTakeMoney = exports.balanceAfter = void 0;
|
|
4
4
|
/**
|
|
5
5
|
* Taking money on a business's behalf.
|
|
6
6
|
*
|
|
@@ -30,6 +30,8 @@ Object.defineProperty(exports, "payoutBlockReason", { enumerable: true, get: fun
|
|
|
30
30
|
var payments_1 = require("./payments");
|
|
31
31
|
Object.defineProperty(exports, "isRefundable", { enumerable: true, get: function () { return payments_1.isRefundable; } });
|
|
32
32
|
Object.defineProperty(exports, "refundableAmount", { enumerable: true, get: function () { return payments_1.refundableAmount; } });
|
|
33
|
+
var none_1 = require("./providers/none");
|
|
34
|
+
Object.defineProperty(exports, "NoPayments", { enumerable: true, get: function () { return none_1.NoPayments; } });
|
|
33
35
|
/*
|
|
34
36
|
* `StripeConnect` is deliberately NOT re-exported here.
|
|
35
37
|
*
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,uCAQoB;AAPlB,wGAAA,YAAY,OAAA;AACZ,wGAAA,YAAY,OAAA;AACZ,sGAAA,UAAU,OAAA;AACV,6GAAA,iBAAiB,OAAA;AAMnB,uCAMoB;AALlB,wGAAA,YAAY,OAAA;AACZ,4GAAA,gBAAgB,OAAA;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,uCAQoB;AAPlB,wGAAA,YAAY,OAAA;AACZ,wGAAA,YAAY,OAAA;AACZ,sGAAA,UAAU,OAAA;AACV,6GAAA,iBAAiB,OAAA;AAMnB,uCAMoB;AALlB,wGAAA,YAAY,OAAA;AACZ,4GAAA,gBAAgB,OAAA;AAMlB,yCAA8C;AAArC,kGAAA,UAAU,OAAA;AAenB;;;;;;;;;GASG"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"commerce.service.d.ts","sourceRoot":"","sources":["../../src/nestjs/commerce.service.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAiB,MAAM,SAAS,CAAC;AAKzD,OAAO,EAAgB,KAAK,YAAY,EAAE,MAAM,aAAa,CAAC;AAC9D,OAAO,KAAK,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AACxE,OAAO,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AACxD,OAAO,EAAgB,KAAK,WAAW,EAAE,MAAM,aAAa,CAAC;AAC7D,OAAO,EAAE,OAAO,EAAE,aAAa,EAAE,KAAK,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAC9E,OAAO,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAEhD,iFAAiF;AACjF,eAAO,MAAM,iBAAiB,eAA8B,CAAC;AAE7D,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAC;IACjC,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC9B,oDAAoD;IACpD,QAAQ,CAAC,IAAI,CAAC,EAAE,WAAW,CAAC;IAC5B;;;;;OAKG;IACH,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC9B,iEAAiE;IACjE,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC;IAC3B;;;;;OAKG;IACH,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;CAC5B;AAED,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC,aAAa,EAAE,MAAM,CAAC,CAAC;IAChD,QAAQ,CAAC,IAAI,CAAC,EAAE,WAAW,CAAC;IAC5B,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED;;;;;;;;GAQG;AACH,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC;CAChC;AAED,kEAAkE;AAClE,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,+EAA+E;IAC/E,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;CAC9B;AAED;;;;;;;;;;;;GAYG;AACH,qBACa,eAAe;IAEJ,OAAO,CAAC,QAAQ,CAAC,UAAU;IACpB,OAAO,CAAC,QAAQ,CAAC,QAAQ;gBADf,UAAU,EAAE,UAAU,EACf,QAAQ,EAAE,eAAe;IAKvE,gFAAgF;IAC1E,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC;IAW9D,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC;IAI3D;;;;;;OAMG;IACG,eAAe,CACnB,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAE,GAClF,OAAO,CAAC;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,IAAI,CAAA;KAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"commerce.service.d.ts","sourceRoot":"","sources":["../../src/nestjs/commerce.service.ts"],"names":[],"mappings":"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"}
|
|
@@ -64,7 +64,10 @@ let CommerceService = class CommerceService {
|
|
|
64
64
|
*/
|
|
65
65
|
async startOnboarding(tenantId, options) {
|
|
66
66
|
const existing = await this.payoutAccount(tenantId);
|
|
67
|
-
const account = await this.provider.account(existing?.externalId ?? null, options.country, options.email
|
|
67
|
+
const account = await this.provider.account(existing?.externalId ?? null, options.country, options.email,
|
|
68
|
+
// Written into the provider's metadata at creation, so an account event
|
|
69
|
+
// months later can say whose it is.
|
|
70
|
+
tenantId);
|
|
68
71
|
await this.saveAccount(tenantId, account);
|
|
69
72
|
return this.provider.onboard(account.externalId, options.returnUrl, options.refreshUrl);
|
|
70
73
|
}
|
|
@@ -99,6 +102,7 @@ let CommerceService = class CommerceService {
|
|
|
99
102
|
throw new http_1.ValidationError([{ field: 'amount', message: 'There is nothing to charge.' }], 'There is nothing to charge.');
|
|
100
103
|
}
|
|
101
104
|
const result = await this.provider.charge({
|
|
105
|
+
tenantId,
|
|
102
106
|
account: account.externalId,
|
|
103
107
|
amount: input.amount,
|
|
104
108
|
currency: input.currency,
|
|
@@ -151,6 +155,7 @@ let CommerceService = class CommerceService {
|
|
|
151
155
|
async saveCard(tenantId, input) {
|
|
152
156
|
const existing = await this.savedCards(tenantId, input.subject);
|
|
153
157
|
const result = await this.provider.saveCard({
|
|
158
|
+
tenantId,
|
|
154
159
|
subject: input.subject,
|
|
155
160
|
reference: input.reference,
|
|
156
161
|
// Reuse the customer this person already has, so a second card joins the
|
|
@@ -357,27 +362,39 @@ let CommerceService = class CommerceService {
|
|
|
357
362
|
* books.
|
|
358
363
|
*/
|
|
359
364
|
async settle(event) {
|
|
365
|
+
/*
|
|
366
|
+
* The tenant comes from the metadata we wrote on the way out, and there is
|
|
367
|
+
* no fallback.
|
|
368
|
+
*
|
|
369
|
+
* The obvious alternative — look the provider's identifier up in our own
|
|
370
|
+
* table — **cannot work here**, and fails in the worst way: every one of
|
|
371
|
+
* these tables is under `FORCE ROW LEVEL SECURITY`, so a query with no
|
|
372
|
+
* tenant bound returns *no rows at all* rather than an error. The webhook
|
|
373
|
+
* then verifies, reads, understands and changes nothing, and the only
|
|
374
|
+
* evidence is a payment stuck in whatever state it was in.
|
|
375
|
+
*
|
|
376
|
+
* An event with no tenant on it is about something this deployment did not
|
|
377
|
+
* create — another environment sharing the provider account — and ignoring
|
|
378
|
+
* it is the right answer rather than a limitation.
|
|
379
|
+
*/
|
|
380
|
+
const tenantId = event.tenantId;
|
|
381
|
+
if (!tenantId)
|
|
382
|
+
return undefined;
|
|
360
383
|
if (event.kind === 'account' && event.accountStatus) {
|
|
361
|
-
const rows = await this.dataSource.query(`SELECT "tenant_id" FROM "mortar_payout_accounts" WHERE "external_id" = $1`, [event.externalId]);
|
|
362
|
-
const tenantId = rows[0]?.tenant_id;
|
|
363
|
-
if (!tenantId)
|
|
364
|
-
return undefined;
|
|
365
384
|
await this.saveAccount(tenantId, event.accountStatus);
|
|
366
385
|
return (await this.payoutAccount(tenantId)) ?? undefined;
|
|
367
386
|
}
|
|
368
387
|
if (event.kind !== 'payment' || !event.state)
|
|
369
388
|
return undefined;
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
const rows = await this.dataSource.query(`SELECT "id", "tenant_id" FROM "mortar_payments" WHERE "external_id" = $1`, [event.externalId]);
|
|
376
|
-
const found = rows[0];
|
|
389
|
+
// Inside the tenant's own policy, which is the only way this table can be
|
|
390
|
+
// read at all.
|
|
391
|
+
const found = await (0, tenancy_1.runInTenantTransaction)(this.dataSource, (scoped) => scoped
|
|
392
|
+
.getRepository(payment_entity_1.Payment)
|
|
393
|
+
.findOne({ where: { tenantId, externalId: event.externalId } }), { tenantId });
|
|
377
394
|
if (!found)
|
|
378
395
|
return undefined;
|
|
379
396
|
const state = event.state === 'refunded' ? 'refunded' : event.state;
|
|
380
|
-
return this.update(
|
|
397
|
+
return this.update(tenantId, found.id, {
|
|
381
398
|
state,
|
|
382
399
|
...(state === 'captured' ? { takenAt: new Date() } : {}),
|
|
383
400
|
...(event.instrument ? { instrument: event.instrument } : {}),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"commerce.service.js","sourceRoot":"","sources":["../../src/nestjs/commerce.service.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"commerce.service.js","sourceRoot":"","sources":["../../src/nestjs/commerce.service.ts"],"names":[],"mappings":"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"}
|
package/dist/nestjs/index.d.ts
CHANGED
|
@@ -16,6 +16,6 @@ import { Payment, PaymentRefund } from './payment.entity';
|
|
|
16
16
|
import { SavedCard } from './saved-card.entity';
|
|
17
17
|
import { CreateCommerce1789800000000 } from '../migrations/1789800000000-CreateCommerce';
|
|
18
18
|
/** Register with the data source, the way every other mortar package is. */
|
|
19
|
-
export declare const commerceEntities: (typeof PayoutAccount | typeof Payment | typeof
|
|
19
|
+
export declare const commerceEntities: (typeof PayoutAccount | typeof Payment | typeof SavedCard | typeof PaymentRefund)[];
|
|
20
20
|
export declare const commerceMigrations: (typeof CreateCommerce1789800000000)[];
|
|
21
21
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import type { ChargeRequest, ChargeResult, OnboardingLink, PaymentProvider, ProviderAccount, RefundRequest, SaveCardRequest, SaveCardResult, StoredCard } from './port';
|
|
2
|
+
/**
|
|
3
|
+
* No payment provider at all, said out loud rather than by failing.
|
|
4
|
+
*
|
|
5
|
+
* **Online payment is optional and never mandatory**, and this is what makes
|
|
6
|
+
* that true in the code rather than only in a document. A salon that takes cash
|
|
7
|
+
* at the counter and has never heard of Stripe runs its whole diary, writes
|
|
8
|
+
* down what it took, and reports on it — and nothing about that deployment
|
|
9
|
+
* should require a payment account to exist, least of all the application
|
|
10
|
+
* starting up.
|
|
11
|
+
*
|
|
12
|
+
* The alternative that looks simpler is constructing the vendor's client with
|
|
13
|
+
* an empty key. It throws inside its own constructor, and the whole API fails
|
|
14
|
+
* to boot — which is how this was found.
|
|
15
|
+
*
|
|
16
|
+
* **Not a permissive no-op.** Every operation refuses, and the account reports
|
|
17
|
+
* `none`, so every gate that already asks "can this business be paid out?"
|
|
18
|
+
* answers no without a special case. A provider that quietly returned success
|
|
19
|
+
* would write a trail of payments that never happened, which is worse than the
|
|
20
|
+
* crash it replaced.
|
|
21
|
+
*/
|
|
22
|
+
export declare class NoPayments implements PaymentProvider {
|
|
23
|
+
readonly name = "none";
|
|
24
|
+
onboard(): Promise<OnboardingLink>;
|
|
25
|
+
/**
|
|
26
|
+
* `none` rather than `pending`.
|
|
27
|
+
*
|
|
28
|
+
* They are different facts: `pending` means the provider is still checking,
|
|
29
|
+
* and a business told that will wait for an email that is never coming.
|
|
30
|
+
*/
|
|
31
|
+
account(externalId: string | null): Promise<ProviderAccount>;
|
|
32
|
+
charge(_request: ChargeRequest): Promise<ChargeResult>;
|
|
33
|
+
capture(): Promise<ChargeResult>;
|
|
34
|
+
release(): Promise<void>;
|
|
35
|
+
refund(_request: RefundRequest): Promise<{
|
|
36
|
+
externalId: string;
|
|
37
|
+
}>;
|
|
38
|
+
saveCard(_request: SaveCardRequest): Promise<SaveCardResult>;
|
|
39
|
+
storedCard(): Promise<StoredCard | undefined>;
|
|
40
|
+
forgetCard(): Promise<void>;
|
|
41
|
+
/**
|
|
42
|
+
* Never genuine.
|
|
43
|
+
*
|
|
44
|
+
* A deployment with no provider has no webhook to receive, so anything
|
|
45
|
+
* arriving at that address came from somebody else — and `undefined` is how
|
|
46
|
+
* the port says "not from the provider".
|
|
47
|
+
*/
|
|
48
|
+
verify(): undefined;
|
|
49
|
+
}
|
|
50
|
+
//# sourceMappingURL=none.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"none.d.ts","sourceRoot":"","sources":["../../src/providers/none.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,aAAa,EACb,YAAY,EACZ,cAAc,EACd,eAAe,EACf,eAAe,EACf,aAAa,EACb,eAAe,EACf,cAAc,EACd,UAAU,EACX,MAAM,QAAQ,CAAC;AAEhB;;;;;;;;;;;;;;;;;;;GAmBG;AACH,qBAAa,UAAW,YAAW,eAAe;IAChD,QAAQ,CAAC,IAAI,UAAU;IAEjB,OAAO,IAAI,OAAO,CAAC,cAAc,CAAC;IAIxC;;;;;OAKG;IACG,OAAO,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI,GAAG,OAAO,CAAC,eAAe,CAAC;IAI5D,MAAM,CAAC,QAAQ,EAAE,aAAa,GAAG,OAAO,CAAC,YAAY,CAAC;IAQtD,OAAO,IAAI,OAAO,CAAC,YAAY,CAAC;IAIhC,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAIxB,MAAM,CAAC,QAAQ,EAAE,aAAa,GAAG,OAAO,CAAC;QAAE,UAAU,EAAE,MAAM,CAAA;KAAE,CAAC;IAIhE,QAAQ,CAAC,QAAQ,EAAE,eAAe,GAAG,OAAO,CAAC,cAAc,CAAC;IAI5D,UAAU,IAAI,OAAO,CAAC,UAAU,GAAG,SAAS,CAAC;IAI7C,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAIjC;;;;;;OAMG;IACH,MAAM,IAAI,SAAS;CAGpB"}
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.NoPayments = void 0;
|
|
4
|
+
/**
|
|
5
|
+
* No payment provider at all, said out loud rather than by failing.
|
|
6
|
+
*
|
|
7
|
+
* **Online payment is optional and never mandatory**, and this is what makes
|
|
8
|
+
* that true in the code rather than only in a document. A salon that takes cash
|
|
9
|
+
* at the counter and has never heard of Stripe runs its whole diary, writes
|
|
10
|
+
* down what it took, and reports on it — and nothing about that deployment
|
|
11
|
+
* should require a payment account to exist, least of all the application
|
|
12
|
+
* starting up.
|
|
13
|
+
*
|
|
14
|
+
* The alternative that looks simpler is constructing the vendor's client with
|
|
15
|
+
* an empty key. It throws inside its own constructor, and the whole API fails
|
|
16
|
+
* to boot — which is how this was found.
|
|
17
|
+
*
|
|
18
|
+
* **Not a permissive no-op.** Every operation refuses, and the account reports
|
|
19
|
+
* `none`, so every gate that already asks "can this business be paid out?"
|
|
20
|
+
* answers no without a special case. A provider that quietly returned success
|
|
21
|
+
* would write a trail of payments that never happened, which is worse than the
|
|
22
|
+
* crash it replaced.
|
|
23
|
+
*/
|
|
24
|
+
class NoPayments {
|
|
25
|
+
name = 'none';
|
|
26
|
+
async onboard() {
|
|
27
|
+
throw new Error('This deployment has no payment provider configured.');
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* `none` rather than `pending`.
|
|
31
|
+
*
|
|
32
|
+
* They are different facts: `pending` means the provider is still checking,
|
|
33
|
+
* and a business told that will wait for an email that is never coming.
|
|
34
|
+
*/
|
|
35
|
+
async account(externalId) {
|
|
36
|
+
return { externalId: externalId ?? '', status: 'none', requirements: [] };
|
|
37
|
+
}
|
|
38
|
+
async charge(_request) {
|
|
39
|
+
return {
|
|
40
|
+
externalId: '',
|
|
41
|
+
state: 'failed',
|
|
42
|
+
detail: 'This business cannot take card payments.',
|
|
43
|
+
};
|
|
44
|
+
}
|
|
45
|
+
async capture() {
|
|
46
|
+
return { externalId: '', state: 'failed', detail: 'There is nothing to capture.' };
|
|
47
|
+
}
|
|
48
|
+
async release() {
|
|
49
|
+
// Nothing was ever held.
|
|
50
|
+
}
|
|
51
|
+
async refund(_request) {
|
|
52
|
+
throw new Error('Nothing was taken through a provider, so nothing can be given back.');
|
|
53
|
+
}
|
|
54
|
+
async saveCard(_request) {
|
|
55
|
+
throw new Error('This deployment has no payment provider configured.');
|
|
56
|
+
}
|
|
57
|
+
async storedCard() {
|
|
58
|
+
return undefined;
|
|
59
|
+
}
|
|
60
|
+
async forgetCard() {
|
|
61
|
+
// There is nothing stored anywhere to forget.
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Never genuine.
|
|
65
|
+
*
|
|
66
|
+
* A deployment with no provider has no webhook to receive, so anything
|
|
67
|
+
* arriving at that address came from somebody else — and `undefined` is how
|
|
68
|
+
* the port says "not from the provider".
|
|
69
|
+
*/
|
|
70
|
+
verify() {
|
|
71
|
+
return undefined;
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
exports.NoPayments = NoPayments;
|
|
75
|
+
//# sourceMappingURL=none.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"none.js","sourceRoot":"","sources":["../../src/providers/none.ts"],"names":[],"mappings":";;;AAYA;;;;;;;;;;;;;;;;;;;GAmBG;AACH,MAAa,UAAU;IACZ,IAAI,GAAG,MAAM,CAAC;IAEvB,KAAK,CAAC,OAAO;QACX,MAAM,IAAI,KAAK,CAAC,qDAAqD,CAAC,CAAC;IACzE,CAAC;IAED;;;;;OAKG;IACH,KAAK,CAAC,OAAO,CAAC,UAAyB;QACrC,OAAO,EAAE,UAAU,EAAE,UAAU,IAAI,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,YAAY,EAAE,EAAE,EAAE,CAAC;IAC5E,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,QAAuB;QAClC,OAAO;YACL,UAAU,EAAE,EAAE;YACd,KAAK,EAAE,QAAQ;YACf,MAAM,EAAE,0CAA0C;SACnD,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,OAAO;QACX,OAAO,EAAE,UAAU,EAAE,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,8BAA8B,EAAE,CAAC;IACrF,CAAC;IAED,KAAK,CAAC,OAAO;QACX,yBAAyB;IAC3B,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,QAAuB;QAClC,MAAM,IAAI,KAAK,CAAC,qEAAqE,CAAC,CAAC;IACzF,CAAC;IAED,KAAK,CAAC,QAAQ,CAAC,QAAyB;QACtC,MAAM,IAAI,KAAK,CAAC,qDAAqD,CAAC,CAAC;IACzE,CAAC;IAED,KAAK,CAAC,UAAU;QACd,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,KAAK,CAAC,UAAU;QACd,8CAA8C;IAChD,CAAC;IAED;;;;;;OAMG;IACH,MAAM;QACJ,OAAO,SAAS,CAAC;IACnB,CAAC;CACF;AA3DD,gCA2DC"}
|
package/dist/providers/port.d.ts
CHANGED
|
@@ -14,7 +14,14 @@
|
|
|
14
14
|
/** Where a business's money goes, as the provider knows it. */
|
|
15
15
|
export interface ProviderAccount {
|
|
16
16
|
readonly externalId: string;
|
|
17
|
-
|
|
17
|
+
/**
|
|
18
|
+
* `none` is a real answer, not an absence.
|
|
19
|
+
*
|
|
20
|
+
* It is what a deployment with no payment provider configured says, and it is
|
|
21
|
+
* different from `pending`: `pending` means somebody is checking, and a
|
|
22
|
+
* business told that will wait for an email nobody is going to send.
|
|
23
|
+
*/
|
|
24
|
+
readonly status: 'none' | 'pending' | 'restricted' | 'ready';
|
|
18
25
|
/** What the provider still wants, in its own words. */
|
|
19
26
|
readonly requirements: readonly string[];
|
|
20
27
|
}
|
|
@@ -23,6 +30,16 @@ export interface OnboardingLink {
|
|
|
23
30
|
readonly expiresAt: Date;
|
|
24
31
|
}
|
|
25
32
|
export interface ChargeRequest {
|
|
33
|
+
/**
|
|
34
|
+
* Whose charge this is, carried into the provider's own metadata.
|
|
35
|
+
*
|
|
36
|
+
* **The only thing that ties a webhook back to a tenant.** A provider's
|
|
37
|
+
* event names the provider's identifiers and nothing of ours, and the tables
|
|
38
|
+
* that could translate one into the other are under row-level security — so
|
|
39
|
+
* an unbound lookup returns *nothing*, silently, and the event changes
|
|
40
|
+
* nothing while appearing to have been handled.
|
|
41
|
+
*/
|
|
42
|
+
readonly tenantId: string;
|
|
26
43
|
/** The business being paid, as the provider knows it. */
|
|
27
44
|
readonly account: string;
|
|
28
45
|
/**
|
|
@@ -82,6 +99,8 @@ export interface ChargeResult {
|
|
|
82
99
|
}
|
|
83
100
|
/** A card being stored for later, rather than charged now. */
|
|
84
101
|
export interface SaveCardRequest {
|
|
102
|
+
/** Whose card this is. See `ChargeRequest.tenantId`. */
|
|
103
|
+
readonly tenantId: string;
|
|
85
104
|
/** An existing customer to attach it to, where the person already has one. */
|
|
86
105
|
readonly customer?: string;
|
|
87
106
|
/** What it is being saved for, carried through for matching a webhook back. */
|
|
@@ -115,6 +134,14 @@ export interface RefundRequest {
|
|
|
115
134
|
export interface ProviderEvent {
|
|
116
135
|
readonly kind: 'payment' | 'account' | 'other';
|
|
117
136
|
readonly externalId: string;
|
|
137
|
+
/**
|
|
138
|
+
* Whose it is, read back from the metadata we set on the way out.
|
|
139
|
+
*
|
|
140
|
+
* Absent means the event is about something this deployment did not create —
|
|
141
|
+
* another environment sharing the provider account — and the right response
|
|
142
|
+
* is to ignore it rather than to go looking.
|
|
143
|
+
*/
|
|
144
|
+
readonly tenantId?: string;
|
|
118
145
|
readonly state?: 'authorized' | 'captured' | 'failed' | 'refunded';
|
|
119
146
|
readonly accountStatus?: ProviderAccount;
|
|
120
147
|
readonly instrument?: string;
|
|
@@ -124,8 +151,13 @@ export interface PaymentProvider {
|
|
|
124
151
|
readonly name: string;
|
|
125
152
|
/** Starts or resumes onboarding, and says where to send the business. */
|
|
126
153
|
onboard(tenantId: string, returnUrl: string, refreshUrl: string): Promise<OnboardingLink>;
|
|
127
|
-
/**
|
|
128
|
-
|
|
154
|
+
/**
|
|
155
|
+
* Creates the account if there is none, and reports where it stands.
|
|
156
|
+
*
|
|
157
|
+
* `tenantId` is written into the provider's metadata when an account is
|
|
158
|
+
* created, so that an account webhook months later can say whose it is.
|
|
159
|
+
*/
|
|
160
|
+
account(externalId: string | null, country: string, email?: string, tenantId?: string): Promise<ProviderAccount>;
|
|
129
161
|
charge(request: ChargeRequest): Promise<ChargeResult>;
|
|
130
162
|
/** Takes money that was only held. The human decision has been made. */
|
|
131
163
|
capture(externalId: string, amount?: number): Promise<ChargeResult>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"port.d.ts","sourceRoot":"","sources":["../../src/providers/port.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,+DAA+D;AAC/D,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,MAAM,EAAE,SAAS,GAAG,YAAY,GAAG,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"port.d.ts","sourceRoot":"","sources":["../../src/providers/port.ts"],"names":[],"mappings":"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"}
|
|
@@ -26,7 +26,7 @@ export declare class StripeConnect implements PaymentProvider {
|
|
|
26
26
|
readonly name = "stripe";
|
|
27
27
|
private readonly stripe;
|
|
28
28
|
constructor(options: StripeConnectOptions);
|
|
29
|
-
account(externalId: string | null, country: string, email?: string): Promise<ProviderAccount>;
|
|
29
|
+
account(externalId: string | null, country: string, email?: string, tenantId?: string): Promise<ProviderAccount>;
|
|
30
30
|
onboard(externalId: string, returnUrl: string, refreshUrl: string): Promise<OnboardingLink>;
|
|
31
31
|
charge(request: ChargeRequest): Promise<ChargeResult>;
|
|
32
32
|
capture(externalId: string, amount?: number): Promise<ChargeResult>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"stripe.d.ts","sourceRoot":"","sources":["../../src/providers/stripe.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,QAAQ,CAAC;AAC5B,OAAO,KAAK,EACV,aAAa,EACb,YAAY,EACZ,cAAc,EACd,eAAe,EACf,eAAe,EACf,aAAa,EACb,aAAa,EACb,eAAe,EACf,cAAc,EACd,UAAU,EACX,MAAM,QAAQ,CAAC;AAEhB,MAAM,WAAW,oBAAoB;IACnC,SAAS,EAAE,MAAM,CAAC;IAClB,2EAA2E;IAC3E,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,+EAA+E;IAC/E,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED;;;;;;;;;;;;;GAaG;AACH,qBAAa,aAAc,YAAW,eAAe;IAIvC,OAAO,CAAC,QAAQ,CAAC,OAAO;IAHpC,QAAQ,CAAC,IAAI,YAAY;IACzB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;gBAEH,OAAO,EAAE,oBAAoB;IAIpD,OAAO,CACX,UAAU,EAAE,MAAM,GAAG,IAAI,EACzB,OAAO,EAAE,MAAM,EACf,KAAK,CAAC,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"stripe.d.ts","sourceRoot":"","sources":["../../src/providers/stripe.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,QAAQ,CAAC;AAC5B,OAAO,KAAK,EACV,aAAa,EACb,YAAY,EACZ,cAAc,EACd,eAAe,EACf,eAAe,EACf,aAAa,EACb,aAAa,EACb,eAAe,EACf,cAAc,EACd,UAAU,EACX,MAAM,QAAQ,CAAC;AAEhB,MAAM,WAAW,oBAAoB;IACnC,SAAS,EAAE,MAAM,CAAC;IAClB,2EAA2E;IAC3E,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,+EAA+E;IAC/E,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED;;;;;;;;;;;;;GAaG;AACH,qBAAa,aAAc,YAAW,eAAe;IAIvC,OAAO,CAAC,QAAQ,CAAC,OAAO;IAHpC,QAAQ,CAAC,IAAI,YAAY;IACzB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;gBAEH,OAAO,EAAE,oBAAoB;IAIpD,OAAO,CACX,UAAU,EAAE,MAAM,GAAG,IAAI,EACzB,OAAO,EAAE,MAAM,EACf,KAAK,CAAC,EAAE,MAAM,EACd,QAAQ,CAAC,EAAE,MAAM,GAChB,OAAO,CAAC,eAAe,CAAC;IAgBrB,OAAO,CACX,UAAU,EAAE,MAAM,EAClB,SAAS,EAAE,MAAM,EACjB,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,cAAc,CAAC;IAkBpB,MAAM,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,YAAY,CAAC;IA8DrD,OAAO,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC;IAanE,OAAO,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAIhD;;;;;;;OAOG;IACG,QAAQ,CAAC,OAAO,EAAE,eAAe,GAAG,OAAO,CAAC,cAAc,CAAC;IA4B3D,UAAU,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,GAAG,SAAS,CAAC;IAwB/D,UAAU,CAAC,aAAa,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAIhD,MAAM,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC;QAAE,UAAU,EAAE,MAAM,CAAA;KAAE,CAAC;IAarE,MAAM,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,SAAS,GAAG,aAAa,GAAG,SAAS;CAoB3F"}
|
package/dist/providers/stripe.js
CHANGED
|
@@ -27,13 +27,16 @@ class StripeConnect {
|
|
|
27
27
|
this.options = options;
|
|
28
28
|
this.stripe = options.client ?? new stripe_1.default(options.secretKey);
|
|
29
29
|
}
|
|
30
|
-
async account(externalId, country, email) {
|
|
30
|
+
async account(externalId, country, email, tenantId) {
|
|
31
31
|
const account = externalId
|
|
32
32
|
? await this.stripe.accounts.retrieve(externalId)
|
|
33
33
|
: await this.stripe.accounts.create({
|
|
34
34
|
type: 'express',
|
|
35
35
|
country,
|
|
36
36
|
...(email ? { email } : {}),
|
|
37
|
+
// Written once, at creation, so an account event months later can say
|
|
38
|
+
// whose it is without a lookup that row-level security would refuse.
|
|
39
|
+
...(tenantId ? { metadata: { tenant: tenantId } } : {}),
|
|
37
40
|
capabilities: { card_payments: { requested: true }, transfers: { requested: true } },
|
|
38
41
|
});
|
|
39
42
|
return interpretAccount(account);
|
|
@@ -88,7 +91,15 @@ class StripeConnect {
|
|
|
88
91
|
: {}),
|
|
89
92
|
// Carried through so a webhook can be matched back to what it paid
|
|
90
93
|
// for without a lookup table of our own.
|
|
91
|
-
|
|
94
|
+
/*
|
|
95
|
+
* The tenant as well as the subject.
|
|
96
|
+
*
|
|
97
|
+
* A webhook names the provider's identifiers and nothing of ours, and
|
|
98
|
+
* the table that could translate one into the other is under
|
|
99
|
+
* row-level security — so a lookup with no tenant returns nothing at
|
|
100
|
+
* all. This is what makes an event attributable.
|
|
101
|
+
*/
|
|
102
|
+
metadata: { subject: request.subject, tenant: request.tenantId },
|
|
92
103
|
/*
|
|
93
104
|
* Only where a card still has to be entered. Offering a redirect
|
|
94
105
|
* method to a charge that is already confirmed against a stored card
|
|
@@ -127,12 +138,12 @@ class StripeConnect {
|
|
|
127
138
|
*/
|
|
128
139
|
async saveCard(request) {
|
|
129
140
|
const customer = request.customer ??
|
|
130
|
-
(await this.stripe.customers.create({ metadata: { subject: request.subject } }, { idempotencyKey: `customer-${request.reference}` })).id;
|
|
141
|
+
(await this.stripe.customers.create({ metadata: { subject: request.subject, tenant: request.tenantId } }, { idempotencyKey: `customer-${request.reference}` })).id;
|
|
131
142
|
const intent = await this.stripe.setupIntents.create({
|
|
132
143
|
customer,
|
|
133
144
|
usage: 'off_session',
|
|
134
145
|
payment_method_types: ['card'],
|
|
135
|
-
metadata: { subject: request.subject },
|
|
146
|
+
metadata: { subject: request.subject, tenant: request.tenantId },
|
|
136
147
|
}, { idempotencyKey: request.reference });
|
|
137
148
|
return {
|
|
138
149
|
customer,
|
|
@@ -245,6 +256,7 @@ function interpretEvent(event) {
|
|
|
245
256
|
const intent = event.data.object;
|
|
246
257
|
const result = interpretIntent(intent);
|
|
247
258
|
return {
|
|
259
|
+
...(intent.metadata?.tenant ? { tenantId: intent.metadata.tenant } : {}),
|
|
248
260
|
kind: 'payment',
|
|
249
261
|
externalId: intent.id,
|
|
250
262
|
state: event.type === 'payment_intent.payment_failed'
|
|
@@ -266,7 +278,12 @@ function interpretEvent(event) {
|
|
|
266
278
|
}
|
|
267
279
|
case 'account.updated': {
|
|
268
280
|
const account = event.data.object;
|
|
269
|
-
return {
|
|
281
|
+
return {
|
|
282
|
+
kind: 'account',
|
|
283
|
+
externalId: account.id,
|
|
284
|
+
...(account.metadata?.tenant ? { tenantId: account.metadata.tenant } : {}),
|
|
285
|
+
accountStatus: interpretAccount(account),
|
|
286
|
+
};
|
|
270
287
|
}
|
|
271
288
|
default:
|
|
272
289
|
/*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"stripe.js","sourceRoot":"","sources":["../../src/providers/stripe.ts"],"names":[],"mappings":";;;;;;AAAA,oDAA4B;AAsB5B;;;;;;;;;;;;;GAaG;AACH,MAAa,aAAa;IAIK;IAHpB,IAAI,GAAG,QAAQ,CAAC;IACR,MAAM,CAAS;IAEhC,YAA6B,OAA6B;QAA7B,YAAO,GAAP,OAAO,CAAsB;QACxD,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,IAAI,IAAI,gBAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IAChE,CAAC;IAED,KAAK,CAAC,OAAO,CACX,UAAyB,EACzB,OAAe,EACf,KAAc;
|
|
1
|
+
{"version":3,"file":"stripe.js","sourceRoot":"","sources":["../../src/providers/stripe.ts"],"names":[],"mappings":";;;;;;AAAA,oDAA4B;AAsB5B;;;;;;;;;;;;;GAaG;AACH,MAAa,aAAa;IAIK;IAHpB,IAAI,GAAG,QAAQ,CAAC;IACR,MAAM,CAAS;IAEhC,YAA6B,OAA6B;QAA7B,YAAO,GAAP,OAAO,CAAsB;QACxD,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,IAAI,IAAI,gBAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IAChE,CAAC;IAED,KAAK,CAAC,OAAO,CACX,UAAyB,EACzB,OAAe,EACf,KAAc,EACd,QAAiB;QAEjB,MAAM,OAAO,GAAG,UAAU;YACxB,CAAC,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,UAAU,CAAC;YACjD,CAAC,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC;gBAChC,IAAI,EAAE,SAAS;gBACf,OAAO;gBACP,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBAC3B,sEAAsE;gBACtE,qEAAqE;gBACrE,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBACvD,YAAY,EAAE,EAAE,aAAa,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,EAAE,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,EAAE;aACrF,CAAC,CAAC;QAEP,OAAO,gBAAgB,CAAC,OAAO,CAAC,CAAC;IACnC,CAAC;IAED,KAAK,CAAC,OAAO,CACX,UAAkB,EAClB,SAAiB,EACjB,UAAkB;QAElB,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,MAAM,CAAC;YACjD,OAAO,EAAE,UAAU;YACnB,IAAI,EAAE,oBAAoB;YAC1B,UAAU,EAAE,SAAS;YACrB;;;;;;eAMG;YACH,WAAW,EAAE,UAAU;SACxB,CAAC,CAAC;QAEH,OAAO,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,SAAS,EAAE,IAAI,IAAI,CAAC,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,EAAE,CAAC;IACxE,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,OAAsB;QACjC,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,MAAM,CACpD;gBACE,MAAM,EAAE,OAAO,CAAC,MAAM;gBACtB,QAAQ,EAAE,OAAO,CAAC,QAAQ,CAAC,WAAW,EAAE;gBACxC;;;;;;mBAMG;gBACH,aAAa,EAAE,EAAE,WAAW,EAAE,OAAO,CAAC,OAAO,EAAE;gBAC/C,GAAG,CAAC,OAAO,CAAC,cAAc,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,sBAAsB,EAAE,OAAO,CAAC,cAAc,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBACzF,cAAc,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,QAAQ;gBACxD,GAAG,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBACpE,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBAC3D;;;;;;;mBAOG;gBACH,GAAG,CAAC,OAAO,CAAC,aAAa;oBACvB,CAAC,CAAC;wBACE,cAAc,EAAE,OAAO,CAAC,aAAa;wBACrC,OAAO,EAAE,IAAI;wBACb,WAAW,EAAE,IAAI;qBAClB;oBACH,CAAC,CAAC,EAAE,CAAC;gBACP,mEAAmE;gBACnE,yCAAyC;gBACzC;;;;;;;mBAOG;gBACH,QAAQ,EAAE,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,QAAQ,EAAE;gBAChE;;;;mBAIG;gBACH,GAAG,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,yBAAyB,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE,CAAC;aACnF;YACD,sEAAsE;YACtE,kDAAkD;YAClD,EAAE,cAAc,EAAE,OAAO,CAAC,SAAS,EAAE,CACtC,CAAC;YAEF,OAAO,eAAe,CAAC,MAAM,CAAC,CAAC;QACjC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,OAAO,CAAC,KAAK,CAAC,CAAC;QACxB,CAAC;IACH,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,UAAkB,EAAE,MAAe;QAC/C,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,OAAO,CACrD,UAAU,EACV,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,iBAAiB,EAAE,MAAM,EAAE,CACjE,CAAC;YAEF,OAAO,eAAe,CAAC,MAAM,CAAC,CAAC;QACjC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,OAAO,CAAC,KAAK,CAAC,CAAC;QACxB,CAAC;IACH,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,UAAkB;QAC9B,MAAM,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;IACtD,CAAC;IAED;;;;;;;OAOG;IACH,KAAK,CAAC,QAAQ,CAAC,OAAwB;QACrC,MAAM,QAAQ,GACZ,OAAO,CAAC,QAAQ;YAChB,CACE,MAAM,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,MAAM,CAChC,EAAE,QAAQ,EAAE,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,QAAQ,EAAE,EAAE,EACpE,EAAE,cAAc,EAAE,YAAY,OAAO,CAAC,SAAS,EAAE,EAAE,CACpD,CACF,CAAC,EAAE,CAAC;QAEP,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,MAAM,CAClD;YACE,QAAQ;YACR,KAAK,EAAE,aAAa;YACpB,oBAAoB,EAAE,CAAC,MAAM,CAAC;YAC9B,QAAQ,EAAE,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,QAAQ,EAAE;SACjE,EACD,EAAE,cAAc,EAAE,OAAO,CAAC,SAAS,EAAE,CACtC,CAAC;QAEF,OAAO;YACL,QAAQ;YACR,UAAU,EAAE,MAAM,CAAC,EAAE;YACrB,wEAAwE;YACxE,YAAY,EAAE,MAAM,CAAC,aAAa,IAAI,EAAE;SACzC,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,UAAU,CAAC,UAAkB;QACjC,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,QAAQ,CAAC,UAAU,EAAE;YACjE,MAAM,EAAE,CAAC,gBAAgB,CAAC;SAC3B,CAAC,CAAC;QAEH,MAAM,MAAM,GAAG,MAAM,CAAC,cAAc,CAAC;QACrC,IAAI,CAAC,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,CAAC,MAAM,CAAC,QAAQ;YAAE,OAAO,SAAS,CAAC;QAEhF,MAAM,QAAQ,GAAG,OAAO,MAAM,CAAC,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC;QAE5F,OAAO;YACL,QAAQ;YACR,aAAa,EAAE,MAAM,CAAC,EAAE;YACxB,GAAG,CAAC,MAAM,CAAC,IAAI;gBACb,CAAC,CAAC;oBACE,KAAK,EAAE,MAAM,CAAC,IAAI,CAAC,KAAK;oBACxB,KAAK,EAAE,MAAM,CAAC,IAAI,CAAC,KAAK;oBACxB,WAAW,EAAE,MAAM,CAAC,IAAI,CAAC,SAAS;oBAClC,UAAU,EAAE,MAAM,CAAC,IAAI,CAAC,QAAQ;iBACjC;gBACH,CAAC,CAAC,EAAE,CAAC;SACR,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,UAAU,CAAC,aAAqB;QACpC,MAAM,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC;IACzD,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,OAAsB;QACjC,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,CAC7C;YACE,cAAc,EAAE,OAAO,CAAC,UAAU;YAClC,MAAM,EAAE,OAAO,CAAC,MAAM;YACtB,QAAQ,EAAE,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE;SACnD,EACD,EAAE,cAAc,EAAE,OAAO,CAAC,SAAS,EAAE,CACtC,CAAC;QAEF,OAAO,EAAE,UAAU,EAAE,MAAM,CAAC,EAAE,EAAE,CAAC;IACnC,CAAC;IAED,MAAM,CAAC,OAAwB,EAAE,SAA6B;QAC5D,IAAI,CAAC,SAAS,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,aAAa;YAAE,OAAO,SAAS,CAAC;QAEhE,IAAI,KAAmB,CAAC;QAExB,IAAI,CAAC;YACH,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,cAAc,CAAC,OAAO,EAAE,SAAS,EAAE,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC;QAC9F,CAAC;QAAC,MAAM,CAAC;YACP;;;;;;eAMG;YACH,OAAO,SAAS,CAAC;QACnB,CAAC;QAED,OAAO,cAAc,CAAC,KAAK,CAAC,CAAC;IAC/B,CAAC;CACF;AAnOD,sCAmOC;AAED,6EAA6E;AAC7E,SAAS,gBAAgB,CAAC,OAAuB;IAC/C,MAAM,YAAY,GAAG;QACnB,GAAG,CAAC,OAAO,CAAC,YAAY,EAAE,aAAa,IAAI,EAAE,CAAC;QAC9C,GAAG,CAAC,OAAO,CAAC,YAAY,EAAE,QAAQ,IAAI,EAAE,CAAC;KAC1C,CAAC;IAEF;;;;;;OAMG;IACH,MAAM,KAAK,GAAG,OAAO,CAAC,eAAe,KAAK,IAAI,IAAI,OAAO,CAAC,eAAe,KAAK,IAAI,CAAC;IAEnF,OAAO;QACL,UAAU,EAAE,OAAO,CAAC,EAAE;QACtB,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,SAAS;QAC5E,YAAY,EAAE,CAAC,GAAG,IAAI,GAAG,CAAC,YAAY,CAAC,CAAC;KACzC,CAAC;AACJ,CAAC;AAED,SAAS,eAAe,CAAC,MAA4B;IACnD,MAAM,KAAK,GACT,MAAM,CAAC,MAAM,KAAK,WAAW;QAC3B,CAAC,CAAC,UAAU;QACZ,CAAC,CAAC,MAAM,CAAC,MAAM,KAAK,kBAAkB;YACpC,CAAC,CAAC,YAAY;YACd,CAAC,CAAC,MAAM,CAAC,MAAM,KAAK,UAAU;gBAC5B,CAAC,CAAC,QAAQ;gBACV,CAAC,CAAC,SAAS,CAAC;IAEpB,MAAM,MAAM,GAAG,MAAM,CAAC,aAAa,CAAC;IACpC,MAAM,IAAI,GACR,OAAO,MAAM,KAAK,QAAQ,IAAI,MAAM,EAAE,sBAAsB,EAAE,IAAI;QAChE,CAAC,CAAC,GAAG,MAAM,CAAC,sBAAsB,CAAC,IAAI,CAAC,KAAK,WAAW,MAAM,CAAC,sBAAsB,CAAC,IAAI,CAAC,KAAK,EAAE;QAClG,CAAC,CAAC,SAAS,CAAC;IAEhB,OAAO;QACL,UAAU,EAAE,MAAM,CAAC,EAAE;QACrB,KAAK;QACL,GAAG,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,MAAM,CAAC,aAAa,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACvE,GAAG,CAAC,MAAM,CAAC,WAAW,EAAE,eAAe,EAAE,GAAG;YAC1C,CAAC,CAAC,EAAE,WAAW,EAAE,MAAM,CAAC,WAAW,CAAC,eAAe,CAAC,GAAG,EAAE;YACzD,CAAC,CAAC,EAAE,CAAC;QACP,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACrC,GAAG,CAAC,MAAM,CAAC,kBAAkB,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,kBAAkB,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KAC7F,CAAC;AACJ,CAAC;AAED,SAAS,cAAc,CAAC,KAAmB;IACzC,QAAQ,KAAK,CAAC,IAAI,EAAE,CAAC;QACnB,KAAK,0BAA0B,CAAC;QAChC,KAAK,0CAA0C,CAAC;QAChD,KAAK,+BAA+B,CAAC,CAAC,CAAC;YACrC,MAAM,MAAM,GAAG,KAAK,CAAC,IAAI,CAAC,MAA8B,CAAC;YACzD,MAAM,MAAM,GAAG,eAAe,CAAC,MAAM,CAAC,CAAC;YAEvC,OAAO;gBACL,GAAG,CAAC,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,MAAM,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBACxE,IAAI,EAAE,SAAS;gBACf,UAAU,EAAE,MAAM,CAAC,EAAE;gBACrB,KAAK,EACH,KAAK,CAAC,IAAI,KAAK,+BAA+B;oBAC5C,CAAC,CAAC,QAAQ;oBACV,CAAC,CAAC,MAAM,CAAC,KAAK,KAAK,UAAU;wBAC3B,CAAC,CAAC,UAAU;wBACZ,CAAC,CAAC,YAAY;gBACpB,GAAG,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,MAAM,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBAC/D,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;aACpD,CAAC;QACJ,CAAC;QAED,KAAK,iBAAiB,CAAC,CAAC,CAAC;YACvB,MAAM,MAAM,GAAG,KAAK,CAAC,IAAI,CAAC,MAAuB,CAAC;YAClD,OAAO;gBACL,IAAI,EAAE,SAAS;gBACf,UAAU,EAAE,OAAO,MAAM,CAAC,cAAc,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE;gBACzF,KAAK,EAAE,UAAU;aAClB,CAAC;QACJ,CAAC;QAED,KAAK,iBAAiB,CAAC,CAAC,CAAC;YACvB,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,MAAwB,CAAC;YAEpD,OAAO;gBACL,IAAI,EAAE,SAAS;gBACf,UAAU,EAAE,OAAO,CAAC,EAAE;gBACtB,GAAG,CAAC,OAAO,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,OAAO,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBAC1E,aAAa,EAAE,gBAAgB,CAAC,OAAO,CAAC;aACzC,CAAC;QACJ,CAAC;QAED;YACE;;;;;;eAMG;YACH,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,UAAU,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC;IACnD,CAAC;AACH,CAAC;AAED,kEAAkE;AAClE,SAAS,OAAO,CAAC,KAAc;IAC7B,MAAM,OAAO,GACX,KAAK,YAAY,gBAAM,CAAC,MAAM,CAAC,WAAW;QACxC,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,IAAI,0BAA0B,CAAC;QAC/C,CAAC,CAAC,KAAK,YAAY,KAAK;YACtB,CAAC,CAAC,KAAK,CAAC,OAAO;YACf,CAAC,CAAC,0BAA0B,CAAC;IAEnC,OAAO,EAAE,UAAU,EAAE,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC;AAC9D,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@birtalanrobert/commerce",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "4.0.0",
|
|
4
4
|
"description": "Taking money on a business's behalf: payout onboarding, payments, refunds and the record of both",
|
|
5
5
|
"license": "AGPL-3.0-only",
|
|
6
6
|
"author": "Robert Birtalan",
|
|
@@ -44,11 +44,11 @@
|
|
|
44
44
|
],
|
|
45
45
|
"dependencies": {
|
|
46
46
|
"stripe": "^22.6.0",
|
|
47
|
-
"@birtalanrobert/context": "^1.1.0",
|
|
48
|
-
"@birtalanrobert/http": "^2.0.0",
|
|
49
|
-
"@birtalanrobert/money": "^1.0.0",
|
|
50
47
|
"@birtalanrobert/database": "^1.0.0",
|
|
51
|
-
"@birtalanrobert/tenancy": "^1.1.0"
|
|
48
|
+
"@birtalanrobert/tenancy": "^1.1.0",
|
|
49
|
+
"@birtalanrobert/http": "^2.0.0",
|
|
50
|
+
"@birtalanrobert/context": "^1.1.0",
|
|
51
|
+
"@birtalanrobert/money": "^1.0.0"
|
|
52
52
|
},
|
|
53
53
|
"peerDependencies": {
|
|
54
54
|
"@nestjs/common": "^11.0.0",
|
package/src/index.ts
CHANGED
|
@@ -126,6 +126,9 @@ export class CommerceService {
|
|
|
126
126
|
existing?.externalId ?? null,
|
|
127
127
|
options.country,
|
|
128
128
|
options.email,
|
|
129
|
+
// Written into the provider's metadata at creation, so an account event
|
|
130
|
+
// months later can say whose it is.
|
|
131
|
+
tenantId,
|
|
129
132
|
);
|
|
130
133
|
|
|
131
134
|
await this.saveAccount(tenantId, account);
|
|
@@ -175,6 +178,7 @@ export class CommerceService {
|
|
|
175
178
|
}
|
|
176
179
|
|
|
177
180
|
const result = await this.provider.charge({
|
|
181
|
+
tenantId,
|
|
178
182
|
account: account.externalId,
|
|
179
183
|
amount: input.amount,
|
|
180
184
|
currency: input.currency,
|
|
@@ -241,6 +245,7 @@ export class CommerceService {
|
|
|
241
245
|
const existing = await this.savedCards(tenantId, input.subject);
|
|
242
246
|
|
|
243
247
|
const result = await this.provider.saveCard({
|
|
248
|
+
tenantId,
|
|
244
249
|
subject: input.subject,
|
|
245
250
|
reference: input.reference,
|
|
246
251
|
// Reuse the customer this person already has, so a second card joins the
|
|
@@ -541,37 +546,47 @@ export class CommerceService {
|
|
|
541
546
|
* books.
|
|
542
547
|
*/
|
|
543
548
|
async settle(event: ProviderEvent): Promise<Payment | PayoutAccount | undefined> {
|
|
544
|
-
|
|
545
|
-
|
|
546
|
-
|
|
547
|
-
|
|
548
|
-
|
|
549
|
-
|
|
550
|
-
|
|
551
|
-
|
|
549
|
+
/*
|
|
550
|
+
* The tenant comes from the metadata we wrote on the way out, and there is
|
|
551
|
+
* no fallback.
|
|
552
|
+
*
|
|
553
|
+
* The obvious alternative — look the provider's identifier up in our own
|
|
554
|
+
* table — **cannot work here**, and fails in the worst way: every one of
|
|
555
|
+
* these tables is under `FORCE ROW LEVEL SECURITY`, so a query with no
|
|
556
|
+
* tenant bound returns *no rows at all* rather than an error. The webhook
|
|
557
|
+
* then verifies, reads, understands and changes nothing, and the only
|
|
558
|
+
* evidence is a payment stuck in whatever state it was in.
|
|
559
|
+
*
|
|
560
|
+
* An event with no tenant on it is about something this deployment did not
|
|
561
|
+
* create — another environment sharing the provider account — and ignoring
|
|
562
|
+
* it is the right answer rather than a limitation.
|
|
563
|
+
*/
|
|
564
|
+
const tenantId = event.tenantId;
|
|
565
|
+
if (!tenantId) return undefined;
|
|
552
566
|
|
|
567
|
+
if (event.kind === 'account' && event.accountStatus) {
|
|
553
568
|
await this.saveAccount(tenantId, event.accountStatus);
|
|
554
569
|
return (await this.payoutAccount(tenantId)) ?? undefined;
|
|
555
570
|
}
|
|
556
571
|
|
|
557
572
|
if (event.kind !== 'payment' || !event.state) return undefined;
|
|
558
573
|
|
|
559
|
-
|
|
560
|
-
|
|
561
|
-
|
|
562
|
-
|
|
563
|
-
|
|
564
|
-
|
|
565
|
-
|
|
566
|
-
|
|
574
|
+
// Inside the tenant's own policy, which is the only way this table can be
|
|
575
|
+
// read at all.
|
|
576
|
+
const found = await runInTenantTransaction(
|
|
577
|
+
this.dataSource,
|
|
578
|
+
(scoped) =>
|
|
579
|
+
scoped
|
|
580
|
+
.getRepository(Payment)
|
|
581
|
+
.findOne({ where: { tenantId, externalId: event.externalId } }),
|
|
582
|
+
{ tenantId },
|
|
567
583
|
);
|
|
568
584
|
|
|
569
|
-
const found = rows[0];
|
|
570
585
|
if (!found) return undefined;
|
|
571
586
|
|
|
572
587
|
const state = event.state === 'refunded' ? 'refunded' : event.state;
|
|
573
588
|
|
|
574
|
-
return this.update(
|
|
589
|
+
return this.update(tenantId, found.id, {
|
|
575
590
|
state,
|
|
576
591
|
...(state === 'captured' ? { takenAt: new Date() } : {}),
|
|
577
592
|
...(event.instrument ? { instrument: event.instrument } : {}),
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
import type {
|
|
2
|
+
ChargeRequest,
|
|
3
|
+
ChargeResult,
|
|
4
|
+
OnboardingLink,
|
|
5
|
+
PaymentProvider,
|
|
6
|
+
ProviderAccount,
|
|
7
|
+
RefundRequest,
|
|
8
|
+
SaveCardRequest,
|
|
9
|
+
SaveCardResult,
|
|
10
|
+
StoredCard,
|
|
11
|
+
} from './port';
|
|
12
|
+
|
|
13
|
+
/**
|
|
14
|
+
* No payment provider at all, said out loud rather than by failing.
|
|
15
|
+
*
|
|
16
|
+
* **Online payment is optional and never mandatory**, and this is what makes
|
|
17
|
+
* that true in the code rather than only in a document. A salon that takes cash
|
|
18
|
+
* at the counter and has never heard of Stripe runs its whole diary, writes
|
|
19
|
+
* down what it took, and reports on it — and nothing about that deployment
|
|
20
|
+
* should require a payment account to exist, least of all the application
|
|
21
|
+
* starting up.
|
|
22
|
+
*
|
|
23
|
+
* The alternative that looks simpler is constructing the vendor's client with
|
|
24
|
+
* an empty key. It throws inside its own constructor, and the whole API fails
|
|
25
|
+
* to boot — which is how this was found.
|
|
26
|
+
*
|
|
27
|
+
* **Not a permissive no-op.** Every operation refuses, and the account reports
|
|
28
|
+
* `none`, so every gate that already asks "can this business be paid out?"
|
|
29
|
+
* answers no without a special case. A provider that quietly returned success
|
|
30
|
+
* would write a trail of payments that never happened, which is worse than the
|
|
31
|
+
* crash it replaced.
|
|
32
|
+
*/
|
|
33
|
+
export class NoPayments implements PaymentProvider {
|
|
34
|
+
readonly name = 'none';
|
|
35
|
+
|
|
36
|
+
async onboard(): Promise<OnboardingLink> {
|
|
37
|
+
throw new Error('This deployment has no payment provider configured.');
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
/**
|
|
41
|
+
* `none` rather than `pending`.
|
|
42
|
+
*
|
|
43
|
+
* They are different facts: `pending` means the provider is still checking,
|
|
44
|
+
* and a business told that will wait for an email that is never coming.
|
|
45
|
+
*/
|
|
46
|
+
async account(externalId: string | null): Promise<ProviderAccount> {
|
|
47
|
+
return { externalId: externalId ?? '', status: 'none', requirements: [] };
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
async charge(_request: ChargeRequest): Promise<ChargeResult> {
|
|
51
|
+
return {
|
|
52
|
+
externalId: '',
|
|
53
|
+
state: 'failed',
|
|
54
|
+
detail: 'This business cannot take card payments.',
|
|
55
|
+
};
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
async capture(): Promise<ChargeResult> {
|
|
59
|
+
return { externalId: '', state: 'failed', detail: 'There is nothing to capture.' };
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
async release(): Promise<void> {
|
|
63
|
+
// Nothing was ever held.
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
async refund(_request: RefundRequest): Promise<{ externalId: string }> {
|
|
67
|
+
throw new Error('Nothing was taken through a provider, so nothing can be given back.');
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
async saveCard(_request: SaveCardRequest): Promise<SaveCardResult> {
|
|
71
|
+
throw new Error('This deployment has no payment provider configured.');
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
async storedCard(): Promise<StoredCard | undefined> {
|
|
75
|
+
return undefined;
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
async forgetCard(): Promise<void> {
|
|
79
|
+
// There is nothing stored anywhere to forget.
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
/**
|
|
83
|
+
* Never genuine.
|
|
84
|
+
*
|
|
85
|
+
* A deployment with no provider has no webhook to receive, so anything
|
|
86
|
+
* arriving at that address came from somebody else — and `undefined` is how
|
|
87
|
+
* the port says "not from the provider".
|
|
88
|
+
*/
|
|
89
|
+
verify(): undefined {
|
|
90
|
+
return undefined;
|
|
91
|
+
}
|
|
92
|
+
}
|
package/src/providers/port.ts
CHANGED
|
@@ -15,7 +15,14 @@
|
|
|
15
15
|
/** Where a business's money goes, as the provider knows it. */
|
|
16
16
|
export interface ProviderAccount {
|
|
17
17
|
readonly externalId: string;
|
|
18
|
-
|
|
18
|
+
/**
|
|
19
|
+
* `none` is a real answer, not an absence.
|
|
20
|
+
*
|
|
21
|
+
* It is what a deployment with no payment provider configured says, and it is
|
|
22
|
+
* different from `pending`: `pending` means somebody is checking, and a
|
|
23
|
+
* business told that will wait for an email nobody is going to send.
|
|
24
|
+
*/
|
|
25
|
+
readonly status: 'none' | 'pending' | 'restricted' | 'ready';
|
|
19
26
|
/** What the provider still wants, in its own words. */
|
|
20
27
|
readonly requirements: readonly string[];
|
|
21
28
|
}
|
|
@@ -26,6 +33,16 @@ export interface OnboardingLink {
|
|
|
26
33
|
}
|
|
27
34
|
|
|
28
35
|
export interface ChargeRequest {
|
|
36
|
+
/**
|
|
37
|
+
* Whose charge this is, carried into the provider's own metadata.
|
|
38
|
+
*
|
|
39
|
+
* **The only thing that ties a webhook back to a tenant.** A provider's
|
|
40
|
+
* event names the provider's identifiers and nothing of ours, and the tables
|
|
41
|
+
* that could translate one into the other are under row-level security — so
|
|
42
|
+
* an unbound lookup returns *nothing*, silently, and the event changes
|
|
43
|
+
* nothing while appearing to have been handled.
|
|
44
|
+
*/
|
|
45
|
+
readonly tenantId: string;
|
|
29
46
|
/** The business being paid, as the provider knows it. */
|
|
30
47
|
readonly account: string;
|
|
31
48
|
/**
|
|
@@ -87,6 +104,8 @@ export interface ChargeResult {
|
|
|
87
104
|
|
|
88
105
|
/** A card being stored for later, rather than charged now. */
|
|
89
106
|
export interface SaveCardRequest {
|
|
107
|
+
/** Whose card this is. See `ChargeRequest.tenantId`. */
|
|
108
|
+
readonly tenantId: string;
|
|
90
109
|
/** An existing customer to attach it to, where the person already has one. */
|
|
91
110
|
readonly customer?: string;
|
|
92
111
|
/** What it is being saved for, carried through for matching a webhook back. */
|
|
@@ -124,6 +143,14 @@ export interface RefundRequest {
|
|
|
124
143
|
export interface ProviderEvent {
|
|
125
144
|
readonly kind: 'payment' | 'account' | 'other';
|
|
126
145
|
readonly externalId: string;
|
|
146
|
+
/**
|
|
147
|
+
* Whose it is, read back from the metadata we set on the way out.
|
|
148
|
+
*
|
|
149
|
+
* Absent means the event is about something this deployment did not create —
|
|
150
|
+
* another environment sharing the provider account — and the right response
|
|
151
|
+
* is to ignore it rather than to go looking.
|
|
152
|
+
*/
|
|
153
|
+
readonly tenantId?: string;
|
|
127
154
|
readonly state?: 'authorized' | 'captured' | 'failed' | 'refunded';
|
|
128
155
|
readonly accountStatus?: ProviderAccount;
|
|
129
156
|
readonly instrument?: string;
|
|
@@ -136,8 +163,18 @@ export interface PaymentProvider {
|
|
|
136
163
|
/** Starts or resumes onboarding, and says where to send the business. */
|
|
137
164
|
onboard(tenantId: string, returnUrl: string, refreshUrl: string): Promise<OnboardingLink>;
|
|
138
165
|
|
|
139
|
-
/**
|
|
140
|
-
|
|
166
|
+
/**
|
|
167
|
+
* Creates the account if there is none, and reports where it stands.
|
|
168
|
+
*
|
|
169
|
+
* `tenantId` is written into the provider's metadata when an account is
|
|
170
|
+
* created, so that an account webhook months later can say whose it is.
|
|
171
|
+
*/
|
|
172
|
+
account(
|
|
173
|
+
externalId: string | null,
|
|
174
|
+
country: string,
|
|
175
|
+
email?: string,
|
|
176
|
+
tenantId?: string,
|
|
177
|
+
): Promise<ProviderAccount>;
|
|
141
178
|
|
|
142
179
|
charge(request: ChargeRequest): Promise<ChargeResult>;
|
|
143
180
|
|
package/src/providers/stripe.ts
CHANGED
|
@@ -46,6 +46,7 @@ export class StripeConnect implements PaymentProvider {
|
|
|
46
46
|
externalId: string | null,
|
|
47
47
|
country: string,
|
|
48
48
|
email?: string,
|
|
49
|
+
tenantId?: string,
|
|
49
50
|
): Promise<ProviderAccount> {
|
|
50
51
|
const account = externalId
|
|
51
52
|
? await this.stripe.accounts.retrieve(externalId)
|
|
@@ -53,6 +54,9 @@ export class StripeConnect implements PaymentProvider {
|
|
|
53
54
|
type: 'express',
|
|
54
55
|
country,
|
|
55
56
|
...(email ? { email } : {}),
|
|
57
|
+
// Written once, at creation, so an account event months later can say
|
|
58
|
+
// whose it is without a lookup that row-level security would refuse.
|
|
59
|
+
...(tenantId ? { metadata: { tenant: tenantId } } : {}),
|
|
56
60
|
capabilities: { card_payments: { requested: true }, transfers: { requested: true } },
|
|
57
61
|
});
|
|
58
62
|
|
|
@@ -116,7 +120,15 @@ export class StripeConnect implements PaymentProvider {
|
|
|
116
120
|
: {}),
|
|
117
121
|
// Carried through so a webhook can be matched back to what it paid
|
|
118
122
|
// for without a lookup table of our own.
|
|
119
|
-
|
|
123
|
+
/*
|
|
124
|
+
* The tenant as well as the subject.
|
|
125
|
+
*
|
|
126
|
+
* A webhook names the provider's identifiers and nothing of ours, and
|
|
127
|
+
* the table that could translate one into the other is under
|
|
128
|
+
* row-level security — so a lookup with no tenant returns nothing at
|
|
129
|
+
* all. This is what makes an event attributable.
|
|
130
|
+
*/
|
|
131
|
+
metadata: { subject: request.subject, tenant: request.tenantId },
|
|
120
132
|
/*
|
|
121
133
|
* Only where a card still has to be entered. Offering a redirect
|
|
122
134
|
* method to a charge that is already confirmed against a stored card
|
|
@@ -165,7 +177,7 @@ export class StripeConnect implements PaymentProvider {
|
|
|
165
177
|
request.customer ??
|
|
166
178
|
(
|
|
167
179
|
await this.stripe.customers.create(
|
|
168
|
-
{ metadata: { subject: request.subject } },
|
|
180
|
+
{ metadata: { subject: request.subject, tenant: request.tenantId } },
|
|
169
181
|
{ idempotencyKey: `customer-${request.reference}` },
|
|
170
182
|
)
|
|
171
183
|
).id;
|
|
@@ -175,7 +187,7 @@ export class StripeConnect implements PaymentProvider {
|
|
|
175
187
|
customer,
|
|
176
188
|
usage: 'off_session',
|
|
177
189
|
payment_method_types: ['card'],
|
|
178
|
-
metadata: { subject: request.subject },
|
|
190
|
+
metadata: { subject: request.subject, tenant: request.tenantId },
|
|
179
191
|
},
|
|
180
192
|
{ idempotencyKey: request.reference },
|
|
181
193
|
);
|
|
@@ -311,6 +323,7 @@ function interpretEvent(event: Stripe.Event): ProviderEvent {
|
|
|
311
323
|
const result = interpretIntent(intent);
|
|
312
324
|
|
|
313
325
|
return {
|
|
326
|
+
...(intent.metadata?.tenant ? { tenantId: intent.metadata.tenant } : {}),
|
|
314
327
|
kind: 'payment',
|
|
315
328
|
externalId: intent.id,
|
|
316
329
|
state:
|
|
@@ -335,7 +348,13 @@ function interpretEvent(event: Stripe.Event): ProviderEvent {
|
|
|
335
348
|
|
|
336
349
|
case 'account.updated': {
|
|
337
350
|
const account = event.data.object as Stripe.Account;
|
|
338
|
-
|
|
351
|
+
|
|
352
|
+
return {
|
|
353
|
+
kind: 'account',
|
|
354
|
+
externalId: account.id,
|
|
355
|
+
...(account.metadata?.tenant ? { tenantId: account.metadata.tenant } : {}),
|
|
356
|
+
accountStatus: interpretAccount(account),
|
|
357
|
+
};
|
|
339
358
|
}
|
|
340
359
|
|
|
341
360
|
default:
|