@noodleseed/one 0.38.1 → 0.39.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/commands/billing-apply-ops.d.ts +2 -0
- package/dist/commands/billing-apply-ops.d.ts.map +1 -0
- package/dist/commands/billing-apply-ops.js +224 -0
- package/dist/commands/billing-apply-ops.js.map +1 -0
- package/dist/commands/billing-migration-files.d.ts +13 -0
- package/dist/commands/billing-migration-files.d.ts.map +1 -0
- package/dist/commands/billing-migration-files.js +84 -0
- package/dist/commands/billing-migration-files.js.map +1 -0
- package/dist/commands/billing-ops.d.ts +1 -1
- package/dist/commands/billing-ops.d.ts.map +1 -1
- package/dist/commands/billing-ops.js +8 -31
- package/dist/commands/billing-ops.js.map +1 -1
- package/dist/commands/catalog-data-resources.d.ts.map +1 -1
- package/dist/commands/catalog-data-resources.js +8 -2
- package/dist/commands/catalog-data-resources.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js.map +1 -1
- package/dist/widget-scaffold-template.d.ts.map +1 -1
- package/dist/widget-scaffold-template.js +9 -0
- package/dist/widget-scaffold-template.js.map +1 -1
- package/node_modules/@noodle-borg/agent-kit/dist/generated/example-files.js +3 -3
- package/node_modules/@noodle-borg/agent-kit/dist/generated/example-files.js.map +1 -1
- package/node_modules/@noodle-borg/agent-kit/dist/skill-embedded-assistant-ref.d.ts.map +1 -1
- package/node_modules/@noodle-borg/agent-kit/dist/skill-embedded-assistant-ref.js +28 -0
- package/node_modules/@noodle-borg/agent-kit/dist/skill-embedded-assistant-ref.js.map +1 -1
- package/node_modules/@noodle-borg/agent-kit/package.json +1 -1
- package/node_modules/@noodle-borg/authoring/dist/assistant.d.ts +44 -0
- package/node_modules/@noodle-borg/authoring/dist/assistant.d.ts.map +1 -1
- package/node_modules/@noodle-borg/authoring/dist/assistant.js.map +1 -1
- package/node_modules/@noodle-borg/authoring/dist/index.d.ts +1 -1
- package/node_modules/@noodle-borg/authoring/dist/index.d.ts.map +1 -1
- package/node_modules/@noodle-borg/authoring/dist/index.js.map +1 -1
- package/node_modules/@noodle-borg/authoring/dist/server.js +6 -1
- package/node_modules/@noodle-borg/authoring/dist/server.js.map +1 -1
- package/node_modules/@noodle-borg/compiler/dist/manifest/schema.d.ts +83 -0
- package/node_modules/@noodle-borg/compiler/dist/manifest/schema.d.ts.map +1 -1
- package/node_modules/@noodle-borg/compiler/dist/manifest/schema.js +82 -14
- package/node_modules/@noodle-borg/compiler/dist/manifest/schema.js.map +1 -1
- package/node_modules/@noodle-borg/module-audit/dist/index.d.ts +2 -1
- package/node_modules/@noodle-borg/module-audit/dist/index.d.ts.map +1 -1
- package/node_modules/@noodle-borg/module-audit/dist/index.js +1 -1
- package/node_modules/@noodle-borg/module-audit/dist/index.js.map +1 -1
- package/node_modules/@noodle-borg/module-audit/dist/postgres-audit.d.ts +12 -3
- package/node_modules/@noodle-borg/module-audit/dist/postgres-audit.d.ts.map +1 -1
- package/node_modules/@noodle-borg/module-audit/dist/postgres-audit.js +30 -20
- package/node_modules/@noodle-borg/module-audit/dist/postgres-audit.js.map +1 -1
- package/node_modules/@noodle-borg/service/dist/billing/migration-apply.d.ts +98 -0
- package/node_modules/@noodle-borg/service/dist/billing/migration-apply.d.ts.map +1 -0
- package/node_modules/@noodle-borg/service/dist/billing/migration-apply.js +194 -0
- package/node_modules/@noodle-borg/service/dist/billing/migration-apply.js.map +1 -0
- package/node_modules/@noodle-borg/service/dist/billing/migration-contract.d.ts +79 -0
- package/node_modules/@noodle-borg/service/dist/billing/migration-contract.d.ts.map +1 -0
- package/node_modules/@noodle-borg/service/dist/billing/migration-contract.js +86 -0
- package/node_modules/@noodle-borg/service/dist/billing/migration-contract.js.map +1 -0
- package/node_modules/@noodle-borg/service/dist/billing/migration.d.ts +4 -75
- package/node_modules/@noodle-borg/service/dist/billing/migration.d.ts.map +1 -1
- package/node_modules/@noodle-borg/service/dist/billing/migration.js +19 -74
- package/node_modules/@noodle-borg/service/dist/billing/migration.js.map +1 -1
- package/node_modules/@noodle-borg/service/dist/billing/postgres-migration-support.d.ts +36 -0
- package/node_modules/@noodle-borg/service/dist/billing/postgres-migration-support.d.ts.map +1 -0
- package/node_modules/@noodle-borg/service/dist/billing/postgres-migration-support.js +122 -0
- package/node_modules/@noodle-borg/service/dist/billing/postgres-migration-support.js.map +1 -0
- package/node_modules/@noodle-borg/service/dist/billing/postgres-migration.d.ts +9 -0
- package/node_modules/@noodle-borg/service/dist/billing/postgres-migration.d.ts.map +1 -0
- package/node_modules/@noodle-borg/service/dist/billing/postgres-migration.js +265 -0
- package/node_modules/@noodle-borg/service/dist/billing/postgres-migration.js.map +1 -0
- package/node_modules/@noodle-borg/service/dist/billing/postgres-schema.d.ts.map +1 -1
- package/node_modules/@noodle-borg/service/dist/billing/postgres-schema.js +63 -0
- package/node_modules/@noodle-borg/service/dist/billing/postgres-schema.js.map +1 -1
- package/node_modules/@noodle-borg/service/dist/billing/postgres.d.ts +7 -0
- package/node_modules/@noodle-borg/service/dist/billing/postgres.d.ts.map +1 -1
- package/node_modules/@noodle-borg/service/dist/billing/postgres.js +21 -9
- package/node_modules/@noodle-borg/service/dist/billing/postgres.js.map +1 -1
- package/node_modules/@noodle-borg/service/dist/index.d.ts +2 -1
- package/node_modules/@noodle-borg/service/dist/index.d.ts.map +1 -1
- package/node_modules/@noodle-borg/service/dist/index.js +2 -1
- package/node_modules/@noodle-borg/service/dist/index.js.map +1 -1
- package/node_modules/@noodle-borg/service/dist/modules/host.js +3 -0
- package/node_modules/@noodle-borg/service/dist/modules/host.js.map +1 -1
- package/node_modules/@noodle-borg/service/dist/options.d.ts +13 -4
- package/node_modules/@noodle-borg/service/dist/options.d.ts.map +1 -1
- package/node_modules/@noodle-borg/service/dist/routes/billing.d.ts +10 -1
- package/node_modules/@noodle-borg/service/dist/routes/billing.d.ts.map +1 -1
- package/node_modules/@noodle-borg/service/dist/routes/billing.js +89 -0
- package/node_modules/@noodle-borg/service/dist/routes/billing.js.map +1 -1
- package/node_modules/@noodle-borg/service/dist/routes/commercial-dispatch.d.ts +3 -0
- package/node_modules/@noodle-borg/service/dist/routes/commercial-dispatch.d.ts.map +1 -1
- package/node_modules/@noodle-borg/service/dist/routes/commercial-dispatch.js +20 -1
- package/node_modules/@noodle-borg/service/dist/routes/commercial-dispatch.js.map +1 -1
- package/node_modules/@noodle-borg/service/dist/serve.d.ts.map +1 -1
- package/node_modules/@noodle-borg/service/dist/serve.js +20 -6
- package/node_modules/@noodle-borg/service/dist/serve.js.map +1 -1
- package/node_modules/@noodle-borg/service/dist/service.d.ts.map +1 -1
- package/node_modules/@noodle-borg/service/dist/service.js +7 -4
- package/node_modules/@noodle-borg/service/dist/service.js.map +1 -1
- package/node_modules/@noodle-borg/service/dist/store/audit.d.ts +8 -0
- package/node_modules/@noodle-borg/service/dist/store/audit.d.ts.map +1 -1
- package/node_modules/@noodle-borg/service/dist/store/audit.js +15 -0
- package/node_modules/@noodle-borg/service/dist/store/audit.js.map +1 -1
- package/node_modules/@noodle-borg/service/dist/store/postgres-apps.d.ts +4 -2
- package/node_modules/@noodle-borg/service/dist/store/postgres-apps.d.ts.map +1 -1
- package/node_modules/@noodle-borg/service/dist/store/postgres-apps.js.map +1 -1
- package/node_modules/@noodle-borg/service/dist/store/postgres-billing.d.ts +11 -0
- package/node_modules/@noodle-borg/service/dist/store/postgres-billing.d.ts.map +1 -0
- package/node_modules/@noodle-borg/service/dist/store/postgres-billing.js +17 -0
- package/node_modules/@noodle-borg/service/dist/store/postgres-billing.js.map +1 -0
- package/node_modules/@noodle-borg/service/dist/store/postgres-schema.d.ts.map +1 -1
- package/node_modules/@noodle-borg/service/dist/store/postgres-schema.js +2 -0
- package/node_modules/@noodle-borg/service/dist/store/postgres-schema.js.map +1 -1
- package/node_modules/@noodle-borg/service/dist/store/postgres.d.ts +2 -2
- package/node_modules/@noodle-borg/service/dist/store/postgres.d.ts.map +1 -1
- package/node_modules/@noodle-borg/service/dist/store/postgres.js +2 -2
- package/node_modules/@noodle-borg/service/dist/store/postgres.js.map +1 -1
- package/node_modules/@noodle-borg/wire-contracts/dist/assistant.d.ts +3 -2
- package/node_modules/@noodle-borg/wire-contracts/dist/assistant.d.ts.map +1 -1
- package/node_modules/@noodle-borg/wire-contracts/dist/assistant.js +3 -2
- package/node_modules/@noodle-borg/wire-contracts/dist/assistant.js.map +1 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"migration.js","sourceRoot":"","sources":["../../src/billing/migration.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"migration.js","sourceRoot":"","sources":["../../src/billing/migration.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import type { PoolClient } from 'pg';
|
|
2
|
+
import type { OrgMemberRecord, OrgRecord } from '../store.js';
|
|
3
|
+
import type { previewLegacyBillingMigration } from './migration.js';
|
|
4
|
+
import type { LegacyBillingMigrationApplyResult } from './migration-apply.js';
|
|
5
|
+
export declare const LEGACY_BILLING_MIGRATION_KIND = "hosted-default-free-v1";
|
|
6
|
+
export declare function transactionalLegacyMigrationControlPlane(client: PoolClient): {
|
|
7
|
+
listOrgs: () => Promise<readonly OrgRecord[]>;
|
|
8
|
+
listOrgMembers: (org: string) => Promise<readonly OrgMemberRecord[]>;
|
|
9
|
+
getOrgBillingLink: (org: string) => Promise<import("./model.js").OrgBillingLinkRecord | undefined>;
|
|
10
|
+
getDefaultBillingAccount: (identity: {
|
|
11
|
+
readonly identityIssuer: string;
|
|
12
|
+
readonly subject: string;
|
|
13
|
+
}) => Promise<import("./model.js").BillingAccountRecord | undefined>;
|
|
14
|
+
};
|
|
15
|
+
export declare function transactionalLegacyMigrationInventory(client: PoolClient): {
|
|
16
|
+
getAppIdentity: (org: string, app: string) => Promise<{
|
|
17
|
+
archivedAt?: string;
|
|
18
|
+
createdAt: string;
|
|
19
|
+
active: boolean;
|
|
20
|
+
} | undefined>;
|
|
21
|
+
};
|
|
22
|
+
export declare function previewOrganizationSlugs(preview: Awaited<ReturnType<typeof previewLegacyBillingMigration>>): readonly string[];
|
|
23
|
+
export declare function findPreparationByIdempotencyKey(client: PoolClient, key: string): Promise<PreparationRow | undefined>;
|
|
24
|
+
export declare function findPreparationByKind(client: PoolClient): Promise<PreparationRow | undefined>;
|
|
25
|
+
export declare function findPreparationById(client: PoolClient, id: string): Promise<PreparationRow | undefined>;
|
|
26
|
+
export declare function preparationResult(client: PoolClient, row: PreparationRow, replayed: boolean): Promise<LegacyBillingMigrationApplyResult>;
|
|
27
|
+
interface PreparationRow {
|
|
28
|
+
readonly id: string;
|
|
29
|
+
readonly request_fingerprint: string;
|
|
30
|
+
readonly mapping_checksum: string;
|
|
31
|
+
readonly preview_checksum: string;
|
|
32
|
+
readonly plan_evidence_checksum: string;
|
|
33
|
+
readonly prepared_at: Date | string;
|
|
34
|
+
}
|
|
35
|
+
export {};
|
|
36
|
+
//# sourceMappingURL=postgres-migration-support.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"postgres-migration-support.d.ts","sourceRoot":"","sources":["../../src/billing/postgres-migration-support.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,IAAI,CAAC;AAGrC,OAAO,KAAK,EAAE,eAAe,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAC9D,OAAO,KAAK,EAAE,6BAA6B,EAAE,MAAM,gBAAgB,CAAC;AACpE,OAAO,KAAK,EAAE,iCAAiC,EAAE,MAAM,sBAAsB,CAAC;AAG9E,eAAO,MAAM,6BAA6B,2BAA2B,CAAC;AAEtE,wBAAgB,wCAAwC,CAAC,MAAM,EAAE,UAAU;oBAEnD,OAAO,CAAC,SAAS,SAAS,EAAE,CAAC;0BAQrB,MAAM,KAAG,OAAO,CAAC,SAAS,eAAe,EAAE,CAAC;6BAa/C,MAAM;yCACM;QACnC,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;QAChC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;KAC1B;EAEJ;AAED,wBAAgB,qCAAqC,CAAC,MAAM,EAAE,UAAU;0BAExC,MAAM,OAAO,MAAM;;;;;EAWlD;AAED,wBAAgB,wBAAwB,CACtC,OAAO,EAAE,OAAO,CAAC,UAAU,CAAC,OAAO,6BAA6B,CAAC,CAAC,GACjE,SAAS,MAAM,EAAE,CAKnB;AAED,wBAAsB,+BAA+B,CAAC,MAAM,EAAE,UAAU,EAAE,GAAG,EAAE,MAAM,uCAMpF;AAED,wBAAsB,qBAAqB,CAAC,MAAM,EAAE,UAAU,uCAM7D;AAED,wBAAsB,mBAAmB,CAAC,MAAM,EAAE,UAAU,EAAE,EAAE,EAAE,MAAM,uCAMvE;AAED,wBAAsB,iBAAiB,CACrC,MAAM,EAAE,UAAU,EAClB,GAAG,EAAE,cAAc,EACnB,QAAQ,EAAE,OAAO,GAChB,OAAO,CAAC,iCAAiC,CAAC,CAuD5C;AAgCD,UAAU,cAAc;IACtB,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,mBAAmB,EAAE,MAAM,CAAC;IACrC,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC;IAClC,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC;IAClC,QAAQ,CAAC,sBAAsB,EAAE,MAAM,CAAC;IACxC,QAAQ,CAAC,WAAW,EAAE,IAAI,GAAG,MAAM,CAAC;CACrC"}
|
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
import { getAppRow } from '../store/postgres-apps.js';
|
|
2
|
+
import { validateOrgRole } from '../store/validate.js';
|
|
3
|
+
import { getDefaultBillingAccountQuery, getOrgBillingLinkQuery } from './postgres.js';
|
|
4
|
+
export const LEGACY_BILLING_MIGRATION_KIND = 'hosted-default-free-v1';
|
|
5
|
+
export function transactionalLegacyMigrationControlPlane(client) {
|
|
6
|
+
return {
|
|
7
|
+
listOrgs: async () => {
|
|
8
|
+
const { rows } = await client.query('SELECT * FROM orgs ORDER BY slug');
|
|
9
|
+
return rows.map((row) => ({
|
|
10
|
+
slug: row.slug,
|
|
11
|
+
...(row.display_name !== null ? { displayName: row.display_name } : {}),
|
|
12
|
+
createdAt: toIso(row.created_at),
|
|
13
|
+
}));
|
|
14
|
+
},
|
|
15
|
+
listOrgMembers: async (org) => {
|
|
16
|
+
const { rows } = await client.query('SELECT * FROM org_members WHERE org_slug = $1 ORDER BY email', [org]);
|
|
17
|
+
return rows.map((row) => ({
|
|
18
|
+
orgSlug: row.org_slug,
|
|
19
|
+
subject: row.subject,
|
|
20
|
+
email: row.email,
|
|
21
|
+
role: validateOrgRole(row.role),
|
|
22
|
+
createdAt: toIso(row.created_at),
|
|
23
|
+
}));
|
|
24
|
+
},
|
|
25
|
+
getOrgBillingLink: (org) => getOrgBillingLinkQuery(client, org),
|
|
26
|
+
getDefaultBillingAccount: (identity) => getDefaultBillingAccountQuery(client, identity),
|
|
27
|
+
};
|
|
28
|
+
}
|
|
29
|
+
export function transactionalLegacyMigrationInventory(client) {
|
|
30
|
+
return {
|
|
31
|
+
getAppIdentity: async (org, app) => {
|
|
32
|
+
const current = await getAppRow(client, org, app);
|
|
33
|
+
return current === undefined
|
|
34
|
+
? undefined
|
|
35
|
+
: {
|
|
36
|
+
createdAt: current.createdAt,
|
|
37
|
+
active: current.active,
|
|
38
|
+
...(current.archivedAt !== undefined ? { archivedAt: current.archivedAt } : {}),
|
|
39
|
+
};
|
|
40
|
+
},
|
|
41
|
+
};
|
|
42
|
+
}
|
|
43
|
+
export function previewOrganizationSlugs(preview) {
|
|
44
|
+
return [
|
|
45
|
+
...preview.organizations.map((org) => org.org),
|
|
46
|
+
...preview.linkedOrganizations.map((org) => org.org),
|
|
47
|
+
];
|
|
48
|
+
}
|
|
49
|
+
export async function findPreparationByIdempotencyKey(client, key) {
|
|
50
|
+
const { rows } = await client.query('SELECT * FROM billing_legacy_migration_preparations WHERE idempotency_key = $1', [key]);
|
|
51
|
+
return rows[0];
|
|
52
|
+
}
|
|
53
|
+
export async function findPreparationByKind(client) {
|
|
54
|
+
const { rows } = await client.query('SELECT * FROM billing_legacy_migration_preparations WHERE migration_kind = $1', [LEGACY_BILLING_MIGRATION_KIND]);
|
|
55
|
+
return rows[0];
|
|
56
|
+
}
|
|
57
|
+
export async function findPreparationById(client, id) {
|
|
58
|
+
const { rows } = await client.query('SELECT * FROM billing_legacy_migration_preparations WHERE id = $1', [id]);
|
|
59
|
+
return rows[0];
|
|
60
|
+
}
|
|
61
|
+
export async function preparationResult(client, row, replayed) {
|
|
62
|
+
const { rows: accountRows } = await client.query(`SELECT * FROM billing_legacy_migration_accounts
|
|
63
|
+
WHERE migration_id = $1 ORDER BY billing_account_id`, [row.id]);
|
|
64
|
+
const { rows: linkRows } = await client.query(`SELECT * FROM billing_legacy_migration_organizations
|
|
65
|
+
WHERE migration_id = $1 ORDER BY org_slug`, [row.id]);
|
|
66
|
+
return {
|
|
67
|
+
schemaVersion: 1,
|
|
68
|
+
migrationId: row.id,
|
|
69
|
+
mode: 'shadow',
|
|
70
|
+
state: 'prepared',
|
|
71
|
+
replayed,
|
|
72
|
+
preparedAt: toIso(row.prepared_at),
|
|
73
|
+
enforcementMode: 'legacy_unchanged',
|
|
74
|
+
meteringMode: 'not_started',
|
|
75
|
+
grantMode: 'pending_activation',
|
|
76
|
+
mappingChecksum: row.mapping_checksum,
|
|
77
|
+
previewChecksum: row.preview_checksum,
|
|
78
|
+
planEvidenceChecksum: row.plan_evidence_checksum,
|
|
79
|
+
counts: {
|
|
80
|
+
organizations: linkRows.length,
|
|
81
|
+
accountsCreated: accountRows.filter((account) => account.account_disposition === 'created')
|
|
82
|
+
.length,
|
|
83
|
+
accountsReused: accountRows.filter((account) => account.account_disposition === 'existing')
|
|
84
|
+
.length,
|
|
85
|
+
linksCreated: linkRows.filter((link) => link.link_disposition === 'created').length,
|
|
86
|
+
linksPreserved: linkRows.filter((link) => link.link_disposition === 'preserved').length,
|
|
87
|
+
productionApps: accountRows.reduce((total, account) => total + account.production_app_count, 0),
|
|
88
|
+
grantCandidateFundingSets: accountRows.filter((account) => account.grant_candidate_at_preparation).length,
|
|
89
|
+
},
|
|
90
|
+
fundingSets: accountRows.map((account) => ({
|
|
91
|
+
billingAccountId: account.billing_account_id,
|
|
92
|
+
accountDisposition: accountDisposition(account.account_disposition),
|
|
93
|
+
snapshotId: account.snapshot_id,
|
|
94
|
+
organizations: account.organization_count,
|
|
95
|
+
productionApps: account.production_app_count,
|
|
96
|
+
grantCandidate: account.grant_candidate_at_preparation,
|
|
97
|
+
})),
|
|
98
|
+
links: linkRows.map((link) => ({
|
|
99
|
+
org: link.org_slug,
|
|
100
|
+
billingAccountId: link.billing_account_id,
|
|
101
|
+
version: link.link_version,
|
|
102
|
+
disposition: linkDisposition(link.link_disposition),
|
|
103
|
+
})),
|
|
104
|
+
};
|
|
105
|
+
}
|
|
106
|
+
function accountDisposition(value) {
|
|
107
|
+
if (value !== 'created' && value !== 'existing')
|
|
108
|
+
throw new Error('invalid account disposition');
|
|
109
|
+
return value;
|
|
110
|
+
}
|
|
111
|
+
function linkDisposition(value) {
|
|
112
|
+
if (value !== 'created' && value !== 'preserved')
|
|
113
|
+
throw new Error('invalid link disposition');
|
|
114
|
+
return value;
|
|
115
|
+
}
|
|
116
|
+
function toIso(value) {
|
|
117
|
+
const date = value instanceof Date ? value : new Date(value);
|
|
118
|
+
if (!Number.isFinite(date.getTime()))
|
|
119
|
+
throw new Error('invalid migration timestamp');
|
|
120
|
+
return date.toISOString();
|
|
121
|
+
}
|
|
122
|
+
//# sourceMappingURL=postgres-migration-support.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"postgres-migration-support.js","sourceRoot":"","sources":["../../src/billing/postgres-migration-support.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { Pool } from 'pg';
|
|
2
|
+
import type { ControlPlaneIdentity } from '../auth/deploy-gate.js';
|
|
3
|
+
import { type LegacyBillingMigrationApplyRequest, type LegacyBillingMigrationApplyResult } from './migration-apply.js';
|
|
4
|
+
export declare function prepareLegacyBillingMigrationRow(pool: Pool, input: {
|
|
5
|
+
readonly request: LegacyBillingMigrationApplyRequest;
|
|
6
|
+
readonly actor: ControlPlaneIdentity;
|
|
7
|
+
readonly service: string;
|
|
8
|
+
}, now: () => Date): Promise<LegacyBillingMigrationApplyResult>;
|
|
9
|
+
//# sourceMappingURL=postgres-migration.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"postgres-migration.d.ts","sourceRoot":"","sources":["../../src/billing/postgres-migration.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,IAAI,EAAc,MAAM,IAAI,CAAC;AAC3C,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAMnE,OAAO,EACL,KAAK,kCAAkC,EACvC,KAAK,iCAAiC,EAOvC,MAAM,sBAAsB,CAAC;AA+C9B,wBAAsB,gCAAgC,CACpD,IAAI,EAAE,IAAI,EACV,KAAK,EAAE;IACL,QAAQ,CAAC,OAAO,EAAE,kCAAkC,CAAC;IACrD,QAAQ,CAAC,KAAK,EAAE,oBAAoB,CAAC;IACrC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;CAC1B,EACD,GAAG,EAAE,MAAM,IAAI,GACd,OAAO,CAAC,iCAAiC,CAAC,CAgQ5C"}
|
|
@@ -0,0 +1,265 @@
|
|
|
1
|
+
import { randomUUID } from 'node:crypto';
|
|
2
|
+
import { insertAuditEvent } from '@noodle-borg/module-audit';
|
|
3
|
+
import { commercialPlanPolicyId } from '../commercial-plans.js';
|
|
4
|
+
import { legacyBillingMigrationMappingChecksum, previewLegacyBillingMigration, } from './migration.js';
|
|
5
|
+
import { LegacyBillingMigrationConflictError, legacyBillingMigrationPlanEvidenceChecksum, legacyBillingMigrationRequestFingerprint, legacyBillingMigrationSuccessAudit, normalizeBillingMigrationServiceUrl, parseLegacyBillingMigrationApplyRequest, } from './migration-apply.js';
|
|
6
|
+
import { GOOGLE_CONTROL_PLANE_ISSUER, normalizeBillingEmail, normalizeBillingIdentity, } from './model.js';
|
|
7
|
+
import { ensureDefaultBillingAccountForLegacyMigrationTx, ensureOrgBillingLinkTx, getActiveEntitlementSnapshotQuery, getBillingAccountQuery, getDefaultBillingAccountQuery, getOrgBillingLinkQuery, } from './postgres.js';
|
|
8
|
+
import { findPreparationById, findPreparationByIdempotencyKey, findPreparationByKind, LEGACY_BILLING_MIGRATION_KIND, preparationResult, previewOrganizationSlugs, transactionalLegacyMigrationControlPlane, transactionalLegacyMigrationInventory, } from './postgres-migration-support.js';
|
|
9
|
+
const TABLE_LOCKS = [
|
|
10
|
+
'orgs',
|
|
11
|
+
'org_members',
|
|
12
|
+
'apps',
|
|
13
|
+
'environments',
|
|
14
|
+
'deploy_records',
|
|
15
|
+
'policy_assignments',
|
|
16
|
+
'billing_plan_versions',
|
|
17
|
+
'billing_accounts',
|
|
18
|
+
'billing_account_defaults',
|
|
19
|
+
'billing_account_members',
|
|
20
|
+
'billing_entitlement_snapshots',
|
|
21
|
+
'billing_account_active_snapshots',
|
|
22
|
+
'org_billing_home_accounts',
|
|
23
|
+
'org_billing_links',
|
|
24
|
+
'billing_legacy_migration_preparations',
|
|
25
|
+
'billing_legacy_migration_accounts',
|
|
26
|
+
'billing_legacy_migration_organizations',
|
|
27
|
+
'billing_legacy_migration_apps',
|
|
28
|
+
'billing_legacy_migration_plan_evidence',
|
|
29
|
+
].join(', ');
|
|
30
|
+
export async function prepareLegacyBillingMigrationRow(pool, input, now) {
|
|
31
|
+
const request = parseLegacyBillingMigrationApplyRequest(input.request);
|
|
32
|
+
const service = normalizeBillingMigrationServiceUrl(input.service);
|
|
33
|
+
if (request.legacyPlanEvidence.service !== service) {
|
|
34
|
+
throw new LegacyBillingMigrationConflictError('legacy_plan_evidence_drift', 'legacy plan evidence targets a different service');
|
|
35
|
+
}
|
|
36
|
+
const actorIdentity = normalizeBillingIdentity({
|
|
37
|
+
identityIssuer: GOOGLE_CONTROL_PLANE_ISSUER,
|
|
38
|
+
subject: input.actor.subject,
|
|
39
|
+
});
|
|
40
|
+
const actor = {
|
|
41
|
+
subject: actorIdentity.subject,
|
|
42
|
+
email: normalizeBillingEmail(input.actor.email),
|
|
43
|
+
};
|
|
44
|
+
const mappingChecksum = legacyBillingMigrationMappingChecksum(request.mappings);
|
|
45
|
+
const planEvidenceChecksum = legacyBillingMigrationPlanEvidenceChecksum(request.legacyPlanEvidence);
|
|
46
|
+
const requestFingerprint = legacyBillingMigrationRequestFingerprint(request, actor, service);
|
|
47
|
+
const client = await pool.connect();
|
|
48
|
+
try {
|
|
49
|
+
// READ COMMITTED lets a waiter observe the predecessor's committed replay row after the
|
|
50
|
+
// transaction-scoped migration lock releases. EXCLUSIVE table locks freeze every source table
|
|
51
|
+
// before preview revalidation and wait behind in-flight SELECT ... FOR UPDATE writers. Migration
|
|
52
|
+
// intentionally takes no default-owner advisory locks: signup writes org tables before acquiring
|
|
53
|
+
// those locks, so mixing both lock orders here would create an inversion.
|
|
54
|
+
await client.query('BEGIN ISOLATION LEVEL READ COMMITTED');
|
|
55
|
+
await client.query('SELECT pg_advisory_xact_lock(hashtextextended($1, 0))', [
|
|
56
|
+
'billing-legacy-shadow-prepare:v1',
|
|
57
|
+
]);
|
|
58
|
+
const keyed = await findPreparationByIdempotencyKey(client, request.idempotencyKey);
|
|
59
|
+
if (keyed !== undefined) {
|
|
60
|
+
if (keyed.request_fingerprint !== requestFingerprint) {
|
|
61
|
+
throw new LegacyBillingMigrationConflictError('idempotency_key_conflict', 'idempotency key was already used by a different request or actor');
|
|
62
|
+
}
|
|
63
|
+
const replay = await preparationResult(client, keyed, true);
|
|
64
|
+
await insertAuditEvent(client, legacyBillingMigrationSuccessAudit(replay, actor), { now });
|
|
65
|
+
await client.query('COMMIT');
|
|
66
|
+
return replay;
|
|
67
|
+
}
|
|
68
|
+
const existing = await findPreparationByKind(client);
|
|
69
|
+
if (existing !== undefined) {
|
|
70
|
+
throw new LegacyBillingMigrationConflictError('migration_already_prepared', 'legacy billing migration was already prepared under a different idempotency key');
|
|
71
|
+
}
|
|
72
|
+
await client.query(`LOCK TABLE ${TABLE_LOCKS} IN EXCLUSIVE MODE`);
|
|
73
|
+
const preview = await previewLegacyBillingMigration(transactionalLegacyMigrationControlPlane(client), { schemaVersion: 1, mappings: request.mappings }, transactionalLegacyMigrationInventory(client));
|
|
74
|
+
if (!preview.ready) {
|
|
75
|
+
throw new LegacyBillingMigrationConflictError('preview_not_ready', 'legacy billing migration preview is no longer ready');
|
|
76
|
+
}
|
|
77
|
+
if (preview.previewChecksum !== request.expectedPreviewChecksum) {
|
|
78
|
+
throw new LegacyBillingMigrationConflictError('preview_checksum_mismatch', 'approved preview no longer matches current state');
|
|
79
|
+
}
|
|
80
|
+
await validateDefaultFreePlanEvidence(client, request, previewOrganizationSlugs(preview));
|
|
81
|
+
const preparedAt = now();
|
|
82
|
+
const migrationId = `bm_${randomUUID()}`;
|
|
83
|
+
await client.query(`INSERT INTO billing_legacy_migration_preparations
|
|
84
|
+
(id, migration_kind, schema_version, mode, state, idempotency_key,
|
|
85
|
+
request_fingerprint, mapping_checksum, preview_checksum, plan_evidence_checksum,
|
|
86
|
+
prepared_at, prepared_by_subject, prepared_by_email, reason)
|
|
87
|
+
VALUES ($1, $2, 1, 'shadow', 'prepared', $3, $4, $5, $6, $7, $8, $9, $10, $11)`, [
|
|
88
|
+
migrationId,
|
|
89
|
+
LEGACY_BILLING_MIGRATION_KIND,
|
|
90
|
+
request.idempotencyKey,
|
|
91
|
+
requestFingerprint,
|
|
92
|
+
mappingChecksum,
|
|
93
|
+
preview.previewChecksum,
|
|
94
|
+
planEvidenceChecksum,
|
|
95
|
+
preparedAt,
|
|
96
|
+
actor.subject,
|
|
97
|
+
actor.email,
|
|
98
|
+
request.reason,
|
|
99
|
+
]);
|
|
100
|
+
const mappingByOrg = new Map(request.mappings.map((mapping) => [mapping.org, mapping]));
|
|
101
|
+
const unlinkedByOrg = new Map(preview.organizations.map((org) => [org.org, org]));
|
|
102
|
+
for (const fundingSet of preview.fundingSets) {
|
|
103
|
+
let billingAccountId;
|
|
104
|
+
let accountDisposition;
|
|
105
|
+
if (fundingSet.destination.kind === 'existing') {
|
|
106
|
+
billingAccountId = fundingSet.destination.billingAccountId;
|
|
107
|
+
accountDisposition = 'existing';
|
|
108
|
+
}
|
|
109
|
+
else {
|
|
110
|
+
const destination = fundingSet.destination;
|
|
111
|
+
const owner = preview.organizations.find((org) => org.mappedOwnerSubject === destination.subject);
|
|
112
|
+
const email = owner?.ownerCandidates.find((candidate) => candidate.subject === destination.subject)?.email;
|
|
113
|
+
if (email === undefined) {
|
|
114
|
+
throw new LegacyBillingMigrationConflictError('preview_not_ready', 'prepared funding destination no longer has a selected owner email');
|
|
115
|
+
}
|
|
116
|
+
const account = await ensureDefaultBillingAccountForLegacyMigrationTx(client, {
|
|
117
|
+
identityIssuer: destination.identityIssuer,
|
|
118
|
+
subject: destination.subject,
|
|
119
|
+
email,
|
|
120
|
+
}, preparedAt);
|
|
121
|
+
billingAccountId = account.id;
|
|
122
|
+
accountDisposition = 'created';
|
|
123
|
+
}
|
|
124
|
+
for (const org of fundingSet.organizations) {
|
|
125
|
+
const mapping = mappingByOrg.get(org);
|
|
126
|
+
if (mapping === undefined) {
|
|
127
|
+
throw new LegacyBillingMigrationConflictError('preview_not_ready', 'ready preview contains an organization without a mapping');
|
|
128
|
+
}
|
|
129
|
+
let link;
|
|
130
|
+
let disposition;
|
|
131
|
+
if (mapping.linkState === 'linked') {
|
|
132
|
+
link = await getOrgBillingLinkQuery(client, org);
|
|
133
|
+
disposition = 'preserved';
|
|
134
|
+
}
|
|
135
|
+
else {
|
|
136
|
+
const previewOrg = unlinkedByOrg.get(org);
|
|
137
|
+
const selected = previewOrg?.ownerCandidates.find((owner) => owner.subject === mapping.defaultBillingOwnerSubject);
|
|
138
|
+
if (selected === undefined) {
|
|
139
|
+
throw new LegacyBillingMigrationConflictError('preview_not_ready', 'mapped organization owner is no longer available');
|
|
140
|
+
}
|
|
141
|
+
link = await ensureOrgBillingLinkTx(client, {
|
|
142
|
+
org,
|
|
143
|
+
billingAccountId,
|
|
144
|
+
homeFreeBillingAccountId: billingAccountId,
|
|
145
|
+
homeOwner: {
|
|
146
|
+
identityIssuer: GOOGLE_CONTROL_PLANE_ISSUER,
|
|
147
|
+
subject: selected.subject,
|
|
148
|
+
},
|
|
149
|
+
linkedBy: actorIdentity,
|
|
150
|
+
reason: request.reason,
|
|
151
|
+
}, preparedAt);
|
|
152
|
+
disposition = 'created';
|
|
153
|
+
}
|
|
154
|
+
if (link === undefined || link.billingAccountId !== billingAccountId) {
|
|
155
|
+
throw new LegacyBillingMigrationConflictError('incomplete_billing_destination', 'organization billing link does not match its prepared funding destination');
|
|
156
|
+
}
|
|
157
|
+
await validateLinkedDefaultFreeTuple(client, link);
|
|
158
|
+
await client.query(`INSERT INTO billing_legacy_migration_organizations
|
|
159
|
+
(migration_id, org_slug, billing_account_id, link_disposition, link_version,
|
|
160
|
+
home_owner_identity_issuer, home_owner_subject)
|
|
161
|
+
VALUES ($1, $2, $3, $4, $5, $6, $7)`, [
|
|
162
|
+
migrationId,
|
|
163
|
+
org,
|
|
164
|
+
billingAccountId,
|
|
165
|
+
disposition,
|
|
166
|
+
link.version,
|
|
167
|
+
link.homeOwner.identityIssuer,
|
|
168
|
+
link.homeOwner.subject,
|
|
169
|
+
]);
|
|
170
|
+
}
|
|
171
|
+
const snapshot = await completeDefaultFreeSnapshot(client, billingAccountId);
|
|
172
|
+
const capacity = productionCapacity(snapshot.entitlements['apps.production.max']);
|
|
173
|
+
const grantCandidate = fundingSet.productionApps.length > capacity;
|
|
174
|
+
await client.query(`INSERT INTO billing_legacy_migration_accounts
|
|
175
|
+
(migration_id, billing_account_id, account_disposition, snapshot_id,
|
|
176
|
+
organization_count, production_app_count, production_capacity,
|
|
177
|
+
grant_candidate_at_preparation)
|
|
178
|
+
VALUES ($1, $2, $3, $4, $5, $6, $7, $8)`, [
|
|
179
|
+
migrationId,
|
|
180
|
+
billingAccountId,
|
|
181
|
+
accountDisposition,
|
|
182
|
+
snapshot.id,
|
|
183
|
+
fundingSet.organizations.length,
|
|
184
|
+
fundingSet.productionApps.length,
|
|
185
|
+
capacity,
|
|
186
|
+
grantCandidate,
|
|
187
|
+
]);
|
|
188
|
+
for (const app of fundingSet.productionApps) {
|
|
189
|
+
await client.query(`INSERT INTO billing_legacy_migration_apps
|
|
190
|
+
(migration_id, billing_account_id, org_slug, app_slug, app_created_at)
|
|
191
|
+
VALUES ($1, $2, $3, $4, $5)`, [migrationId, billingAccountId, app.org, app.app, app.createdAt]);
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
for (const projection of request.legacyPlanEvidence.projections) {
|
|
195
|
+
await client.query(`INSERT INTO billing_legacy_migration_plan_evidence
|
|
196
|
+
(migration_id, org_slug, source, plan_code, plan_state)
|
|
197
|
+
VALUES ($1, $2, 'default', 'free', 'active')`, [migrationId, projection.org]);
|
|
198
|
+
}
|
|
199
|
+
const stored = await findPreparationById(client, migrationId);
|
|
200
|
+
if (stored === undefined)
|
|
201
|
+
throw new Error('prepared billing migration record was not persisted');
|
|
202
|
+
const result = await preparationResult(client, stored, false);
|
|
203
|
+
await insertAuditEvent(client, legacyBillingMigrationSuccessAudit(result, actor), { now });
|
|
204
|
+
await client.query('COMMIT');
|
|
205
|
+
return result;
|
|
206
|
+
}
|
|
207
|
+
catch (error) {
|
|
208
|
+
await client.query('ROLLBACK').catch(() => undefined);
|
|
209
|
+
const code = postgresErrorCode(error);
|
|
210
|
+
if (code === '40001' || code === '40P01') {
|
|
211
|
+
throw new LegacyBillingMigrationConflictError('serialization_conflict', 'billing migration state changed concurrently; retry the exact request');
|
|
212
|
+
}
|
|
213
|
+
throw error;
|
|
214
|
+
}
|
|
215
|
+
finally {
|
|
216
|
+
client.release();
|
|
217
|
+
}
|
|
218
|
+
}
|
|
219
|
+
async function validateDefaultFreePlanEvidence(client, request, authoritativeOrganizations) {
|
|
220
|
+
const evidenceOrganizations = request.legacyPlanEvidence.projections
|
|
221
|
+
.map((projection) => projection.org)
|
|
222
|
+
.sort();
|
|
223
|
+
if (JSON.stringify(evidenceOrganizations) !== JSON.stringify([...authoritativeOrganizations].sort())) {
|
|
224
|
+
throw new LegacyBillingMigrationConflictError('legacy_plan_evidence_drift', 'legacy plan evidence does not cover every authoritative organization exactly once');
|
|
225
|
+
}
|
|
226
|
+
const policyIds = evidenceOrganizations.map(commercialPlanPolicyId);
|
|
227
|
+
const { rows } = await client.query('SELECT id FROM policy_assignments WHERE active = true AND id = ANY($1::text[]) LIMIT 1', [policyIds]);
|
|
228
|
+
if (rows[0] !== undefined) {
|
|
229
|
+
throw new LegacyBillingMigrationConflictError('legacy_plan_evidence_drift', 'a legacy plan projection is no longer default Free and active');
|
|
230
|
+
}
|
|
231
|
+
}
|
|
232
|
+
async function validateLinkedDefaultFreeTuple(client, link) {
|
|
233
|
+
if (link === undefined ||
|
|
234
|
+
link.billingAccountId !== link.homeFreeBillingAccountId ||
|
|
235
|
+
link.fallbackBillingAccountId !== link.homeFreeBillingAccountId) {
|
|
236
|
+
throw new LegacyBillingMigrationConflictError('incomplete_billing_destination', 'default-Free migration requires the active, home, and fallback accounts to match');
|
|
237
|
+
}
|
|
238
|
+
const ownerDefault = await getDefaultBillingAccountQuery(client, link.homeOwner, true);
|
|
239
|
+
const { rows } = await client.query(`SELECT role FROM billing_account_members
|
|
240
|
+
WHERE billing_account_id = $1 AND identity_issuer = $2 AND subject = $3`, [link.billingAccountId, link.homeOwner.identityIssuer, link.homeOwner.subject]);
|
|
241
|
+
if (ownerDefault?.id !== link.billingAccountId || rows[0]?.role !== 'owner') {
|
|
242
|
+
throw new LegacyBillingMigrationConflictError('incomplete_billing_destination', 'billing destination does not have a complete default owner tuple');
|
|
243
|
+
}
|
|
244
|
+
}
|
|
245
|
+
async function completeDefaultFreeSnapshot(client, billingAccountId) {
|
|
246
|
+
const account = await getBillingAccountQuery(client, billingAccountId);
|
|
247
|
+
const snapshot = await getActiveEntitlementSnapshotQuery(client, billingAccountId);
|
|
248
|
+
if (account?.state !== 'active' || snapshot?.planCode !== 'free') {
|
|
249
|
+
throw new LegacyBillingMigrationConflictError('incomplete_billing_destination', 'billing destination must have an active verified Free snapshot');
|
|
250
|
+
}
|
|
251
|
+
productionCapacity(snapshot.entitlements['apps.production.max']);
|
|
252
|
+
return snapshot;
|
|
253
|
+
}
|
|
254
|
+
function productionCapacity(value) {
|
|
255
|
+
if (!Number.isSafeInteger(value) || value < 0) {
|
|
256
|
+
throw new LegacyBillingMigrationConflictError('incomplete_billing_destination', 'billing destination has an invalid apps.production.max entitlement');
|
|
257
|
+
}
|
|
258
|
+
return value;
|
|
259
|
+
}
|
|
260
|
+
function postgresErrorCode(error) {
|
|
261
|
+
return typeof error === 'object' && error !== null && 'code' in error
|
|
262
|
+
? String(error.code)
|
|
263
|
+
: undefined;
|
|
264
|
+
}
|
|
265
|
+
//# sourceMappingURL=postgres-migration.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"postgres-migration.js","sourceRoot":"","sources":["../../src/billing/postgres-migration.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"postgres-schema.d.ts","sourceRoot":"","sources":["../../src/billing/postgres-schema.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,IAAI,CAAC;AAI/B,2FAA2F;AAC3F,wBAAsB,mBAAmB,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,
|
|
1
|
+
{"version":3,"file":"postgres-schema.d.ts","sourceRoot":"","sources":["../../src/billing/postgres-schema.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,IAAI,CAAC;AAI/B,2FAA2F;AAC3F,wBAAsB,mBAAmB,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAuNnE"}
|
|
@@ -125,6 +125,69 @@ export async function ensureBillingSchema(pool) {
|
|
|
125
125
|
FOREIGN KEY (org_slug, home_free_billing_account_id)
|
|
126
126
|
REFERENCES org_billing_home_accounts(org_slug, billing_account_id) ON DELETE RESTRICT
|
|
127
127
|
)
|
|
128
|
+
`);
|
|
129
|
+
await pool.query(`
|
|
130
|
+
CREATE TABLE IF NOT EXISTS billing_legacy_migration_preparations (
|
|
131
|
+
id text PRIMARY KEY,
|
|
132
|
+
migration_kind text NOT NULL UNIQUE CHECK (migration_kind = 'hosted-default-free-v1'),
|
|
133
|
+
schema_version integer NOT NULL CHECK (schema_version = 1),
|
|
134
|
+
mode text NOT NULL CHECK (mode = 'shadow'),
|
|
135
|
+
state text NOT NULL CHECK (state = 'prepared'),
|
|
136
|
+
idempotency_key text NOT NULL UNIQUE,
|
|
137
|
+
request_fingerprint text NOT NULL,
|
|
138
|
+
mapping_checksum text NOT NULL,
|
|
139
|
+
preview_checksum text NOT NULL,
|
|
140
|
+
plan_evidence_checksum text NOT NULL,
|
|
141
|
+
prepared_at timestamptz NOT NULL,
|
|
142
|
+
prepared_by_subject text NOT NULL,
|
|
143
|
+
prepared_by_email text NOT NULL,
|
|
144
|
+
reason text NOT NULL
|
|
145
|
+
)
|
|
146
|
+
`);
|
|
147
|
+
await pool.query(`
|
|
148
|
+
CREATE TABLE IF NOT EXISTS billing_legacy_migration_accounts (
|
|
149
|
+
migration_id text NOT NULL REFERENCES billing_legacy_migration_preparations(id),
|
|
150
|
+
billing_account_id text NOT NULL REFERENCES billing_accounts(id) ON DELETE RESTRICT,
|
|
151
|
+
account_disposition text NOT NULL CHECK (account_disposition IN ('created', 'existing')),
|
|
152
|
+
snapshot_id text NOT NULL REFERENCES billing_entitlement_snapshots(id) ON DELETE RESTRICT,
|
|
153
|
+
organization_count integer NOT NULL CHECK (organization_count >= 0),
|
|
154
|
+
production_app_count integer NOT NULL CHECK (production_app_count >= 0),
|
|
155
|
+
production_capacity integer NOT NULL CHECK (production_capacity >= 0),
|
|
156
|
+
grant_candidate_at_preparation boolean NOT NULL,
|
|
157
|
+
PRIMARY KEY (migration_id, billing_account_id)
|
|
158
|
+
)
|
|
159
|
+
`);
|
|
160
|
+
await pool.query(`
|
|
161
|
+
CREATE TABLE IF NOT EXISTS billing_legacy_migration_organizations (
|
|
162
|
+
migration_id text NOT NULL REFERENCES billing_legacy_migration_preparations(id),
|
|
163
|
+
org_slug text NOT NULL,
|
|
164
|
+
billing_account_id text NOT NULL REFERENCES billing_accounts(id) ON DELETE RESTRICT,
|
|
165
|
+
link_disposition text NOT NULL CHECK (link_disposition IN ('created', 'preserved')),
|
|
166
|
+
link_version integer NOT NULL CHECK (link_version > 0),
|
|
167
|
+
home_owner_identity_issuer text NOT NULL,
|
|
168
|
+
home_owner_subject text NOT NULL,
|
|
169
|
+
PRIMARY KEY (migration_id, org_slug)
|
|
170
|
+
)
|
|
171
|
+
`);
|
|
172
|
+
await pool.query(`
|
|
173
|
+
CREATE TABLE IF NOT EXISTS billing_legacy_migration_apps (
|
|
174
|
+
migration_id text NOT NULL REFERENCES billing_legacy_migration_preparations(id),
|
|
175
|
+
billing_account_id text NOT NULL REFERENCES billing_accounts(id) ON DELETE RESTRICT,
|
|
176
|
+
org_slug text NOT NULL,
|
|
177
|
+
app_slug text NOT NULL,
|
|
178
|
+
app_created_at timestamptz NOT NULL,
|
|
179
|
+
PRIMARY KEY (migration_id, org_slug, app_slug, app_created_at)
|
|
180
|
+
)
|
|
181
|
+
`);
|
|
182
|
+
await pool.query(`
|
|
183
|
+
CREATE TABLE IF NOT EXISTS billing_legacy_migration_plan_evidence (
|
|
184
|
+
migration_id text NOT NULL REFERENCES billing_legacy_migration_preparations(id),
|
|
185
|
+
org_slug text NOT NULL,
|
|
186
|
+
source text NOT NULL CHECK (source = 'default'),
|
|
187
|
+
plan_code text NOT NULL CHECK (plan_code = 'free'),
|
|
188
|
+
plan_state text NOT NULL CHECK (plan_state = 'active'),
|
|
189
|
+
PRIMARY KEY (migration_id, org_slug)
|
|
190
|
+
)
|
|
128
191
|
`);
|
|
129
192
|
await pool.query(`INSERT INTO billing_plan_versions
|
|
130
193
|
(id, plan_code, version, effective_from, entitlements, content_checksum, created_at)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"postgres-schema.js","sourceRoot":"","sources":["../../src/billing/postgres-schema.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAC/C,OAAO,EAAuB,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;AAEpF,2FAA2F;AAC3F,MAAM,CAAC,KAAK,UAAU,mBAAmB,CAAC,IAAU;IAClD,MAAM,IAAI,CAAC,KAAK,CAAC;;;;;;;;;;;GAWhB,CAAC,CAAC;IACH,MAAM,IAAI,CAAC,KAAK,CAAC;;;;;;;GAOhB,CAAC,CAAC;IACH,MAAM,IAAI,CAAC,KAAK,CAAC;;;;;;;GAOhB,CAAC,CAAC;IACH,MAAM,IAAI,CAAC,KAAK,CAAC;;;;;;;;;;GAUhB,CAAC,CAAC;IACH,MAAM,IAAI,CAAC,KAAK,CAAC;;;GAGhB,CAAC,CAAC;IACH,MAAM,IAAI,CAAC,KAAK,CAAC;;;GAGhB,CAAC,CAAC;IACH,MAAM,IAAI,CAAC,KAAK,CAAC;;;;;;;;;;;;;;;;;;;;;GAqBhB,CAAC,CAAC;IACH,MAAM,IAAI,CAAC,KAAK,CAAC;;;;;;;;;;;;;;;;;;GAkBhB,CAAC,CAAC;IACH,MAAM,IAAI,CAAC,KAAK,CAAC;;;;;;;GAOhB,CAAC,CAAC;IACH,MAAM,IAAI,CAAC,KAAK,CAAC;;;;;;;;;;;GAWhB,CAAC,CAAC;IACH,MAAM,IAAI,CAAC,KAAK,CAAC;;;;;;;;;;;;;;;GAehB,CAAC,CAAC;IAEH,MAAM,IAAI,CAAC,KAAK,CACd;;;iCAG6B,EAC7B;QACE,iBAAiB,CAAC,EAAE;QACpB,iBAAiB,CAAC,QAAQ;QAC1B,iBAAiB,CAAC,OAAO;QACzB,iBAAiB,CAAC,aAAa;QAC/B,IAAI,CAAC,SAAS,CAAC,iBAAiB,CAAC,YAAY,CAAC;QAC9C,iBAAiB,CAAC,eAAe;QACjC,iBAAiB,CAAC,SAAS;KAC5B,CACF,CAAC;IACF,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,IAAI,CAAC,KAAK,CAC/B,mDAAmD,EACnD,CAAC,iBAAiB,CAAC,EAAE,CAAC,CACvB,CAAC;IACF,MAAM,aAAa,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,sBAAsB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IAC5E,IACE,aAAa,KAAK,SAAS;QAC3B,aAAa,CAAC,eAAe,KAAK,iBAAiB,CAAC,eAAe,EACnE,CAAC;QACD,MAAM,IAAI,KAAK,CAAC,8EAA8E,CAAC,CAAC;IAClG,CAAC;AACH,CAAC"}
|
|
1
|
+
{"version":3,"file":"postgres-schema.js","sourceRoot":"","sources":["../../src/billing/postgres-schema.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAC/C,OAAO,EAAuB,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;AAEpF,2FAA2F;AAC3F,MAAM,CAAC,KAAK,UAAU,mBAAmB,CAAC,IAAU;IAClD,MAAM,IAAI,CAAC,KAAK,CAAC;;;;;;;;;;;GAWhB,CAAC,CAAC;IACH,MAAM,IAAI,CAAC,KAAK,CAAC;;;;;;;GAOhB,CAAC,CAAC;IACH,MAAM,IAAI,CAAC,KAAK,CAAC;;;;;;;GAOhB,CAAC,CAAC;IACH,MAAM,IAAI,CAAC,KAAK,CAAC;;;;;;;;;;GAUhB,CAAC,CAAC;IACH,MAAM,IAAI,CAAC,KAAK,CAAC;;;GAGhB,CAAC,CAAC;IACH,MAAM,IAAI,CAAC,KAAK,CAAC;;;GAGhB,CAAC,CAAC;IACH,MAAM,IAAI,CAAC,KAAK,CAAC;;;;;;;;;;;;;;;;;;;;;GAqBhB,CAAC,CAAC;IACH,MAAM,IAAI,CAAC,KAAK,CAAC;;;;;;;;;;;;;;;;;;GAkBhB,CAAC,CAAC;IACH,MAAM,IAAI,CAAC,KAAK,CAAC;;;;;;;GAOhB,CAAC,CAAC;IACH,MAAM,IAAI,CAAC,KAAK,CAAC;;;;;;;;;;;GAWhB,CAAC,CAAC;IACH,MAAM,IAAI,CAAC,KAAK,CAAC;;;;;;;;;;;;;;;GAehB,CAAC,CAAC;IACH,MAAM,IAAI,CAAC,KAAK,CAAC;;;;;;;;;;;;;;;;;GAiBhB,CAAC,CAAC;IACH,MAAM,IAAI,CAAC,KAAK,CAAC;;;;;;;;;;;;GAYhB,CAAC,CAAC;IACH,MAAM,IAAI,CAAC,KAAK,CAAC;;;;;;;;;;;GAWhB,CAAC,CAAC;IACH,MAAM,IAAI,CAAC,KAAK,CAAC;;;;;;;;;GAShB,CAAC,CAAC;IACH,MAAM,IAAI,CAAC,KAAK,CAAC;;;;;;;;;GAShB,CAAC,CAAC;IAEH,MAAM,IAAI,CAAC,KAAK,CACd;;;iCAG6B,EAC7B;QACE,iBAAiB,CAAC,EAAE;QACpB,iBAAiB,CAAC,QAAQ;QAC1B,iBAAiB,CAAC,OAAO;QACzB,iBAAiB,CAAC,aAAa;QAC/B,IAAI,CAAC,SAAS,CAAC,iBAAiB,CAAC,YAAY,CAAC;QAC9C,iBAAiB,CAAC,eAAe;QACjC,iBAAiB,CAAC,SAAS;KAC5B,CACF,CAAC;IACF,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,IAAI,CAAC,KAAK,CAC/B,mDAAmD,EACnD,CAAC,iBAAiB,CAAC,EAAE,CAAC,CACvB,CAAC;IACF,MAAM,aAAa,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,sBAAsB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IAC5E,IACE,aAAa,KAAK,SAAS;QAC3B,aAAa,CAAC,eAAe,KAAK,iBAAiB,CAAC,eAAe,EACnE,CAAC;QACD,MAAM,IAAI,KAAK,CAAC,8EAA8E,CAAC,CAAC;IAClG,CAAC;AACH,CAAC"}
|
|
@@ -3,6 +3,9 @@ import { type BillingAccountMemberRecord, type BillingAccountRecord, type Billin
|
|
|
3
3
|
import type { EnsureDefaultBillingAccountInput, EnsureOrgBillingLinkInput } from './store.js';
|
|
4
4
|
export declare function ensureDefaultBillingAccountRow(pool: Pool, input: EnsureDefaultBillingAccountInput, now: () => Date): Promise<BillingAccountRecord>;
|
|
5
5
|
export declare function ensureDefaultBillingAccountTx(client: PoolClient, input: EnsureDefaultBillingAccountInput, createdAt: Date): Promise<BillingAccountRecord>;
|
|
6
|
+
/** Legacy-migration only: the caller must hold the complete EXCLUSIVE billing/source table freeze. */
|
|
7
|
+
export declare function ensureDefaultBillingAccountForLegacyMigrationTx(client: PoolClient, input: EnsureDefaultBillingAccountInput, createdAt: Date): Promise<BillingAccountRecord>;
|
|
8
|
+
export declare function lockDefaultBillingIdentityTx(client: PoolClient, input: BillingIdentityRef): Promise<void>;
|
|
6
9
|
export declare function ensureDefaultOrgBillingTx(client: PoolClient, input: {
|
|
7
10
|
readonly org: string;
|
|
8
11
|
readonly owner: {
|
|
@@ -23,4 +26,8 @@ export declare function getActiveEntitlementSnapshotRow(pool: Pool, billingAccou
|
|
|
23
26
|
export declare function ensureOrgBillingLinkRow(pool: Pool, input: EnsureOrgBillingLinkInput, now: () => Date): Promise<OrgBillingLinkRecord>;
|
|
24
27
|
export declare function ensureOrgBillingLinkTx(client: PoolClient, input: EnsureOrgBillingLinkInput, linkedAt: Date): Promise<OrgBillingLinkRecord>;
|
|
25
28
|
export declare function getOrgBillingLinkRow(pool: Pool, org: string): Promise<OrgBillingLinkRecord | undefined>;
|
|
29
|
+
export declare function getBillingAccountQuery(queryable: Pool | PoolClient, id: string): Promise<BillingAccountRecord | undefined>;
|
|
30
|
+
export declare function getDefaultBillingAccountQuery(queryable: Pool | PoolClient, identity: BillingIdentityRef, forUpdate?: boolean): Promise<BillingAccountRecord | undefined>;
|
|
31
|
+
export declare function getActiveEntitlementSnapshotQuery(queryable: Pool | PoolClient, billingAccountId: string): Promise<EntitlementSnapshotRecord | undefined>;
|
|
32
|
+
export declare function getOrgBillingLinkQuery(queryable: Pool | PoolClient, org: string): Promise<OrgBillingLinkRecord | undefined>;
|
|
26
33
|
//# sourceMappingURL=postgres.d.ts.map
|