@stratum-hq/control-plane 1.4.0 → 1.5.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 (71) hide show
  1. package/README.md +49 -12
  2. package/dist/app.d.ts.map +1 -1
  3. package/dist/app.js +27 -0
  4. package/dist/app.js.map +1 -1
  5. package/dist/config.d.ts +3 -0
  6. package/dist/config.d.ts.map +1 -1
  7. package/dist/config.js +22 -2
  8. package/dist/config.js.map +1 -1
  9. package/dist/db/connection.d.ts +10 -0
  10. package/dist/db/connection.d.ts.map +1 -1
  11. package/dist/db/connection.js +41 -12
  12. package/dist/db/connection.js.map +1 -1
  13. package/dist/db/migrate.d.ts.map +1 -1
  14. package/dist/db/migrate.js +29 -6
  15. package/dist/db/migrate.js.map +1 -1
  16. package/dist/index.js +1 -2
  17. package/dist/index.js.map +1 -1
  18. package/dist/middleware/auth.js +1 -1
  19. package/dist/middleware/auth.js.map +1 -1
  20. package/dist/middleware/authorize.d.ts.map +1 -1
  21. package/dist/middleware/authorize.js +4 -3
  22. package/dist/middleware/authorize.js.map +1 -1
  23. package/dist/middleware/error-handler.d.ts +6 -0
  24. package/dist/middleware/error-handler.d.ts.map +1 -1
  25. package/dist/middleware/error-handler.js +27 -4
  26. package/dist/middleware/error-handler.js.map +1 -1
  27. package/dist/middleware/path-params.d.ts +31 -0
  28. package/dist/middleware/path-params.d.ts.map +1 -0
  29. package/dist/middleware/path-params.js +78 -0
  30. package/dist/middleware/path-params.js.map +1 -0
  31. package/dist/middleware/rate-limit-redis.js +1 -1
  32. package/dist/middleware/rate-limit-redis.js.map +1 -1
  33. package/dist/middleware/telemetry.js +3 -3
  34. package/dist/middleware/telemetry.js.map +1 -1
  35. package/dist/redis.js +1 -1
  36. package/dist/redis.js.map +1 -1
  37. package/dist/routes/abac.js +4 -4
  38. package/dist/routes/abac.js.map +1 -1
  39. package/dist/routes/api-keys.js +5 -5
  40. package/dist/routes/api-keys.js.map +1 -1
  41. package/dist/routes/audit-logs.js +2 -2
  42. package/dist/routes/audit-logs.js.map +1 -1
  43. package/dist/routes/config-diff.d.ts.map +1 -1
  44. package/dist/routes/config-diff.js +3 -2
  45. package/dist/routes/config-diff.js.map +1 -1
  46. package/dist/routes/config.d.ts +11 -1
  47. package/dist/routes/config.d.ts.map +1 -1
  48. package/dist/routes/config.js +107 -7
  49. package/dist/routes/config.js.map +1 -1
  50. package/dist/routes/consent.js +3 -3
  51. package/dist/routes/consent.js.map +1 -1
  52. package/dist/routes/health.d.ts.map +1 -1
  53. package/dist/routes/health.js +14 -9
  54. package/dist/routes/health.js.map +1 -1
  55. package/dist/routes/maintenance.js +2 -2
  56. package/dist/routes/maintenance.js.map +1 -1
  57. package/dist/routes/permissions.js +4 -4
  58. package/dist/routes/permissions.js.map +1 -1
  59. package/dist/routes/regions.js +5 -5
  60. package/dist/routes/regions.js.map +1 -1
  61. package/dist/routes/roles.js +7 -7
  62. package/dist/routes/roles.js.map +1 -1
  63. package/dist/routes/tenants.d.ts.map +1 -1
  64. package/dist/routes/tenants.js +20 -17
  65. package/dist/routes/tenants.js.map +1 -1
  66. package/dist/routes/webhooks.js +12 -12
  67. package/dist/routes/webhooks.js.map +1 -1
  68. package/dist/services/isolation-service.d.ts.map +1 -1
  69. package/dist/services/isolation-service.js +9 -4
  70. package/dist/services/isolation-service.js.map +1 -1
  71. package/package.json +11 -6
@@ -10,7 +10,7 @@ function createConsentRoutes(stratum) {
10
10
  // Tenant-scoped keys can only access consent for their own tenant subtree
11
11
  (0, tenant_scope_js_1.declareTenantScope)(app, tenant_scope_js_1.fromParamTenantId);
12
12
  (0, authorize_js_1.declareRequiredScope)(app, { read: "read", write: "write" });
13
- // POST /api/v1/tenants/:tenantId/consent — Grant consent
13
+ // POST /api/v1/tenants/:tenantId/consent: Grant consent
14
14
  app.post("/", async (request, reply) => {
15
15
  const { tenantId } = request.params;
16
16
  const input = core_1.GrantConsentInputSchema.parse(request.body);
@@ -18,14 +18,14 @@ function createConsentRoutes(stratum) {
18
18
  const record = await stratum.grantConsent(tenantId, input, audit);
19
19
  reply.status(201).send(record);
20
20
  });
21
- // GET /api/v1/tenants/:tenantId/consent — List consent records
21
+ // GET /api/v1/tenants/:tenantId/consent: List consent records
22
22
  app.get("/", async (request, reply) => {
23
23
  const { tenantId } = request.params;
24
24
  const subjectId = request.query.subject_id;
25
25
  const records = await stratum.listConsent(tenantId, subjectId);
26
26
  reply.status(200).send(records);
27
27
  });
28
- // DELETE /api/v1/tenants/:tenantId/consent/:purpose — Revoke consent
28
+ // DELETE /api/v1/tenants/:tenantId/consent/:purpose: Revoke consent
29
29
  app.delete("/:purpose", async (request, reply) => {
30
30
  const { tenantId, purpose } = request.params;
31
31
  const subjectId = request.query.subject_id;
@@ -1 +1 @@
1
- {"version":3,"file":"consent.js","sourceRoot":"","sources":["../../src/routes/consent.ts"],"names":[],"mappings":";;AAOA,kDA6CC;AAnDD,2CAA2D;AAE3D,mDAAoD;AACpD,mEAAsF;AACtF,6DAAkE;AAElE,SAAgB,mBAAmB,CAAC,OAAgB;IAClD,OAAO,KAAK,UAAU,aAAa,CAAC,GAAoB;QACtD,0EAA0E;QAC1E,IAAA,oCAAkB,EAAC,GAAG,EAAE,mCAAiB,CAAC,CAAC;QAC3C,IAAA,mCAAoB,EAAC,GAAG,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,CAAC;QAC5D,yDAAyD;QACzD,GAAG,CAAC,IAAI,CAAmC,GAAG,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE;YACvE,MAAM,EAAE,QAAQ,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC;YACpC,MAAM,KAAK,GAAG,8BAAuB,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;YAC1D,MAAM,KAAK,GAAG,IAAA,iCAAiB,EAAC,OAAO,CAAC,CAAC;YACzC,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,YAAY,CAAC,QAAQ,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;YAClE,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACjC,CAAC,CAAC,CAAC;QAEH,+DAA+D;QAC/D,GAAG,CAAC,GAAG,CACL,GAAG,EACH,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE;YACvB,MAAM,EAAE,QAAQ,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC;YACpC,MAAM,SAAS,GAAG,OAAO,CAAC,KAAK,CAAC,UAAU,CAAC;YAC3C,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,WAAW,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;YAC/D,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAClC,CAAC,CACF,CAAC;QAEF,qEAAqE;QACrE,GAAG,CAAC,MAAM,CACR,WAAW,EACX,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE;YACvB,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC;YAC7C,MAAM,SAAS,GAAG,OAAO,CAAC,KAAK,CAAC,UAAU,CAAC;YAC3C,IAAI,CAAC,SAAS,EAAE,CAAC;gBACf,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,kBAAkB,EAAE,OAAO,EAAE,wCAAwC,EAAE,EAAE,CAAC,CAAC;gBACnH,OAAO;YACT,CAAC;YACD,MAAM,KAAK,GAAG,IAAA,iCAAiB,EAAC,OAAO,CAAC,CAAC;YACzC,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,aAAa,CAAC,QAAQ,EAAE,SAAS,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC;YACjF,IAAI,CAAC,OAAO,EAAE,CAAC;gBACb,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,0BAA0B,EAAE,EAAE,CAAC,CAAC;gBAC9F,OAAO;YACT,CAAC;YACD,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;QAC5C,CAAC,CACF,CAAC;IACJ,CAAC,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"consent.js","sourceRoot":"","sources":["../../src/routes/consent.ts"],"names":[],"mappings":";;AAOA,kDA6CC;AAnDD,2CAA2D;AAE3D,mDAAoD;AACpD,mEAAsF;AACtF,6DAAkE;AAElE,SAAgB,mBAAmB,CAAC,OAAgB;IAClD,OAAO,KAAK,UAAU,aAAa,CAAC,GAAoB;QACtD,0EAA0E;QAC1E,IAAA,oCAAkB,EAAC,GAAG,EAAE,mCAAiB,CAAC,CAAC;QAC3C,IAAA,mCAAoB,EAAC,GAAG,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,CAAC;QAC5D,wDAAwD;QACxD,GAAG,CAAC,IAAI,CAAmC,GAAG,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE;YACvE,MAAM,EAAE,QAAQ,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC;YACpC,MAAM,KAAK,GAAG,8BAAuB,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;YAC1D,MAAM,KAAK,GAAG,IAAA,iCAAiB,EAAC,OAAO,CAAC,CAAC;YACzC,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,YAAY,CAAC,QAAQ,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;YAClE,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACjC,CAAC,CAAC,CAAC;QAEH,8DAA8D;QAC9D,GAAG,CAAC,GAAG,CACL,GAAG,EACH,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE;YACvB,MAAM,EAAE,QAAQ,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC;YACpC,MAAM,SAAS,GAAG,OAAO,CAAC,KAAK,CAAC,UAAU,CAAC;YAC3C,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,WAAW,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;YAC/D,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAClC,CAAC,CACF,CAAC;QAEF,oEAAoE;QACpE,GAAG,CAAC,MAAM,CACR,WAAW,EACX,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE;YACvB,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC;YAC7C,MAAM,SAAS,GAAG,OAAO,CAAC,KAAK,CAAC,UAAU,CAAC;YAC3C,IAAI,CAAC,SAAS,EAAE,CAAC;gBACf,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,kBAAkB,EAAE,OAAO,EAAE,wCAAwC,EAAE,EAAE,CAAC,CAAC;gBACnH,OAAO;YACT,CAAC;YACD,MAAM,KAAK,GAAG,IAAA,iCAAiB,EAAC,OAAO,CAAC,CAAC;YACzC,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,aAAa,CAAC,QAAQ,EAAE,SAAS,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC;YACjF,IAAI,CAAC,OAAO,EAAE,CAAC;gBACb,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,0BAA0B,EAAE,EAAE,CAAC,CAAC;gBAC9F,OAAO;YACT,CAAC;YACD,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;QAC5C,CAAC,CACF,CAAC;IACJ,CAAC,CAAC;AACJ,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"health.d.ts","sourceRoot":"","sources":["../../src/routes/health.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAG1C,KAAK,kBAAkB,GAAG,MAAM,OAAO,CAAC,WAAW,GAAG,cAAc,GAAG,gBAAgB,CAAC,CAAC;AAEzF;;;GAGG;AACH,wBAAgB,YAAY,CAC1B,gBAAgB,EAAE,kBAAkB,IAEK,KAAK,eAAe,KAAG,OAAO,CAAC,IAAI,CAAC,CAsB9E"}
1
+ {"version":3,"file":"health.d.ts","sourceRoot":"","sources":["../../src/routes/health.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAY1C,KAAK,kBAAkB,GAAG,MAAM,OAAO,CAAC,WAAW,GAAG,cAAc,GAAG,gBAAgB,CAAC,CAAC;AAEzF;;;GAGG;AACH,wBAAgB,YAAY,CAC1B,gBAAgB,EAAE,kBAAkB,IAEK,KAAK,eAAe,KAAG,OAAO,CAAC,IAAI,CAAC,CAkB9E"}
@@ -2,6 +2,15 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.healthRoutes = healthRoutes;
4
4
  const connection_js_1 = require("../db/connection.js");
5
+ async function poolStatus(pool) {
6
+ try {
7
+ await pool.query("SELECT 1");
8
+ return "connected";
9
+ }
10
+ catch {
11
+ return "disconnected";
12
+ }
13
+ }
5
14
  /**
6
15
  * Health routes factory. Accepts an optional Redis health checker so the
7
16
  * health endpoint can report Redis status without a hard dependency on it.
@@ -9,20 +18,16 @@ const connection_js_1 = require("../db/connection.js");
9
18
  function healthRoutes(checkRedisHealth) {
10
19
  return async function healthRoutesPlugin(app) {
11
20
  app.get("/api/v1/health", async (_request, reply) => {
12
- let dbStatus = "disconnected";
13
- try {
14
- const pool = (0, connection_js_1.getPool)();
15
- await pool.query("SELECT 1");
16
- dbStatus = "connected";
17
- }
18
- catch {
19
- dbStatus = "disconnected";
20
- }
21
+ const dbStatus = await poolStatus((0, connection_js_1.getPool)());
22
+ // Reported only when DATABASE_ADMIN_URL is set.
23
+ const adminPool = (0, connection_js_1.getAdminPool)();
24
+ const adminStatus = adminPool ? await poolStatus(adminPool) : undefined;
21
25
  const redisStatus = await checkRedisHealth();
22
26
  reply.status(200).send({
23
27
  status: "ok",
24
28
  timestamp: new Date().toISOString(),
25
29
  db: dbStatus,
30
+ ...(adminStatus ? { admin_db: adminStatus } : {}),
26
31
  redis: redisStatus,
27
32
  });
28
33
  });
@@ -1 +1 @@
1
- {"version":3,"file":"health.js","sourceRoot":"","sources":["../../src/routes/health.ts"],"names":[],"mappings":";;AASA,oCAyBC;AAjCD,uDAA8C;AAI9C;;;GAGG;AACH,SAAgB,YAAY,CAC1B,gBAAoC;IAEpC,OAAO,KAAK,UAAU,kBAAkB,CAAC,GAAoB;QAC3D,GAAG,CAAC,GAAG,CAAC,gBAAgB,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,EAAE;YAClD,IAAI,QAAQ,GAAiC,cAAc,CAAC;YAE5D,IAAI,CAAC;gBACH,MAAM,IAAI,GAAG,IAAA,uBAAO,GAAE,CAAC;gBACvB,MAAM,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;gBAC7B,QAAQ,GAAG,WAAW,CAAC;YACzB,CAAC;YAAC,MAAM,CAAC;gBACP,QAAQ,GAAG,cAAc,CAAC;YAC5B,CAAC;YAED,MAAM,WAAW,GAAG,MAAM,gBAAgB,EAAE,CAAC;YAE7C,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC;gBACrB,MAAM,EAAE,IAAI;gBACZ,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;gBACnC,EAAE,EAAE,QAAQ;gBACZ,KAAK,EAAE,WAAW;aACnB,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;IACL,CAAC,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"health.js","sourceRoot":"","sources":["../../src/routes/health.ts"],"names":[],"mappings":";;AAkBA,oCAqBC;AAtCD,uDAA4D;AAE5D,KAAK,UAAU,UAAU,CAAC,IAAkD;IAC1E,IAAI,CAAC;QACH,MAAM,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;QAC7B,OAAO,WAAW,CAAC;IACrB,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,cAAc,CAAC;IACxB,CAAC;AACH,CAAC;AAID;;;GAGG;AACH,SAAgB,YAAY,CAC1B,gBAAoC;IAEpC,OAAO,KAAK,UAAU,kBAAkB,CAAC,GAAoB;QAC3D,GAAG,CAAC,GAAG,CAAC,gBAAgB,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,EAAE;YAClD,MAAM,QAAQ,GAAG,MAAM,UAAU,CAAC,IAAA,uBAAO,GAAE,CAAC,CAAC;YAC7C,gDAAgD;YAChD,MAAM,SAAS,GAAG,IAAA,4BAAY,GAAE,CAAC;YACjC,MAAM,WAAW,GAAG,SAAS,CAAC,CAAC,CAAC,MAAM,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;YAExE,MAAM,WAAW,GAAG,MAAM,gBAAgB,EAAE,CAAC;YAE7C,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC;gBACrB,MAAM,EAAE,IAAI;gBACZ,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;gBACnC,EAAE,EAAE,QAAQ;gBACZ,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBACjD,KAAK,EAAE,WAAW;aACnB,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;IACL,CAAC,CAAC;AACJ,CAAC"}
@@ -11,7 +11,7 @@ function createMaintenanceRoutes(stratum) {
11
11
  // Maintenance acts across all tenants: global operator keys only.
12
12
  (0, tenant_scope_js_1.declareTenantScope)(app, "operator");
13
13
  (0, authorize_js_1.declareRequiredScope)(app, "operator");
14
- // POST /api/v1/maintenance/purge-expired — Purge expired data
14
+ // POST /api/v1/maintenance/purge-expired: Purge expired data
15
15
  app.post("/purge-expired", async (request, reply) => {
16
16
  const rawDays = request.query.retention_days
17
17
  ? parseInt(request.query.retention_days, 10)
@@ -22,7 +22,7 @@ function createMaintenanceRoutes(stratum) {
22
22
  const result = await stratum.purgeExpiredData(retentionDays, (0, audit_logs_js_1.buildAuditContext)(request));
23
23
  reply.status(200).send(result);
24
24
  });
25
- // POST /api/v1/maintenance/rotate-encryption-key — Re-encrypt all sensitive data
25
+ // POST /api/v1/maintenance/rotate-encryption-key: Re-encrypt all sensitive data
26
26
  app.post("/rotate-encryption-key", async (request, reply) => {
27
27
  const body = request.body;
28
28
  if (!body?.old_key || !body?.new_key) {
@@ -1 +1 @@
1
- {"version":3,"file":"maintenance.js","sourceRoot":"","sources":["../../src/routes/maintenance.ts"],"names":[],"mappings":";;AASA,0DAqDC;AA5DD,mDAAoD;AACpD,mEAAmE;AACnE,6DAAkE;AAElE,gGAAgG;AAChG,MAAM,QAAQ,GAAG,uBAAuB,CAAC;AAEzC,SAAgB,uBAAuB,CAAC,OAAgB;IACtD,OAAO,KAAK,UAAU,iBAAiB,CAAC,GAAoB;QAC1D,kEAAkE;QAClE,IAAA,oCAAkB,EAAC,GAAG,EAAE,UAAU,CAAC,CAAC;QACpC,IAAA,mCAAoB,EAAC,GAAG,EAAE,UAAU,CAAC,CAAC;QAEtC,8DAA8D;QAC9D,GAAG,CAAC,IAAI,CAA+C,gBAAgB,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE;YAChG,MAAM,OAAO,GAAG,OAAO,CAAC,KAAK,CAAC,cAAc;gBAC1C,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC,cAAc,EAAE,EAAE,CAAC;gBAC5C,CAAC,CAAC,SAAS,CAAC;YACd,MAAM,aAAa,GAAG,OAAO,KAAK,SAAS,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,OAAO,GAAG,CAAC,CAAC;gBACnF,CAAC,CAAC,SAAS;gBACX,CAAC,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;YAChE,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,gBAAgB,CAAC,aAAa,EAAE,IAAA,iCAAiB,EAAC,OAAO,CAAC,CAAC,CAAC;YACzF,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACjC,CAAC,CAAC,CAAC;QAEH,iFAAiF;QACjF,GAAG,CAAC,IAAI,CAAC,wBAAwB,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE;YAC1D,MAAM,IAAI,GAAG,OAAO,CAAC,IAEb,CAAC;YACT,IAAI,CAAC,IAAI,EAAE,OAAO,IAAI,CAAC,IAAI,EAAE,OAAO,EAAE,CAAC;gBACrC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,kBAAkB,EAAE,OAAO,EAAE,2CAA2C,EAAE,EAAE,CAAC,CAAC;gBACtH,OAAO;YACT,CAAC;YACD,KAAK,MAAM,KAAK,IAAI,CAAC,UAAU,EAAE,UAAU,CAAU,EAAE,CAAC;gBACtD,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC;gBACzB,IAAI,IAAI,KAAK,SAAS,IAAI,CAAC,OAAO,IAAI,KAAK,QAAQ,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC;oBAC7E,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC;wBACrB,KAAK,EAAE,EAAE,IAAI,EAAE,kBAAkB,EAAE,OAAO,EAAE,IAAI,KAAK,+CAA+C,EAAE;qBACvG,CAAC,CAAC;oBACH,OAAO;gBACT,CAAC;YACH,CAAC;YACD,MAAM,OAAO,GAAG,IAAI,CAAC,QAA8B,CAAC;YACpD,MAAM,OAAO,GAAG,IAAI,CAAC,QAA8B,CAAC;YACpD,0FAA0F;YAC1F,MAAM,QAAQ,GAAG,OAAO,EAAE,WAAW,EAAE,KAAK,OAAO,EAAE,WAAW,EAAE,CAAC;YACnE,IAAI,IAAI,CAAC,OAAO,KAAK,IAAI,CAAC,OAAO,IAAI,QAAQ,EAAE,CAAC;gBAC9C,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC;oBACrB,KAAK,EAAE,EAAE,IAAI,EAAE,kBAAkB,EAAE,OAAO,EAAE,gFAAgF,EAAE;iBAC/H,CAAC,CAAC;gBACH,OAAO;YACT,CAAC;YACD,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,mBAAmB,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,IAAA,iCAAiB,EAAC,OAAO,CAAC,EAAE;gBACvG,OAAO;gBACP,OAAO;aACR,CAAC,CAAC;YACH,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACjC,CAAC,CAAC,CAAC;IACL,CAAC,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"maintenance.js","sourceRoot":"","sources":["../../src/routes/maintenance.ts"],"names":[],"mappings":"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"}
@@ -10,24 +10,24 @@ function createPermissionRoutes(stratum) {
10
10
  // Tenant-scoped keys can only access permissions for their own tenant subtree
11
11
  (0, tenant_scope_js_1.declareTenantScope)(app, tenant_scope_js_1.fromParamId);
12
12
  (0, authorize_js_1.declareRequiredScope)(app, { read: "read", write: "write" });
13
- // GET /api/v1/tenants/:id/permissions — Get resolved permissions
13
+ // GET /api/v1/tenants/:id/permissions: Get resolved permissions
14
14
  app.get("/", async (request, reply) => {
15
15
  const resolved = await stratum.resolvePermissions(request.params.id);
16
16
  reply.status(200).send(resolved);
17
17
  });
18
- // POST /api/v1/tenants/:id/permissions — Create permission policy
18
+ // POST /api/v1/tenants/:id/permissions: Create permission policy
19
19
  app.post("/", async (request, reply) => {
20
20
  const input = core_1.CreatePermissionInputSchema.parse(request.body);
21
21
  const policy = await stratum.createPermission(request.params.id, input, (0, audit_logs_js_1.buildAuditContext)(request));
22
22
  reply.status(201).send(policy);
23
23
  });
24
- // PATCH /api/v1/tenants/:id/permissions/:policyId — Update permission policy
24
+ // PATCH /api/v1/tenants/:id/permissions/:policyId: Update permission policy
25
25
  app.patch("/:policyId", async (request, reply) => {
26
26
  const input = core_1.UpdatePermissionInputSchema.parse(request.body);
27
27
  const policy = await stratum.updatePermission(request.params.id, request.params.policyId, input, (0, audit_logs_js_1.buildAuditContext)(request));
28
28
  reply.status(200).send(policy);
29
29
  });
30
- // DELETE /api/v1/tenants/:id/permissions/:policyId — Delete/revoke permission policy
30
+ // DELETE /api/v1/tenants/:id/permissions/:policyId: Delete/revoke permission policy
31
31
  app.delete("/:policyId", async (request, reply) => {
32
32
  await stratum.deletePermission(request.params.id, request.params.policyId, (0, audit_logs_js_1.buildAuditContext)(request));
33
33
  reply.status(204).send();
@@ -1 +1 @@
1
- {"version":3,"file":"permissions.js","sourceRoot":"","sources":["../../src/routes/permissions.ts"],"names":[],"mappings":";;AAOA,wDAoCC;AA1CD,2CAA4F;AAE5F,mDAAoD;AACpD,mEAAgF;AAChF,6DAAkE;AAElE,SAAgB,sBAAsB,CAAC,OAAgB;IACrD,OAAO,KAAK,UAAU,gBAAgB,CAAC,GAAoB;QACzD,8EAA8E;QAC9E,IAAA,oCAAkB,EAAC,GAAG,EAAE,6BAAW,CAAC,CAAC;QACrC,IAAA,mCAAoB,EAAC,GAAG,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,CAAC;QAC5D,iEAAiE;QACjE,GAAG,CAAC,GAAG,CAA6B,GAAG,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE;YAChE,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,kBAAkB,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;YACrE,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACnC,CAAC,CAAC,CAAC;QAEH,kEAAkE;QAClE,GAAG,CAAC,IAAI,CAA6B,GAAG,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE;YACjE,MAAM,KAAK,GAAG,kCAA2B,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;YAC9D,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,gBAAgB,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,EAAE,KAAK,EAAE,IAAA,iCAAiB,EAAC,OAAO,CAAC,CAAC,CAAC;YACpG,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACjC,CAAC,CAAC,CAAC;QAEH,6EAA6E;QAC7E,GAAG,CAAC,KAAK,CAA+C,YAAY,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE;YAC7F,MAAM,KAAK,GAAG,kCAA2B,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;YAC9D,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,gBAAgB,CAC3C,OAAO,CAAC,MAAM,CAAC,EAAE,EACjB,OAAO,CAAC,MAAM,CAAC,QAAQ,EACvB,KAAK,EACL,IAAA,iCAAiB,EAAC,OAAO,CAAC,CAC3B,CAAC;YACF,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACjC,CAAC,CAAC,CAAC;QAEH,qFAAqF;QACrF,GAAG,CAAC,MAAM,CAA+C,YAAY,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE;YAC9F,MAAM,OAAO,CAAC,gBAAgB,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,EAAE,OAAO,CAAC,MAAM,CAAC,QAAQ,EAAE,IAAA,iCAAiB,EAAC,OAAO,CAAC,CAAC,CAAC;YACvG,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;QAC3B,CAAC,CAAC,CAAC;IACL,CAAC,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"permissions.js","sourceRoot":"","sources":["../../src/routes/permissions.ts"],"names":[],"mappings":";;AAOA,wDAoCC;AA1CD,2CAA4F;AAE5F,mDAAoD;AACpD,mEAAgF;AAChF,6DAAkE;AAElE,SAAgB,sBAAsB,CAAC,OAAgB;IACrD,OAAO,KAAK,UAAU,gBAAgB,CAAC,GAAoB;QACzD,8EAA8E;QAC9E,IAAA,oCAAkB,EAAC,GAAG,EAAE,6BAAW,CAAC,CAAC;QACrC,IAAA,mCAAoB,EAAC,GAAG,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,CAAC;QAC5D,gEAAgE;QAChE,GAAG,CAAC,GAAG,CAA6B,GAAG,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE;YAChE,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,kBAAkB,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;YACrE,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACnC,CAAC,CAAC,CAAC;QAEH,iEAAiE;QACjE,GAAG,CAAC,IAAI,CAA6B,GAAG,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE;YACjE,MAAM,KAAK,GAAG,kCAA2B,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;YAC9D,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,gBAAgB,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,EAAE,KAAK,EAAE,IAAA,iCAAiB,EAAC,OAAO,CAAC,CAAC,CAAC;YACpG,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACjC,CAAC,CAAC,CAAC;QAEH,4EAA4E;QAC5E,GAAG,CAAC,KAAK,CAA+C,YAAY,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE;YAC7F,MAAM,KAAK,GAAG,kCAA2B,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;YAC9D,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,gBAAgB,CAC3C,OAAO,CAAC,MAAM,CAAC,EAAE,EACjB,OAAO,CAAC,MAAM,CAAC,QAAQ,EACvB,KAAK,EACL,IAAA,iCAAiB,EAAC,OAAO,CAAC,CAC3B,CAAC;YACF,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACjC,CAAC,CAAC,CAAC;QAEH,oFAAoF;QACpF,GAAG,CAAC,MAAM,CAA+C,YAAY,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE;YAC9F,MAAM,OAAO,CAAC,gBAAgB,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,EAAE,OAAO,CAAC,MAAM,CAAC,QAAQ,EAAE,IAAA,iCAAiB,EAAC,OAAO,CAAC,CAAC,CAAC;YACvG,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;QAC3B,CAAC,CAAC,CAAC;IACL,CAAC,CAAC;AACJ,CAAC"}
@@ -11,29 +11,29 @@ function createRegionRoutes(stratum) {
11
11
  // global operator keys. Reads declare "global" below.
12
12
  (0, tenant_scope_js_1.declareTenantScope)(app, "operator");
13
13
  (0, authorize_js_1.declareRequiredScope)(app, { read: "admin", write: "operator" });
14
- // POST /api/v1/regions — Create region
14
+ // POST /api/v1/regions: Create region
15
15
  app.post("/", async (request, reply) => {
16
16
  const input = core_1.CreateRegionInputSchema.parse(request.body);
17
17
  const region = await stratum.createRegion(input, (0, audit_logs_js_1.buildAuditContext)(request));
18
18
  reply.status(201).send(region);
19
19
  });
20
- // GET /api/v1/regions — List regions
20
+ // GET /api/v1/regions: List regions
21
21
  app.get("/", { config: { tenantScope: "global" } }, async (_request, reply) => {
22
22
  const regions = await stratum.listRegions();
23
23
  reply.status(200).send(regions);
24
24
  });
25
- // GET /api/v1/regions/:id — Get region by ID
25
+ // GET /api/v1/regions/:id: Get region by ID
26
26
  app.get("/:id", { config: { tenantScope: "global" } }, async (request, reply) => {
27
27
  const region = await stratum.getRegion(request.params.id);
28
28
  reply.status(200).send(region);
29
29
  });
30
- // PATCH /api/v1/regions/:id — Update region
30
+ // PATCH /api/v1/regions/:id: Update region
31
31
  app.patch("/:id", async (request, reply) => {
32
32
  const input = core_1.UpdateRegionInputSchema.parse(request.body);
33
33
  const region = await stratum.updateRegion(request.params.id, input, (0, audit_logs_js_1.buildAuditContext)(request));
34
34
  reply.status(200).send(region);
35
35
  });
36
- // DELETE /api/v1/regions/:id — Delete region
36
+ // DELETE /api/v1/regions/:id: Delete region
37
37
  app.delete("/:id", async (request, reply) => {
38
38
  await stratum.deleteRegion(request.params.id, (0, audit_logs_js_1.buildAuditContext)(request));
39
39
  reply.status(204).send();
@@ -1 +1 @@
1
- {"version":3,"file":"regions.js","sourceRoot":"","sources":["../../src/routes/regions.ts"],"names":[],"mappings":";;AAOA,gDAuCC;AA7CD,2CAAoF;AAEpF,mDAAoD;AACpD,mEAAmE;AACnE,6DAAkE;AAElE,SAAgB,kBAAkB,CAAC,OAAgB;IACjD,OAAO,KAAK,UAAU,YAAY,CAAC,GAAoB;QACrD,0EAA0E;QAC1E,sDAAsD;QACtD,IAAA,oCAAkB,EAAC,GAAG,EAAE,UAAU,CAAC,CAAC;QACpC,IAAA,mCAAoB,EAAC,GAAG,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE,CAAC,CAAC;QAEhE,uCAAuC;QACvC,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE;YACrC,MAAM,KAAK,GAAG,8BAAuB,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;YAC1D,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,YAAY,CAAC,KAAK,EAAE,IAAA,iCAAiB,EAAC,OAAO,CAAC,CAAC,CAAC;YAC7E,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACjC,CAAC,CAAC,CAAC;QAEH,qCAAqC;QACrC,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,MAAM,EAAE,EAAE,WAAW,EAAE,QAAQ,EAAE,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,EAAE;YAC5E,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,WAAW,EAAE,CAAC;YAC5C,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAClC,CAAC,CAAC,CAAC;QAEH,6CAA6C;QAC7C,GAAG,CAAC,GAAG,CAA6B,MAAM,EAAE,EAAE,MAAM,EAAE,EAAE,WAAW,EAAE,QAAQ,EAAE,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE;YAC1G,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,SAAS,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;YAC1D,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACjC,CAAC,CAAC,CAAC;QAEH,4CAA4C;QAC5C,GAAG,CAAC,KAAK,CAA6B,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE;YACrE,MAAM,KAAK,GAAG,8BAAuB,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;YAC1D,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,YAAY,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,EAAE,KAAK,EAAE,IAAA,iCAAiB,EAAC,OAAO,CAAC,CAAC,CAAC;YAChG,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACjC,CAAC,CAAC,CAAC;QAEH,6CAA6C;QAC7C,GAAG,CAAC,MAAM,CAA6B,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE;YACtE,MAAM,OAAO,CAAC,YAAY,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,EAAE,IAAA,iCAAiB,EAAC,OAAO,CAAC,CAAC,CAAC;YAC1E,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;QAC3B,CAAC,CAAC,CAAC;IACL,CAAC,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"regions.js","sourceRoot":"","sources":["../../src/routes/regions.ts"],"names":[],"mappings":";;AAOA,gDAuCC;AA7CD,2CAAoF;AAEpF,mDAAoD;AACpD,mEAAmE;AACnE,6DAAkE;AAElE,SAAgB,kBAAkB,CAAC,OAAgB;IACjD,OAAO,KAAK,UAAU,YAAY,CAAC,GAAoB;QACrD,0EAA0E;QAC1E,sDAAsD;QACtD,IAAA,oCAAkB,EAAC,GAAG,EAAE,UAAU,CAAC,CAAC;QACpC,IAAA,mCAAoB,EAAC,GAAG,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE,CAAC,CAAC;QAEhE,sCAAsC;QACtC,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE;YACrC,MAAM,KAAK,GAAG,8BAAuB,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;YAC1D,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,YAAY,CAAC,KAAK,EAAE,IAAA,iCAAiB,EAAC,OAAO,CAAC,CAAC,CAAC;YAC7E,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACjC,CAAC,CAAC,CAAC;QAEH,oCAAoC;QACpC,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,MAAM,EAAE,EAAE,WAAW,EAAE,QAAQ,EAAE,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,EAAE;YAC5E,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,WAAW,EAAE,CAAC;YAC5C,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAClC,CAAC,CAAC,CAAC;QAEH,4CAA4C;QAC5C,GAAG,CAAC,GAAG,CAA6B,MAAM,EAAE,EAAE,MAAM,EAAE,EAAE,WAAW,EAAE,QAAQ,EAAE,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE;YAC1G,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,SAAS,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;YAC1D,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACjC,CAAC,CAAC,CAAC;QAEH,2CAA2C;QAC3C,GAAG,CAAC,KAAK,CAA6B,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE;YACrE,MAAM,KAAK,GAAG,8BAAuB,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;YAC1D,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,YAAY,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,EAAE,KAAK,EAAE,IAAA,iCAAiB,EAAC,OAAO,CAAC,CAAC,CAAC;YAChG,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACjC,CAAC,CAAC,CAAC;QAEH,4CAA4C;QAC5C,GAAG,CAAC,MAAM,CAA6B,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE;YACtE,MAAM,OAAO,CAAC,YAAY,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,EAAE,IAAA,iCAAiB,EAAC,OAAO,CAAC,CAAC,CAAC;YAC1E,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;QAC3B,CAAC,CAAC,CAAC;IACL,CAAC,CAAC;AACJ,CAAC"}
@@ -28,7 +28,7 @@ function createRoleRoutes(stratum) {
28
28
  // tenant IS in the request override this with an extractor below.
29
29
  (0, tenant_scope_js_1.declareTenantScope)(app, "global");
30
30
  (0, authorize_js_1.declareRequiredScope)(app, { read: "read", write: "admin" });
31
- // POST /api/v1/roles — Create a role. A scoped key may create only within
31
+ // POST /api/v1/roles: Create a role. A scoped key may create only within
32
32
  // its own subtree; the body tenant_id is authorized by the enforcer.
33
33
  app.post("/", { config: { tenantScope: tenant_scope_js_1.fromBodyTenantId } }, async (request, reply) => {
34
34
  const parsed = createRoleSchema.safeParse(request.body);
@@ -45,7 +45,7 @@ function createRoleRoutes(stratum) {
45
45
  const role = await stratum.createRole(input, (0, audit_logs_js_1.buildAuditContext)(request));
46
46
  reply.status(201).send(role);
47
47
  });
48
- // GET /api/v1/roles — List roles (optional ?tenant_id=). A provided tenant_id
48
+ // GET /api/v1/roles: List roles (optional ?tenant_id=). A provided tenant_id
49
49
  // is authorized by the enforcer; a scoped key that names none is confined to
50
50
  // its own tenant so it cannot enumerate every tenant's roles.
51
51
  app.get("/", { config: { tenantScope: tenant_scope_js_1.fromQueryTenantId } }, async (request, reply) => {
@@ -54,7 +54,7 @@ function createRoleRoutes(stratum) {
54
54
  const roles = await stratum.listRoles(tenantId);
55
55
  reply.status(200).send(roles);
56
56
  });
57
- // GET /api/v1/roles/:id — Get role
57
+ // GET /api/v1/roles/:id: Get role
58
58
  app.get("/:id", async (request, reply) => {
59
59
  const role = await stratum.getRole(request.params.id);
60
60
  if (!role) {
@@ -64,7 +64,7 @@ function createRoleRoutes(stratum) {
64
64
  await (0, tenant_scope_js_1.assertTenantInScope)(stratum, request, role.tenant_id);
65
65
  reply.status(200).send(role);
66
66
  });
67
- // PATCH /api/v1/roles/:id — Update role
67
+ // PATCH /api/v1/roles/:id: Update role
68
68
  app.patch("/:id", async (request, reply) => {
69
69
  const parsed = updateRoleSchema.safeParse(request.body);
70
70
  if (!parsed.success) {
@@ -87,7 +87,7 @@ function createRoleRoutes(stratum) {
87
87
  }
88
88
  reply.status(200).send(role);
89
89
  });
90
- // DELETE /api/v1/roles/:id — Delete role
90
+ // DELETE /api/v1/roles/:id: Delete role
91
91
  app.delete("/:id", async (request, reply) => {
92
92
  const existing = await stratum.getRole(request.params.id);
93
93
  if (!existing) {
@@ -105,7 +105,7 @@ function createRoleRoutes(stratum) {
105
105
  }
106
106
  reply.status(204).send();
107
107
  });
108
- // POST /api/v1/roles/assign/:keyId — Assign role to API key. Both the target
108
+ // POST /api/v1/roles/assign/:keyId: Assign role to API key. Both the target
109
109
  // key and the role must belong to the caller's subtree.
110
110
  app.post("/assign/:keyId", async (request, reply) => {
111
111
  const parsed = assignRoleSchema.safeParse(request.body);
@@ -132,7 +132,7 @@ function createRoleRoutes(stratum) {
132
132
  }
133
133
  reply.status(200).send({ success: true });
134
134
  });
135
- // DELETE /api/v1/roles/assign/:keyId — Remove role from API key
135
+ // DELETE /api/v1/roles/assign/:keyId: Remove role from API key
136
136
  app.delete("/assign/:keyId", async (request, reply) => {
137
137
  const key = await stratum.getApiKey(request.params.keyId);
138
138
  if (!key) {
@@ -1 +1 @@
1
- {"version":3,"file":"roles.js","sourceRoot":"","sources":["../../src/routes/roles.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"roles.js","sourceRoot":"","sources":["../../src/routes/roles.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"tenants.d.ts","sourceRoot":"","sources":["../../src/routes/tenants.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAe1C,OAAO,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAY1C,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,OAAO,IAYd,KAAK,eAAe,KAAG,OAAO,CAAC,IAAI,CAAC,CAoOxE"}
1
+ {"version":3,"file":"tenants.d.ts","sourceRoot":"","sources":["../../src/routes/tenants.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAe1C,OAAO,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAa1C,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,OAAO,IAYd,KAAK,eAAe,KAAG,OAAO,CAAC,IAAI,CAAC,CAyOxE"}
@@ -8,6 +8,7 @@ const audit_logs_js_1 = require("./audit-logs.js");
8
8
  const error_handler_js_1 = require("../middleware/error-handler.js");
9
9
  const tenant_scope_js_1 = require("../middleware/tenant-scope.js");
10
10
  const authorize_js_1 = require("../middleware/authorize.js");
11
+ const config_js_1 = require("./config.js");
11
12
  function createTenantRoutes(stratum) {
12
13
  // A move must authorize BOTH ends. The plugin-level guard below only covers
13
14
  // `:id`, the tenant being moved, which a scoped key already owns and which
@@ -23,7 +24,7 @@ function createTenantRoutes(stratum) {
23
24
  // Tenant-scoped keys can only access their own tenant subtree
24
25
  (0, tenant_scope_js_1.declareTenantScope)(app, tenant_scope_js_1.fromParamId);
25
26
  (0, authorize_js_1.declareRequiredScope)(app, { read: "read", write: "write" });
26
- // GET /api/v1/tenants — List tenants (with cursor pagination)
27
+ // GET /api/v1/tenants: List tenants (with cursor pagination)
27
28
  app.get("/", async (request, reply) => {
28
29
  const scopedTenantId = request.apiKey?.tenant_id;
29
30
  if (scopedTenantId) {
@@ -40,7 +41,7 @@ function createTenantRoutes(stratum) {
40
41
  const result = await stratum.listTenants(query, { status });
41
42
  reply.status(200).send(result);
42
43
  });
43
- // POST /api/v1/tenants — Create tenant
44
+ // POST /api/v1/tenants: Create tenant
44
45
  app.post("/", { preHandler: createScopeGuard }, async (request, reply) => {
45
46
  const parsed = core_1.CreateTenantInputSchema.safeParse(request.body);
46
47
  if (!parsed.success) {
@@ -114,7 +115,7 @@ function createTenantRoutes(stratum) {
114
115
  }
115
116
  reply.status(201).send(tenant);
116
117
  });
117
- // POST /api/v1/tenants/batch — Create multiple tenants atomically
118
+ // POST /api/v1/tenants/batch: Create multiple tenants atomically
118
119
  app.post("/batch", { preHandler: batchCreateScopeGuard }, async (request, reply) => {
119
120
  const body = request.body;
120
121
  if (!Array.isArray(body?.tenants) || body.tenants.length === 0) {
@@ -141,38 +142,38 @@ function createTenantRoutes(stratum) {
141
142
  const result = await stratum.batchCreateTenants(inputs, (0, audit_logs_js_1.buildAuditContext)(request));
142
143
  reply.status(201).send(result);
143
144
  });
144
- // GET /api/v1/tenants/:id — Get tenant
145
+ // GET /api/v1/tenants/:id: Get tenant
145
146
  app.get("/:id", async (request, reply) => {
146
147
  const tenant = await stratum.getTenant(request.params.id);
147
148
  reply.status(200).send(tenant);
148
149
  });
149
- // PATCH /api/v1/tenants/:id — Update tenant
150
+ // PATCH /api/v1/tenants/:id: Update tenant
150
151
  app.patch("/:id", async (request, reply) => {
151
152
  const patch = core_1.UpdateTenantInputSchema.parse(request.body);
152
153
  const tenant = await stratum.updateTenant(request.params.id, patch, (0, audit_logs_js_1.buildAuditContext)(request));
153
154
  reply.status(200).send(tenant);
154
155
  });
155
- // DELETE /api/v1/tenants/:id — Soft-delete (archive) tenant
156
+ // DELETE /api/v1/tenants/:id: Soft-delete (archive) tenant
156
157
  // A scoped key reaches its own pending child here, so it gets the state
157
158
  // error that archive gives a pending tenant, not a scope error.
158
159
  app.delete("/:id", { config: { tenantScopeIncludesPending: true } }, async (request, reply) => {
159
160
  await stratum.deleteTenant(request.params.id, (0, audit_logs_js_1.buildAuditContext)(request));
160
161
  reply.status(204).send();
161
162
  });
162
- // POST /api/v1/tenants/:id/move — Move tenant
163
+ // POST /api/v1/tenants/:id/move: Move tenant
163
164
  app.post("/:id/move", { preHandler: destinationScopeGuard }, async (request, reply) => {
164
165
  const input = core_1.MoveTenantInputSchema.parse(request.body);
165
166
  const tenant = await stratum.moveTenant(request.params.id, input.new_parent_id, (0, audit_logs_js_1.buildAuditContext)(request));
166
167
  reply.status(200).send(tenant);
167
168
  });
168
- // POST /api/v1/tenants/:id/reorder — Reorder tenant among siblings
169
+ // POST /api/v1/tenants/:id/reorder: Reorder tenant among siblings
169
170
  app.post("/:id/reorder", async (request, reply) => {
170
171
  const body = request.body;
171
172
  const position = typeof body?.position === "number" ? body.position : 0;
172
173
  const tenant = await stratum.reorderTenant(request.params.id, position, (0, audit_logs_js_1.buildAuditContext)(request));
173
174
  reply.status(200).send(tenant);
174
175
  });
175
- // GET /api/v1/tenants/:id/ancestors — Get ancestors
176
+ // GET /api/v1/tenants/:id/ancestors: Get ancestors
176
177
  app.get("/:id/ancestors", async (request, reply) => {
177
178
  const ancestors = await stratum.getAncestors(request.params.id);
178
179
  // A tenant-scoped caller gets full rows only for ancestors inside its own
@@ -186,37 +187,39 @@ function createTenantRoutes(stratum) {
186
187
  }
187
188
  reply.status(200).send(ancestors);
188
189
  });
189
- // GET /api/v1/tenants/:id/descendants — Get descendants
190
+ // GET /api/v1/tenants/:id/descendants: Get descendants
190
191
  app.get("/:id/descendants", async (request, reply) => {
191
192
  const descendants = await stratum.getDescendants(request.params.id);
192
193
  reply.status(200).send(descendants);
193
194
  });
194
- // GET /api/v1/tenants/:id/children — Get direct children
195
+ // GET /api/v1/tenants/:id/children: Get direct children
195
196
  app.get("/:id/children", async (request, reply) => {
196
197
  const children = await stratum.getChildren(request.params.id);
197
198
  reply.status(200).send(children);
198
199
  });
199
- // POST /api/v1/tenants/:id/migrate-region — Migrate tenant to a new region
200
+ // POST /api/v1/tenants/:id/migrate-region: Migrate tenant to a new region
200
201
  app.post("/:id/migrate-region", { config: { requiredScope: "admin" } }, async (request, reply) => {
201
202
  const { region_id } = core_1.MigrateRegionInputSchema.parse(request.body);
202
203
  await stratum.migrateRegion(request.params.id, region_id, (0, audit_logs_js_1.buildAuditContext)(request));
203
204
  reply.status(200).send({ success: true });
204
205
  });
205
- // POST /api/v1/tenants/:id/purge — GDPR Article 17: hard-delete all tenant data
206
+ // POST /api/v1/tenants/:id/purge: GDPR Article 17: hard-delete all tenant data
206
207
  // A scoped key may purge its own pending child, for example after a failed
207
208
  // storage provisioning.
208
209
  app.post("/:id/purge", { config: { tenantScopeIncludesPending: true, requiredScope: "admin" } }, async (request, reply) => {
209
210
  await stratum.purgeTenant(request.params.id, (0, audit_logs_js_1.buildAuditContext)(request));
210
211
  reply.status(204).send();
211
212
  });
212
- // GET /api/v1/tenants/:id/export — GDPR Article 20: export all tenant data
213
+ // GET /api/v1/tenants/:id/export: GDPR Article 20: export all tenant data
213
214
  app.get("/:id/export", { config: { requiredScope: "admin" } }, async (request, reply) => {
214
215
  const data = await stratum.exportTenantData(request.params.id);
215
216
  reply.status(200).send(data);
216
217
  });
217
- // GET /api/v1/tenants/:id/context — Resolve the flat ResolvedTenantContext (admin scope)
218
- app.get("/:id/context", { config: { requiredScope: "admin" } }, async (request, reply) => {
219
- const { tenant, config, permissions } = await stratum.getTenantContext(request.params.id);
218
+ // GET /api/v1/tenants/:id/context: Resolve the flat ResolvedTenantContext.
219
+ // Read scope: the SDK middleware calls this on every request, so an app
220
+ // server needs only a read key for the tenants its key scope reaches.
221
+ app.get("/:id/context", { config: { requiredScope: "read" } }, async (request, reply) => {
222
+ const { tenant, config, permissions } = await stratum.getTenantContext(request.params.id, (0, config_js_1.configReadOptions)(request));
220
223
  const context = {
221
224
  tenant_id: tenant.id,
222
225
  ancestry_path: tenant.ancestry_path,
@@ -1 +1 @@
1
- {"version":3,"file":"tenants.js","sourceRoot":"","sources":["../../src/routes/tenants.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"tenants.js","sourceRoot":"","sources":["../../src/routes/tenants.ts"],"names":[],"mappings":"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"}
@@ -36,7 +36,7 @@ async function assertTenantAccess(request, webhookTenantId, stratum) {
36
36
  return;
37
37
  }
38
38
  catch {
39
- // Tenant not found — fail closed for scoped keys
39
+ // Tenant not found: fail closed for scoped keys
40
40
  throw new core_1.ForbiddenError("API key does not have access to this webhook's tenant");
41
41
  }
42
42
  throw new core_1.ForbiddenError("API key does not have access to this webhook's tenant");
@@ -47,7 +47,7 @@ function createWebhookRoutes(stratum) {
47
47
  // This guard covers the POST / (create) route where tenant_id is in the body.
48
48
  (0, tenant_scope_js_1.declareTenantScope)(app, tenant_scope_js_1.fromBodyTenantId);
49
49
  (0, authorize_js_1.declareRequiredScope)(app, { read: "read", write: "write" });
50
- // POST /api/v1/webhooks — Create webhook
50
+ // POST /api/v1/webhooks: Create webhook
51
51
  app.post("/", async (request, reply) => {
52
52
  const input = core_1.CreateWebhookInputSchema.parse(request.body);
53
53
  // Scoped keys cannot create global webhooks
@@ -57,7 +57,7 @@ function createWebhookRoutes(stratum) {
57
57
  const webhook = await stratum.createWebhook(input, (0, audit_logs_js_1.buildAuditContext)(request));
58
58
  reply.status(201).send(webhook);
59
59
  });
60
- // GET /api/v1/webhooks — List webhooks (optional ?tenant_id=)
60
+ // GET /api/v1/webhooks: List webhooks (optional ?tenant_id=)
61
61
  app.get("/", async (request, reply) => {
62
62
  const scopedTenantId = request.apiKey?.tenant_id;
63
63
  if (scopedTenantId) {
@@ -80,13 +80,13 @@ function createWebhookRoutes(stratum) {
80
80
  reply.status(200).send(webhooks);
81
81
  }
82
82
  });
83
- // GET /api/v1/webhooks/:id — Get webhook
83
+ // GET /api/v1/webhooks/:id: Get webhook
84
84
  app.get("/:id", async (request, reply) => {
85
85
  const webhook = await stratum.getWebhook(request.params.id);
86
86
  await assertTenantAccess(request, webhook.tenant_id, stratum);
87
87
  reply.status(200).send(webhook);
88
88
  });
89
- // PATCH /api/v1/webhooks/:id — Update webhook
89
+ // PATCH /api/v1/webhooks/:id: Update webhook
90
90
  app.patch("/:id", async (request, reply) => {
91
91
  const existing = await stratum.getWebhook(request.params.id);
92
92
  await assertTenantAccess(request, existing.tenant_id, stratum);
@@ -94,21 +94,21 @@ function createWebhookRoutes(stratum) {
94
94
  const webhook = await stratum.updateWebhook(request.params.id, input, (0, audit_logs_js_1.buildAuditContext)(request));
95
95
  reply.status(200).send(webhook);
96
96
  });
97
- // DELETE /api/v1/webhooks/:id — Delete webhook
97
+ // DELETE /api/v1/webhooks/:id: Delete webhook
98
98
  app.delete("/:id", async (request, reply) => {
99
99
  const existing = await stratum.getWebhook(request.params.id);
100
100
  await assertTenantAccess(request, existing.tenant_id, stratum);
101
101
  await stratum.deleteWebhook(request.params.id, (0, audit_logs_js_1.buildAuditContext)(request));
102
102
  reply.status(204).send();
103
103
  });
104
- // GET /api/v1/webhooks/:id/deliveries — List deliveries for a webhook
104
+ // GET /api/v1/webhooks/:id/deliveries: List deliveries for a webhook
105
105
  app.get("/:id/deliveries", async (request, reply) => {
106
106
  const webhook = await stratum.getWebhook(request.params.id);
107
107
  await assertTenantAccess(request, webhook.tenant_id, stratum);
108
108
  const deliveries = await stratum.listWebhookDeliveries(request.params.id);
109
109
  reply.status(200).send(deliveries);
110
110
  });
111
- // POST /api/v1/webhooks/:id/test — Send test event
111
+ // POST /api/v1/webhooks/:id/test: Send test event
112
112
  app.post("/:id/test", async (request, reply) => {
113
113
  const webhook = await stratum.getWebhook(request.params.id);
114
114
  await assertTenantAccess(request, webhook.tenant_id, stratum);
@@ -116,14 +116,14 @@ function createWebhookRoutes(stratum) {
116
116
  reply.status(200).send(result);
117
117
  });
118
118
  // --- Dead-Letter Queue / Delivery Dashboard ---
119
- // GET /api/v1/webhooks/deliveries/stats — Delivery statistics
119
+ // GET /api/v1/webhooks/deliveries/stats: Delivery statistics
120
120
  app.get("/deliveries/stats", async (request, reply) => {
121
121
  // Scoped keys: restrict to their tenant's deliveries
122
122
  const tenantId = request.apiKey?.tenant_id ?? undefined;
123
123
  const stats = await stratum.getDeliveryStats(tenantId);
124
124
  reply.status(200).send(stats);
125
125
  });
126
- // GET /api/v1/webhooks/deliveries/failed — List failed deliveries (DLQ)
126
+ // GET /api/v1/webhooks/deliveries/failed: List failed deliveries (DLQ)
127
127
  app.get("/deliveries/failed", async (request, reply) => {
128
128
  const rawLimit = request.query.limit ? parseInt(request.query.limit, 10) : 100;
129
129
  const limit = Number.isNaN(rawLimit) || rawLimit < 1 ? 100 : Math.min(rawLimit, 500);
@@ -131,13 +131,13 @@ function createWebhookRoutes(stratum) {
131
131
  const failed = await stratum.listFailedDeliveries(limit, tenantId);
132
132
  reply.status(200).send(failed);
133
133
  });
134
- // POST /api/v1/webhooks/deliveries/retry-all — Retry all failed deliveries
134
+ // POST /api/v1/webhooks/deliveries/retry-all: Retry all failed deliveries
135
135
  app.post("/deliveries/retry-all", async (request, reply) => {
136
136
  const tenantId = request.apiKey?.tenant_id ?? undefined;
137
137
  const count = await stratum.retryFailedDeliveries(tenantId);
138
138
  reply.status(200).send({ retried: count });
139
139
  });
140
- // POST /api/v1/webhooks/deliveries/:deliveryId/retry — Retry single delivery
140
+ // POST /api/v1/webhooks/deliveries/:deliveryId/retry: Retry single delivery
141
141
  app.post("/deliveries/:deliveryId/retry", async (request, reply) => {
142
142
  // Verify tenant access for scoped keys
143
143
  if (request.apiKey?.tenant_id) {