@m5kdev/backend 0.1.0 → 0.1.2

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 (294) hide show
  1. package/.cursor/rules/backend.mdc +70 -0
  2. package/.turbo/turbo-build.log +5 -0
  3. package/.turbo/turbo-check-types.log +5 -0
  4. package/.turbo/turbo-lint$colon$fix.log +255 -0
  5. package/CHANGELOG.md +19 -0
  6. package/dist/src/lib/posthog.d.ts +3 -0
  7. package/dist/src/lib/posthog.d.ts.map +1 -0
  8. package/dist/src/lib/posthog.js +7 -0
  9. package/dist/src/lib/sentry.d.ts +2 -0
  10. package/dist/src/lib/sentry.d.ts.map +1 -0
  11. package/dist/src/lib/sentry.js +9 -0
  12. package/dist/src/modules/access/access.repository.d.ts +2348 -0
  13. package/dist/src/modules/access/access.repository.d.ts.map +1 -0
  14. package/dist/src/modules/access/access.repository.js +32 -0
  15. package/dist/src/modules/access/access.service.d.ts +22 -0
  16. package/dist/src/modules/access/access.service.d.ts.map +1 -0
  17. package/dist/src/modules/access/access.service.js +51 -0
  18. package/dist/src/modules/access/access.test.d.ts +2 -0
  19. package/dist/src/modules/access/access.test.d.ts.map +1 -0
  20. package/dist/src/modules/access/access.test.js +182 -0
  21. package/dist/src/modules/access/access.utils.d.ts +17 -0
  22. package/dist/src/modules/access/access.utils.d.ts.map +1 -0
  23. package/dist/src/modules/access/access.utils.js +20 -0
  24. package/dist/src/modules/ai/ai.db.d.ts +396 -0
  25. package/dist/src/modules/ai/ai.db.d.ts.map +1 -0
  26. package/dist/src/modules/ai/ai.db.js +39 -0
  27. package/dist/src/modules/ai/ai.prompt.d.ts +28 -0
  28. package/dist/src/modules/ai/ai.prompt.d.ts.map +1 -0
  29. package/dist/src/modules/ai/ai.prompt.js +30 -0
  30. package/dist/src/modules/ai/ai.repository.d.ts +424 -0
  31. package/dist/src/modules/ai/ai.repository.d.ts.map +1 -0
  32. package/dist/src/modules/ai/ai.repository.js +26 -0
  33. package/dist/src/modules/ai/ai.router.d.ts +2 -0
  34. package/dist/src/modules/ai/ai.router.d.ts.map +1 -0
  35. package/dist/src/modules/ai/ai.router.js +132 -0
  36. package/dist/src/modules/ai/ai.service.d.ts +115 -0
  37. package/dist/src/modules/ai/ai.service.d.ts.map +1 -0
  38. package/dist/src/modules/ai/ai.service.js +207 -0
  39. package/dist/src/modules/ai/ai.trpc.d.ts +59 -0
  40. package/dist/src/modules/ai/ai.trpc.d.ts.map +1 -0
  41. package/dist/src/modules/ai/ai.trpc.js +20 -0
  42. package/dist/src/modules/ai/ideogram/ideogram.constants.d.ts +8 -0
  43. package/dist/src/modules/ai/ideogram/ideogram.constants.d.ts.map +1 -0
  44. package/dist/src/modules/ai/ideogram/ideogram.constants.js +167 -0
  45. package/dist/src/modules/ai/ideogram/ideogram.dto.d.ts +230 -0
  46. package/dist/src/modules/ai/ideogram/ideogram.dto.d.ts.map +1 -0
  47. package/dist/src/modules/ai/ideogram/ideogram.dto.js +49 -0
  48. package/dist/src/modules/ai/ideogram/ideogram.prompt.d.ts +3 -0
  49. package/dist/src/modules/ai/ideogram/ideogram.prompt.d.ts.map +1 -0
  50. package/dist/src/modules/ai/ideogram/ideogram.prompt.js +860 -0
  51. package/dist/src/modules/ai/ideogram/ideogram.repository.d.ts +7 -0
  52. package/dist/src/modules/ai/ideogram/ideogram.repository.d.ts.map +1 -0
  53. package/dist/src/modules/ai/ideogram/ideogram.repository.js +46 -0
  54. package/dist/src/modules/ai/ideogram/ideogram.service.d.ts +10 -0
  55. package/dist/src/modules/ai/ideogram/ideogram.service.d.ts.map +1 -0
  56. package/dist/src/modules/ai/ideogram/ideogram.service.js +11 -0
  57. package/dist/src/modules/auth/auth.db.d.ts +2336 -0
  58. package/dist/src/modules/auth/auth.db.d.ts.map +1 -0
  59. package/dist/src/modules/auth/auth.db.js +215 -0
  60. package/dist/src/modules/auth/auth.dto.d.ts +66 -0
  61. package/dist/src/modules/auth/auth.dto.d.ts.map +1 -0
  62. package/dist/src/modules/auth/auth.dto.js +38 -0
  63. package/dist/src/modules/auth/auth.lib.d.ts +4874 -0
  64. package/dist/src/modules/auth/auth.lib.d.ts.map +1 -0
  65. package/dist/src/modules/auth/auth.lib.js +284 -0
  66. package/dist/src/modules/auth/auth.middleware.d.ts +615 -0
  67. package/dist/src/modules/auth/auth.middleware.d.ts.map +1 -0
  68. package/dist/src/modules/auth/auth.middleware.js +52 -0
  69. package/dist/src/modules/auth/auth.repository.d.ts +2417 -0
  70. package/dist/src/modules/auth/auth.repository.d.ts.map +1 -0
  71. package/dist/src/modules/auth/auth.repository.js +541 -0
  72. package/dist/src/modules/auth/auth.service.d.ts +104 -0
  73. package/dist/src/modules/auth/auth.service.d.ts.map +1 -0
  74. package/dist/src/modules/auth/auth.service.js +201 -0
  75. package/dist/src/modules/auth/auth.trpc.d.ts +309 -0
  76. package/dist/src/modules/auth/auth.trpc.d.ts.map +1 -0
  77. package/dist/src/modules/auth/auth.trpc.js +157 -0
  78. package/dist/src/modules/auth/auth.utils.d.ts +2352 -0
  79. package/dist/src/modules/auth/auth.utils.d.ts.map +1 -0
  80. package/dist/src/modules/auth/auth.utils.js +97 -0
  81. package/dist/src/modules/base/base.abstract.d.ts +19 -0
  82. package/dist/src/modules/base/base.abstract.d.ts.map +1 -0
  83. package/dist/src/modules/base/base.abstract.js +53 -0
  84. package/dist/src/modules/base/base.dto.d.ts +70 -0
  85. package/dist/src/modules/base/base.dto.d.ts.map +1 -0
  86. package/dist/src/modules/base/base.dto.js +112 -0
  87. package/dist/src/modules/base/base.grants.d.ts +29 -0
  88. package/dist/src/modules/base/base.grants.d.ts.map +1 -0
  89. package/dist/src/modules/base/base.grants.js +123 -0
  90. package/dist/src/modules/base/base.grants.test.d.ts +2 -0
  91. package/dist/src/modules/base/base.grants.test.d.ts.map +1 -0
  92. package/dist/src/modules/base/base.grants.test.js +668 -0
  93. package/dist/src/modules/base/base.repository.d.ts +97 -0
  94. package/dist/src/modules/base/base.repository.d.ts.map +1 -0
  95. package/dist/src/modules/base/base.repository.js +307 -0
  96. package/dist/src/modules/base/base.service.d.ts +42 -0
  97. package/dist/src/modules/base/base.service.d.ts.map +1 -0
  98. package/dist/src/modules/base/base.service.js +109 -0
  99. package/dist/src/modules/base/base.types.d.ts +2 -0
  100. package/dist/src/modules/base/base.types.d.ts.map +1 -0
  101. package/dist/src/modules/base/base.types.js +2 -0
  102. package/dist/src/modules/billing/billing.db.d.ts +366 -0
  103. package/dist/src/modules/billing/billing.db.d.ts.map +1 -0
  104. package/dist/src/modules/billing/billing.db.js +29 -0
  105. package/dist/src/modules/billing/billing.repository.d.ts +2764 -0
  106. package/dist/src/modules/billing/billing.repository.d.ts.map +1 -0
  107. package/dist/src/modules/billing/billing.repository.js +235 -0
  108. package/dist/src/modules/billing/billing.router.d.ts +5 -0
  109. package/dist/src/modules/billing/billing.router.d.ts.map +1 -0
  110. package/dist/src/modules/billing/billing.router.js +56 -0
  111. package/dist/src/modules/billing/billing.service.d.ts +60 -0
  112. package/dist/src/modules/billing/billing.service.d.ts.map +1 -0
  113. package/dist/src/modules/billing/billing.service.js +147 -0
  114. package/dist/src/modules/billing/billing.trpc.d.ts +75 -0
  115. package/dist/src/modules/billing/billing.trpc.d.ts.map +1 -0
  116. package/dist/src/modules/billing/billing.trpc.js +17 -0
  117. package/dist/src/modules/clay/clay.repository.d.ts +6 -0
  118. package/dist/src/modules/clay/clay.repository.d.ts.map +1 -0
  119. package/dist/src/modules/clay/clay.repository.js +26 -0
  120. package/dist/src/modules/clay/clay.service.d.ts +29 -0
  121. package/dist/src/modules/clay/clay.service.d.ts.map +1 -0
  122. package/dist/src/modules/clay/clay.service.js +24 -0
  123. package/dist/src/modules/connect/connect.db.d.ts +357 -0
  124. package/dist/src/modules/connect/connect.db.d.ts.map +1 -0
  125. package/dist/src/modules/connect/connect.db.js +30 -0
  126. package/dist/src/modules/connect/connect.dto.d.ts +75 -0
  127. package/dist/src/modules/connect/connect.dto.d.ts.map +1 -0
  128. package/dist/src/modules/connect/connect.dto.js +36 -0
  129. package/dist/src/modules/connect/connect.linkedin.d.ts +3 -0
  130. package/dist/src/modules/connect/connect.linkedin.d.ts.map +1 -0
  131. package/dist/src/modules/connect/connect.linkedin.js +53 -0
  132. package/dist/src/modules/connect/connect.oauth.d.ts +28 -0
  133. package/dist/src/modules/connect/connect.oauth.d.ts.map +1 -0
  134. package/dist/src/modules/connect/connect.oauth.js +198 -0
  135. package/dist/src/modules/connect/connect.repository.d.ts +414 -0
  136. package/dist/src/modules/connect/connect.repository.d.ts.map +1 -0
  137. package/dist/src/modules/connect/connect.repository.js +54 -0
  138. package/dist/src/modules/connect/connect.router.d.ts +5 -0
  139. package/dist/src/modules/connect/connect.router.d.ts.map +1 -0
  140. package/dist/src/modules/connect/connect.router.js +54 -0
  141. package/dist/src/modules/connect/connect.service.d.ts +89 -0
  142. package/dist/src/modules/connect/connect.service.d.ts.map +1 -0
  143. package/dist/src/modules/connect/connect.service.js +114 -0
  144. package/dist/src/modules/connect/connect.trpc.d.ts +81 -0
  145. package/dist/src/modules/connect/connect.trpc.d.ts.map +1 -0
  146. package/dist/src/modules/connect/connect.trpc.js +21 -0
  147. package/dist/src/modules/connect/connect.types.d.ts +26 -0
  148. package/dist/src/modules/connect/connect.types.d.ts.map +1 -0
  149. package/dist/src/modules/connect/connect.types.js +2 -0
  150. package/dist/src/modules/crypto/crypto.db.d.ts +152 -0
  151. package/dist/src/modules/crypto/crypto.db.d.ts.map +1 -0
  152. package/dist/src/modules/crypto/crypto.db.js +17 -0
  153. package/dist/src/modules/crypto/crypto.repository.d.ts +160 -0
  154. package/dist/src/modules/crypto/crypto.repository.d.ts.map +1 -0
  155. package/dist/src/modules/crypto/crypto.repository.js +10 -0
  156. package/dist/src/modules/crypto/crypto.service.d.ts +11 -0
  157. package/dist/src/modules/crypto/crypto.service.d.ts.map +1 -0
  158. package/dist/src/modules/crypto/crypto.service.js +52 -0
  159. package/dist/src/modules/email/email.service.d.ts +57 -0
  160. package/dist/src/modules/email/email.service.d.ts.map +1 -0
  161. package/dist/src/modules/email/email.service.js +107 -0
  162. package/dist/src/modules/file/file.repository.d.ts +13 -0
  163. package/dist/src/modules/file/file.repository.d.ts.map +1 -0
  164. package/dist/src/modules/file/file.repository.js +79 -0
  165. package/dist/src/modules/file/file.router.d.ts +4 -0
  166. package/dist/src/modules/file/file.router.d.ts.map +1 -0
  167. package/dist/src/modules/file/file.router.js +99 -0
  168. package/dist/src/modules/file/file.service.d.ts +25 -0
  169. package/dist/src/modules/file/file.service.d.ts.map +1 -0
  170. package/dist/src/modules/file/file.service.js +150 -0
  171. package/dist/src/modules/recurrence/recurrence.db.d.ts +563 -0
  172. package/dist/src/modules/recurrence/recurrence.db.d.ts.map +1 -0
  173. package/dist/src/modules/recurrence/recurrence.db.js +66 -0
  174. package/dist/src/modules/recurrence/recurrence.repository.d.ts +585 -0
  175. package/dist/src/modules/recurrence/recurrence.repository.d.ts.map +1 -0
  176. package/dist/src/modules/recurrence/recurrence.repository.js +39 -0
  177. package/dist/src/modules/recurrence/recurrence.service.d.ts +30 -0
  178. package/dist/src/modules/recurrence/recurrence.service.d.ts.map +1 -0
  179. package/dist/src/modules/recurrence/recurrence.service.js +70 -0
  180. package/dist/src/modules/recurrence/recurrence.trpc.d.ts +243 -0
  181. package/dist/src/modules/recurrence/recurrence.trpc.d.ts.map +1 -0
  182. package/dist/src/modules/recurrence/recurrence.trpc.js +65 -0
  183. package/dist/src/modules/social/social.dto.d.ts +35 -0
  184. package/dist/src/modules/social/social.dto.d.ts.map +1 -0
  185. package/dist/src/modules/social/social.dto.js +18 -0
  186. package/dist/src/modules/social/social.linkedin.d.ts +11 -0
  187. package/dist/src/modules/social/social.linkedin.d.ts.map +1 -0
  188. package/dist/src/modules/social/social.linkedin.js +427 -0
  189. package/dist/src/modules/social/social.linkedin.test.d.ts +2 -0
  190. package/dist/src/modules/social/social.linkedin.test.d.ts.map +1 -0
  191. package/dist/src/modules/social/social.linkedin.test.js +235 -0
  192. package/dist/src/modules/social/social.service.d.ts +29 -0
  193. package/dist/src/modules/social/social.service.d.ts.map +1 -0
  194. package/dist/src/modules/social/social.service.js +76 -0
  195. package/dist/src/modules/social/social.types.d.ts +36 -0
  196. package/dist/src/modules/social/social.types.d.ts.map +1 -0
  197. package/dist/src/modules/social/social.types.js +2 -0
  198. package/dist/src/modules/tag/tag.db.d.ts +347 -0
  199. package/dist/src/modules/tag/tag.db.d.ts.map +1 -0
  200. package/dist/src/modules/tag/tag.db.js +42 -0
  201. package/dist/src/modules/tag/tag.dto.d.ts +1019 -0
  202. package/dist/src/modules/tag/tag.dto.d.ts.map +1 -0
  203. package/dist/src/modules/tag/tag.dto.js +9 -0
  204. package/dist/src/modules/tag/tag.repository.d.ts +384 -0
  205. package/dist/src/modules/tag/tag.repository.d.ts.map +1 -0
  206. package/dist/src/modules/tag/tag.repository.js +154 -0
  207. package/dist/src/modules/tag/tag.service.d.ts +36 -0
  208. package/dist/src/modules/tag/tag.service.d.ts.map +1 -0
  209. package/dist/src/modules/tag/tag.service.js +31 -0
  210. package/dist/src/modules/tag/tag.trpc.d.ts +191 -0
  211. package/dist/src/modules/tag/tag.trpc.d.ts.map +1 -0
  212. package/dist/src/modules/tag/tag.trpc.js +47 -0
  213. package/dist/src/modules/utils/applyPagination.d.ts +7 -0
  214. package/dist/src/modules/utils/applyPagination.d.ts.map +1 -0
  215. package/dist/src/modules/utils/applyPagination.js +16 -0
  216. package/dist/src/modules/utils/applySorting.d.ts +9 -0
  217. package/dist/src/modules/utils/applySorting.d.ts.map +1 -0
  218. package/dist/src/modules/utils/applySorting.js +18 -0
  219. package/dist/src/modules/utils/getConditionsFromFilters.d.ts +5 -0
  220. package/dist/src/modules/utils/getConditionsFromFilters.d.ts.map +1 -0
  221. package/dist/src/modules/utils/getConditionsFromFilters.js +200 -0
  222. package/dist/src/modules/video/video.service.d.ts +8 -0
  223. package/dist/src/modules/video/video.service.d.ts.map +1 -0
  224. package/dist/src/modules/video/video.service.js +84 -0
  225. package/dist/src/modules/webhook/webhook.constants.d.ts +9 -0
  226. package/dist/src/modules/webhook/webhook.constants.d.ts.map +1 -0
  227. package/dist/src/modules/webhook/webhook.constants.js +10 -0
  228. package/dist/src/modules/webhook/webhook.db.d.ts +137 -0
  229. package/dist/src/modules/webhook/webhook.db.d.ts.map +1 -0
  230. package/dist/src/modules/webhook/webhook.db.js +17 -0
  231. package/dist/src/modules/webhook/webhook.dto.d.ts +395 -0
  232. package/dist/src/modules/webhook/webhook.dto.d.ts.map +1 -0
  233. package/dist/src/modules/webhook/webhook.dto.js +7 -0
  234. package/dist/src/modules/webhook/webhook.repository.d.ts +149 -0
  235. package/dist/src/modules/webhook/webhook.repository.d.ts.map +1 -0
  236. package/dist/src/modules/webhook/webhook.repository.js +56 -0
  237. package/dist/src/modules/webhook/webhook.router.d.ts +4 -0
  238. package/dist/src/modules/webhook/webhook.router.d.ts.map +1 -0
  239. package/dist/src/modules/webhook/webhook.router.js +30 -0
  240. package/dist/src/modules/webhook/webhook.service.d.ts +10 -0
  241. package/dist/src/modules/webhook/webhook.service.d.ts.map +1 -0
  242. package/dist/src/modules/webhook/webhook.service.js +68 -0
  243. package/dist/src/modules/workflow/workflow.db.d.ts +297 -0
  244. package/dist/src/modules/workflow/workflow.db.d.ts.map +1 -0
  245. package/dist/src/modules/workflow/workflow.db.js +30 -0
  246. package/dist/src/modules/workflow/workflow.repository.d.ts +344 -0
  247. package/dist/src/modules/workflow/workflow.repository.d.ts.map +1 -0
  248. package/dist/src/modules/workflow/workflow.repository.js +105 -0
  249. package/dist/src/modules/workflow/workflow.service.d.ts +22 -0
  250. package/dist/src/modules/workflow/workflow.service.d.ts.map +1 -0
  251. package/dist/src/modules/workflow/workflow.service.js +37 -0
  252. package/dist/src/modules/workflow/workflow.trpc.d.ts +93 -0
  253. package/dist/src/modules/workflow/workflow.trpc.d.ts.map +1 -0
  254. package/dist/src/modules/workflow/workflow.trpc.js +21 -0
  255. package/dist/src/modules/workflow/workflow.types.d.ts +21 -0
  256. package/dist/src/modules/workflow/workflow.types.d.ts.map +1 -0
  257. package/dist/src/modules/workflow/workflow.types.js +2 -0
  258. package/dist/src/modules/workflow/workflow.utils.d.ts +22 -0
  259. package/dist/src/modules/workflow/workflow.utils.d.ts.map +1 -0
  260. package/dist/src/modules/workflow/workflow.utils.js +173 -0
  261. package/dist/src/test/stubs/utils.d.ts +3 -0
  262. package/dist/src/test/stubs/utils.d.ts.map +1 -0
  263. package/dist/src/test/stubs/utils.js +5 -0
  264. package/dist/src/trpc/context.d.ts +42 -0
  265. package/dist/src/trpc/context.d.ts.map +1 -0
  266. package/dist/src/trpc/context.js +17 -0
  267. package/dist/src/trpc/index.d.ts +4 -0
  268. package/dist/src/trpc/index.d.ts.map +1 -0
  269. package/dist/src/trpc/index.js +6 -0
  270. package/dist/src/trpc/procedures.d.ts +234 -0
  271. package/dist/src/trpc/procedures.d.ts.map +1 -0
  272. package/dist/src/trpc/procedures.js +32 -0
  273. package/dist/src/trpc/utils.d.ts +5 -0
  274. package/dist/src/trpc/utils.d.ts.map +1 -0
  275. package/dist/src/trpc/utils.js +20 -0
  276. package/dist/src/types.d.ts +486 -0
  277. package/dist/src/types.d.ts.map +1 -0
  278. package/dist/src/types.js +13 -0
  279. package/dist/src/utils/errors.d.ts +50 -0
  280. package/dist/src/utils/errors.d.ts.map +1 -0
  281. package/dist/src/utils/errors.js +104 -0
  282. package/dist/src/utils/logger.d.ts +2 -0
  283. package/dist/src/utils/logger.d.ts.map +1 -0
  284. package/dist/src/utils/logger.js +11 -0
  285. package/dist/src/utils/posthog.d.ts +14 -0
  286. package/dist/src/utils/posthog.d.ts.map +1 -0
  287. package/dist/src/utils/posthog.js +31 -0
  288. package/dist/src/utils/types.d.ts +5 -0
  289. package/dist/src/utils/types.d.ts.map +1 -0
  290. package/dist/src/utils/types.js +2 -0
  291. package/dist/tsconfig.tsbuildinfo +1 -0
  292. package/jest.config.ts +19 -0
  293. package/package.json +3 -6
  294. package/tsconfig.json +21 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auth.utils.d.ts","sourceRoot":"","sources":["../../../../src/modules/auth/auth.utils.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,97 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getActiveOrganizationAndTeam = getActiveOrganizationAndTeam;
4
+ exports.createOrganizationAndTeam = createOrganizationAndTeam;
5
+ const tslib_1 = require("tslib");
6
+ const drizzle_orm_1 = require("drizzle-orm");
7
+ const uuid_1 = require("uuid");
8
+ const auth = tslib_1.__importStar(require("#modules/auth/auth.db"));
9
+ const schema = { ...auth };
10
+ async function getActiveOrganizationAndTeam(orm, schema, userId) {
11
+ let organizationId;
12
+ let teamId;
13
+ let organizationRole;
14
+ let teamRole;
15
+ const [lastSession] = await orm
16
+ .select({
17
+ activeOrganizationId: schema.sessions.activeOrganizationId,
18
+ activeTeamId: schema.sessions.activeTeamId,
19
+ activeOrganizationRole: schema.sessions.activeOrganizationRole,
20
+ activeTeamRole: schema.sessions.activeTeamRole,
21
+ })
22
+ .from(schema.sessions)
23
+ .where((0, drizzle_orm_1.eq)(schema.sessions.userId, userId))
24
+ .orderBy((0, drizzle_orm_1.desc)(schema.sessions.createdAt))
25
+ .limit(1);
26
+ if (lastSession) {
27
+ organizationId = lastSession.activeOrganizationId ?? undefined;
28
+ teamId = lastSession.activeTeamId ?? undefined;
29
+ organizationRole = lastSession.activeOrganizationRole ?? undefined;
30
+ teamRole = lastSession.activeTeamRole ?? undefined;
31
+ }
32
+ if (!organizationId || !organizationRole) {
33
+ const [member] = await orm
34
+ .select({ organizationId: schema.members.organizationId, role: schema.members.role })
35
+ .from(schema.members)
36
+ .orderBy((0, drizzle_orm_1.desc)(schema.members.createdAt))
37
+ .where((0, drizzle_orm_1.eq)(schema.members.userId, userId))
38
+ .limit(1);
39
+ organizationId = member?.organizationId;
40
+ organizationRole = member?.role;
41
+ }
42
+ if (!teamId || !teamRole) {
43
+ const [teamMember] = await orm
44
+ .select({ teamId: schema.teamMembers.teamId, role: schema.teamMembers.role })
45
+ .from(schema.teamMembers)
46
+ .orderBy((0, drizzle_orm_1.desc)(schema.teamMembers.createdAt))
47
+ .where((0, drizzle_orm_1.eq)(schema.teamMembers.userId, userId))
48
+ .limit(1);
49
+ teamId = teamMember?.teamId;
50
+ teamRole = teamMember?.role;
51
+ }
52
+ return { organizationId, teamId, organizationRole, teamRole };
53
+ }
54
+ async function createOrganizationAndTeam(orm, schema, user) {
55
+ const organizationId = (0, uuid_1.v4)();
56
+ await orm.transaction(async (tx) => {
57
+ const [organization] = await tx
58
+ .insert(schema.organizations)
59
+ .values({
60
+ id: organizationId,
61
+ name: organizationId,
62
+ slug: organizationId,
63
+ })
64
+ .returning();
65
+ if (!organization)
66
+ throw new Error("createOrganizationAndTeam: Failed to create organization");
67
+ const [member] = await tx
68
+ .insert(schema.members)
69
+ .values({
70
+ userId: user.id,
71
+ organizationId: organization.id,
72
+ role: "owner",
73
+ })
74
+ .returning();
75
+ if (!member)
76
+ throw new Error("createOrganizationAndTeam: Failed to create member");
77
+ const [team] = await tx
78
+ .insert(schema.teams)
79
+ .values({
80
+ name: organization.id,
81
+ organizationId: organization.id,
82
+ })
83
+ .returning();
84
+ if (!team)
85
+ throw new Error("createOrganizationAndTeam: Failed to create team");
86
+ const [teamMember] = await tx
87
+ .insert(schema.teamMembers)
88
+ .values({
89
+ userId: user.id,
90
+ teamId: team.id,
91
+ role: "owner",
92
+ })
93
+ .returning();
94
+ if (!teamMember)
95
+ throw new Error("createOrganizationAndTeam: Failed to create team member");
96
+ });
97
+ }
@@ -0,0 +1,19 @@
1
+ import type { TRPC_ERROR_CODE_KEY } from "@trpc/server";
2
+ import type { ServerResult, ServerResultAsync } from "#modules/base/base.dto";
3
+ import type { ServerErrorLayer } from "#modules/base/base.types";
4
+ import { ServerError } from "#utils/errors";
5
+ import { logger } from "#utils/logger";
6
+ export declare abstract class Base {
7
+ layer: ServerErrorLayer;
8
+ logger: ReturnType<typeof logger.child>;
9
+ constructor(layer: ServerErrorLayer);
10
+ error(code: TRPC_ERROR_CODE_KEY, message?: string, { cause, clientMessage, log, }?: {
11
+ cause?: unknown;
12
+ clientMessage?: string;
13
+ log?: boolean;
14
+ }): import("neverthrow").Err<never, ServerError>;
15
+ handleUnknownError(error: unknown): ServerError;
16
+ throwable<T>(fn: () => ServerResult<T>): ServerResult<T>;
17
+ throwableAsync<T>(fn: () => ServerResultAsync<T>): ServerResultAsync<T>;
18
+ }
19
+ //# sourceMappingURL=base.abstract.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"base.abstract.d.ts","sourceRoot":"","sources":["../../../../src/modules/base/base.abstract.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AAExD,OAAO,KAAK,EAAE,YAAY,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAC9E,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AACjE,OAAO,EAAe,WAAW,EAAE,MAAM,eAAe,CAAC;AACzD,OAAO,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AAEvC,8BAAsB,IAAI;IACjB,KAAK,EAAE,gBAAgB,CAAC;IACxB,MAAM,EAAE,UAAU,CAAC,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC;gBAEnC,KAAK,EAAE,gBAAgB;IAKnC,KAAK,CACH,IAAI,EAAE,mBAAmB,EACzB,OAAO,CAAC,EAAE,MAAM,EAChB,EACE,KAAK,EACL,aAAa,EACb,GAA4C,GAC7C,GAAE;QAAE,KAAK,CAAC,EAAE,OAAO,CAAC;QAAC,aAAa,CAAC,EAAE,MAAM,CAAC;QAAC,GAAG,CAAC,EAAE,OAAO,CAAA;KAAO;IAgBpE,kBAAkB,CAAC,KAAK,EAAE,OAAO;IAOjC,SAAS,CAAC,CAAC,EAAE,EAAE,EAAE,MAAM,YAAY,CAAC,CAAC,CAAC,GAAG,YAAY,CAAC,CAAC,CAAC;IAQlD,cAAc,CAAC,CAAC,EAAE,EAAE,EAAE,MAAM,iBAAiB,CAAC,CAAC,CAAC,GAAG,iBAAiB,CAAC,CAAC,CAAC;CAO9E"}
@@ -0,0 +1,53 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Base = void 0;
4
+ const neverthrow_1 = require("neverthrow");
5
+ const errors_1 = require("#utils/errors");
6
+ const logger_1 = require("#utils/logger");
7
+ class Base {
8
+ layer;
9
+ logger;
10
+ constructor(layer) {
11
+ this.layer = layer;
12
+ this.logger = logger_1.logger.child({ layer: this.layer, layerName: this.constructor.name });
13
+ }
14
+ error(code, message, { cause, clientMessage, log = process.env.NODE_ENV === "development", } = {}) {
15
+ const serverError = new errors_1.ServerError({
16
+ code,
17
+ layer: this.layer,
18
+ layerName: this.constructor.name,
19
+ message,
20
+ clientMessage,
21
+ cause,
22
+ captureBoundary: true,
23
+ });
24
+ if (serverError.is5xxError())
25
+ (0, errors_1.reportError)(serverError);
26
+ if (log)
27
+ logger_1.logger.error(serverError);
28
+ return (0, neverthrow_1.err)(serverError);
29
+ }
30
+ handleUnknownError(error) {
31
+ return errors_1.ServerError.fromUnknown("INTERNAL_SERVER_ERROR", error, {
32
+ layer: this.layer,
33
+ layerName: this.constructor.name,
34
+ });
35
+ }
36
+ throwable(fn) {
37
+ try {
38
+ return fn();
39
+ }
40
+ catch (error) {
41
+ return (0, neverthrow_1.err)(this.handleUnknownError(error));
42
+ }
43
+ }
44
+ async throwableAsync(fn) {
45
+ try {
46
+ return fn();
47
+ }
48
+ catch (error) {
49
+ return (0, neverthrow_1.err)(this.handleUnknownError(error));
50
+ }
51
+ }
52
+ }
53
+ exports.Base = Base;
@@ -0,0 +1,70 @@
1
+ import { getTableColumns, type InferSelectModel, type Table } from "drizzle-orm";
2
+ import type { Result } from "neverthrow";
3
+ import { z } from "zod";
4
+ import type { ServerError } from "#utils/errors";
5
+ type Simplify<T> = {
6
+ [K in keyof T]: T[K];
7
+ } & {};
8
+ type StringKeys<T> = Extract<keyof T, string>;
9
+ export type ServerResult<T> = Result<T, ServerError>;
10
+ export type ServerResultAsync<T> = Promise<ServerResult<T>>;
11
+ export declare const createTableSelectSchema: <T extends Table>(table: T) => import("drizzle-zod").BuildSchema<"select", T["_"]["columns"], undefined, undefined>;
12
+ export type ExtractColumnTypes<T extends Table, C extends Record<string, unknown>> = Simplify<Pick<InferSelectModel<T>, Extract<keyof C, keyof InferSelectModel<T>>>>;
13
+ export declare function toZodFilter<const T extends readonly string[]>(array: T): Record<T[number], true>;
14
+ export declare function pickSchema<Shape extends z.ZodRawShape, const Keys extends readonly StringKeys<Shape>[]>(schema: z.ZodObject<Shape>, keys: Keys): z.ZodObject<Pick<Shape, Keys[number]>>;
15
+ export declare function pickTableSchema<T extends Table, K extends keyof InferSelectModel<T>>(table: T, columns: readonly K[]): z.ZodObject<Pick<(T["_"]["columns"] extends infer T_2 extends Record<string, any> ? { [K_2 in keyof T_2 as import("drizzle-zod").ColumnIsGeneratedAlwaysAs<T["_"]["columns"][K_2]> extends true ? K_2 : K_2]: T_2[K_2] extends infer TColumn extends import("drizzle-orm").Column<import("drizzle-orm").ColumnBaseConfig<import("drizzle-orm").ColumnDataType, string>, object, object> ? (TRefinements extends object ? TRefinements[K_2] extends z.ZodType<unknown, unknown, z.core.$ZodTypeInternals<unknown, unknown>> | ((schema: any) => any) ? true : false : false) extends true ? import("drizzle-orm").Assume<TRefinements[K_2 & keyof TRefinements] extends infer T_3 ? T_3 extends TRefinements[K_2 & keyof TRefinements] ? T_3 extends (schema: any) => z.ZodType ? (TColumn["_"]["notNull"] extends true ? ReturnType<T_3> : z.ZodNullable<ReturnType<T_3>>) extends infer TSchema extends z.ZodType<unknown, unknown, z.core.$ZodTypeInternals<unknown, unknown>> ? TType extends "update" ? z.ZodOptional<TSchema> : TSchema : z.ZodType<unknown, unknown, z.core.$ZodTypeInternals<unknown, unknown>> : T_3 : never : never, z.ZodType<unknown, unknown, z.core.$ZodTypeInternals<unknown, unknown>>> : import("drizzle-zod").HandleColumn<TType, TColumn, TCoerce> : T_2[K_2] extends infer TObject extends Table<import("drizzle-orm").TableConfig<import("drizzle-orm").Column<any, object, object>>> | import("drizzle-orm").View<string, boolean, import("drizzle-orm").ColumnsSelection> | import("drizzle-orm").SelectedFieldsFlat<import("drizzle-orm").Column<import("drizzle-orm").ColumnBaseConfig<import("drizzle-orm").ColumnDataType, string>, object, object>> ? import("drizzle-zod").BuildSchema<TType, import("drizzle-zod").GetSelection<TObject>, TRefinements extends object ? TRefinements[K_2 & keyof TRefinements] : undefined, TCoerce> : z.ZodAny; } : never) extends infer T_1 ? { [K_1 in keyof T_1]: T_1[K_1]; } : never, K>, z.core.$strip>;
16
+ export declare function omitSchema<Shape extends z.ZodRawShape, const Keys extends readonly StringKeys<Shape>[]>(schema: z.ZodObject<Shape>, keys: Keys): z.ZodObject<Omit<Shape, Keys[number]>>;
17
+ export declare function omitTableSchema<T extends Table, K extends keyof InferSelectModel<T>>(table: T, columns: readonly K[]): z.ZodObject<Omit<(T["_"]["columns"] extends infer T_2 extends Record<string, any> ? { [K_2 in keyof T_2 as import("drizzle-zod").ColumnIsGeneratedAlwaysAs<T["_"]["columns"][K_2]> extends true ? K_2 : K_2]: T_2[K_2] extends infer TColumn extends import("drizzle-orm").Column<import("drizzle-orm").ColumnBaseConfig<import("drizzle-orm").ColumnDataType, string>, object, object> ? (TRefinements extends object ? TRefinements[K_2] extends z.ZodType<unknown, unknown, z.core.$ZodTypeInternals<unknown, unknown>> | ((schema: any) => any) ? true : false : false) extends true ? import("drizzle-orm").Assume<TRefinements[K_2 & keyof TRefinements] extends infer T_3 ? T_3 extends TRefinements[K_2 & keyof TRefinements] ? T_3 extends (schema: any) => z.ZodType ? (TColumn["_"]["notNull"] extends true ? ReturnType<T_3> : z.ZodNullable<ReturnType<T_3>>) extends infer TSchema extends z.ZodType<unknown, unknown, z.core.$ZodTypeInternals<unknown, unknown>> ? TType extends "update" ? z.ZodOptional<TSchema> : TSchema : z.ZodType<unknown, unknown, z.core.$ZodTypeInternals<unknown, unknown>> : T_3 : never : never, z.ZodType<unknown, unknown, z.core.$ZodTypeInternals<unknown, unknown>>> : import("drizzle-zod").HandleColumn<TType, TColumn, TCoerce> : T_2[K_2] extends infer TObject extends Table<import("drizzle-orm").TableConfig<import("drizzle-orm").Column<any, object, object>>> | import("drizzle-orm").View<string, boolean, import("drizzle-orm").ColumnsSelection> | import("drizzle-orm").SelectedFieldsFlat<import("drizzle-orm").Column<import("drizzle-orm").ColumnBaseConfig<import("drizzle-orm").ColumnDataType, string>, object, object>> ? import("drizzle-zod").BuildSchema<TType, import("drizzle-zod").GetSelection<TObject>, TRefinements extends object ? TRefinements[K_2 & keyof TRefinements] : undefined, TCoerce> : z.ZodAny; } : never) extends infer T_1 ? { [K_1 in keyof T_1]: T_1[K_1]; } : never, K>, z.core.$strip>;
18
+ export { getTableColumns };
19
+ export declare function pickColumns<T extends Table, Shape extends z.ZodRawShape>(table: T, schema: z.ZodObject<Shape>): Pick<ReturnType<typeof getTableColumns<T>>, Extract<keyof Shape, string>>;
20
+ export declare function pickTableColumns<T extends Table, K extends keyof InferSelectModel<T>>(table: T, columns: readonly K[]): Pick<ReturnType<typeof getTableColumns<T>>, K>;
21
+ export declare function omitTableColumns<T extends Table, K extends keyof InferSelectModel<T>>(table: T, columns: readonly K[]): Omit<ReturnType<typeof getTableColumns<T>>, K>;
22
+ export declare function createSelectDTO<T extends Table>(table: T): {
23
+ columns: ReturnType<typeof getTableColumns<T>>;
24
+ schema: ReturnType<typeof createTableSelectSchema<T>>;
25
+ };
26
+ export declare function createSelectDTO<T extends Table, K extends Extract<keyof InferSelectModel<T>, string>>(table: T, partial: {
27
+ omit: readonly K[];
28
+ }): {
29
+ columns: ReturnType<typeof omitTableColumns<T, K>>;
30
+ schema: ReturnType<typeof omitTableSchema<T, K>>;
31
+ };
32
+ export declare function createSelectDTO<T extends Table, K extends Extract<keyof InferSelectModel<T>, string>>(table: T, partial: {
33
+ pick: readonly K[];
34
+ }): {
35
+ columns: ReturnType<typeof pickTableColumns<T, K>>;
36
+ schema: ReturnType<typeof pickTableSchema<T, K>>;
37
+ };
38
+ export declare function createSelectUtils<T extends Record<string, {
39
+ columns: unknown;
40
+ schema: z.ZodTypeAny;
41
+ }>, S extends z.ZodTypeAny>(dtos: T, output: S, transformer: (rows: Array<{
42
+ [K in keyof T]: z.infer<T[K]["schema"]>;
43
+ }>) => z.infer<S>): {
44
+ select: {
45
+ [K in keyof T]: T[K]["columns"];
46
+ };
47
+ output: S;
48
+ transformer: (rows: Array<{
49
+ [K in keyof T]: z.infer<T[K]["schema"]>;
50
+ }>) => z.infer<S>;
51
+ };
52
+ export declare const uuidOutput: z.ZodObject<{
53
+ id: z.ZodUUID;
54
+ }, z.core.$strip>;
55
+ export declare const uuidManyOutput: z.ZodObject<{
56
+ ids: z.ZodArray<z.ZodUUID>;
57
+ }, z.core.$strip>;
58
+ export declare const scheduleOutput: z.ZodObject<{
59
+ jobId: z.ZodString;
60
+ }, z.core.$strip>;
61
+ export declare const scheduleManyOutput: z.ZodObject<{
62
+ jobIds: z.ZodArray<z.ZodString>;
63
+ }, z.core.$strip>;
64
+ export declare const deleteOutput: z.ZodObject<{
65
+ id: z.ZodUUID;
66
+ }, z.core.$strip>;
67
+ export declare const deleteManyOutput: z.ZodObject<{
68
+ ids: z.ZodArray<z.ZodUUID>;
69
+ }, z.core.$strip>;
70
+ //# sourceMappingURL=base.dto.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"base.dto.d.ts","sourceRoot":"","sources":["../../../../src/modules/base/base.dto.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,112 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.deleteManyOutput = exports.deleteOutput = exports.scheduleManyOutput = exports.scheduleOutput = exports.uuidManyOutput = exports.uuidOutput = exports.getTableColumns = exports.createTableSelectSchema = void 0;
4
+ exports.toZodFilter = toZodFilter;
5
+ exports.pickSchema = pickSchema;
6
+ exports.pickTableSchema = pickTableSchema;
7
+ exports.omitSchema = omitSchema;
8
+ exports.omitTableSchema = omitTableSchema;
9
+ exports.pickColumns = pickColumns;
10
+ exports.pickTableColumns = pickTableColumns;
11
+ exports.omitTableColumns = omitTableColumns;
12
+ exports.createSelectDTO = createSelectDTO;
13
+ exports.createSelectUtils = createSelectUtils;
14
+ const drizzle_orm_1 = require("drizzle-orm");
15
+ Object.defineProperty(exports, "getTableColumns", { enumerable: true, get: function () { return drizzle_orm_1.getTableColumns; } });
16
+ const drizzle_zod_1 = require("drizzle-zod");
17
+ const zod_1 = require("zod");
18
+ // Wrapper to force the drizzle-zod overload to the Table version
19
+ const createTableSelectSchema = (table) => (0, drizzle_zod_1.createSelectSchema)(table);
20
+ exports.createTableSelectSchema = createTableSelectSchema;
21
+ function toZodFilter(array) {
22
+ return array.reduce((acc, column) => {
23
+ acc[column] = true;
24
+ return acc;
25
+ }, {});
26
+ }
27
+ function pickSchema(schema, keys) {
28
+ const mask = {};
29
+ for (const k of keys) {
30
+ mask[k] = true;
31
+ }
32
+ return schema.pick(mask);
33
+ }
34
+ function pickTableSchema(table, columns) {
35
+ return pickSchema((0, drizzle_zod_1.createSelectSchema)(table), columns);
36
+ }
37
+ function omitSchema(schema, keys) {
38
+ const mask = {};
39
+ for (const k of keys) {
40
+ mask[k] = true;
41
+ }
42
+ return schema.omit(mask);
43
+ }
44
+ function omitTableSchema(table, columns) {
45
+ return omitSchema((0, drizzle_zod_1.createSelectSchema)(table), columns);
46
+ }
47
+ function pickColumns(table, schema) {
48
+ const allColumns = (0, drizzle_orm_1.getTableColumns)(table);
49
+ const schemaKeys = Object.keys(schema.shape);
50
+ const result = {};
51
+ for (const key of schemaKeys) {
52
+ if (key in allColumns) {
53
+ result[key] = allColumns[key];
54
+ }
55
+ }
56
+ return result;
57
+ }
58
+ function pickTableColumns(table, columns) {
59
+ const allColumns = (0, drizzle_orm_1.getTableColumns)(table);
60
+ const result = {};
61
+ for (const key of columns) {
62
+ if (key in allColumns) {
63
+ result[key] = allColumns[key];
64
+ }
65
+ }
66
+ return result;
67
+ }
68
+ function omitTableColumns(table, columns) {
69
+ const allColumns = (0, drizzle_orm_1.getTableColumns)(table);
70
+ const columnsToOmit = new Set(columns);
71
+ const filteredEntries = Object.entries(allColumns).filter(([key]) => !columnsToOmit.has(key));
72
+ return Object.fromEntries(filteredEntries);
73
+ }
74
+ // Implementation
75
+ function createSelectDTO(table, partial) {
76
+ if (partial) {
77
+ if ("omit" in partial && partial.omit) {
78
+ return {
79
+ columns: omitTableColumns(table, partial.omit),
80
+ schema: omitTableSchema(table, partial.omit),
81
+ };
82
+ }
83
+ if ("pick" in partial && partial.pick) {
84
+ return {
85
+ columns: pickTableColumns(table, partial.pick),
86
+ schema: pickTableSchema(table, partial.pick),
87
+ };
88
+ }
89
+ }
90
+ return { columns: (0, drizzle_orm_1.getTableColumns)(table), schema: (0, exports.createTableSelectSchema)(table) };
91
+ }
92
+ function createSelectUtils(dtos, output, transformer) {
93
+ return {
94
+ select: Object.fromEntries(Object.entries(dtos).map(([key, dto]) => [key, dto.columns])),
95
+ output,
96
+ transformer,
97
+ };
98
+ }
99
+ exports.uuidOutput = zod_1.z.object({
100
+ id: zod_1.z.uuid(),
101
+ });
102
+ exports.uuidManyOutput = zod_1.z.object({
103
+ ids: zod_1.z.array(zod_1.z.uuid()),
104
+ });
105
+ exports.scheduleOutput = zod_1.z.object({
106
+ jobId: zod_1.z.string(),
107
+ });
108
+ exports.scheduleManyOutput = zod_1.z.object({
109
+ jobIds: zod_1.z.array(zod_1.z.string()),
110
+ });
111
+ exports.deleteOutput = exports.uuidOutput;
112
+ exports.deleteManyOutput = exports.uuidManyOutput;
@@ -0,0 +1,29 @@
1
+ import type { Session, User } from "#modules/auth/auth.lib";
2
+ import type { ServerResultAsync } from "#modules/base/base.dto";
3
+ type Level = "user" | "team" | "organization";
4
+ type Access = "all" | "own";
5
+ export type Entity = Partial<{
6
+ userId: string | null;
7
+ teamId: string | null;
8
+ organizationId: string | null;
9
+ }>;
10
+ export type Grant = {
11
+ level: Level;
12
+ role: string;
13
+ action: string;
14
+ resource: string;
15
+ access: Access;
16
+ attributes?: string[];
17
+ };
18
+ export type NestedGrants = Record<string, Partial<Record<Level, Record<string, Record<string, Access>>>>>;
19
+ export type ResourceGrant = Omit<Grant, "resource">;
20
+ export type ResourceActionGrant = Omit<ResourceGrant, "action">;
21
+ export declare function flattenNestedGrants(nestedGrants: NestedGrants): Grant[];
22
+ interface PermissionContext {
23
+ session: Session;
24
+ user: User;
25
+ }
26
+ export declare function checkPermissionSync<T extends Entity>(ctx: PermissionContext, grants: ResourceActionGrant[], entities?: T | T[]): boolean;
27
+ export declare function checkPermissionAsync<T extends Entity>(ctx: PermissionContext, grants: ResourceActionGrant[], getEntities: () => ServerResultAsync<T | T[] | undefined>): ServerResultAsync<boolean>;
28
+ export {};
29
+ //# sourceMappingURL=base.grants.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"base.grants.d.ts","sourceRoot":"","sources":["../../../../src/modules/base/base.grants.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,wBAAwB,CAAC;AAC5D,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAEhE,KAAK,KAAK,GAAG,MAAM,GAAG,MAAM,GAAG,cAAc,CAAC;AAC9C,KAAK,MAAM,GAAG,KAAK,GAAG,KAAK,CAAC;AAE5B,MAAM,MAAM,MAAM,GAAG,OAAO,CAAC;IAC3B,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;CAC/B,CAAC,CAAC;AAEH,MAAM,MAAM,KAAK,GAAG;IAClB,KAAK,EAAE,KAAK,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;CACvB,CAAC;AAEF,MAAM,MAAM,YAAY,GAAG,MAAM,CAC/B,MAAM,EACN,OAAO,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAC/D,CAAC;AAEF,MAAM,MAAM,aAAa,GAAG,IAAI,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC;AAEpD,MAAM,MAAM,mBAAmB,GAAG,IAAI,CAAC,aAAa,EAAE,QAAQ,CAAC,CAAC;AAEhE,wBAAgB,mBAAmB,CAAC,YAAY,EAAE,YAAY,GAAG,KAAK,EAAE,CAgBvE;AAcD,UAAU,iBAAiB;IACzB,OAAO,EAAE,OAAO,CAAC;IACjB,IAAI,EAAE,IAAI,CAAC;CACZ;AAoFD,wBAAgB,mBAAmB,CAAC,CAAC,SAAS,MAAM,EAClD,GAAG,EAAE,iBAAiB,EACtB,MAAM,EAAE,mBAAmB,EAAE,EAC7B,QAAQ,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,GACjB,OAAO,CAmBT;AAED,wBAAsB,oBAAoB,CAAC,CAAC,SAAS,MAAM,EACzD,GAAG,EAAE,iBAAiB,EACtB,MAAM,EAAE,mBAAmB,EAAE,EAC7B,WAAW,EAAE,MAAM,iBAAiB,CAAC,CAAC,GAAG,CAAC,EAAE,GAAG,SAAS,CAAC,GACxD,iBAAiB,CAAC,OAAO,CAAC,CAqB5B"}
@@ -0,0 +1,123 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.flattenNestedGrants = flattenNestedGrants;
4
+ exports.checkPermissionSync = checkPermissionSync;
5
+ exports.checkPermissionAsync = checkPermissionAsync;
6
+ const neverthrow_1 = require("neverthrow");
7
+ function flattenNestedGrants(nestedGrants) {
8
+ return Object.entries(nestedGrants).flatMap(([resource, levels]) => {
9
+ return Object.entries(levels).flatMap(([level, roles]) => {
10
+ return Object.entries(roles).flatMap(([role, actions]) => {
11
+ return Object.entries(actions).map(([action, access]) => {
12
+ return {
13
+ resource,
14
+ level: level,
15
+ role,
16
+ action,
17
+ access,
18
+ };
19
+ });
20
+ });
21
+ });
22
+ });
23
+ }
24
+ function checkOwnership(entityField, contextValue, entities) {
25
+ if (!contextValue)
26
+ return false;
27
+ if (!entities)
28
+ return false;
29
+ return Array.isArray(entities)
30
+ ? entities.every((e) => e[entityField] === contextValue)
31
+ : entities[entityField] === contextValue;
32
+ }
33
+ // Level priority: user -> team -> organization (bottom-up)
34
+ const LEVEL_PRIORITY = ["user", "team", "organization"];
35
+ function getRoleForLevel(level, ctx) {
36
+ switch (level) {
37
+ case "user":
38
+ return ctx.userRole;
39
+ case "team":
40
+ return ctx.teamRole;
41
+ case "organization":
42
+ return ctx.organizationRole;
43
+ }
44
+ }
45
+ function getContextValueForLevel(level, ctx) {
46
+ switch (level) {
47
+ case "user":
48
+ return ctx.userId;
49
+ case "team":
50
+ return ctx.teamId;
51
+ case "organization":
52
+ return ctx.organizationId;
53
+ }
54
+ }
55
+ function getOwnershipFieldForLevel(level) {
56
+ switch (level) {
57
+ case "user":
58
+ return "userId";
59
+ case "team":
60
+ return "teamId";
61
+ case "organization":
62
+ return "organizationId";
63
+ }
64
+ }
65
+ function hasAllAccess(grants, roles) {
66
+ for (const level of LEVEL_PRIORITY) {
67
+ for (const grant of grants) {
68
+ if (grant.level !== level)
69
+ continue;
70
+ if (grant.access !== "all")
71
+ continue;
72
+ if (grant.role === getRoleForLevel(level, roles))
73
+ return true;
74
+ }
75
+ }
76
+ return false;
77
+ }
78
+ function checkOwnAccess(grants, roles, contextValues, entities) {
79
+ for (const level of LEVEL_PRIORITY) {
80
+ for (const grant of grants) {
81
+ if (grant.level !== level)
82
+ continue;
83
+ if (grant.access !== "own")
84
+ continue;
85
+ if (grant.role !== getRoleForLevel(level, roles))
86
+ continue;
87
+ const ownershipField = getOwnershipFieldForLevel(level);
88
+ const contextValue = getContextValueForLevel(level, contextValues);
89
+ if (checkOwnership(ownershipField, contextValue, entities))
90
+ return true;
91
+ }
92
+ }
93
+ return false;
94
+ }
95
+ function checkPermissionSync(ctx, grants, entities) {
96
+ if (!grants || grants.length === 0)
97
+ return false;
98
+ const { id: userId, role: userRole } = ctx.user;
99
+ const { activeOrganizationRole: organizationRole, activeTeamRole: teamRole, activeOrganizationId: organizationId, activeTeamId: teamId, } = ctx.session;
100
+ const roles = { userRole, teamRole, organizationRole };
101
+ const contextValues = { userId, teamId, organizationId };
102
+ // Pass 1: Check for "all" access first (no ownership check needed)
103
+ if (hasAllAccess(grants, roles))
104
+ return true;
105
+ // Pass 2: Check "own" access with ownership validation
106
+ return checkOwnAccess(grants, roles, contextValues, entities);
107
+ }
108
+ async function checkPermissionAsync(ctx, grants, getEntities) {
109
+ if (!grants || grants.length === 0)
110
+ return (0, neverthrow_1.ok)(false);
111
+ const { id: userId, role: userRole } = ctx.user;
112
+ const { activeOrganizationRole: organizationRole, activeTeamRole: teamRole, activeOrganizationId: organizationId, activeTeamId: teamId, } = ctx.session;
113
+ const roles = { userRole, teamRole, organizationRole };
114
+ const contextValues = { userId, teamId, organizationId };
115
+ // Pass 1: Check for "all" access first (no entity fetch needed)
116
+ if (hasAllAccess(grants, roles))
117
+ return (0, neverthrow_1.ok)(true);
118
+ // Pass 2: Only fetch entities if we need to check ownership
119
+ const entities = await getEntities();
120
+ if (entities.isErr())
121
+ return (0, neverthrow_1.err)(entities.error);
122
+ return (0, neverthrow_1.ok)(checkOwnAccess(grants, roles, contextValues, entities.value));
123
+ }
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=base.grants.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"base.grants.test.d.ts","sourceRoot":"","sources":["../../../../src/modules/base/base.grants.test.ts"],"names":[],"mappings":""}