pipework 0.64.0 → 0.65.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (39) hide show
  1. package/CHANGELOG.md +6 -0
  2. package/REFERENCE.md +79 -0
  3. package/dist/auth/tenant/in-tenant.d.ts +11 -0
  4. package/dist/auth/tenant/in-tenant.d.ts.map +1 -0
  5. package/dist/auth/tenant/in-tenant.js +23 -0
  6. package/dist/auth/tenant/in-tenant.js.map +1 -0
  7. package/dist/core/config/namespace.d.ts +1 -0
  8. package/dist/core/config/namespace.d.ts.map +1 -1
  9. package/dist/core/config/schema.d.ts +3 -0
  10. package/dist/core/config/schema.d.ts.map +1 -1
  11. package/dist/core/config/schema.js +2 -0
  12. package/dist/core/config/schema.js.map +1 -1
  13. package/dist/data/migrate/internal-definitions.d.ts.map +1 -1
  14. package/dist/data/migrate/internal-definitions.js +7 -0
  15. package/dist/data/migrate/internal-definitions.js.map +1 -1
  16. package/dist/index.d.ts +2 -0
  17. package/dist/index.d.ts.map +1 -1
  18. package/dist/index.js +1 -0
  19. package/dist/index.js.map +1 -1
  20. package/dist/infra/access-links/handle.d.ts.map +1 -1
  21. package/dist/infra/access-links/handle.js +3 -17
  22. package/dist/infra/access-links/handle.js.map +1 -1
  23. package/dist/infra/credits/handle.d.ts +149 -0
  24. package/dist/infra/credits/handle.d.ts.map +1 -0
  25. package/dist/infra/credits/handle.js +405 -0
  26. package/dist/infra/credits/handle.js.map +1 -0
  27. package/dist/infra/credits/index.d.ts +3 -0
  28. package/dist/infra/credits/index.d.ts.map +1 -0
  29. package/dist/infra/credits/index.js +2 -0
  30. package/dist/infra/credits/index.js.map +1 -0
  31. package/dist/infra/credits/namespace.d.ts +7 -0
  32. package/dist/infra/credits/namespace.d.ts.map +1 -0
  33. package/dist/infra/credits/namespace.js +7 -0
  34. package/dist/infra/credits/namespace.js.map +1 -0
  35. package/dist/infra/credits/schema.d.ts +132 -0
  36. package/dist/infra/credits/schema.d.ts.map +1 -0
  37. package/dist/infra/credits/schema.js +67 -0
  38. package/dist/infra/credits/schema.js.map +1 -0
  39. package/package.json +1 -1
@@ -0,0 +1,132 @@
1
+ export declare const CREDIT_RESERVATION_STATUSES: readonly ["held", "settled", "released"];
2
+ export declare const CREDIT_LEDGER_KINDS: readonly ["grant", "reserve", "settle", "release", "expire"];
3
+ export declare const creditGrant: import("../../data/domain/types.js").DefinedTable<{
4
+ id: import("../../data/domain/types.js").FieldDescriptor<string, {
5
+ defaultRandom: true;
6
+ hasDefault: true;
7
+ } & {
8
+ primaryKey: true;
9
+ }> & import("../../data/domain/field.js").FieldModifiers<string, {
10
+ defaultRandom: true;
11
+ hasDefault: true;
12
+ } & {
13
+ primaryKey: true;
14
+ }>;
15
+ tenantId: import("../../data/domain/types.js").FieldDescriptor<string, {}> & import("../../data/domain/field.js").FieldModifiers<string, {}>;
16
+ kind: import("../../data/domain/types.js").FieldDescriptor<string, {}> & import("../../data/domain/field.js").FieldModifiers<string, {}>;
17
+ amount: import("../../data/domain/types.js").FieldDescriptor<bigint, {}> & import("../../data/domain/field.js").FieldModifiers<bigint, {}>;
18
+ remaining: import("../../data/domain/types.js").FieldDescriptor<bigint, {}> & import("../../data/domain/field.js").FieldModifiers<bigint, {}>;
19
+ grantedAt: import("../../data/domain/types.js").FieldDescriptor<Date, {
20
+ hasDefault: true;
21
+ }> & import("../../data/domain/field.js").FieldModifiers<Date, {
22
+ hasDefault: true;
23
+ }>;
24
+ expiresAt: import("../../data/domain/types.js").FieldDescriptor<Date | null, {
25
+ nullable: true;
26
+ }> & import("../../data/domain/field.js").FieldModifiers<Date | null, {
27
+ nullable: true;
28
+ }>;
29
+ sourceRef: import("../../data/domain/types.js").FieldDescriptor<string | null, {
30
+ nullable: true;
31
+ }> & import("../../data/domain/field.js").FieldModifiers<string | null, {
32
+ nullable: true;
33
+ }>;
34
+ metadata: import("../../data/domain/types.js").FieldDescriptor<import("zod/v4").JSONType, {
35
+ nullable: true;
36
+ }> & import("../../data/domain/field.js").FieldModifiers<import("zod/v4").JSONType, {
37
+ nullable: true;
38
+ }>;
39
+ }, "credit_grant">;
40
+ export declare const creditReservation: import("../../data/domain/types.js").DefinedTable<{
41
+ id: import("../../data/domain/types.js").FieldDescriptor<string, {
42
+ defaultRandom: true;
43
+ hasDefault: true;
44
+ } & {
45
+ primaryKey: true;
46
+ }> & import("../../data/domain/field.js").FieldModifiers<string, {
47
+ defaultRandom: true;
48
+ hasDefault: true;
49
+ } & {
50
+ primaryKey: true;
51
+ }>;
52
+ tenantId: import("../../data/domain/types.js").FieldDescriptor<string, {}> & import("../../data/domain/field.js").FieldModifiers<string, {}>;
53
+ jobId: import("../../data/domain/types.js").FieldDescriptor<string, {}> & import("../../data/domain/field.js").FieldModifiers<string, {}>;
54
+ amount: import("../../data/domain/types.js").FieldDescriptor<bigint, {}> & import("../../data/domain/field.js").FieldModifiers<bigint, {}>;
55
+ status: import("../../data/domain/types.js").FieldDescriptor<"held" | "settled" | "released", {}> & import("../../data/domain/field.js").FieldModifiers<"held" | "settled" | "released", {}>;
56
+ settledAmount: import("../../data/domain/types.js").FieldDescriptor<bigint | null, {
57
+ nullable: true;
58
+ }> & import("../../data/domain/field.js").FieldModifiers<bigint | null, {
59
+ nullable: true;
60
+ }>;
61
+ overdraft: import("../../data/domain/types.js").FieldDescriptor<bigint, {
62
+ hasDefault: true;
63
+ }> & import("../../data/domain/field.js").FieldModifiers<bigint, {
64
+ hasDefault: true;
65
+ }>;
66
+ createdAt: import("../../data/domain/types.js").FieldDescriptor<Date, {
67
+ hasDefault: true;
68
+ }> & import("../../data/domain/field.js").FieldModifiers<Date, {
69
+ hasDefault: true;
70
+ }>;
71
+ settledAt: import("../../data/domain/types.js").FieldDescriptor<Date | null, {
72
+ nullable: true;
73
+ }> & import("../../data/domain/field.js").FieldModifiers<Date | null, {
74
+ nullable: true;
75
+ }>;
76
+ }, "credit_reservation">;
77
+ export declare const creditDraw: import("../../data/domain/types.js").DefinedTable<{
78
+ id: import("../../data/domain/types.js").FieldDescriptor<string, {
79
+ defaultRandom: true;
80
+ hasDefault: true;
81
+ } & {
82
+ primaryKey: true;
83
+ }> & import("../../data/domain/field.js").FieldModifiers<string, {
84
+ defaultRandom: true;
85
+ hasDefault: true;
86
+ } & {
87
+ primaryKey: true;
88
+ }>;
89
+ tenantId: import("../../data/domain/types.js").FieldDescriptor<string, {}> & import("../../data/domain/field.js").FieldModifiers<string, {}>;
90
+ reservationId: import("../../data/domain/types.js").FieldDescriptor<string, {}> & import("../../data/domain/field.js").FieldModifiers<string, {}>;
91
+ grantId: import("../../data/domain/types.js").FieldDescriptor<string, {}> & import("../../data/domain/field.js").FieldModifiers<string, {}>;
92
+ amount: import("../../data/domain/types.js").FieldDescriptor<bigint, {}> & import("../../data/domain/field.js").FieldModifiers<bigint, {}>;
93
+ seq: import("../../data/domain/types.js").FieldDescriptor<number, {}> & import("../../data/domain/field.js").FieldModifiers<number, {}>;
94
+ }, "credit_draw">;
95
+ export declare const creditLedger: import("../../data/domain/types.js").DefinedTable<{
96
+ id: import("../../data/domain/types.js").FieldDescriptor<string, {
97
+ defaultRandom: true;
98
+ hasDefault: true;
99
+ } & {
100
+ primaryKey: true;
101
+ }> & import("../../data/domain/field.js").FieldModifiers<string, {
102
+ defaultRandom: true;
103
+ hasDefault: true;
104
+ } & {
105
+ primaryKey: true;
106
+ }>;
107
+ tenantId: import("../../data/domain/types.js").FieldDescriptor<string, {}> & import("../../data/domain/field.js").FieldModifiers<string, {}>;
108
+ at: import("../../data/domain/types.js").FieldDescriptor<Date, {
109
+ hasDefault: true;
110
+ }> & import("../../data/domain/field.js").FieldModifiers<Date, {
111
+ hasDefault: true;
112
+ }>;
113
+ kind: import("../../data/domain/types.js").FieldDescriptor<"grant" | "reserve" | "settle" | "release" | "expire", {}> & import("../../data/domain/field.js").FieldModifiers<"grant" | "reserve" | "settle" | "release" | "expire", {}>;
114
+ amount: import("../../data/domain/types.js").FieldDescriptor<bigint, {}> & import("../../data/domain/field.js").FieldModifiers<bigint, {}>;
115
+ grantId: import("../../data/domain/types.js").FieldDescriptor<string | null, {
116
+ nullable: true;
117
+ }> & import("../../data/domain/field.js").FieldModifiers<string | null, {
118
+ nullable: true;
119
+ }>;
120
+ reservationId: import("../../data/domain/types.js").FieldDescriptor<string | null, {
121
+ nullable: true;
122
+ }> & import("../../data/domain/field.js").FieldModifiers<string | null, {
123
+ nullable: true;
124
+ }>;
125
+ jobId: import("../../data/domain/types.js").FieldDescriptor<string | null, {
126
+ nullable: true;
127
+ }> & import("../../data/domain/field.js").FieldModifiers<string | null, {
128
+ nullable: true;
129
+ }>;
130
+ availableAfter: import("../../data/domain/types.js").FieldDescriptor<bigint, {}> & import("../../data/domain/field.js").FieldModifiers<bigint, {}>;
131
+ }, "credit_ledger">;
132
+ //# sourceMappingURL=schema.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../../src/infra/credits/schema.ts"],"names":[],"mappings":"AAQA,eAAO,MAAM,2BAA2B,0CAA2C,CAAA;AACnF,eAAO,MAAM,mBAAmB,8DAA+D,CAAA;AAE/F,eAAO,MAAM,WAAW;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;kBAetB,CAAA;AAEF,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;wBAc5B,CAAA;AAEF,eAAO,MAAM,UAAU;;;;;;;;;;;;;;;;;iBAWrB,CAAA;AAEF,eAAO,MAAM,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;mBAcvB,CAAA"}
@@ -0,0 +1,67 @@
1
+ // The four tables behind prepaid credits, all tenant-scoped (forced row-level
2
+ // security in generated migrations). Amounts are whole units in bigint columns.
3
+ import { define } from '../../data/domain/index.js';
4
+ import { field } from '../../data/domain/field.js';
5
+ import { schema } from '../../data/schema/namespace.js';
6
+ import { index, uniqueIndex } from '../../data/db/idx/index.js';
7
+ export const CREDIT_RESERVATION_STATUSES = ['held', 'settled', 'released'];
8
+ export const CREDIT_LEDGER_KINDS = ['grant', 'reserve', 'settle', 'release', 'expire'];
9
+ export const creditGrant = define('credit_grant', {
10
+ id: field.uuid().defaultRandom().primaryKey(),
11
+ tenantId: field.uuid().tenant(),
12
+ kind: field.text(),
13
+ amount: field.bigint(),
14
+ remaining: field.bigint(),
15
+ grantedAt: field.timestamp().default('now'),
16
+ expiresAt: field.timestamp().nullable(),
17
+ sourceRef: field.text().nullable(),
18
+ metadata: field.jsonb(schema.check.json()).nullable(),
19
+ }, {
20
+ indexes: (t) => ({
21
+ bySource: uniqueIndex('uq_credit_grant_source').on(t['tenantId'], t['sourceRef']),
22
+ byExpiry: index('idx_credit_grant_expiry').on(t['tenantId'], t['expiresAt']),
23
+ }),
24
+ });
25
+ export const creditReservation = define('credit_reservation', {
26
+ id: field.uuid().defaultRandom().primaryKey(),
27
+ tenantId: field.uuid().tenant(),
28
+ jobId: field.text(),
29
+ amount: field.bigint(),
30
+ status: field.enum(CREDIT_RESERVATION_STATUSES),
31
+ settledAmount: field.bigint().nullable(),
32
+ overdraft: field.bigint().default(0n),
33
+ createdAt: field.timestamp().default('now'),
34
+ settledAt: field.timestamp().nullable(),
35
+ }, {
36
+ indexes: (t) => ({
37
+ byJob: uniqueIndex('uq_credit_reservation_job').on(t['tenantId'], t['jobId']),
38
+ }),
39
+ });
40
+ export const creditDraw = define('credit_draw', {
41
+ id: field.uuid().defaultRandom().primaryKey(),
42
+ tenantId: field.uuid().tenant(),
43
+ reservationId: field.uuid(),
44
+ grantId: field.uuid(),
45
+ amount: field.bigint(),
46
+ seq: field.integer(),
47
+ }, {
48
+ indexes: (t) => ({
49
+ byReservation: index('idx_credit_draw_reservation').on(t['reservationId']),
50
+ }),
51
+ });
52
+ export const creditLedger = define('credit_ledger', {
53
+ id: field.uuid().defaultRandom().primaryKey(),
54
+ tenantId: field.uuid().tenant(),
55
+ at: field.timestamp().default('now'),
56
+ kind: field.enum(CREDIT_LEDGER_KINDS),
57
+ amount: field.bigint(),
58
+ grantId: field.uuid().nullable(),
59
+ reservationId: field.uuid().nullable(),
60
+ jobId: field.text().nullable(),
61
+ availableAfter: field.bigint(),
62
+ }, {
63
+ indexes: (t) => ({
64
+ byTenantTime: index('idx_credit_ledger_tenant_at').on(t['tenantId'], t['at'], t['id']),
65
+ }),
66
+ });
67
+ //# sourceMappingURL=schema.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema.js","sourceRoot":"","sources":["../../../src/infra/credits/schema.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "pipework",
3
- "version": "0.64.0",
3
+ "version": "0.65.0",
4
4
  "description": "TypeScript framework for multi-tenant SaaS applications. PostgreSQL-only.",
5
5
  "type": "module",
6
6
  "license": "MIT",