@arch-cadre/core 0.0.55 → 0.0.57

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 (297) hide show
  1. package/dist/_virtual/_rolldown/runtime.cjs +1 -0
  2. package/dist/_virtual/_rolldown/runtime.mjs +1 -0
  3. package/dist/core/auth/augment.cjs +1 -0
  4. package/dist/core/auth/augment.d.cts +20 -0
  5. package/dist/core/auth/augment.d.cts.map +1 -0
  6. package/dist/core/auth/augment.d.mts +20 -0
  7. package/dist/core/auth/augment.d.mts.map +1 -0
  8. package/dist/core/auth/augment.mjs +2 -0
  9. package/dist/core/auth/augment.mjs.map +1 -0
  10. package/dist/core/auth/email-verification.cjs +1 -0
  11. package/dist/core/auth/email-verification.d.cts +62 -0
  12. package/dist/core/auth/email-verification.d.cts.map +1 -0
  13. package/dist/core/auth/email-verification.d.mts +62 -0
  14. package/dist/core/auth/email-verification.d.mts.map +1 -0
  15. package/dist/core/auth/email-verification.mjs +2 -0
  16. package/dist/core/auth/email-verification.mjs.map +1 -0
  17. package/dist/core/auth/logic.cjs +1 -0
  18. package/dist/core/auth/logic.d.cts +110 -0
  19. package/dist/core/auth/logic.d.cts.map +1 -0
  20. package/dist/core/auth/logic.d.mts +110 -0
  21. package/dist/core/auth/logic.d.mts.map +1 -0
  22. package/dist/core/auth/logic.mjs +2 -0
  23. package/dist/core/auth/logic.mjs.map +1 -0
  24. package/dist/core/auth/password-reset.cjs +1 -0
  25. package/dist/core/auth/password-reset.d.cts +39 -0
  26. package/dist/core/auth/password-reset.d.cts.map +1 -0
  27. package/dist/core/auth/password-reset.d.mts +39 -0
  28. package/dist/core/auth/password-reset.d.mts.map +1 -0
  29. package/dist/core/auth/password-reset.mjs +2 -0
  30. package/dist/core/auth/password-reset.mjs.map +1 -0
  31. package/dist/core/auth/rbac.cjs +1 -0
  32. package/dist/core/auth/rbac.d.cts +61 -0
  33. package/dist/core/auth/rbac.d.cts.map +1 -0
  34. package/dist/core/auth/rbac.d.mts +61 -0
  35. package/dist/core/auth/rbac.d.mts.map +1 -0
  36. package/dist/core/auth/rbac.mjs +2 -0
  37. package/dist/core/auth/rbac.mjs.map +1 -0
  38. package/dist/core/auth/session.cjs +1 -0
  39. package/dist/core/auth/session.d.cts +54 -0
  40. package/dist/core/auth/session.d.cts.map +1 -0
  41. package/dist/core/auth/session.d.mts +54 -0
  42. package/dist/core/auth/session.d.mts.map +1 -0
  43. package/dist/core/auth/session.mjs +2 -0
  44. package/dist/core/auth/session.mjs.map +1 -0
  45. package/dist/core/auth/types.d.cts +55 -0
  46. package/dist/core/auth/types.d.cts.map +1 -0
  47. package/dist/core/auth/types.d.mts +55 -0
  48. package/dist/core/auth/types.d.mts.map +1 -0
  49. package/dist/core/auth/utils/encode.cjs +1 -0
  50. package/dist/core/auth/utils/encode.d.cts +15 -0
  51. package/dist/core/auth/utils/encode.d.cts.map +1 -0
  52. package/dist/core/auth/utils/encode.d.mts +15 -0
  53. package/dist/core/auth/utils/encode.d.mts.map +1 -0
  54. package/dist/core/auth/utils/encode.mjs +2 -0
  55. package/dist/core/auth/utils/encode.mjs.map +1 -0
  56. package/dist/core/auth/utils/encryption.cjs +1 -0
  57. package/dist/core/auth/utils/{encryption.d.ts → encryption.d.cts} +8 -5
  58. package/dist/core/auth/utils/encryption.d.cts.map +1 -0
  59. package/dist/core/auth/utils/encryption.d.mts +28 -0
  60. package/dist/core/auth/utils/encryption.d.mts.map +1 -0
  61. package/dist/core/auth/utils/encryption.mjs +2 -0
  62. package/dist/core/auth/utils/encryption.mjs.map +1 -0
  63. package/dist/core/auth/validation.cjs +1 -0
  64. package/dist/core/auth/validation.d.cts +48 -0
  65. package/dist/core/auth/validation.d.cts.map +1 -0
  66. package/dist/core/auth/validation.d.mts +48 -0
  67. package/dist/core/auth/validation.d.mts.map +1 -0
  68. package/dist/core/auth/validation.mjs +2 -0
  69. package/dist/core/auth/validation.mjs.map +1 -0
  70. package/dist/core/bootstrap.cjs +1 -0
  71. package/dist/core/bootstrap.d.cts +5 -0
  72. package/dist/core/bootstrap.d.cts.map +1 -0
  73. package/dist/core/bootstrap.d.mts +5 -0
  74. package/dist/core/bootstrap.d.mts.map +1 -0
  75. package/dist/core/bootstrap.mjs +2 -0
  76. package/dist/core/bootstrap.mjs.map +1 -0
  77. package/dist/core/config.cjs +1 -0
  78. package/dist/core/config.d.cts +11 -0
  79. package/dist/core/config.d.cts.map +1 -0
  80. package/dist/core/config.d.mts +11 -0
  81. package/dist/core/config.d.mts.map +1 -0
  82. package/dist/core/config.mjs +2 -0
  83. package/dist/core/config.mjs.map +1 -0
  84. package/dist/core/config.server.cjs +1 -0
  85. package/dist/core/config.server.d.cts +16 -0
  86. package/dist/core/config.server.d.cts.map +1 -0
  87. package/dist/core/config.server.d.mts +16 -0
  88. package/dist/core/config.server.d.mts.map +1 -0
  89. package/dist/core/config.server.mjs +2 -0
  90. package/dist/core/config.server.mjs.map +1 -0
  91. package/dist/core/event-bus.cjs +1 -0
  92. package/dist/core/event-bus.d.cts +17 -0
  93. package/dist/core/event-bus.d.cts.map +1 -0
  94. package/dist/core/event-bus.d.mts +17 -0
  95. package/dist/core/event-bus.d.mts.map +1 -0
  96. package/dist/core/event-bus.mjs +2 -0
  97. package/dist/core/event-bus.mjs.map +1 -0
  98. package/dist/core/filesystem/index.cjs +1 -0
  99. package/dist/core/filesystem/index.mjs +2 -0
  100. package/dist/core/filesystem/index.mjs.map +1 -0
  101. package/dist/core/filesystem/providers/local.cjs +1 -0
  102. package/dist/core/filesystem/providers/local.mjs +2 -0
  103. package/dist/core/filesystem/providers/local.mjs.map +1 -0
  104. package/dist/core/filesystem/service.cjs +1 -0
  105. package/dist/core/filesystem/service.d.cts +19 -0
  106. package/dist/core/filesystem/service.d.cts.map +1 -0
  107. package/dist/core/filesystem/service.d.mts +19 -0
  108. package/dist/core/filesystem/service.d.mts.map +1 -0
  109. package/dist/core/filesystem/service.mjs +2 -0
  110. package/dist/core/filesystem/service.mjs.map +1 -0
  111. package/dist/core/filesystem/types.d.cts +22 -0
  112. package/dist/core/filesystem/types.d.cts.map +1 -0
  113. package/dist/core/filesystem/types.d.mts +22 -0
  114. package/dist/core/filesystem/types.d.mts.map +1 -0
  115. package/dist/core/notifications/actions.cjs +1 -0
  116. package/dist/core/notifications/actions.d.cts +58 -0
  117. package/dist/core/notifications/actions.d.cts.map +1 -0
  118. package/dist/core/notifications/actions.d.mts +58 -0
  119. package/dist/core/notifications/actions.d.mts.map +1 -0
  120. package/dist/core/notifications/actions.mjs +2 -0
  121. package/dist/core/notifications/actions.mjs.map +1 -0
  122. package/dist/core/notifications/index.cjs +1 -0
  123. package/dist/core/notifications/index.mjs +1 -0
  124. package/dist/core/notifications/service.cjs +1 -0
  125. package/dist/core/notifications/service.d.cts +9 -0
  126. package/dist/core/notifications/service.d.cts.map +1 -0
  127. package/dist/core/notifications/service.d.mts +9 -0
  128. package/dist/core/notifications/service.d.mts.map +1 -0
  129. package/dist/core/notifications/service.mjs +2 -0
  130. package/dist/core/notifications/service.mjs.map +1 -0
  131. package/dist/core/notifications/types.d.cts +21 -0
  132. package/dist/core/notifications/types.d.cts.map +1 -0
  133. package/dist/core/notifications/types.d.mts +21 -0
  134. package/dist/core/notifications/types.d.mts.map +1 -0
  135. package/dist/core/setup.cjs +1 -0
  136. package/dist/core/setup.d.cts +9 -0
  137. package/dist/core/setup.d.cts.map +1 -0
  138. package/dist/core/setup.d.mts +9 -0
  139. package/dist/core/setup.d.mts.map +1 -0
  140. package/dist/core/setup.mjs +2 -0
  141. package/dist/core/setup.mjs.map +1 -0
  142. package/dist/core/types.d.cts +13 -0
  143. package/dist/core/types.d.cts.map +1 -0
  144. package/dist/core/types.d.mts +13 -0
  145. package/dist/core/types.d.mts.map +1 -0
  146. package/dist/index.cjs +1 -0
  147. package/dist/index.d.cts +8 -0
  148. package/dist/index.d.mts +8 -0
  149. package/dist/index.mjs +1 -0
  150. package/dist/server/auth/email.cjs +1 -0
  151. package/dist/server/auth/email.d.cts +13 -0
  152. package/dist/server/auth/email.d.cts.map +1 -0
  153. package/dist/server/auth/email.d.mts +13 -0
  154. package/dist/server/auth/email.d.mts.map +1 -0
  155. package/dist/server/auth/email.mjs +2 -0
  156. package/dist/server/auth/email.mjs.map +1 -0
  157. package/dist/server/auth/password.cjs +1 -0
  158. package/dist/server/auth/{password.d.ts → password.d.cts} +7 -4
  159. package/dist/server/auth/password.d.cts.map +1 -0
  160. package/dist/server/auth/{password.js → password.d.mts} +7 -14
  161. package/dist/server/auth/password.d.mts.map +1 -0
  162. package/dist/server/auth/password.mjs +2 -0
  163. package/dist/server/auth/password.mjs.map +1 -0
  164. package/dist/server/auth/user.cjs +1 -0
  165. package/dist/server/auth/user.d.cts +58 -0
  166. package/dist/server/auth/user.d.cts.map +1 -0
  167. package/dist/server/auth/user.d.mts +58 -0
  168. package/dist/server/auth/user.d.mts.map +1 -0
  169. package/dist/server/auth/user.mjs +2 -0
  170. package/dist/server/auth/user.mjs.map +1 -0
  171. package/dist/server/database/inject.cjs +1 -0
  172. package/dist/server/database/inject.d.cts +15 -0
  173. package/dist/server/database/inject.d.cts.map +1 -0
  174. package/dist/server/database/inject.d.mts +15 -0
  175. package/dist/server/database/inject.d.mts.map +1 -0
  176. package/dist/server/database/inject.mjs +2 -0
  177. package/dist/server/database/inject.mjs.map +1 -0
  178. package/dist/server/database/schema.cjs +1 -0
  179. package/dist/server/database/schema.d.cts +3065 -0
  180. package/dist/server/database/{schema.d.ts.map → schema.d.cts.map} +1 -1
  181. package/dist/server/database/schema.d.mts +3065 -0
  182. package/dist/server/database/schema.d.mts.map +1 -0
  183. package/dist/server/database/schema.mjs +2 -0
  184. package/dist/server/database/schema.mjs.map +1 -0
  185. package/dist/server/emails/index.cjs +1 -0
  186. package/dist/server/emails/index.d.cts +26 -0
  187. package/dist/server/emails/index.d.cts.map +1 -0
  188. package/dist/server/emails/index.d.mts +26 -0
  189. package/dist/server/emails/index.d.mts.map +1 -0
  190. package/dist/server/emails/index.mjs +2 -0
  191. package/dist/server/emails/index.mjs.map +1 -0
  192. package/dist/server.cjs +1 -0
  193. package/dist/server.d.cts +26 -0
  194. package/dist/server.d.mts +26 -0
  195. package/dist/server.mjs +1 -0
  196. package/package.json +15 -7
  197. package/dist/core/auth/augment.d.ts +0 -18
  198. package/dist/core/auth/augment.d.ts.map +0 -1
  199. package/dist/core/auth/augment.js +0 -45
  200. package/dist/core/auth/email-verification.d.ts +0 -58
  201. package/dist/core/auth/email-verification.d.ts.map +0 -1
  202. package/dist/core/auth/email-verification.js +0 -105
  203. package/dist/core/auth/events.d.ts +0 -53
  204. package/dist/core/auth/events.d.ts.map +0 -1
  205. package/dist/core/auth/events.js +0 -1
  206. package/dist/core/auth/logic.d.ts +0 -106
  207. package/dist/core/auth/logic.d.ts.map +0 -1
  208. package/dist/core/auth/logic.js +0 -245
  209. package/dist/core/auth/password-reset.d.ts +0 -35
  210. package/dist/core/auth/password-reset.d.ts.map +0 -1
  211. package/dist/core/auth/password-reset.js +0 -122
  212. package/dist/core/auth/rbac.d.ts +0 -56
  213. package/dist/core/auth/rbac.d.ts.map +0 -1
  214. package/dist/core/auth/rbac.js +0 -134
  215. package/dist/core/auth/session.d.ts +0 -50
  216. package/dist/core/auth/session.d.ts.map +0 -1
  217. package/dist/core/auth/session.js +0 -152
  218. package/dist/core/auth/types.d.ts +0 -52
  219. package/dist/core/auth/types.d.ts.map +0 -1
  220. package/dist/core/auth/types.js +0 -1
  221. package/dist/core/auth/utils/encode.d.ts +0 -12
  222. package/dist/core/auth/utils/encode.d.ts.map +0 -1
  223. package/dist/core/auth/utils/encode.js +0 -20
  224. package/dist/core/auth/utils/encryption.d.ts.map +0 -1
  225. package/dist/core/auth/utils/encryption.js +0 -62
  226. package/dist/core/auth/validation.d.ts +0 -44
  227. package/dist/core/auth/validation.d.ts.map +0 -1
  228. package/dist/core/auth/validation.js +0 -41
  229. package/dist/core/bootstrap.d.ts +0 -2
  230. package/dist/core/bootstrap.d.ts.map +0 -1
  231. package/dist/core/bootstrap.js +0 -51
  232. package/dist/core/config.d.ts +0 -9
  233. package/dist/core/config.d.ts.map +0 -1
  234. package/dist/core/config.js +0 -3
  235. package/dist/core/config.server.d.ts +0 -12
  236. package/dist/core/config.server.d.ts.map +0 -1
  237. package/dist/core/config.server.js +0 -61
  238. package/dist/core/event-bus.d.ts +0 -14
  239. package/dist/core/event-bus.d.ts.map +0 -1
  240. package/dist/core/event-bus.js +0 -51
  241. package/dist/core/filesystem/index.d.ts +0 -4
  242. package/dist/core/filesystem/index.d.ts.map +0 -1
  243. package/dist/core/filesystem/index.js +0 -10
  244. package/dist/core/filesystem/providers/local.d.ts +0 -8
  245. package/dist/core/filesystem/providers/local.d.ts.map +0 -1
  246. package/dist/core/filesystem/providers/local.js +0 -42
  247. package/dist/core/filesystem/service.d.ts +0 -16
  248. package/dist/core/filesystem/service.d.ts.map +0 -1
  249. package/dist/core/filesystem/service.js +0 -51
  250. package/dist/core/filesystem/types.d.ts +0 -19
  251. package/dist/core/filesystem/types.d.ts.map +0 -1
  252. package/dist/core/filesystem/types.js +0 -1
  253. package/dist/core/notifications/actions.d.ts +0 -54
  254. package/dist/core/notifications/actions.d.ts.map +0 -1
  255. package/dist/core/notifications/actions.js +0 -43
  256. package/dist/core/notifications/index.d.ts +0 -4
  257. package/dist/core/notifications/index.d.ts.map +0 -1
  258. package/dist/core/notifications/index.js +0 -3
  259. package/dist/core/notifications/service.d.ts +0 -7
  260. package/dist/core/notifications/service.d.ts.map +0 -1
  261. package/dist/core/notifications/service.js +0 -32
  262. package/dist/core/notifications/types.d.ts +0 -17
  263. package/dist/core/notifications/types.d.ts.map +0 -1
  264. package/dist/core/notifications/types.js +0 -1
  265. package/dist/core/setup.d.ts +0 -6
  266. package/dist/core/setup.d.ts.map +0 -1
  267. package/dist/core/setup.js +0 -25
  268. package/dist/core/types.d.ts +0 -10
  269. package/dist/core/types.d.ts.map +0 -1
  270. package/dist/core/types.js +0 -1
  271. package/dist/index.d.ts +0 -8
  272. package/dist/index.d.ts.map +0 -1
  273. package/dist/index.js +0 -16
  274. package/dist/server/auth/email.d.ts +0 -10
  275. package/dist/server/auth/email.d.ts.map +0 -1
  276. package/dist/server/auth/email.js +0 -20
  277. package/dist/server/auth/password.d.ts.map +0 -1
  278. package/dist/server/auth/types.d.ts +0 -13
  279. package/dist/server/auth/types.d.ts.map +0 -1
  280. package/dist/server/auth/types.js +0 -1
  281. package/dist/server/auth/user.d.ts +0 -54
  282. package/dist/server/auth/user.d.ts.map +0 -1
  283. package/dist/server/auth/user.js +0 -222
  284. package/dist/server/database/inject.d.ts +0 -11
  285. package/dist/server/database/inject.d.ts.map +0 -1
  286. package/dist/server/database/inject.js +0 -29
  287. package/dist/server/database/schema.d.ts +0 -2953
  288. package/dist/server/database/schema.js +0 -192
  289. package/dist/server/database/types.d.ts +0 -12
  290. package/dist/server/database/types.d.ts.map +0 -1
  291. package/dist/server/database/types.js +0 -1
  292. package/dist/server/emails/index.d.ts +0 -23
  293. package/dist/server/emails/index.d.ts.map +0 -1
  294. package/dist/server/emails/index.js +0 -67
  295. package/dist/server.d.ts +0 -25
  296. package/dist/server.d.ts.map +0 -1
  297. package/dist/server.js +0 -32
@@ -1,106 +0,0 @@
1
- import { augmentSession, augmentUser, registerIdentityAugmenter, registerPasswordResetSessionAugmenter, registerSessionAugmenter } from "./augment";
2
- import type { AuthResponse, FullUser, Session, SessionFlags, User, UserPermission, UserRole } from "./types";
3
- import { type LoginInput, type RegisterInput } from "./validation";
4
- /**
5
- * Registry for login validators (e.g. 2FA module)
6
- */
7
- type AuthValidator = (userId: string) => Promise<AuthResponse | null>;
8
- /**
9
- * Registry for Security Requirements (e.g. checking if 2FA is needed for a session)
10
- */
11
- type SecurityRequirement = (session: Session, user: FullUser) => Promise<{
12
- satisfied: boolean;
13
- redirect?: string;
14
- } | null>;
15
- /**
16
- * Registry for password reset validators (e.g. 2FA module requiring check during reset)
17
- */
18
- type PasswordResetValidator = (userId: string) => Promise<AuthResponse | null>;
19
- /**
20
- * Registry for email verification validators
21
- */
22
- type EmailVerificationValidator = (userId: string) => Promise<AuthResponse | null>;
23
- export declare function registerAuthValidator(validator: AuthValidator): Promise<void>;
24
- export declare function registerPasswordResetValidator(validator: PasswordResetValidator): Promise<void>;
25
- export declare function registerEmailVerificationValidator(validator: EmailVerificationValidator): Promise<void>;
26
- export { registerIdentityAugmenter, registerSessionAugmenter, registerPasswordResetSessionAugmenter, augmentUser, augmentSession, };
27
- export declare function registerSecurityRequirement(requirement: SecurityRequirement): Promise<void>;
28
- export declare function runPasswordResetValidators(userId: string): Promise<AuthResponse | null>;
29
- export declare function runEmailVerificationValidators(userId: string): Promise<AuthResponse | null>;
30
- /**
31
- * Augments a base user with data from all registered modules.
32
- * This is now just a wrapper that includes core RBAC data.
33
- */
34
- export declare function performFullUserAugmentation(user: User): Promise<FullUser>;
35
- /**
36
- * Checks if the current session satisfies all registered security requirements.
37
- */
38
- export declare function checkSecurity(session: Session, user: FullUser, requiredRoles?: UserRole[], requiredPermissions?: UserPermission[], fallbackRedirect?: string): Promise<{
39
- satisfied: boolean;
40
- redirect: string | undefined;
41
- } | {
42
- satisfied: boolean;
43
- redirect?: undefined;
44
- }>;
45
- /**
46
- * Sign In Logic
47
- */
48
- export declare function signIn(data: LoginInput): Promise<AuthResponse>;
49
- /**
50
- * Sign Up Logic
51
- */
52
- export declare function signUp(data: RegisterInput): Promise<{
53
- session: {
54
- [x: string]: any;
55
- id: string;
56
- createdAt: Date;
57
- updatedAt: Date | null;
58
- userId: string;
59
- active_organization_id: string | null;
60
- expiresAt: Date;
61
- };
62
- user: {
63
- [x: string]: any;
64
- id: string;
65
- email: string;
66
- name: string;
67
- password: string | null;
68
- image: string | null;
69
- recovery_code: Buffer<ArrayBufferLike>;
70
- emailVerifiedAt: Date | null;
71
- createdAt: Date;
72
- updatedAt: Date | null;
73
- roles: UserRole[];
74
- permissions: UserPermission[];
75
- };
76
- }>;
77
- /**
78
- * Finalizes login after a challenge
79
- */
80
- export declare function finalizeLogin(userId: string, flags: SessionFlags): Promise<{
81
- session: {
82
- [x: string]: any;
83
- id: string;
84
- createdAt: Date;
85
- updatedAt: Date | null;
86
- userId: string;
87
- active_organization_id: string | null;
88
- expiresAt: Date;
89
- } | null;
90
- user: {
91
- id: string;
92
- email: string;
93
- name: string;
94
- password: string | null;
95
- image: string | null;
96
- recovery_code: Buffer<ArrayBufferLike>;
97
- emailVerifiedAt: Date | null;
98
- createdAt: Date;
99
- updatedAt: Date | null;
100
- } | null;
101
- }>;
102
- /**
103
- * Sign Out
104
- */
105
- export declare function signOut(): Promise<void>;
106
- //# sourceMappingURL=logic.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"logic.d.ts","sourceRoot":"","sources":["../../../src/core/auth/logic.ts"],"names":[],"mappings":"AAuBA,OAAO,EACL,cAAc,EACd,WAAW,EACX,yBAAyB,EACzB,qCAAqC,EACrC,wBAAwB,EACzB,MAAM,WAAW,CAAC;AAcnB,OAAO,KAAK,EACV,YAAY,EACZ,QAAQ,EACR,OAAO,EACP,YAAY,EACZ,IAAI,EACJ,cAAc,EACd,QAAQ,EACT,MAAM,SAAS,CAAC;AACjB,OAAO,EACL,KAAK,UAAU,EAEf,KAAK,aAAa,EAEnB,MAAM,cAAc,CAAC;AA6DtB;;GAEG;AACH,KAAK,aAAa,GAAG,CAAC,MAAM,EAAE,MAAM,KAAK,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC,CAAC;AAEtE;;GAEG;AACH,KAAK,mBAAmB,GAAG,CACzB,OAAO,EAAE,OAAO,EAChB,IAAI,EAAE,QAAQ,KACX,OAAO,CAAC;IAAE,SAAS,EAAE,OAAO,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAAC,CAAC;AAE/D;;GAEG;AACH,KAAK,sBAAsB,GAAG,CAAC,MAAM,EAAE,MAAM,KAAK,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC,CAAC;AAE/E;;GAEG;AACH,KAAK,0BAA0B,GAAG,CAChC,MAAM,EAAE,MAAM,KACX,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC,CAAC;AA6BlC,wBAAsB,qBAAqB,CAAC,SAAS,EAAE,aAAa,iBAEnE;AAED,wBAAsB,8BAA8B,CAClD,SAAS,EAAE,sBAAsB,iBAGlC;AAED,wBAAsB,kCAAkC,CACtD,SAAS,EAAE,0BAA0B,iBAGtC;AAED,OAAO,EACL,yBAAyB,EACzB,wBAAwB,EACxB,qCAAqC,EACrC,WAAW,EACX,cAAc,GACf,CAAC;AAEF,wBAAsB,2BAA2B,CAC/C,WAAW,EAAE,mBAAmB,iBAGjC;AAED,wBAAsB,0BAA0B,CAC9C,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC,CAM9B;AAED,wBAAsB,8BAA8B,CAClD,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC,CAM9B;AAED;;;GAGG;AACH,wBAAsB,2BAA2B,CAC/C,IAAI,EAAE,IAAI,GACT,OAAO,CAAC,QAAQ,CAAC,CAGnB;AAED;;GAEG;AACH,wBAAsB,aAAa,CACjC,OAAO,EAAE,OAAO,EAChB,IAAI,EAAE,QAAQ,EACd,aAAa,CAAC,EAAE,QAAQ,EAAE,EAC1B,mBAAmB,CAAC,EAAE,cAAc,EAAE,EACtC,gBAAgB,CAAC,EAAE,MAAM;;;;;;GA0D1B;AAED;;GAEG;AACH,wBAAsB,MAAM,CAAC,IAAI,EAAE,UAAU,GAAG,OAAO,CAAC,YAAY,CAAC,CAgCpE;AAED;;GAEG;AACH,wBAAsB,MAAM,CAAC,IAAI,EAAE,aAAa;;;;;;;;;;;;;;;;;;;;;;;;GAmC/C;AAED;;GAEG;AACH,wBAAsB,aAAa,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,YAAY;;;;;;;;;;;;;;;;;;;;;GAetE;AAED;;GAEG;AACH,wBAAsB,OAAO,kBAS5B"}
@@ -1,245 +0,0 @@
1
- "use server";
2
- var _a, _b, _c, _d;
3
- import { eq, inArray } from "drizzle-orm";
4
- import { verifyPasswordHash, verifyPasswordStrength, } from "../../server/auth/password";
5
- import { createUser, getUserById, getUserFromEmail, getUserPasswordHash, verifyUsernameInput, } from "../../server/auth/user";
6
- import { db } from "../../server/database/inject";
7
- import { permissionsTable, rolesTable, rolesToPermissionsTable, usersToPermissionsTable, usersToRolesTable, } from "../../server/database/schema";
8
- import { eventBus } from "../event-bus";
9
- import { augmentSession, augmentUser, registerIdentityAugmenter, registerPasswordResetSessionAugmenter, registerSessionAugmenter, } from "./augment";
10
- import { createEmailVerificationRequest, sendVerificationEmail, setEmailVerificationRequestCookie, } from "./email-verification";
11
- import { createSession, deleteSessionTokenCookie, generateSessionToken, getCurrentSession, invalidateSession, setSessionTokenCookie, } from "./session";
12
- import { loginSchema, registerSchema, } from "./validation";
13
- /**
14
- * Podstawowy moduł rozszerzający tożsamość dla ról i uprawnień
15
- */
16
- async function coreRbacAugmenter(user) {
17
- try {
18
- // 1. Fetch direct roles
19
- const userRoles = await db
20
- .select({ name: rolesTable.name })
21
- .from(usersToRolesTable)
22
- .innerJoin(rolesTable, eq(usersToRolesTable.roleId, rolesTable.id))
23
- .where(eq(usersToRolesTable.userId, user.id));
24
- const roles = userRoles.map((r) => r.name);
25
- // 2. Fetch direct permissions
26
- const userDirectPerms = await db
27
- .select({ name: permissionsTable.name })
28
- .from(usersToPermissionsTable)
29
- .innerJoin(permissionsTable, eq(usersToPermissionsTable.permissionId, permissionsTable.id))
30
- .where(eq(usersToPermissionsTable.userId, user.id));
31
- const directPerms = userDirectPerms.map((p) => p.name);
32
- // 3. Fetch permissions from roles
33
- let rolePerms = [];
34
- if (roles.length > 0) {
35
- const roleIdsResult = await db
36
- .select({ id: rolesTable.id })
37
- .from(rolesTable)
38
- .where(inArray(rolesTable.name, roles));
39
- const roleIds = roleIdsResult.map((r) => r.id);
40
- if (roleIds.length > 0) {
41
- const rolePermsData = await db
42
- .select({ name: permissionsTable.name })
43
- .from(rolesToPermissionsTable)
44
- .innerJoin(permissionsTable, eq(rolesToPermissionsTable.permissionId, permissionsTable.id))
45
- .where(inArray(rolesToPermissionsTable.roleId, roleIds));
46
- rolePerms = rolePermsData.map((p) => p.name);
47
- }
48
- }
49
- return {
50
- roles,
51
- permissions: Array.from(new Set([...directPerms, ...rolePerms])),
52
- };
53
- }
54
- catch (error) {
55
- console.error("[Auth:RBAC] Failed to augment user:", error);
56
- return { roles: [], permissions: [] };
57
- }
58
- }
59
- const globalForAuth = globalThis;
60
- const authValidators = (_a = globalForAuth.__KRYO_AUTH_VALIDATORS__) !== null && _a !== void 0 ? _a : new Set();
61
- const securityRequirements = (_b = globalForAuth.__KRYO_SECURITY_REQUIREMENTS__) !== null && _b !== void 0 ? _b : new Set();
62
- const passwordResetValidators = (_c = globalForAuth.__KRYO_PASSWORD_RESET_VALIDATORS__) !== null && _c !== void 0 ? _c : new Set();
63
- const emailVerificationValidators = (_d = globalForAuth.__KRYO_EMAIL_VERIFICATION_VALIDATORS__) !== null && _d !== void 0 ? _d : new Set();
64
- globalForAuth.__KRYO_AUTH_VALIDATORS__ = authValidators;
65
- globalForAuth.__KRYO_SECURITY_REQUIREMENTS__ = securityRequirements;
66
- globalForAuth.__KRYO_PASSWORD_RESET_VALIDATORS__ = passwordResetValidators;
67
- globalForAuth.__KRYO_EMAIL_VERIFICATION_VALIDATORS__ =
68
- emailVerificationValidators;
69
- export async function registerAuthValidator(validator) {
70
- authValidators.add(validator);
71
- }
72
- export async function registerPasswordResetValidator(validator) {
73
- passwordResetValidators.add(validator);
74
- }
75
- export async function registerEmailVerificationValidator(validator) {
76
- emailVerificationValidators.add(validator);
77
- }
78
- export { registerIdentityAugmenter, registerSessionAugmenter, registerPasswordResetSessionAugmenter, augmentUser, augmentSession, };
79
- export async function registerSecurityRequirement(requirement) {
80
- securityRequirements.add(requirement);
81
- }
82
- export async function runPasswordResetValidators(userId) {
83
- for (const validator of passwordResetValidators) {
84
- const interception = await validator(userId);
85
- if (interception)
86
- return interception;
87
- }
88
- return null;
89
- }
90
- export async function runEmailVerificationValidators(userId) {
91
- for (const validator of emailVerificationValidators) {
92
- const interception = await validator(userId);
93
- if (interception)
94
- return interception;
95
- }
96
- return null;
97
- }
98
- /**
99
- * Augments a base user with data from all registered modules.
100
- * This is now just a wrapper that includes core RBAC data.
101
- */
102
- export async function performFullUserAugmentation(user) {
103
- const coreRbacData = await coreRbacAugmenter(user);
104
- return await augmentUser(user, coreRbacData);
105
- }
106
- /**
107
- * Checks if the current session satisfies all registered security requirements.
108
- */
109
- export async function checkSecurity(session, user, requiredRoles, requiredPermissions, fallbackRedirect) {
110
- var _a;
111
- if (!user) {
112
- console.warn("User is required for security check");
113
- return { satisfied: false, redirect: fallbackRedirect !== null && fallbackRedirect !== void 0 ? fallbackRedirect : "/signin" };
114
- }
115
- const userRoles = Array.isArray(user.roles) ? user.roles : [];
116
- const userPermissions = Array.isArray(user.permissions)
117
- ? user.permissions
118
- : [];
119
- // 1. Core Role Check (At least one role must match)
120
- if (requiredRoles && requiredRoles.length > 0) {
121
- const hasRole = requiredRoles.some((role) => userRoles.includes(role));
122
- if (!hasRole) {
123
- console.warn(`User lacks required roles: ${requiredRoles.join(", ")}`);
124
- return {
125
- satisfied: false,
126
- redirect: fallbackRedirect,
127
- };
128
- }
129
- }
130
- // 2. Core Permission Check (ALL permissions must match)
131
- if (requiredPermissions && requiredPermissions.length > 0) {
132
- const hasAllPermissions = requiredPermissions.every((perm) => userPermissions.includes(perm));
133
- if (!hasAllPermissions) {
134
- console.warn(`User lacks required permissions: ${requiredPermissions.join(", ")}`);
135
- return {
136
- satisfied: false,
137
- redirect: fallbackRedirect,
138
- };
139
- }
140
- }
141
- // 3. Modular Requirements Check
142
- if (securityRequirements) {
143
- for (const requirement of securityRequirements) {
144
- try {
145
- const result = await requirement(session, user);
146
- if (result && !result.satisfied) {
147
- return {
148
- ...result,
149
- redirect: (_a = result.redirect) !== null && _a !== void 0 ? _a : fallbackRedirect,
150
- };
151
- }
152
- }
153
- catch (error) {
154
- console.error("[Auth:Security] Requirement failed:", error);
155
- }
156
- }
157
- }
158
- return { satisfied: true };
159
- }
160
- /**
161
- * Sign In Logic
162
- */
163
- export async function signIn(data) {
164
- const { email, password } = await loginSchema.parseAsync(data);
165
- const user = await getUserFromEmail(email);
166
- if (!user) {
167
- return { status: "ERROR", message: "Invalid email or password" };
168
- }
169
- const passwordHash = await getUserPasswordHash(user.id);
170
- if (!passwordHash || !(await verifyPasswordHash(passwordHash, password))) {
171
- return { status: "ERROR", message: "Invalid email or password" };
172
- }
173
- // Interception Layer
174
- for (const validator of authValidators) {
175
- const interception = await validator(user.id);
176
- if (interception)
177
- return interception;
178
- }
179
- const sessionFlags = {};
180
- const sessionToken = await generateSessionToken();
181
- const session = await createSession(sessionToken, user.id, sessionFlags);
182
- await setSessionTokenCookie(sessionToken, session.expiresAt);
183
- const fullUser = await performFullUserAugmentation(user);
184
- await eventBus.publish("auth:session-created", { session, user: fullUser });
185
- return {
186
- status: "SUCCESS",
187
- session: { ...session },
188
- user: { ...fullUser },
189
- };
190
- }
191
- /**
192
- * Sign Up Logic
193
- */
194
- export async function signUp(data) {
195
- const { email, username, password } = registerSchema.parse(data);
196
- if (!(await verifyUsernameInput(username))) {
197
- throw new Error("Invalid username");
198
- }
199
- if (!(await verifyPasswordStrength(password))) {
200
- throw new Error("Weak password");
201
- }
202
- const user = await createUser(email, username, password);
203
- const verificationRequest = await createEmailVerificationRequest(user.id, user.email);
204
- await sendVerificationEmail(verificationRequest.email, verificationRequest.code);
205
- await setEmailVerificationRequestCookie(verificationRequest);
206
- const sessionFlags = {};
207
- const sessionToken = await generateSessionToken();
208
- const session = await createSession(sessionToken, user.id, sessionFlags);
209
- await setSessionTokenCookie(sessionToken, session.expiresAt);
210
- const fullUser = await performFullUserAugmentation(user);
211
- await eventBus.publish("auth:session-created", { session, user: fullUser });
212
- return {
213
- session: { ...session },
214
- user: { ...fullUser },
215
- };
216
- }
217
- /**
218
- * Finalizes login after a challenge
219
- */
220
- export async function finalizeLogin(userId, flags) {
221
- const sessionToken = await generateSessionToken();
222
- const session = await createSession(sessionToken, userId, flags);
223
- await setSessionTokenCookie(sessionToken, session.expiresAt);
224
- const user = await getUserById(userId);
225
- if (user) {
226
- await eventBus.publish("auth:session-created", { session, user });
227
- }
228
- return {
229
- session: session ? { ...session } : null,
230
- user: user ? { ...user } : null,
231
- };
232
- }
233
- /**
234
- * Sign Out
235
- */
236
- export async function signOut() {
237
- const { session, user } = await getCurrentSession();
238
- if (session) {
239
- if (user) {
240
- await eventBus.publish("auth:signed-out", { userId: user.id });
241
- }
242
- await invalidateSession(session.id);
243
- await deleteSessionTokenCookie();
244
- }
245
- }
@@ -1,35 +0,0 @@
1
- import type { PasswordResetAuthSession, PasswordResetSession } from "./types";
2
- /**
3
- * Creates a new password reset session.
4
- */
5
- export declare function createPasswordResetSession(token: string, userId: string, email: string): Promise<PasswordResetSession>;
6
- /**
7
- * Validates the password reset session token and retrieves user data.
8
- * The user data is augmented by registered modules (e.g. 2FA).
9
- */
10
- export declare function validatePasswordResetSessionToken(token: string): Promise<PasswordResetAuthSession>;
11
- /**
12
- * Marks the password reset session as email verified.
13
- */
14
- export declare function setPasswordResetSessionAsEmailVerified(sessionId: string): Promise<void>;
15
- /**
16
- * Invalidates all password reset sessions for a user.
17
- */
18
- export declare function invalidateUserPasswordResetSessions(userId: string): Promise<void>;
19
- /**
20
- * Validates the current password reset session from cookies.
21
- */
22
- export declare function getCurrentPasswordResetSession(): Promise<PasswordResetAuthSession>;
23
- /**
24
- * Sets the password reset session token cookie.
25
- */
26
- export declare function setPasswordResetSessionTokenCookie(token: string, expiresAt: Date): Promise<void>;
27
- /**
28
- * Deletes the password reset session token cookie.
29
- */
30
- export declare function deletePasswordResetSessionTokenCookie(): Promise<void>;
31
- /**
32
- * Sends a password reset email with the OTP code.
33
- */
34
- export declare function sendPasswordResetEmail(email: string, code: string): Promise<void>;
35
- //# sourceMappingURL=password-reset.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"password-reset.d.ts","sourceRoot":"","sources":["../../../src/core/auth/password-reset.ts"],"names":[],"mappings":"AAeA,OAAO,KAAK,EAAE,wBAAwB,EAAE,oBAAoB,EAAE,MAAM,SAAS,CAAC;AAG9E;;GAEG;AACH,wBAAsB,0BAA0B,CAC9C,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,MAAM,GACZ,OAAO,CAAC,oBAAoB,CAAC,CAe/B;AAED;;;GAGG;AACH,wBAAsB,iCAAiC,CACrD,KAAK,EAAE,MAAM,GACZ,OAAO,CAAC,wBAAwB,CAAC,CAoCnC;AAED;;GAEG;AACH,wBAAsB,sCAAsC,CAC1D,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,IAAI,CAAC,CAOf;AAED;;GAEG;AACH,wBAAsB,mCAAmC,CACvD,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,IAAI,CAAC,CAIf;AAED;;GAEG;AACH,wBAAsB,8BAA8B,IAAI,OAAO,CAAC,wBAAwB,CAAC,CAexF;AAED;;GAEG;AACH,wBAAsB,kCAAkC,CACtD,KAAK,EAAE,MAAM,EACb,SAAS,EAAE,IAAI,GACd,OAAO,CAAC,IAAI,CAAC,CAUf;AAED;;GAEG;AACH,wBAAsB,qCAAqC,IAAI,OAAO,CAAC,IAAI,CAAC,CAG3E;AAED;;GAEG;AACH,wBAAsB,sBAAsB,CAC1C,KAAK,EAAE,MAAM,EACb,IAAI,EAAE,MAAM,GACX,OAAO,CAAC,IAAI,CAAC,CAEf"}
@@ -1,122 +0,0 @@
1
- "use server";
2
- import { sha256 } from "@oslojs/crypto/sha2";
3
- import { encodeHexLowerCase } from "@oslojs/encoding";
4
- import { addHours } from "date-fns";
5
- import { eq } from "drizzle-orm";
6
- import { cookies } from "next/headers";
7
- import { db } from "../../server/database/inject";
8
- import { passwordResetSessionTable, userTable, } from "../../server/database/schema";
9
- import { sendResetPassword } from "../../server/emails/index";
10
- import { augmentPasswordResetSession } from "./augment";
11
- import { performFullUserAugmentation } from "./logic";
12
- import { generateRandomOTP } from "./utils/encode";
13
- /**
14
- * Creates a new password reset session.
15
- */
16
- export async function createPasswordResetSession(token, userId, email) {
17
- const sessionId = encodeHexLowerCase(sha256(new TextEncoder().encode(token)));
18
- const [session] = await db
19
- .insert(passwordResetSessionTable)
20
- .values({
21
- id: sessionId,
22
- email: email,
23
- code: generateRandomOTP(),
24
- expiresAt: new Date(addHours(new Date(), 1)),
25
- userId: userId,
26
- })
27
- .returning();
28
- return session;
29
- }
30
- /**
31
- * Validates the password reset session token and retrieves user data.
32
- * The user data is augmented by registered modules (e.g. 2FA).
33
- */
34
- export async function validatePasswordResetSessionToken(token) {
35
- const sessionId = encodeHexLowerCase(sha256(new TextEncoder().encode(token)));
36
- const [row] = await db
37
- .select({
38
- session: passwordResetSessionTable,
39
- user: userTable,
40
- })
41
- .from(passwordResetSessionTable)
42
- .innerJoin(userTable, eq(passwordResetSessionTable.userId, userTable.id))
43
- .where(eq(passwordResetSessionTable.id, sessionId));
44
- if (!row || !row.user) {
45
- return { session: null, user: null };
46
- }
47
- const { session: baseSession, user: baseUser } = row;
48
- // Check for expiration
49
- if (new Date() > baseSession.expiresAt) {
50
- await db
51
- .delete(passwordResetSessionTable)
52
- .where(eq(passwordResetSessionTable.id, baseSession.id));
53
- return { session: null, user: null };
54
- }
55
- // STRICTLY remove non-serializable and sensitive fields
56
- const { password, recovery_code, ...safeUser } = baseUser;
57
- // AUGMENT (EXTENSIBILITY POINTS)
58
- const user = await performFullUserAugmentation(safeUser);
59
- const session = await augmentPasswordResetSession(baseSession);
60
- return { session, user };
61
- }
62
- /**
63
- * Marks the password reset session as email verified.
64
- */
65
- export async function setPasswordResetSessionAsEmailVerified(sessionId) {
66
- await db
67
- .update(passwordResetSessionTable)
68
- .set({
69
- emailVerified: true,
70
- })
71
- .where(eq(passwordResetSessionTable.id, sessionId));
72
- }
73
- /**
74
- * Invalidates all password reset sessions for a user.
75
- */
76
- export async function invalidateUserPasswordResetSessions(userId) {
77
- await db
78
- .delete(passwordResetSessionTable)
79
- .where(eq(passwordResetSessionTable.userId, userId));
80
- }
81
- /**
82
- * Validates the current password reset session from cookies.
83
- */
84
- export async function getCurrentPasswordResetSession() {
85
- var _a, _b;
86
- const cookieStore = await cookies();
87
- const token = (_b = (_a = cookieStore.get("password_reset_session")) === null || _a === void 0 ? void 0 : _a.value) !== null && _b !== void 0 ? _b : null;
88
- if (token === null) {
89
- return { session: null, user: null };
90
- }
91
- const result = await validatePasswordResetSessionToken(token);
92
- if (result.session === null) {
93
- await deletePasswordResetSessionTokenCookie();
94
- }
95
- return result;
96
- }
97
- /**
98
- * Sets the password reset session token cookie.
99
- */
100
- export async function setPasswordResetSessionTokenCookie(token, expiresAt) {
101
- const cookieStore = await cookies();
102
- cookieStore.set("password_reset_session", token, {
103
- expires: expiresAt,
104
- sameSite: "lax",
105
- httpOnly: true,
106
- path: "/",
107
- secure: process.env.NODE_ENV === "production",
108
- });
109
- }
110
- /**
111
- * Deletes the password reset session token cookie.
112
- */
113
- export async function deletePasswordResetSessionTokenCookie() {
114
- const cookieStore = await cookies();
115
- cookieStore.delete("password_reset_session");
116
- }
117
- /**
118
- * Sends a password reset email with the OTP code.
119
- */
120
- export async function sendPasswordResetEmail(email, code) {
121
- await sendResetPassword(email, code);
122
- }
@@ -1,56 +0,0 @@
1
- /**
2
- * CORE RBAC LOGIC
3
- * This file handles all database operations for Roles and Permissions.
4
- */
5
- export declare function getRoles(): Promise<{
6
- id: string;
7
- name: string;
8
- description: string | null;
9
- }[]>;
10
- export declare function getRoleById(roleId: string): Promise<{
11
- id: string;
12
- name: string;
13
- description: string | null;
14
- }>;
15
- export declare function createRole(name: string, description?: string): Promise<{
16
- id: string;
17
- name: string;
18
- description: string | null;
19
- }[]>;
20
- export declare function deleteRole(roleId: string): Promise<import("pg").QueryResult<never>>;
21
- export declare function getPermissions(): Promise<{
22
- id: string;
23
- name: string;
24
- description: string | null;
25
- }[]>;
26
- export declare function createPermission(name: string, description?: string): Promise<{
27
- id: string;
28
- name: string;
29
- description: string | null;
30
- }[]>;
31
- export declare function deletePermission(permissionId: string): Promise<import("pg").QueryResult<never>>;
32
- export declare function getRolePermissions(roleId: string): Promise<{
33
- id: string;
34
- name: string;
35
- }[]>;
36
- export declare function assignPermissionToRole(roleId: string, permissionId: string): Promise<import("pg").QueryResult<never>>;
37
- export declare function revokePermissionFromRole(roleId: string, permissionId: string): Promise<import("pg").QueryResult<never>>;
38
- export declare function assignRoleToUser(userId: string, roleId: string): Promise<import("pg").QueryResult<never>>;
39
- export declare function revokeRoleFromUser(userId: string, roleId: string): Promise<import("pg").QueryResult<never>>;
40
- export declare function assignPermissionToUser(userId: string, permissionId: string): Promise<import("pg").QueryResult<never>>;
41
- export declare function revokePermissionFromUser(userId: string, permissionId: string): Promise<import("pg").QueryResult<never>>;
42
- export declare function getUserRbacData(userId: string): Promise<{
43
- roles: {
44
- id: string;
45
- name: string;
46
- }[];
47
- directPermissions: {
48
- id: string;
49
- name: string;
50
- }[];
51
- effectivePermissions: {
52
- id: string;
53
- name: string;
54
- }[];
55
- }>;
56
- //# sourceMappingURL=rbac.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"rbac.d.ts","sourceRoot":"","sources":["../../../src/core/auth/rbac.ts"],"names":[],"mappings":"AAkBA;;;GAGG;AAIH,wBAAsB,QAAQ;;;;KAE7B;AAED,wBAAsB,WAAW,CAAC,MAAM,EAAE,MAAM;;;;GAM/C;AAED,wBAAsB,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,MAAM;;;;KAElE;AAED,wBAAsB,UAAU,CAAC,MAAM,EAAE,MAAM,4CAE9C;AAID,wBAAsB,cAAc;;;;KAKnC;AAED,wBAAsB,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,MAAM;;;;KAKxE;AAED,wBAAsB,gBAAgB,CAAC,YAAY,EAAE,MAAM,4CAI1D;AAID,wBAAsB,kBAAkB,CAAC,MAAM,EAAE,MAAM;;;KAYtD;AAED,wBAAsB,sBAAsB,CAC1C,MAAM,EAAE,MAAM,EACd,YAAY,EAAE,MAAM,4CAMrB;AAED,wBAAsB,wBAAwB,CAC5C,MAAM,EAAE,MAAM,EACd,YAAY,EAAE,MAAM,4CAUrB;AAID,wBAAsB,gBAAgB,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,4CAKpE;AAED,wBAAsB,kBAAkB,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,4CAStE;AAED,wBAAsB,sBAAsB,CAC1C,MAAM,EAAE,MAAM,EACd,YAAY,EAAE,MAAM,4CAMrB;AAED,wBAAsB,wBAAwB,CAC5C,MAAM,EAAE,MAAM,EACd,YAAY,EAAE,MAAM,4CAUrB;AAED,wBAAsB,eAAe,CAAC,MAAM,EAAE,MAAM;;;;;;;;;;YAwCP,MAAM;cAAQ,MAAM;;GAUhE"}