@noodleseed/one 0.95.1 → 0.95.2
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/auth-live-doctor.d.ts +1 -0
- package/dist/commands/auth-live-doctor.d.ts.map +1 -1
- package/dist/commands/auth-live-doctor.js +7 -6
- package/dist/commands/auth-live-doctor.js.map +1 -1
- package/dist/commands/auth-metadata-readiness.d.ts +2 -0
- package/dist/commands/auth-metadata-readiness.d.ts.map +1 -1
- package/dist/commands/auth-metadata-readiness.js +7 -0
- package/dist/commands/auth-metadata-readiness.js.map +1 -1
- package/dist/commands/auth-ops.d.ts +1 -0
- package/dist/commands/auth-ops.d.ts.map +1 -1
- package/dist/commands/auth-ops.js +26 -7
- package/dist/commands/auth-ops.js.map +1 -1
- package/dist/commands/catalog-data-auth-discovery.d.ts.map +1 -1
- package/dist/commands/catalog-data-auth-discovery.js +7 -0
- package/dist/commands/catalog-data-auth-discovery.js.map +1 -1
- package/dist/saas-scaffold-template.d.ts.map +1 -1
- package/dist/saas-scaffold-template.js +2 -1
- package/dist/saas-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-authoring-auth-ref.js +3 -3
- package/node_modules/@noodle-borg/agent-kit/dist/skill-authoring-auth-ref.js.map +1 -1
- package/node_modules/@noodle-borg/capabilities/dist/index.js +1 -1
- package/node_modules/@noodle-borg/capabilities/dist/index.js.map +1 -1
- package/node_modules/@noodle-borg/module/dist/contract.d.ts +1 -1
- package/node_modules/@noodle-borg/module/dist/contract.d.ts.map +1 -1
- package/node_modules/@noodle-borg/service/dist/customer-auth-audience-binding.d.ts +37 -0
- package/node_modules/@noodle-borg/service/dist/customer-auth-audience-binding.d.ts.map +1 -0
- package/node_modules/@noodle-borg/service/dist/customer-auth-audience-binding.js +182 -0
- package/node_modules/@noodle-borg/service/dist/customer-auth-audience-binding.js.map +1 -0
- package/node_modules/@noodle-borg/service/dist/customer-auth-audience-quarantine.d.ts +5 -0
- package/node_modules/@noodle-borg/service/dist/customer-auth-audience-quarantine.d.ts.map +1 -0
- package/node_modules/@noodle-borg/service/dist/customer-auth-audience-quarantine.js +14 -0
- package/node_modules/@noodle-borg/service/dist/customer-auth-audience-quarantine.js.map +1 -0
- package/node_modules/@noodle-borg/service/dist/customer-verifier.js +5 -4
- package/node_modules/@noodle-borg/service/dist/customer-verifier.js.map +1 -1
- package/node_modules/@noodle-borg/service/dist/options.d.ts +2 -2
- package/node_modules/@noodle-borg/service/dist/options.d.ts.map +1 -1
- package/node_modules/@noodle-borg/service/dist/platform-account-reset-quarantine-postgres.d.ts.map +1 -1
- package/node_modules/@noodle-borg/service/dist/platform-account-reset-quarantine-postgres.js +20 -8
- package/node_modules/@noodle-borg/service/dist/platform-account-reset-quarantine-postgres.js.map +1 -1
- package/node_modules/@noodle-borg/service/dist/platform-account-reset-rollback-postgres.d.ts +2 -0
- package/node_modules/@noodle-borg/service/dist/platform-account-reset-rollback-postgres.d.ts.map +1 -1
- package/node_modules/@noodle-borg/service/dist/platform-account-reset-rollback-postgres.js +58 -13
- package/node_modules/@noodle-borg/service/dist/platform-account-reset-rollback-postgres.js.map +1 -1
- package/node_modules/@noodle-borg/service/dist/platform-auth-inventory-source-fence-transaction-postgres.d.ts +1 -0
- package/node_modules/@noodle-borg/service/dist/platform-auth-inventory-source-fence-transaction-postgres.d.ts.map +1 -1
- package/node_modules/@noodle-borg/service/dist/platform-auth-inventory-source-fence-transaction-postgres.js +3 -0
- package/node_modules/@noodle-borg/service/dist/platform-auth-inventory-source-fence-transaction-postgres.js.map +1 -1
- package/node_modules/@noodle-borg/service/dist/platform-auth-operator.d.ts +24 -24
- package/node_modules/@noodle-borg/service/dist/platform-auth-runtime.d.ts +2 -1
- package/node_modules/@noodle-borg/service/dist/platform-auth-runtime.d.ts.map +1 -1
- package/node_modules/@noodle-borg/service/dist/platform-auth-runtime.js +4 -1
- package/node_modules/@noodle-borg/service/dist/platform-auth-runtime.js.map +1 -1
- package/node_modules/@noodle-borg/service/dist/registry-access.d.ts +5 -1
- package/node_modules/@noodle-borg/service/dist/registry-access.d.ts.map +1 -1
- package/node_modules/@noodle-borg/service/dist/registry-access.js +64 -15
- package/node_modules/@noodle-borg/service/dist/registry-access.js.map +1 -1
- package/node_modules/@noodle-borg/service/dist/registry-rollback.d.ts +19 -0
- package/node_modules/@noodle-borg/service/dist/registry-rollback.d.ts.map +1 -0
- package/node_modules/@noodle-borg/service/dist/registry-rollback.js +91 -0
- package/node_modules/@noodle-borg/service/dist/registry-rollback.js.map +1 -0
- package/node_modules/@noodle-borg/service/dist/registry-state.d.ts +18 -2
- package/node_modules/@noodle-borg/service/dist/registry-state.d.ts.map +1 -1
- package/node_modules/@noodle-borg/service/dist/registry-state.js +83 -7
- package/node_modules/@noodle-borg/service/dist/registry-state.js.map +1 -1
- package/node_modules/@noodle-borg/service/dist/registry-targets.d.ts +8 -0
- package/node_modules/@noodle-borg/service/dist/registry-targets.d.ts.map +1 -1
- package/node_modules/@noodle-borg/service/dist/registry-targets.js +24 -0
- package/node_modules/@noodle-borg/service/dist/registry-targets.js.map +1 -1
- package/node_modules/@noodle-borg/service/dist/registry-types.d.ts +1 -1
- package/node_modules/@noodle-borg/service/dist/registry-types.d.ts.map +1 -1
- package/node_modules/@noodle-borg/service/dist/registry.d.ts +2 -1
- package/node_modules/@noodle-borg/service/dist/registry.d.ts.map +1 -1
- package/node_modules/@noodle-borg/service/dist/registry.js +72 -83
- package/node_modules/@noodle-borg/service/dist/registry.js.map +1 -1
- package/node_modules/@noodle-borg/service/dist/routes/archive.d.ts.map +1 -1
- package/node_modules/@noodle-borg/service/dist/routes/archive.js +14 -0
- package/node_modules/@noodle-borg/service/dist/routes/archive.js.map +1 -1
- package/node_modules/@noodle-borg/service/dist/routes/auth-doctor-dispatch.d.ts.map +1 -1
- package/node_modules/@noodle-borg/service/dist/routes/auth-doctor-dispatch.js +4 -0
- package/node_modules/@noodle-borg/service/dist/routes/auth-doctor-dispatch.js.map +1 -1
- package/node_modules/@noodle-borg/service/dist/routes/auth-doctor-live.d.ts +1 -0
- package/node_modules/@noodle-borg/service/dist/routes/auth-doctor-live.d.ts.map +1 -1
- package/node_modules/@noodle-borg/service/dist/routes/auth-doctor-live.js +17 -4
- package/node_modules/@noodle-borg/service/dist/routes/auth-doctor-live.js.map +1 -1
- package/node_modules/@noodle-borg/service/dist/routes/contracts.d.ts +9 -9
- package/node_modules/@noodle-borg/service/dist/routes/private-platform-auth-dispatch.d.ts.map +1 -1
- package/node_modules/@noodle-borg/service/dist/routes/private-platform-auth-dispatch.js +1 -1
- package/node_modules/@noodle-borg/service/dist/routes/private-platform-auth-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 +4 -2
- package/node_modules/@noodle-borg/service/dist/serve.js.map +1 -1
- package/node_modules/@noodle-borg/service/dist/store/in-memory.d.ts +5 -2
- package/node_modules/@noodle-borg/service/dist/store/in-memory.d.ts.map +1 -1
- package/node_modules/@noodle-borg/service/dist/store/in-memory.js +51 -8
- package/node_modules/@noodle-borg/service/dist/store/in-memory.js.map +1 -1
- package/node_modules/@noodle-borg/service/dist/store/json-file.d.ts +5 -2
- package/node_modules/@noodle-borg/service/dist/store/json-file.d.ts.map +1 -1
- package/node_modules/@noodle-borg/service/dist/store/json-file.js +55 -6
- package/node_modules/@noodle-borg/service/dist/store/json-file.js.map +1 -1
- package/node_modules/@noodle-borg/service/dist/store/postgres-apps.d.ts +2 -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 +30 -15
- package/node_modules/@noodle-borg/service/dist/store/postgres-apps.js.map +1 -1
- package/node_modules/@noodle-borg/service/dist/store/postgres-customer-auth-audience-schema.d.ts +16 -0
- package/node_modules/@noodle-borg/service/dist/store/postgres-customer-auth-audience-schema.d.ts.map +1 -0
- package/node_modules/@noodle-borg/service/dist/store/postgres-customer-auth-audience-schema.js +329 -0
- package/node_modules/@noodle-borg/service/dist/store/postgres-customer-auth-audience-schema.js.map +1 -0
- package/node_modules/@noodle-borg/service/dist/store/postgres-customer-auth-audience.d.ts +5 -0
- package/node_modules/@noodle-borg/service/dist/store/postgres-customer-auth-audience.d.ts.map +1 -0
- package/node_modules/@noodle-borg/service/dist/store/postgres-customer-auth-audience.js +24 -0
- package/node_modules/@noodle-borg/service/dist/store/postgres-customer-auth-audience.js.map +1 -0
- package/node_modules/@noodle-borg/service/dist/store/postgres-deploy-records.d.ts.map +1 -1
- package/node_modules/@noodle-borg/service/dist/store/postgres-deploy-records.js +2 -1
- package/node_modules/@noodle-borg/service/dist/store/postgres-deploy-records.js.map +1 -1
- package/node_modules/@noodle-borg/service/dist/store/postgres-deployment-access.d.ts +9 -0
- package/node_modules/@noodle-borg/service/dist/store/postgres-deployment-access.d.ts.map +1 -0
- package/node_modules/@noodle-borg/service/dist/store/postgres-deployment-access.js +53 -0
- package/node_modules/@noodle-borg/service/dist/store/postgres-deployment-access.js.map +1 -0
- package/node_modules/@noodle-borg/service/dist/store/postgres-github-runs.d.ts.map +1 -1
- package/node_modules/@noodle-borg/service/dist/store/postgres-github-runs.js +2 -1
- package/node_modules/@noodle-borg/service/dist/store/postgres-github-runs.js.map +1 -1
- package/node_modules/@noodle-borg/service/dist/store/postgres-rows.d.ts +2 -1
- package/node_modules/@noodle-borg/service/dist/store/postgres-rows.d.ts.map +1 -1
- package/node_modules/@noodle-borg/service/dist/store/postgres-rows.js +2 -24
- package/node_modules/@noodle-borg/service/dist/store/postgres-rows.js.map +1 -1
- package/node_modules/@noodle-borg/service/dist/store/postgres-schema.d.ts +2 -1
- 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 +3 -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 +7 -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 +27 -31
- package/node_modules/@noodle-borg/service/dist/store/postgres.js.map +1 -1
- package/node_modules/@noodle-borg/service/dist/store.d.ts +20 -1
- package/node_modules/@noodle-borg/service/dist/store.d.ts.map +1 -1
- package/package.json +1 -1
package/node_modules/@noodle-borg/service/dist/store/postgres-customer-auth-audience-schema.js
ADDED
|
@@ -0,0 +1,329 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Install and backfill the database-owned customer audience invariant.
|
|
3
|
+
*
|
|
4
|
+
* Row triggers retain released ownership reservations and use compatible NOWAIT key-share/update locks to
|
|
5
|
+
* claim or transfer them instead of deleting OLD bindings. A non-blocking per-binding advisory lock closes
|
|
6
|
+
* the absent-row insertion race. This removes OLD→NEW cycles while letting preceding revisions participate
|
|
7
|
+
* without a global lock or rolling-version lock inversion.
|
|
8
|
+
*/
|
|
9
|
+
export async function ensureCustomerAuthAudienceSchema(pool) {
|
|
10
|
+
const client = await pool.connect();
|
|
11
|
+
try {
|
|
12
|
+
await client.query('BEGIN');
|
|
13
|
+
await client.query('LOCK TABLE deploy_records IN SHARE ROW EXCLUSIVE MODE');
|
|
14
|
+
await client.query(`
|
|
15
|
+
CREATE INDEX IF NOT EXISTS deploy_records_active_customer_auth
|
|
16
|
+
ON deploy_records(org_slug, app_slug, environment)
|
|
17
|
+
INCLUDE(server_auth)
|
|
18
|
+
WHERE active AND archived_at IS NULL AND access_mode = 'customers' AND server_auth IS NOT NULL
|
|
19
|
+
`);
|
|
20
|
+
await client.query(`
|
|
21
|
+
CREATE TABLE IF NOT EXISTS customer_auth_audience_bindings (
|
|
22
|
+
issuer text NOT NULL,
|
|
23
|
+
audience text NOT NULL,
|
|
24
|
+
org_slug text NOT NULL,
|
|
25
|
+
app_slug text NOT NULL,
|
|
26
|
+
environment text NOT NULL,
|
|
27
|
+
PRIMARY KEY (issuer, audience)
|
|
28
|
+
)
|
|
29
|
+
`);
|
|
30
|
+
await client.query(`
|
|
31
|
+
CREATE OR REPLACE FUNCTION noodle_customer_auth_is_valid(auth jsonb)
|
|
32
|
+
RETURNS boolean
|
|
33
|
+
LANGUAGE sql
|
|
34
|
+
IMMUTABLE
|
|
35
|
+
AS $$
|
|
36
|
+
SELECT CASE
|
|
37
|
+
WHEN auth IS NULL OR jsonb_typeof(auth) <> 'object'
|
|
38
|
+
THEN false
|
|
39
|
+
WHEN COALESCE(auth->>'kind', 'oidc') = 'bridge'
|
|
40
|
+
THEN COALESCE(btrim(auth->>'provider'), '') <> ''
|
|
41
|
+
WHEN COALESCE(auth->>'kind', 'oidc') = 'federatedOidc'
|
|
42
|
+
THEN jsonb_typeof(auth->'issuers') = 'array'
|
|
43
|
+
AND jsonb_array_length(
|
|
44
|
+
CASE
|
|
45
|
+
WHEN jsonb_typeof(auth->'issuers') = 'array' THEN auth->'issuers'
|
|
46
|
+
ELSE '[]'::jsonb
|
|
47
|
+
END
|
|
48
|
+
) > 0
|
|
49
|
+
AND NOT EXISTS (
|
|
50
|
+
SELECT 1
|
|
51
|
+
FROM jsonb_array_elements(
|
|
52
|
+
CASE
|
|
53
|
+
WHEN jsonb_typeof(auth->'issuers') = 'array' THEN auth->'issuers'
|
|
54
|
+
ELSE '[]'::jsonb
|
|
55
|
+
END
|
|
56
|
+
) issuer
|
|
57
|
+
WHERE jsonb_typeof(issuer) <> 'object'
|
|
58
|
+
OR COALESCE(btrim(issuer->>'issuer'), '') = ''
|
|
59
|
+
OR COALESCE(btrim(issuer->>'audience'), '') = ''
|
|
60
|
+
)
|
|
61
|
+
WHEN COALESCE(auth->>'kind', 'oidc') = 'oidc'
|
|
62
|
+
THEN COALESCE(btrim(auth->>'issuer'), '') <> ''
|
|
63
|
+
AND COALESCE(btrim(auth->>'audience'), '') <> ''
|
|
64
|
+
ELSE false
|
|
65
|
+
END
|
|
66
|
+
$$
|
|
67
|
+
`);
|
|
68
|
+
await client.query(`
|
|
69
|
+
CREATE OR REPLACE FUNCTION noodle_customer_auth_bindings(auth jsonb)
|
|
70
|
+
RETURNS TABLE(issuer text, audience text)
|
|
71
|
+
LANGUAGE sql
|
|
72
|
+
IMMUTABLE
|
|
73
|
+
AS $$
|
|
74
|
+
SELECT regexp_replace(auth->>'issuer', '/+$', ''), auth->>'audience'
|
|
75
|
+
WHERE COALESCE(auth->>'kind', 'oidc') = 'oidc'
|
|
76
|
+
UNION ALL
|
|
77
|
+
SELECT regexp_replace(candidate->>'issuer', '/+$', ''), candidate->>'audience'
|
|
78
|
+
FROM jsonb_array_elements(
|
|
79
|
+
CASE
|
|
80
|
+
WHEN jsonb_typeof(auth->'issuers') = 'array' THEN auth->'issuers'
|
|
81
|
+
ELSE '[]'::jsonb
|
|
82
|
+
END
|
|
83
|
+
) candidate
|
|
84
|
+
WHERE auth->>'kind' = 'federatedOidc'
|
|
85
|
+
$$
|
|
86
|
+
`);
|
|
87
|
+
await client.query(`
|
|
88
|
+
CREATE OR REPLACE FUNCTION noodle_reconcile_customer_auth_audiences()
|
|
89
|
+
RETURNS void
|
|
90
|
+
LANGUAGE plpgsql
|
|
91
|
+
AS $$
|
|
92
|
+
BEGIN
|
|
93
|
+
DELETE FROM customer_auth_audience_bindings;
|
|
94
|
+
INSERT INTO customer_auth_audience_bindings
|
|
95
|
+
(issuer, audience, org_slug, app_slug, environment)
|
|
96
|
+
SELECT DISTINCT ON (binding.issuer, binding.audience)
|
|
97
|
+
binding.issuer, binding.audience,
|
|
98
|
+
record.org_slug, record.app_slug, record.environment
|
|
99
|
+
FROM deploy_records record
|
|
100
|
+
CROSS JOIN LATERAL noodle_customer_auth_bindings(record.server_auth) binding
|
|
101
|
+
WHERE record.active
|
|
102
|
+
AND record.archived_at IS NULL
|
|
103
|
+
AND record.access_mode = 'customers'
|
|
104
|
+
AND noodle_customer_auth_is_valid(record.server_auth)
|
|
105
|
+
ORDER BY binding.issuer, binding.audience,
|
|
106
|
+
record.org_slug, record.app_slug, record.environment;
|
|
107
|
+
END
|
|
108
|
+
$$
|
|
109
|
+
`);
|
|
110
|
+
await client.query(`
|
|
111
|
+
CREATE OR REPLACE FUNCTION noodle_customer_auth_audience_row_trigger()
|
|
112
|
+
RETURNS trigger
|
|
113
|
+
LANGUAGE plpgsql
|
|
114
|
+
AS $$
|
|
115
|
+
DECLARE
|
|
116
|
+
binding record;
|
|
117
|
+
owner_org text;
|
|
118
|
+
owner_app text;
|
|
119
|
+
owner_environment text;
|
|
120
|
+
BEGIN
|
|
121
|
+
IF TG_OP <> 'DELETE'
|
|
122
|
+
AND NEW.active
|
|
123
|
+
AND NEW.archived_at IS NULL
|
|
124
|
+
AND NEW.access_mode = 'customers'
|
|
125
|
+
THEN
|
|
126
|
+
IF NOT noodle_customer_auth_is_valid(NEW.server_auth) THEN
|
|
127
|
+
RAISE EXCEPTION USING
|
|
128
|
+
ERRCODE = 'NDA02',
|
|
129
|
+
MESSAGE = 'customer auth audience projection invalid';
|
|
130
|
+
END IF;
|
|
131
|
+
FOR binding IN
|
|
132
|
+
SELECT *
|
|
133
|
+
FROM noodle_customer_auth_bindings(NEW.server_auth)
|
|
134
|
+
ORDER BY issuer, audience
|
|
135
|
+
LOOP
|
|
136
|
+
IF EXISTS (
|
|
137
|
+
SELECT 1
|
|
138
|
+
FROM deploy_records current_record
|
|
139
|
+
CROSS JOIN LATERAL
|
|
140
|
+
noodle_customer_auth_bindings(current_record.server_auth) current_binding
|
|
141
|
+
WHERE current_record.active
|
|
142
|
+
AND current_record.archived_at IS NULL
|
|
143
|
+
AND current_record.access_mode = 'customers'
|
|
144
|
+
AND noodle_customer_auth_is_valid(current_record.server_auth)
|
|
145
|
+
AND current_binding.issuer = binding.issuer
|
|
146
|
+
AND current_binding.audience = binding.audience
|
|
147
|
+
AND (
|
|
148
|
+
current_record.org_slug <> NEW.org_slug
|
|
149
|
+
OR current_record.app_slug <> NEW.app_slug
|
|
150
|
+
OR current_record.environment <> NEW.environment
|
|
151
|
+
)
|
|
152
|
+
) THEN
|
|
153
|
+
RAISE EXCEPTION USING
|
|
154
|
+
ERRCODE = 'NDA01',
|
|
155
|
+
MESSAGE = 'customer auth audience conflict';
|
|
156
|
+
END IF;
|
|
157
|
+
<<claim_binding>>
|
|
158
|
+
LOOP
|
|
159
|
+
SELECT ownership.org_slug, ownership.app_slug, ownership.environment
|
|
160
|
+
INTO owner_org, owner_app, owner_environment
|
|
161
|
+
FROM customer_auth_audience_bindings ownership
|
|
162
|
+
WHERE ownership.issuer = binding.issuer
|
|
163
|
+
AND ownership.audience = binding.audience;
|
|
164
|
+
IF NOT FOUND THEN
|
|
165
|
+
IF NOT pg_try_advisory_xact_lock(
|
|
166
|
+
hashtextextended(
|
|
167
|
+
jsonb_build_array(binding.issuer, binding.audience)::text,
|
|
168
|
+
0
|
|
169
|
+
)
|
|
170
|
+
) THEN
|
|
171
|
+
RAISE EXCEPTION USING
|
|
172
|
+
ERRCODE = 'NDA01',
|
|
173
|
+
MESSAGE = 'customer auth audience conflict';
|
|
174
|
+
END IF;
|
|
175
|
+
SELECT ownership.org_slug, ownership.app_slug, ownership.environment
|
|
176
|
+
INTO owner_org, owner_app, owner_environment
|
|
177
|
+
FROM customer_auth_audience_bindings ownership
|
|
178
|
+
WHERE ownership.issuer = binding.issuer
|
|
179
|
+
AND ownership.audience = binding.audience;
|
|
180
|
+
IF FOUND THEN
|
|
181
|
+
CONTINUE claim_binding;
|
|
182
|
+
END IF;
|
|
183
|
+
INSERT INTO customer_auth_audience_bindings
|
|
184
|
+
(issuer, audience, org_slug, app_slug, environment)
|
|
185
|
+
VALUES (
|
|
186
|
+
binding.issuer,
|
|
187
|
+
binding.audience,
|
|
188
|
+
NEW.org_slug,
|
|
189
|
+
NEW.app_slug,
|
|
190
|
+
NEW.environment
|
|
191
|
+
);
|
|
192
|
+
EXIT claim_binding;
|
|
193
|
+
END IF;
|
|
194
|
+
|
|
195
|
+
IF owner_org = NEW.org_slug
|
|
196
|
+
AND owner_app = NEW.app_slug
|
|
197
|
+
AND owner_environment = NEW.environment
|
|
198
|
+
THEN
|
|
199
|
+
PERFORM 1
|
|
200
|
+
FROM customer_auth_audience_bindings ownership
|
|
201
|
+
WHERE ownership.issuer = binding.issuer
|
|
202
|
+
AND ownership.audience = binding.audience
|
|
203
|
+
AND ownership.org_slug = owner_org
|
|
204
|
+
AND ownership.app_slug = owner_app
|
|
205
|
+
AND ownership.environment = owner_environment
|
|
206
|
+
FOR KEY SHARE NOWAIT;
|
|
207
|
+
IF FOUND THEN
|
|
208
|
+
EXIT claim_binding;
|
|
209
|
+
END IF;
|
|
210
|
+
CONTINUE claim_binding;
|
|
211
|
+
END IF;
|
|
212
|
+
|
|
213
|
+
SELECT ownership.org_slug, ownership.app_slug, ownership.environment
|
|
214
|
+
INTO owner_org, owner_app, owner_environment
|
|
215
|
+
FROM customer_auth_audience_bindings ownership
|
|
216
|
+
WHERE ownership.issuer = binding.issuer
|
|
217
|
+
AND ownership.audience = binding.audience
|
|
218
|
+
FOR UPDATE NOWAIT;
|
|
219
|
+
IF NOT FOUND THEN
|
|
220
|
+
CONTINUE claim_binding;
|
|
221
|
+
END IF;
|
|
222
|
+
IF owner_org = NEW.org_slug
|
|
223
|
+
AND owner_app = NEW.app_slug
|
|
224
|
+
AND owner_environment = NEW.environment
|
|
225
|
+
THEN
|
|
226
|
+
EXIT claim_binding;
|
|
227
|
+
END IF;
|
|
228
|
+
IF EXISTS (
|
|
229
|
+
SELECT 1
|
|
230
|
+
FROM deploy_records current_record
|
|
231
|
+
CROSS JOIN LATERAL
|
|
232
|
+
noodle_customer_auth_bindings(current_record.server_auth) current_binding
|
|
233
|
+
WHERE current_record.active
|
|
234
|
+
AND current_record.archived_at IS NULL
|
|
235
|
+
AND current_record.access_mode = 'customers'
|
|
236
|
+
AND current_record.org_slug = owner_org
|
|
237
|
+
AND current_record.app_slug = owner_app
|
|
238
|
+
AND current_record.environment = owner_environment
|
|
239
|
+
AND current_binding.issuer = binding.issuer
|
|
240
|
+
AND current_binding.audience = binding.audience
|
|
241
|
+
) THEN
|
|
242
|
+
RAISE EXCEPTION USING
|
|
243
|
+
ERRCODE = 'NDA01',
|
|
244
|
+
MESSAGE = 'customer auth audience conflict';
|
|
245
|
+
END IF;
|
|
246
|
+
UPDATE customer_auth_audience_bindings ownership
|
|
247
|
+
SET org_slug = NEW.org_slug,
|
|
248
|
+
app_slug = NEW.app_slug,
|
|
249
|
+
environment = NEW.environment
|
|
250
|
+
WHERE ownership.issuer = binding.issuer
|
|
251
|
+
AND ownership.audience = binding.audience;
|
|
252
|
+
EXIT claim_binding;
|
|
253
|
+
END LOOP claim_binding;
|
|
254
|
+
END LOOP;
|
|
255
|
+
END IF;
|
|
256
|
+
RETURN NULL;
|
|
257
|
+
EXCEPTION
|
|
258
|
+
WHEN lock_not_available OR unique_violation THEN
|
|
259
|
+
RAISE EXCEPTION USING
|
|
260
|
+
ERRCODE = 'NDA01',
|
|
261
|
+
MESSAGE = 'customer auth audience conflict';
|
|
262
|
+
END
|
|
263
|
+
$$
|
|
264
|
+
`);
|
|
265
|
+
await client.query('DROP TRIGGER IF EXISTS deploy_records_customer_auth_audience ON deploy_records');
|
|
266
|
+
await client.query(`
|
|
267
|
+
CREATE TRIGGER deploy_records_customer_auth_audience
|
|
268
|
+
AFTER INSERT OR UPDATE OR DELETE ON deploy_records
|
|
269
|
+
FOR EACH ROW
|
|
270
|
+
EXECUTE FUNCTION noodle_customer_auth_audience_row_trigger()
|
|
271
|
+
`);
|
|
272
|
+
await client.query('SELECT noodle_reconcile_customer_auth_audiences()');
|
|
273
|
+
const report = await client.query(`
|
|
274
|
+
WITH active_customer_records AS (
|
|
275
|
+
SELECT org_slug, app_slug, environment, server_auth
|
|
276
|
+
FROM deploy_records
|
|
277
|
+
WHERE active
|
|
278
|
+
AND archived_at IS NULL
|
|
279
|
+
AND access_mode = 'customers'
|
|
280
|
+
),
|
|
281
|
+
valid_bindings AS (
|
|
282
|
+
SELECT DISTINCT binding.issuer, binding.audience,
|
|
283
|
+
record.org_slug, record.app_slug, record.environment
|
|
284
|
+
FROM active_customer_records record
|
|
285
|
+
CROSS JOIN LATERAL noodle_customer_auth_bindings(record.server_auth) binding
|
|
286
|
+
WHERE noodle_customer_auth_is_valid(record.server_auth)
|
|
287
|
+
),
|
|
288
|
+
conflicting_bindings AS (
|
|
289
|
+
SELECT issuer, audience
|
|
290
|
+
FROM valid_bindings
|
|
291
|
+
GROUP BY issuer, audience
|
|
292
|
+
HAVING count(*) > 1
|
|
293
|
+
),
|
|
294
|
+
conflicting_boundaries AS (
|
|
295
|
+
SELECT DISTINCT binding.org_slug, binding.app_slug, binding.environment
|
|
296
|
+
FROM valid_bindings binding
|
|
297
|
+
INNER JOIN conflicting_bindings conflict
|
|
298
|
+
ON conflict.issuer = binding.issuer
|
|
299
|
+
AND conflict.audience = binding.audience
|
|
300
|
+
)
|
|
301
|
+
SELECT
|
|
302
|
+
(
|
|
303
|
+
SELECT count(DISTINCT ROW(org_slug, app_slug, environment))::int
|
|
304
|
+
FROM active_customer_records
|
|
305
|
+
WHERE NOT noodle_customer_auth_is_valid(server_auth)
|
|
306
|
+
) AS invalid_boundaries,
|
|
307
|
+
(SELECT count(*)::int FROM conflicting_bindings) AS conflicting_bindings,
|
|
308
|
+
(SELECT count(*)::int FROM conflicting_boundaries) AS conflicting_boundaries
|
|
309
|
+
`);
|
|
310
|
+
const row = report.rows[0];
|
|
311
|
+
if (row === undefined) {
|
|
312
|
+
throw new Error('customer auth audience reconciliation report missing');
|
|
313
|
+
}
|
|
314
|
+
await client.query('COMMIT');
|
|
315
|
+
return {
|
|
316
|
+
invalidBoundaries: row.invalid_boundaries,
|
|
317
|
+
conflictingBindings: row.conflicting_bindings,
|
|
318
|
+
conflictingBoundaries: row.conflicting_boundaries,
|
|
319
|
+
};
|
|
320
|
+
}
|
|
321
|
+
catch (error) {
|
|
322
|
+
await client.query('ROLLBACK').catch(() => undefined);
|
|
323
|
+
throw error;
|
|
324
|
+
}
|
|
325
|
+
finally {
|
|
326
|
+
client.release();
|
|
327
|
+
}
|
|
328
|
+
}
|
|
329
|
+
//# sourceMappingURL=postgres-customer-auth-audience-schema.js.map
|
package/node_modules/@noodle-borg/service/dist/store/postgres-customer-auth-audience-schema.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"postgres-customer-auth-audience-schema.js","sourceRoot":"","sources":["../../src/store/postgres-customer-auth-audience-schema.ts"],"names":[],"mappings":"AAcA;;;;;;;GAOG;AACH,MAAM,CAAC,KAAK,UAAU,gCAAgC,CACpD,IAA2B;IAE3B,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,OAAO,EAAE,CAAC;IACpC,IAAI,CAAC;QACH,MAAM,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QAC5B,MAAM,MAAM,CAAC,KAAK,CAAC,uDAAuD,CAAC,CAAC;QAC5E,MAAM,MAAM,CAAC,KAAK,CAAC;;;;;KAKlB,CAAC,CAAC;QACH,MAAM,MAAM,CAAC,KAAK,CAAC;;;;;;;;;KASlB,CAAC,CAAC;QACH,MAAM,MAAM,CAAC,KAAK,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;KAqClB,CAAC,CAAC;QACH,MAAM,MAAM,CAAC,KAAK,CAAC;;;;;;;;;;;;;;;;;;KAkBlB,CAAC,CAAC;QACH,MAAM,MAAM,CAAC,KAAK,CAAC;;;;;;;;;;;;;;;;;;;;;;KAsBlB,CAAC,CAAC;QACH,MAAM,MAAM,CAAC,KAAK,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;KA0JlB,CAAC,CAAC;QACH,MAAM,MAAM,CAAC,KAAK,CAChB,gFAAgF,CACjF,CAAC;QACF,MAAM,MAAM,CAAC,KAAK,CAAC;;;;;KAKlB,CAAC,CAAC;QACH,MAAM,MAAM,CAAC,KAAK,CAAC,mDAAmD,CAAC,CAAC;QACxE,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,KAAK,CAAwC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;KAoCxE,CAAC,CAAC;QACH,MAAM,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAC3B,IAAI,GAAG,KAAK,SAAS,EAAE,CAAC;YACtB,MAAM,IAAI,KAAK,CAAC,sDAAsD,CAAC,CAAC;QAC1E,CAAC;QACD,MAAM,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;QAC7B,OAAO;YACL,iBAAiB,EAAE,GAAG,CAAC,kBAAkB;YACzC,mBAAmB,EAAE,GAAG,CAAC,oBAAoB;YAC7C,qBAAqB,EAAE,GAAG,CAAC,sBAAsB;SAClD,CAAC;IACJ,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;QACtD,MAAM,KAAK,CAAC;IACd,CAAC;YAAS,CAAC;QACT,MAAM,CAAC,OAAO,EAAE,CAAC;IACnB,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import type { Pool } from 'pg';
|
|
2
|
+
import type { TenantAuthConfig, TenantRef } from '../store.js';
|
|
3
|
+
/** Efficient shared-store lookup used to fail closed on cross-boundary OIDC audience reuse. */
|
|
4
|
+
export declare function findActiveCustomerAuthAudienceConflictRow(pool: Pool, ref: TenantRef, auth: TenantAuthConfig): Promise<TenantRef | undefined>;
|
|
5
|
+
//# sourceMappingURL=postgres-customer-auth-audience.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"postgres-customer-auth-audience.d.ts","sourceRoot":"","sources":["../../src/store/postgres-customer-auth-audience.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,IAAI,CAAC;AAK/B,OAAO,KAAK,EAAE,gBAAgB,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAU/D,+FAA+F;AAC/F,wBAAsB,yCAAyC,CAC7D,IAAI,EAAE,IAAI,EACV,GAAG,EAAE,SAAS,EACd,IAAI,EAAE,gBAAgB,GACrB,OAAO,CAAC,SAAS,GAAG,SAAS,CAAC,CA4BhC"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { customerAuthAudienceBindings, isTenantAuthConfig, } from '../customer-auth-audience-binding.js';
|
|
2
|
+
import { validateTenantRef } from '../store.js';
|
|
3
|
+
/** Efficient shared-store lookup used to fail closed on cross-boundary OIDC audience reuse. */
|
|
4
|
+
export async function findActiveCustomerAuthAudienceConflictRow(pool, ref, auth) {
|
|
5
|
+
const safe = validateTenantRef(ref);
|
|
6
|
+
const keys = new Set(customerAuthAudienceBindings(auth).map((binding) => JSON.stringify([binding.issuer, binding.audience])));
|
|
7
|
+
if (keys.size === 0)
|
|
8
|
+
return undefined;
|
|
9
|
+
const { rows } = await pool.query(`SELECT org_slug, app_slug, environment, server_auth
|
|
10
|
+
FROM deploy_records
|
|
11
|
+
WHERE active = true
|
|
12
|
+
AND archived_at IS NULL
|
|
13
|
+
AND access_mode = 'customers'
|
|
14
|
+
AND NOT (org_slug = $1 AND app_slug = $2 AND environment = $3)`, [safe.org, safe.app, safe.env]);
|
|
15
|
+
for (const row of rows) {
|
|
16
|
+
if (!isTenantAuthConfig(row.server_auth))
|
|
17
|
+
continue;
|
|
18
|
+
if (customerAuthAudienceBindings(row.server_auth).some((binding) => keys.has(JSON.stringify([binding.issuer, binding.audience])))) {
|
|
19
|
+
return { org: row.org_slug, app: row.app_slug, env: row.environment };
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
return undefined;
|
|
23
|
+
}
|
|
24
|
+
//# sourceMappingURL=postgres-customer-auth-audience.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"postgres-customer-auth-audience.js","sourceRoot":"","sources":["../../src/store/postgres-customer-auth-audience.ts"],"names":[],"mappings":"AACA,OAAO,EACL,4BAA4B,EAC5B,kBAAkB,GACnB,MAAM,sCAAsC,CAAC;AAE9C,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAShD,+FAA+F;AAC/F,MAAM,CAAC,KAAK,UAAU,yCAAyC,CAC7D,IAAU,EACV,GAAc,EACd,IAAsB;IAEtB,MAAM,IAAI,GAAG,iBAAiB,CAAC,GAAG,CAAC,CAAC;IACpC,MAAM,IAAI,GAAG,IAAI,GAAG,CAClB,4BAA4B,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CACjD,IAAI,CAAC,SAAS,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAC,CACnD,CACF,CAAC;IACF,IAAI,IAAI,CAAC,IAAI,KAAK,CAAC;QAAE,OAAO,SAAS,CAAC;IACtC,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,IAAI,CAAC,KAAK,CAC/B;;;;;sEAKkE,EAClE,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,CAC/B,CAAC;IACF,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;QACvB,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,WAAW,CAAC;YAAE,SAAS;QACnD,IACE,4BAA4B,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE,CAC7D,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,CAC7D,EACD,CAAC;YACD,OAAO,EAAE,GAAG,EAAE,GAAG,CAAC,QAAQ,EAAE,GAAG,EAAE,GAAG,CAAC,QAAQ,EAAE,GAAG,EAAE,GAAG,CAAC,WAAW,EAAE,CAAC;QACxE,CAAC;IACH,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"postgres-deploy-records.d.ts","sourceRoot":"","sources":["../../src/store/postgres-deploy-records.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"postgres-deploy-records.d.ts","sourceRoot":"","sources":["../../src/store/postgres-deploy-records.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,IAAI,CAAC;AAO/B,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAIhD;;;;GAIG;AACH,wBAAsB,sBAAsB,CAAC,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CAuF5F"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { assertProductionAppCapacityTx, lockBillingEnforcementLifecycleSharedTx, prepareProductionAppAdmissionTx, } from '../billing/postgres-production-app-admission.js';
|
|
2
|
+
import { translateCustomerAuthAudienceDatabaseError } from '../customer-auth-audience-binding.js';
|
|
2
3
|
import { DEPLOYMENT_ID_PATTERN, validateTenantRef } from '../store.js';
|
|
3
4
|
import { deployRecordParams } from './postgres-rows.js';
|
|
4
5
|
/**
|
|
@@ -78,7 +79,7 @@ export async function appendDeployRecordRows(pool, record) {
|
|
|
78
79
|
}
|
|
79
80
|
catch (error) {
|
|
80
81
|
await client.query('ROLLBACK');
|
|
81
|
-
throw error;
|
|
82
|
+
throw translateCustomerAuthAudienceDatabaseError(error);
|
|
82
83
|
}
|
|
83
84
|
finally {
|
|
84
85
|
client.release();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"postgres-deploy-records.js","sourceRoot":"","sources":["../../src/store/postgres-deploy-records.ts"],"names":[],"mappings":"AACA,OAAO,EACL,6BAA6B,EAC7B,uCAAuC,EACvC,+BAA+B,GAChC,MAAM,iDAAiD,CAAC;
|
|
1
|
+
{"version":3,"file":"postgres-deploy-records.js","sourceRoot":"","sources":["../../src/store/postgres-deploy-records.ts"],"names":[],"mappings":"AACA,OAAO,EACL,6BAA6B,EAC7B,uCAAuC,EACvC,+BAA+B,GAChC,MAAM,iDAAiD,CAAC;AACzD,OAAO,EAAE,0CAA0C,EAAE,MAAM,sCAAsC,CAAC;AAElG,OAAO,EAAE,qBAAqB,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AACvE,OAAO,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAExD;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,sBAAsB,CAAC,IAAU,EAAE,MAAoB;IAC3E,6FAA6F;IAC7F,mGAAmG;IACnG,iBAAiB,CAAC,EAAE,GAAG,EAAE,MAAM,CAAC,OAAO,EAAE,GAAG,EAAE,MAAM,CAAC,OAAO,EAAE,GAAG,EAAE,MAAM,CAAC,WAAW,EAAE,CAAC,CAAC;IACzF,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,EAAE,CAAC;QACrD,MAAM,IAAI,KAAK,CAAC,0CAA0C,MAAM,CAAC,YAAY,GAAG,CAAC,CAAC;IACpF,CAAC;IACD,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,OAAO,EAAE,CAAC;IACpC,MAAM,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IAC5B,IAAI,CAAC;QACH,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;YAClB,MAAM,uCAAuC,CAAC,MAAM,CAAC,CAAC;YACtD,MAAM,SAAS,GAAG,MAAM,+BAA+B,CAAC,MAAM,EAAE;gBAC9D,GAAG,EAAE,MAAM,CAAC,OAAO;gBACnB,GAAG,EAAE,MAAM,CAAC,OAAO;aACpB,CAAC,CAAC;YACH,MAAM,6BAA6B,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;QACzD,CAAC;QACD,MAAM,YAAY,GAAG,MAAM,MAAM,CAAC,KAAK,CAAC,kDAAkD,EAAE;YAC1F,MAAM,CAAC,OAAO;SACf,CAAC,CAAC;QACH,IAAI,YAAY,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACnC,MAAM,IAAI,KAAK,CAAC,4CAA4C,CAAC,CAAC;QAChE,CAAC;QACD,MAAM,MAAM,CAAC,KAAK,CAChB;+CACyC,EACzC,CAAC,MAAM,CAAC,OAAO,EAAE,MAAM,CAAC,OAAO,CAAC,CACjC,CAAC;QACF,MAAM,MAAM,CAAC,KAAK,CAChB;;;;yDAImD,EACnD,CAAC,MAAM,CAAC,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE,MAAM,CAAC,WAAW,CAAC,CACrD,CAAC;QACF,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;YAClB,MAAM,MAAM,CAAC,KAAK,CAChB;;;;;sDAK8C,EAC9C,CAAC,MAAM,CAAC,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE,MAAM,CAAC,WAAW,EAAE,MAAM,CAAC,aAAa,IAAI,IAAI,CAAC,CACnF,CAAC;QACJ,CAAC;QACD,wGAAwG;QACxG,MAAM,MAAM,CAAC,KAAK,CAChB;;;;;;;;;;;;;;;;;;;;;;;;;;;gEA2B0D,EAC1D,kBAAkB,CAAC,MAAM,CAAC,CAC3B,CAAC;QACF,MAAM,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;IAC/B,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;QAC/B,MAAM,0CAA0C,CAAC,KAAK,CAAC,CAAC;IAC1D,CAAC;YAAS,CAAC;QACT,MAAM,CAAC,OAAO,EAAE,CAAC;IACnB,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { AccessMode } from '@noodle-borg/transport-http';
|
|
2
|
+
import type { Pool } from 'pg';
|
|
3
|
+
import type { DeployRecord, TenantAuthConfig, TenantRef } from '../store.js';
|
|
4
|
+
/** Compare-and-set one active deployment's access mode and customer auth projection atomically. */
|
|
5
|
+
export declare function updateActiveDeploymentAccessRow(pool: Pool, ref: TenantRef, deploymentId: string, accessMode: AccessMode, precondition: {
|
|
6
|
+
readonly expectedAccessMode: AccessMode | undefined;
|
|
7
|
+
readonly serverAuth?: TenantAuthConfig;
|
|
8
|
+
}): Promise<DeployRecord | undefined>;
|
|
9
|
+
//# sourceMappingURL=postgres-deployment-access.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"postgres-deployment-access.d.ts","sourceRoot":"","sources":["../../src/store/postgres-deployment-access.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAC;AAC9D,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,IAAI,CAAC;AAE/B,OAAO,KAAK,EAAE,YAAY,EAAE,gBAAgB,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAI7E,mGAAmG;AACnG,wBAAsB,+BAA+B,CACnD,IAAI,EAAE,IAAI,EACV,GAAG,EAAE,SAAS,EACd,YAAY,EAAE,MAAM,EACpB,UAAU,EAAE,UAAU,EACtB,YAAY,EAAE;IACZ,QAAQ,CAAC,kBAAkB,EAAE,UAAU,GAAG,SAAS,CAAC;IACpD,QAAQ,CAAC,UAAU,CAAC,EAAE,gBAAgB,CAAC;CACxC,GACA,OAAO,CAAC,YAAY,GAAG,SAAS,CAAC,CA+CnC"}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import { translateCustomerAuthAudienceDatabaseError } from '../customer-auth-audience-binding.js';
|
|
2
|
+
import { DEPLOYMENT_ID_PATTERN, validateTenantRef } from '../store.js';
|
|
3
|
+
import { rowToRecord } from './postgres-rows.js';
|
|
4
|
+
/** Compare-and-set one active deployment's access mode and customer auth projection atomically. */
|
|
5
|
+
export async function updateActiveDeploymentAccessRow(pool, ref, deploymentId, accessMode, precondition) {
|
|
6
|
+
const safe = validateTenantRef(ref);
|
|
7
|
+
if (!DEPLOYMENT_ID_PATTERN.test(deploymentId))
|
|
8
|
+
return undefined;
|
|
9
|
+
const client = await pool.connect();
|
|
10
|
+
try {
|
|
11
|
+
await client.query('BEGIN');
|
|
12
|
+
const { rows } = await client.query(`UPDATE deploy_records
|
|
13
|
+
SET access_mode = CASE
|
|
14
|
+
WHEN COALESCE(access_mode, 'owner-only') = $5 THEN access_mode
|
|
15
|
+
ELSE $5
|
|
16
|
+
END,
|
|
17
|
+
server_auth = CASE
|
|
18
|
+
WHEN $5 = 'customers' AND $7::jsonb IS NOT NULL THEN $7::jsonb
|
|
19
|
+
ELSE server_auth
|
|
20
|
+
END
|
|
21
|
+
WHERE deployment_id = $1
|
|
22
|
+
AND org_slug = $2
|
|
23
|
+
AND app_slug = $3
|
|
24
|
+
AND environment = $4
|
|
25
|
+
AND active = true
|
|
26
|
+
AND archived_at IS NULL
|
|
27
|
+
AND access_mode IS NOT DISTINCT FROM $6
|
|
28
|
+
RETURNING *`, [
|
|
29
|
+
deploymentId,
|
|
30
|
+
safe.org,
|
|
31
|
+
safe.app,
|
|
32
|
+
safe.env,
|
|
33
|
+
accessMode,
|
|
34
|
+
precondition.expectedAccessMode ?? null,
|
|
35
|
+
precondition.serverAuth === undefined ? null : JSON.stringify(precondition.serverAuth),
|
|
36
|
+
]);
|
|
37
|
+
const updated = rows[0];
|
|
38
|
+
if (updated === undefined) {
|
|
39
|
+
await client.query('ROLLBACK');
|
|
40
|
+
return undefined;
|
|
41
|
+
}
|
|
42
|
+
await client.query('COMMIT');
|
|
43
|
+
return rowToRecord(updated);
|
|
44
|
+
}
|
|
45
|
+
catch (error) {
|
|
46
|
+
await client.query('ROLLBACK').catch(() => undefined);
|
|
47
|
+
throw translateCustomerAuthAudienceDatabaseError(error);
|
|
48
|
+
}
|
|
49
|
+
finally {
|
|
50
|
+
client.release();
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
//# sourceMappingURL=postgres-deployment-access.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"postgres-deployment-access.js","sourceRoot":"","sources":["../../src/store/postgres-deployment-access.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,0CAA0C,EAAE,MAAM,sCAAsC,CAAC;AAElG,OAAO,EAAE,qBAAqB,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AACvE,OAAO,EAAkB,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAEjE,mGAAmG;AACnG,MAAM,CAAC,KAAK,UAAU,+BAA+B,CACnD,IAAU,EACV,GAAc,EACd,YAAoB,EACpB,UAAsB,EACtB,YAGC;IAED,MAAM,IAAI,GAAG,iBAAiB,CAAC,GAAG,CAAC,CAAC;IACpC,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,YAAY,CAAC;QAAE,OAAO,SAAS,CAAC;IAChE,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,OAAO,EAAE,CAAC;IACpC,IAAI,CAAC;QACH,MAAM,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QAC5B,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,MAAM,CAAC,KAAK,CACjC;;;;;;;;;;;;;;;;mBAgBa,EACb;YACE,YAAY;YACZ,IAAI,CAAC,GAAG;YACR,IAAI,CAAC,GAAG;YACR,IAAI,CAAC,GAAG;YACR,UAAU;YACV,YAAY,CAAC,kBAAkB,IAAI,IAAI;YACvC,YAAY,CAAC,UAAU,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,UAAU,CAAC;SACvF,CACF,CAAC;QACF,MAAM,OAAO,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;QACxB,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;YAC1B,MAAM,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;YAC/B,OAAO,SAAS,CAAC;QACnB,CAAC;QACD,MAAM,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;QAC7B,OAAO,WAAW,CAAC,OAAO,CAAC,CAAC;IAC9B,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;QACtD,MAAM,0CAA0C,CAAC,KAAK,CAAC,CAAC;IAC1D,CAAC;YAAS,CAAC;QACT,MAAM,CAAC,OAAO,EAAE,CAAC;IACnB,CAAC;AACH,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"postgres-github-runs.d.ts","sourceRoot":"","sources":["../../src/store/postgres-github-runs.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAc,MAAM,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"postgres-github-runs.d.ts","sourceRoot":"","sources":["../../src/store/postgres-github-runs.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAc,MAAM,IAAI,CAAC;AAO3C,OAAO,EACL,KAAK,oBAAoB,EACzB,KAAK,4BAA4B,EACjC,KAAK,oBAAoB,EACzB,KAAK,qBAAqB,EAE1B,KAAK,eAAe,EACpB,KAAK,eAAe,EACpB,KAAK,oBAAoB,EACzB,KAAK,SAAS,EACd,KAAK,yBAAyB,EAE/B,MAAM,aAAa,CAAC;AA+DrB,wBAAsB,kBAAkB,CACtC,IAAI,EAAE,IAAI,EACV,GAAG,EAAE,MAAM,IAAI,EACf,KAAK,EAAE,oBAAoB,GAC1B,OAAO,CAAC,qBAAqB,CAAC,CAkEhC;AAED,wBAAsB,eAAe,CACnC,IAAI,EAAE,IAAI,EACV,GAAG,EAAE,MAAM,EACX,KAAK,EAAE,MAAM,GACZ,OAAO,CAAC,eAAe,GAAG,SAAS,CAAC,CAMtC;AAED,wBAAsB,mBAAmB,CACvC,IAAI,EAAE,IAAI,EACV,KAAK,EAAE,MAAM,GACZ,OAAO,CAAC,eAAe,GAAG,SAAS,CAAC,CAKtC;AAED,wBAAsB,iBAAiB,CACrC,IAAI,EAAE,IAAI,EACV,GAAG,EAAE,MAAM,EACX,GAAG,EAAE,MAAM,EACX,IAAI,GAAE;IAAE,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAO,GACrC,OAAO,CAAC,oBAAoB,CAAC,CAW/B;AAED,wBAAsB,sBAAsB,CAC1C,IAAI,EAAE,IAAI,EACV,GAAG,EAAE,MAAM,IAAI,EACf,GAAG,EAAE,MAAM,EACX,KAAK,EAAE,MAAM,EACb,EAAE,EAAE,eAAe,EACnB,KAAK,GAAE;IAAE,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAA;CAAO,GAC7E,OAAO,CAAC,yBAAyB,CAAC,CA0CpC;AAED,wBAAsB,yBAAyB,CAC7C,IAAI,EAAE,IAAI,EACV,GAAG,EAAE,MAAM,IAAI,EACf,MAAM,EAAE,4BAA4B,GACnC,OAAO,CAAC,SAAS,MAAM,EAAE,CAAC,CAoB5B;AAED;;;;;GAKG;AACH,wBAAsB,0BAA0B,CAC9C,IAAI,EAAE,IAAI,EACV,GAAG,EAAE,SAAS,EACd,YAAY,EAAE,MAAM,EACpB,KAAK,EAAE,MAAM,GACZ,OAAO,CAAC,oBAAoB,GAAG,SAAS,CAAC,CA2E3C"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { assertProductionAppCapacityTx, lockBillingEnforcementLifecycleSharedTx, prepareProductionAppAdmissionTx, } from '../billing/postgres-production-app-admission.js';
|
|
2
|
+
import { translateCustomerAuthAudienceDatabaseError } from '../customer-auth-audience-binding.js';
|
|
2
3
|
import { DEPLOYMENT_ID_PATTERN, validateTenantRef, } from '../store.js';
|
|
3
4
|
import { applyDeployRunTransition, DEFAULT_DEPLOY_RUN_LIST_LIMIT, validateCancelFilter, validateCreateDeployRunInput, } from './github-runs.js';
|
|
4
5
|
import { rowToRecord as deployRecordFromRow } from './postgres-rows.js';
|
|
@@ -225,7 +226,7 @@ export async function activateDeploymentForRunTx(pool, ref, deploymentId, runId)
|
|
|
225
226
|
}
|
|
226
227
|
catch (error) {
|
|
227
228
|
await client.query('ROLLBACK').catch(() => undefined);
|
|
228
|
-
throw error;
|
|
229
|
+
throw translateCustomerAuthAudienceDatabaseError(error);
|
|
229
230
|
}
|
|
230
231
|
finally {
|
|
231
232
|
client.release();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"postgres-github-runs.js","sourceRoot":"","sources":["../../src/store/postgres-github-runs.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"postgres-github-runs.js","sourceRoot":"","sources":["../../src/store/postgres-github-runs.ts"],"names":[],"mappings":"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"}
|
|
@@ -4,8 +4,10 @@
|
|
|
4
4
|
*/
|
|
5
5
|
import type { HostedPackagedAsset } from '@noodle-borg/compiler';
|
|
6
6
|
import type { SecretBox } from '@noodle-borg/runtime';
|
|
7
|
+
import { isTenantAuthConfig } from '../customer-auth-audience-binding.js';
|
|
7
8
|
import type { ConfigScope, ConfigValueMetadata, DeployRecord, ManagedConfigKind, SecretEnvelope } from '../store.js';
|
|
8
9
|
import type { PostgresStoreOptions } from './postgres.js';
|
|
10
|
+
export { isTenantAuthConfig };
|
|
9
11
|
/** The on-disk-equivalent row shape. `created_at` comes back as a `Date`; `secrets` is parsed `jsonb`. */
|
|
10
12
|
export interface DeployRow {
|
|
11
13
|
readonly deployment_id: string;
|
|
@@ -49,7 +51,6 @@ export interface ConfigRow {
|
|
|
49
51
|
export declare function deployRecordParams(record: DeployRecord): unknown[];
|
|
50
52
|
export declare function rowToRecord(row: DeployRow): DeployRecord;
|
|
51
53
|
export declare function configRowToMetadata(row: ConfigRow): ConfigValueMetadata;
|
|
52
|
-
export declare function isTenantAuthConfig(value: unknown): value is NonNullable<DeployRecord['serverAuth']>;
|
|
53
54
|
export declare function validateConfigKind(kind: ManagedConfigKind): ManagedConfigKind;
|
|
54
55
|
export declare function scopeParts(scope: ConfigScope): {
|
|
55
56
|
readonly level: ConfigScope['level'];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"postgres-rows.d.ts","sourceRoot":"","sources":["../../src/store/postgres-rows.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAEjE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"postgres-rows.d.ts","sourceRoot":"","sources":["../../src/store/postgres-rows.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,6 +2,8 @@
|
|
|
2
2
|
* Row shapes + row↔record mapping for the relational store (extracted verbatim from `postgres.ts`
|
|
3
3
|
* to keep that file under the size gate). Pure mapping/validation — no SQL here.
|
|
4
4
|
*/
|
|
5
|
+
import { isTenantAuthConfig } from '../customer-auth-audience-binding.js';
|
|
6
|
+
export { isTenantAuthConfig };
|
|
5
7
|
/** Ordered bind values for the deploy-record upsert in {@link PostgresArtifactStore}. */
|
|
6
8
|
export function deployRecordParams(record) {
|
|
7
9
|
return [
|
|
@@ -87,30 +89,6 @@ export function configRowToMetadata(row) {
|
|
|
87
89
|
: {}),
|
|
88
90
|
};
|
|
89
91
|
}
|
|
90
|
-
export function isTenantAuthConfig(value) {
|
|
91
|
-
if (typeof value !== 'object' || value === null)
|
|
92
|
-
return false;
|
|
93
|
-
const auth = value;
|
|
94
|
-
if (auth.kind === 'bridge') {
|
|
95
|
-
return typeof auth.provider === 'string' && auth.provider.trim().length > 0;
|
|
96
|
-
}
|
|
97
|
-
if (auth.kind === 'federatedOidc') {
|
|
98
|
-
return (Array.isArray(auth.issuers) &&
|
|
99
|
-
auth.issuers.length > 0 &&
|
|
100
|
-
auth.issuers.every((entry) => typeof entry === 'object' &&
|
|
101
|
-
entry !== null &&
|
|
102
|
-
typeof entry.issuer === 'string' &&
|
|
103
|
-
entry.issuer.trim().length > 0 &&
|
|
104
|
-
typeof entry.audience === 'string' &&
|
|
105
|
-
entry.audience.trim().length > 0));
|
|
106
|
-
}
|
|
107
|
-
if (auth.kind !== undefined && auth.kind !== 'oidc')
|
|
108
|
-
return false;
|
|
109
|
-
return (typeof auth.issuer === 'string' &&
|
|
110
|
-
auth.issuer.trim().length > 0 &&
|
|
111
|
-
typeof auth.audience === 'string' &&
|
|
112
|
-
auth.audience.trim().length > 0);
|
|
113
|
-
}
|
|
114
92
|
export function validateConfigKind(kind) {
|
|
115
93
|
if (kind !== 'secret' && kind !== 'variable')
|
|
116
94
|
throw new Error(`invalid config kind: ${kind}`);
|