@noodleseed/one 0.38.1 → 0.40.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 +13 -31
- package/dist/commands/billing-ops.js.map +1 -1
- package/dist/commands/billing-read-ops.d.ts +3 -0
- package/dist/commands/billing-read-ops.d.ts.map +1 -0
- package/dist/commands/billing-read-ops.js +289 -0
- package/dist/commands/billing-read-ops.js.map +1 -0
- package/dist/commands/catalog-data-resources.d.ts.map +1 -1
- package/dist/commands/catalog-data-resources.js +25 -2
- package/dist/commands/catalog-data-resources.js.map +1 -1
- package/dist/commands/catalog.d.ts.map +1 -1
- package/dist/commands/catalog.js +1 -0
- package/dist/commands/catalog.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/in-memory.d.ts +4 -1
- package/node_modules/@noodle-borg/service/dist/billing/in-memory.d.ts.map +1 -1
- package/node_modules/@noodle-borg/service/dist/billing/in-memory.js +18 -0
- package/node_modules/@noodle-borg/service/dist/billing/in-memory.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-read.d.ts +7 -0
- package/node_modules/@noodle-borg/service/dist/billing/postgres-read.d.ts.map +1 -0
- package/node_modules/@noodle-borg/service/dist/billing/postgres-read.js +55 -0
- package/node_modules/@noodle-borg/service/dist/billing/postgres-read.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 +71 -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/billing/read-contract.d.ts +268 -0
- package/node_modules/@noodle-borg/service/dist/billing/read-contract.d.ts.map +1 -0
- package/node_modules/@noodle-borg/service/dist/billing/read-contract.js +138 -0
- package/node_modules/@noodle-borg/service/dist/billing/read-contract.js.map +1 -0
- package/node_modules/@noodle-borg/service/dist/billing/store.d.ts +12 -0
- package/node_modules/@noodle-borg/service/dist/billing/store.d.ts.map +1 -1
- package/node_modules/@noodle-borg/service/dist/index.d.ts +4 -2
- package/node_modules/@noodle-borg/service/dist/index.d.ts.map +1 -1
- package/node_modules/@noodle-borg/service/dist/index.js +3 -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-read.d.ts +12 -0
- package/node_modules/@noodle-borg/service/dist/routes/billing-read.d.ts.map +1 -0
- package/node_modules/@noodle-borg/service/dist/routes/billing-read.js +202 -0
- package/node_modules/@noodle-borg/service/dist/routes/billing-read.js.map +1 -0
- 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 +4 -1
- 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 +54 -2
- package/node_modules/@noodle-borg/service/dist/routes/commercial-dispatch.js.map +1 -1
- package/node_modules/@noodle-borg/service/dist/routes/paths.d.ts +8 -0
- package/node_modules/@noodle-borg/service/dist/routes/paths.d.ts.map +1 -1
- package/node_modules/@noodle-borg/service/dist/routes/paths.js +25 -0
- package/node_modules/@noodle-borg/service/dist/routes/paths.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-signup.d.ts +4 -1
- package/node_modules/@noodle-borg/service/dist/store/postgres-signup.d.ts.map +1 -1
- package/node_modules/@noodle-borg/service/dist/store/postgres-signup.js +10 -0
- package/node_modules/@noodle-borg/service/dist/store/postgres-signup.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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"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { Pool } from 'pg';
|
|
2
|
+
import { type BillingAccountMemberRecord, type BillingIdentityRef, type OrgBillingLinkRecord } from './model.js';
|
|
3
|
+
import type { LegacyBillingAccountPreparationRecord } from './store.js';
|
|
4
|
+
export declare function listBillingAccountMembershipRows(pool: Pool, identity: BillingIdentityRef): Promise<readonly BillingAccountMemberRecord[]>;
|
|
5
|
+
export declare function listOrgBillingLinkRowsForAccount(pool: Pool, id: string): Promise<readonly OrgBillingLinkRecord[]>;
|
|
6
|
+
export declare function getLegacyBillingMigrationPreparationForAccountRow(pool: Pool, id: string): Promise<LegacyBillingAccountPreparationRecord | undefined>;
|
|
7
|
+
//# sourceMappingURL=postgres-read.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"postgres-read.d.ts","sourceRoot":"","sources":["../../src/billing/postgres-read.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,IAAI,CAAC;AAC/B,OAAO,EACL,KAAK,0BAA0B,EAC/B,KAAK,kBAAkB,EAEvB,KAAK,oBAAoB,EAE1B,MAAM,YAAY,CAAC;AAOpB,OAAO,KAAK,EAAE,qCAAqC,EAAE,MAAM,YAAY,CAAC;AAExE,wBAAsB,gCAAgC,CACpD,IAAI,EAAE,IAAI,EACV,QAAQ,EAAE,kBAAkB,GAC3B,OAAO,CAAC,SAAS,0BAA0B,EAAE,CAAC,CAShD;AAED,wBAAsB,gCAAgC,CACpD,IAAI,EAAE,IAAI,EACV,EAAE,EAAE,MAAM,GACT,OAAO,CAAC,SAAS,oBAAoB,EAAE,CAAC,CAY1C;AAED,wBAAsB,iDAAiD,CACrE,IAAI,EAAE,IAAI,EACV,EAAE,EAAE,MAAM,GACT,OAAO,CAAC,qCAAqC,GAAG,SAAS,CAAC,CAiC5D"}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import { normalizeBillingIdentity, validateBillingAccountId, } from './model.js';
|
|
2
|
+
import { memberRowToRecord, orgBillingLinkRowToRecord, } from './postgres-records.js';
|
|
3
|
+
export async function listBillingAccountMembershipRows(pool, identity) {
|
|
4
|
+
const normalized = normalizeBillingIdentity(identity);
|
|
5
|
+
const { rows } = await pool.query(`SELECT * FROM billing_account_members
|
|
6
|
+
WHERE identity_issuer = $1 AND subject = $2
|
|
7
|
+
ORDER BY created_at, billing_account_id`, [normalized.identityIssuer, normalized.subject]);
|
|
8
|
+
return rows.map(memberRowToRecord);
|
|
9
|
+
}
|
|
10
|
+
export async function listOrgBillingLinkRowsForAccount(pool, id) {
|
|
11
|
+
const { rows } = await pool.query(`SELECT links.*,
|
|
12
|
+
home.home_owner_identity_issuer,
|
|
13
|
+
home.home_owner_subject
|
|
14
|
+
FROM org_billing_links AS links
|
|
15
|
+
JOIN org_billing_home_accounts AS home ON home.org_slug = links.org_slug
|
|
16
|
+
WHERE links.billing_account_id = $1
|
|
17
|
+
ORDER BY links.org_slug`, [validateBillingAccountId(id)]);
|
|
18
|
+
return rows.map(orgBillingLinkRowToRecord);
|
|
19
|
+
}
|
|
20
|
+
export async function getLegacyBillingMigrationPreparationForAccountRow(pool, id) {
|
|
21
|
+
const { rows } = await pool.query(`SELECT migrated.billing_account_id,
|
|
22
|
+
preparation.prepared_at,
|
|
23
|
+
migrated.organization_count,
|
|
24
|
+
migrated.production_app_count,
|
|
25
|
+
migrated.production_capacity,
|
|
26
|
+
migrated.grant_candidate_at_preparation
|
|
27
|
+
FROM billing_legacy_migration_accounts AS migrated
|
|
28
|
+
JOIN billing_legacy_migration_preparations AS preparation
|
|
29
|
+
ON preparation.id = migrated.migration_id
|
|
30
|
+
WHERE migrated.billing_account_id = $1`, [validateBillingAccountId(id)]);
|
|
31
|
+
const row = rows[0];
|
|
32
|
+
if (row === undefined)
|
|
33
|
+
return undefined;
|
|
34
|
+
return {
|
|
35
|
+
billingAccountId: validateBillingAccountId(row.billing_account_id),
|
|
36
|
+
preparedAt: persistedTimestamp('legacy billing preparation', row.prepared_at),
|
|
37
|
+
organizationCount: persistedNonNegativeInteger('legacy billing organization count', row.organization_count),
|
|
38
|
+
productionAppCount: persistedNonNegativeInteger('legacy billing production app count', row.production_app_count),
|
|
39
|
+
productionCapacity: persistedNonNegativeInteger('legacy billing production capacity', row.production_capacity),
|
|
40
|
+
grantCandidateAtPreparation: row.grant_candidate_at_preparation,
|
|
41
|
+
};
|
|
42
|
+
}
|
|
43
|
+
function persistedTimestamp(name, value) {
|
|
44
|
+
const date = value instanceof Date ? value : new Date(value);
|
|
45
|
+
if (!Number.isFinite(date.getTime()))
|
|
46
|
+
throw new Error(`persisted ${name} timestamp is invalid`);
|
|
47
|
+
return date.toISOString();
|
|
48
|
+
}
|
|
49
|
+
function persistedNonNegativeInteger(name, value) {
|
|
50
|
+
if (!Number.isSafeInteger(value) || value < 0) {
|
|
51
|
+
throw new Error(`persisted ${name} must be a non-negative integer`);
|
|
52
|
+
}
|
|
53
|
+
return value;
|
|
54
|
+
}
|
|
55
|
+
//# sourceMappingURL=postgres-read.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"postgres-read.js","sourceRoot":"","sources":["../../src/billing/postgres-read.ts"],"names":[],"mappings":"AACA,OAAO,EAGL,wBAAwB,EAExB,wBAAwB,GACzB,MAAM,YAAY,CAAC;AACpB,OAAO,EAEL,iBAAiB,EAEjB,yBAAyB,GAC1B,MAAM,uBAAuB,CAAC;AAG/B,MAAM,CAAC,KAAK,UAAU,gCAAgC,CACpD,IAAU,EACV,QAA4B;IAE5B,MAAM,UAAU,GAAG,wBAAwB,CAAC,QAAQ,CAAC,CAAC;IACtD,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,IAAI,CAAC,KAAK,CAC/B;;6CAEyC,EACzC,CAAC,UAAU,CAAC,cAAc,EAAE,UAAU,CAAC,OAAO,CAAC,CAChD,CAAC;IACF,OAAO,IAAI,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC;AACrC,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,gCAAgC,CACpD,IAAU,EACV,EAAU;IAEV,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,IAAI,CAAC,KAAK,CAC/B;;;;;;6BAMyB,EACzB,CAAC,wBAAwB,CAAC,EAAE,CAAC,CAAC,CAC/B,CAAC;IACF,OAAO,IAAI,CAAC,GAAG,CAAC,yBAAyB,CAAC,CAAC;AAC7C,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,iDAAiD,CACrE,IAAU,EACV,EAAU;IAEV,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,IAAI,CAAC,KAAK,CAC/B;;;;;;;;;4CASwC,EACxC,CAAC,wBAAwB,CAAC,EAAE,CAAC,CAAC,CAC/B,CAAC;IACF,MAAM,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;IACpB,IAAI,GAAG,KAAK,SAAS;QAAE,OAAO,SAAS,CAAC;IACxC,OAAO;QACL,gBAAgB,EAAE,wBAAwB,CAAC,GAAG,CAAC,kBAAkB,CAAC;QAClE,UAAU,EAAE,kBAAkB,CAAC,4BAA4B,EAAE,GAAG,CAAC,WAAW,CAAC;QAC7E,iBAAiB,EAAE,2BAA2B,CAC5C,mCAAmC,EACnC,GAAG,CAAC,kBAAkB,CACvB;QACD,kBAAkB,EAAE,2BAA2B,CAC7C,qCAAqC,EACrC,GAAG,CAAC,oBAAoB,CACzB;QACD,kBAAkB,EAAE,2BAA2B,CAC7C,oCAAoC,EACpC,GAAG,CAAC,mBAAmB,CACxB;QACD,2BAA2B,EAAE,GAAG,CAAC,8BAA8B;KAChE,CAAC;AACJ,CAAC;AAWD,SAAS,kBAAkB,CAAC,IAAY,EAAE,KAAoB;IAC5D,MAAM,IAAI,GAAG,KAAK,YAAY,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC;IAC7D,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,aAAa,IAAI,uBAAuB,CAAC,CAAC;IAChG,OAAO,IAAI,CAAC,WAAW,EAAE,CAAC;AAC5B,CAAC;AAED,SAAS,2BAA2B,CAAC,IAAY,EAAE,KAAa;IAC9D,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC,IAAI,KAAK,GAAG,CAAC,EAAE,CAAC;QAC9C,MAAM,IAAI,KAAK,CAAC,aAAa,IAAI,iCAAiC,CAAC,CAAC;IACtE,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC"}
|
|
@@ -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,CA+NnE"}
|