@cosmicdrift/kumiko-bundled-features 0.330.2 → 0.331.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/compliance-profiles/schema/profile-selection.d.ts +4 -0
- package/dist/ledger/entity.d.ts +26 -0
- package/dist/ledger/entity.js +15 -1
- package/dist/ledger/feature.js +1 -1
- package/dist/template-resolver/table.d.ts +16 -0
- package/dist/template-resolver/user-content-table.d.ts +8 -0
- package/dist/tenant/invitation-table.d.ts +4 -0
- package/dist/tenant/schema/tenant.d.ts +4 -0
- package/dist/user/schema/user.d.ts +4 -0
- package/dist/user-data-rights/schema/export-job.d.ts +4 -0
- package/dist/user-data-rights/web/confirm-deletion-screen.js +5 -1
- package/dist/user-data-rights/web/request-deletion-screen.js +5 -1
- package/package.json +9 -9
- package/src/ledger/changes.json +7 -0
|
@@ -16,6 +16,8 @@ export declare const tenantComplianceProfileEntity: import("@cosmicdrift/kumiko-
|
|
|
16
16
|
readonly "minimal-no-region"?: import("@cosmicdrift/kumiko-types/fields").SelectOptionTone | undefined;
|
|
17
17
|
readonly "swiss-dsg"?: import("@cosmicdrift/kumiko-types/fields").SelectOptionTone | undefined;
|
|
18
18
|
} | undefined;
|
|
19
|
+
readonly optionsQuery?: string;
|
|
20
|
+
readonly optionsQueryPayload?: Readonly<Record<string, string | number | boolean>>;
|
|
19
21
|
} & import("@cosmicdrift/kumiko-types/fields").ResolvedPiiFlags & {
|
|
20
22
|
required: true;
|
|
21
23
|
};
|
|
@@ -54,6 +56,8 @@ export declare const tenantComplianceProfileTable: import("@cosmicdrift/kumiko-f
|
|
|
54
56
|
readonly "minimal-no-region"?: import("@cosmicdrift/kumiko-types/fields").SelectOptionTone | undefined;
|
|
55
57
|
readonly "swiss-dsg"?: import("@cosmicdrift/kumiko-types/fields").SelectOptionTone | undefined;
|
|
56
58
|
} | undefined;
|
|
59
|
+
readonly optionsQuery?: string;
|
|
60
|
+
readonly optionsQueryPayload?: Readonly<Record<string, string | number | boolean>>;
|
|
57
61
|
} & import("@cosmicdrift/kumiko-types/fields").ResolvedPiiFlags & {
|
|
58
62
|
required: true;
|
|
59
63
|
};
|
package/dist/ledger/entity.d.ts
CHANGED
|
@@ -37,6 +37,8 @@ export declare const accountEntity: import("@cosmicdrift/kumiko-types/fields").E
|
|
|
37
37
|
readonly income?: import("@cosmicdrift/kumiko-types/fields").SelectOptionTone | undefined;
|
|
38
38
|
readonly liability?: import("@cosmicdrift/kumiko-types/fields").SelectOptionTone | undefined;
|
|
39
39
|
} | undefined;
|
|
40
|
+
readonly optionsQuery?: string;
|
|
41
|
+
readonly optionsQueryPayload?: Readonly<Record<string, string | number | boolean>>;
|
|
40
42
|
} & import("@cosmicdrift/kumiko-types/fields").ResolvedPiiFlags & {
|
|
41
43
|
required: true;
|
|
42
44
|
};
|
|
@@ -151,6 +153,8 @@ export declare const transactionEntity: import("@cosmicdrift/kumiko-types/fields
|
|
|
151
153
|
readonly draft?: import("@cosmicdrift/kumiko-types/fields").SelectOptionTone | undefined;
|
|
152
154
|
readonly posted?: import("@cosmicdrift/kumiko-types/fields").SelectOptionTone | undefined;
|
|
153
155
|
} | undefined;
|
|
156
|
+
readonly optionsQuery?: string;
|
|
157
|
+
readonly optionsQueryPayload?: Readonly<Record<string, string | number | boolean>>;
|
|
154
158
|
} & import("@cosmicdrift/kumiko-types/fields").ResolvedPiiFlags & {
|
|
155
159
|
required: true;
|
|
156
160
|
};
|
|
@@ -274,6 +278,8 @@ export declare const scheduleEntity: import("@cosmicdrift/kumiko-types/fields").
|
|
|
274
278
|
readonly optionTones?: {
|
|
275
279
|
readonly monthly?: import("@cosmicdrift/kumiko-types/fields").SelectOptionTone | undefined;
|
|
276
280
|
} | undefined;
|
|
281
|
+
readonly optionsQuery?: string;
|
|
282
|
+
readonly optionsQueryPayload?: Readonly<Record<string, string | number | boolean>>;
|
|
277
283
|
} & import("@cosmicdrift/kumiko-types/fields").ResolvedPiiFlags & {
|
|
278
284
|
required: true;
|
|
279
285
|
};
|
|
@@ -376,4 +382,24 @@ export declare const scheduleEntity: import("@cosmicdrift/kumiko-types/fields").
|
|
|
376
382
|
} & import("@cosmicdrift/kumiko-types/fields").ResolvedPiiFlags & {
|
|
377
383
|
required: false;
|
|
378
384
|
};
|
|
385
|
+
sourceRef: {
|
|
386
|
+
readonly type: "text";
|
|
387
|
+
readonly description?: string;
|
|
388
|
+
readonly maxLength?: number;
|
|
389
|
+
readonly required?: boolean;
|
|
390
|
+
readonly searchable?: boolean;
|
|
391
|
+
readonly sortable?: boolean;
|
|
392
|
+
readonly filterable?: boolean;
|
|
393
|
+
readonly encrypted?: boolean;
|
|
394
|
+
readonly sensitive?: boolean;
|
|
395
|
+
readonly readAsInstruction?: boolean;
|
|
396
|
+
readonly format?: "email" | "url" | "phone" | "password";
|
|
397
|
+
readonly default?: string;
|
|
398
|
+
readonly access?: import("@cosmicdrift/kumiko-types/fields").FieldAccess;
|
|
399
|
+
readonly multiline?: boolean | {
|
|
400
|
+
readonly rows?: number;
|
|
401
|
+
};
|
|
402
|
+
} & import("@cosmicdrift/kumiko-types/fields").ResolvedPiiFlags & {
|
|
403
|
+
required: false;
|
|
404
|
+
};
|
|
379
405
|
}, "tenant">;
|
package/dist/ledger/entity.js
CHANGED
|
@@ -142,6 +142,20 @@ export const scheduleEntity = createEntity({
|
|
|
142
142
|
reason: "technical_reference",
|
|
143
143
|
filterable: true,
|
|
144
144
|
}),
|
|
145
|
+
// Caller-assigned stable key (e.g. one id per lease position) to find the
|
|
146
|
+
// schedule again. Not unique: callers keep their own find-then-create;
|
|
147
|
+
// `description` stays pure display text instead of a lookup key.
|
|
148
|
+
sourceRef: createTextField({
|
|
149
|
+
maxLength: 128,
|
|
150
|
+
personal: false,
|
|
151
|
+
reason: "technical_reference",
|
|
152
|
+
filterable: true,
|
|
153
|
+
}),
|
|
145
154
|
},
|
|
146
|
-
|
|
155
|
+
// A separate non-unique index: changing the subject index would drop and
|
|
156
|
+
// recreate it, an additional one is a plain CREATE INDEX.
|
|
157
|
+
indexes: [
|
|
158
|
+
{ columns: ["tenantId", "subjectType", "subjectId"] },
|
|
159
|
+
{ columns: ["tenantId", "sourceRef"] },
|
|
160
|
+
],
|
|
147
161
|
});
|
package/dist/ledger/feature.js
CHANGED
|
@@ -19,7 +19,7 @@ import { createCreateTransactionHandler } from "./handlers/create-transaction.wr
|
|
|
19
19
|
import { createBalanceSheetHandler, createBalancesReportHandler, createIncomeStatementHandler, } from "./handlers/reports.query.js";
|
|
20
20
|
import { createReverseTransactionHandler } from "./handlers/reverse-transaction.write.js";
|
|
21
21
|
function registerLedger(r, access, toggleable) {
|
|
22
|
-
r.describe("Double-entry bookkeeping primitive. Owns two event-sourced entities — the per-tenant `account` chart of accounts (`read_ledger_accounts`, self-referential via parentId, typed asset/liability/equity/income/expense) and immutable `transaction` journal entries (`read_ledger_transactions`) whose balanced posting lines are embedded as jsonb (Σ amount = 0, signed integer minor units). The account catalog uses the generic entity handlers (create, update, list, detail); create-transaction books a balanced entry (Σ=0 and ≥2 distinct accounts enforced at the command boundary, referential integrity against accounts checked) and reverse-transaction books its Storno mirror — there is deliberately NO transaction update/delete, so a posted entry is an immutable fact and the audit trail stays intact. Recurring schedules (`read_ledger_schedules`) layer Dauerauftrag templates on top — a schedule names debit/credit accounts, an amount
|
|
22
|
+
r.describe("Double-entry bookkeeping primitive. Owns two event-sourced entities — the per-tenant `account` chart of accounts (`read_ledger_accounts`, self-referential via parentId, typed asset/liability/equity/income/expense) and immutable `transaction` journal entries (`read_ledger_transactions`) whose balanced posting lines are embedded as jsonb (Σ amount = 0, signed integer minor units). The account catalog uses the generic entity handlers (create, update, list, detail); create-transaction books a balanced entry (Σ=0 and ≥2 distinct accounts enforced at the command boundary, referential integrity against accounts checked) and reverse-transaction books its Storno mirror — there is deliberately NO transaction update/delete, so a posted entry is an immutable fact and the audit trail stays intact. Recurring schedules (`read_ledger_schedules`) layer Dauerauftrag templates on top — a schedule names debit/credit accounts, an amount, a monthly interval and an optional caller-assigned `sourceRef` key (filterable, to find a schedule again), from which the Soll (forecast) is a pure projection (projectSchedule) needing no bookings, and confirm-schedule-period materialises one period as an idempotent, reversal-aware balanced entry referencing scheduleReference(id, period); only confirming writes. Balances and reports (balance sheet, P&L, cashflow) derive as pure queries over the postings. Everything financial — banking, accounting, rent cashflow, credits, invoices — models as accounts + balanced transactions on top. Pin roles with createLedgerFeature({ roles }) or adopt the host model with { access }; pass { toggleable: { default: false } } to tier-gate the whole feature.");
|
|
23
23
|
r.uiHints({
|
|
24
24
|
displayLabel: "Ledger",
|
|
25
25
|
category: "data",
|
|
@@ -38,6 +38,8 @@ export declare const templateResourceEntity: import("@cosmicdrift/kumiko-types/f
|
|
|
38
38
|
readonly notification?: import("@cosmicdrift/kumiko-types/fields").SelectOptionTone | undefined;
|
|
39
39
|
readonly "text-block"?: import("@cosmicdrift/kumiko-types/fields").SelectOptionTone | undefined;
|
|
40
40
|
} | undefined;
|
|
41
|
+
readonly optionsQuery?: string;
|
|
42
|
+
readonly optionsQueryPayload?: Readonly<Record<string, string | number | boolean>>;
|
|
41
43
|
} & import("@cosmicdrift/kumiko-types/fields").ResolvedPiiFlags & {
|
|
42
44
|
required: true;
|
|
43
45
|
};
|
|
@@ -134,6 +136,8 @@ export declare const templateResourceEntity: import("@cosmicdrift/kumiko-types/f
|
|
|
134
136
|
readonly mjml?: import("@cosmicdrift/kumiko-types/fields").SelectOptionTone | undefined;
|
|
135
137
|
readonly plain?: import("@cosmicdrift/kumiko-types/fields").SelectOptionTone | undefined;
|
|
136
138
|
} | undefined;
|
|
139
|
+
readonly optionsQuery?: string;
|
|
140
|
+
readonly optionsQueryPayload?: Readonly<Record<string, string | number | boolean>>;
|
|
137
141
|
} & import("@cosmicdrift/kumiko-types/fields").ResolvedPiiFlags & {
|
|
138
142
|
required: true;
|
|
139
143
|
};
|
|
@@ -184,6 +188,8 @@ export declare const templateResourceEntity: import("@cosmicdrift/kumiko-types/f
|
|
|
184
188
|
readonly system?: import("@cosmicdrift/kumiko-types/fields").SelectOptionTone | undefined;
|
|
185
189
|
readonly tenant?: import("@cosmicdrift/kumiko-types/fields").SelectOptionTone | undefined;
|
|
186
190
|
} | undefined;
|
|
191
|
+
readonly optionsQuery?: string;
|
|
192
|
+
readonly optionsQueryPayload?: Readonly<Record<string, string | number | boolean>>;
|
|
187
193
|
} & import("@cosmicdrift/kumiko-types/fields").ResolvedPiiFlags & {
|
|
188
194
|
required: true;
|
|
189
195
|
};
|
|
@@ -223,6 +229,8 @@ export declare const templateResourceEntity: import("@cosmicdrift/kumiko-types/f
|
|
|
223
229
|
readonly archived?: import("@cosmicdrift/kumiko-types/fields").SelectOptionTone | undefined;
|
|
224
230
|
readonly draft?: import("@cosmicdrift/kumiko-types/fields").SelectOptionTone | undefined;
|
|
225
231
|
} | undefined;
|
|
232
|
+
readonly optionsQuery?: string;
|
|
233
|
+
readonly optionsQueryPayload?: Readonly<Record<string, string | number | boolean>>;
|
|
226
234
|
} & import("@cosmicdrift/kumiko-types/fields").ResolvedPiiFlags & {
|
|
227
235
|
required: true;
|
|
228
236
|
};
|
|
@@ -267,6 +275,8 @@ export declare const templateResourcesTable: import("@cosmicdrift/kumiko-framewo
|
|
|
267
275
|
readonly notification?: import("@cosmicdrift/kumiko-types/fields").SelectOptionTone | undefined;
|
|
268
276
|
readonly "text-block"?: import("@cosmicdrift/kumiko-types/fields").SelectOptionTone | undefined;
|
|
269
277
|
} | undefined;
|
|
278
|
+
readonly optionsQuery?: string;
|
|
279
|
+
readonly optionsQueryPayload?: Readonly<Record<string, string | number | boolean>>;
|
|
270
280
|
} & import("@cosmicdrift/kumiko-types/fields").ResolvedPiiFlags & {
|
|
271
281
|
required: true;
|
|
272
282
|
};
|
|
@@ -363,6 +373,8 @@ export declare const templateResourcesTable: import("@cosmicdrift/kumiko-framewo
|
|
|
363
373
|
readonly mjml?: import("@cosmicdrift/kumiko-types/fields").SelectOptionTone | undefined;
|
|
364
374
|
readonly plain?: import("@cosmicdrift/kumiko-types/fields").SelectOptionTone | undefined;
|
|
365
375
|
} | undefined;
|
|
376
|
+
readonly optionsQuery?: string;
|
|
377
|
+
readonly optionsQueryPayload?: Readonly<Record<string, string | number | boolean>>;
|
|
366
378
|
} & import("@cosmicdrift/kumiko-types/fields").ResolvedPiiFlags & {
|
|
367
379
|
required: true;
|
|
368
380
|
};
|
|
@@ -413,6 +425,8 @@ export declare const templateResourcesTable: import("@cosmicdrift/kumiko-framewo
|
|
|
413
425
|
readonly system?: import("@cosmicdrift/kumiko-types/fields").SelectOptionTone | undefined;
|
|
414
426
|
readonly tenant?: import("@cosmicdrift/kumiko-types/fields").SelectOptionTone | undefined;
|
|
415
427
|
} | undefined;
|
|
428
|
+
readonly optionsQuery?: string;
|
|
429
|
+
readonly optionsQueryPayload?: Readonly<Record<string, string | number | boolean>>;
|
|
416
430
|
} & import("@cosmicdrift/kumiko-types/fields").ResolvedPiiFlags & {
|
|
417
431
|
required: true;
|
|
418
432
|
};
|
|
@@ -452,6 +466,8 @@ export declare const templateResourcesTable: import("@cosmicdrift/kumiko-framewo
|
|
|
452
466
|
readonly archived?: import("@cosmicdrift/kumiko-types/fields").SelectOptionTone | undefined;
|
|
453
467
|
readonly draft?: import("@cosmicdrift/kumiko-types/fields").SelectOptionTone | undefined;
|
|
454
468
|
} | undefined;
|
|
469
|
+
readonly optionsQuery?: string;
|
|
470
|
+
readonly optionsQueryPayload?: Readonly<Record<string, string | number | boolean>>;
|
|
455
471
|
} & import("@cosmicdrift/kumiko-types/fields").ResolvedPiiFlags & {
|
|
456
472
|
required: true;
|
|
457
473
|
};
|
|
@@ -58,6 +58,8 @@ export declare const userContentEntryEntity: import("@cosmicdrift/kumiko-types/f
|
|
|
58
58
|
readonly notification?: import("@cosmicdrift/kumiko-types/fields").SelectOptionTone | undefined;
|
|
59
59
|
readonly "text-block"?: import("@cosmicdrift/kumiko-types/fields").SelectOptionTone | undefined;
|
|
60
60
|
} | undefined;
|
|
61
|
+
readonly optionsQuery?: string;
|
|
62
|
+
readonly optionsQueryPayload?: Readonly<Record<string, string | number | boolean>>;
|
|
61
63
|
} & import("@cosmicdrift/kumiko-types/fields").ResolvedPiiFlags & {
|
|
62
64
|
required: true;
|
|
63
65
|
};
|
|
@@ -154,6 +156,8 @@ export declare const userContentEntryEntity: import("@cosmicdrift/kumiko-types/f
|
|
|
154
156
|
readonly mjml?: import("@cosmicdrift/kumiko-types/fields").SelectOptionTone | undefined;
|
|
155
157
|
readonly plain?: import("@cosmicdrift/kumiko-types/fields").SelectOptionTone | undefined;
|
|
156
158
|
} | undefined;
|
|
159
|
+
readonly optionsQuery?: string;
|
|
160
|
+
readonly optionsQueryPayload?: Readonly<Record<string, string | number | boolean>>;
|
|
157
161
|
} & import("@cosmicdrift/kumiko-types/fields").ResolvedPiiFlags & {
|
|
158
162
|
required: true;
|
|
159
163
|
};
|
|
@@ -218,6 +222,8 @@ export declare const userContentEntriesTable: import("@cosmicdrift/kumiko-framew
|
|
|
218
222
|
readonly notification?: import("@cosmicdrift/kumiko-types/fields").SelectOptionTone | undefined;
|
|
219
223
|
readonly "text-block"?: import("@cosmicdrift/kumiko-types/fields").SelectOptionTone | undefined;
|
|
220
224
|
} | undefined;
|
|
225
|
+
readonly optionsQuery?: string;
|
|
226
|
+
readonly optionsQueryPayload?: Readonly<Record<string, string | number | boolean>>;
|
|
221
227
|
} & import("@cosmicdrift/kumiko-types/fields").ResolvedPiiFlags & {
|
|
222
228
|
required: true;
|
|
223
229
|
};
|
|
@@ -314,6 +320,8 @@ export declare const userContentEntriesTable: import("@cosmicdrift/kumiko-framew
|
|
|
314
320
|
readonly mjml?: import("@cosmicdrift/kumiko-types/fields").SelectOptionTone | undefined;
|
|
315
321
|
readonly plain?: import("@cosmicdrift/kumiko-types/fields").SelectOptionTone | undefined;
|
|
316
322
|
} | undefined;
|
|
323
|
+
readonly optionsQuery?: string;
|
|
324
|
+
readonly optionsQueryPayload?: Readonly<Record<string, string | number | boolean>>;
|
|
317
325
|
} & import("@cosmicdrift/kumiko-types/fields").ResolvedPiiFlags & {
|
|
318
326
|
required: true;
|
|
319
327
|
};
|
|
@@ -64,6 +64,8 @@ export declare const tenantInvitationEntity: import("@cosmicdrift/kumiko-types/f
|
|
|
64
64
|
readonly expired?: import("@cosmicdrift/kumiko-types/fields").SelectOptionTone | undefined;
|
|
65
65
|
readonly pending?: import("@cosmicdrift/kumiko-types/fields").SelectOptionTone | undefined;
|
|
66
66
|
} | undefined;
|
|
67
|
+
readonly optionsQuery?: string;
|
|
68
|
+
readonly optionsQueryPayload?: Readonly<Record<string, string | number | boolean>>;
|
|
67
69
|
} & import("@cosmicdrift/kumiko-types/fields").ResolvedPiiFlags & {
|
|
68
70
|
required: true;
|
|
69
71
|
};
|
|
@@ -161,6 +163,8 @@ export declare const tenantInvitationsTable: import("@cosmicdrift/kumiko-framewo
|
|
|
161
163
|
readonly expired?: import("@cosmicdrift/kumiko-types/fields").SelectOptionTone | undefined;
|
|
162
164
|
readonly pending?: import("@cosmicdrift/kumiko-types/fields").SelectOptionTone | undefined;
|
|
163
165
|
} | undefined;
|
|
166
|
+
readonly optionsQuery?: string;
|
|
167
|
+
readonly optionsQueryPayload?: Readonly<Record<string, string | number | boolean>>;
|
|
164
168
|
} & import("@cosmicdrift/kumiko-types/fields").ResolvedPiiFlags & {
|
|
165
169
|
required: true;
|
|
166
170
|
};
|
|
@@ -62,6 +62,8 @@ export declare const tenantEntity: import("@cosmicdrift/kumiko-types/fields").En
|
|
|
62
62
|
readonly destroyed?: import("@cosmicdrift/kumiko-types/fields").SelectOptionTone | undefined;
|
|
63
63
|
readonly destroying?: import("@cosmicdrift/kumiko-types/fields").SelectOptionTone | undefined;
|
|
64
64
|
} | undefined;
|
|
65
|
+
readonly optionsQuery?: string;
|
|
66
|
+
readonly optionsQueryPayload?: Readonly<Record<string, string | number | boolean>>;
|
|
65
67
|
} & import("@cosmicdrift/kumiko-types/fields").ResolvedPiiFlags & {
|
|
66
68
|
required: true;
|
|
67
69
|
};
|
|
@@ -208,6 +210,8 @@ export declare const tenantTable: import("@cosmicdrift/kumiko-framework/db").Ent
|
|
|
208
210
|
readonly destroyed?: import("@cosmicdrift/kumiko-types/fields").SelectOptionTone | undefined;
|
|
209
211
|
readonly destroying?: import("@cosmicdrift/kumiko-types/fields").SelectOptionTone | undefined;
|
|
210
212
|
} | undefined;
|
|
213
|
+
readonly optionsQuery?: string;
|
|
214
|
+
readonly optionsQueryPayload?: Readonly<Record<string, string | number | boolean>>;
|
|
211
215
|
} & import("@cosmicdrift/kumiko-types/fields").ResolvedPiiFlags & {
|
|
212
216
|
required: true;
|
|
213
217
|
};
|
|
@@ -158,6 +158,8 @@ export declare const userEntity: import("@cosmicdrift/kumiko-types/fields").Enti
|
|
|
158
158
|
readonly deletionRequested?: import("@cosmicdrift/kumiko-types/fields").SelectOptionTone | undefined;
|
|
159
159
|
readonly restricted?: import("@cosmicdrift/kumiko-types/fields").SelectOptionTone | undefined;
|
|
160
160
|
} | undefined;
|
|
161
|
+
readonly optionsQuery?: string;
|
|
162
|
+
readonly optionsQueryPayload?: Readonly<Record<string, string | number | boolean>>;
|
|
161
163
|
} & import("@cosmicdrift/kumiko-types/fields").ResolvedPiiFlags & {
|
|
162
164
|
required: true;
|
|
163
165
|
};
|
|
@@ -328,6 +330,8 @@ export declare const userTable: import("@cosmicdrift/kumiko-framework/db").Entit
|
|
|
328
330
|
readonly deletionRequested?: import("@cosmicdrift/kumiko-types/fields").SelectOptionTone | undefined;
|
|
329
331
|
readonly restricted?: import("@cosmicdrift/kumiko-types/fields").SelectOptionTone | undefined;
|
|
330
332
|
} | undefined;
|
|
333
|
+
readonly optionsQuery?: string;
|
|
334
|
+
readonly optionsQueryPayload?: Readonly<Record<string, string | number | boolean>>;
|
|
331
335
|
} & import("@cosmicdrift/kumiko-types/fields").ResolvedPiiFlags & {
|
|
332
336
|
required: true;
|
|
333
337
|
};
|
|
@@ -70,6 +70,8 @@ export declare const exportJobEntity: import("@cosmicdrift/kumiko-types/fields")
|
|
|
70
70
|
readonly pending?: import("@cosmicdrift/kumiko-types/fields").SelectOptionTone | undefined;
|
|
71
71
|
readonly running?: import("@cosmicdrift/kumiko-types/fields").SelectOptionTone | undefined;
|
|
72
72
|
} | undefined;
|
|
73
|
+
readonly optionsQuery?: string;
|
|
74
|
+
readonly optionsQueryPayload?: Readonly<Record<string, string | number | boolean>>;
|
|
73
75
|
} & import("@cosmicdrift/kumiko-types/fields").ResolvedPiiFlags & {
|
|
74
76
|
required: true;
|
|
75
77
|
};
|
|
@@ -240,6 +242,8 @@ export declare const exportJobsTable: import("@cosmicdrift/kumiko-framework/db")
|
|
|
240
242
|
readonly pending?: import("@cosmicdrift/kumiko-types/fields").SelectOptionTone | undefined;
|
|
241
243
|
readonly running?: import("@cosmicdrift/kumiko-types/fields").SelectOptionTone | undefined;
|
|
242
244
|
} | undefined;
|
|
245
|
+
readonly optionsQuery?: string;
|
|
246
|
+
readonly optionsQueryPayload?: Readonly<Record<string, string | number | boolean>>;
|
|
243
247
|
} & import("@cosmicdrift/kumiko-types/fields").ResolvedPiiFlags & {
|
|
244
248
|
required: true;
|
|
245
249
|
};
|
|
@@ -31,7 +31,11 @@ export function ConfirmAccountDeletionScreen({ title, }) {
|
|
|
31
31
|
setPhase("error");
|
|
32
32
|
}
|
|
33
33
|
};
|
|
34
|
-
return (_jsx(Card
|
|
34
|
+
return (_jsx(Card
|
|
35
|
+
// kumiko-lint-ignore primitives-discipline narrow centered confirmation card, not a screen container
|
|
36
|
+
, {
|
|
37
|
+
// kumiko-lint-ignore primitives-discipline narrow centered confirmation card, not a screen container
|
|
38
|
+
className: "w-full max-w-sm mx-auto", options: { padded: false }, slots: {
|
|
35
39
|
header: (_jsx("div", { className: "flex flex-col space-y-1.5 p-6 pb-4", children: _jsx("h1", { className: "text-xl font-semibold tracking-tight", children: title ?? t("userDataRights.deletion.confirm.title") }) })),
|
|
36
40
|
}, children: _jsx("div", { className: "p-6 pt-0 flex flex-col gap-4", children: phase === "success" ? (_jsxs(Banner, { variant: "info", children: [_jsx("p", { className: "font-medium text-foreground", children: t("userDataRights.deletion.confirm.successTitle") }), _jsx("p", { className: "mt-1", children: t("userDataRights.deletion.confirm.successBody") })] })) : phase === "missing" ? (_jsx(Banner, { variant: "error", children: t("userDataRights.deletion.confirm.missingToken") })) : (_jsxs(_Fragment, { children: [_jsx("p", { className: "text-sm text-muted-foreground", children: t("userDataRights.deletion.confirm.intro") }), phase === "invalid" && (_jsx(Banner, { variant: "error", children: t("userDataRights.deletion.confirm.invalidToken") })), phase === "error" && (_jsx(Banner, { variant: "error", children: t("userDataRights.deletion.confirm.error") })), _jsx(Button, { type: "button", variant: "danger", loading: phase === "submitting", disabled: phase === "submitting", onClick: () => void doConfirm(), children: phase === "submitting"
|
|
37
41
|
? t("userDataRights.deletion.confirm.submitting")
|
|
@@ -41,7 +41,11 @@ export function RequestAccountDeletionScreen({ title, }) {
|
|
|
41
41
|
e?.preventDefault();
|
|
42
42
|
void doSubmit();
|
|
43
43
|
};
|
|
44
|
-
return (_jsx(Card
|
|
44
|
+
return (_jsx(Card
|
|
45
|
+
// kumiko-lint-ignore primitives-discipline narrow centered confirmation card, not a screen container
|
|
46
|
+
, {
|
|
47
|
+
// kumiko-lint-ignore primitives-discipline narrow centered confirmation card, not a screen container
|
|
48
|
+
className: "w-full max-w-sm mx-auto", options: { padded: false }, slots: {
|
|
45
49
|
header: (_jsx("div", { className: "flex flex-col space-y-1.5 p-6 pb-4", children: _jsx("h1", { className: "text-xl font-semibold tracking-tight", children: title ?? t("userDataRights.deletion.request.title") }) })),
|
|
46
50
|
}, children: done ? (_jsx("div", { className: "p-6 pt-0", children: _jsxs(Banner, { variant: "info", children: [_jsx("p", { className: "font-medium text-foreground", children: t("userDataRights.deletion.request.successTitle") }), _jsx("p", { className: "mt-1", children: t("userDataRights.deletion.request.successBody") })] }) })) : (_jsxs("div", { className: "p-6 pt-0 flex flex-col gap-4", children: [_jsx("p", { className: "text-sm text-muted-foreground", children: t("userDataRights.deletion.request.intro") }), _jsxs(Form, { onSubmit: onSubmit, children: [_jsx(Field, { id: "delete-email", label: t("userDataRights.deletion.request.email"), required: true, children: _jsx(Input, { kind: "text", id: "delete-email", name: "delete-email", value: email, onChange: setEmail, disabled: submitting, required: true }) }), error !== null && _jsx(Banner, { variant: "error", children: error }), _jsx(Button, { type: "submit", loading: submitting, disabled: submitting, children: submitting
|
|
47
51
|
? t("userDataRights.deletion.request.submitting")
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@cosmicdrift/kumiko-bundled-features",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.331.0",
|
|
4
4
|
"description": "Built-in features — tenant, user, auth, delivery. The stuff you'd rewrite anyway, already typed.",
|
|
5
5
|
"license": "BUSL-1.1",
|
|
6
6
|
"author": "Marc Frost <marc@cosmicdriftgamestudio.com>",
|
|
@@ -483,12 +483,12 @@
|
|
|
483
483
|
}
|
|
484
484
|
},
|
|
485
485
|
"dependencies": {
|
|
486
|
-
"@cosmicdrift/kumiko-dispatcher-live": "0.
|
|
487
|
-
"@cosmicdrift/kumiko-framework": "0.
|
|
488
|
-
"@cosmicdrift/kumiko-headless": "0.
|
|
489
|
-
"@cosmicdrift/kumiko-renderer": "0.
|
|
490
|
-
"@cosmicdrift/kumiko-renderer-web": "0.
|
|
491
|
-
"@cosmicdrift/kumiko-types": "0.
|
|
486
|
+
"@cosmicdrift/kumiko-dispatcher-live": "0.331.0",
|
|
487
|
+
"@cosmicdrift/kumiko-framework": "0.331.0",
|
|
488
|
+
"@cosmicdrift/kumiko-headless": "0.331.0",
|
|
489
|
+
"@cosmicdrift/kumiko-renderer": "0.331.0",
|
|
490
|
+
"@cosmicdrift/kumiko-renderer-web": "0.331.0",
|
|
491
|
+
"@cosmicdrift/kumiko-types": "0.331.0",
|
|
492
492
|
"@mollie/api-client": "^4.5.0",
|
|
493
493
|
"@node-rs/argon2": "^2.0.2",
|
|
494
494
|
"@types/mailparser": "^3.4.6",
|
|
@@ -983,8 +983,8 @@
|
|
|
983
983
|
],
|
|
984
984
|
"devDependencies": {
|
|
985
985
|
"@testing-library/user-event": "^14.6.1",
|
|
986
|
-
"@cosmicdrift/kumiko-locale-de": "0.
|
|
987
|
-
"@cosmicdrift/kumiko-locale-es": "0.
|
|
986
|
+
"@cosmicdrift/kumiko-locale-de": "0.331.0",
|
|
987
|
+
"@cosmicdrift/kumiko-locale-es": "0.331.0",
|
|
988
988
|
"jsqr": "^1.4.0"
|
|
989
989
|
}
|
|
990
990
|
}
|
package/src/ledger/changes.json
CHANGED
|
@@ -1,4 +1,11 @@
|
|
|
1
1
|
[
|
|
2
|
+
{
|
|
3
|
+
"version": "0.331.0",
|
|
4
|
+
"type": "improvement",
|
|
5
|
+
"title": "Ledger schedules get an optional filterable sourceRef field",
|
|
6
|
+
"detail": "`read_ledger_schedules` gets a nullable text column `source_ref` (max 128) plus the non-unique index `(tenant_id, source_ref)`. Callers set it on `createSchedule` / `updateSchedule` to find a schedule again without parsing `description`. Existing schedules keep `sourceRef = null`.",
|
|
7
|
+
"migration": "Run `kumiko schema generate`. For a new nullable column and a new non-unique index on a managed projection it emits an in-place `ALTER TABLE \"read_ledger_schedules\" ADD COLUMN \"source_ref\" text` plus a `CREATE INDEX`, with no DROP/CREATE and no `.rebuild.json`. No backfill: do not write the column with SQL. Old schedules stay at `sourceRef = null`, so callers should fall back to their previous lookup key for them."
|
|
8
|
+
},
|
|
2
9
|
{
|
|
3
10
|
"version": "0.320.0",
|
|
4
11
|
"type": "breaking",
|