@noodleseed/one 0.10.0 → 0.12.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/cli.d.ts.map +1 -1
- package/dist/cli.js +16 -4
- package/dist/cli.js.map +1 -1
- package/dist/commands/archive-ops.d.ts +3 -0
- package/dist/commands/archive-ops.d.ts.map +1 -0
- package/dist/commands/archive-ops.js +168 -0
- package/dist/commands/archive-ops.js.map +1 -0
- package/dist/commands/org-admin.d.ts +17 -0
- package/dist/commands/org-admin.d.ts.map +1 -0
- package/dist/commands/org-admin.js +241 -0
- package/dist/commands/org-admin.js.map +1 -0
- package/dist/commands/policy-ops.d.ts.map +1 -1
- package/dist/commands/policy-ops.js +123 -1
- package/dist/commands/policy-ops.js.map +1 -1
- package/dist/commands/session.d.ts +1 -15
- package/dist/commands/session.d.ts.map +1 -1
- package/dist/commands/session.js +15 -170
- package/dist/commands/session.js.map +1 -1
- package/dist/commands/shared.d.ts.map +1 -1
- package/dist/commands/shared.js +13 -5
- package/dist/commands/shared.js.map +1 -1
- package/dist/commands/update-ops.d.ts +29 -0
- package/dist/commands/update-ops.d.ts.map +1 -0
- package/dist/commands/update-ops.js +315 -0
- package/dist/commands/update-ops.js.map +1 -0
- package/dist/config.d.ts +2 -0
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js.map +1 -1
- package/dist/update-binary.d.ts +38 -0
- package/dist/update-binary.d.ts.map +1 -0
- package/dist/update-binary.js +144 -0
- package/dist/update-binary.js.map +1 -0
- package/dist/update-check.d.ts +40 -0
- package/dist/update-check.d.ts.map +1 -0
- package/dist/update-check.js +212 -0
- package/dist/update-check.js.map +1 -0
- package/dist/update-render.d.ts +17 -0
- package/dist/update-render.d.ts.map +1 -0
- package/dist/update-render.js +39 -0
- package/dist/update-render.js.map +1 -0
- package/dist/update.d.ts +10 -9
- package/dist/update.d.ts.map +1 -1
- package/dist/update.js +21 -89
- package/dist/update.js.map +1 -1
- package/node_modules/@noodle-borg/agent-kit/dist/curated/command-groups.d.ts.map +1 -1
- package/node_modules/@noodle-borg/agent-kit/dist/curated/command-groups.js +13 -1
- package/node_modules/@noodle-borg/agent-kit/dist/curated/command-groups.js.map +1 -1
- package/node_modules/@noodle-borg/agent-kit/dist/generated/surface.d.ts.map +1 -1
- package/node_modules/@noodle-borg/agent-kit/dist/generated/surface.js +2 -0
- package/node_modules/@noodle-borg/agent-kit/dist/generated/surface.js.map +1 -1
- package/node_modules/@noodle-borg/agent-kit/package.json +1 -1
- package/node_modules/@noodle-borg/service/dist/archive-sweeper.d.ts +43 -0
- package/node_modules/@noodle-borg/service/dist/archive-sweeper.d.ts.map +1 -0
- package/node_modules/@noodle-borg/service/dist/archive-sweeper.js +122 -0
- package/node_modules/@noodle-borg/service/dist/archive-sweeper.js.map +1 -0
- package/node_modules/@noodle-borg/service/dist/commercial-plans.d.ts +11 -0
- package/node_modules/@noodle-borg/service/dist/commercial-plans.d.ts.map +1 -0
- package/node_modules/@noodle-borg/service/dist/commercial-plans.js +119 -0
- package/node_modules/@noodle-borg/service/dist/commercial-plans.js.map +1 -0
- package/node_modules/@noodle-borg/service/dist/deployment-versioning.d.ts +2 -0
- package/node_modules/@noodle-borg/service/dist/deployment-versioning.d.ts.map +1 -1
- package/node_modules/@noodle-borg/service/dist/deployment-versioning.js +1 -1
- package/node_modules/@noodle-borg/service/dist/deployment-versioning.js.map +1 -1
- package/node_modules/@noodle-borg/service/dist/index.d.ts +3 -1
- package/node_modules/@noodle-borg/service/dist/index.d.ts.map +1 -1
- package/node_modules/@noodle-borg/service/dist/index.js +2 -0
- package/node_modules/@noodle-borg/service/dist/index.js.map +1 -1
- package/node_modules/@noodle-borg/service/dist/options.d.ts +9 -0
- package/node_modules/@noodle-borg/service/dist/options.d.ts.map +1 -1
- package/node_modules/@noodle-borg/service/dist/policy.d.ts +3 -0
- package/node_modules/@noodle-borg/service/dist/policy.d.ts.map +1 -1
- package/node_modules/@noodle-borg/service/dist/policy.js +32 -0
- package/node_modules/@noodle-borg/service/dist/policy.js.map +1 -1
- package/node_modules/@noodle-borg/service/dist/registry-state.d.ts +25 -0
- package/node_modules/@noodle-borg/service/dist/registry-state.d.ts.map +1 -0
- package/node_modules/@noodle-borg/service/dist/registry-state.js +119 -0
- package/node_modules/@noodle-borg/service/dist/registry-state.js.map +1 -0
- package/node_modules/@noodle-borg/service/dist/registry.d.ts +7 -6
- package/node_modules/@noodle-borg/service/dist/registry.d.ts.map +1 -1
- package/node_modules/@noodle-borg/service/dist/registry.js +44 -44
- package/node_modules/@noodle-borg/service/dist/registry.js.map +1 -1
- package/node_modules/@noodle-borg/service/dist/routes/archive.d.ts +16 -0
- package/node_modules/@noodle-borg/service/dist/routes/archive.d.ts.map +1 -0
- package/node_modules/@noodle-borg/service/dist/routes/archive.js +83 -0
- package/node_modules/@noodle-borg/service/dist/routes/archive.js.map +1 -0
- package/node_modules/@noodle-borg/service/dist/routes/control-plane.d.ts +1 -18
- package/node_modules/@noodle-borg/service/dist/routes/control-plane.d.ts.map +1 -1
- package/node_modules/@noodle-borg/service/dist/routes/control-plane.js +18 -260
- package/node_modules/@noodle-borg/service/dist/routes/control-plane.js.map +1 -1
- package/node_modules/@noodle-borg/service/dist/routes/deployments.d.ts +17 -0
- package/node_modules/@noodle-borg/service/dist/routes/deployments.d.ts.map +1 -0
- package/node_modules/@noodle-borg/service/dist/routes/deployments.js +88 -0
- package/node_modules/@noodle-borg/service/dist/routes/deployments.js.map +1 -0
- package/node_modules/@noodle-borg/service/dist/routes/org-admin.d.ts +40 -0
- package/node_modules/@noodle-borg/service/dist/routes/org-admin.d.ts.map +1 -0
- package/node_modules/@noodle-borg/service/dist/routes/org-admin.js +353 -0
- package/node_modules/@noodle-borg/service/dist/routes/org-admin.js.map +1 -0
- package/node_modules/@noodle-borg/service/dist/routes/paths.d.ts +15 -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 +47 -0
- package/node_modules/@noodle-borg/service/dist/routes/paths.js.map +1 -1
- package/node_modules/@noodle-borg/service/dist/routes/plans.d.ts +20 -0
- package/node_modules/@noodle-borg/service/dist/routes/plans.d.ts.map +1 -0
- package/node_modules/@noodle-borg/service/dist/routes/plans.js +217 -0
- package/node_modules/@noodle-borg/service/dist/routes/plans.js.map +1 -0
- package/node_modules/@noodle-borg/service/dist/routes/policies.d.ts.map +1 -1
- package/node_modules/@noodle-borg/service/dist/routes/policies.js +7 -0
- package/node_modules/@noodle-borg/service/dist/routes/policies.js.map +1 -1
- package/node_modules/@noodle-borg/service/dist/routes/rollback.d.ts.map +1 -1
- package/node_modules/@noodle-borg/service/dist/routes/rollback.js +19 -1
- package/node_modules/@noodle-borg/service/dist/routes/rollback.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 +107 -4
- package/node_modules/@noodle-borg/service/dist/service.js.map +1 -1
- package/node_modules/@noodle-borg/service/dist/store/control-plane.d.ts +14 -0
- package/node_modules/@noodle-borg/service/dist/store/control-plane.d.ts.map +1 -1
- package/node_modules/@noodle-borg/service/dist/store/control-plane.js +38 -0
- package/node_modules/@noodle-borg/service/dist/store/control-plane.js.map +1 -1
- package/node_modules/@noodle-borg/service/dist/store/json-file.d.ts +25 -0
- package/node_modules/@noodle-borg/service/dist/store/json-file.d.ts.map +1 -0
- package/node_modules/@noodle-borg/service/dist/store/json-file.js +163 -0
- package/node_modules/@noodle-borg/service/dist/store/json-file.js.map +1 -0
- package/node_modules/@noodle-borg/service/dist/store/postgres-control-plane.d.ts +14 -0
- package/node_modules/@noodle-borg/service/dist/store/postgres-control-plane.d.ts.map +1 -1
- package/node_modules/@noodle-borg/service/dist/store/postgres-control-plane.js +16 -0
- package/node_modules/@noodle-borg/service/dist/store/postgres-control-plane.js.map +1 -1
- package/node_modules/@noodle-borg/service/dist/store/postgres-policy.d.ts.map +1 -1
- package/node_modules/@noodle-borg/service/dist/store/postgres-policy.js +10 -4
- package/node_modules/@noodle-borg/service/dist/store/postgres-policy.js.map +1 -1
- package/node_modules/@noodle-borg/service/dist/store/postgres-rows.d.ts +60 -0
- package/node_modules/@noodle-borg/service/dist/store/postgres-rows.d.ts.map +1 -0
- package/node_modules/@noodle-borg/service/dist/store/postgres-rows.js +101 -0
- package/node_modules/@noodle-borg/service/dist/store/postgres-rows.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 +10 -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 +20 -6
- package/node_modules/@noodle-borg/service/dist/store/postgres.d.ts.map +1 -1
- package/node_modules/@noodle-borg/service/dist/store/postgres.js +74 -122
- package/node_modules/@noodle-borg/service/dist/store/postgres.js.map +1 -1
- package/node_modules/@noodle-borg/service/dist/store/records.d.ts +35 -0
- package/node_modules/@noodle-borg/service/dist/store/records.d.ts.map +1 -0
- package/node_modules/@noodle-borg/service/dist/store/records.js +87 -0
- package/node_modules/@noodle-borg/service/dist/store/records.js.map +1 -0
- package/node_modules/@noodle-borg/service/dist/store/validate.d.ts +19 -0
- package/node_modules/@noodle-borg/service/dist/store/validate.d.ts.map +1 -0
- package/node_modules/@noodle-borg/service/dist/store/validate.js +61 -0
- package/node_modules/@noodle-borg/service/dist/store/validate.js.map +1 -0
- package/node_modules/@noodle-borg/service/dist/store.d.ts +68 -44
- package/node_modules/@noodle-borg/service/dist/store.d.ts.map +1 -1
- package/node_modules/@noodle-borg/service/dist/store.js +48 -213
- package/node_modules/@noodle-borg/service/dist/store.js.map +1 -1
- package/package.json +2 -2
|
@@ -0,0 +1,217 @@
|
|
|
1
|
+
import { commercialPlanPolicyId, isCommercialPlanName, planNameForPolicy, } from '../commercial-plans.js';
|
|
2
|
+
import { readJsonBody, sendForbidden, sendJson, sendUnauthorized } from '../http-util.js';
|
|
3
|
+
export async function handlePlan(req, res, input) {
|
|
4
|
+
const identity = await authorize(req, res, input.gate);
|
|
5
|
+
if (identity === false)
|
|
6
|
+
return;
|
|
7
|
+
const allowed = await authorizePlanRoute(res, input.controlPlane, input.route.org, identity, req.method);
|
|
8
|
+
if (!allowed)
|
|
9
|
+
return;
|
|
10
|
+
try {
|
|
11
|
+
if (input.route.action === 'item' && req.method === 'GET')
|
|
12
|
+
return await showPlan(res, input);
|
|
13
|
+
if (input.route.action === 'item' && req.method === 'PUT') {
|
|
14
|
+
return await setPlan(req, res, input, identity);
|
|
15
|
+
}
|
|
16
|
+
if (input.route.action === 'suspend' && req.method === 'POST') {
|
|
17
|
+
return await suspendPlan(req, res, input, identity);
|
|
18
|
+
}
|
|
19
|
+
return sendJson(res, 404, { ok: false, error: 'not found' });
|
|
20
|
+
}
|
|
21
|
+
catch (error) {
|
|
22
|
+
return sendJson(res, 400, { ok: false, error: errorMessage(error) });
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
async function showPlan(res, input) {
|
|
26
|
+
const assignment = await input.policyStore.getPolicyAssignment?.(commercialPlanPolicyId(input.route.org));
|
|
27
|
+
return sendJson(res, 200, {
|
|
28
|
+
ok: true,
|
|
29
|
+
plan: publicPlan(input.route.org, input.catalog, assignment),
|
|
30
|
+
});
|
|
31
|
+
}
|
|
32
|
+
async function setPlan(req, res, input, identity) {
|
|
33
|
+
const body = await readJsonBody(req, input.maxBody);
|
|
34
|
+
if (!body.ok)
|
|
35
|
+
return sendJson(res, body.status, { ok: false, error: body.error });
|
|
36
|
+
const parsed = body.value;
|
|
37
|
+
if (!isCommercialPlanName(parsed.plan))
|
|
38
|
+
throw new Error('invalid plan');
|
|
39
|
+
const reason = requiredString(parsed.reason, 'reason');
|
|
40
|
+
const source = parsed.source === 'cli' ? 'cli' : 'api';
|
|
41
|
+
const metadata = commercialMetadata(parsed.externalRef);
|
|
42
|
+
const stored = await input.policyStore.putPolicyAssignment({
|
|
43
|
+
id: commercialPlanPolicyId(input.route.org),
|
|
44
|
+
scope: { level: 'org', org: input.route.org },
|
|
45
|
+
policy: input.catalog[parsed.plan],
|
|
46
|
+
createdBySubject: identity.subject,
|
|
47
|
+
createdByEmail: identity.email,
|
|
48
|
+
reason,
|
|
49
|
+
source,
|
|
50
|
+
metadata,
|
|
51
|
+
});
|
|
52
|
+
await emitPlanAudit(input.audit, 'org.plan.updated', input.route.org, identity, 200, {
|
|
53
|
+
plan: parsed.plan,
|
|
54
|
+
policyId: stored.id,
|
|
55
|
+
policyVersion: stored.version,
|
|
56
|
+
source,
|
|
57
|
+
...auditExternalRef(metadata),
|
|
58
|
+
});
|
|
59
|
+
return sendJson(res, 200, {
|
|
60
|
+
ok: true,
|
|
61
|
+
plan: publicPlan(input.route.org, input.catalog, stored),
|
|
62
|
+
});
|
|
63
|
+
}
|
|
64
|
+
async function suspendPlan(req, res, input, identity) {
|
|
65
|
+
const body = await readJsonBody(req, input.maxBody);
|
|
66
|
+
if (!body.ok)
|
|
67
|
+
return sendJson(res, body.status, { ok: false, error: body.error });
|
|
68
|
+
const parsed = body.value;
|
|
69
|
+
const reason = requiredString(parsed.reason, 'reason');
|
|
70
|
+
const source = parsed.source === 'cli' ? 'cli' : 'api';
|
|
71
|
+
const metadata = commercialMetadata(parsed.externalRef);
|
|
72
|
+
const stored = await input.policyStore.putPolicyAssignment({
|
|
73
|
+
id: commercialPlanPolicyId(input.route.org),
|
|
74
|
+
scope: { level: 'org', org: input.route.org },
|
|
75
|
+
policy: { schemaVersion: 1, suspended: true, reason },
|
|
76
|
+
createdBySubject: identity.subject,
|
|
77
|
+
createdByEmail: identity.email,
|
|
78
|
+
reason,
|
|
79
|
+
source,
|
|
80
|
+
metadata,
|
|
81
|
+
});
|
|
82
|
+
await emitPlanAudit(input.audit, 'org.plan.suspended', input.route.org, identity, 200, {
|
|
83
|
+
policyId: stored.id,
|
|
84
|
+
policyVersion: stored.version,
|
|
85
|
+
source,
|
|
86
|
+
...auditExternalRef(metadata),
|
|
87
|
+
});
|
|
88
|
+
return sendJson(res, 200, {
|
|
89
|
+
ok: true,
|
|
90
|
+
plan: publicPlan(input.route.org, input.catalog, stored),
|
|
91
|
+
});
|
|
92
|
+
}
|
|
93
|
+
async function authorize(req, res, gate) {
|
|
94
|
+
const auth = await gate.authorize(req);
|
|
95
|
+
if (!auth.ok) {
|
|
96
|
+
if (auth.status === 401)
|
|
97
|
+
sendUnauthorized(res, auth.message);
|
|
98
|
+
else
|
|
99
|
+
sendForbidden(res, auth.message);
|
|
100
|
+
return false;
|
|
101
|
+
}
|
|
102
|
+
if (!auth.identity) {
|
|
103
|
+
sendUnauthorized(res, 'identity required');
|
|
104
|
+
return false;
|
|
105
|
+
}
|
|
106
|
+
return auth.identity;
|
|
107
|
+
}
|
|
108
|
+
async function authorizePlanRoute(res, store, org, identity, method) {
|
|
109
|
+
if (method === 'PUT' || method === 'POST') {
|
|
110
|
+
if (identity.superAdmin)
|
|
111
|
+
return true;
|
|
112
|
+
sendForbidden(res, 'super-admin required');
|
|
113
|
+
return false;
|
|
114
|
+
}
|
|
115
|
+
if (identity.superAdmin)
|
|
116
|
+
return true;
|
|
117
|
+
if ((await store.getOrgMember({ org, subject: identity.subject })) !== undefined)
|
|
118
|
+
return true;
|
|
119
|
+
sendForbidden(res, 'forbidden');
|
|
120
|
+
return false;
|
|
121
|
+
}
|
|
122
|
+
function publicPlan(org, catalog, assignment) {
|
|
123
|
+
if (assignment === undefined) {
|
|
124
|
+
return { org, plan: 'free', state: 'active', source: 'default' };
|
|
125
|
+
}
|
|
126
|
+
if (assignment.policy.suspended) {
|
|
127
|
+
return {
|
|
128
|
+
org,
|
|
129
|
+
plan: null,
|
|
130
|
+
state: 'suspended',
|
|
131
|
+
source: 'policy',
|
|
132
|
+
policyId: assignment.id,
|
|
133
|
+
policyVersion: assignment.version,
|
|
134
|
+
...commercialProjection(assignment),
|
|
135
|
+
};
|
|
136
|
+
}
|
|
137
|
+
return {
|
|
138
|
+
org,
|
|
139
|
+
plan: planNameForPolicy(assignment.policy, catalog) ?? 'custom',
|
|
140
|
+
state: 'active',
|
|
141
|
+
source: 'policy',
|
|
142
|
+
policyId: assignment.id,
|
|
143
|
+
policyVersion: assignment.version,
|
|
144
|
+
...commercialProjection(assignment),
|
|
145
|
+
};
|
|
146
|
+
}
|
|
147
|
+
function commercialMetadata(externalRef) {
|
|
148
|
+
return {
|
|
149
|
+
'commercial.provider': 'manual',
|
|
150
|
+
...(externalRef !== undefined
|
|
151
|
+
? { 'commercial.externalRef': validateExternalRef(externalRef) }
|
|
152
|
+
: {}),
|
|
153
|
+
};
|
|
154
|
+
}
|
|
155
|
+
function validateExternalRef(value) {
|
|
156
|
+
if (typeof value !== 'string')
|
|
157
|
+
throw new Error('externalRef must be a string');
|
|
158
|
+
const trimmed = value.trim();
|
|
159
|
+
if (trimmed.length === 0)
|
|
160
|
+
throw new Error('externalRef is required when provided');
|
|
161
|
+
if (trimmed.length > 256)
|
|
162
|
+
throw new Error('externalRef must be 256 characters or fewer');
|
|
163
|
+
if (hasControlCharacters(trimmed)) {
|
|
164
|
+
throw new Error('externalRef cannot contain control characters');
|
|
165
|
+
}
|
|
166
|
+
return trimmed;
|
|
167
|
+
}
|
|
168
|
+
function commercialProjection(assignment) {
|
|
169
|
+
const provider = assignment.metadata?.['commercial.provider'];
|
|
170
|
+
if (provider === undefined)
|
|
171
|
+
return {};
|
|
172
|
+
return {
|
|
173
|
+
commercial: {
|
|
174
|
+
provider,
|
|
175
|
+
...(assignment.metadata?.['commercial.externalRef'] !== undefined
|
|
176
|
+
? { externalRef: assignment.metadata['commercial.externalRef'] }
|
|
177
|
+
: {}),
|
|
178
|
+
updatedAt: assignment.createdAt,
|
|
179
|
+
...(assignment.createdByEmail !== undefined
|
|
180
|
+
? { updatedByEmail: assignment.createdByEmail }
|
|
181
|
+
: {}),
|
|
182
|
+
},
|
|
183
|
+
};
|
|
184
|
+
}
|
|
185
|
+
function auditExternalRef(metadata) {
|
|
186
|
+
const externalRef = metadata['commercial.externalRef'];
|
|
187
|
+
return externalRef === undefined ? {} : { externalRef };
|
|
188
|
+
}
|
|
189
|
+
function requiredString(value, label) {
|
|
190
|
+
if (typeof value !== 'string' || value.trim().length === 0) {
|
|
191
|
+
throw new Error(`${label} is required`);
|
|
192
|
+
}
|
|
193
|
+
return value.trim();
|
|
194
|
+
}
|
|
195
|
+
function hasControlCharacters(value) {
|
|
196
|
+
for (const char of value) {
|
|
197
|
+
const code = char.charCodeAt(0);
|
|
198
|
+
if (code < 32 || code === 127)
|
|
199
|
+
return true;
|
|
200
|
+
}
|
|
201
|
+
return false;
|
|
202
|
+
}
|
|
203
|
+
function errorMessage(error) {
|
|
204
|
+
return error instanceof Error ? error.message : String(error);
|
|
205
|
+
}
|
|
206
|
+
function emitPlanAudit(audit, eventType, org, identity, status, details) {
|
|
207
|
+
return audit.emit({
|
|
208
|
+
eventType,
|
|
209
|
+
org,
|
|
210
|
+
decision: 'allow',
|
|
211
|
+
status,
|
|
212
|
+
actorSubject: identity.subject,
|
|
213
|
+
...(identity.email !== undefined ? { actorEmail: identity.email } : {}),
|
|
214
|
+
details,
|
|
215
|
+
});
|
|
216
|
+
}
|
|
217
|
+
//# sourceMappingURL=plans.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plans.js","sourceRoot":"","sources":["../../src/routes/plans.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"policies.d.ts","sourceRoot":"","sources":["../../src/routes/policies.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAEjE,OAAO,KAAK,EAAwB,cAAc,EAAE,MAAM,wBAAwB,CAAC;
|
|
1
|
+
{"version":3,"file":"policies.d.ts","sourceRoot":"","sources":["../../src/routes/policies.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAEjE,OAAO,KAAK,EAAwB,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAGnF,OAAO,EAGL,KAAK,qBAAqB,EAE1B,KAAK,kBAAkB,EAKxB,MAAM,cAAc,CAAC;AACtB,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AACrD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,KAAK,EAAE,iBAAiB,EAAW,MAAM,aAAa,CAAC;AAC9D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAEjD,wBAAsB,cAAc,CAClC,GAAG,EAAE,eAAe,EACpB,GAAG,EAAE,cAAc,EACnB,KAAK,EAAE;IACL,QAAQ,CAAC,KAAK,EAAE,cAAc,CAAC;IAC/B,QAAQ,CAAC,IAAI,EAAE,cAAc,CAAC;IAC9B,QAAQ,CAAC,YAAY,EAAE,iBAAiB,CAAC;IACzC,QAAQ,CAAC,WAAW,EAAE,qBAAqB,CAAC;IAC5C,QAAQ,CAAC,QAAQ,CAAC,EAAE,kBAAkB,CAAC;IACvC,QAAQ,CAAC,QAAQ,EAAE,cAAc,CAAC;IAClC,QAAQ,CAAC,KAAK,EAAE,SAAS,CAAC;IAC1B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;CAC1B,GACA,OAAO,CAAC,IAAI,CAAC,CAyCf"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { isCommercialPlanPolicyId } from '../commercial-plans.js';
|
|
1
2
|
import { readJsonBody, sendForbidden, sendJson, sendUnauthorized } from '../http-util.js';
|
|
2
3
|
import { PolicyConflictError, resolveEffectivePolicy, validatePolicyAssignmentInput, } from '../policy.js';
|
|
3
4
|
export async function handlePolicies(req, res, input) {
|
|
@@ -60,6 +61,9 @@ async function applyPolicy(req, res, input, identity) {
|
|
|
60
61
|
return sendJson(res, body.status, { ok: false, error: body.error });
|
|
61
62
|
const parsed = body.value;
|
|
62
63
|
const assignment = policyInputFromBody(parsed, identity, 'api');
|
|
64
|
+
if (isCommercialPlanPolicyId(assignment.id) && !identity.superAdmin) {
|
|
65
|
+
return sendForbidden(res, 'super-admin required');
|
|
66
|
+
}
|
|
63
67
|
await validateRouteScope(input, assignment.scope);
|
|
64
68
|
const stored = await input.policyStore.putPolicyAssignment(assignment);
|
|
65
69
|
await input.audit.emit(policyAudit('policy.assignment.applied', stored, identity, 200));
|
|
@@ -75,6 +79,9 @@ async function deletePolicy(req, res, input, identity) {
|
|
|
75
79
|
const parsed = body.value;
|
|
76
80
|
const reason = requiredString(parsed.reason, 'reason');
|
|
77
81
|
const route = input.route;
|
|
82
|
+
if (isCommercialPlanPolicyId(route.id) && !identity.superAdmin) {
|
|
83
|
+
return sendForbidden(res, 'super-admin required');
|
|
84
|
+
}
|
|
78
85
|
const current = await input.policyStore.getPolicyAssignment?.(route.id);
|
|
79
86
|
if (current !== undefined)
|
|
80
87
|
await validateRouteScope(input, current.scope);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"policies.js","sourceRoot":"","sources":["../../src/routes/policies.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"policies.js","sourceRoot":"","sources":["../../src/routes/policies.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rollback.d.ts","sourceRoot":"","sources":["../../src/routes/rollback.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AACjE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAE7D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AACpD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAErD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,KAAK,EAAE,iBAAiB,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"rollback.d.ts","sourceRoot":"","sources":["../../src/routes/rollback.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AACjE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAE7D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AACpD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAErD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,KAAK,EAAE,iBAAiB,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAIhE,wBAAsB,cAAc,CAClC,GAAG,EAAE,eAAe,EACpB,GAAG,EAAE,cAAc,EACnB,QAAQ,EAAE,cAAc,EACxB,IAAI,EAAE,cAAc,EACpB,YAAY,EAAE,iBAAiB,EAC/B,KAAK,EAAE,SAAS,EAChB,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,SAAS,EACjB,OAAO,EAAE,cAAc,GACtB,OAAO,CAAC,IAAI,CAAC,CA8Ef"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { baseFromRequest, readJsonBody, sendForbidden, sendJson } from '../http-util.js';
|
|
2
2
|
import { tenantMcpUrl } from '../registry-helpers.js';
|
|
3
|
-
import { authorizeControlPlane
|
|
3
|
+
import { authorizeControlPlane } from './control-plane.js';
|
|
4
|
+
import { canManageMembers } from './org-admin.js';
|
|
4
5
|
export async function handleRollback(req, res, registry, gate, controlPlane, audit, maxBody, tenant, options) {
|
|
5
6
|
const identity = await authorizeControlPlane(req, res, gate, { requireIdentity: true });
|
|
6
7
|
if (identity === false)
|
|
@@ -8,6 +9,23 @@ export async function handleRollback(req, res, registry, gate, controlPlane, aud
|
|
|
8
9
|
if (!(await canManageMembers(controlPlane, tenant.org, identity))) {
|
|
9
10
|
return sendForbidden(res, 'forbidden');
|
|
10
11
|
}
|
|
12
|
+
// Archived apps are soft-deleted (ADR 0117): activation changes are refused until restored.
|
|
13
|
+
const archivedAt = await registry.getAppArchivedAt(tenant.org, tenant.app);
|
|
14
|
+
if (archivedAt !== undefined) {
|
|
15
|
+
await audit.emit({
|
|
16
|
+
eventType: 'rollback.rejected',
|
|
17
|
+
org: tenant.org,
|
|
18
|
+
app: tenant.app,
|
|
19
|
+
env: tenant.env,
|
|
20
|
+
decision: 'deny',
|
|
21
|
+
status: 409,
|
|
22
|
+
reasonCode: 'app_archived',
|
|
23
|
+
actorSubject: identity.subject,
|
|
24
|
+
...(identity.email !== undefined ? { actorEmail: identity.email } : {}),
|
|
25
|
+
details: { archivedAt },
|
|
26
|
+
});
|
|
27
|
+
return sendJson(res, 409, { error: 'app is archived; restore it before rolling back' });
|
|
28
|
+
}
|
|
11
29
|
const body = await readJsonBody(req, maxBody);
|
|
12
30
|
if (!body.ok)
|
|
13
31
|
return sendJson(res, body.status, { error: body.error });
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rollback.js","sourceRoot":"","sources":["../../src/routes/rollback.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,eAAe,EAAE,YAAY,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAGzF,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAGtD,OAAO,EAAE,qBAAqB,EAAE,gBAAgB,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"rollback.js","sourceRoot":"","sources":["../../src/routes/rollback.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"service.d.ts","sourceRoot":"","sources":["../src/service.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"service.d.ts","sourceRoot":"","sources":["../src/service.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAwBjE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAInD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAiDpD;;GAEG;AACH,wBAAgB,oBAAoB,CAClC,QAAQ,EAAE,cAAc,EACxB,OAAO,GAAE,cAAmB,GAC3B,CAAC,GAAG,EAAE,eAAe,EAAE,GAAG,EAAE,cAAc,KAAK,IAAI,CAyjBrD"}
|
|
@@ -4,20 +4,26 @@ import { serverVersionFromPathSegment } from '@noodle-borg/module';
|
|
|
4
4
|
import { STATE_CONNECTOR_ID, STATE_CONNECTOR_VERSION, STATE_OPERATION_SIGNATURES, } from '@noodle-borg/runtime';
|
|
5
5
|
import { applySecurityHeaders, createMcpRouter, enforceHttps, noopLogger, } from '@noodle-borg/transport-http';
|
|
6
6
|
import { AnonymousConsumerLimiter, createAdmissionGate } from './admission.js';
|
|
7
|
+
import { ArchiveSweeper, resolveArchiveRetentionDays } from './archive-sweeper.js';
|
|
7
8
|
import { allowAllGate } from './auth/deploy-gate.js';
|
|
8
9
|
import { resolveBuildInfo } from './build-info.js';
|
|
9
10
|
import { serviceCapabilityReport } from './capabilities.js';
|
|
11
|
+
import { resolveCommercialPlanCatalog } from './commercial-plans.js';
|
|
10
12
|
import { baseFromRequest, normalizeServiceBase, sendJson } from './http-util.js';
|
|
11
13
|
import { ModuleHost } from './modules/host.js';
|
|
12
14
|
import { isAuthServerPath } from './oauth/paths.js';
|
|
13
15
|
import { createLocalPolicyAdmissionGate } from './policy.js';
|
|
14
16
|
import { CachingPolicyAssignmentStore } from './policy-cache.js';
|
|
15
17
|
import { InMemoryPolicyCounterStore } from './policy-counters.js';
|
|
18
|
+
import { handleAppArchive, handleAppRestore } from './routes/archive.js';
|
|
16
19
|
import { handleAssetPreflight } from './routes/asset-control-plane.js';
|
|
17
|
-
import { handleAccessUpdate,
|
|
20
|
+
import { handleAccessUpdate, handleConfigValues, handleDeploy, handleDeploymentStatus, handleWhoami, } from './routes/control-plane.js';
|
|
21
|
+
import { handleAuditEvents, handleDeployments } from './routes/deployments.js';
|
|
18
22
|
import { handleHostedSmoke, handleInspect } from './routes/diagnostics.js';
|
|
19
23
|
import { handleUserAppLogs } from './routes/logs.js';
|
|
20
|
-
import {
|
|
24
|
+
import { handleInvitations, handleMembers, handleOrgs, handleOrgUpdate, } from './routes/org-admin.js';
|
|
25
|
+
import { parseAppArchivePath, parseAppRestorePath, parseAuditEventsPath, parseConfigPath, parseDeploymentsPath, parseInvitationsPath, parseMembersPath, parseOrgPath, parsePlanPath, parsePolicyPath, parseTenantAccessPath, parseTenantAssetPreflightPath, parseTenantDeployPath, parseTenantInspectPath, parseTenantLogsPath, parseTenantRollbackPath, parseTenantSmokePath, parseTenantStatusPath, } from './routes/paths.js';
|
|
26
|
+
import { handlePlan } from './routes/plans.js';
|
|
21
27
|
import { handlePolicies } from './routes/policies.js';
|
|
22
28
|
import { handleRollback } from './routes/rollback.js';
|
|
23
29
|
import { InMemoryAuditStore, StdoutAuditSink } from './store/audit.js';
|
|
@@ -54,6 +60,7 @@ export function createServiceHandler(registry, options = {}) {
|
|
|
54
60
|
})
|
|
55
61
|
: undefined;
|
|
56
62
|
const policyCounterStore = options.policyCounterStore ?? new InMemoryPolicyCounterStore();
|
|
63
|
+
const commercialPlanCatalog = resolveCommercialPlanCatalog(options.commercialPlanCatalog);
|
|
57
64
|
const policyAdmissionGate = policyStore !== undefined
|
|
58
65
|
? createLocalPolicyAdmissionGate(policyStore, {
|
|
59
66
|
counters: policyCounterStore,
|
|
@@ -111,6 +118,18 @@ export function createServiceHandler(registry, options = {}) {
|
|
|
111
118
|
});
|
|
112
119
|
const maxBody = options.maxBodyBytes ?? DEFAULT_MAX_BODY;
|
|
113
120
|
const gate = options.deployGate ?? allowAllGate();
|
|
121
|
+
// App archive retention sweeper (ADR 0117 §3): one boot-time sweep at handler construction plus
|
|
122
|
+
// a throttled piggyback on the deploy/deployments control-plane paths. Never a scheduler.
|
|
123
|
+
const archiveRetentionDays = options.archiveRetentionDays ?? resolveArchiveRetentionDays(process.env);
|
|
124
|
+
const archiveSweeper = new ArchiveSweeper({
|
|
125
|
+
registry,
|
|
126
|
+
configStore,
|
|
127
|
+
audit,
|
|
128
|
+
retentionDays: archiveRetentionDays,
|
|
129
|
+
logger,
|
|
130
|
+
...(options.clock !== undefined ? { clock: options.clock } : {}),
|
|
131
|
+
});
|
|
132
|
+
archiveSweeper.maybeSweep();
|
|
114
133
|
return (req, res) => {
|
|
115
134
|
const url = new URL(req.url ?? '/', 'http://localhost');
|
|
116
135
|
// Liveness/readiness probes: un-gated and **not** HTTPS-enforced — Cloud Run's internal probe is plain
|
|
@@ -242,6 +261,7 @@ export function createServiceHandler(registry, options = {}) {
|
|
|
242
261
|
applySecurityHeaders(res, tls);
|
|
243
262
|
if (enforceHttps(req, res, tls))
|
|
244
263
|
return;
|
|
264
|
+
archiveSweeper.maybeSweep();
|
|
245
265
|
// Admin boundary: authenticate the deployer before reading the body. The gate guards management
|
|
246
266
|
// deploys; tenant MCP routes are governed separately by identity-based data-plane auth.
|
|
247
267
|
handleDeploy(req, res, registry, options, maxBody, deployRef, gate, controlPlane, audit).catch((error) => {
|
|
@@ -288,12 +308,23 @@ export function createServiceHandler(registry, options = {}) {
|
|
|
288
308
|
});
|
|
289
309
|
return;
|
|
290
310
|
}
|
|
311
|
+
const orgRef = parseOrgPath(url.pathname);
|
|
312
|
+
if (orgRef !== undefined && req.method === 'PATCH') {
|
|
313
|
+
applySecurityHeaders(res, tls);
|
|
314
|
+
if (enforceHttps(req, res, tls))
|
|
315
|
+
return;
|
|
316
|
+
handleOrgUpdate(req, res, gate, controlPlane, maxBody, orgRef, audit).catch(() => {
|
|
317
|
+
if (!res.headersSent)
|
|
318
|
+
sendJson(res, 500, { error: 'internal error' });
|
|
319
|
+
});
|
|
320
|
+
return;
|
|
321
|
+
}
|
|
291
322
|
const membersRef = parseMembersPath(url.pathname);
|
|
292
323
|
if (membersRef !== undefined) {
|
|
293
324
|
applySecurityHeaders(res, tls);
|
|
294
325
|
if (enforceHttps(req, res, tls))
|
|
295
326
|
return;
|
|
296
|
-
handleMembers(req, res, gate, controlPlane, maxBody, membersRef).catch(() => {
|
|
327
|
+
handleMembers(req, res, gate, controlPlane, maxBody, membersRef, audit).catch(() => {
|
|
297
328
|
if (!res.headersSent)
|
|
298
329
|
sendJson(res, 500, { error: 'internal error' });
|
|
299
330
|
});
|
|
@@ -304,7 +335,7 @@ export function createServiceHandler(registry, options = {}) {
|
|
|
304
335
|
applySecurityHeaders(res, tls);
|
|
305
336
|
if (enforceHttps(req, res, tls))
|
|
306
337
|
return;
|
|
307
|
-
handleInvitations(req, res, gate, controlPlane, maxBody, invitationsRef).catch(() => {
|
|
338
|
+
handleInvitations(req, res, gate, controlPlane, maxBody, invitationsRef, audit, url).catch(() => {
|
|
308
339
|
if (!res.headersSent)
|
|
309
340
|
sendJson(res, 500, { error: 'internal error' });
|
|
310
341
|
});
|
|
@@ -382,12 +413,35 @@ export function createServiceHandler(registry, options = {}) {
|
|
|
382
413
|
applySecurityHeaders(res, tls);
|
|
383
414
|
if (enforceHttps(req, res, tls))
|
|
384
415
|
return;
|
|
416
|
+
archiveSweeper.maybeSweep();
|
|
385
417
|
handleDeployments(req, res, registry, gate, controlPlane, deploymentsRef, url).catch(() => {
|
|
386
418
|
if (!res.headersSent)
|
|
387
419
|
sendJson(res, 500, { error: 'internal error' });
|
|
388
420
|
});
|
|
389
421
|
return;
|
|
390
422
|
}
|
|
423
|
+
const archiveRef = parseAppArchivePath(url.pathname);
|
|
424
|
+
if (archiveRef !== undefined && req.method === 'POST') {
|
|
425
|
+
applySecurityHeaders(res, tls);
|
|
426
|
+
if (enforceHttps(req, res, tls))
|
|
427
|
+
return;
|
|
428
|
+
handleAppArchive(req, res, registry, gate, controlPlane, audit, archiveRef, options).catch(() => {
|
|
429
|
+
if (!res.headersSent)
|
|
430
|
+
sendJson(res, 500, { error: 'internal error' });
|
|
431
|
+
});
|
|
432
|
+
return;
|
|
433
|
+
}
|
|
434
|
+
const restoreRef = parseAppRestorePath(url.pathname);
|
|
435
|
+
if (restoreRef !== undefined && req.method === 'POST') {
|
|
436
|
+
applySecurityHeaders(res, tls);
|
|
437
|
+
if (enforceHttps(req, res, tls))
|
|
438
|
+
return;
|
|
439
|
+
handleAppRestore(req, res, registry, gate, controlPlane, audit, restoreRef, options, archiveRetentionDays).catch(() => {
|
|
440
|
+
if (!res.headersSent)
|
|
441
|
+
sendJson(res, 500, { error: 'internal error' });
|
|
442
|
+
});
|
|
443
|
+
return;
|
|
444
|
+
}
|
|
391
445
|
const auditEventsRef = parseAuditEventsPath(url.pathname);
|
|
392
446
|
if (auditEventsRef !== undefined && req.method === 'GET') {
|
|
393
447
|
applySecurityHeaders(res, tls);
|
|
@@ -419,6 +473,32 @@ export function createServiceHandler(registry, options = {}) {
|
|
|
419
473
|
});
|
|
420
474
|
return;
|
|
421
475
|
}
|
|
476
|
+
const planRef = parsePlanPath(url.pathname);
|
|
477
|
+
if (planRef !== undefined &&
|
|
478
|
+
(req.method === 'GET' || req.method === 'PUT' || req.method === 'POST')) {
|
|
479
|
+
applySecurityHeaders(res, tls);
|
|
480
|
+
if (enforceHttps(req, res, tls))
|
|
481
|
+
return;
|
|
482
|
+
if (policyStore === undefined) {
|
|
483
|
+
return sendJson(res, 409, {
|
|
484
|
+
ok: false,
|
|
485
|
+
error: 'plan management requires a configured policy store',
|
|
486
|
+
});
|
|
487
|
+
}
|
|
488
|
+
handlePlan(req, res, {
|
|
489
|
+
route: planRef,
|
|
490
|
+
gate,
|
|
491
|
+
controlPlane,
|
|
492
|
+
policyStore,
|
|
493
|
+
audit,
|
|
494
|
+
maxBody,
|
|
495
|
+
catalog: commercialPlanCatalog,
|
|
496
|
+
}).catch(() => {
|
|
497
|
+
if (!res.headersSent)
|
|
498
|
+
sendJson(res, 500, { error: 'internal error' });
|
|
499
|
+
});
|
|
500
|
+
return;
|
|
501
|
+
}
|
|
422
502
|
const policyRef = parsePolicyPath(url.pathname);
|
|
423
503
|
if (policyRef !== undefined &&
|
|
424
504
|
(req.method === 'GET' || req.method === 'POST' || req.method === 'DELETE')) {
|
|
@@ -471,6 +551,29 @@ export function createServiceHandler(registry, options = {}) {
|
|
|
471
551
|
}
|
|
472
552
|
return sendJson(res, 404, { error: 'console not configured' });
|
|
473
553
|
}
|
|
554
|
+
// Archived-app pre-check (ADR 0117 §7): a tenant MCP path for an archived app answers 410 Gone
|
|
555
|
+
// before the router; anything else (including invalid slugs) falls through to the router.
|
|
556
|
+
const mcpTenant = tenantRefFromMcpPath(url.pathname);
|
|
557
|
+
if (mcpTenant !== undefined) {
|
|
558
|
+
void (async () => {
|
|
559
|
+
let archivedAt;
|
|
560
|
+
try {
|
|
561
|
+
archivedAt = await registry.getAppArchivedAt(mcpTenant.org, mcpTenant.app);
|
|
562
|
+
}
|
|
563
|
+
catch {
|
|
564
|
+
archivedAt = undefined; // invalid slugs can never name an archived app
|
|
565
|
+
}
|
|
566
|
+
if (archivedAt === undefined)
|
|
567
|
+
return router(req, res);
|
|
568
|
+
applySecurityHeaders(res, tls);
|
|
569
|
+
if (enforceHttps(req, res, tls))
|
|
570
|
+
return;
|
|
571
|
+
sendJson(res, 410, {
|
|
572
|
+
error: 'app archived: MCP endpoints for this app are disabled until its owner restores it',
|
|
573
|
+
});
|
|
574
|
+
})();
|
|
575
|
+
return;
|
|
576
|
+
}
|
|
474
577
|
router(req, res);
|
|
475
578
|
};
|
|
476
579
|
}
|