@open-mercato/enterprise 0.4.6-develop-15c18897fc → 0.4.6-develop-34aa847ce6

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 (195) hide show
  1. package/dist/index.js +1 -1
  2. package/dist/index.js.map +2 -2
  3. package/dist/modules/sso/acl.js +11 -0
  4. package/dist/modules/sso/acl.js.map +7 -0
  5. package/dist/modules/sso/api/admin-context.js +27 -0
  6. package/dist/modules/sso/api/admin-context.js.map +7 -0
  7. package/dist/modules/sso/api/callback/oidc/route.js +103 -0
  8. package/dist/modules/sso/api/callback/oidc/route.js.map +7 -0
  9. package/dist/modules/sso/api/config/[id]/activate/route.js +49 -0
  10. package/dist/modules/sso/api/config/[id]/activate/route.js.map +7 -0
  11. package/dist/modules/sso/api/config/[id]/domains/route.js +96 -0
  12. package/dist/modules/sso/api/config/[id]/domains/route.js.map +7 -0
  13. package/dist/modules/sso/api/config/[id]/route.js +103 -0
  14. package/dist/modules/sso/api/config/[id]/route.js.map +7 -0
  15. package/dist/modules/sso/api/config/[id]/test/route.js +41 -0
  16. package/dist/modules/sso/api/config/[id]/test/route.js.map +7 -0
  17. package/dist/modules/sso/api/config/route.js +83 -0
  18. package/dist/modules/sso/api/config/route.js.map +7 -0
  19. package/dist/modules/sso/api/error-handler.js +28 -0
  20. package/dist/modules/sso/api/error-handler.js.map +7 -0
  21. package/dist/modules/sso/api/hrd/route.js +52 -0
  22. package/dist/modules/sso/api/hrd/route.js.map +7 -0
  23. package/dist/modules/sso/api/initiate/route.js +66 -0
  24. package/dist/modules/sso/api/initiate/route.js.map +7 -0
  25. package/dist/modules/sso/api/scim/context.js +68 -0
  26. package/dist/modules/sso/api/scim/context.js.map +7 -0
  27. package/dist/modules/sso/api/scim/logs/route.js +65 -0
  28. package/dist/modules/sso/api/scim/logs/route.js.map +7 -0
  29. package/dist/modules/sso/api/scim/tokens/[id]/route.js +42 -0
  30. package/dist/modules/sso/api/scim/tokens/[id]/route.js.map +7 -0
  31. package/dist/modules/sso/api/scim/tokens/route.js +83 -0
  32. package/dist/modules/sso/api/scim/tokens/route.js.map +7 -0
  33. package/dist/modules/sso/api/scim/v2/ServiceProviderConfig/route.js +42 -0
  34. package/dist/modules/sso/api/scim/v2/ServiceProviderConfig/route.js.map +7 -0
  35. package/dist/modules/sso/api/scim/v2/Users/[id]/route.js +94 -0
  36. package/dist/modules/sso/api/scim/v2/Users/[id]/route.js.map +7 -0
  37. package/dist/modules/sso/api/scim/v2/Users/route.js +86 -0
  38. package/dist/modules/sso/api/scim/v2/Users/route.js.map +7 -0
  39. package/dist/modules/sso/backend/page.js +173 -0
  40. package/dist/modules/sso/backend/page.js.map +7 -0
  41. package/dist/modules/sso/backend/page.meta.js +31 -0
  42. package/dist/modules/sso/backend/page.meta.js.map +7 -0
  43. package/dist/modules/sso/backend/sso/config/[id]/page.js +749 -0
  44. package/dist/modules/sso/backend/sso/config/[id]/page.js.map +7 -0
  45. package/dist/modules/sso/backend/sso/config/[id]/page.meta.js +19 -0
  46. package/dist/modules/sso/backend/sso/config/[id]/page.meta.js.map +7 -0
  47. package/dist/modules/sso/backend/sso/config/new/page.js +381 -0
  48. package/dist/modules/sso/backend/sso/config/new/page.js.map +7 -0
  49. package/dist/modules/sso/backend/sso/config/new/page.meta.js +19 -0
  50. package/dist/modules/sso/backend/sso/config/new/page.meta.js.map +7 -0
  51. package/dist/modules/sso/data/entities.js +299 -0
  52. package/dist/modules/sso/data/entities.js.map +7 -0
  53. package/dist/modules/sso/data/validators.js +114 -0
  54. package/dist/modules/sso/data/validators.js.map +7 -0
  55. package/dist/modules/sso/di.js +26 -0
  56. package/dist/modules/sso/di.js.map +7 -0
  57. package/dist/modules/sso/events.js +24 -0
  58. package/dist/modules/sso/events.js.map +7 -0
  59. package/dist/modules/sso/i18n/de.json +146 -0
  60. package/dist/modules/sso/i18n/en.json +146 -0
  61. package/dist/modules/sso/i18n/es.json +146 -0
  62. package/dist/modules/sso/i18n/pl.json +146 -0
  63. package/dist/modules/sso/index.js +11 -0
  64. package/dist/modules/sso/index.js.map +7 -0
  65. package/dist/modules/sso/lib/domains.js +30 -0
  66. package/dist/modules/sso/lib/domains.js.map +7 -0
  67. package/dist/modules/sso/lib/oidc-provider.js +140 -0
  68. package/dist/modules/sso/lib/oidc-provider.js.map +7 -0
  69. package/dist/modules/sso/lib/registry.js +15 -0
  70. package/dist/modules/sso/lib/registry.js.map +7 -0
  71. package/dist/modules/sso/lib/scim-filter.js +43 -0
  72. package/dist/modules/sso/lib/scim-filter.js.map +7 -0
  73. package/dist/modules/sso/lib/scim-mapper.js +49 -0
  74. package/dist/modules/sso/lib/scim-mapper.js.map +7 -0
  75. package/dist/modules/sso/lib/scim-patch.js +63 -0
  76. package/dist/modules/sso/lib/scim-patch.js.map +7 -0
  77. package/dist/modules/sso/lib/scim-response.js +34 -0
  78. package/dist/modules/sso/lib/scim-response.js.map +7 -0
  79. package/dist/modules/sso/lib/scim-utils.js +9 -0
  80. package/dist/modules/sso/lib/scim-utils.js.map +7 -0
  81. package/dist/modules/sso/lib/state-cookie.js +67 -0
  82. package/dist/modules/sso/lib/state-cookie.js.map +7 -0
  83. package/dist/modules/sso/lib/types.js +1 -0
  84. package/dist/modules/sso/lib/types.js.map +7 -0
  85. package/dist/modules/sso/migrations/Migration20260219000000_sso.js +20 -0
  86. package/dist/modules/sso/migrations/Migration20260219000000_sso.js.map +7 -0
  87. package/dist/modules/sso/migrations/Migration20260222000000_sso_add_name.js +13 -0
  88. package/dist/modules/sso/migrations/Migration20260222000000_sso_add_name.js.map +7 -0
  89. package/dist/modules/sso/migrations/Migration20260222000001_sso_partial_unique_org.js +15 -0
  90. package/dist/modules/sso/migrations/Migration20260222000001_sso_partial_unique_org.js.map +7 -0
  91. package/dist/modules/sso/migrations/Migration20260223000000_scim_tables.js +22 -0
  92. package/dist/modules/sso/migrations/Migration20260223000000_scim_tables.js.map +7 -0
  93. package/dist/modules/sso/migrations/Migration20260224000000_sso_external_id.js +15 -0
  94. package/dist/modules/sso/migrations/Migration20260224000000_sso_external_id.js.map +7 -0
  95. package/dist/modules/sso/migrations/Migration20260224100000_sso_role_grants.js +17 -0
  96. package/dist/modules/sso/migrations/Migration20260224100000_sso_role_grants.js.map +7 -0
  97. package/dist/modules/sso/migrations/Migration20260224200000_drop_default_role_id.js +13 -0
  98. package/dist/modules/sso/migrations/Migration20260224200000_drop_default_role_id.js.map +7 -0
  99. package/dist/modules/sso/migrations/Migration20260225000000_sso_identities_partial_unique.js +23 -0
  100. package/dist/modules/sso/migrations/Migration20260225000000_sso_identities_partial_unique.js.map +7 -0
  101. package/dist/modules/sso/migrations/Migration20260305000000_sso_role_grants_org_id.js +14 -0
  102. package/dist/modules/sso/migrations/Migration20260305000000_sso_role_grants_org_id.js.map +7 -0
  103. package/dist/modules/sso/services/accountLinkingService.js +298 -0
  104. package/dist/modules/sso/services/accountLinkingService.js.map +7 -0
  105. package/dist/modules/sso/services/hrdService.js +18 -0
  106. package/dist/modules/sso/services/hrdService.js.map +7 -0
  107. package/dist/modules/sso/services/scimService.js +372 -0
  108. package/dist/modules/sso/services/scimService.js.map +7 -0
  109. package/dist/modules/sso/services/scimTokenService.js +94 -0
  110. package/dist/modules/sso/services/scimTokenService.js.map +7 -0
  111. package/dist/modules/sso/services/ssoConfigService.js +254 -0
  112. package/dist/modules/sso/services/ssoConfigService.js.map +7 -0
  113. package/dist/modules/sso/services/ssoService.js +125 -0
  114. package/dist/modules/sso/services/ssoService.js.map +7 -0
  115. package/dist/modules/sso/setup.js +47 -0
  116. package/dist/modules/sso/setup.js.map +7 -0
  117. package/dist/modules/sso/subscribers/user-deleted-cleanup.js +21 -0
  118. package/dist/modules/sso/subscribers/user-deleted-cleanup.js.map +7 -0
  119. package/dist/modules/sso/widgets/injection/login-sso/widget.client.js +106 -0
  120. package/dist/modules/sso/widgets/injection/login-sso/widget.client.js.map +7 -0
  121. package/dist/modules/sso/widgets/injection/login-sso/widget.js +16 -0
  122. package/dist/modules/sso/widgets/injection/login-sso/widget.js.map +7 -0
  123. package/dist/modules/sso/widgets/injection-table.js +14 -0
  124. package/dist/modules/sso/widgets/injection-table.js.map +7 -0
  125. package/package.json +5 -4
  126. package/src/index.ts +1 -1
  127. package/src/modules/sso/acl.ts +7 -0
  128. package/src/modules/sso/api/admin-context.ts +36 -0
  129. package/src/modules/sso/api/callback/oidc/route.ts +115 -0
  130. package/src/modules/sso/api/config/[id]/activate/route.ts +53 -0
  131. package/src/modules/sso/api/config/[id]/domains/route.ts +107 -0
  132. package/src/modules/sso/api/config/[id]/route.ts +114 -0
  133. package/src/modules/sso/api/config/[id]/test/route.ts +44 -0
  134. package/src/modules/sso/api/config/route.ts +88 -0
  135. package/src/modules/sso/api/error-handler.ts +36 -0
  136. package/src/modules/sso/api/hrd/route.ts +55 -0
  137. package/src/modules/sso/api/initiate/route.ts +70 -0
  138. package/src/modules/sso/api/scim/context.ts +85 -0
  139. package/src/modules/sso/api/scim/logs/route.ts +69 -0
  140. package/src/modules/sso/api/scim/tokens/[id]/route.ts +45 -0
  141. package/src/modules/sso/api/scim/tokens/route.ts +89 -0
  142. package/src/modules/sso/api/scim/v2/ServiceProviderConfig/route.ts +40 -0
  143. package/src/modules/sso/api/scim/v2/Users/[id]/route.ts +103 -0
  144. package/src/modules/sso/api/scim/v2/Users/route.ts +94 -0
  145. package/src/modules/sso/backend/page.meta.ts +29 -0
  146. package/src/modules/sso/backend/page.tsx +232 -0
  147. package/src/modules/sso/backend/sso/config/[id]/page.meta.ts +15 -0
  148. package/src/modules/sso/backend/sso/config/[id]/page.tsx +1024 -0
  149. package/src/modules/sso/backend/sso/config/new/page.meta.ts +15 -0
  150. package/src/modules/sso/backend/sso/config/new/page.tsx +463 -0
  151. package/src/modules/sso/data/entities.ts +240 -0
  152. package/src/modules/sso/data/validators.ts +140 -0
  153. package/src/modules/sso/di.ts +25 -0
  154. package/src/modules/sso/docs/entra-id-setup.md +281 -0
  155. package/src/modules/sso/docs/google-workspace-setup.md +174 -0
  156. package/src/modules/sso/docs/sso-overview.md +218 -0
  157. package/src/modules/sso/docs/sso-security-audit-2026-02-27.md +118 -0
  158. package/src/modules/sso/docs/zitadel-setup.md +195 -0
  159. package/src/modules/sso/events.ts +21 -0
  160. package/src/modules/sso/i18n/de.json +146 -0
  161. package/src/modules/sso/i18n/en.json +146 -0
  162. package/src/modules/sso/i18n/es.json +146 -0
  163. package/src/modules/sso/i18n/pl.json +146 -0
  164. package/src/modules/sso/index.ts +7 -0
  165. package/src/modules/sso/lib/domains.ts +31 -0
  166. package/src/modules/sso/lib/oidc-provider.ts +196 -0
  167. package/src/modules/sso/lib/registry.ts +13 -0
  168. package/src/modules/sso/lib/scim-filter.ts +62 -0
  169. package/src/modules/sso/lib/scim-mapper.ts +88 -0
  170. package/src/modules/sso/lib/scim-patch.ts +88 -0
  171. package/src/modules/sso/lib/scim-response.ts +40 -0
  172. package/src/modules/sso/lib/scim-utils.ts +5 -0
  173. package/src/modules/sso/lib/state-cookie.ts +79 -0
  174. package/src/modules/sso/lib/types.ts +50 -0
  175. package/src/modules/sso/migrations/.snapshot-open-mercato.json +912 -0
  176. package/src/modules/sso/migrations/Migration20260219000000_sso.ts +21 -0
  177. package/src/modules/sso/migrations/Migration20260222000000_sso_add_name.ts +13 -0
  178. package/src/modules/sso/migrations/Migration20260222000001_sso_partial_unique_org.ts +15 -0
  179. package/src/modules/sso/migrations/Migration20260223000000_scim_tables.ts +24 -0
  180. package/src/modules/sso/migrations/Migration20260224000000_sso_external_id.ts +15 -0
  181. package/src/modules/sso/migrations/Migration20260224100000_sso_role_grants.ts +18 -0
  182. package/src/modules/sso/migrations/Migration20260224200000_drop_default_role_id.ts +13 -0
  183. package/src/modules/sso/migrations/Migration20260225000000_sso_identities_partial_unique.ts +25 -0
  184. package/src/modules/sso/migrations/Migration20260305000000_sso_role_grants_org_id.ts +14 -0
  185. package/src/modules/sso/services/accountLinkingService.ts +386 -0
  186. package/src/modules/sso/services/hrdService.ts +22 -0
  187. package/src/modules/sso/services/scimService.ts +461 -0
  188. package/src/modules/sso/services/scimTokenService.ts +136 -0
  189. package/src/modules/sso/services/ssoConfigService.ts +337 -0
  190. package/src/modules/sso/services/ssoService.ts +167 -0
  191. package/src/modules/sso/setup.ts +56 -0
  192. package/src/modules/sso/subscribers/user-deleted-cleanup.ts +33 -0
  193. package/src/modules/sso/widgets/injection/login-sso/widget.client.tsx +130 -0
  194. package/src/modules/sso/widgets/injection/login-sso/widget.ts +16 -0
  195. package/src/modules/sso/widgets/injection-table.ts +12 -0
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../src/modules/sso/lib/scim-response.ts"],
4
+ "sourcesContent": ["export const SCIM_CONTENT_TYPE = 'application/scim+json'\n\nconst SCIM_ERROR_SCHEMA = 'urn:ietf:params:scim:api:messages:2.0:Error'\nconst SCIM_LIST_SCHEMA = 'urn:ietf:params:scim:api:messages:2.0:ListResponse'\n\nexport function scimJson(data: unknown, status = 200): Response {\n return new Response(JSON.stringify(data), {\n status,\n headers: { 'Content-Type': SCIM_CONTENT_TYPE },\n })\n}\n\nexport function buildScimError(\n status: number,\n detail: string,\n scimType?: string,\n): Record<string, unknown> {\n const body: Record<string, unknown> = {\n schemas: [SCIM_ERROR_SCHEMA],\n status: String(status),\n detail,\n }\n if (scimType) body.scimType = scimType\n return body\n}\n\nexport function buildListResponse(\n resources: unknown[],\n totalResults: number,\n startIndex: number,\n itemsPerPage: number,\n): Record<string, unknown> {\n return {\n schemas: [SCIM_LIST_SCHEMA],\n totalResults,\n startIndex,\n itemsPerPage,\n Resources: resources,\n }\n}\n"],
5
+ "mappings": "AAAO,MAAM,oBAAoB;AAEjC,MAAM,oBAAoB;AAC1B,MAAM,mBAAmB;AAElB,SAAS,SAAS,MAAe,SAAS,KAAe;AAC9D,SAAO,IAAI,SAAS,KAAK,UAAU,IAAI,GAAG;AAAA,IACxC;AAAA,IACA,SAAS,EAAE,gBAAgB,kBAAkB;AAAA,EAC/C,CAAC;AACH;AAEO,SAAS,eACd,QACA,QACA,UACyB;AACzB,QAAM,OAAgC;AAAA,IACpC,SAAS,CAAC,iBAAiB;AAAA,IAC3B,QAAQ,OAAO,MAAM;AAAA,IACrB;AAAA,EACF;AACA,MAAI,SAAU,MAAK,WAAW;AAC9B,SAAO;AACT;AAEO,SAAS,kBACd,WACA,cACA,YACA,cACyB;AACzB,SAAO;AAAA,IACL,SAAS,CAAC,gBAAgB;AAAA,IAC1B;AAAA,IACA;AAAA,IACA;AAAA,IACA,WAAW;AAAA,EACb;AACF;",
6
+ "names": []
7
+ }
@@ -0,0 +1,9 @@
1
+ function coerceBoolean(value) {
2
+ if (typeof value === "boolean") return value;
3
+ if (typeof value === "string") return value.toLowerCase() === "true";
4
+ return Boolean(value);
5
+ }
6
+ export {
7
+ coerceBoolean
8
+ };
9
+ //# sourceMappingURL=scim-utils.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../src/modules/sso/lib/scim-utils.ts"],
4
+ "sourcesContent": ["export function coerceBoolean(value: unknown): boolean {\n if (typeof value === 'boolean') return value\n if (typeof value === 'string') return value.toLowerCase() === 'true'\n return Boolean(value)\n}\n"],
5
+ "mappings": "AAAO,SAAS,cAAc,OAAyB;AACrD,MAAI,OAAO,UAAU,UAAW,QAAO;AACvC,MAAI,OAAO,UAAU,SAAU,QAAO,MAAM,YAAY,MAAM;AAC9D,SAAO,QAAQ,KAAK;AACtB;",
6
+ "names": []
7
+ }
@@ -0,0 +1,67 @@
1
+ import crypto from "node:crypto";
2
+ const ALGORITHM = "aes-256-gcm";
3
+ const IV_LENGTH = 12;
4
+ const TAG_LENGTH = 16;
5
+ const TTL_MS = 5 * 60 * 1e3;
6
+ const HKDF_SALT = Buffer.from("open-mercato-sso-state-v1");
7
+ const HKDF_INFO = Buffer.from("sso-state-cookie");
8
+ function deriveKey(secret) {
9
+ return Buffer.from(crypto.hkdfSync("sha256", secret, HKDF_SALT, HKDF_INFO, 32));
10
+ }
11
+ function getSecret() {
12
+ const secret = process.env.SSO_STATE_SECRET || process.env.JWT_SECRET;
13
+ if (!secret) throw new Error("SSO_STATE_SECRET or JWT_SECRET must be set");
14
+ return secret;
15
+ }
16
+ function encryptStateCookie(payload) {
17
+ const secret = getSecret();
18
+ const key = deriveKey(secret);
19
+ const iv = crypto.randomBytes(IV_LENGTH);
20
+ const json = JSON.stringify(payload);
21
+ const cipher = crypto.createCipheriv(ALGORITHM, key, iv);
22
+ const ciphertext = Buffer.concat([cipher.update(json, "utf8"), cipher.final()]);
23
+ const tag = cipher.getAuthTag();
24
+ const combined = Buffer.concat([iv, tag, ciphertext]);
25
+ return combined.toString("base64url");
26
+ }
27
+ function decryptStateCookie(cookie) {
28
+ try {
29
+ const secret = getSecret();
30
+ const key = deriveKey(secret);
31
+ const combined = Buffer.from(cookie, "base64url");
32
+ if (combined.length < IV_LENGTH + TAG_LENGTH) return null;
33
+ const iv = combined.subarray(0, IV_LENGTH);
34
+ const tag = combined.subarray(IV_LENGTH, IV_LENGTH + TAG_LENGTH);
35
+ const ciphertext = combined.subarray(IV_LENGTH + TAG_LENGTH);
36
+ const decipher = crypto.createDecipheriv(ALGORITHM, key, iv);
37
+ decipher.setAuthTag(tag);
38
+ const decrypted = Buffer.concat([decipher.update(ciphertext), decipher.final()]).toString("utf8");
39
+ const payload = JSON.parse(decrypted);
40
+ if (payload.expiresAt < Date.now()) return null;
41
+ return payload;
42
+ } catch {
43
+ return null;
44
+ }
45
+ }
46
+ function createFlowState(params) {
47
+ const state = crypto.randomBytes(32).toString("base64url");
48
+ const nonce = crypto.randomBytes(16).toString("base64url");
49
+ const codeVerifier = crypto.randomBytes(32).toString("base64url");
50
+ return {
51
+ state: {
52
+ state,
53
+ nonce,
54
+ codeVerifier,
55
+ configId: params.configId,
56
+ returnUrl: params.returnUrl,
57
+ expiresAt: Date.now() + TTL_MS
58
+ },
59
+ codeVerifier
60
+ };
61
+ }
62
+ export {
63
+ createFlowState,
64
+ decryptStateCookie,
65
+ encryptStateCookie
66
+ };
67
+ //# sourceMappingURL=state-cookie.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../src/modules/sso/lib/state-cookie.ts"],
4
+ "sourcesContent": ["import crypto from 'node:crypto'\nimport type { SsoFlowState } from './types'\n\nconst ALGORITHM = 'aes-256-gcm'\nconst IV_LENGTH = 12\nconst TAG_LENGTH = 16\nconst TTL_MS = 5 * 60 * 1000\nconst HKDF_SALT = Buffer.from('open-mercato-sso-state-v1')\nconst HKDF_INFO = Buffer.from('sso-state-cookie')\n\nfunction deriveKey(secret: string): Buffer {\n return Buffer.from(crypto.hkdfSync('sha256', secret, HKDF_SALT, HKDF_INFO, 32))\n}\n\nfunction getSecret(): string {\n const secret = process.env.SSO_STATE_SECRET || process.env.JWT_SECRET\n if (!secret) throw new Error('SSO_STATE_SECRET or JWT_SECRET must be set')\n return secret\n}\n\nexport function encryptStateCookie(payload: SsoFlowState): string {\n const secret = getSecret()\n const key = deriveKey(secret)\n const iv = crypto.randomBytes(IV_LENGTH)\n const json = JSON.stringify(payload)\n\n const cipher = crypto.createCipheriv(ALGORITHM, key, iv)\n const ciphertext = Buffer.concat([cipher.update(json, 'utf8'), cipher.final()])\n const tag = cipher.getAuthTag()\n\n const combined = Buffer.concat([iv, tag, ciphertext])\n return combined.toString('base64url')\n}\n\nexport function decryptStateCookie(cookie: string): SsoFlowState | null {\n try {\n const secret = getSecret()\n const key = deriveKey(secret)\n const combined = Buffer.from(cookie, 'base64url')\n\n if (combined.length < IV_LENGTH + TAG_LENGTH) return null\n\n const iv = combined.subarray(0, IV_LENGTH)\n const tag = combined.subarray(IV_LENGTH, IV_LENGTH + TAG_LENGTH)\n const ciphertext = combined.subarray(IV_LENGTH + TAG_LENGTH)\n\n const decipher = crypto.createDecipheriv(ALGORITHM, key, iv)\n decipher.setAuthTag(tag)\n const decrypted = Buffer.concat([decipher.update(ciphertext), decipher.final()]).toString('utf8')\n\n const payload = JSON.parse(decrypted) as SsoFlowState\n if (payload.expiresAt < Date.now()) return null\n\n return payload\n } catch {\n return null\n }\n}\n\nexport function createFlowState(params: {\n configId: string\n returnUrl: string\n}): { state: SsoFlowState; codeVerifier: string } {\n const state = crypto.randomBytes(32).toString('base64url')\n const nonce = crypto.randomBytes(16).toString('base64url')\n const codeVerifier = crypto.randomBytes(32).toString('base64url')\n\n return {\n state: {\n state,\n nonce,\n codeVerifier,\n configId: params.configId,\n returnUrl: params.returnUrl,\n expiresAt: Date.now() + TTL_MS,\n },\n codeVerifier,\n }\n}\n"],
5
+ "mappings": "AAAA,OAAO,YAAY;AAGnB,MAAM,YAAY;AAClB,MAAM,YAAY;AAClB,MAAM,aAAa;AACnB,MAAM,SAAS,IAAI,KAAK;AACxB,MAAM,YAAY,OAAO,KAAK,2BAA2B;AACzD,MAAM,YAAY,OAAO,KAAK,kBAAkB;AAEhD,SAAS,UAAU,QAAwB;AACzC,SAAO,OAAO,KAAK,OAAO,SAAS,UAAU,QAAQ,WAAW,WAAW,EAAE,CAAC;AAChF;AAEA,SAAS,YAAoB;AAC3B,QAAM,SAAS,QAAQ,IAAI,oBAAoB,QAAQ,IAAI;AAC3D,MAAI,CAAC,OAAQ,OAAM,IAAI,MAAM,4CAA4C;AACzE,SAAO;AACT;AAEO,SAAS,mBAAmB,SAA+B;AAChE,QAAM,SAAS,UAAU;AACzB,QAAM,MAAM,UAAU,MAAM;AAC5B,QAAM,KAAK,OAAO,YAAY,SAAS;AACvC,QAAM,OAAO,KAAK,UAAU,OAAO;AAEnC,QAAM,SAAS,OAAO,eAAe,WAAW,KAAK,EAAE;AACvD,QAAM,aAAa,OAAO,OAAO,CAAC,OAAO,OAAO,MAAM,MAAM,GAAG,OAAO,MAAM,CAAC,CAAC;AAC9E,QAAM,MAAM,OAAO,WAAW;AAE9B,QAAM,WAAW,OAAO,OAAO,CAAC,IAAI,KAAK,UAAU,CAAC;AACpD,SAAO,SAAS,SAAS,WAAW;AACtC;AAEO,SAAS,mBAAmB,QAAqC;AACtE,MAAI;AACF,UAAM,SAAS,UAAU;AACzB,UAAM,MAAM,UAAU,MAAM;AAC5B,UAAM,WAAW,OAAO,KAAK,QAAQ,WAAW;AAEhD,QAAI,SAAS,SAAS,YAAY,WAAY,QAAO;AAErD,UAAM,KAAK,SAAS,SAAS,GAAG,SAAS;AACzC,UAAM,MAAM,SAAS,SAAS,WAAW,YAAY,UAAU;AAC/D,UAAM,aAAa,SAAS,SAAS,YAAY,UAAU;AAE3D,UAAM,WAAW,OAAO,iBAAiB,WAAW,KAAK,EAAE;AAC3D,aAAS,WAAW,GAAG;AACvB,UAAM,YAAY,OAAO,OAAO,CAAC,SAAS,OAAO,UAAU,GAAG,SAAS,MAAM,CAAC,CAAC,EAAE,SAAS,MAAM;AAEhG,UAAM,UAAU,KAAK,MAAM,SAAS;AACpC,QAAI,QAAQ,YAAY,KAAK,IAAI,EAAG,QAAO;AAE3C,WAAO;AAAA,EACT,QAAQ;AACN,WAAO;AAAA,EACT;AACF;AAEO,SAAS,gBAAgB,QAGkB;AAChD,QAAM,QAAQ,OAAO,YAAY,EAAE,EAAE,SAAS,WAAW;AACzD,QAAM,QAAQ,OAAO,YAAY,EAAE,EAAE,SAAS,WAAW;AACzD,QAAM,eAAe,OAAO,YAAY,EAAE,EAAE,SAAS,WAAW;AAEhE,SAAO;AAAA,IACL,OAAO;AAAA,MACL;AAAA,MACA;AAAA,MACA;AAAA,MACA,UAAU,OAAO;AAAA,MACjB,WAAW,OAAO;AAAA,MAClB,WAAW,KAAK,IAAI,IAAI;AAAA,IAC1B;AAAA,IACA;AAAA,EACF;AACF;",
6
+ "names": []
7
+ }
@@ -0,0 +1 @@
1
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": [],
4
+ "sourcesContent": [],
5
+ "mappings": "",
6
+ "names": []
7
+ }
@@ -0,0 +1,20 @@
1
+ import { Migration } from "@mikro-orm/migrations";
2
+ class Migration20260219000000_sso extends Migration {
3
+ async up() {
4
+ this.addSql(`create table "sso_configs" ("id" uuid not null default gen_random_uuid(), "tenant_id" uuid null, "organization_id" uuid not null, "protocol" text not null, "issuer" text null, "client_id" text null, "client_secret_enc" text null, "allowed_domains" jsonb not null default '[]', "jit_enabled" boolean not null default true, "auto_link_by_email" boolean not null default true, "is_active" boolean not null default false, "sso_required" boolean not null default false, "default_role_id" uuid null, "created_at" timestamptz not null, "updated_at" timestamptz not null, "deleted_at" timestamptz null, constraint "sso_configs_pkey" primary key ("id"));`);
5
+ this.addSql(`alter table "sso_configs" add constraint "sso_configs_organization_id_unique" unique ("organization_id");`);
6
+ this.addSql(`create table "sso_identities" ("id" uuid not null default gen_random_uuid(), "tenant_id" uuid null, "organization_id" uuid not null, "sso_config_id" uuid not null, "user_id" uuid not null, "idp_subject" text not null, "idp_email" text not null, "idp_name" text null, "idp_groups" jsonb not null default '[]', "provisioning_method" text not null, "first_login_at" timestamptz null, "last_login_at" timestamptz null, "created_at" timestamptz not null, "updated_at" timestamptz not null, "deleted_at" timestamptz null, constraint "sso_identities_pkey" primary key ("id"));`);
7
+ this.addSql(`alter table "sso_identities" add constraint "sso_identities_config_user_unique" unique ("sso_config_id", "user_id");`);
8
+ this.addSql(`alter table "sso_identities" add constraint "sso_identities_config_subject_unique" unique ("sso_config_id", "idp_subject");`);
9
+ this.addSql(`create index "sso_identities_config_id_idx" on "sso_identities" ("sso_config_id");`);
10
+ this.addSql(`create index "sso_identities_user_id_idx" on "sso_identities" ("user_id");`);
11
+ }
12
+ async down() {
13
+ this.addSql(`drop table if exists "sso_configs" cascade;`);
14
+ this.addSql(`drop table if exists "sso_identities" cascade;`);
15
+ }
16
+ }
17
+ export {
18
+ Migration20260219000000_sso
19
+ };
20
+ //# sourceMappingURL=Migration20260219000000_sso.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../src/modules/sso/migrations/Migration20260219000000_sso.ts"],
4
+ "sourcesContent": ["import { Migration } from '@mikro-orm/migrations';\n\nexport class Migration20260219000000_sso extends Migration {\n\n override async up(): Promise<void> {\n this.addSql(`create table \"sso_configs\" (\"id\" uuid not null default gen_random_uuid(), \"tenant_id\" uuid null, \"organization_id\" uuid not null, \"protocol\" text not null, \"issuer\" text null, \"client_id\" text null, \"client_secret_enc\" text null, \"allowed_domains\" jsonb not null default '[]', \"jit_enabled\" boolean not null default true, \"auto_link_by_email\" boolean not null default true, \"is_active\" boolean not null default false, \"sso_required\" boolean not null default false, \"default_role_id\" uuid null, \"created_at\" timestamptz not null, \"updated_at\" timestamptz not null, \"deleted_at\" timestamptz null, constraint \"sso_configs_pkey\" primary key (\"id\"));`);\n this.addSql(`alter table \"sso_configs\" add constraint \"sso_configs_organization_id_unique\" unique (\"organization_id\");`);\n\n this.addSql(`create table \"sso_identities\" (\"id\" uuid not null default gen_random_uuid(), \"tenant_id\" uuid null, \"organization_id\" uuid not null, \"sso_config_id\" uuid not null, \"user_id\" uuid not null, \"idp_subject\" text not null, \"idp_email\" text not null, \"idp_name\" text null, \"idp_groups\" jsonb not null default '[]', \"provisioning_method\" text not null, \"first_login_at\" timestamptz null, \"last_login_at\" timestamptz null, \"created_at\" timestamptz not null, \"updated_at\" timestamptz not null, \"deleted_at\" timestamptz null, constraint \"sso_identities_pkey\" primary key (\"id\"));`);\n this.addSql(`alter table \"sso_identities\" add constraint \"sso_identities_config_user_unique\" unique (\"sso_config_id\", \"user_id\");`);\n this.addSql(`alter table \"sso_identities\" add constraint \"sso_identities_config_subject_unique\" unique (\"sso_config_id\", \"idp_subject\");`);\n this.addSql(`create index \"sso_identities_config_id_idx\" on \"sso_identities\" (\"sso_config_id\");`);\n this.addSql(`create index \"sso_identities_user_id_idx\" on \"sso_identities\" (\"user_id\");`);\n }\n\n override async down(): Promise<void> {\n this.addSql(`drop table if exists \"sso_configs\" cascade;`);\n this.addSql(`drop table if exists \"sso_identities\" cascade;`);\n }\n\n}\n"],
5
+ "mappings": "AAAA,SAAS,iBAAiB;AAEnB,MAAM,oCAAoC,UAAU;AAAA,EAEzD,MAAe,KAAoB;AACjC,SAAK,OAAO,uoBAAuoB;AACnpB,SAAK,OAAO,2GAA2G;AAEvH,SAAK,OAAO,2jBAA2jB;AACvkB,SAAK,OAAO,sHAAsH;AAClI,SAAK,OAAO,6HAA6H;AACzI,SAAK,OAAO,oFAAoF;AAChG,SAAK,OAAO,4EAA4E;AAAA,EAC1F;AAAA,EAEA,MAAe,OAAsB;AACnC,SAAK,OAAO,6CAA6C;AACzD,SAAK,OAAO,gDAAgD;AAAA,EAC9D;AAEF;",
6
+ "names": []
7
+ }
@@ -0,0 +1,13 @@
1
+ import { Migration } from "@mikro-orm/migrations";
2
+ class Migration20260222000000_sso_add_name extends Migration {
3
+ async up() {
4
+ this.addSql(`alter table "sso_configs" add column "name" text null;`);
5
+ }
6
+ async down() {
7
+ this.addSql(`alter table "sso_configs" drop column "name";`);
8
+ }
9
+ }
10
+ export {
11
+ Migration20260222000000_sso_add_name
12
+ };
13
+ //# sourceMappingURL=Migration20260222000000_sso_add_name.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../src/modules/sso/migrations/Migration20260222000000_sso_add_name.ts"],
4
+ "sourcesContent": ["import { Migration } from '@mikro-orm/migrations';\n\nexport class Migration20260222000000_sso_add_name extends Migration {\n\n override async up(): Promise<void> {\n this.addSql(`alter table \"sso_configs\" add column \"name\" text null;`);\n }\n\n override async down(): Promise<void> {\n this.addSql(`alter table \"sso_configs\" drop column \"name\";`);\n }\n\n}\n"],
5
+ "mappings": "AAAA,SAAS,iBAAiB;AAEnB,MAAM,6CAA6C,UAAU;AAAA,EAElE,MAAe,KAAoB;AACjC,SAAK,OAAO,wDAAwD;AAAA,EACtE;AAAA,EAEA,MAAe,OAAsB;AACnC,SAAK,OAAO,+CAA+C;AAAA,EAC7D;AAEF;",
6
+ "names": []
7
+ }
@@ -0,0 +1,15 @@
1
+ import { Migration } from "@mikro-orm/migrations";
2
+ class Migration20260222000001_sso_partial_unique_org extends Migration {
3
+ async up() {
4
+ this.addSql(`alter table "sso_configs" drop constraint "sso_configs_organization_id_unique";`);
5
+ this.addSql(`create unique index "sso_configs_organization_id_unique" on "sso_configs" ("organization_id") where "deleted_at" is null;`);
6
+ }
7
+ async down() {
8
+ this.addSql(`drop index "sso_configs_organization_id_unique";`);
9
+ this.addSql(`alter table "sso_configs" add constraint "sso_configs_organization_id_unique" unique ("organization_id");`);
10
+ }
11
+ }
12
+ export {
13
+ Migration20260222000001_sso_partial_unique_org
14
+ };
15
+ //# sourceMappingURL=Migration20260222000001_sso_partial_unique_org.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../src/modules/sso/migrations/Migration20260222000001_sso_partial_unique_org.ts"],
4
+ "sourcesContent": ["import { Migration } from '@mikro-orm/migrations';\n\nexport class Migration20260222000001_sso_partial_unique_org extends Migration {\n\n override async up(): Promise<void> {\n this.addSql(`alter table \"sso_configs\" drop constraint \"sso_configs_organization_id_unique\";`);\n this.addSql(`create unique index \"sso_configs_organization_id_unique\" on \"sso_configs\" (\"organization_id\") where \"deleted_at\" is null;`);\n }\n\n override async down(): Promise<void> {\n this.addSql(`drop index \"sso_configs_organization_id_unique\";`);\n this.addSql(`alter table \"sso_configs\" add constraint \"sso_configs_organization_id_unique\" unique (\"organization_id\");`);\n }\n\n}\n"],
5
+ "mappings": "AAAA,SAAS,iBAAiB;AAEnB,MAAM,uDAAuD,UAAU;AAAA,EAE5E,MAAe,KAAoB;AACjC,SAAK,OAAO,iFAAiF;AAC7F,SAAK,OAAO,2HAA2H;AAAA,EACzI;AAAA,EAEA,MAAe,OAAsB;AACnC,SAAK,OAAO,kDAAkD;AAC9D,SAAK,OAAO,2GAA2G;AAAA,EACzH;AAEF;",
6
+ "names": []
7
+ }
@@ -0,0 +1,22 @@
1
+ import { Migration } from "@mikro-orm/migrations";
2
+ class Migration20260223000000_scim_tables extends Migration {
3
+ async up() {
4
+ this.addSql(`create table "scim_tokens" ("id" uuid not null default gen_random_uuid(), "tenant_id" uuid null, "organization_id" uuid not null, "sso_config_id" uuid not null, "name" text not null, "token_hash" text not null, "token_prefix" text not null, "is_active" boolean not null default true, "created_by" uuid null, "created_at" timestamptz not null, "updated_at" timestamptz not null, constraint "scim_tokens_pkey" primary key ("id"));`);
5
+ this.addSql(`create index "scim_tokens_sso_config_id_idx" on "scim_tokens" ("sso_config_id");`);
6
+ this.addSql(`create index "scim_tokens_token_prefix_idx" on "scim_tokens" ("token_prefix");`);
7
+ this.addSql(`create table "sso_user_deactivations" ("id" uuid not null default gen_random_uuid(), "tenant_id" uuid null, "organization_id" uuid not null, "user_id" uuid not null, "sso_config_id" uuid not null, "deactivated_at" timestamptz not null, "reactivated_at" timestamptz null, "created_at" timestamptz not null, constraint "sso_user_deactivations_pkey" primary key ("id"));`);
8
+ this.addSql(`create index "sso_user_deactivations_user_id_idx" on "sso_user_deactivations" ("user_id");`);
9
+ this.addSql(`alter table "sso_user_deactivations" add constraint "sso_user_deactivations_user_config_unique" unique ("user_id", "sso_config_id");`);
10
+ this.addSql(`create table "scim_provisioning_log" ("id" uuid not null default gen_random_uuid(), "tenant_id" uuid null, "organization_id" uuid not null, "sso_config_id" uuid not null, "operation" text not null, "resource_type" text not null, "resource_id" uuid null, "scim_external_id" text null, "response_status" int not null, "error_message" text null, "created_at" timestamptz not null, constraint "scim_provisioning_log_pkey" primary key ("id"));`);
11
+ this.addSql(`create index "scim_provisioning_log_config_created_idx" on "scim_provisioning_log" ("sso_config_id", "created_at");`);
12
+ }
13
+ async down() {
14
+ this.addSql(`drop table if exists "scim_provisioning_log" cascade;`);
15
+ this.addSql(`drop table if exists "sso_user_deactivations" cascade;`);
16
+ this.addSql(`drop table if exists "scim_tokens" cascade;`);
17
+ }
18
+ }
19
+ export {
20
+ Migration20260223000000_scim_tables
21
+ };
22
+ //# sourceMappingURL=Migration20260223000000_scim_tables.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../src/modules/sso/migrations/Migration20260223000000_scim_tables.ts"],
4
+ "sourcesContent": ["import { Migration } from '@mikro-orm/migrations';\n\nexport class Migration20260223000000_scim_tables extends Migration {\n\n override async up(): Promise<void> {\n this.addSql(`create table \"scim_tokens\" (\"id\" uuid not null default gen_random_uuid(), \"tenant_id\" uuid null, \"organization_id\" uuid not null, \"sso_config_id\" uuid not null, \"name\" text not null, \"token_hash\" text not null, \"token_prefix\" text not null, \"is_active\" boolean not null default true, \"created_by\" uuid null, \"created_at\" timestamptz not null, \"updated_at\" timestamptz not null, constraint \"scim_tokens_pkey\" primary key (\"id\"));`);\n this.addSql(`create index \"scim_tokens_sso_config_id_idx\" on \"scim_tokens\" (\"sso_config_id\");`);\n this.addSql(`create index \"scim_tokens_token_prefix_idx\" on \"scim_tokens\" (\"token_prefix\");`);\n\n this.addSql(`create table \"sso_user_deactivations\" (\"id\" uuid not null default gen_random_uuid(), \"tenant_id\" uuid null, \"organization_id\" uuid not null, \"user_id\" uuid not null, \"sso_config_id\" uuid not null, \"deactivated_at\" timestamptz not null, \"reactivated_at\" timestamptz null, \"created_at\" timestamptz not null, constraint \"sso_user_deactivations_pkey\" primary key (\"id\"));`);\n this.addSql(`create index \"sso_user_deactivations_user_id_idx\" on \"sso_user_deactivations\" (\"user_id\");`);\n this.addSql(`alter table \"sso_user_deactivations\" add constraint \"sso_user_deactivations_user_config_unique\" unique (\"user_id\", \"sso_config_id\");`);\n\n this.addSql(`create table \"scim_provisioning_log\" (\"id\" uuid not null default gen_random_uuid(), \"tenant_id\" uuid null, \"organization_id\" uuid not null, \"sso_config_id\" uuid not null, \"operation\" text not null, \"resource_type\" text not null, \"resource_id\" uuid null, \"scim_external_id\" text null, \"response_status\" int not null, \"error_message\" text null, \"created_at\" timestamptz not null, constraint \"scim_provisioning_log_pkey\" primary key (\"id\"));`);\n this.addSql(`create index \"scim_provisioning_log_config_created_idx\" on \"scim_provisioning_log\" (\"sso_config_id\", \"created_at\");`);\n }\n\n override async down(): Promise<void> {\n this.addSql(`drop table if exists \"scim_provisioning_log\" cascade;`);\n this.addSql(`drop table if exists \"sso_user_deactivations\" cascade;`);\n this.addSql(`drop table if exists \"scim_tokens\" cascade;`);\n }\n\n}\n"],
5
+ "mappings": "AAAA,SAAS,iBAAiB;AAEnB,MAAM,4CAA4C,UAAU;AAAA,EAEjE,MAAe,KAAoB;AACjC,SAAK,OAAO,8aAA8a;AAC1b,SAAK,OAAO,kFAAkF;AAC9F,SAAK,OAAO,gFAAgF;AAE5F,SAAK,OAAO,iXAAiX;AAC7X,SAAK,OAAO,4FAA4F;AACxG,SAAK,OAAO,sIAAsI;AAElJ,SAAK,OAAO,wbAAwb;AACpc,SAAK,OAAO,qHAAqH;AAAA,EACnI;AAAA,EAEA,MAAe,OAAsB;AACnC,SAAK,OAAO,uDAAuD;AACnE,SAAK,OAAO,wDAAwD;AACpE,SAAK,OAAO,6CAA6C;AAAA,EAC3D;AAEF;",
6
+ "names": []
7
+ }
@@ -0,0 +1,15 @@
1
+ import { Migration } from "@mikro-orm/migrations";
2
+ class Migration20260224000000_sso_external_id extends Migration {
3
+ async up() {
4
+ this.addSql(`alter table "sso_identities" add column "external_id" text null;`);
5
+ this.addSql(`alter table "sso_identities" add constraint "sso_identities_config_external_id_unique" unique ("sso_config_id", "external_id");`);
6
+ }
7
+ async down() {
8
+ this.addSql(`alter table "sso_identities" drop constraint if exists "sso_identities_config_external_id_unique";`);
9
+ this.addSql(`alter table "sso_identities" drop column if exists "external_id";`);
10
+ }
11
+ }
12
+ export {
13
+ Migration20260224000000_sso_external_id
14
+ };
15
+ //# sourceMappingURL=Migration20260224000000_sso_external_id.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../src/modules/sso/migrations/Migration20260224000000_sso_external_id.ts"],
4
+ "sourcesContent": ["import { Migration } from '@mikro-orm/migrations';\n\nexport class Migration20260224000000_sso_external_id extends Migration {\n\n override async up(): Promise<void> {\n this.addSql(`alter table \"sso_identities\" add column \"external_id\" text null;`);\n this.addSql(`alter table \"sso_identities\" add constraint \"sso_identities_config_external_id_unique\" unique (\"sso_config_id\", \"external_id\");`);\n }\n\n override async down(): Promise<void> {\n this.addSql(`alter table \"sso_identities\" drop constraint if exists \"sso_identities_config_external_id_unique\";`);\n this.addSql(`alter table \"sso_identities\" drop column if exists \"external_id\";`);\n }\n\n}\n"],
5
+ "mappings": "AAAA,SAAS,iBAAiB;AAEnB,MAAM,gDAAgD,UAAU;AAAA,EAErE,MAAe,KAAoB;AACjC,SAAK,OAAO,kEAAkE;AAC9E,SAAK,OAAO,iIAAiI;AAAA,EAC/I;AAAA,EAEA,MAAe,OAAsB;AACnC,SAAK,OAAO,oGAAoG;AAChH,SAAK,OAAO,mEAAmE;AAAA,EACjF;AAEF;",
6
+ "names": []
7
+ }
@@ -0,0 +1,17 @@
1
+ import { Migration } from "@mikro-orm/migrations";
2
+ class Migration20260224100000_sso_role_grants extends Migration {
3
+ async up() {
4
+ this.addSql(`create table "sso_role_grants" ("id" uuid not null default gen_random_uuid(), "tenant_id" uuid null, "user_id" uuid not null, "role_id" uuid not null, "sso_config_id" uuid not null, "created_at" timestamptz not null, constraint "sso_role_grants_pkey" primary key ("id"));`);
5
+ this.addSql(`create index "sso_role_grants_user_id_idx" on "sso_role_grants" ("user_id");`);
6
+ this.addSql(`alter table "sso_role_grants" add constraint "sso_role_grants_user_role_config_unique" unique ("user_id", "role_id", "sso_config_id");`);
7
+ this.addSql(`alter table "sso_configs" add column "app_role_mappings" jsonb not null default '{}';`);
8
+ }
9
+ async down() {
10
+ this.addSql(`drop table if exists "sso_role_grants";`);
11
+ this.addSql(`alter table "sso_configs" drop column "app_role_mappings";`);
12
+ }
13
+ }
14
+ export {
15
+ Migration20260224100000_sso_role_grants
16
+ };
17
+ //# sourceMappingURL=Migration20260224100000_sso_role_grants.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../src/modules/sso/migrations/Migration20260224100000_sso_role_grants.ts"],
4
+ "sourcesContent": ["import { Migration } from '@mikro-orm/migrations';\n\nexport class Migration20260224100000_sso_role_grants extends Migration {\n\n override async up(): Promise<void> {\n this.addSql(`create table \"sso_role_grants\" (\"id\" uuid not null default gen_random_uuid(), \"tenant_id\" uuid null, \"user_id\" uuid not null, \"role_id\" uuid not null, \"sso_config_id\" uuid not null, \"created_at\" timestamptz not null, constraint \"sso_role_grants_pkey\" primary key (\"id\"));`);\n this.addSql(`create index \"sso_role_grants_user_id_idx\" on \"sso_role_grants\" (\"user_id\");`);\n this.addSql(`alter table \"sso_role_grants\" add constraint \"sso_role_grants_user_role_config_unique\" unique (\"user_id\", \"role_id\", \"sso_config_id\");`);\n\n this.addSql(`alter table \"sso_configs\" add column \"app_role_mappings\" jsonb not null default '{}';`);\n }\n\n override async down(): Promise<void> {\n this.addSql(`drop table if exists \"sso_role_grants\";`);\n this.addSql(`alter table \"sso_configs\" drop column \"app_role_mappings\";`);\n }\n\n}\n"],
5
+ "mappings": "AAAA,SAAS,iBAAiB;AAEnB,MAAM,gDAAgD,UAAU;AAAA,EAErE,MAAe,KAAoB;AACjC,SAAK,OAAO,iRAAiR;AAC7R,SAAK,OAAO,8EAA8E;AAC1F,SAAK,OAAO,wIAAwI;AAEpJ,SAAK,OAAO,uFAAuF;AAAA,EACrG;AAAA,EAEA,MAAe,OAAsB;AACnC,SAAK,OAAO,yCAAyC;AACrD,SAAK,OAAO,4DAA4D;AAAA,EAC1E;AAEF;",
6
+ "names": []
7
+ }
@@ -0,0 +1,13 @@
1
+ import { Migration } from "@mikro-orm/migrations";
2
+ class Migration20260224200000_drop_default_role_id extends Migration {
3
+ async up() {
4
+ this.addSql(`alter table "sso_configs" drop column if exists "default_role_id";`);
5
+ }
6
+ async down() {
7
+ this.addSql(`alter table "sso_configs" add column "default_role_id" uuid null;`);
8
+ }
9
+ }
10
+ export {
11
+ Migration20260224200000_drop_default_role_id
12
+ };
13
+ //# sourceMappingURL=Migration20260224200000_drop_default_role_id.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../src/modules/sso/migrations/Migration20260224200000_drop_default_role_id.ts"],
4
+ "sourcesContent": ["import { Migration } from '@mikro-orm/migrations';\n\nexport class Migration20260224200000_drop_default_role_id extends Migration {\n\n override async up(): Promise<void> {\n this.addSql(`alter table \"sso_configs\" drop column if exists \"default_role_id\";`);\n }\n\n override async down(): Promise<void> {\n this.addSql(`alter table \"sso_configs\" add column \"default_role_id\" uuid null;`);\n }\n\n}\n"],
5
+ "mappings": "AAAA,SAAS,iBAAiB;AAEnB,MAAM,qDAAqD,UAAU;AAAA,EAE1E,MAAe,KAAoB;AACjC,SAAK,OAAO,oEAAoE;AAAA,EAClF;AAAA,EAEA,MAAe,OAAsB;AACnC,SAAK,OAAO,mEAAmE;AAAA,EACjF;AAEF;",
6
+ "names": []
7
+ }
@@ -0,0 +1,23 @@
1
+ import { Migration } from "@mikro-orm/migrations";
2
+ class Migration20260225000000_sso_identities_partial_unique extends Migration {
3
+ async up() {
4
+ this.addSql(`alter table "sso_identities" drop constraint "sso_identities_config_user_unique";`);
5
+ this.addSql(`alter table "sso_identities" drop constraint "sso_identities_config_subject_unique";`);
6
+ this.addSql(`alter table "sso_identities" drop constraint "sso_identities_config_external_id_unique";`);
7
+ this.addSql(`create unique index "sso_identities_config_user_unique" on "sso_identities" ("sso_config_id", "user_id") where "deleted_at" is null;`);
8
+ this.addSql(`create unique index "sso_identities_config_subject_unique" on "sso_identities" ("sso_config_id", "idp_subject") where "deleted_at" is null;`);
9
+ this.addSql(`create unique index "sso_identities_config_external_id_unique" on "sso_identities" ("sso_config_id", "external_id") where "deleted_at" is null;`);
10
+ }
11
+ async down() {
12
+ this.addSql(`drop index "sso_identities_config_user_unique";`);
13
+ this.addSql(`drop index "sso_identities_config_subject_unique";`);
14
+ this.addSql(`drop index "sso_identities_config_external_id_unique";`);
15
+ this.addSql(`alter table "sso_identities" add constraint "sso_identities_config_user_unique" unique ("sso_config_id", "user_id");`);
16
+ this.addSql(`alter table "sso_identities" add constraint "sso_identities_config_subject_unique" unique ("sso_config_id", "idp_subject");`);
17
+ this.addSql(`alter table "sso_identities" add constraint "sso_identities_config_external_id_unique" unique ("sso_config_id", "external_id");`);
18
+ }
19
+ }
20
+ export {
21
+ Migration20260225000000_sso_identities_partial_unique
22
+ };
23
+ //# sourceMappingURL=Migration20260225000000_sso_identities_partial_unique.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../src/modules/sso/migrations/Migration20260225000000_sso_identities_partial_unique.ts"],
4
+ "sourcesContent": ["import { Migration } from '@mikro-orm/migrations';\n\nexport class Migration20260225000000_sso_identities_partial_unique extends Migration {\n\n override async up(): Promise<void> {\n this.addSql(`alter table \"sso_identities\" drop constraint \"sso_identities_config_user_unique\";`);\n this.addSql(`alter table \"sso_identities\" drop constraint \"sso_identities_config_subject_unique\";`);\n this.addSql(`alter table \"sso_identities\" drop constraint \"sso_identities_config_external_id_unique\";`);\n\n this.addSql(`create unique index \"sso_identities_config_user_unique\" on \"sso_identities\" (\"sso_config_id\", \"user_id\") where \"deleted_at\" is null;`);\n this.addSql(`create unique index \"sso_identities_config_subject_unique\" on \"sso_identities\" (\"sso_config_id\", \"idp_subject\") where \"deleted_at\" is null;`);\n this.addSql(`create unique index \"sso_identities_config_external_id_unique\" on \"sso_identities\" (\"sso_config_id\", \"external_id\") where \"deleted_at\" is null;`);\n }\n\n override async down(): Promise<void> {\n this.addSql(`drop index \"sso_identities_config_user_unique\";`);\n this.addSql(`drop index \"sso_identities_config_subject_unique\";`);\n this.addSql(`drop index \"sso_identities_config_external_id_unique\";`);\n\n this.addSql(`alter table \"sso_identities\" add constraint \"sso_identities_config_user_unique\" unique (\"sso_config_id\", \"user_id\");`);\n this.addSql(`alter table \"sso_identities\" add constraint \"sso_identities_config_subject_unique\" unique (\"sso_config_id\", \"idp_subject\");`);\n this.addSql(`alter table \"sso_identities\" add constraint \"sso_identities_config_external_id_unique\" unique (\"sso_config_id\", \"external_id\");`);\n }\n\n}\n"],
5
+ "mappings": "AAAA,SAAS,iBAAiB;AAEnB,MAAM,8DAA8D,UAAU;AAAA,EAEnF,MAAe,KAAoB;AACjC,SAAK,OAAO,mFAAmF;AAC/F,SAAK,OAAO,sFAAsF;AAClG,SAAK,OAAO,0FAA0F;AAEtG,SAAK,OAAO,sIAAsI;AAClJ,SAAK,OAAO,6IAA6I;AACzJ,SAAK,OAAO,iJAAiJ;AAAA,EAC/J;AAAA,EAEA,MAAe,OAAsB;AACnC,SAAK,OAAO,iDAAiD;AAC7D,SAAK,OAAO,oDAAoD;AAChE,SAAK,OAAO,wDAAwD;AAEpE,SAAK,OAAO,sHAAsH;AAClI,SAAK,OAAO,6HAA6H;AACzI,SAAK,OAAO,iIAAiI;AAAA,EAC/I;AAEF;",
6
+ "names": []
7
+ }
@@ -0,0 +1,14 @@
1
+ import { Migration } from "@mikro-orm/migrations";
2
+ class Migration20260305000000_sso_role_grants_org_id extends Migration {
3
+ async up() {
4
+ this.addSql(`alter table "sso_role_grants" add column "organization_id" uuid not null default '00000000-0000-0000-0000-000000000000';`);
5
+ this.addSql(`alter table "sso_role_grants" alter column "organization_id" drop default;`);
6
+ }
7
+ async down() {
8
+ this.addSql(`alter table "sso_role_grants" drop column "organization_id";`);
9
+ }
10
+ }
11
+ export {
12
+ Migration20260305000000_sso_role_grants_org_id
13
+ };
14
+ //# sourceMappingURL=Migration20260305000000_sso_role_grants_org_id.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../src/modules/sso/migrations/Migration20260305000000_sso_role_grants_org_id.ts"],
4
+ "sourcesContent": ["import { Migration } from '@mikro-orm/migrations';\n\nexport class Migration20260305000000_sso_role_grants_org_id extends Migration {\n\n override async up(): Promise<void> {\n this.addSql(`alter table \"sso_role_grants\" add column \"organization_id\" uuid not null default '00000000-0000-0000-0000-000000000000';`);\n this.addSql(`alter table \"sso_role_grants\" alter column \"organization_id\" drop default;`);\n }\n\n override async down(): Promise<void> {\n this.addSql(`alter table \"sso_role_grants\" drop column \"organization_id\";`);\n }\n\n}\n"],
5
+ "mappings": "AAAA,SAAS,iBAAiB;AAEnB,MAAM,uDAAuD,UAAU;AAAA,EAE5E,MAAe,KAAoB;AACjC,SAAK,OAAO,0HAA0H;AACtI,SAAK,OAAO,4EAA4E;AAAA,EAC1F;AAAA,EAEA,MAAe,OAAsB;AACnC,SAAK,OAAO,8DAA8D;AAAA,EAC5E;AAEF;",
6
+ "names": []
7
+ }