@noodleseed/one 0.10.0 → 0.11.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.
Files changed (146) hide show
  1. package/dist/cli.d.ts.map +1 -1
  2. package/dist/cli.js +16 -4
  3. package/dist/cli.js.map +1 -1
  4. package/dist/commands/archive-ops.d.ts +3 -0
  5. package/dist/commands/archive-ops.d.ts.map +1 -0
  6. package/dist/commands/archive-ops.js +168 -0
  7. package/dist/commands/archive-ops.js.map +1 -0
  8. package/dist/commands/org-admin.d.ts +17 -0
  9. package/dist/commands/org-admin.d.ts.map +1 -0
  10. package/dist/commands/org-admin.js +241 -0
  11. package/dist/commands/org-admin.js.map +1 -0
  12. package/dist/commands/policy-ops.d.ts.map +1 -1
  13. package/dist/commands/policy-ops.js +94 -1
  14. package/dist/commands/policy-ops.js.map +1 -1
  15. package/dist/commands/session.d.ts +1 -15
  16. package/dist/commands/session.d.ts.map +1 -1
  17. package/dist/commands/session.js +15 -170
  18. package/dist/commands/session.js.map +1 -1
  19. package/dist/commands/shared.d.ts.map +1 -1
  20. package/dist/commands/shared.js +13 -5
  21. package/dist/commands/shared.js.map +1 -1
  22. package/dist/commands/update-ops.d.ts +29 -0
  23. package/dist/commands/update-ops.d.ts.map +1 -0
  24. package/dist/commands/update-ops.js +315 -0
  25. package/dist/commands/update-ops.js.map +1 -0
  26. package/dist/config.d.ts +2 -0
  27. package/dist/config.d.ts.map +1 -1
  28. package/dist/config.js.map +1 -1
  29. package/dist/update-binary.d.ts +38 -0
  30. package/dist/update-binary.d.ts.map +1 -0
  31. package/dist/update-binary.js +144 -0
  32. package/dist/update-binary.js.map +1 -0
  33. package/dist/update-check.d.ts +40 -0
  34. package/dist/update-check.d.ts.map +1 -0
  35. package/dist/update-check.js +212 -0
  36. package/dist/update-check.js.map +1 -0
  37. package/dist/update-render.d.ts +17 -0
  38. package/dist/update-render.d.ts.map +1 -0
  39. package/dist/update-render.js +39 -0
  40. package/dist/update-render.js.map +1 -0
  41. package/dist/update.d.ts +10 -9
  42. package/dist/update.d.ts.map +1 -1
  43. package/dist/update.js +21 -89
  44. package/dist/update.js.map +1 -1
  45. package/node_modules/@noodle-borg/agent-kit/dist/curated/command-groups.d.ts.map +1 -1
  46. package/node_modules/@noodle-borg/agent-kit/dist/curated/command-groups.js +13 -1
  47. package/node_modules/@noodle-borg/agent-kit/dist/curated/command-groups.js.map +1 -1
  48. package/node_modules/@noodle-borg/agent-kit/dist/generated/surface.d.ts.map +1 -1
  49. package/node_modules/@noodle-borg/agent-kit/dist/generated/surface.js +2 -0
  50. package/node_modules/@noodle-borg/agent-kit/dist/generated/surface.js.map +1 -1
  51. package/node_modules/@noodle-borg/agent-kit/package.json +1 -1
  52. package/node_modules/@noodle-borg/service/dist/archive-sweeper.d.ts +43 -0
  53. package/node_modules/@noodle-borg/service/dist/archive-sweeper.d.ts.map +1 -0
  54. package/node_modules/@noodle-borg/service/dist/archive-sweeper.js +122 -0
  55. package/node_modules/@noodle-borg/service/dist/archive-sweeper.js.map +1 -0
  56. package/node_modules/@noodle-borg/service/dist/commercial-plans.d.ts +11 -0
  57. package/node_modules/@noodle-borg/service/dist/commercial-plans.d.ts.map +1 -0
  58. package/node_modules/@noodle-borg/service/dist/commercial-plans.js +119 -0
  59. package/node_modules/@noodle-borg/service/dist/commercial-plans.js.map +1 -0
  60. package/node_modules/@noodle-borg/service/dist/deployment-versioning.d.ts +2 -0
  61. package/node_modules/@noodle-borg/service/dist/deployment-versioning.d.ts.map +1 -1
  62. package/node_modules/@noodle-borg/service/dist/deployment-versioning.js +1 -1
  63. package/node_modules/@noodle-borg/service/dist/deployment-versioning.js.map +1 -1
  64. package/node_modules/@noodle-borg/service/dist/index.d.ts +3 -1
  65. package/node_modules/@noodle-borg/service/dist/index.d.ts.map +1 -1
  66. package/node_modules/@noodle-borg/service/dist/index.js +2 -0
  67. package/node_modules/@noodle-borg/service/dist/index.js.map +1 -1
  68. package/node_modules/@noodle-borg/service/dist/options.d.ts +9 -0
  69. package/node_modules/@noodle-borg/service/dist/options.d.ts.map +1 -1
  70. package/node_modules/@noodle-borg/service/dist/registry-state.d.ts +25 -0
  71. package/node_modules/@noodle-borg/service/dist/registry-state.d.ts.map +1 -0
  72. package/node_modules/@noodle-borg/service/dist/registry-state.js +119 -0
  73. package/node_modules/@noodle-borg/service/dist/registry-state.js.map +1 -0
  74. package/node_modules/@noodle-borg/service/dist/registry.d.ts +7 -6
  75. package/node_modules/@noodle-borg/service/dist/registry.d.ts.map +1 -1
  76. package/node_modules/@noodle-borg/service/dist/registry.js +44 -44
  77. package/node_modules/@noodle-borg/service/dist/registry.js.map +1 -1
  78. package/node_modules/@noodle-borg/service/dist/routes/archive.d.ts +16 -0
  79. package/node_modules/@noodle-borg/service/dist/routes/archive.d.ts.map +1 -0
  80. package/node_modules/@noodle-borg/service/dist/routes/archive.js +83 -0
  81. package/node_modules/@noodle-borg/service/dist/routes/archive.js.map +1 -0
  82. package/node_modules/@noodle-borg/service/dist/routes/control-plane.d.ts +1 -18
  83. package/node_modules/@noodle-borg/service/dist/routes/control-plane.d.ts.map +1 -1
  84. package/node_modules/@noodle-borg/service/dist/routes/control-plane.js +18 -260
  85. package/node_modules/@noodle-borg/service/dist/routes/control-plane.js.map +1 -1
  86. package/node_modules/@noodle-borg/service/dist/routes/deployments.d.ts +17 -0
  87. package/node_modules/@noodle-borg/service/dist/routes/deployments.d.ts.map +1 -0
  88. package/node_modules/@noodle-borg/service/dist/routes/deployments.js +88 -0
  89. package/node_modules/@noodle-borg/service/dist/routes/deployments.js.map +1 -0
  90. package/node_modules/@noodle-borg/service/dist/routes/org-admin.d.ts +40 -0
  91. package/node_modules/@noodle-borg/service/dist/routes/org-admin.d.ts.map +1 -0
  92. package/node_modules/@noodle-borg/service/dist/routes/org-admin.js +353 -0
  93. package/node_modules/@noodle-borg/service/dist/routes/org-admin.js.map +1 -0
  94. package/node_modules/@noodle-borg/service/dist/routes/paths.d.ts +15 -0
  95. package/node_modules/@noodle-borg/service/dist/routes/paths.d.ts.map +1 -1
  96. package/node_modules/@noodle-borg/service/dist/routes/paths.js +47 -0
  97. package/node_modules/@noodle-borg/service/dist/routes/paths.js.map +1 -1
  98. package/node_modules/@noodle-borg/service/dist/routes/plans.d.ts +20 -0
  99. package/node_modules/@noodle-borg/service/dist/routes/plans.d.ts.map +1 -0
  100. package/node_modules/@noodle-borg/service/dist/routes/plans.js +159 -0
  101. package/node_modules/@noodle-borg/service/dist/routes/plans.js.map +1 -0
  102. package/node_modules/@noodle-borg/service/dist/routes/policies.d.ts.map +1 -1
  103. package/node_modules/@noodle-borg/service/dist/routes/policies.js +7 -0
  104. package/node_modules/@noodle-borg/service/dist/routes/policies.js.map +1 -1
  105. package/node_modules/@noodle-borg/service/dist/routes/rollback.d.ts.map +1 -1
  106. package/node_modules/@noodle-borg/service/dist/routes/rollback.js +19 -1
  107. package/node_modules/@noodle-borg/service/dist/routes/rollback.js.map +1 -1
  108. package/node_modules/@noodle-borg/service/dist/service.d.ts.map +1 -1
  109. package/node_modules/@noodle-borg/service/dist/service.js +107 -4
  110. package/node_modules/@noodle-borg/service/dist/service.js.map +1 -1
  111. package/node_modules/@noodle-borg/service/dist/store/control-plane.d.ts +14 -0
  112. package/node_modules/@noodle-borg/service/dist/store/control-plane.d.ts.map +1 -1
  113. package/node_modules/@noodle-borg/service/dist/store/control-plane.js +38 -0
  114. package/node_modules/@noodle-borg/service/dist/store/control-plane.js.map +1 -1
  115. package/node_modules/@noodle-borg/service/dist/store/json-file.d.ts +25 -0
  116. package/node_modules/@noodle-borg/service/dist/store/json-file.d.ts.map +1 -0
  117. package/node_modules/@noodle-borg/service/dist/store/json-file.js +163 -0
  118. package/node_modules/@noodle-borg/service/dist/store/json-file.js.map +1 -0
  119. package/node_modules/@noodle-borg/service/dist/store/postgres-control-plane.d.ts +14 -0
  120. package/node_modules/@noodle-borg/service/dist/store/postgres-control-plane.d.ts.map +1 -1
  121. package/node_modules/@noodle-borg/service/dist/store/postgres-control-plane.js +16 -0
  122. package/node_modules/@noodle-borg/service/dist/store/postgres-control-plane.js.map +1 -1
  123. package/node_modules/@noodle-borg/service/dist/store/postgres-rows.d.ts +60 -0
  124. package/node_modules/@noodle-borg/service/dist/store/postgres-rows.d.ts.map +1 -0
  125. package/node_modules/@noodle-borg/service/dist/store/postgres-rows.js +101 -0
  126. package/node_modules/@noodle-borg/service/dist/store/postgres-rows.js.map +1 -0
  127. package/node_modules/@noodle-borg/service/dist/store/postgres-schema.d.ts.map +1 -1
  128. package/node_modules/@noodle-borg/service/dist/store/postgres-schema.js +8 -0
  129. package/node_modules/@noodle-borg/service/dist/store/postgres-schema.js.map +1 -1
  130. package/node_modules/@noodle-borg/service/dist/store/postgres.d.ts +20 -6
  131. package/node_modules/@noodle-borg/service/dist/store/postgres.d.ts.map +1 -1
  132. package/node_modules/@noodle-borg/service/dist/store/postgres.js +74 -122
  133. package/node_modules/@noodle-borg/service/dist/store/postgres.js.map +1 -1
  134. package/node_modules/@noodle-borg/service/dist/store/records.d.ts +35 -0
  135. package/node_modules/@noodle-borg/service/dist/store/records.d.ts.map +1 -0
  136. package/node_modules/@noodle-borg/service/dist/store/records.js +87 -0
  137. package/node_modules/@noodle-borg/service/dist/store/records.js.map +1 -0
  138. package/node_modules/@noodle-borg/service/dist/store/validate.d.ts +19 -0
  139. package/node_modules/@noodle-borg/service/dist/store/validate.d.ts.map +1 -0
  140. package/node_modules/@noodle-borg/service/dist/store/validate.js +61 -0
  141. package/node_modules/@noodle-borg/service/dist/store/validate.js.map +1 -0
  142. package/node_modules/@noodle-borg/service/dist/store.d.ts +68 -44
  143. package/node_modules/@noodle-borg/service/dist/store.d.ts.map +1 -1
  144. package/node_modules/@noodle-borg/service/dist/store.js +48 -213
  145. package/node_modules/@noodle-borg/service/dist/store.js.map +1 -1
  146. package/package.json +2 -2
@@ -0,0 +1,159 @@
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 stored = await input.policyStore.putPolicyAssignment({
42
+ id: commercialPlanPolicyId(input.route.org),
43
+ scope: { level: 'org', org: input.route.org },
44
+ policy: input.catalog[parsed.plan],
45
+ createdBySubject: identity.subject,
46
+ createdByEmail: identity.email,
47
+ reason,
48
+ source,
49
+ });
50
+ await emitPlanAudit(input.audit, 'org.plan.updated', input.route.org, identity, 200, {
51
+ plan: parsed.plan,
52
+ policyId: stored.id,
53
+ policyVersion: stored.version,
54
+ source,
55
+ });
56
+ return sendJson(res, 200, {
57
+ ok: true,
58
+ plan: publicPlan(input.route.org, input.catalog, stored),
59
+ });
60
+ }
61
+ async function suspendPlan(req, res, input, identity) {
62
+ const body = await readJsonBody(req, input.maxBody);
63
+ if (!body.ok)
64
+ return sendJson(res, body.status, { ok: false, error: body.error });
65
+ const parsed = body.value;
66
+ const reason = requiredString(parsed.reason, 'reason');
67
+ const source = parsed.source === 'cli' ? 'cli' : 'api';
68
+ const stored = await input.policyStore.putPolicyAssignment({
69
+ id: commercialPlanPolicyId(input.route.org),
70
+ scope: { level: 'org', org: input.route.org },
71
+ policy: { schemaVersion: 1, suspended: true, reason },
72
+ createdBySubject: identity.subject,
73
+ createdByEmail: identity.email,
74
+ reason,
75
+ source,
76
+ });
77
+ await emitPlanAudit(input.audit, 'org.plan.suspended', input.route.org, identity, 200, {
78
+ policyId: stored.id,
79
+ policyVersion: stored.version,
80
+ source,
81
+ });
82
+ return sendJson(res, 200, {
83
+ ok: true,
84
+ plan: publicPlan(input.route.org, input.catalog, stored),
85
+ });
86
+ }
87
+ async function authorize(req, res, gate) {
88
+ const auth = await gate.authorize(req);
89
+ if (!auth.ok) {
90
+ if (auth.status === 401)
91
+ sendUnauthorized(res, auth.message);
92
+ else
93
+ sendForbidden(res, auth.message);
94
+ return false;
95
+ }
96
+ if (!auth.identity) {
97
+ sendUnauthorized(res, 'identity required');
98
+ return false;
99
+ }
100
+ return auth.identity;
101
+ }
102
+ async function authorizePlanRoute(res, store, org, identity, method) {
103
+ if (method === 'PUT' || method === 'POST') {
104
+ if (identity.superAdmin)
105
+ return true;
106
+ sendForbidden(res, 'super-admin required');
107
+ return false;
108
+ }
109
+ if (identity.superAdmin)
110
+ return true;
111
+ if ((await store.getOrgMember({ org, subject: identity.subject })) !== undefined)
112
+ return true;
113
+ sendForbidden(res, 'forbidden');
114
+ return false;
115
+ }
116
+ function publicPlan(org, catalog, assignment) {
117
+ if (assignment === undefined) {
118
+ return { org, plan: 'free', state: 'active', source: 'default' };
119
+ }
120
+ if (assignment.policy.suspended) {
121
+ return {
122
+ org,
123
+ plan: null,
124
+ state: 'suspended',
125
+ source: 'policy',
126
+ policyId: assignment.id,
127
+ policyVersion: assignment.version,
128
+ };
129
+ }
130
+ return {
131
+ org,
132
+ plan: planNameForPolicy(assignment.policy, catalog) ?? 'custom',
133
+ state: 'active',
134
+ source: 'policy',
135
+ policyId: assignment.id,
136
+ policyVersion: assignment.version,
137
+ };
138
+ }
139
+ function requiredString(value, label) {
140
+ if (typeof value !== 'string' || value.trim().length === 0) {
141
+ throw new Error(`${label} is required`);
142
+ }
143
+ return value.trim();
144
+ }
145
+ function errorMessage(error) {
146
+ return error instanceof Error ? error.message : String(error);
147
+ }
148
+ function emitPlanAudit(audit, eventType, org, identity, status, details) {
149
+ return audit.emit({
150
+ eventType,
151
+ org,
152
+ decision: 'allow',
153
+ status,
154
+ actorSubject: identity.subject,
155
+ ...(identity.email !== undefined ? { actorEmail: identity.email } : {}),
156
+ details,
157
+ });
158
+ }
159
+ //# 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;AAEnF,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
+ {"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":"AAGA,OAAO,EAAE,wBAAwB,EAAE,MAAM,wBAAwB,CAAC;AAClE,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,QAAQ,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAC1F,OAAO,EAIL,mBAAmB,EAInB,sBAAsB,EACtB,6BAA6B,GAC9B,MAAM,cAAc,CAAC;AAMtB,MAAM,CAAC,KAAK,UAAU,cAAc,CAClC,GAAoB,EACpB,GAAmB,EACnB,KASC;IAED,MAAM,QAAQ,GAAG,MAAM,SAAS,CAAC,GAAG,EAAE,GAAG,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;IACvD,IAAI,QAAQ,KAAK,KAAK;QAAE,OAAO;IAC/B,MAAM,IAAI,GAAG,MAAM,oBAAoB,CACrC,GAAG,EACH,KAAK,CAAC,YAAY,EAClB,KAAK,CAAC,KAAK,EACX,QAAQ,EACR,GAAG,CAAC,MAAM,CACX,CAAC;IACF,IAAI,IAAI,KAAK,KAAK;QAAE,OAAO;IAE3B,IAAI,CAAC;QACH,IAAI,KAAK,CAAC,KAAK,CAAC,MAAM,KAAK,YAAY,IAAI,GAAG,CAAC,MAAM,KAAK,KAAK,EAAE,CAAC;YAChE,OAAO,MAAM,YAAY,CAAC,GAAG,EAAE,KAAK,CAAC,WAAW,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC;QACjE,CAAC;QACD,IAAI,KAAK,CAAC,KAAK,CAAC,MAAM,KAAK,YAAY,IAAI,GAAG,CAAC,MAAM,KAAK,MAAM,EAAE,CAAC;YACjE,OAAO,MAAM,WAAW,CAAC,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAC;QACtD,CAAC;QACD,IAAI,KAAK,CAAC,KAAK,CAAC,MAAM,KAAK,MAAM,IAAI,GAAG,CAAC,MAAM,KAAK,KAAK,EAAE,CAAC;YAC1D,OAAO,MAAM,UAAU,CAAC,GAAG,EAAE,KAAK,CAAC,WAAW,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC;QAC/D,CAAC;QACD,IAAI,KAAK,CAAC,KAAK,CAAC,MAAM,KAAK,MAAM,IAAI,GAAG,CAAC,MAAM,KAAK,QAAQ,EAAE,CAAC;YAC7D,OAAO,MAAM,YAAY,CAAC,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAC;QACvD,CAAC;QACD,IAAI,KAAK,CAAC,KAAK,CAAC,MAAM,KAAK,SAAS,IAAI,GAAG,CAAC,MAAM,KAAK,KAAK,EAAE,CAAC;YAC7D,OAAO,MAAM,OAAO,CAAC,GAAG,EAAE,KAAK,CAAC,WAAW,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC;QAC5D,CAAC;QACD,IAAI,KAAK,CAAC,KAAK,CAAC,MAAM,KAAK,WAAW,IAAI,GAAG,CAAC,MAAM,KAAK,MAAM,EAAE,CAAC;YAChE,OAAO,MAAM,SAAS,CAAC,GAAG,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC;QAC1C,CAAC;QACD,IAAI,KAAK,CAAC,KAAK,CAAC,MAAM,KAAK,UAAU,IAAI,GAAG,CAAC,MAAM,KAAK,MAAM,EAAE,CAAC;YAC/D,OAAO,MAAM,QAAQ,CAAC,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAC;QACnD,CAAC;QACD,IAAI,KAAK,CAAC,KAAK,CAAC,MAAM,KAAK,OAAO,IAAI,GAAG,CAAC,MAAM,KAAK,KAAK,EAAE,CAAC;YAC3D,OAAO,MAAM,KAAK,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;QACjC,CAAC;QACD,OAAO,QAAQ,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,WAAW,EAAE,CAAC,CAAC;IAC/D,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,WAAW,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;IACjC,CAAC;AACH,CAAC;AAED,KAAK,UAAU,YAAY,CACzB,GAAmB,EACnB,KAA4B,EAC5B,KAAqB;IAErB,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,qBAAqB,EAAE,CAClD,KAAK,CAAC,OAAO,KAAK,KAAK,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,CAClD,CAAC;IACF,OAAO,QAAQ,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,IAAI,EAAE,EAAE,CAAC,CAAC;AACpE,CAAC;AAED,KAAK,UAAU,UAAU,CACvB,GAAmB,EACnB,KAA4B,EAC5B,KAA+C;IAE/C,MAAM,MAAM,GAAG,MAAM,KAAK,CAAC,mBAAmB,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IAC3D,IAAI,MAAM,KAAK,SAAS,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE,MAAM,CAAC,EAAE,CAAC;QAC5D,OAAO,QAAQ,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,WAAW,EAAE,CAAC,CAAC;IAC/D,CAAC;IACD,OAAO,QAAQ,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC;AAClD,CAAC;AAED,KAAK,UAAU,OAAO,CACpB,GAAmB,EACnB,KAA4B,EAC5B,KAA+C;IAE/C,MAAM,OAAO,GAAG,CAAC,MAAM,KAAK,CAAC,2BAA2B,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;IAC5E,MAAM,QAAQ,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,eAAe,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC;IAC5E,OAAO,QAAQ,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC,CAAC;AAC7D,CAAC;AAED,KAAK,UAAU,WAAW,CACxB,GAAoB,EACpB,GAAmB,EACnB,KAA2C,EAC3C,QAA8B;IAE9B,MAAM,IAAI,GAAG,MAAM,YAAY,CAAC,GAAG,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;IACpD,IAAI,CAAC,IAAI,CAAC,EAAE;QAAE,OAAO,QAAQ,CAAC,GAAG,EAAE,IAAI,CAAC,MAAM,EAAE,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC;IAClF,MAAM,MAAM,GAAG,IAAI,CAAC,KAQnB,CAAC;IACF,MAAM,UAAU,GAAG,mBAAmB,CAAC,MAAM,EAAE,QAAQ,EAAE,KAAK,CAAC,CAAC;IAChE,IAAI,wBAAwB,CAAC,UAAU,CAAC,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,UAAU,EAAE,CAAC;QACpE,OAAO,aAAa,CAAC,GAAG,EAAE,sBAAsB,CAAC,CAAC;IACpD,CAAC;IACD,MAAM,kBAAkB,CAAC,KAAK,EAAE,UAAU,CAAC,KAAK,CAAC,CAAC;IAClD,MAAM,MAAM,GAAG,MAAM,KAAK,CAAC,WAAW,CAAC,mBAAmB,CAAC,UAAU,CAAC,CAAC;IACvE,MAAM,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,2BAA2B,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,CAAC,CAAC,CAAC;IACxF,OAAO,QAAQ,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;AAC1D,CAAC;AAED,KAAK,UAAU,YAAY,CACzB,GAAoB,EACpB,GAAmB,EACnB,KAA2C,EAC3C,QAA8B;IAE9B,IAAI,KAAK,CAAC,WAAW,CAAC,sBAAsB,KAAK,SAAS,EAAE,CAAC;QAC3D,OAAO,QAAQ,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,gCAAgC,EAAE,CAAC,CAAC;IACpF,CAAC;IACD,MAAM,IAAI,GAAG,MAAM,YAAY,CAAC,GAAG,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;IACpD,IAAI,CAAC,IAAI,CAAC,EAAE;QAAE,OAAO,QAAQ,CAAC,GAAG,EAAE,IAAI,CAAC,MAAM,EAAE,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC;IAClF,MAAM,MAAM,GAAG,IAAI,CAAC,KAInB,CAAC;IACF,MAAM,MAAM,GAAG,cAAc,CAAC,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;IACvD,MAAM,KAAK,GAAG,KAAK,CAAC,KAAiD,CAAC;IACtE,IAAI,wBAAwB,CAAC,KAAK,CAAC,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,UAAU,EAAE,CAAC;QAC/D,OAAO,aAAa,CAAC,GAAG,EAAE,sBAAsB,CAAC,CAAC;IACpD,CAAC;IACD,MAAM,OAAO,GAAG,MAAM,KAAK,CAAC,WAAW,CAAC,mBAAmB,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IACxE,IAAI,OAAO,KAAK,SAAS;QAAE,MAAM,kBAAkB,CAAC,KAAK,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC;IAC1E,MAAM,eAAe,GAAG,WAAW,CAAC,MAAM,CAAC,eAAe,EAAE,iBAAiB,CAAC,CAAC;IAC/E,MAAM,SAAS,GAAG,MAAM,KAAK,CAAC,WAAW,CAAC,sBAAsB,CAAC;QAC/D,EAAE,EAAE,KAAK,CAAC,EAAE;QACZ,gBAAgB,EAAE,QAAQ,CAAC,OAAO;QAClC,cAAc,EAAE,QAAQ,CAAC,KAAK;QAC9B,MAAM;QACN,MAAM,EAAE,KAAK;QACb,GAAG,CAAC,eAAe,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,eAAe,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC7D,GAAG,CAAC,OAAO,MAAM,CAAC,cAAc,KAAK,QAAQ,CAAC,CAAC,CAAC,EAAE,cAAc,EAAE,MAAM,CAAC,cAAc,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KAChG,CAAC,CAAC;IACH,MAAM,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,2BAA2B,EAAE,SAAS,EAAE,QAAQ,EAAE,GAAG,CAAC,CAAC,CAAC;IAC3F,OAAO,QAAQ,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC,CAAC;AAC7D,CAAC;AAED,KAAK,UAAU,SAAS,CACtB,GAAoB,EACpB,GAAmB,EACnB,KAA2C;IAE3C,MAAM,IAAI,GAAG,MAAM,YAAY,CAAC,GAAG,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;IACpD,IAAI,CAAC,IAAI,CAAC,EAAE;QAAE,OAAO,QAAQ,CAAC,GAAG,EAAE,IAAI,CAAC,MAAM,EAAE,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC;IAClF,MAAM,OAAO,GAAG,eAAe,CAAE,IAAI,CAAC,KAA+B,CAAC,OAAO,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC;IAC5F,MAAM,oBAAoB,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;IAC3C,MAAM,MAAM,GAAG,MAAM,sBAAsB,CAAC,KAAK,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;IACxE,MAAM,KAAK,CAAC,KAAK,CAAC,IAAI,CACpB,SAAS,CAAC,uBAAuB,EAAE,OAAO,EAAE,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CACtF,CAAC;IACF,OAAO,QAAQ,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,GAAG,MAAM,EAAE,CAAC,CAAC;AACrD,CAAC;AAED,KAAK,UAAU,QAAQ,CACrB,GAAoB,EACpB,GAAmB,EACnB,KAA2C,EAC3C,QAA8B;IAE9B,MAAM,IAAI,GAAG,MAAM,YAAY,CAAC,GAAG,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;IACpD,IAAI,CAAC,IAAI,CAAC,EAAE;QAAE,OAAO,QAAQ,CAAC,GAAG,EAAE,IAAI,CAAC,MAAM,EAAE,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC;IAClF,MAAM,MAAM,GAAG,IAAI,CAAC,KAA2E,CAAC;IAChG,MAAM,OAAO,GAAG,eAAe,CAAC,MAAM,CAAC,OAAO,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC;IAC7D,MAAM,oBAAoB,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;IAC3C,MAAM,cAAc,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,WAAW,CAAC;QACtD,CAAC,CAAC,MAAM,CAAC,WAAW;QACpB,CAAC,CAAC,MAAM,CAAC,UAAU,KAAK,SAAS;YAC/B,CAAC,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC;YACrB,CAAC,CAAC,EAAE,CAAC;IACT,MAAM,QAAQ,GAAG,cAAc,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,KAAK,EAAE,EAAE,CAAC,eAAe,CAAC,GAAG,EAAE,QAAQ,EAAE,KAAK,CAAC,CAAC,CAAC;IAC3F,KAAK,MAAM,OAAO,IAAI,QAAQ;QAAE,MAAM,kBAAkB,CAAC,KAAK,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC;IAC/E,MAAM,MAAM,GAAG,MAAM,sBAAsB,CAAC,KAAK,CAAC,WAAW,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC;IAClF,MAAM,KAAK,CAAC,KAAK,CAAC,IAAI,CACpB,SAAS,CAAC,sBAAsB,EAAE,OAAO,EAAE,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CACrF,CAAC;IACF,OAAO,QAAQ,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,GAAG,MAAM,EAAE,CAAC,CAAC;AACrD,CAAC;AAED,KAAK,UAAU,KAAK,CAClB,GAAmB,EACnB,KAA2C;IAE3C,MAAM,SAAS,GAAG,CAAC,MAAM,KAAK,CAAC,QAAQ,EAAE,SAAS,EAAE,CAAC,IAAI,EAAE,CAAC;IAC5D,IAAI,MAAM,GAAG,SAAS,CAAC;IACvB,IAAI,GAAG,GAAG,UAAU,CAAC;IACrB,IAAI,KAAK,CAAC,KAAK,CAAC,OAAO,KAAK,KAAK,EAAE,CAAC;QAClC,GAAG,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC;QACtB,MAAM,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,GAAG,GAAG,CAAC,CAAC,CAAC;IACnE,CAAC;IACD,MAAM,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC;QACrB,SAAS,EAAE,mBAAmB;QAC9B,GAAG;QACH,QAAQ,EAAE,OAAO;QACjB,MAAM,EAAE,GAAG;KACZ,CAAC,CAAC;IACH,OAAO,QAAQ,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC;AACzD,CAAC;AAED,KAAK,UAAU,kBAAkB,CAC/B,KAA2C,EAC3C,KAAkB;IAElB,IAAI,KAAK,CAAC,KAAK,CAAC,OAAO,KAAK,UAAU;QAAE,OAAO;IAC/C,MAAM,GAAG,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC;IAC5B,IAAI,KAAK,CAAC,KAAK,KAAK,UAAU;QAAE,MAAM,IAAI,KAAK,CAAC,+CAA+C,CAAC,CAAC;IACjG,IAAI,KAAK,CAAC,KAAK,KAAK,YAAY,EAAE,CAAC;QACjC,MAAM,MAAM,GAAG,MAAM,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;QAC5D,IAAI,MAAM,EAAE,GAAG,KAAK,GAAG;YAAE,MAAM,IAAI,KAAK,CAAC,+CAA+C,CAAC,CAAC;QAC1F,OAAO;IACT,CAAC;IACD,IAAI,KAAK,CAAC,GAAG,KAAK,GAAG;QAAE,MAAM,IAAI,KAAK,CAAC,2CAA2C,CAAC,CAAC;AACtF,CAAC;AAED,KAAK,UAAU,oBAAoB,CACjC,KAA2C,EAC3C,OAAyB;IAEzB,IAAI,KAAK,CAAC,KAAK,CAAC,OAAO,KAAK,KAAK,IAAI,OAAO,CAAC,GAAG,KAAK,KAAK,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC;QACrE,MAAM,IAAI,KAAK,CAAC,6CAA6C,CAAC,CAAC;IACjE,CAAC;AACH,CAAC;AAED,SAAS,mBAAmB,CAC1B,MAQC,EACD,QAA8B,EAC9B,aAA4B;IAE5B,MAAM,eAAe,GAAG,WAAW,CAAC,MAAM,CAAC,eAAe,EAAE,iBAAiB,CAAC,CAAC;IAC/E,MAAM,cAAc,GAClB,OAAO,MAAM,CAAC,cAAc,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC,CAAC,SAAS,CAAC;IAChF,OAAO,6BAA6B,CAAC;QACnC,EAAE,EAAE,cAAc,CAAC,MAAM,CAAC,EAAE,EAAE,IAAI,CAAC;QACnC,KAAK,EAAE,MAAM,CAAC,KAAoB;QAClC,MAAM,EAAE,MAAM,CAAC,MAAwB;QACvC,gBAAgB,EAAE,QAAQ,CAAC,OAAO;QAClC,cAAc,EAAE,QAAQ,CAAC,KAAK;QAC9B,MAAM,EAAE,cAAc,CAAC,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC;QAC/C,MAAM,EAAE,MAAM,CAAC,MAAM,KAAK,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,aAAa;QACvD,GAAG,CAAC,eAAe,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,eAAe,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC7D,GAAG,CAAC,cAAc,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,cAAc,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KAC5D,CAAC,CAAC;AACL,CAAC;AAED,SAAS,eAAe,CACtB,GAAY,EACZ,QAA8B,EAC9B,KAAa;IAEb,MAAM,MAAM,GAAG,GAA4E,CAAC;IAC5F,MAAM,KAAK,GAAG,mBAAmB,CAC/B;QACE,GAAG,MAAM;QACT,EAAE,EAAE,MAAM,CAAC,EAAE,IAAI,YAAY,KAAK,EAAE;QACpC,MAAM,EAAE,MAAM,CAAC,MAAM,IAAI,UAAU;KACpC,EACD,QAAQ,EACR,KAAK,CACN,CAAC;IACF,OAAO;QACL,EAAE,EAAE,KAAK,CAAC,EAAE;QACZ,OAAO,EAAE,CAAC;QACV,MAAM,EAAE,IAAI;QACZ,KAAK,EAAE,KAAK,CAAC,KAAK;QAClB,MAAM,EAAE,KAAK,CAAC,MAAM;QACpB,SAAS,EAAE,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE;QACpC,gBAAgB,EAAE,QAAQ,CAAC,OAAO;QAClC,cAAc,EAAE,QAAQ,CAAC,KAAK;QAC9B,MAAM,EAAE,KAAK,CAAC,MAAM;QACpB,MAAM,EAAE,KAAK,CAAC,MAAM;KACrB,CAAC;AACJ,CAAC;AAED,SAAS,eAAe,CAAC,GAAY,EAAE,KAAqB;IAC1D,MAAM,MAAM,GAAG,GAWd,CAAC;IACF,MAAM,GAAG,GAAG,KAAK,CAAC,OAAO,KAAK,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,cAAc,CAAC,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;IACpF,MAAM,GAAG,GAAG,cAAc,CAAC,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;IAC9C,MAAM,GAAG,GAAG,cAAc,CAAC,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;IAC9C,MAAM,QAAQ,GAAG,aAAa,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;IAChD,MAAM,IAAI,GAAG,cAAc,CAAC,MAAM,CAAC,IAAI,IAAI,MAAM,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC;IAC1E,MAAM,YAAY,GAAG,cAAc,CAAC,MAAM,CAAC,YAAY,EAAE,cAAc,CAAC,CAAC;IACzE,MAAM,OAAO,GAAG,cAAc,CAAC,MAAM,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;IAC1D,OAAO;QACL,OAAO,EACL,cAAc,CAAC,MAAM,CAAC,OAAO,EAAE,SAAS,CAAC;YACzC,CAAC,GAAG,IAAI,UAAU,EAAE,GAAG,IAAI,GAAG,EAAE,GAAG,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC;QACvD,MAAM,EAAE,cAAc,CAAC,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,IAAI,iBAAiB,CAAC,QAAQ,CAAC;QAC9E,QAAQ;QACR,GAAG,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACvC,GAAG,CAAC,GAAG,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACrC,GAAG,CAAC,GAAG,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACrC,GAAG,CAAC,GAAG,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACrC,GAAG,CAAC,YAAY,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACvD,GAAG,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KAC9C,CAAC;AACJ,CAAC;AAED,KAAK,UAAU,SAAS,CACtB,GAAoB,EACpB,GAAmB,EACnB,IAAoB;IAEpB,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;IACvC,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC;QACb,IAAI,IAAI,CAAC,MAAM,KAAK,GAAG;YAAE,gBAAgB,CAAC,GAAG,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;;YACxD,aAAa,CAAC,GAAG,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;QACtC,OAAO,KAAK,CAAC;IACf,CAAC;IACD,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;QACnB,gBAAgB,CAAC,GAAG,EAAE,mBAAmB,CAAC,CAAC;QAC3C,OAAO,KAAK,CAAC;IACf,CAAC;IACD,OAAO,IAAI,CAAC,QAAQ,CAAC;AACvB,CAAC;AAED,KAAK,UAAU,oBAAoB,CACjC,GAAmB,EACnB,KAAwB,EACxB,KAAqB,EACrB,QAA8B,EAC9B,MAA0B;IAE1B,IAAI,KAAK,CAAC,OAAO,KAAK,UAAU,EAAE,CAAC;QACjC,IAAI,CAAC,QAAQ,CAAC,UAAU,EAAE,CAAC;YACzB,aAAa,CAAC,GAAG,EAAE,sBAAsB,CAAC,CAAC;YAC3C,OAAO,KAAK,CAAC;QACf,CAAC;QACD,OAAO,aAAa,CAAC;IACvB,CAAC;IACD,IAAI,QAAQ,CAAC,UAAU;QAAE,OAAO,aAAa,CAAC;IAC9C,MAAM,MAAM,GAAG,MAAM,KAAK,CAAC,YAAY,CAAC,EAAE,GAAG,EAAE,KAAK,CAAC,GAAG,EAAE,OAAO,EAAE,QAAQ,CAAC,OAAO,EAAE,CAAC,CAAC;IACvF,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;QACzB,aAAa,CAAC,GAAG,EAAE,WAAW,CAAC,CAAC;QAChC,OAAO,KAAK,CAAC;IACf,CAAC;IACD,MAAM,MAAM,GAAG,MAAM,KAAK,MAAM,IAAI,MAAM,KAAK,QAAQ,CAAC;IACxD,IAAI,MAAM,IAAI,MAAM,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;QACtC,aAAa,CAAC,GAAG,EAAE,qBAAqB,CAAC,CAAC;QAC1C,OAAO,KAAK,CAAC;IACf,CAAC;IACD,OAAO,MAAM,CAAC,IAAI,CAAC;AACrB,CAAC;AAED,SAAS,eAAe,CACtB,KAA8D,EAC9D,MAAwB;IAExB,IAAI,KAAK,CAAC,OAAO,KAAK,UAAU;QAAE,OAAO,IAAI,CAAC;IAC9C,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC;IAC3B,IAAI,KAAK,CAAC,KAAK,KAAK,UAAU,IAAI,KAAK,CAAC,KAAK,KAAK,YAAY;QAAE,OAAO,KAAK,CAAC;IAC7E,OAAO,KAAK,CAAC,GAAG,KAAK,KAAK,CAAC,GAAG,CAAC;AACjC,CAAC;AAED,SAAS,WAAW,CAClB,SAAiB,EACjB,MAAwB,EACxB,QAA8B,EAC9B,MAAc;IAEd,OAAO;QACL,SAAS;QACT,GAAG,EACD,MAAM,CAAC,KAAK,CAAC,KAAK,KAAK,UAAU,IAAI,MAAM,CAAC,KAAK,CAAC,KAAK,KAAK,YAAY;YACtE,CAAC,CAAC,UAAU;YACZ,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG;QACtB,YAAY,EAAE,QAAQ,CAAC,OAAO;QAC9B,UAAU,EAAE,QAAQ,CAAC,KAAK;QAC1B,QAAQ,EAAE,OAAgB;QAC1B,MAAM;QACN,OAAO,EAAE;YACP,QAAQ,EAAE,MAAM,CAAC,EAAE;YACnB,aAAa,EAAE,MAAM,CAAC,OAAO;YAC7B,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,KAAK;YACzB,MAAM,EAAE,MAAM,CAAC,MAAM;SACtB;KACF,CAAC;AACJ,CAAC;AAED,SAAS,SAAS,CAAC,SAAiB,EAAE,OAAyB,EAAE,QAA0B;IACzF,OAAO;QACL,SAAS;QACT,GAAG,EAAE,OAAO,CAAC,GAAG,IAAI,UAAU;QAC9B,GAAG,CAAC,OAAO,CAAC,GAAG,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC1D,GAAG,CAAC,OAAO,CAAC,GAAG,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC1D,GAAG,CAAC,OAAO,CAAC,YAAY,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,OAAO,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACrF,QAAQ;QACR,MAAM,EAAE,GAAG;QACX,OAAO,EAAE;YACP,MAAM,EAAE,OAAO,CAAC,MAAM;YACtB,QAAQ,EAAE,OAAO,CAAC,QAAQ;YAC1B,GAAG,CAAC,OAAO,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAC7D,OAAO,EAAE,OAAO,CAAC,OAAO;SACzB;KACF,CAAC;AACJ,CAAC;AAED,SAAS,WAAW,CAAC,GAAmB,EAAE,KAAc;IACtD,IAAI,KAAK,YAAY,mBAAmB,EAAE,CAAC;QACzC,QAAQ,CAAC,GAAG,EAAE,GAAG,EAAE;YACjB,EAAE,EAAE,KAAK;YACT,IAAI,EAAE,KAAK,CAAC,IAAI;YAChB,KAAK,EAAE,KAAK,CAAC,OAAO;YACpB,GAAG,CAAC,KAAK,CAAC,cAAc,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,cAAc,EAAE,KAAK,CAAC,cAAc,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SACxF,CAAC,CAAC;QACH,OAAO;IACT,CAAC;IACD,QAAQ,CAAC,GAAG,EAAE,GAAG,EAAE;QACjB,EAAE,EAAE,KAAK;QACT,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;KAC9D,CAAC,CAAC;AACL,CAAC;AAED,SAAS,cAAc,CAAC,KAAc,EAAE,KAAa;IACnD,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,IAAI,EAAE,KAAK,EAAE;QAClD,MAAM,IAAI,KAAK,CAAC,GAAG,KAAK,mBAAmB,CAAC,CAAC;IAC/C,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,cAAc,CAAC,KAAc,EAAE,KAAa;IACnD,IAAI,KAAK,KAAK,SAAS;QAAE,OAAO,SAAS,CAAC;IAC1C,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,IAAI,EAAE,KAAK,EAAE;QAClD,MAAM,IAAI,KAAK,CAAC,GAAG,KAAK,mBAAmB,CAAC,CAAC;IAC/C,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,WAAW,CAAC,KAAc,EAAE,KAAa;IAChD,IAAI,KAAK,KAAK,SAAS;QAAE,OAAO,SAAS,CAAC;IAC1C,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,IAAK,KAAgB,GAAG,CAAC;QACnD,MAAM,IAAI,KAAK,CAAC,GAAG,KAAK,iCAAiC,CAAC,CAAC;IAC7D,OAAO,KAAe,CAAC;AACzB,CAAC;AAED,SAAS,aAAa,CAAC,KAAc;IACnC,IAAI,KAAK,KAAK,UAAU,IAAI,KAAK,KAAK,WAAW,IAAI,KAAK,KAAK,MAAM,IAAI,KAAK,KAAK,SAAS;QAC1F,OAAO,KAAK,CAAC;IACf,MAAM,IAAI,KAAK,CAAC,wDAAwD,CAAC,CAAC;AAC5E,CAAC;AAED,SAAS,iBAAiB,CAAC,QAA2B;IACpD,IAAI,QAAQ,KAAK,SAAS;QAAE,OAAO,YAAY,CAAC;IAChD,IAAI,QAAQ,KAAK,MAAM;QAAE,OAAO,gBAAgB,CAAC;IACjD,IAAI,QAAQ,KAAK,WAAW;QAAE,OAAO,YAAY,CAAC;IAClD,OAAO,YAAY,CAAC;AACtB,CAAC"}
@@ -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;AAGhE,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,CA6Df"}
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, canManageMembers } from './control-plane.js';
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,oBAAoB,CAAC;AAE7E,MAAM,CAAC,KAAK,UAAU,cAAc,CAClC,GAAoB,EACpB,GAAmB,EACnB,QAAwB,EACxB,IAAoB,EACpB,YAA+B,EAC/B,KAAgB,EAChB,OAAe,EACf,MAAiB,EACjB,OAAuB;IAEvB,MAAM,QAAQ,GAAG,MAAM,qBAAqB,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE,eAAe,EAAE,IAAI,EAAE,CAAC,CAAC;IACxF,IAAI,QAAQ,KAAK,KAAK;QAAE,OAAO;IAC/B,IAAI,CAAC,CAAC,MAAM,gBAAgB,CAAC,YAAY,EAAE,MAAM,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC,EAAE,CAAC;QAClE,OAAO,aAAa,CAAC,GAAG,EAAE,WAAW,CAAC,CAAC;IACzC,CAAC;IACD,MAAM,IAAI,GAAG,MAAM,YAAY,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;IAC9C,IAAI,CAAC,IAAI,CAAC,EAAE;QAAE,OAAO,QAAQ,CAAC,GAAG,EAAE,IAAI,CAAC,MAAM,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC;IACvE,MAAM,MAAM,GAAG,IAAI,CAAC,KAAqD,CAAC;IAC1E,IAAI,OAAO,MAAM,CAAC,YAAY,KAAK,QAAQ,IAAI,MAAM,CAAC,YAAY,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC;QACjF,OAAO,QAAQ,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,KAAK,EAAE,4BAA4B,EAAE,CAAC,CAAC;IACrE,CAAC;IACD,IAAI,MAAM,CAAC,MAAM,KAAK,SAAS,IAAI,OAAO,MAAM,CAAC,MAAM,KAAK,QAAQ,EAAE,CAAC;QACrE,OAAO,QAAQ,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,KAAK,EAAE,2BAA2B,EAAE,CAAC,CAAC;IACpE,CAAC;IACD,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC,YAAY,CAAC,CAAC;IACpE,IAAI,CAAC,MAAM,CAAC,EAAE;QAAE,OAAO,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC;IACxF,MAAM,IAAI,GAAG,OAAO,CAAC,aAAa,IAAI,eAAe,CAAC,GAAG,EAAE,OAAO,CAAC,GAAG,IAAI,EAAE,CAAC,CAAC;IAC9E,MAAM,WAAW,GAAG,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,aAAa,CAAC,CAAC;IACrE,MAAM,KAAK,CAAC,IAAI,CAAC;QACf,SAAS,EAAE,iBAAiB;QAC5B,GAAG,EAAE,MAAM,CAAC,GAAG;QACf,GAAG,EAAE,MAAM,CAAC,GAAG;QACf,GAAG,EAAE,MAAM,CAAC,GAAG;QACf,YAAY,EAAE,MAAM,CAAC,YAAY;QACjC,QAAQ,EAAE,OAAO;QACjB,MAAM,EAAE,GAAG;QACX,YAAY,EAAE,QAAQ,CAAC,OAAO;QAC9B,GAAG,CAAC,QAAQ,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,QAAQ,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACvE,OAAO,EAAE;YACP,GAAG,CAAC,MAAM,CAAC,aAAa,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,aAAa,EAAE,MAAM,CAAC,aAAa,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACtF,GAAG,CAAC,MAAM,CAAC,oBAAoB,KAAK,SAAS;gBAC3C,CAAC,CAAC,EAAE,oBAAoB,EAAE,MAAM,CAAC,oBAAoB,EAAE;gBACvD,CAAC,CAAC,EAAE,CAAC;YACP,aAAa,EAAE,MAAM,CAAC,aAAa;YACnC,UAAU,EAAE,MAAM,CAAC,UAAU;YAC7B,GAAG,CAAC,MAAM,CAAC,kBAAkB,KAAK,SAAS;gBACzC,CAAC,CAAC,EAAE,kBAAkB,EAAE,MAAM,CAAC,kBAAkB,EAAE;gBACnD,CAAC,CAAC,EAAE,CAAC;YACP,GAAG,CAAC,MAAM,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SAClE;KACF,CAAC,CAAC;IACH,OAAO,QAAQ,CAAC,GAAG,EAAE,GAAG,EAAE;QACxB,EAAE,EAAE,IAAI;QACR,MAAM,EAAE,MAAM;QACd,QAAQ,EAAE;YACR,YAAY,EAAE,MAAM,CAAC,YAAY;YACjC,GAAG,CAAC,MAAM,CAAC,aAAa,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,aAAa,EAAE,MAAM,CAAC,aAAa,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACtF,GAAG,CAAC,MAAM,CAAC,oBAAoB,KAAK,SAAS;gBAC3C,CAAC,CAAC,EAAE,oBAAoB,EAAE,MAAM,CAAC,oBAAoB,EAAE;gBACvD,CAAC,CAAC,EAAE,CAAC;YACP,aAAa,EAAE,MAAM,CAAC,aAAa;YACnC,WAAW;YACX,UAAU,EAAE,MAAM,CAAC,UAAU;YAC7B,GAAG,CAAC,MAAM,CAAC,kBAAkB,KAAK,SAAS;gBACzC,CAAC,CAAC,EAAE,kBAAkB,EAAE,MAAM,CAAC,kBAAkB,EAAE;gBACnD,CAAC,CAAC,EAAE,CAAC;YACP,UAAU,EAAE,MAAM,CAAC,UAAU;YAC7B,SAAS,EAAE,MAAM,CAAC,SAAS;SAC5B;KACF,CAAC,CAAC;AACL,CAAC"}
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;AAsBjE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAInD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAyCpD;;GAEG;AACH,wBAAgB,oBAAoB,CAClC,QAAQ,EAAE,cAAc,EACxB,OAAO,GAAE,cAAmB,GAC3B,CAAC,GAAG,EAAE,eAAe,EAAE,GAAG,EAAE,cAAc,KAAK,IAAI,CAgdrD"}
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, handleAuditEvents, handleConfigValues, handleDeploy, handleDeploymentStatus, handleDeployments, handleInvitations, handleMembers, handleOrgs, handleWhoami, } from './routes/control-plane.js';
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 { parseAuditEventsPath, parseConfigPath, parseDeploymentsPath, parseInvitationsPath, parseMembersPath, parsePolicyPath, parseTenantAccessPath, parseTenantAssetPreflightPath, parseTenantDeployPath, parseTenantInspectPath, parseTenantLogsPath, parseTenantRollbackPath, parseTenantSmokePath, parseTenantStatusPath, } from './routes/paths.js';
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
  }