@managemint-solutions/sdk 0.9.0 → 0.17.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/dist/audit/index.d.ts +15 -0
- package/dist/audit/index.js +37 -14
- package/dist/audit/index.js.map +1 -1
- package/dist/billing/dto.d.ts +33 -0
- package/dist/billing/dto.js +71 -0
- package/dist/billing/dto.js.map +1 -0
- package/dist/billing/index.d.ts +45 -0
- package/dist/billing/index.js +128 -0
- package/dist/billing/index.js.map +1 -0
- package/dist/client.d.ts +10 -0
- package/dist/client.js +15 -0
- package/dist/client.js.map +1 -1
- package/dist/index.d.ts +7 -0
- package/dist/index.js +7 -0
- package/dist/index.js.map +1 -1
- package/dist/nest/index.d.ts +11 -0
- package/dist/nest/index.js +17 -1
- package/dist/nest/index.js.map +1 -1
- package/dist/notifications/dto.d.ts +10 -0
- package/dist/notifications/dto.js +63 -0
- package/dist/notifications/dto.js.map +1 -0
- package/dist/notifications/index.d.ts +139 -0
- package/dist/notifications/index.js +354 -0
- package/dist/notifications/index.js.map +1 -0
- package/dist/organizations/dto.d.ts +62 -0
- package/dist/organizations/dto.js +445 -0
- package/dist/organizations/dto.js.map +1 -0
- package/dist/organizations/index.d.ts +72 -0
- package/dist/organizations/index.js +221 -0
- package/dist/organizations/index.js.map +1 -0
- package/dist/permissions/dto.d.ts +27 -0
- package/dist/permissions/dto.js +215 -0
- package/dist/permissions/dto.js.map +1 -0
- package/dist/permissions/index.d.ts +36 -0
- package/dist/permissions/index.js +110 -0
- package/dist/permissions/index.js.map +1 -0
- package/dist/service-client/index.d.ts +72 -0
- package/dist/service-client/index.js +119 -0
- package/dist/service-client/index.js.map +1 -0
- package/dist/users/dto.d.ts +48 -0
- package/dist/users/dto.js +267 -0
- package/dist/users/dto.js.map +1 -0
- package/dist/users/index.d.ts +38 -0
- package/dist/users/index.js +144 -0
- package/dist/users/index.js.map +1 -0
- package/dist/webhook-events/index.d.ts +65 -0
- package/dist/webhook-events/index.js +109 -0
- package/dist/webhook-events/index.js.map +1 -0
- package/package.json +2 -2
package/dist/audit/index.d.ts
CHANGED
|
@@ -73,10 +73,25 @@ export type AuditedTableOptions = {
|
|
|
73
73
|
};
|
|
74
74
|
/** The payload to write, or a function of the pre-read row (`togglePin`'s `!before.pinned`). */
|
|
75
75
|
type AuditedPayload = AuditRow | ((before: AuditRow) => AuditRow);
|
|
76
|
+
/** The keyed update every audited write builds, before any caller-supplied guard. */
|
|
77
|
+
declare const buildUpdate: (supabase: SupabaseJsClient, table: string, id: string, payload: AuditRow, organizationId: string | null) => import("@supabase/postgrest-js").PostgrestFilterBuilder<any, any, any, null, string, unknown, "PATCH", false>;
|
|
78
|
+
/**
|
|
79
|
+
* Narrows an audited update to the rows it may still touch — the compare-and-set half of a
|
|
80
|
+
* guarded write, e.g. `(query) => query.eq('billing_status', expectedFrom)`.
|
|
81
|
+
*/
|
|
82
|
+
export type AuditGuard = (builder: ReturnType<typeof buildUpdate>) => ReturnType<typeof buildUpdate>;
|
|
76
83
|
export type AuditedTable = {
|
|
77
84
|
insert(payload: AuditRow): Promise<AuditRow>;
|
|
78
85
|
insertMany(payloads: AuditRow[]): Promise<AuditRow[]>;
|
|
79
86
|
update(id: string, payload: AuditedPayload): Promise<AuditRow>;
|
|
87
|
+
/**
|
|
88
|
+
* An update that only lands while `guard` still holds — the filter *is* the concurrency
|
|
89
|
+
* control, not just a key. Resolves to `null` when the guard matched nothing (someone else
|
|
90
|
+
* moved the row first): nothing was written, so nothing is audited. Use it wherever losing
|
|
91
|
+
* the race must be a no-op rather than an overwrite — billing status moves, the
|
|
92
|
+
* send-exactly-once gates, first-occurrence-only delivery rollups.
|
|
93
|
+
*/
|
|
94
|
+
updateWhere(id: string, guard: AuditGuard, payload: AuditedPayload): Promise<AuditRow | null>;
|
|
80
95
|
transition(id: string, action: AuditTrailAction, payload: AuditedPayload): Promise<AuditRow>;
|
|
81
96
|
/** Hard delete. Returns the row as it was, so the caller can still act on it. */
|
|
82
97
|
remove(id: string): Promise<AuditRow>;
|
package/dist/audit/index.js
CHANGED
|
@@ -177,6 +177,14 @@ class AuditResource {
|
|
|
177
177
|
}
|
|
178
178
|
}
|
|
179
179
|
exports.AuditResource = AuditResource;
|
|
180
|
+
/** The keyed update every audited write builds, before any caller-supplied guard. */
|
|
181
|
+
const buildUpdate = (supabase, table, id, payload, organizationId) => {
|
|
182
|
+
// `eq` returns `this`, so the org filter can be reassigned onto the builder without a cast.
|
|
183
|
+
let query = supabase.from(table).update(payload).eq('mms_id', id);
|
|
184
|
+
if (organizationId !== null)
|
|
185
|
+
query = query.eq('organization_id', organizationId);
|
|
186
|
+
return query;
|
|
187
|
+
};
|
|
180
188
|
/**
|
|
181
189
|
* The audited write helper every resource writes through: it does the pre-read, the write, the
|
|
182
190
|
* diff and the `audit_logs` insert itself, so no feature carries audit code. The write fails
|
|
@@ -200,25 +208,37 @@ const auditedTable = (supabase, actor, audit, options) => {
|
|
|
200
208
|
throw (0, errors_1.mapPostgrestError)(error);
|
|
201
209
|
return data;
|
|
202
210
|
};
|
|
211
|
+
const organizationFilter = scoped ? actor.organization_id : null;
|
|
212
|
+
const updateOf = (id, before, payload) => buildUpdate(supabase, options.table, id, typeof payload === 'function' ? payload(before) : payload, organizationFilter);
|
|
213
|
+
const recordWrite = (id, action, before, after) => audit.record({
|
|
214
|
+
action,
|
|
215
|
+
entityType: options.entityType,
|
|
216
|
+
entityId: id,
|
|
217
|
+
changes: (0, exports.diffChanges)(before, after),
|
|
218
|
+
...relatedOf(before),
|
|
219
|
+
});
|
|
203
220
|
const write = async (id, action, payload) => {
|
|
204
221
|
const before = await read(id);
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
222
|
+
const { data, error } = await updateOf(id, before, payload).select('*').single();
|
|
223
|
+
if (error)
|
|
224
|
+
throw (0, errors_1.mapPostgrestError)(error);
|
|
225
|
+
const after = data;
|
|
226
|
+
await recordWrite(id, action, before, after);
|
|
227
|
+
return after;
|
|
228
|
+
};
|
|
229
|
+
const writeWhere = async (id, guard, payload) => {
|
|
230
|
+
const before = await read(id);
|
|
231
|
+
// `maybeSingle`, not `single`: matching nothing is the guard doing its job, not an error.
|
|
232
|
+
const { data, error } = await guard(updateOf(id, before, payload))
|
|
233
|
+
.select('*')
|
|
234
|
+
.maybeSingle();
|
|
212
235
|
if (error)
|
|
213
236
|
throw (0, errors_1.mapPostgrestError)(error);
|
|
237
|
+
// The guard lost the race — the row is untouched, so there is nothing to audit.
|
|
238
|
+
if (!data)
|
|
239
|
+
return null;
|
|
214
240
|
const after = data;
|
|
215
|
-
await
|
|
216
|
-
action,
|
|
217
|
-
entityType: options.entityType,
|
|
218
|
-
entityId: id,
|
|
219
|
-
changes: (0, exports.diffChanges)(before, after),
|
|
220
|
-
...relatedOf(before),
|
|
221
|
-
});
|
|
241
|
+
await recordWrite(id, enum_1.AuditTrailAction.UPDATE, before, after);
|
|
222
242
|
return after;
|
|
223
243
|
};
|
|
224
244
|
return {
|
|
@@ -259,6 +279,9 @@ const auditedTable = (supabase, actor, audit, options) => {
|
|
|
259
279
|
update(id, payload) {
|
|
260
280
|
return write(id, enum_1.AuditTrailAction.UPDATE, payload);
|
|
261
281
|
},
|
|
282
|
+
updateWhere(id, guard, payload) {
|
|
283
|
+
return writeWhere(id, guard, payload);
|
|
284
|
+
},
|
|
262
285
|
transition(id, action, payload) {
|
|
263
286
|
return write(id, action, payload);
|
|
264
287
|
},
|
package/dist/audit/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/audit/index.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/audit/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The client supplies the idempotency key for every money operation
|
|
3
|
+
* (docs/billing/00-overview.md principle 1). A uuid v4 keeps it unique per
|
|
4
|
+
* (organization, key) without the API having to hand one out first.
|
|
5
|
+
*/
|
|
6
|
+
export declare class InitialPaymentDto {
|
|
7
|
+
readonly idempotency_key: string;
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* Cancellation moves no money, but it is a subscription-level operation and
|
|
11
|
+
* carries a key like every other one, so a client retry after a dropped
|
|
12
|
+
* connection replays the original answer (docs/billing/09-cancellation.md).
|
|
13
|
+
*/
|
|
14
|
+
export declare class CancelSubscriptionDto {
|
|
15
|
+
readonly idempotency_key: string;
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* A reinstatement may or may not move money - the caller cannot know which
|
|
19
|
+
* branch it will get - so the key is always required
|
|
20
|
+
* (docs/billing/10-reinstatement.md).
|
|
21
|
+
*/
|
|
22
|
+
export declare class ReinstateSubscriptionDto {
|
|
23
|
+
readonly idempotency_key: string;
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* A purchase names the module by *id*, which is checked against the active
|
|
27
|
+
* pricebook - never a module key from a hardcoded enum
|
|
28
|
+
* (docs/billing/07-modules-and-pricebooks.md section 2).
|
|
29
|
+
*/
|
|
30
|
+
export declare class PurchaseModuleDto {
|
|
31
|
+
readonly module_id: string;
|
|
32
|
+
readonly idempotency_key: string;
|
|
33
|
+
}
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
3
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
5
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
6
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
|
+
};
|
|
8
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
9
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
10
|
+
};
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
exports.PurchaseModuleDto = exports.ReinstateSubscriptionDto = exports.CancelSubscriptionDto = exports.InitialPaymentDto = void 0;
|
|
13
|
+
const class_validator_1 = require("class-validator");
|
|
14
|
+
/**
|
|
15
|
+
* The client supplies the idempotency key for every money operation
|
|
16
|
+
* (docs/billing/00-overview.md principle 1). A uuid v4 keeps it unique per
|
|
17
|
+
* (organization, key) without the API having to hand one out first.
|
|
18
|
+
*/
|
|
19
|
+
class InitialPaymentDto {
|
|
20
|
+
idempotency_key;
|
|
21
|
+
}
|
|
22
|
+
exports.InitialPaymentDto = InitialPaymentDto;
|
|
23
|
+
__decorate([
|
|
24
|
+
(0, class_validator_1.IsUUID)('4', { message: 'An idempotency key is required and must be a v4 uuid' }),
|
|
25
|
+
__metadata("design:type", String)
|
|
26
|
+
], InitialPaymentDto.prototype, "idempotency_key", void 0);
|
|
27
|
+
/**
|
|
28
|
+
* Cancellation moves no money, but it is a subscription-level operation and
|
|
29
|
+
* carries a key like every other one, so a client retry after a dropped
|
|
30
|
+
* connection replays the original answer (docs/billing/09-cancellation.md).
|
|
31
|
+
*/
|
|
32
|
+
class CancelSubscriptionDto {
|
|
33
|
+
idempotency_key;
|
|
34
|
+
}
|
|
35
|
+
exports.CancelSubscriptionDto = CancelSubscriptionDto;
|
|
36
|
+
__decorate([
|
|
37
|
+
(0, class_validator_1.IsUUID)('4', { message: 'An idempotency key is required and must be a v4 uuid' }),
|
|
38
|
+
__metadata("design:type", String)
|
|
39
|
+
], CancelSubscriptionDto.prototype, "idempotency_key", void 0);
|
|
40
|
+
/**
|
|
41
|
+
* A reinstatement may or may not move money - the caller cannot know which
|
|
42
|
+
* branch it will get - so the key is always required
|
|
43
|
+
* (docs/billing/10-reinstatement.md).
|
|
44
|
+
*/
|
|
45
|
+
class ReinstateSubscriptionDto {
|
|
46
|
+
idempotency_key;
|
|
47
|
+
}
|
|
48
|
+
exports.ReinstateSubscriptionDto = ReinstateSubscriptionDto;
|
|
49
|
+
__decorate([
|
|
50
|
+
(0, class_validator_1.IsUUID)('4', { message: 'An idempotency key is required and must be a v4 uuid' }),
|
|
51
|
+
__metadata("design:type", String)
|
|
52
|
+
], ReinstateSubscriptionDto.prototype, "idempotency_key", void 0);
|
|
53
|
+
/**
|
|
54
|
+
* A purchase names the module by *id*, which is checked against the active
|
|
55
|
+
* pricebook - never a module key from a hardcoded enum
|
|
56
|
+
* (docs/billing/07-modules-and-pricebooks.md section 2).
|
|
57
|
+
*/
|
|
58
|
+
class PurchaseModuleDto {
|
|
59
|
+
module_id;
|
|
60
|
+
idempotency_key;
|
|
61
|
+
}
|
|
62
|
+
exports.PurchaseModuleDto = PurchaseModuleDto;
|
|
63
|
+
__decorate([
|
|
64
|
+
(0, class_validator_1.IsUUID)('4', { message: 'A module id is required and must be a v4 uuid' }),
|
|
65
|
+
__metadata("design:type", String)
|
|
66
|
+
], PurchaseModuleDto.prototype, "module_id", void 0);
|
|
67
|
+
__decorate([
|
|
68
|
+
(0, class_validator_1.IsUUID)('4', { message: 'An idempotency key is required and must be a v4 uuid' }),
|
|
69
|
+
__metadata("design:type", String)
|
|
70
|
+
], PurchaseModuleDto.prototype, "idempotency_key", void 0);
|
|
71
|
+
//# sourceMappingURL=dto.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dto.js","sourceRoot":"","sources":["../../src/billing/dto.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,qDAAyC;AAEzC;;;;GAIG;AACH,MAAa,iBAAiB;IAEnB,eAAe,CAAU;CACnC;AAHD,8CAGC;AADU;IADR,IAAA,wBAAM,EAAC,GAAG,EAAE,EAAE,OAAO,EAAE,sDAAsD,EAAE,CAAC;;0DAC/C;AAGpC;;;;GAIG;AACH,MAAa,qBAAqB;IAEvB,eAAe,CAAU;CACnC;AAHD,sDAGC;AADU;IADR,IAAA,wBAAM,EAAC,GAAG,EAAE,EAAE,OAAO,EAAE,sDAAsD,EAAE,CAAC;;8DAC/C;AAGpC;;;;GAIG;AACH,MAAa,wBAAwB;IAE1B,eAAe,CAAU;CACnC;AAHD,4DAGC;AADU;IADR,IAAA,wBAAM,EAAC,GAAG,EAAE,EAAE,OAAO,EAAE,sDAAsD,EAAE,CAAC;;iEAC/C;AAGpC;;;;GAIG;AACH,MAAa,iBAAiB;IAEnB,SAAS,CAAU;IAGnB,eAAe,CAAU;CACnC;AAND,8CAMC;AAJU;IADR,IAAA,wBAAM,EAAC,GAAG,EAAE,EAAE,OAAO,EAAE,+CAA+C,EAAE,CAAC;;oDAC9C;AAGnB;IADR,IAAA,wBAAM,EAAC,GAAG,EAAE,EAAE,OAAO,EAAE,sDAAsD,EAAE,CAAC;;0DAC/C"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import type { BillingTransactionRow, CreateBillingEventDto } from '@managemint-solutions/entities/billing';
|
|
2
|
+
import { type AuditActor, type AuditResource, type AuditRow } from '../audit';
|
|
3
|
+
import type { TypedSupabaseClient } from '../client';
|
|
4
|
+
export * from './dto';
|
|
5
|
+
/**
|
|
6
|
+
* The readable half of the ledger. `billing_transactions` and `billing_events` are org-scoped
|
|
7
|
+
* for READ, and the catalog is readable by `anon`, so all of this runs perfectly well on the
|
|
8
|
+
* caller's own client — and should, so that RLS is what scopes it rather than a filter the api
|
|
9
|
+
* remembered to add.
|
|
10
|
+
*/
|
|
11
|
+
export declare class BillingReadsResource {
|
|
12
|
+
protected readonly supabase: TypedSupabaseClient;
|
|
13
|
+
protected readonly actor: AuditActor;
|
|
14
|
+
constructor(supabase: TypedSupabaseClient, actor: AuditActor);
|
|
15
|
+
getTransaction(transactionId: string): Promise<BillingTransactionRow | null>;
|
|
16
|
+
/** The one open transaction, if the organization has one. */
|
|
17
|
+
openTransaction(openStatuses: string[]): Promise<BillingTransactionRow | null>;
|
|
18
|
+
/** The replay lookup: the same key must never raise a second charge. */
|
|
19
|
+
transactionByIdempotencyKey(idempotencyKey: string): Promise<BillingTransactionRow | null>;
|
|
20
|
+
/** Whether a catalog module is still on sale. The catalog is public, not tenant-scoped. */
|
|
21
|
+
isModuleActive(moduleId: string): Promise<boolean>;
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* The ledger writes, on the service client only. Every write policy on `billing_transactions`
|
|
25
|
+
* and `billing_events` is `false` for `authenticated` — the ledger is written by the billing
|
|
26
|
+
* service and by webhooks, never by a caller — so these are deliberately not reachable from
|
|
27
|
+
* `SupabaseClient`.
|
|
28
|
+
*/
|
|
29
|
+
export declare class BillingResource extends BillingReadsResource {
|
|
30
|
+
private readonly transactions;
|
|
31
|
+
constructor(supabase: TypedSupabaseClient, actor: AuditActor, audit: AuditResource);
|
|
32
|
+
createTransaction(payload: AuditRow): Promise<BillingTransactionRow>;
|
|
33
|
+
updateTransaction(transactionId: string, patch: AuditRow): Promise<AuditRow>;
|
|
34
|
+
/**
|
|
35
|
+
* Claims a transaction for processing, but only while it is not already paid. This is the
|
|
36
|
+
* send-exactly-once gate on the webhook path: a redelivered `charge.success` must not settle
|
|
37
|
+
* the same row twice. Resolves to null when the guard finds it already settled.
|
|
38
|
+
*/
|
|
39
|
+
claimTransactionForProcessing(transactionId: string, patch: AuditRow): Promise<AuditRow | null>;
|
|
40
|
+
/**
|
|
41
|
+
* Appends to `billing_events`. Deliberately unaudited: the table *is* an append-only
|
|
42
|
+
* narrative of the billing state machine, so an audit row per event would log the log.
|
|
43
|
+
*/
|
|
44
|
+
recordEvent(event: CreateBillingEventDto): Promise<void>;
|
|
45
|
+
}
|
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
+
};
|
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
exports.BillingResource = exports.BillingReadsResource = void 0;
|
|
18
|
+
const enum_1 = require("@managemint-solutions/entities/audit-trail/enum");
|
|
19
|
+
const enum_2 = require("@managemint-solutions/entities/billing/enum");
|
|
20
|
+
const audit_1 = require("../audit");
|
|
21
|
+
const errors_1 = require("../errors");
|
|
22
|
+
__exportStar(require("./dto"), exports);
|
|
23
|
+
const BILLING_TRANSACTIONS_TABLE = {
|
|
24
|
+
table: 'billing_transactions',
|
|
25
|
+
entityType: enum_1.AuditTrailEntityType.BILLING_TRANSACTIONS,
|
|
26
|
+
};
|
|
27
|
+
/**
|
|
28
|
+
* The readable half of the ledger. `billing_transactions` and `billing_events` are org-scoped
|
|
29
|
+
* for READ, and the catalog is readable by `anon`, so all of this runs perfectly well on the
|
|
30
|
+
* caller's own client — and should, so that RLS is what scopes it rather than a filter the api
|
|
31
|
+
* remembered to add.
|
|
32
|
+
*/
|
|
33
|
+
class BillingReadsResource {
|
|
34
|
+
supabase;
|
|
35
|
+
actor;
|
|
36
|
+
constructor(supabase, actor) {
|
|
37
|
+
this.supabase = supabase;
|
|
38
|
+
this.actor = actor;
|
|
39
|
+
}
|
|
40
|
+
async getTransaction(transactionId) {
|
|
41
|
+
const { data, error } = await this.supabase
|
|
42
|
+
.from('billing_transactions')
|
|
43
|
+
.select('*')
|
|
44
|
+
.eq('mms_id', transactionId)
|
|
45
|
+
.maybeSingle();
|
|
46
|
+
if (error)
|
|
47
|
+
throw (0, errors_1.mapPostgrestError)(error);
|
|
48
|
+
return (data ?? null);
|
|
49
|
+
}
|
|
50
|
+
/** The one open transaction, if the organization has one. */
|
|
51
|
+
async openTransaction(openStatuses) {
|
|
52
|
+
const { data, error } = await this.supabase
|
|
53
|
+
.from('billing_transactions')
|
|
54
|
+
.select('*')
|
|
55
|
+
.eq('organization_id', this.actor.organization_id)
|
|
56
|
+
.in('transaction_status', openStatuses)
|
|
57
|
+
.maybeSingle();
|
|
58
|
+
if (error)
|
|
59
|
+
throw (0, errors_1.mapPostgrestError)(error);
|
|
60
|
+
return (data ?? null);
|
|
61
|
+
}
|
|
62
|
+
/** The replay lookup: the same key must never raise a second charge. */
|
|
63
|
+
async transactionByIdempotencyKey(idempotencyKey) {
|
|
64
|
+
const { data, error } = await this.supabase
|
|
65
|
+
.from('billing_transactions')
|
|
66
|
+
.select('*')
|
|
67
|
+
.eq('organization_id', this.actor.organization_id)
|
|
68
|
+
.eq('idempotency_key', idempotencyKey)
|
|
69
|
+
.maybeSingle();
|
|
70
|
+
if (error)
|
|
71
|
+
throw (0, errors_1.mapPostgrestError)(error);
|
|
72
|
+
return (data ?? null);
|
|
73
|
+
}
|
|
74
|
+
/** Whether a catalog module is still on sale. The catalog is public, not tenant-scoped. */
|
|
75
|
+
async isModuleActive(moduleId) {
|
|
76
|
+
const { data, error } = await this.supabase
|
|
77
|
+
.from('billing_modules')
|
|
78
|
+
.select('active')
|
|
79
|
+
.eq('mms_id', moduleId)
|
|
80
|
+
.maybeSingle();
|
|
81
|
+
if (error)
|
|
82
|
+
throw (0, errors_1.mapPostgrestError)(error);
|
|
83
|
+
return data?.active === true;
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
exports.BillingReadsResource = BillingReadsResource;
|
|
87
|
+
/**
|
|
88
|
+
* The ledger writes, on the service client only. Every write policy on `billing_transactions`
|
|
89
|
+
* and `billing_events` is `false` for `authenticated` — the ledger is written by the billing
|
|
90
|
+
* service and by webhooks, never by a caller — so these are deliberately not reachable from
|
|
91
|
+
* `SupabaseClient`.
|
|
92
|
+
*/
|
|
93
|
+
class BillingResource extends BillingReadsResource {
|
|
94
|
+
transactions;
|
|
95
|
+
constructor(supabase, actor, audit) {
|
|
96
|
+
super(supabase, actor);
|
|
97
|
+
this.transactions = (0, audit_1.auditedTable)(supabase, actor, audit, BILLING_TRANSACTIONS_TABLE);
|
|
98
|
+
}
|
|
99
|
+
async createTransaction(payload) {
|
|
100
|
+
const row = await this.transactions.insert(payload);
|
|
101
|
+
return row;
|
|
102
|
+
}
|
|
103
|
+
async updateTransaction(transactionId, patch) {
|
|
104
|
+
return this.transactions.update(transactionId, {
|
|
105
|
+
...patch,
|
|
106
|
+
updated_at: new Date().toISOString(),
|
|
107
|
+
});
|
|
108
|
+
}
|
|
109
|
+
/**
|
|
110
|
+
* Claims a transaction for processing, but only while it is not already paid. This is the
|
|
111
|
+
* send-exactly-once gate on the webhook path: a redelivered `charge.success` must not settle
|
|
112
|
+
* the same row twice. Resolves to null when the guard finds it already settled.
|
|
113
|
+
*/
|
|
114
|
+
async claimTransactionForProcessing(transactionId, patch) {
|
|
115
|
+
return this.transactions.updateWhere(transactionId, (query) => query.neq('transaction_status', enum_2.BillingTransactionStatus.PAID), { ...patch, updated_at: new Date().toISOString() });
|
|
116
|
+
}
|
|
117
|
+
/**
|
|
118
|
+
* Appends to `billing_events`. Deliberately unaudited: the table *is* an append-only
|
|
119
|
+
* narrative of the billing state machine, so an audit row per event would log the log.
|
|
120
|
+
*/
|
|
121
|
+
async recordEvent(event) {
|
|
122
|
+
const { error } = await this.supabase.from('billing_events').insert(event);
|
|
123
|
+
if (error)
|
|
124
|
+
throw (0, errors_1.mapPostgrestError)(error);
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
exports.BillingResource = BillingResource;
|
|
128
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/billing/index.ts"],"names":[],"mappings":"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"}
|
package/dist/client.d.ts
CHANGED
|
@@ -4,10 +4,15 @@ import { AuditResource, type AuditErrorHandler } from './audit';
|
|
|
4
4
|
import { AdditionalDetailsResource } from './additional-details';
|
|
5
5
|
import { ClientsResource } from './clients';
|
|
6
6
|
import { NotesResource } from './notes';
|
|
7
|
+
import { NotificationsResource } from './notifications';
|
|
8
|
+
import { BillingReadsResource } from './billing';
|
|
9
|
+
import { OrganizationsResource } from './organizations';
|
|
10
|
+
import { PermissionsResource } from './permissions';
|
|
7
11
|
import { ProjectsResource } from './projects';
|
|
8
12
|
import { StatusesResource } from './statuses';
|
|
9
13
|
import { SupportingFilesResource } from './supporting-files';
|
|
10
14
|
import { TasksResource } from './tasks';
|
|
15
|
+
import { UsersResource } from './users';
|
|
11
16
|
export type TypedSupabaseClient = SupabaseJsClient;
|
|
12
17
|
export type SupabaseClientConfig = {
|
|
13
18
|
url: string;
|
|
@@ -23,6 +28,11 @@ export declare class SupabaseClient {
|
|
|
23
28
|
readonly statuses: StatusesResource;
|
|
24
29
|
readonly additionalDetails: AdditionalDetailsResource;
|
|
25
30
|
readonly notes: NotesResource;
|
|
31
|
+
readonly notifications: NotificationsResource;
|
|
32
|
+
readonly billing: BillingReadsResource;
|
|
33
|
+
readonly organizations: OrganizationsResource;
|
|
34
|
+
readonly permissions: PermissionsResource;
|
|
35
|
+
readonly users: UsersResource;
|
|
26
36
|
readonly supportingFiles: SupportingFilesResource;
|
|
27
37
|
readonly clients: ClientsResource;
|
|
28
38
|
readonly projects: ProjectsResource;
|
package/dist/client.js
CHANGED
|
@@ -7,10 +7,15 @@ const audit_1 = require("./audit");
|
|
|
7
7
|
const additional_details_1 = require("./additional-details");
|
|
8
8
|
const clients_1 = require("./clients");
|
|
9
9
|
const notes_1 = require("./notes");
|
|
10
|
+
const notifications_1 = require("./notifications");
|
|
11
|
+
const billing_1 = require("./billing");
|
|
12
|
+
const organizations_1 = require("./organizations");
|
|
13
|
+
const permissions_1 = require("./permissions");
|
|
10
14
|
const projects_1 = require("./projects");
|
|
11
15
|
const statuses_1 = require("./statuses");
|
|
12
16
|
const supporting_files_1 = require("./supporting-files");
|
|
13
17
|
const tasks_1 = require("./tasks");
|
|
18
|
+
const users_1 = require("./users");
|
|
14
19
|
class SupabaseClient {
|
|
15
20
|
supabase; // escape hatch for not-yet-migrated queries
|
|
16
21
|
auth;
|
|
@@ -18,6 +23,11 @@ class SupabaseClient {
|
|
|
18
23
|
statuses;
|
|
19
24
|
additionalDetails;
|
|
20
25
|
notes;
|
|
26
|
+
notifications;
|
|
27
|
+
billing;
|
|
28
|
+
organizations;
|
|
29
|
+
permissions;
|
|
30
|
+
users;
|
|
21
31
|
supportingFiles;
|
|
22
32
|
clients;
|
|
23
33
|
projects;
|
|
@@ -33,6 +43,11 @@ class SupabaseClient {
|
|
|
33
43
|
this.statuses = new statuses_1.StatusesResource(this.supabase, this.auth, this.audit);
|
|
34
44
|
this.additionalDetails = new additional_details_1.AdditionalDetailsResource(this.supabase, this.auth, this.audit);
|
|
35
45
|
this.notes = new notes_1.NotesResource(this.supabase, this.auth, this.audit);
|
|
46
|
+
this.notifications = new notifications_1.NotificationsResource(this.supabase, this.auth, this.audit);
|
|
47
|
+
this.billing = new billing_1.BillingReadsResource(this.supabase, this.auth);
|
|
48
|
+
this.organizations = new organizations_1.OrganizationsResource(this.supabase, this.auth, this.audit);
|
|
49
|
+
this.permissions = new permissions_1.PermissionsResource(this.supabase, this.auth, this.audit);
|
|
50
|
+
this.users = new users_1.UsersResource(this.supabase, this.auth, this.audit);
|
|
36
51
|
this.supportingFiles = new supporting_files_1.SupportingFilesResource(this.supabase, this.auth, this.audit);
|
|
37
52
|
this.clients = new clients_1.ClientsResource(this.supabase, this.auth, this.audit);
|
|
38
53
|
this.projects = new projects_1.ProjectsResource(this.supabase, this.auth, this.audit);
|
package/dist/client.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":";;;AAAA,uDAA8F;AAC9F,iCAA6D;AAC7D,mCAAgE;AAChE,6DAAiE;AACjE,uCAA4C;AAC5C,mCAAwC;AACxC,yCAA8C;AAC9C,yCAA8C;AAC9C,yDAA6D;AAC7D,mCAAwC;AAexC,MAAa,cAAc;IAChB,QAAQ,CAAsB,CAAC,4CAA4C;IAC3E,IAAI,CAAc;IAClB,KAAK,CAAgB;IACrB,QAAQ,CAAmB;IAC3B,iBAAiB,CAA4B;IAC7C,KAAK,CAAgB;IACrB,eAAe,CAA0B;IACzC,OAAO,CAAkB;IACzB,QAAQ,CAAmB;IAC3B,KAAK,CAAgB;IAE9B,YAAY,MAA4B;QACtC,IAAI,CAAC,IAAI,GAAG,IAAA,wBAAiB,EAAC,MAAM,CAAC,WAAW,CAAC,CAAC;QAClD,IAAI,CAAC,QAAQ,GAAG,IAAA,0BAAY,EAAC,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,GAAG,EAAE;YACnD,MAAM,EAAE,EAAE,OAAO,EAAE,EAAE,aAAa,EAAE,UAAU,MAAM,CAAC,WAAW,EAAE,EAAE,EAAE;YACtE,IAAI,EAAE,EAAE,cAAc,EAAE,KAAK,EAAE,gBAAgB,EAAE,KAAK,EAAE;SACzD,CAAC,CAAC;QACH,qEAAqE;QACrE,IAAI,CAAC,KAAK,GAAG,IAAI,qBAAa,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC,YAAY,CAAC,CAAC;QAC9E,IAAI,CAAC,QAAQ,GAAG,IAAI,2BAAgB,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;QAC3E,IAAI,CAAC,iBAAiB,GAAG,IAAI,8CAAyB,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;QAC7F,IAAI,CAAC,KAAK,GAAG,IAAI,qBAAa,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;QACrE,IAAI,CAAC,eAAe,GAAG,IAAI,0CAAuB,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;QACzF,IAAI,CAAC,OAAO,GAAG,IAAI,yBAAe,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;QACzE,IAAI,CAAC,QAAQ,GAAG,IAAI,2BAAgB,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;QAC3E,IAAI,CAAC,KAAK,GAAG,IAAI,qBAAa,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;IACvE,CAAC;CACF;
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,13 +1,20 @@
|
|
|
1
1
|
export * from './client';
|
|
2
2
|
export * from './auth';
|
|
3
3
|
export * from './auth-client';
|
|
4
|
+
export * from './service-client';
|
|
4
5
|
export * from './errors';
|
|
5
6
|
export * from './validators';
|
|
6
7
|
export * from './transforms';
|
|
7
8
|
export * from './audit';
|
|
9
|
+
export * from './billing';
|
|
8
10
|
export * from './statuses';
|
|
9
11
|
export * from './additional-details';
|
|
10
12
|
export * from './notes';
|
|
13
|
+
export * from './notifications';
|
|
14
|
+
export * from './organizations';
|
|
15
|
+
export * from './permissions';
|
|
16
|
+
export * from './users';
|
|
17
|
+
export * from './webhook-events';
|
|
11
18
|
export * from './supporting-files';
|
|
12
19
|
export * from './clients';
|
|
13
20
|
export * from './projects';
|
package/dist/index.js
CHANGED
|
@@ -17,13 +17,20 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
17
17
|
__exportStar(require("./client"), exports);
|
|
18
18
|
__exportStar(require("./auth"), exports);
|
|
19
19
|
__exportStar(require("./auth-client"), exports);
|
|
20
|
+
__exportStar(require("./service-client"), exports);
|
|
20
21
|
__exportStar(require("./errors"), exports);
|
|
21
22
|
__exportStar(require("./validators"), exports);
|
|
22
23
|
__exportStar(require("./transforms"), exports);
|
|
23
24
|
__exportStar(require("./audit"), exports);
|
|
25
|
+
__exportStar(require("./billing"), exports);
|
|
24
26
|
__exportStar(require("./statuses"), exports);
|
|
25
27
|
__exportStar(require("./additional-details"), exports);
|
|
26
28
|
__exportStar(require("./notes"), exports);
|
|
29
|
+
__exportStar(require("./notifications"), exports);
|
|
30
|
+
__exportStar(require("./organizations"), exports);
|
|
31
|
+
__exportStar(require("./permissions"), exports);
|
|
32
|
+
__exportStar(require("./users"), exports);
|
|
33
|
+
__exportStar(require("./webhook-events"), exports);
|
|
27
34
|
__exportStar(require("./supporting-files"), exports);
|
|
28
35
|
__exportStar(require("./clients"), exports);
|
|
29
36
|
__exportStar(require("./projects"), exports);
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,2CAAyB;AACzB,yCAAuB;AACvB,gDAA8B;AAC9B,2CAAyB;AACzB,+CAA6B;AAC7B,+CAA6B;AAC7B,0CAAwB;AACxB,6CAA2B;AAC3B,uDAAqC;AACrC,0CAAwB;AACxB,qDAAmC;AACnC,4CAA0B;AAC1B,6CAA2B;AAC3B,0CAAwB;AACxB,+CAA6B"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,2CAAyB;AACzB,yCAAuB;AACvB,gDAA8B;AAC9B,mDAAiC;AACjC,2CAAyB;AACzB,+CAA6B;AAC7B,+CAA6B;AAC7B,0CAAwB;AACxB,4CAA0B;AAC1B,6CAA2B;AAC3B,uDAAqC;AACrC,0CAAwB;AACxB,kDAAgC;AAChC,kDAAgC;AAChC,gDAA8B;AAC9B,0CAAwB;AACxB,mDAAiC;AACjC,qDAAmC;AACnC,4CAA0B;AAC1B,6CAA2B;AAC3B,0CAAwB;AACxB,+CAA6B"}
|
package/dist/nest/index.d.ts
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { HttpException } from '@nestjs/common';
|
|
2
2
|
import type { AuditErrorHandler } from '../audit';
|
|
3
3
|
import { SupabaseClientError } from '../errors';
|
|
4
|
+
import { type SupabaseServiceClient } from '../service-client';
|
|
4
5
|
/**
|
|
5
6
|
* The HttpException Nest should send for an SDK error: same status, and the body is
|
|
6
7
|
* exactly `{ error, message }`. Register this in a global exception filter so
|
|
@@ -18,6 +19,16 @@ export type SupabaseUserClientOptions = {
|
|
|
18
19
|
*/
|
|
19
20
|
export declare const configureSupabaseUserClient: (options: SupabaseUserClientOptions) => void;
|
|
20
21
|
export declare const SupabaseUserClient: (...dataOrPipes: unknown[]) => ParameterDecorator;
|
|
22
|
+
/**
|
|
23
|
+
* A `SupabaseServiceClient` from the ambient env — the SDK-side replacement for the api's
|
|
24
|
+
* `createSupabaseAdminClient()`.
|
|
25
|
+
*
|
|
26
|
+
* Deliberately a factory rather than a param decorator: a service client carries no per-request
|
|
27
|
+
* state, so it is built once and held in a field (`private readonly service =
|
|
28
|
+
* createSupabaseServiceClientFromEnv()`), exactly as the admin client is today. The webhook and
|
|
29
|
+
* queue-worker paths that need it have no request to decorate in the first place.
|
|
30
|
+
*/
|
|
31
|
+
export declare const createSupabaseServiceClientFromEnv: (options?: SupabaseUserClientOptions) => SupabaseServiceClient;
|
|
21
32
|
/**
|
|
22
33
|
* A `SupabaseAuthClient` for routes a logged-out caller hits (sign-in, refresh, password
|
|
23
34
|
* reset) — built from the publishable key alone, with no bearer token involved.
|
package/dist/nest/index.js
CHANGED
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.SupabasePublicClient = exports.SupabaseUserClient = exports.configureSupabaseUserClient = exports.toHttpException = void 0;
|
|
3
|
+
exports.SupabasePublicClient = exports.createSupabaseServiceClientFromEnv = exports.SupabaseUserClient = exports.configureSupabaseUserClient = exports.toHttpException = void 0;
|
|
4
4
|
const common_1 = require("@nestjs/common");
|
|
5
5
|
const auth_client_1 = require("../auth-client");
|
|
6
6
|
const client_1 = require("../client");
|
|
7
7
|
const errors_1 = require("../errors");
|
|
8
|
+
const service_client_1 = require("../service-client");
|
|
8
9
|
/**
|
|
9
10
|
* The HttpException Nest should send for an SDK error: same status, and the body is
|
|
10
11
|
* exactly `{ error, message }`. Register this in a global exception filter so
|
|
@@ -56,6 +57,21 @@ exports.SupabaseUserClient = (0, common_1.createParamDecorator)((_, ctx) => {
|
|
|
56
57
|
throw error;
|
|
57
58
|
}
|
|
58
59
|
});
|
|
60
|
+
/**
|
|
61
|
+
* A `SupabaseServiceClient` from the ambient env — the SDK-side replacement for the api's
|
|
62
|
+
* `createSupabaseAdminClient()`.
|
|
63
|
+
*
|
|
64
|
+
* Deliberately a factory rather than a param decorator: a service client carries no per-request
|
|
65
|
+
* state, so it is built once and held in a field (`private readonly service =
|
|
66
|
+
* createSupabaseServiceClientFromEnv()`), exactly as the admin client is today. The webhook and
|
|
67
|
+
* queue-worker paths that need it have no request to decorate in the first place.
|
|
68
|
+
*/
|
|
69
|
+
const createSupabaseServiceClientFromEnv = (options = {}) => (0, service_client_1.createSupabaseServiceClient)({
|
|
70
|
+
url: getEnvOrThrow('SUPABASE_URL'),
|
|
71
|
+
serviceRoleKey: getEnvOrThrow('SUPABASE_SERVICE_ROLE_KEY'),
|
|
72
|
+
onAuditError: options.onAuditError ?? userClientOptions.onAuditError,
|
|
73
|
+
});
|
|
74
|
+
exports.createSupabaseServiceClientFromEnv = createSupabaseServiceClientFromEnv;
|
|
59
75
|
/**
|
|
60
76
|
* A `SupabaseAuthClient` for routes a logged-out caller hits (sign-in, refresh, password
|
|
61
77
|
* reset) — built from the publishable key alone, with no bearer token involved.
|