@authhero/multi-tenancy 14.24.1 → 14.25.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.
@@ -1,9 +1,9 @@
1
1
  import { Hono as e } from "hono";
2
- import { MANAGEMENT_API_AUDIENCE as t, MANAGEMENT_API_SCOPES as n, auth0QuerySchema as r, connectionInsertSchema as i, connectionOptionsSchema as a, connectionSchema as o, deepMergePatch as s, fetchAll as c, hookInsertSchema as l, init as u, resourceServerInsertSchema as d, tenantInsertSchema as f, tenantSchema as p } from "authhero";
3
- import { OpenAPIHono as m, createRoute as h, z as g } from "@hono/zod-openapi";
4
- import { HTTPException as _ } from "hono/http-exception";
2
+ import { MANAGEMENT_API_AUDIENCE as t, MANAGEMENT_API_SCOPES as n, auth0QuerySchema as r, brandingSchema as i, connectionInsertSchema as a, connectionOptionsSchema as o, connectionSchema as s, deepMergePatch as c, emailProviderSchema as l, fetchAll as u, hookInsertSchema as d, init as f, listControlPlaneKeys as p, promptSettingSchema as m, resourceServerInsertSchema as h, tenantInsertSchema as g, tenantSchema as _ } from "authhero";
3
+ import { OpenAPIHono as v, createRoute as y, z as b } from "@hono/zod-openapi";
4
+ import { HTTPException as x } from "hono/http-exception";
5
5
  //#region src/hooks/access-control.ts
6
- function v(e) {
6
+ function S(e) {
7
7
  let { controlPlaneTenantId: t, requireOrganizationMatch: n = !0 } = e;
8
8
  return { async onTenantAccessValidation(e, r) {
9
9
  if (r === t) return !0;
@@ -14,14 +14,14 @@ function v(e) {
14
14
  return !0;
15
15
  } };
16
16
  }
17
- function y(e, t, n, r) {
17
+ function C(e, t, n, r) {
18
18
  if (t === n) return !0;
19
19
  let i = r || e;
20
20
  return i ? i.toLowerCase() === t.toLowerCase() : !1;
21
21
  }
22
22
  //#endregion
23
23
  //#region src/hooks/database.ts
24
- function b(e) {
24
+ function w(e) {
25
25
  return { async resolveDataAdapters(t) {
26
26
  try {
27
27
  return await e.getAdapters(t);
@@ -33,20 +33,20 @@ function b(e) {
33
33
  }
34
34
  //#endregion
35
35
  //#region src/hooks/provisioning.ts
36
- function x(e) {
36
+ function T(e) {
37
37
  return `urn:authhero:tenant:${e.toLowerCase()}`;
38
38
  }
39
- function S(e) {
39
+ function E(e) {
40
40
  return {
41
41
  async beforeCreate(e, t) {
42
42
  return !t.audience && t.id ? {
43
43
  ...t,
44
- audience: x(t.id)
44
+ audience: T(t.id)
45
45
  } : t;
46
46
  },
47
47
  async afterCreate(t, n) {
48
48
  let { accessControl: r, databaseIsolation: i } = e;
49
- r && t.ctx && await C(t, n, r), i?.onProvision && await i.onProvision(n.id);
49
+ r && t.ctx && await ee(t, n, r), i?.onProvision && await i.onProvision(n.id);
50
50
  },
51
51
  async beforeDelete(t, n) {
52
52
  let { accessControl: r, databaseIsolation: i } = e;
@@ -64,14 +64,14 @@ function S(e) {
64
64
  }
65
65
  };
66
66
  }
67
- async function C(e, t, n) {
67
+ async function ee(e, t, n) {
68
68
  let { controlPlaneTenantId: r, defaultPermissions: i, defaultRoles: a, issuer: o, adminRoleName: s = "Tenant Admin", adminRoleDescription: c = "Full access to all tenant management operations", addCreatorToOrganization: l = !0 } = n, u = await e.adapters.organizations.create(r, {
69
69
  name: t.id,
70
70
  display_name: t.friendly_name || t.id
71
71
  }), d;
72
- if (o && (d = await T(e, r, s, c)), l && e.ctx) {
72
+ if (o && (d = await ne(e, r, s, c)), l && e.ctx) {
73
73
  let t = e.ctx.var.user;
74
- if (t?.sub && !await w(e, r, t.sub)) try {
74
+ if (t?.sub && !await te(e, r, t.sub)) try {
75
75
  await e.adapters.userOrganizations.create(r, {
76
76
  user_id: t.sub,
77
77
  organization_id: u.id
@@ -82,12 +82,12 @@ async function C(e, t, n) {
82
82
  }
83
83
  a && a.length > 0 && console.log(`Would assign roles ${a.join(", ")} to organization ${u.id}`), i && i.length > 0 && console.log(`Would grant permissions ${i.join(", ")} to organization ${u.id}`);
84
84
  }
85
- async function w(e, t, n) {
85
+ async function te(e, t, n) {
86
86
  let r = await e.adapters.userRoles.list(t, n, void 0, "");
87
87
  for (let n of r) if ((await e.adapters.rolePermissions.list(t, n.id, { per_page: 1e3 })).some((e) => e.permission_name === "admin:organizations")) return !0;
88
88
  return !1;
89
89
  }
90
- async function T(e, r, i, a) {
90
+ async function ne(e, r, i, a) {
91
91
  let o = (await e.adapters.roles.list(r, {})).roles.find((e) => e.name === i);
92
92
  if (o) return o.id;
93
93
  let s = await e.adapters.roles.create(r, {
@@ -102,7 +102,7 @@ async function T(e, r, i, a) {
102
102
  }
103
103
  //#endregion
104
104
  //#region src/hooks/sync.ts
105
- function E(e, t, n = () => !0) {
105
+ function D(e, t, n = () => !0) {
106
106
  let { controlPlaneTenantId: r, getChildTenantIds: i, getAdapters: a } = e, o = /* @__PURE__ */ new Map();
107
107
  async function s(e, n, r) {
108
108
  return (await t(e).list(n, {
@@ -157,18 +157,18 @@ function E(e, t, n = () => !0) {
157
157
  }
158
158
  };
159
159
  }
160
- function D(e, t, n = () => !0) {
160
+ function O(e, t, n = () => !0) {
161
161
  let { controlPlaneTenantId: r, getControlPlaneAdapters: i, getAdapters: a } = e;
162
162
  return { async afterCreate(e, o) {
163
163
  if (o.id !== r) try {
164
- let e = await i(), s = await a(o.id), l = t(e), u = t(s), d = await c((e) => l.listPaginated(r, e), l.listKey, {
164
+ let e = await i(), s = await a(o.id), c = t(e), l = t(s), d = await u((e) => c.listPaginated(r, e), c.listKey, {
165
165
  cursorField: "id",
166
166
  pageSize: 100
167
167
  });
168
168
  await Promise.all(d.filter((e) => n(e)).map(async (e) => {
169
169
  try {
170
- let t = l.transform(e);
171
- await u.create(o.id, {
170
+ let t = c.transform(e);
171
+ await l.create(o.id, {
172
172
  ...t,
173
173
  is_system: !0
174
174
  });
@@ -181,7 +181,7 @@ function D(e, t, n = () => !0) {
181
181
  }
182
182
  } };
183
183
  }
184
- var O = (e) => ({
184
+ var k = (e) => ({
185
185
  list: async (t, n) => (await e.resourceServers.list(t, n)).resource_servers,
186
186
  listPaginated: (t, n) => e.resourceServers.list(t, n),
187
187
  get: (t, n) => e.resourceServers.get(t, n),
@@ -199,7 +199,7 @@ var O = (e) => ({
199
199
  token_lifetime: e.token_lifetime,
200
200
  token_lifetime_for_web: e.token_lifetime_for_web
201
201
  })
202
- }), k = (e) => ({
202
+ }), A = (e) => ({
203
203
  list: async (t, n) => (await e.roles.list(t, n)).roles,
204
204
  listPaginated: (t, n) => e.roles.list(t, n),
205
205
  get: (t, n) => e.roles.get(t, n),
@@ -214,15 +214,15 @@ var O = (e) => ({
214
214
  description: e.description
215
215
  })
216
216
  });
217
- function A(e) {
217
+ function re(e) {
218
218
  return e.metadata?.sync !== !1;
219
219
  }
220
- function j(e) {
221
- let { sync: t = {}, filters: n = {} } = e, r = t.resourceServers ?? !0, i = t.roles ?? !0, a = (e) => A(e) ? n.resourceServers ? n.resourceServers(e) : !0 : !1, o = (e) => A(e) ? n.roles ? n.roles(e) : !0 : !1, s = r ? E(e, O, a) : void 0, l = i ? E(e, k, o) : void 0, u = r ? D(e, O, a) : void 0, d = i ? D(e, k, o) : void 0, f = i ? { async afterCreate(t, r) {
220
+ function ie(e) {
221
+ let { sync: t = {}, filters: n = {} } = e, r = t.resourceServers ?? !0, i = t.roles ?? !0, a = (e) => re(e) ? n.resourceServers ? n.resourceServers(e) : !0 : !1, o = (e) => re(e) ? n.roles ? n.roles(e) : !0 : !1, s = r ? D(e, k, a) : void 0, c = i ? D(e, A, o) : void 0, l = r ? O(e, k, a) : void 0, d = i ? O(e, A, o) : void 0, f = i ? { async afterCreate(t, r) {
222
222
  if (r.id !== e.controlPlaneTenantId) {
223
223
  await d?.afterCreate?.(t, r);
224
224
  try {
225
- let t = await e.getControlPlaneAdapters(), i = await e.getAdapters(r.id), a = await c((n) => t.roles.list(e.controlPlaneTenantId, n), "roles", {
225
+ let t = await e.getControlPlaneAdapters(), i = await e.getAdapters(r.id), a = await u((n) => t.roles.list(e.controlPlaneTenantId, n), "roles", {
226
226
  cursorField: "id",
227
227
  pageSize: 100
228
228
  }), o = /* @__PURE__ */ new Map();
@@ -257,10 +257,10 @@ function j(e) {
257
257
  return {
258
258
  entityHooks: {
259
259
  resourceServers: s,
260
- roles: l
260
+ roles: c
261
261
  },
262
262
  tenantHooks: { async afterCreate(e, t) {
263
- let n = [u?.afterCreate, f?.afterCreate ?? d?.afterCreate], r = [];
263
+ let n = [l?.afterCreate, f?.afterCreate ?? d?.afterCreate], r = [];
264
264
  for (let i of n) if (i) try {
265
265
  await i(e, t);
266
266
  } catch (e) {
@@ -273,35 +273,35 @@ function j(e) {
273
273
  }
274
274
  //#endregion
275
275
  //#region src/routes/tenants.ts
276
- var ee = g.object({
277
- sub: g.string(),
278
- tenant_id: g.string().optional(),
279
- org_id: g.string().optional(),
280
- scope: g.string().optional(),
281
- permissions: g.array(g.string()).optional()
276
+ var ae = b.object({
277
+ sub: b.string(),
278
+ tenant_id: b.string().optional(),
279
+ org_id: b.string().optional(),
280
+ scope: b.string().optional(),
281
+ permissions: b.array(b.string()).optional()
282
282
  }).passthrough();
283
- function te(e) {
284
- let t = ee.safeParse(e);
283
+ function oe(e) {
284
+ let t = ae.safeParse(e);
285
285
  return t.success ? t.data : void 0;
286
286
  }
287
- function ne(e) {
287
+ function se(e) {
288
288
  let t = e.permissions ?? [], n = e.scope ? e.scope.split(" ").filter(Boolean) : [], r = new Set([...t, ...n]);
289
289
  return r.has("delete:tenants") || r.has("admin:organizations");
290
290
  }
291
- function M(e, t) {
292
- let n = new m();
293
- return n.openapi(h({
291
+ function j(e, t) {
292
+ let n = new v();
293
+ return n.openapi(y({
294
294
  tags: ["tenants"],
295
295
  method: "get",
296
296
  path: "/",
297
297
  request: { query: r },
298
298
  security: [{ Bearer: [] }],
299
299
  responses: { 200: {
300
- content: { "application/json": { schema: g.object({
301
- tenants: g.array(p),
302
- start: g.number().optional(),
303
- limit: g.number().optional(),
304
- length: g.number().optional()
300
+ content: { "application/json": { schema: b.object({
301
+ tenants: b.array(_),
302
+ start: b.number().optional(),
303
+ limit: b.number().optional(),
304
+ length: b.number().optional()
305
305
  }) } },
306
306
  description: "List of tenants"
307
307
  } }
@@ -321,17 +321,17 @@ function M(e, t) {
321
321
  length: e.tenants.length
322
322
  }) : t.json({ tenants: e.tenants });
323
323
  }
324
- let l = e.accessControl?.controlPlaneTenantId ?? t.env.data.multiTenancyConfig?.controlPlaneTenantId;
325
- if (l && !o?.sub) throw new _(403, { message: "Access denied: token has no subject" });
326
- if (l && o?.sub) {
327
- let e = (await c((e) => t.env.data.userOrganizations.listUserOrganizations(l, o.sub, e), "organizations")).map((e) => e.name);
324
+ let c = e.accessControl?.controlPlaneTenantId ?? t.env.data.multiTenancyConfig?.controlPlaneTenantId;
325
+ if (c && !o?.sub) throw new x(403, { message: "Access denied: token has no subject" });
326
+ if (c && o?.sub) {
327
+ let e = (await u((e) => t.env.data.userOrganizations.listUserOrganizations(c, o.sub, e), "organizations")).map((e) => e.name);
328
328
  if (e.length === 0) return i ? t.json({
329
329
  tenants: [],
330
330
  start: 0,
331
331
  limit: r ?? 50,
332
332
  length: 0
333
333
  }) : t.json({ tenants: [] });
334
- let s = e.length, u = n ?? 0, d = r ?? 50, f = u * d, p = e.slice(f, f + d);
334
+ let s = e.length, l = n ?? 0, d = r ?? 50, f = l * d, p = e.slice(f, f + d);
335
335
  if (p.length === 0) return i ? t.json({
336
336
  tenants: [],
337
337
  start: f,
@@ -350,34 +350,34 @@ function M(e, t) {
350
350
  length: s
351
351
  }) : t.json({ tenants: g.tenants });
352
352
  }
353
- let u = await t.env.data.tenants.list({
353
+ let l = await t.env.data.tenants.list({
354
354
  page: n,
355
355
  per_page: r,
356
356
  include_totals: i,
357
357
  q: a
358
358
  });
359
359
  return i ? t.json({
360
- tenants: u.tenants,
361
- start: u.totals?.start ?? 0,
362
- limit: u.totals?.limit ?? r,
363
- length: u.tenants.length
364
- }) : t.json({ tenants: u.tenants });
365
- }), n.openapi(h({
360
+ tenants: l.tenants,
361
+ start: l.totals?.start ?? 0,
362
+ limit: l.totals?.limit ?? r,
363
+ length: l.tenants.length
364
+ }) : t.json({ tenants: l.tenants });
365
+ }), n.openapi(y({
366
366
  tags: ["tenants"],
367
367
  method: "post",
368
368
  path: "/",
369
- request: { body: { content: { "application/json": { schema: f } } } },
369
+ request: { body: { content: { "application/json": { schema: g } } } },
370
370
  security: [{ Bearer: [] }],
371
371
  responses: {
372
372
  201: {
373
- content: { "application/json": { schema: p } },
373
+ content: { "application/json": { schema: _ } },
374
374
  description: "Tenant created"
375
375
  },
376
376
  400: { description: "Validation error" },
377
377
  409: { description: "Tenant with this ID already exists" }
378
378
  }
379
379
  }), async (e) => {
380
- if (!e.var.user?.sub) throw new _(401, { message: "Authentication required to create tenants" });
380
+ if (!e.var.user?.sub) throw new x(401, { message: "Authentication required to create tenants" });
381
381
  let n = e.req.valid("json"), r = {
382
382
  adapters: e.env.data,
383
383
  ctx: e
@@ -385,11 +385,11 @@ function M(e, t) {
385
385
  t.tenants?.beforeCreate && (n = await t.tenants.beforeCreate(r, n));
386
386
  let i = await e.env.data.tenants.create(n);
387
387
  return t.tenants?.afterCreate && await t.tenants.afterCreate(r, i), e.json(i, 201);
388
- }), n.openapi(h({
388
+ }), n.openapi(y({
389
389
  tags: ["tenants"],
390
390
  method: "delete",
391
391
  path: "/{id}",
392
- request: { params: g.object({ id: g.string() }) },
392
+ request: { params: b.object({ id: b.string() }) },
393
393
  security: [{ Bearer: ["delete:tenants"] }],
394
394
  responses: {
395
395
  204: { description: "Tenant deleted" },
@@ -399,62 +399,62 @@ function M(e, t) {
399
399
  }), async (n) => {
400
400
  let { id: r } = n.req.valid("param"), i = e.accessControl?.controlPlaneTenantId ?? n.env.data.multiTenancyConfig?.controlPlaneTenantId;
401
401
  if (i) {
402
- let e = te(n.var.user);
403
- if (!e?.sub) throw new _(401, { message: "Authentication required" });
404
- if (r === i) throw new _(403, { message: "Cannot delete the control plane" });
402
+ let e = oe(n.var.user);
403
+ if (!e?.sub) throw new x(401, { message: "Authentication required" });
404
+ if (r === i) throw new x(403, { message: "Cannot delete the control plane" });
405
405
  let t = n.var.org_name, a = r.toLowerCase(), o = !!t && t.toLowerCase() === a;
406
406
  if (!o) {
407
407
  let r = !!(e.org_id ?? n.var.organization_id ?? t), a = !e.tenant_id || e.tenant_id === i;
408
- !r && a && ne(e) && (o = !0);
408
+ !r && a && se(e) && (o = !0);
409
409
  }
410
- if (o ||= (await c((t) => n.env.data.userOrganizations.listUserOrganizations(i, e.sub, t), "organizations")).some((e) => e.name?.toLowerCase() === a), !o) throw new _(403, { message: "Access denied to this tenant" });
410
+ if (o ||= (await u((t) => n.env.data.userOrganizations.listUserOrganizations(i, e.sub, t), "organizations")).some((e) => e.name?.toLowerCase() === a), !o) throw new x(403, { message: "Access denied to this tenant" });
411
411
  }
412
- if (!await n.env.data.tenants.get(r)) throw new _(404, { message: "Tenant not found" });
412
+ if (!await n.env.data.tenants.get(r)) throw new x(404, { message: "Tenant not found" });
413
413
  let a = {
414
414
  adapters: n.env.data,
415
415
  ctx: n
416
416
  };
417
417
  return t.tenants?.beforeDelete && await t.tenants.beforeDelete(a, r), await n.env.data.tenants.remove(r), t.tenants?.afterDelete && await t.tenants.afterDelete(a, r), n.body(null, 204);
418
- }), n.openapi(h({
418
+ }), n.openapi(y({
419
419
  tags: ["tenants", "settings"],
420
420
  method: "get",
421
421
  path: "/settings",
422
- request: { headers: g.object({ "tenant-id": g.string().optional() }) },
422
+ request: { headers: b.object({ "tenant-id": b.string().optional() }) },
423
423
  security: [{ Bearer: ["read:tenants"] }],
424
424
  responses: { 200: {
425
- content: { "application/json": { schema: p } },
425
+ content: { "application/json": { schema: _ } },
426
426
  description: "Current tenant settings"
427
427
  } }
428
428
  }), async (e) => {
429
429
  let t = await e.env.data.tenants.get(e.var.tenant_id);
430
- if (!t) throw new _(404, { message: "Tenant not found" });
430
+ if (!t) throw new x(404, { message: "Tenant not found" });
431
431
  return e.json(t);
432
- }), n.openapi(h({
432
+ }), n.openapi(y({
433
433
  tags: ["tenants", "settings"],
434
434
  method: "patch",
435
435
  path: "/settings",
436
436
  request: {
437
- headers: g.object({ "tenant-id": g.string().optional() }),
438
- body: { content: { "application/json": { schema: g.object(f.shape).partial() } } }
437
+ headers: b.object({ "tenant-id": b.string().optional() }),
438
+ body: { content: { "application/json": { schema: b.object(g.shape).partial() } } }
439
439
  },
440
440
  security: [{ Bearer: ["update:tenants"] }],
441
441
  responses: { 200: {
442
- content: { "application/json": { schema: p } },
442
+ content: { "application/json": { schema: _ } },
443
443
  description: "Updated tenant settings"
444
444
  } }
445
445
  }), async (e) => {
446
446
  let { id: t, ...n } = e.req.valid("json"), r = await e.env.data.tenants.get(e.var.tenant_id);
447
- if (!r) throw new _(404, { message: "Tenant not found" });
448
- let i = s(r, n);
447
+ if (!r) throw new x(404, { message: "Tenant not found" });
448
+ let i = c(r, n);
449
449
  await e.env.data.tenants.update(e.var.tenant_id, i);
450
450
  let a = await e.env.data.tenants.get(e.var.tenant_id);
451
- if (!a) throw new _(500, { message: "Failed to retrieve updated tenant" });
451
+ if (!a) throw new x(500, { message: "Failed to retrieve updated tenant" });
452
452
  return e.json(a);
453
453
  }), n;
454
454
  }
455
455
  //#endregion
456
456
  //#region src/middleware/protect-synced.ts
457
- function N(e) {
457
+ function ce(e) {
458
458
  for (let { pattern: t, type: n } of [
459
459
  {
460
460
  pattern: /\/api\/v2\/resource-servers\/([^/]+)$/,
@@ -477,7 +477,7 @@ function N(e) {
477
477
  }
478
478
  return null;
479
479
  }
480
- async function re(e, t, n) {
480
+ async function le(e, t, n) {
481
481
  try {
482
482
  switch (n.type) {
483
483
  case "resource_server": return (await e.resourceServers.get(t, n.id))?.is_system === !0;
@@ -489,47 +489,47 @@ async function re(e, t, n) {
489
489
  return !1;
490
490
  }
491
491
  }
492
- function ie(e) {
492
+ function ue(e) {
493
493
  return {
494
494
  resource_server: "resource server",
495
495
  role: "role",
496
496
  connection: "connection"
497
497
  }[e];
498
498
  }
499
- function P() {
499
+ function M() {
500
500
  return async (e, t) => {
501
501
  if (![
502
502
  "PATCH",
503
503
  "PUT",
504
504
  "DELETE"
505
505
  ].includes(e.req.method)) return t();
506
- let n = N(e.req.path);
506
+ let n = ce(e.req.path);
507
507
  if (!n) return t();
508
508
  let r = e.var.tenant_id || e.req.header("x-tenant-id") || e.req.header("tenant-id");
509
509
  if (!r) return t();
510
- if (await re(e.env.data, r, n)) throw new _(403, { message: `This ${ie(n.type)} is a system resource and cannot be modified. Make changes in the control plane instead.` });
510
+ if (await le(e.env.data, r, n)) throw new x(403, { message: `This ${ue(n.type)} is a system resource and cannot be modified. Make changes in the control plane instead.` });
511
511
  return t();
512
512
  };
513
513
  }
514
514
  //#endregion
515
515
  //#region src/middleware/settings-inheritance.ts
516
- function F(e, t) {
516
+ function N(e, t) {
517
517
  let n = t.find((t) => t.strategy === e.strategy);
518
518
  if (!n?.options) return e;
519
- let r = o.passthrough().parse({
519
+ let r = s.passthrough().parse({
520
520
  ...n,
521
521
  ...e
522
522
  });
523
- return r.options = a.passthrough().parse({
523
+ return r.options = o.passthrough().parse({
524
524
  ...n.options || {},
525
525
  ...e.options
526
526
  }), r;
527
527
  }
528
- function I(e, t) {
528
+ function P(e, t) {
529
529
  let n = [...t || [], ...e || []];
530
530
  return [...new Set(n)];
531
531
  }
532
- function ae(e, t) {
532
+ function de(e, t) {
533
533
  if (!t?.length) return e || [];
534
534
  if (!e?.length) return t;
535
535
  let n = /* @__PURE__ */ new Map();
@@ -537,22 +537,22 @@ function ae(e, t) {
537
537
  for (let t of e) n.set(t.value, t);
538
538
  return Array.from(n.values());
539
539
  }
540
- function L(e, t) {
540
+ function F(e, t) {
541
541
  return t ? {
542
542
  ...e,
543
- scopes: ae(e.scopes, t.scopes)
543
+ scopes: de(e.scopes, t.scopes)
544
544
  } : e;
545
545
  }
546
- function oe(e, t) {
546
+ function fe(e, t) {
547
547
  return t ? {
548
548
  ...e,
549
- callbacks: I(e.callbacks, t.callbacks),
550
- web_origins: I(e.web_origins, t.web_origins),
551
- allowed_logout_urls: I(e.allowed_logout_urls, t.allowed_logout_urls),
552
- allowed_origins: I(e.allowed_origins, t.allowed_origins)
549
+ callbacks: P(e.callbacks, t.callbacks),
550
+ web_origins: P(e.web_origins, t.web_origins),
551
+ allowed_logout_urls: P(e.allowed_logout_urls, t.allowed_logout_urls),
552
+ allowed_origins: P(e.allowed_origins, t.allowed_origins)
553
553
  } : e;
554
554
  }
555
- function R(e) {
555
+ function I(e) {
556
556
  let { controlPlaneTenantId: t, controlPlaneClientId: n, resolveControlPlane: r } = e;
557
557
  if (r) return async (e) => r({ tenant_id: e });
558
558
  if (!t) return async () => void 0;
@@ -562,14 +562,14 @@ function R(e) {
562
562
  };
563
563
  return async () => i;
564
564
  }
565
- function z(e, t) {
565
+ function L(e, t) {
566
566
  return {
567
567
  ...e.resourceServers,
568
568
  get: async (n, r) => {
569
569
  let i = await e.resourceServers.get(n, r);
570
570
  if (!i) return i;
571
571
  let a = await t(n);
572
- return !a || n === a.tenantId || !i.is_system ? i : L(i, await e.resourceServers.get(a.tenantId, r));
572
+ return !a || n === a.tenantId || !i.is_system ? i : F(i, await e.resourceServers.get(a.tenantId, r));
573
573
  },
574
574
  list: async (n, r) => {
575
575
  let i = await e.resourceServers.list(n, r), a = await t(n);
@@ -581,7 +581,7 @@ function z(e, t) {
581
581
  let n = await e.resourceServers.get(o, t);
582
582
  n && c.set(t, n);
583
583
  }));
584
- let l = i.resource_servers.map((e) => e.is_system && e.id ? L(e, c.get(e.id) ?? null) : e);
584
+ let l = i.resource_servers.map((e) => e.is_system && e.id ? F(e, c.get(e.id) ?? null) : e);
585
585
  return {
586
586
  ...i,
587
587
  resource_servers: l
@@ -589,18 +589,18 @@ function z(e, t) {
589
589
  }
590
590
  };
591
591
  }
592
- function B(e, t) {
593
- let n = R({
592
+ function R(e, t) {
593
+ let n = I({
594
594
  controlPlaneTenantId: t.controlPlaneTenantId,
595
595
  resolveControlPlane: t.resolveControlPlane
596
596
  });
597
597
  return {
598
598
  ...e,
599
- resourceServers: z(e, n)
599
+ resourceServers: L(e, n)
600
600
  };
601
601
  }
602
- function V(e, t) {
603
- let { controlPlaneTenantId: n, controlPlaneClientId: r, resolveControlPlane: i } = t, a = R({
602
+ function z(e, t) {
603
+ let { controlPlaneTenantId: n, controlPlaneClientId: r, resolveControlPlane: i } = t, a = I({
604
604
  controlPlaneTenantId: n,
605
605
  controlPlaneClientId: r,
606
606
  resolveControlPlane: i
@@ -618,12 +618,12 @@ function V(e, t) {
618
618
  let r = await e.connections.get(t, n);
619
619
  if (!r) return r;
620
620
  let i = await a(t);
621
- return !i || t === i.tenantId ? r : F(r, (await e.connections.list(i.tenantId)).connections || []);
621
+ return !i || t === i.tenantId ? r : N(r, (await e.connections.list(i.tenantId)).connections || []);
622
622
  },
623
623
  list: async (t, n) => {
624
624
  let r = await e.connections.list(t, n), i = await a(t);
625
625
  if (!i || t === i.tenantId) return r;
626
- let o = await e.connections.list(i.tenantId), s = r.connections.map((e) => F(e, o.connections || []));
626
+ let o = await e.connections.list(i.tenantId), s = r.connections.map((e) => N(e, o.connections || []));
627
627
  return {
628
628
  ...r,
629
629
  connections: s
@@ -638,7 +638,7 @@ function V(e, t) {
638
638
  let i = await a(t);
639
639
  if (!i || t === i.tenantId) return r;
640
640
  let o = await e.connections.list(i.tenantId);
641
- return r.map((e) => F(e, o.connections || []));
641
+ return r.map((e) => N(e, o.connections || []));
642
642
  }
643
643
  },
644
644
  emailProviders: {
@@ -650,22 +650,22 @@ function V(e, t) {
650
650
  return !r || t === r.tenantId ? null : e.emailProviders.get(r.tenantId);
651
651
  }
652
652
  },
653
- resourceServers: z(e, a),
654
- hooks: se(e, a)
653
+ resourceServers: L(e, a),
654
+ hooks: pe(e, a)
655
655
  };
656
656
  }
657
- function H(e) {
657
+ function B(e) {
658
658
  if (!e || typeof e != "object") return !1;
659
659
  let t = e.metadata;
660
660
  return !t || typeof t != "object" ? !1 : t.inheritable === !0;
661
661
  }
662
- function se(e, t) {
662
+ function pe(e, t) {
663
663
  return {
664
664
  ...e.hooks,
665
665
  list: async (n, r) => {
666
666
  let i = await e.hooks.list(n, r), a = await t(n);
667
667
  if (!a || n === a.tenantId) return i;
668
- let o = ((await e.hooks.list(a.tenantId, r)).hooks || []).filter(H);
668
+ let o = ((await e.hooks.list(a.tenantId, r)).hooks || []).filter(B);
669
669
  if (o.length === 0) return i;
670
670
  let s = new Set((i.hooks || []).map((e) => e.hook_id)), c = o.filter((e) => !s.has(e.hook_id));
671
671
  return {
@@ -680,31 +680,31 @@ function se(e, t) {
680
680
  let a = await t(n);
681
681
  if (!a || n === a.tenantId) return i;
682
682
  let o = await e.hooks.get(a.tenantId, r);
683
- return o && H(o) ? o : null;
683
+ return o && B(o) ? o : null;
684
684
  }
685
685
  };
686
686
  }
687
- function U(e, t) {
688
- return V(e, t);
687
+ function V(e, t) {
688
+ return z(e, t);
689
689
  }
690
690
  //#endregion
691
691
  //#region src/middleware/index.ts
692
- function W(e) {
692
+ function H(e) {
693
693
  return async (t, n) => {
694
694
  let r = t.var.user;
695
695
  return r?.tenant_id === e && r.org_name && t.set("tenant_id", r.org_name), n();
696
696
  };
697
697
  }
698
- function G(e) {
698
+ function U(e) {
699
699
  return async (n, r) => {
700
700
  if (!e.accessControl) return r();
701
701
  let { controlPlaneTenantId: i } = e.accessControl, a = n.var.org_name, o = n.var.organization_id, s = a || o, c = n.var.tenant_id, l = n.var.user, u = (l?.aud ? Array.isArray(l.aud) ? l.aud : [l.aud] : []).includes(t);
702
- if (!c && s && u && (n.set("tenant_id", s), c = s), !c) throw new _(400, { message: "Tenant ID not found in request" });
703
- if (!y(o, c, i, a)) throw new _(403, { message: `Access denied to tenant ${c}` });
702
+ if (!c && s && u && (n.set("tenant_id", s), c = s), !c) throw new x(400, { message: "Tenant ID not found in request" });
703
+ if (!C(o, c, i, a)) throw new x(403, { message: `Access denied to tenant ${c}` });
704
704
  return r();
705
705
  };
706
706
  }
707
- function K(e) {
707
+ function W(e) {
708
708
  return async (t, n) => {
709
709
  if (!e.subdomainRouting) return n();
710
710
  let { baseDomain: r, reservedSubdomains: i = [], resolveSubdomain: a } = e.subdomainRouting, o = t.req.header("x-forwarded-host") || t.req.header("host") || "", s = null;
@@ -719,43 +719,43 @@ function K(e) {
719
719
  let n = await t.env.data.organizations.get(e.accessControl.controlPlaneTenantId, s);
720
720
  n && (c = n.id);
721
721
  } catch {}
722
- if (!c) throw new _(404, { message: `Tenant not found for subdomain: ${s}` });
722
+ if (!c) throw new x(404, { message: `Tenant not found for subdomain: ${s}` });
723
723
  return t.set("tenant_id", c), n();
724
724
  };
725
725
  }
726
- function q(e) {
726
+ function G(e) {
727
727
  return async (t, n) => {
728
728
  if (!e.databaseIsolation) return n();
729
729
  let r = t.var.tenant_id;
730
- if (!r) throw new _(400, { message: "Tenant ID not found in request" });
730
+ if (!r) throw new x(400, { message: "Tenant ID not found in request" });
731
731
  try {
732
732
  let n = await e.databaseIsolation.getAdapters(r);
733
733
  t.env.data = n;
734
734
  } catch (e) {
735
- throw console.error(`Failed to resolve database for tenant ${r}:`, e), new _(500, { message: "Failed to resolve tenant database" });
735
+ throw console.error(`Failed to resolve database for tenant ${r}:`, e), new x(500, { message: "Failed to resolve tenant database" });
736
736
  }
737
737
  return n();
738
738
  };
739
739
  }
740
- function J(e) {
741
- let t = K(e), n = G(e), r = q(e);
740
+ function K(e) {
741
+ let t = W(e), n = U(e), r = G(e);
742
742
  return async (e, i) => (await t(e, async () => {}), await n(e, async () => {}), await r(e, async () => {}), i());
743
743
  }
744
744
  //#endregion
745
745
  //#region src/init.ts
746
- function ce(e) {
746
+ function me(e) {
747
747
  let { dataAdapter: t, controlPlane: n, controlPlane: { tenantId: r = "control_plane", clientId: i } = {}, resolveControlPlane: a, sync: o = {
748
748
  resourceServers: !0,
749
749
  roles: !0
750
- }, defaultPermissions: s = ["tenant:admin"], requireOrganizationMatch: l = !1, managementApiExtensions: d = [], entityHooks: f, getChildTenantIds: p, getAdapters: m, ...h } = e;
750
+ }, defaultPermissions: s = ["tenant:admin"], requireOrganizationMatch: c = !1, managementApiExtensions: l = [], entityHooks: d, getChildTenantIds: p, getAdapters: m, ...h } = e;
751
751
  if (a && !n) throw Error("initMultiTenant: `resolveControlPlane` requires `controlPlane` to be set. The static `controlPlane.tenantId` is used for access control, sync direction, and tenant management routing; the resolver only overrides per-tenant runtime inheritance lookups on top of it.");
752
752
  let g = t, _ = t;
753
- n && (g = U(t, {
753
+ n && (g = V(t, {
754
754
  controlPlaneTenantId: r,
755
755
  controlPlaneClientId: i,
756
756
  resolveControlPlane: a
757
757
  }), _ = {
758
- ...B(t, {
758
+ ...R(t, {
759
759
  controlPlaneTenantId: r,
760
760
  resolveControlPlane: a
761
761
  }),
@@ -771,67 +771,88 @@ function ce(e) {
771
771
  } : {
772
772
  resourceServers: !1,
773
773
  roles: !1
774
- }, { entityHooks: b, tenantHooks: x } = j({
774
+ }, { entityHooks: b, tenantHooks: x } = ie({
775
775
  controlPlaneTenantId: r,
776
- getChildTenantIds: p ?? (async () => (await c((e) => g.tenants.list(e), "tenants", {
776
+ getChildTenantIds: p ?? (async () => (await u((e) => g.tenants.list(e), "tenants", {
777
777
  cursorField: "id",
778
778
  pageSize: 100
779
779
  })).filter((e) => e.id !== r).map((e) => e.id)),
780
780
  getAdapters: m ?? (async () => g),
781
781
  getControlPlaneAdapters: async () => g,
782
782
  sync: y
783
- }), C = {
784
- resourceServers: [b.resourceServers, ...f?.resourceServers ?? []],
785
- roles: [b.roles, ...f?.roles ?? []],
786
- connections: f?.connections ?? [],
787
- tenants: f?.tenants ?? [],
788
- rolePermissions: f?.rolePermissions ?? []
789
- }, w = S({ accessControl: {
783
+ }), S = {
784
+ resourceServers: [b.resourceServers, ...d?.resourceServers ?? []],
785
+ roles: [b.roles, ...d?.roles ?? []],
786
+ connections: d?.connections ?? [],
787
+ tenants: d?.tenants ?? [],
788
+ rolePermissions: d?.rolePermissions ?? []
789
+ }, C = E({ accessControl: {
790
790
  controlPlaneTenantId: r,
791
- requireOrganizationMatch: l,
791
+ requireOrganizationMatch: c,
792
792
  defaultPermissions: s
793
- } }), T = M({ accessControl: {
793
+ } }), w = j({ accessControl: {
794
794
  controlPlaneTenantId: r,
795
- requireOrganizationMatch: l,
795
+ requireOrganizationMatch: c,
796
796
  defaultPermissions: s
797
797
  } }, { tenants: {
798
798
  async beforeCreate(e, t) {
799
- return w.beforeCreate && (t = await w.beforeCreate(e, t)), x.beforeCreate && (t = await x.beforeCreate(e, t)), t;
799
+ return C.beforeCreate && (t = await C.beforeCreate(e, t)), x.beforeCreate && (t = await x.beforeCreate(e, t)), t;
800
800
  },
801
801
  async afterCreate(e, t) {
802
- await w.afterCreate?.(e, t), await x.afterCreate?.(e, t);
802
+ await C.afterCreate?.(e, t), await x.afterCreate?.(e, t);
803
803
  },
804
804
  async beforeDelete(e, t) {
805
- await w.beforeDelete?.(e, t), await x.beforeDelete?.(e, t);
805
+ await C.beforeDelete?.(e, t), await x.beforeDelete?.(e, t);
806
806
  }
807
- } }), { app: E } = u({
807
+ } }), { app: T } = f({
808
808
  dataAdapter: g,
809
809
  managementDataAdapter: _,
810
810
  ...h,
811
- entityHooks: C,
812
- managementApiExtensions: [...d, {
811
+ entityHooks: S,
812
+ managementApiExtensions: [...l, {
813
813
  path: "/tenants",
814
- router: T
814
+ router: w
815
815
  }]
816
816
  });
817
- return E.use("/api/v2/*", W(r)), v && E.use("/api/v2/*", P()), {
818
- app: E,
817
+ return T.use("/api/v2/*", H(r)), v && T.use("/api/v2/*", M()), {
818
+ app: T,
819
819
  controlPlaneTenantId: r
820
820
  };
821
821
  }
822
822
  //#endregion
823
823
  //#region src/rollout/defaults-projection.ts
824
- function Y() {
824
+ function q(e = {}) {
825
+ return {
826
+ connections: e.connections ?? !0,
827
+ resourceServers: e.resourceServers ?? !0,
828
+ hooks: e.hooks ?? !0,
829
+ emailProvider: e.emailProvider ?? !0,
830
+ branding: e.branding ?? !0,
831
+ promptSettings: e.promptSettings ?? !0
832
+ };
833
+ }
834
+ function J() {
825
835
  return {
826
836
  upserted: 0,
827
837
  errors: []
828
838
  };
829
839
  }
830
- function le(e) {
840
+ function he(e) {
841
+ return {
842
+ tenantId: e,
843
+ connections: J(),
844
+ resourceServers: J(),
845
+ hooks: J(),
846
+ emailProvider: J(),
847
+ branding: J(),
848
+ promptSettings: J()
849
+ };
850
+ }
851
+ function ge(e) {
831
852
  let t = e.metadata;
832
853
  return !!(t && t.inheritable === !0);
833
854
  }
834
- async function X(e, t, n, r) {
855
+ async function Y(e, t, n, r) {
835
856
  try {
836
857
  await r();
837
858
  } catch (r) {
@@ -840,90 +861,121 @@ async function X(e, t, n, r) {
840
861
  e.errors.push(i);
841
862
  }
842
863
  }
843
- async function Z(e, t) {
844
- let { controlPlaneTenantId: n, getControlPlaneAdapters: r, getAdapters: a, entities: o = {}, continueOnError: s = !1 } = e, u = {
845
- connections: o.connections ?? !0,
846
- resourceServers: o.resourceServers ?? !0,
847
- hooks: o.hooks ?? !0,
848
- emailProvider: o.emailProvider ?? !0,
849
- branding: o.branding ?? !0,
850
- promptSettings: o.promptSettings ?? !0
851
- }, f = await r(), p = await a(t), m = {
852
- tenantId: t,
853
- connections: Y(),
854
- resourceServers: Y(),
855
- hooks: Y(),
856
- emailProvider: Y(),
857
- branding: Y(),
858
- promptSettings: Y()
859
- };
860
- if (u.connections) {
861
- let e = await c((e) => f.connections.list(n, e), "connections", {
864
+ async function _e(e, t, n) {
865
+ return {
866
+ connections: n.connections ? await u((n) => e.connections.list(t, n), "connections", {
862
867
  cursorField: "id",
863
868
  pageSize: 100
864
- });
865
- for (let t of e) {
866
- let e = t.id;
867
- e && await X(m.connections, `connection ${e}`, s, async () => {
868
- let r = i.parse(t);
869
- await p.connections.get(n, e) ? await p.connections.update(n, e, r) : await p.connections.create(n, r), m.connections.upserted += 1;
870
- });
871
- }
872
- }
873
- if (u.resourceServers) {
874
- let e = await c((e) => f.resourceServers.list(n, e), "resource_servers", {
869
+ }) : [],
870
+ resourceServers: n.resourceServers ? await u((n) => e.resourceServers.list(t, n), "resource_servers", {
875
871
  cursorField: "id",
876
872
  pageSize: 100
877
- });
878
- for (let t of e) !t.is_system || !t.id || await X(m.resourceServers, `resource_server ${t.id}`, s, async () => {
879
- let e = d.parse(t);
880
- await p.resourceServers.get(n, t.id) ? await p.resourceServers.update(n, t.id, e) : await p.resourceServers.create(n, e), m.resourceServers.upserted += 1;
881
- });
882
- }
883
- if (u.hooks) {
884
- let e = await c((e) => f.hooks.list(n, e), "hooks", {
873
+ }) : [],
874
+ hooks: n.hooks ? await u((n) => e.hooks.list(t, n), "hooks", {
885
875
  cursorField: "hook_id",
886
876
  pageSize: 100
887
- });
888
- for (let t of e) !le(t) || !t.hook_id || await X(m.hooks, `hook ${t.hook_id}`, s, async () => {
889
- let e = l.parse(t);
890
- await p.hooks.get(n, t.hook_id) ? await p.hooks.update(n, t.hook_id, e) : await p.hooks.create(n, e), m.hooks.upserted += 1;
877
+ }) : [],
878
+ emailProvider: n.emailProvider ? await e.emailProviders.get(t) ?? null : null,
879
+ branding: n.branding ? await e.branding.get(t) ?? null : null,
880
+ promptSettings: n.promptSettings ? await e.promptSettings.get(t) ?? null : null
881
+ };
882
+ }
883
+ async function ve(e, t, n, r, i, o) {
884
+ if (r.connections) for (let r of e.connections) {
885
+ let e = r.id;
886
+ e && await Y(o.connections, `connection ${e}`, i, async () => {
887
+ let i = a.parse(r);
888
+ await t.connections.get(n, e) ? await t.connections.update(n, e, i) : await t.connections.create(n, i), o.connections.upserted += 1;
891
889
  });
892
890
  }
893
- return u.emailProvider && await X(m.emailProvider, "email_provider", s, async () => {
894
- let e = await f.emailProviders.get(n);
895
- e && (await p.emailProviders.get(n) ? await p.emailProviders.update(n, e) : await p.emailProviders.create(n, e), m.emailProvider.upserted += 1);
896
- }), u.branding && await X(m.branding, "branding", s, async () => {
897
- let e = await f.branding.get(n);
898
- e && (await p.branding.set(n, e), m.branding.upserted += 1);
899
- }), u.promptSettings && await X(m.promptSettings, "prompt_settings", s, async () => {
900
- let e = await f.promptSettings.get(n);
901
- e && (await p.promptSettings.set(n, e), m.promptSettings.upserted += 1);
902
- }), m;
891
+ if (r.resourceServers) for (let r of e.resourceServers) !r.is_system || !r.id || await Y(o.resourceServers, `resource_server ${r.id}`, i, async () => {
892
+ let e = h.parse(r);
893
+ await t.resourceServers.get(n, r.id) ? await t.resourceServers.update(n, r.id, e) : await t.resourceServers.create(n, e), o.resourceServers.upserted += 1;
894
+ });
895
+ if (r.hooks) for (let r of e.hooks) !ge(r) || !r.hook_id || await Y(o.hooks, `hook ${r.hook_id}`, i, async () => {
896
+ let e = d.parse(r);
897
+ await t.hooks.get(n, r.hook_id) ? await t.hooks.update(n, r.hook_id, e) : await t.hooks.create(n, e), o.hooks.upserted += 1;
898
+ });
899
+ r.emailProvider && e.emailProvider && await Y(o.emailProvider, "email_provider", i, async () => {
900
+ let r = e.emailProvider;
901
+ await t.emailProviders.get(n) ? await t.emailProviders.update(n, r) : await t.emailProviders.create(n, r), o.emailProvider.upserted += 1;
902
+ }), r.branding && e.branding && await Y(o.branding, "branding", i, async () => {
903
+ await t.branding.set(n, e.branding), o.branding.upserted += 1;
904
+ }), r.promptSettings && e.promptSettings && await Y(o.promptSettings, "prompt_settings", i, async () => {
905
+ await t.promptSettings.set(n, e.promptSettings), o.promptSettings.upserted += 1;
906
+ });
907
+ }
908
+ async function X(e, t) {
909
+ let { controlPlaneTenantId: n, getControlPlaneAdapters: r, getAdapters: i, entities: a, continueOnError: o = !1 } = e, s = q(a), c = await _e(await r(), n, s), l = await i(t), u = he(t);
910
+ return await ve(c, l, n, s, o, u), u;
911
+ }
912
+ //#endregion
913
+ //#region src/rollout/payload.ts
914
+ function Z(e) {
915
+ let { pkcs7: t, tenant_id: n, ...r } = e;
916
+ return r;
917
+ }
918
+ async function ye(e, t, n = {}) {
919
+ let r = q(n), i = n.signingKeys ?? !0, a = await _e(e, t, r), o = i ? (await p(e.keys)).map(Z) : [];
920
+ return {
921
+ connections: a.connections,
922
+ resourceServers: a.resourceServers.filter((e) => e.is_system),
923
+ hooks: a.hooks.filter(ge),
924
+ emailProvider: a.emailProvider,
925
+ branding: a.branding,
926
+ promptSettings: a.promptSettings,
927
+ signingKeys: o
928
+ };
929
+ }
930
+ async function be(e, t, n) {
931
+ let r = J();
932
+ if (e.length === 0) return r;
933
+ let i = await p(t.keys), a = new Set(i.map((e) => e.kid));
934
+ for (let i of e) await Y(r, `signing_key ${i.kid}`, n, async () => {
935
+ let e = Z(i);
936
+ a.has(e.kid) || (await t.keys.create(e), a.add(e.kid), r.upserted += 1);
937
+ });
938
+ return r;
939
+ }
940
+ async function xe(e, t, n, r = {}) {
941
+ let a = r.continueOnError ?? !1, o = q(r.entities), s = r.entities?.signingKeys ?? !0, c = {
942
+ connections: e.connections,
943
+ resourceServers: e.resourceServers,
944
+ hooks: e.hooks,
945
+ emailProvider: e.emailProvider ? l.parse(e.emailProvider) : null,
946
+ branding: e.branding ? i.parse(e.branding) : null,
947
+ promptSettings: e.promptSettings ? m.parse(e.promptSettings) : null
948
+ }, u = he(n);
949
+ await ve(c, t, n, o, a, u);
950
+ let d = s ? await be(e.signingKeys, t, a) : J();
951
+ return {
952
+ ...u,
953
+ signingKeys: d
954
+ };
903
955
  }
904
956
  //#endregion
905
957
  //#region src/rollout/index.ts
906
- function ue(e) {
958
+ function Se(e) {
907
959
  return {
908
- syncDefaults: (t) => Z(e, t),
960
+ syncDefaults: (t) => X(e, t),
909
961
  syncDefaultsToTenants: async (t) => {
910
962
  let n = [];
911
- for (let r of t) n.push(await Z(e, r));
963
+ for (let r of t) n.push(await X(e, r));
912
964
  return n;
913
965
  }
914
966
  };
915
967
  }
916
968
  //#endregion
917
969
  //#region src/plugin.ts
918
- function de(e) {
970
+ function Ce(e) {
919
971
  let t = Q(e);
920
972
  return {
921
973
  name: "multi-tenancy",
922
- middleware: J(e),
974
+ middleware: K(e),
923
975
  hooks: t,
924
976
  routes: [{
925
977
  path: "/management",
926
- handler: M(e, t)
978
+ handler: j(e, t)
927
979
  }],
928
980
  onRegister: async () => {
929
981
  console.log("Multi-tenancy plugin registered"), e.accessControl && console.log(` - Access control enabled (control plane: ${e.accessControl.controlPlaneTenantId})`), e.subdomainRouting && console.log(` - Subdomain routing enabled (base domain: ${e.subdomainRouting.baseDomain})`), e.databaseIsolation && console.log(" - Database isolation enabled");
@@ -933,7 +985,7 @@ function de(e) {
933
985
  //#endregion
934
986
  //#region src/index.ts
935
987
  function Q(e) {
936
- let t = e.accessControl ? v(e.accessControl) : {}, n = e.databaseIsolation ? b(e.databaseIsolation) : {}, r = S(e);
988
+ let t = e.accessControl ? S(e.accessControl) : {}, n = e.databaseIsolation ? w(e.databaseIsolation) : {}, r = E(e);
937
989
  return {
938
990
  ...t,
939
991
  ...n,
@@ -942,19 +994,19 @@ function Q(e) {
942
994
  }
943
995
  function $(t) {
944
996
  let n = new e(), r = Q(t);
945
- return n.route("/tenants", M(t, r)), n;
997
+ return n.route("/tenants", j(t, r)), n;
946
998
  }
947
- function fe(e) {
999
+ function we(e) {
948
1000
  return {
949
1001
  hooks: Q(e),
950
- middleware: J(e),
1002
+ middleware: K(e),
951
1003
  app: $(e),
952
1004
  config: e,
953
- wrapAdapters: (t, n) => U(t, {
1005
+ wrapAdapters: (t, n) => V(t, {
954
1006
  controlPlaneTenantId: e.accessControl?.controlPlaneTenantId,
955
1007
  controlPlaneClientId: n?.controlPlaneClientId
956
1008
  })
957
1009
  };
958
1010
  }
959
1011
  //#endregion
960
- export { v as createAccessControlHooks, G as createAccessControlMiddleware, W as createControlPlaneTenantMiddleware, b as createDatabaseHooks, q as createDatabaseMiddleware, ue as createDirectRolloutAdapter, $ as createMultiTenancy, Q as createMultiTenancyHooks, J as createMultiTenancyMiddleware, de as createMultiTenancyPlugin, P as createProtectSyncedMiddleware, S as createProvisioningHooks, V as createRuntimeFallbackAdapter, K as createSubdomainMiddleware, j as createSyncHooks, M as createTenantsOpenAPIRouter, ce as initMultiTenant, oe as mergeClientWithFallback, Z as projectControlPlaneDefaults, fe as setupMultiTenancy, y as validateTenantAccess, U as withRuntimeFallback, B as withSystemResourceServerInheritance };
1012
+ export { xe as applyControlPlaneDefaultsPayload, ye as buildControlPlaneDefaultsPayload, S as createAccessControlHooks, U as createAccessControlMiddleware, H as createControlPlaneTenantMiddleware, w as createDatabaseHooks, G as createDatabaseMiddleware, Se as createDirectRolloutAdapter, $ as createMultiTenancy, Q as createMultiTenancyHooks, K as createMultiTenancyMiddleware, Ce as createMultiTenancyPlugin, M as createProtectSyncedMiddleware, E as createProvisioningHooks, z as createRuntimeFallbackAdapter, W as createSubdomainMiddleware, ie as createSyncHooks, j as createTenantsOpenAPIRouter, me as initMultiTenant, fe as mergeClientWithFallback, X as projectControlPlaneDefaults, we as setupMultiTenancy, C as validateTenantAccess, V as withRuntimeFallback, R as withSystemResourceServerInheritance };