@m5kdev/backend 0.8.7 → 0.8.8

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 (386) hide show
  1. package/dist/_virtual/_rolldown/runtime.cjs +33 -0
  2. package/dist/node_modules/.pnpm/@better-auth_core@1.4.18_@better-auth_utils@0.3.0_@better-fetch_fetch@1.1.21_better-cal_347838d331444e5371f256b914727290/node_modules/@better-auth/core/dist/api/index.d.cts +1 -0
  3. package/dist/node_modules/.pnpm/@better-auth_core@1.4.18_@better-auth_utils@0.3.0_@better-fetch_fetch@1.1.21_better-cal_347838d331444e5371f256b914727290/node_modules/@better-auth/core/dist/db/adapter/factory.d.cts +1 -0
  4. package/dist/node_modules/.pnpm/@better-auth_core@1.4.18_@better-auth_utils@0.3.0_@better-fetch_fetch@1.1.21_better-cal_347838d331444e5371f256b914727290/node_modules/@better-auth/core/dist/db/adapter/get-field-attributes.d.cts +1 -0
  5. package/dist/node_modules/.pnpm/@better-auth_core@1.4.18_@better-auth_utils@0.3.0_@better-fetch_fetch@1.1.21_better-cal_347838d331444e5371f256b914727290/node_modules/@better-auth/core/dist/db/adapter/get-id-field.d.cts +1 -0
  6. package/dist/node_modules/.pnpm/@better-auth_core@1.4.18_@better-auth_utils@0.3.0_@better-fetch_fetch@1.1.21_better-cal_347838d331444e5371f256b914727290/node_modules/@better-auth/core/dist/db/adapter/index.d.cts +1 -0
  7. package/dist/node_modules/.pnpm/@better-auth_core@1.4.18_@better-auth_utils@0.3.0_@better-fetch_fetch@1.1.21_better-cal_347838d331444e5371f256b914727290/node_modules/@better-auth/core/dist/db/adapter/types.d.cts +1 -0
  8. package/dist/node_modules/.pnpm/@better-auth_core@1.4.18_@better-auth_utils@0.3.0_@better-fetch_fetch@1.1.21_better-cal_347838d331444e5371f256b914727290/node_modules/@better-auth/core/dist/db/get-tables.d.cts +1 -0
  9. package/dist/node_modules/.pnpm/@better-auth_core@1.4.18_@better-auth_utils@0.3.0_@better-fetch_fetch@1.1.21_better-cal_347838d331444e5371f256b914727290/node_modules/@better-auth/core/dist/db/index.d.cts +1 -0
  10. package/dist/node_modules/.pnpm/@better-auth_core@1.4.18_@better-auth_utils@0.3.0_@better-fetch_fetch@1.1.21_better-cal_347838d331444e5371f256b914727290/node_modules/@better-auth/core/dist/db/schema/account.d.cts +1 -0
  11. package/dist/node_modules/.pnpm/@better-auth_core@1.4.18_@better-auth_utils@0.3.0_@better-fetch_fetch@1.1.21_better-cal_347838d331444e5371f256b914727290/node_modules/@better-auth/core/dist/db/schema/rate-limit.d.cts +1 -0
  12. package/dist/node_modules/.pnpm/@better-auth_core@1.4.18_@better-auth_utils@0.3.0_@better-fetch_fetch@1.1.21_better-cal_347838d331444e5371f256b914727290/node_modules/@better-auth/core/dist/db/schema/session.d.cts +1 -0
  13. package/dist/node_modules/.pnpm/@better-auth_core@1.4.18_@better-auth_utils@0.3.0_@better-fetch_fetch@1.1.21_better-cal_347838d331444e5371f256b914727290/node_modules/@better-auth/core/dist/db/schema/shared.d.cts +1 -0
  14. package/dist/node_modules/.pnpm/@better-auth_core@1.4.18_@better-auth_utils@0.3.0_@better-fetch_fetch@1.1.21_better-cal_347838d331444e5371f256b914727290/node_modules/@better-auth/core/dist/db/schema/user.d.cts +1 -0
  15. package/dist/node_modules/.pnpm/@better-auth_core@1.4.18_@better-auth_utils@0.3.0_@better-fetch_fetch@1.1.21_better-cal_347838d331444e5371f256b914727290/node_modules/@better-auth/core/dist/db/schema/verification.d.cts +1 -0
  16. package/dist/node_modules/.pnpm/@better-auth_core@1.4.18_@better-auth_utils@0.3.0_@better-fetch_fetch@1.1.21_better-cal_347838d331444e5371f256b914727290/node_modules/@better-auth/core/dist/index.d.cts +1 -0
  17. package/dist/node_modules/.pnpm/@better-auth_core@1.4.18_@better-auth_utils@0.3.0_@better-fetch_fetch@1.1.21_better-cal_347838d331444e5371f256b914727290/node_modules/@better-auth/core/dist/social-providers/index.d.cts +1 -0
  18. package/dist/node_modules/.pnpm/@better-auth_core@1.4.18_@better-auth_utils@0.3.0_@better-fetch_fetch@1.1.21_better-cal_347838d331444e5371f256b914727290/node_modules/@better-auth/core/dist/types/context.d.cts +1 -0
  19. package/dist/node_modules/.pnpm/@better-auth_core@1.4.18_@better-auth_utils@0.3.0_@better-fetch_fetch@1.1.21_better-cal_347838d331444e5371f256b914727290/node_modules/@better-auth/core/dist/types/helper.d.cts +7 -0
  20. package/dist/node_modules/.pnpm/@better-auth_core@1.4.18_@better-auth_utils@0.3.0_@better-fetch_fetch@1.1.21_better-cal_347838d331444e5371f256b914727290/node_modules/@better-auth/core/dist/types/init-options.d.cts +1 -0
  21. package/dist/node_modules/.pnpm/@better-auth_core@1.4.18_@better-auth_utils@0.3.0_@better-fetch_fetch@1.1.21_better-cal_347838d331444e5371f256b914727290/node_modules/@better-auth/core/dist/types/plugin-client.d.cts +1 -0
  22. package/dist/node_modules/.pnpm/@better-auth_core@1.4.18_@better-auth_utils@0.3.0_@better-fetch_fetch@1.1.21_better-cal_347838d331444e5371f256b914727290/node_modules/@better-auth/core/dist/types/plugin.d.cts +1 -0
  23. package/dist/node_modules/.pnpm/kysely@0.28.5/node_modules/kysely/dist/esm/dialect/dialect-adapter-base.d.cts +1 -0
  24. package/dist/node_modules/.pnpm/kysely@0.28.5/node_modules/kysely/dist/esm/dialect/dialect-adapter.d.cts +1 -0
  25. package/dist/node_modules/.pnpm/kysely@0.28.5/node_modules/kysely/dist/esm/dialect/dialect.d.cts +1 -0
  26. package/dist/node_modules/.pnpm/kysely@0.28.5/node_modules/kysely/dist/esm/dialect/mssql/mssql-adapter.d.cts +1 -0
  27. package/dist/node_modules/.pnpm/kysely@0.28.5/node_modules/kysely/dist/esm/dialect/mssql/mssql-dialect.d.cts +1 -0
  28. package/dist/node_modules/.pnpm/kysely@0.28.5/node_modules/kysely/dist/esm/dialect/mssql/mssql-introspector.d.cts +1 -0
  29. package/dist/node_modules/.pnpm/kysely@0.28.5/node_modules/kysely/dist/esm/dialect/mysql/mysql-adapter.d.cts +1 -0
  30. package/dist/node_modules/.pnpm/kysely@0.28.5/node_modules/kysely/dist/esm/dialect/mysql/mysql-dialect.d.cts +1 -0
  31. package/dist/node_modules/.pnpm/kysely@0.28.5/node_modules/kysely/dist/esm/dialect/mysql/mysql-introspector.d.cts +1 -0
  32. package/dist/node_modules/.pnpm/kysely@0.28.5/node_modules/kysely/dist/esm/dialect/postgres/postgres-adapter.d.cts +1 -0
  33. package/dist/node_modules/.pnpm/kysely@0.28.5/node_modules/kysely/dist/esm/dialect/postgres/postgres-dialect.d.cts +1 -0
  34. package/dist/node_modules/.pnpm/kysely@0.28.5/node_modules/kysely/dist/esm/dialect/postgres/postgres-introspector.d.cts +1 -0
  35. package/dist/node_modules/.pnpm/kysely@0.28.5/node_modules/kysely/dist/esm/dialect/sqlite/sqlite-adapter.d.cts +1 -0
  36. package/dist/node_modules/.pnpm/kysely@0.28.5/node_modules/kysely/dist/esm/dialect/sqlite/sqlite-dialect.d.cts +1 -0
  37. package/dist/node_modules/.pnpm/kysely@0.28.5/node_modules/kysely/dist/esm/dialect/sqlite/sqlite-introspector.d.cts +1 -0
  38. package/dist/node_modules/.pnpm/kysely@0.28.5/node_modules/kysely/dist/esm/expression/expression-builder.d.cts +1 -0
  39. package/dist/node_modules/.pnpm/kysely@0.28.5/node_modules/kysely/dist/esm/index.d.cts +1 -0
  40. package/dist/node_modules/.pnpm/kysely@0.28.5/node_modules/kysely/dist/esm/kysely.d.cts +38 -0
  41. package/dist/node_modules/.pnpm/kysely@0.28.5/node_modules/kysely/dist/esm/migration/file-migration-provider.d.cts +1 -0
  42. package/dist/node_modules/.pnpm/kysely@0.28.5/node_modules/kysely/dist/esm/migration/migrator.d.cts +1 -0
  43. package/dist/node_modules/.pnpm/kysely@0.28.5/node_modules/kysely/dist/esm/parser/binary-operation-parser.d.cts +1 -0
  44. package/dist/node_modules/.pnpm/kysely@0.28.5/node_modules/kysely/dist/esm/parser/delete-from-parser.d.cts +1 -0
  45. package/dist/node_modules/.pnpm/kysely@0.28.5/node_modules/kysely/dist/esm/parser/expression-parser.d.cts +1 -0
  46. package/dist/node_modules/.pnpm/kysely@0.28.5/node_modules/kysely/dist/esm/parser/group-by-parser.d.cts +1 -0
  47. package/dist/node_modules/.pnpm/kysely@0.28.5/node_modules/kysely/dist/esm/parser/insert-values-parser.d.cts +1 -0
  48. package/dist/node_modules/.pnpm/kysely@0.28.5/node_modules/kysely/dist/esm/parser/join-parser.d.cts +1 -0
  49. package/dist/node_modules/.pnpm/kysely@0.28.5/node_modules/kysely/dist/esm/parser/merge-into-parser.d.cts +1 -0
  50. package/dist/node_modules/.pnpm/kysely@0.28.5/node_modules/kysely/dist/esm/parser/reference-parser.d.cts +1 -0
  51. package/dist/node_modules/.pnpm/kysely@0.28.5/node_modules/kysely/dist/esm/parser/returning-parser.d.cts +1 -0
  52. package/dist/node_modules/.pnpm/kysely@0.28.5/node_modules/kysely/dist/esm/parser/select-from-parser.d.cts +1 -0
  53. package/dist/node_modules/.pnpm/kysely@0.28.5/node_modules/kysely/dist/esm/parser/select-parser.d.cts +1 -0
  54. package/dist/node_modules/.pnpm/kysely@0.28.5/node_modules/kysely/dist/esm/parser/set-operation-parser.d.cts +1 -0
  55. package/dist/node_modules/.pnpm/kysely@0.28.5/node_modules/kysely/dist/esm/parser/tuple-parser.d.cts +1 -0
  56. package/dist/node_modules/.pnpm/kysely@0.28.5/node_modules/kysely/dist/esm/parser/unary-operation-parser.d.cts +1 -0
  57. package/dist/node_modules/.pnpm/kysely@0.28.5/node_modules/kysely/dist/esm/parser/update-parser.d.cts +1 -0
  58. package/dist/node_modules/.pnpm/kysely@0.28.5/node_modules/kysely/dist/esm/parser/update-set-parser.d.cts +1 -0
  59. package/dist/node_modules/.pnpm/kysely@0.28.5/node_modules/kysely/dist/esm/parser/value-parser.d.cts +1 -0
  60. package/dist/node_modules/.pnpm/kysely@0.28.5/node_modules/kysely/dist/esm/parser/with-parser.d.cts +1 -0
  61. package/dist/node_modules/.pnpm/kysely@0.28.5/node_modules/kysely/dist/esm/query-builder/case-builder.d.cts +1 -0
  62. package/dist/node_modules/.pnpm/kysely@0.28.5/node_modules/kysely/dist/esm/query-builder/delete-query-builder.d.cts +1 -0
  63. package/dist/node_modules/.pnpm/kysely@0.28.5/node_modules/kysely/dist/esm/query-builder/having-interface.d.cts +1 -0
  64. package/dist/node_modules/.pnpm/kysely@0.28.5/node_modules/kysely/dist/esm/query-builder/insert-query-builder.d.cts +1 -0
  65. package/dist/node_modules/.pnpm/kysely@0.28.5/node_modules/kysely/dist/esm/query-builder/join-builder.d.cts +1 -0
  66. package/dist/node_modules/.pnpm/kysely@0.28.5/node_modules/kysely/dist/esm/query-builder/merge-query-builder.d.cts +1 -0
  67. package/dist/node_modules/.pnpm/kysely@0.28.5/node_modules/kysely/dist/esm/query-builder/on-conflict-builder.d.cts +1 -0
  68. package/dist/node_modules/.pnpm/kysely@0.28.5/node_modules/kysely/dist/esm/query-builder/output-interface.d.cts +1 -0
  69. package/dist/node_modules/.pnpm/kysely@0.28.5/node_modules/kysely/dist/esm/query-builder/returning-interface.d.cts +1 -0
  70. package/dist/node_modules/.pnpm/kysely@0.28.5/node_modules/kysely/dist/esm/query-builder/select-query-builder.d.cts +1 -0
  71. package/dist/node_modules/.pnpm/kysely@0.28.5/node_modules/kysely/dist/esm/query-builder/update-query-builder.d.cts +1 -0
  72. package/dist/node_modules/.pnpm/kysely@0.28.5/node_modules/kysely/dist/esm/query-builder/where-interface.d.cts +1 -0
  73. package/dist/node_modules/.pnpm/kysely@0.28.5/node_modules/kysely/dist/esm/query-creator.d.cts +1 -0
  74. package/dist/node_modules/.pnpm/kysely@0.28.5/node_modules/kysely/dist/esm/query-executor/default-query-executor.d.cts +1 -0
  75. package/dist/node_modules/.pnpm/kysely@0.28.5/node_modules/kysely/dist/esm/query-executor/noop-query-executor.d.cts +1 -0
  76. package/dist/node_modules/.pnpm/kysely@0.28.5/node_modules/kysely/dist/esm/query-executor/query-executor-base.d.cts +1 -0
  77. package/dist/node_modules/.pnpm/kysely@0.28.5/node_modules/kysely/dist/esm/query-executor/query-executor-provider.d.cts +1 -0
  78. package/dist/node_modules/.pnpm/kysely@0.28.5/node_modules/kysely/dist/esm/query-executor/query-executor.d.cts +1 -0
  79. package/dist/node_modules/.pnpm/kysely@0.28.5/node_modules/kysely/dist/esm/raw-builder/raw-builder.d.cts +1 -0
  80. package/dist/node_modules/.pnpm/kysely@0.28.5/node_modules/kysely/dist/esm/raw-builder/sql.d.cts +1 -0
  81. package/dist/node_modules/.pnpm/kysely@0.28.5/node_modules/kysely/dist/esm/schema/alter-table-add-foreign-key-constraint-builder.d.cts +1 -0
  82. package/dist/node_modules/.pnpm/kysely@0.28.5/node_modules/kysely/dist/esm/schema/alter-table-add-index-builder.d.cts +1 -0
  83. package/dist/node_modules/.pnpm/kysely@0.28.5/node_modules/kysely/dist/esm/schema/alter-table-builder.d.cts +1 -0
  84. package/dist/node_modules/.pnpm/kysely@0.28.5/node_modules/kysely/dist/esm/schema/alter-table-drop-constraint-builder.d.cts +1 -0
  85. package/dist/node_modules/.pnpm/kysely@0.28.5/node_modules/kysely/dist/esm/schema/alter-table-executor.d.cts +1 -0
  86. package/dist/node_modules/.pnpm/kysely@0.28.5/node_modules/kysely/dist/esm/schema/create-index-builder.d.cts +1 -0
  87. package/dist/node_modules/.pnpm/kysely@0.28.5/node_modules/kysely/dist/esm/schema/create-schema-builder.d.cts +1 -0
  88. package/dist/node_modules/.pnpm/kysely@0.28.5/node_modules/kysely/dist/esm/schema/create-table-builder.d.cts +1 -0
  89. package/dist/node_modules/.pnpm/kysely@0.28.5/node_modules/kysely/dist/esm/schema/create-type-builder.d.cts +1 -0
  90. package/dist/node_modules/.pnpm/kysely@0.28.5/node_modules/kysely/dist/esm/schema/create-view-builder.d.cts +1 -0
  91. package/dist/node_modules/.pnpm/kysely@0.28.5/node_modules/kysely/dist/esm/schema/drop-index-builder.d.cts +1 -0
  92. package/dist/node_modules/.pnpm/kysely@0.28.5/node_modules/kysely/dist/esm/schema/drop-schema-builder.d.cts +1 -0
  93. package/dist/node_modules/.pnpm/kysely@0.28.5/node_modules/kysely/dist/esm/schema/drop-table-builder.d.cts +1 -0
  94. package/dist/node_modules/.pnpm/kysely@0.28.5/node_modules/kysely/dist/esm/schema/drop-type-builder.d.cts +1 -0
  95. package/dist/node_modules/.pnpm/kysely@0.28.5/node_modules/kysely/dist/esm/schema/drop-view-builder.d.cts +1 -0
  96. package/dist/node_modules/.pnpm/kysely@0.28.5/node_modules/kysely/dist/esm/schema/refresh-materialized-view-builder.d.cts +1 -0
  97. package/dist/node_modules/.pnpm/kysely@0.28.5/node_modules/kysely/dist/esm/schema/schema.d.cts +1 -0
  98. package/dist/src/lib/posthog.cjs +8 -0
  99. package/dist/src/lib/posthog.cjs.map +1 -0
  100. package/dist/src/lib/posthog.d.cts +7 -0
  101. package/dist/src/lib/sentry.cjs +11 -0
  102. package/dist/src/lib/sentry.cjs.map +1 -0
  103. package/dist/src/lib/sentry.d.cts +1 -0
  104. package/dist/src/modules/access/access.repository.cjs +26 -0
  105. package/dist/src/modules/access/access.repository.cjs.map +1 -0
  106. package/dist/src/modules/access/access.repository.d.cts +2352 -0
  107. package/dist/src/modules/access/access.service.cjs +42 -0
  108. package/dist/src/modules/access/access.service.cjs.map +1 -0
  109. package/dist/src/modules/access/access.service.d.cts +25 -0
  110. package/dist/src/modules/access/access.utils.cjs +23 -0
  111. package/dist/src/modules/access/access.utils.cjs.map +1 -0
  112. package/dist/src/modules/access/access.utils.d.cts +19 -0
  113. package/dist/src/modules/ai/ai.db.cjs +46 -0
  114. package/dist/src/modules/ai/ai.db.cjs.map +1 -0
  115. package/dist/src/modules/ai/ai.db.d.cts +401 -0
  116. package/dist/src/modules/ai/ai.prompt.cjs +33 -0
  117. package/dist/src/modules/ai/ai.prompt.cjs.map +1 -0
  118. package/dist/src/modules/ai/ai.prompt.d.cts +30 -0
  119. package/dist/src/modules/ai/ai.prompts.cjs +18 -0
  120. package/dist/src/modules/ai/ai.prompts.cjs.map +1 -0
  121. package/dist/src/modules/ai/ai.prompts.d.cts +10 -0
  122. package/dist/src/modules/ai/ai.repository.cjs +25 -0
  123. package/dist/src/modules/ai/ai.repository.cjs.map +1 -0
  124. package/dist/src/modules/ai/ai.repository.d.cts +428 -0
  125. package/dist/src/modules/ai/ai.router.cjs +0 -0
  126. package/dist/src/modules/ai/ai.router.d.cts +1 -0
  127. package/dist/src/modules/ai/ai.service.cjs +312 -0
  128. package/dist/src/modules/ai/ai.service.cjs.map +1 -0
  129. package/dist/src/modules/ai/ai.service.d.cts +141 -0
  130. package/dist/src/modules/ai/ai.trpc.cjs +19 -0
  131. package/dist/src/modules/ai/ai.trpc.cjs.map +1 -0
  132. package/dist/src/modules/ai/ai.trpc.d.cts +31 -0
  133. package/dist/src/modules/ai/ideogram/ideogram.constants.cjs +191 -0
  134. package/dist/src/modules/ai/ideogram/ideogram.constants.cjs.map +1 -0
  135. package/dist/src/modules/ai/ideogram/ideogram.constants.d.cts +11 -0
  136. package/dist/src/modules/ai/ideogram/ideogram.dto.cjs +49 -0
  137. package/dist/src/modules/ai/ideogram/ideogram.dto.cjs.map +1 -0
  138. package/dist/src/modules/ai/ideogram/ideogram.dto.d.cts +234 -0
  139. package/dist/src/modules/ai/ideogram/ideogram.prompt.cjs +862 -0
  140. package/dist/src/modules/ai/ideogram/ideogram.prompt.cjs.map +1 -0
  141. package/dist/src/modules/ai/ideogram/ideogram.prompt.d.cts +7 -0
  142. package/dist/src/modules/ai/ideogram/ideogram.repository.cjs +34 -0
  143. package/dist/src/modules/ai/ideogram/ideogram.repository.cjs.map +1 -0
  144. package/dist/src/modules/ai/ideogram/ideogram.repository.d.cts +11 -0
  145. package/dist/src/modules/ai/ideogram/ideogram.service.cjs +12 -0
  146. package/dist/src/modules/ai/ideogram/ideogram.service.cjs.map +1 -0
  147. package/dist/src/modules/ai/ideogram/ideogram.service.d.cts +14 -0
  148. package/dist/src/modules/auth/auth.db.cjs +187 -0
  149. package/dist/src/modules/auth/auth.db.cjs.map +1 -0
  150. package/dist/src/modules/auth/auth.db.d.cts +2341 -0
  151. package/dist/src/modules/auth/auth.dto.cjs +50 -0
  152. package/dist/src/modules/auth/auth.dto.cjs.map +1 -0
  153. package/dist/src/modules/auth/auth.dto.d.cts +70 -0
  154. package/dist/src/modules/auth/auth.dto.d.mts +2 -2
  155. package/dist/src/modules/auth/auth.lib.cjs +234 -0
  156. package/dist/src/modules/auth/auth.lib.cjs.map +1 -0
  157. package/dist/src/modules/auth/auth.lib.d.cts +4894 -0
  158. package/dist/src/modules/auth/auth.lib.d.mts +1 -1
  159. package/dist/src/modules/auth/auth.middleware.cjs +41 -0
  160. package/dist/src/modules/auth/auth.middleware.cjs.map +1 -0
  161. package/dist/src/modules/auth/auth.middleware.d.cts +619 -0
  162. package/dist/src/modules/auth/auth.repository.cjs +403 -0
  163. package/dist/src/modules/auth/auth.repository.cjs.map +1 -0
  164. package/dist/src/modules/auth/auth.repository.d.cts +2453 -0
  165. package/dist/src/modules/auth/auth.service.cjs +229 -0
  166. package/dist/src/modules/auth/auth.service.cjs.map +1 -0
  167. package/dist/src/modules/auth/auth.service.d.cts +105 -0
  168. package/dist/src/modules/auth/auth.trpc.cjs +110 -0
  169. package/dist/src/modules/auth/auth.trpc.cjs.map +1 -0
  170. package/dist/src/modules/auth/auth.trpc.d.cts +303 -0
  171. package/dist/src/modules/auth/auth.trpc.d.mts +6 -6
  172. package/dist/src/modules/auth/auth.utils.cjs +80 -0
  173. package/dist/src/modules/auth/auth.utils.cjs.map +1 -0
  174. package/dist/src/modules/auth/auth.utils.d.cts +2356 -0
  175. package/dist/src/modules/base/base.abstract.cjs +62 -0
  176. package/dist/src/modules/base/base.abstract.cjs.map +1 -0
  177. package/dist/src/modules/base/base.abstract.d.cts +29 -0
  178. package/dist/src/modules/base/base.actor.cjs +83 -0
  179. package/dist/src/modules/base/base.actor.cjs.map +1 -0
  180. package/dist/src/modules/base/base.actor.d.cts +73 -0
  181. package/dist/src/modules/base/base.dto.cjs +98 -0
  182. package/dist/src/modules/base/base.dto.cjs.map +1 -0
  183. package/dist/src/modules/base/base.dto.d.cts +67 -0
  184. package/dist/src/modules/base/base.grants.cjs +107 -0
  185. package/dist/src/modules/base/base.grants.cjs.map +1 -0
  186. package/dist/src/modules/base/base.grants.d.cts +28 -0
  187. package/dist/src/modules/base/base.procedure.cjs +255 -0
  188. package/dist/src/modules/base/base.procedure.cjs.map +1 -0
  189. package/dist/src/modules/base/base.procedure.d.cts +111 -0
  190. package/dist/src/modules/base/base.repository.cjs +269 -0
  191. package/dist/src/modules/base/base.repository.cjs.map +1 -0
  192. package/dist/src/modules/base/base.repository.d.cts +125 -0
  193. package/dist/src/modules/base/base.repository.d.mts +2 -0
  194. package/dist/src/modules/base/base.repository.mjs +12 -0
  195. package/dist/src/modules/base/base.repository.mjs.map +1 -1
  196. package/dist/src/modules/base/base.service.cjs +119 -0
  197. package/dist/src/modules/base/base.service.cjs.map +1 -0
  198. package/dist/src/modules/base/base.service.d.cts +44 -0
  199. package/dist/src/modules/base/base.types.cjs +0 -0
  200. package/dist/src/modules/base/base.types.d.cts +5 -0
  201. package/dist/src/modules/billing/billing.db.cjs +38 -0
  202. package/dist/src/modules/billing/billing.db.cjs.map +1 -0
  203. package/dist/src/modules/billing/billing.db.d.cts +371 -0
  204. package/dist/src/modules/billing/billing.repository.cjs +190 -0
  205. package/dist/src/modules/billing/billing.repository.cjs.map +1 -0
  206. package/dist/src/modules/billing/billing.repository.d.cts +2787 -0
  207. package/dist/src/modules/billing/billing.router.cjs +43 -0
  208. package/dist/src/modules/billing/billing.router.cjs.map +1 -0
  209. package/dist/src/modules/billing/billing.router.d.cts +9 -0
  210. package/dist/src/modules/billing/billing.service.cjs +127 -0
  211. package/dist/src/modules/billing/billing.service.cjs.map +1 -0
  212. package/dist/src/modules/billing/billing.service.d.cts +53 -0
  213. package/dist/src/modules/billing/billing.trpc.cjs +19 -0
  214. package/dist/src/modules/billing/billing.trpc.cjs.map +1 -0
  215. package/dist/src/modules/billing/billing.trpc.d.cts +48 -0
  216. package/dist/src/modules/clay/clay.repository.cjs +29 -0
  217. package/dist/src/modules/clay/clay.repository.cjs.map +1 -0
  218. package/dist/src/modules/clay/clay.repository.d.cts +10 -0
  219. package/dist/src/modules/clay/clay.service.cjs +24 -0
  220. package/dist/src/modules/clay/clay.service.cjs.map +1 -0
  221. package/dist/src/modules/clay/clay.service.d.cts +32 -0
  222. package/dist/src/modules/connect/connect.db.cjs +37 -0
  223. package/dist/src/modules/connect/connect.db.cjs.map +1 -0
  224. package/dist/src/modules/connect/connect.db.d.cts +362 -0
  225. package/dist/src/modules/connect/connect.dto.cjs +45 -0
  226. package/dist/src/modules/connect/connect.dto.cjs.map +1 -0
  227. package/dist/src/modules/connect/connect.dto.d.cts +79 -0
  228. package/dist/src/modules/connect/connect.dto.d.mts +2 -2
  229. package/dist/src/modules/connect/connect.linkedin.cjs +48 -0
  230. package/dist/src/modules/connect/connect.linkedin.cjs.map +1 -0
  231. package/dist/src/modules/connect/connect.linkedin.d.cts +7 -0
  232. package/dist/src/modules/connect/connect.oauth.cjs +153 -0
  233. package/dist/src/modules/connect/connect.oauth.cjs.map +1 -0
  234. package/dist/src/modules/connect/connect.oauth.d.cts +32 -0
  235. package/dist/src/modules/connect/connect.repository.cjs +42 -0
  236. package/dist/src/modules/connect/connect.repository.cjs.map +1 -0
  237. package/dist/src/modules/connect/connect.repository.d.cts +419 -0
  238. package/dist/src/modules/connect/connect.repository.d.mts +1 -1
  239. package/dist/src/modules/connect/connect.router.cjs +48 -0
  240. package/dist/src/modules/connect/connect.router.cjs.map +1 -0
  241. package/dist/src/modules/connect/connect.router.d.cts +9 -0
  242. package/dist/src/modules/connect/connect.service.cjs +90 -0
  243. package/dist/src/modules/connect/connect.service.cjs.map +1 -0
  244. package/dist/src/modules/connect/connect.service.d.cts +103 -0
  245. package/dist/src/modules/connect/connect.service.d.mts +2 -2
  246. package/dist/src/modules/connect/connect.trpc.cjs +18 -0
  247. package/dist/src/modules/connect/connect.trpc.cjs.map +1 -0
  248. package/dist/src/modules/connect/connect.trpc.d.cts +53 -0
  249. package/dist/src/modules/connect/connect.types.cjs +0 -0
  250. package/dist/src/modules/connect/connect.types.d.cts +29 -0
  251. package/dist/src/modules/crypto/crypto.db.cjs +26 -0
  252. package/dist/src/modules/crypto/crypto.db.cjs.map +1 -0
  253. package/dist/src/modules/crypto/crypto.db.d.cts +157 -0
  254. package/dist/src/modules/crypto/crypto.repository.cjs +9 -0
  255. package/dist/src/modules/crypto/crypto.repository.cjs.map +1 -0
  256. package/dist/src/modules/crypto/crypto.repository.d.cts +163 -0
  257. package/dist/src/modules/crypto/crypto.service.cjs +46 -0
  258. package/dist/src/modules/crypto/crypto.service.cjs.map +1 -0
  259. package/dist/src/modules/crypto/crypto.service.d.cts +15 -0
  260. package/dist/src/modules/email/email.service.cjs +107 -0
  261. package/dist/src/modules/email/email.service.cjs.map +1 -0
  262. package/dist/src/modules/email/email.service.d.cts +62 -0
  263. package/dist/src/modules/file/file.repository.cjs +74 -0
  264. package/dist/src/modules/file/file.repository.cjs.map +1 -0
  265. package/dist/src/modules/file/file.repository.d.cts +17 -0
  266. package/dist/src/modules/file/file.router.cjs +94 -0
  267. package/dist/src/modules/file/file.router.cjs.map +1 -0
  268. package/dist/src/modules/file/file.router.d.cts +7 -0
  269. package/dist/src/modules/file/file.service.cjs +120 -0
  270. package/dist/src/modules/file/file.service.cjs.map +1 -0
  271. package/dist/src/modules/file/file.service.d.cts +30 -0
  272. package/dist/src/modules/recurrence/recurrence.db.cjs +55 -0
  273. package/dist/src/modules/recurrence/recurrence.db.cjs.map +1 -0
  274. package/dist/src/modules/recurrence/recurrence.db.d.cts +568 -0
  275. package/dist/src/modules/recurrence/recurrence.repository.cjs +31 -0
  276. package/dist/src/modules/recurrence/recurrence.repository.cjs.map +1 -0
  277. package/dist/src/modules/recurrence/recurrence.repository.d.cts +588 -0
  278. package/dist/src/modules/recurrence/recurrence.service.cjs +66 -0
  279. package/dist/src/modules/recurrence/recurrence.service.cjs.map +1 -0
  280. package/dist/src/modules/recurrence/recurrence.service.d.cts +88 -0
  281. package/dist/src/modules/recurrence/recurrence.service.d.mts +3 -2
  282. package/dist/src/modules/recurrence/recurrence.service.mjs +1 -1
  283. package/dist/src/modules/recurrence/recurrence.service.mjs.map +1 -1
  284. package/dist/src/modules/recurrence/recurrence.trpc.cjs +46 -0
  285. package/dist/src/modules/recurrence/recurrence.trpc.cjs.map +1 -0
  286. package/dist/src/modules/recurrence/recurrence.trpc.d.cts +216 -0
  287. package/dist/src/modules/recurrence/recurrence.trpc.d.mts +1 -0
  288. package/dist/src/modules/social/social.dto.cjs +26 -0
  289. package/dist/src/modules/social/social.dto.cjs.map +1 -0
  290. package/dist/src/modules/social/social.dto.d.cts +39 -0
  291. package/dist/src/modules/social/social.linkedin.cjs +349 -0
  292. package/dist/src/modules/social/social.linkedin.cjs.map +1 -0
  293. package/dist/src/modules/social/social.linkedin.d.cts +15 -0
  294. package/dist/src/modules/social/social.service.cjs +57 -0
  295. package/dist/src/modules/social/social.service.cjs.map +1 -0
  296. package/dist/src/modules/social/social.service.d.cts +34 -0
  297. package/dist/src/modules/social/social.types.cjs +0 -0
  298. package/dist/src/modules/social/social.types.d.cts +40 -0
  299. package/dist/src/modules/tag/tag.db.cjs +43 -0
  300. package/dist/src/modules/tag/tag.db.cjs.map +1 -0
  301. package/dist/src/modules/tag/tag.db.d.cts +352 -0
  302. package/dist/src/modules/tag/tag.dto.cjs +15 -0
  303. package/dist/src/modules/tag/tag.dto.cjs.map +1 -0
  304. package/dist/src/modules/tag/tag.dto.d.cts +1025 -0
  305. package/dist/src/modules/tag/tag.repository.cjs +116 -0
  306. package/dist/src/modules/tag/tag.repository.cjs.map +1 -0
  307. package/dist/src/modules/tag/tag.repository.d.cts +394 -0
  308. package/dist/src/modules/tag/tag.service.cjs +48 -0
  309. package/dist/src/modules/tag/tag.service.cjs.map +1 -0
  310. package/dist/src/modules/tag/tag.service.d.cts +120 -0
  311. package/dist/src/modules/tag/tag.trpc.cjs +32 -0
  312. package/dist/src/modules/tag/tag.trpc.cjs.map +1 -0
  313. package/dist/src/modules/tag/tag.trpc.d.cts +174 -0
  314. package/dist/src/modules/tag/tag.trpc.d.mts +1 -0
  315. package/dist/src/modules/utils/applyPagination.cjs +16 -0
  316. package/dist/src/modules/utils/applyPagination.cjs.map +1 -0
  317. package/dist/src/modules/utils/applyPagination.d.cts +10 -0
  318. package/dist/src/modules/utils/applySorting.cjs +20 -0
  319. package/dist/src/modules/utils/applySorting.cjs.map +1 -0
  320. package/dist/src/modules/utils/applySorting.d.cts +13 -0
  321. package/dist/src/modules/utils/getConditionsFromFilters.cjs +152 -0
  322. package/dist/src/modules/utils/getConditionsFromFilters.cjs.map +1 -0
  323. package/dist/src/modules/utils/getConditionsFromFilters.d.cts +9 -0
  324. package/dist/src/modules/utils/getGlobalSearchCondition.cjs +30 -0
  325. package/dist/src/modules/utils/getGlobalSearchCondition.cjs.map +1 -0
  326. package/dist/src/modules/utils/getGlobalSearchCondition.d.cts +18 -0
  327. package/dist/src/modules/utils/getGlobalSearchCondition.d.mts +18 -0
  328. package/dist/src/modules/utils/getGlobalSearchCondition.mjs +26 -0
  329. package/dist/src/modules/utils/getGlobalSearchCondition.mjs.map +1 -0
  330. package/dist/src/modules/video/video.service.cjs +114 -0
  331. package/dist/src/modules/video/video.service.cjs.map +1 -0
  332. package/dist/src/modules/video/video.service.d.cts +12 -0
  333. package/dist/src/modules/video/video.service.mjs.map +1 -1
  334. package/dist/src/modules/webhook/webhook.constants.cjs +13 -0
  335. package/dist/src/modules/webhook/webhook.constants.cjs.map +1 -0
  336. package/dist/src/modules/webhook/webhook.constants.d.cts +12 -0
  337. package/dist/src/modules/webhook/webhook.db.cjs +19 -0
  338. package/dist/src/modules/webhook/webhook.db.cjs.map +1 -0
  339. package/dist/src/modules/webhook/webhook.db.d.cts +142 -0
  340. package/dist/src/modules/webhook/webhook.dto.cjs +11 -0
  341. package/dist/src/modules/webhook/webhook.dto.cjs.map +1 -0
  342. package/dist/src/modules/webhook/webhook.dto.d.cts +402 -0
  343. package/dist/src/modules/webhook/webhook.repository.cjs +52 -0
  344. package/dist/src/modules/webhook/webhook.repository.cjs.map +1 -0
  345. package/dist/src/modules/webhook/webhook.repository.d.cts +154 -0
  346. package/dist/src/modules/webhook/webhook.router.cjs +26 -0
  347. package/dist/src/modules/webhook/webhook.router.cjs.map +1 -0
  348. package/dist/src/modules/webhook/webhook.router.d.cts +8 -0
  349. package/dist/src/modules/webhook/webhook.service.cjs +61 -0
  350. package/dist/src/modules/webhook/webhook.service.cjs.map +1 -0
  351. package/dist/src/modules/webhook/webhook.service.d.cts +14 -0
  352. package/dist/src/modules/workflow/workflow.db.cjs +35 -0
  353. package/dist/src/modules/workflow/workflow.db.cjs.map +1 -0
  354. package/dist/src/modules/workflow/workflow.db.d.cts +302 -0
  355. package/dist/src/modules/workflow/workflow.repository.cjs +95 -0
  356. package/dist/src/modules/workflow/workflow.repository.cjs.map +1 -0
  357. package/dist/src/modules/workflow/workflow.repository.d.cts +371 -0
  358. package/dist/src/modules/workflow/workflow.service.cjs +41 -0
  359. package/dist/src/modules/workflow/workflow.service.cjs.map +1 -0
  360. package/dist/src/modules/workflow/workflow.service.d.cts +68 -0
  361. package/dist/src/modules/workflow/workflow.trpc.cjs +19 -0
  362. package/dist/src/modules/workflow/workflow.trpc.cjs.map +1 -0
  363. package/dist/src/modules/workflow/workflow.trpc.d.cts +65 -0
  364. package/dist/src/modules/workflow/workflow.types.cjs +0 -0
  365. package/dist/src/modules/workflow/workflow.types.d.cts +25 -0
  366. package/dist/src/modules/workflow/workflow.utils.cjs +185 -0
  367. package/dist/src/modules/workflow/workflow.utils.cjs.map +1 -0
  368. package/dist/src/modules/workflow/workflow.utils.d.cts +36 -0
  369. package/dist/src/types.cjs +12 -0
  370. package/dist/src/types.cjs.map +1 -0
  371. package/dist/src/types.d.cts +344 -0
  372. package/dist/src/utils/errors.cjs +101 -0
  373. package/dist/src/utils/errors.cjs.map +1 -0
  374. package/dist/src/utils/errors.d.cts +62 -0
  375. package/dist/src/utils/logger.cjs +13 -0
  376. package/dist/src/utils/logger.cjs.map +1 -0
  377. package/dist/src/utils/logger.d.cts +7 -0
  378. package/dist/src/utils/posthog.cjs +31 -0
  379. package/dist/src/utils/posthog.cjs.map +1 -0
  380. package/dist/src/utils/posthog.d.cts +17 -0
  381. package/dist/src/utils/trpc.cjs +156 -0
  382. package/dist/src/utils/trpc.cjs.map +1 -0
  383. package/dist/src/utils/trpc.d.cts +54 -0
  384. package/dist/src/utils/types.cjs +0 -0
  385. package/dist/src/utils/types.d.cts +9 -0
  386. package/package.json +171 -45
@@ -0,0 +1,62 @@
1
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
+ require("../../../_virtual/_rolldown/runtime.cjs");
3
+ const require_src_utils_logger = require("../../utils/logger.cjs");
4
+ const require_src_utils_errors = require("../../utils/errors.cjs");
5
+ let neverthrow = require("neverthrow");
6
+ //#region src/modules/base/base.abstract.ts
7
+ var Base = class {
8
+ layer;
9
+ logger;
10
+ constructor(layer) {
11
+ this.layer = layer;
12
+ this.logger = require_src_utils_logger.logger.child({
13
+ layer: this.layer,
14
+ layerName: this.constructor.name
15
+ });
16
+ }
17
+ error(code, message, { cause, clientMessage, log = process.env.NODE_ENV === "development" } = {}) {
18
+ const serverError = new require_src_utils_errors.ServerError({
19
+ code,
20
+ layer: this.layer,
21
+ layerName: this.constructor.name,
22
+ message,
23
+ clientMessage,
24
+ cause,
25
+ captureBoundary: true
26
+ });
27
+ if (serverError.is5xxError()) require_src_utils_errors.reportError(serverError);
28
+ if (log) require_src_utils_logger.logger.error(serverError);
29
+ return (0, neverthrow.err)(serverError);
30
+ }
31
+ handleUnknownError(error) {
32
+ return require_src_utils_errors.ServerError.fromUnknown("INTERNAL_SERVER_ERROR", error, {
33
+ layer: this.layer,
34
+ layerName: this.constructor.name
35
+ });
36
+ }
37
+ throwable(fn) {
38
+ try {
39
+ return fn();
40
+ } catch (error) {
41
+ return (0, neverthrow.err)(this.handleUnknownError(error));
42
+ }
43
+ }
44
+ async throwableAsync(fn) {
45
+ try {
46
+ return await fn();
47
+ } catch (error) {
48
+ return (0, neverthrow.err)(this.handleUnknownError(error));
49
+ }
50
+ }
51
+ async throwablePromise(fn, errorHandler) {
52
+ try {
53
+ return (0, neverthrow.ok)(await fn());
54
+ } catch (error) {
55
+ return (0, neverthrow.err)(errorHandler ? errorHandler(error) : this.handleUnknownError(error));
56
+ }
57
+ }
58
+ };
59
+ //#endregion
60
+ exports.Base = Base;
61
+
62
+ //# sourceMappingURL=base.abstract.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"base.abstract.cjs","names":["logger","ServerError"],"sources":["../../../../src/modules/base/base.abstract.ts"],"sourcesContent":["import type { TRPC_ERROR_CODE_KEY } from \"@trpc/server\";\r\nimport { err, ok } from \"neverthrow\";\r\nimport { reportError, ServerError } from \"../../utils/errors\";\r\nimport { logger } from \"../../utils/logger\";\r\nimport type { ServerResult, ServerResultAsync } from \"./base.dto\";\r\nimport type { ServerErrorLayer } from \"./base.types\";\r\n\r\nexport abstract class Base {\r\n public layer: ServerErrorLayer;\r\n public logger: ReturnType<typeof logger.child>;\r\n\r\n constructor(layer: ServerErrorLayer) {\r\n this.layer = layer;\r\n this.logger = logger.child({ layer: this.layer, layerName: this.constructor.name });\r\n }\r\n\r\n error(\r\n code: TRPC_ERROR_CODE_KEY,\r\n message?: string,\r\n {\r\n cause,\r\n clientMessage,\r\n log = process.env.NODE_ENV === \"development\",\r\n }: { cause?: unknown; clientMessage?: string; log?: boolean } = {}\r\n ) {\r\n const serverError = new ServerError({\r\n code,\r\n layer: this.layer,\r\n layerName: this.constructor.name,\r\n message,\r\n clientMessage,\r\n cause,\r\n captureBoundary: true,\r\n });\r\n if (serverError.is5xxError()) reportError(serverError);\r\n if (log) logger.error(serverError);\r\n return err(serverError);\r\n }\r\n\r\n handleUnknownError(error: unknown) {\r\n return ServerError.fromUnknown(\"INTERNAL_SERVER_ERROR\", error, {\r\n layer: this.layer,\r\n layerName: this.constructor.name,\r\n });\r\n }\r\n\r\n throwable<T>(fn: () => ServerResult<T>): ServerResult<T> {\r\n try {\r\n return fn();\r\n } catch (error) {\r\n return err(this.handleUnknownError(error));\r\n }\r\n }\r\n\r\n async throwableAsync<T>(fn: () => ServerResultAsync<T>): ServerResultAsync<T> {\r\n try {\r\n return await fn();\r\n } catch (error) {\r\n return err(this.handleUnknownError(error));\r\n }\r\n }\r\n\r\n async throwablePromise<T>(\r\n fn: () => Promise<T>,\r\n errorHandler?: (error: unknown) => ServerError\r\n ): ServerResultAsync<T> {\r\n try {\r\n const result = await fn();\r\n return ok(result);\r\n } catch (error) {\r\n return err(errorHandler ? errorHandler(error) : this.handleUnknownError(error));\r\n }\r\n }\r\n}\r\n"],"mappings":";;;;;;AAOA,IAAsB,OAAtB,MAA2B;CACzB;CACA;CAEA,YAAY,OAAyB;AACnC,OAAK,QAAQ;AACb,OAAK,SAASA,yBAAAA,OAAO,MAAM;GAAE,OAAO,KAAK;GAAO,WAAW,KAAK,YAAY;GAAM,CAAC;;CAGrF,MACE,MACA,SACA,EACE,OACA,eACA,MAAM,QAAQ,IAAI,aAAa,kBAC+B,EAAE,EAClE;EACA,MAAM,cAAc,IAAIC,yBAAAA,YAAY;GAClC;GACA,OAAO,KAAK;GACZ,WAAW,KAAK,YAAY;GAC5B;GACA;GACA;GACA,iBAAiB;GAClB,CAAC;AACF,MAAI,YAAY,YAAY,CAAE,0BAAA,YAAY,YAAY;AACtD,MAAI,IAAK,0BAAA,OAAO,MAAM,YAAY;AAClC,UAAA,GAAA,WAAA,KAAW,YAAY;;CAGzB,mBAAmB,OAAgB;AACjC,SAAOA,yBAAAA,YAAY,YAAY,yBAAyB,OAAO;GAC7D,OAAO,KAAK;GACZ,WAAW,KAAK,YAAY;GAC7B,CAAC;;CAGJ,UAAa,IAA4C;AACvD,MAAI;AACF,UAAO,IAAI;WACJ,OAAO;AACd,WAAA,GAAA,WAAA,KAAW,KAAK,mBAAmB,MAAM,CAAC;;;CAI9C,MAAM,eAAkB,IAAsD;AAC5E,MAAI;AACF,UAAO,MAAM,IAAI;WACV,OAAO;AACd,WAAA,GAAA,WAAA,KAAW,KAAK,mBAAmB,MAAM,CAAC;;;CAI9C,MAAM,iBACJ,IACA,cACsB;AACtB,MAAI;AAEF,WAAA,GAAA,WAAA,IADe,MAAM,IAAI,CACR;WACV,OAAO;AACd,WAAA,GAAA,WAAA,KAAW,eAAe,aAAa,MAAM,GAAG,KAAK,mBAAmB,MAAM,CAAC"}
@@ -0,0 +1,29 @@
1
+ import { ServerErrorLayer } from "./base.types.cjs";
2
+ import { ServerError } from "../../utils/errors.cjs";
3
+ import { ServerResult, ServerResultAsync } from "./base.dto.cjs";
4
+ import { logger } from "../../utils/logger.cjs";
5
+ import * as _$neverthrow from "neverthrow";
6
+ import { TRPC_ERROR_CODE_KEY } from "@trpc/server";
7
+
8
+ //#region src/modules/base/base.abstract.d.ts
9
+ declare abstract class Base {
10
+ layer: ServerErrorLayer;
11
+ logger: ReturnType<typeof logger.child>;
12
+ constructor(layer: ServerErrorLayer);
13
+ error(code: TRPC_ERROR_CODE_KEY, message?: string, {
14
+ cause,
15
+ clientMessage,
16
+ log
17
+ }?: {
18
+ cause?: unknown;
19
+ clientMessage?: string;
20
+ log?: boolean;
21
+ }): _$neverthrow.Err<never, ServerError>;
22
+ handleUnknownError(error: unknown): ServerError;
23
+ throwable<T>(fn: () => ServerResult<T>): ServerResult<T>;
24
+ throwableAsync<T>(fn: () => ServerResultAsync<T>): ServerResultAsync<T>;
25
+ throwablePromise<T>(fn: () => Promise<T>, errorHandler?: (error: unknown) => ServerError): ServerResultAsync<T>;
26
+ }
27
+ //#endregion
28
+ export { Base };
29
+ //# sourceMappingURL=base.abstract.d.cts.map
@@ -0,0 +1,83 @@
1
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
+ const require_src_utils_errors = require("../../utils/errors.cjs");
3
+ //#region src/modules/base/base.actor.ts
4
+ function createActorFromContext(context, scope) {
5
+ if (!context.user.role) throw new require_src_utils_errors.ServerError({
6
+ code: "BAD_REQUEST",
7
+ message: "User role not found in context",
8
+ layer: "controller",
9
+ layerName: "ActorValidation"
10
+ });
11
+ if (scope === "organization") {
12
+ if (!context.session.activeOrganizationId || !context.session.activeOrganizationRole) throw new require_src_utils_errors.ServerError({
13
+ code: "FORBIDDEN",
14
+ message: "Active organization context required",
15
+ layer: "controller",
16
+ layerName: "ActorValidation"
17
+ });
18
+ }
19
+ if (scope === "team") {
20
+ if (!context.session.activeOrganizationId || !context.session.activeOrganizationRole) throw new require_src_utils_errors.ServerError({
21
+ code: "FORBIDDEN",
22
+ message: "Active organization context required for team scope",
23
+ layer: "controller",
24
+ layerName: "ActorValidation"
25
+ });
26
+ if (!context.session.activeTeamId || !context.session.activeTeamRole) throw new require_src_utils_errors.ServerError({
27
+ code: "FORBIDDEN",
28
+ message: "Active team context required",
29
+ layer: "controller",
30
+ layerName: "ActorValidation"
31
+ });
32
+ }
33
+ return {
34
+ userId: context.user.id,
35
+ userRole: context.user.role,
36
+ organizationId: context.session.activeOrganizationId,
37
+ organizationRole: context.session.activeOrganizationRole,
38
+ teamId: context.session.activeTeamId,
39
+ teamRole: context.session.activeTeamRole
40
+ };
41
+ }
42
+ function validateActor(actor, scope) {
43
+ if (!actor.userId || !actor.userRole) return false;
44
+ if (scope === "user") return true;
45
+ if (scope === "organization") return Boolean(actor.organizationId && actor.organizationRole);
46
+ return Boolean(actor.organizationId && actor.organizationRole && actor.teamId && actor.teamRole);
47
+ }
48
+ /**
49
+ * Builds a flat actor for tests / grants without session. Validates that team scope implies organization.
50
+ */
51
+ function createServiceActor(claims) {
52
+ const organizationId = claims.organizationId ?? null;
53
+ const organizationRole = claims.organizationRole ?? null;
54
+ const teamId = claims.teamId ?? null;
55
+ const teamRole = claims.teamRole ?? null;
56
+ if ((teamId || teamRole) && (!organizationId || !organizationRole)) throw new Error("organization access before team access");
57
+ return {
58
+ userId: claims.userId,
59
+ userRole: claims.userRole,
60
+ organizationId,
61
+ organizationRole,
62
+ teamId,
63
+ teamRole
64
+ };
65
+ }
66
+ function getServiceActorScope(actor) {
67
+ if (validateActor(actor, "team")) return "team";
68
+ if (validateActor(actor, "organization")) return "organization";
69
+ return "user";
70
+ }
71
+ function hasServiceActorScope(actor, scope) {
72
+ if (scope === "team") return validateActor(actor, "team");
73
+ if (scope === "organization") return validateActor(actor, "organization") || validateActor(actor, "team");
74
+ return validateActor(actor, "user");
75
+ }
76
+ //#endregion
77
+ exports.createActorFromContext = createActorFromContext;
78
+ exports.createServiceActor = createServiceActor;
79
+ exports.getServiceActorScope = getServiceActorScope;
80
+ exports.hasServiceActorScope = hasServiceActorScope;
81
+ exports.validateActor = validateActor;
82
+
83
+ //# sourceMappingURL=base.actor.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"base.actor.cjs","names":["ServerError"],"sources":["../../../../src/modules/base/base.actor.ts"],"sourcesContent":["import { ServerError } from \"../../utils/errors\";\r\nimport type { Session, User } from \"../auth/auth.lib\";\r\n\r\nexport type UserActor = {\r\n userId: string;\r\n userRole: string;\r\n organizationId: string | null;\r\n organizationRole: string | null;\r\n teamId: string | null;\r\n teamRole: string | null;\r\n};\r\n\r\nexport type OrganizationActor = {\r\n userId: string;\r\n userRole: string;\r\n organizationId: string;\r\n organizationRole: string;\r\n teamId: string | null;\r\n teamRole: string | null;\r\n};\r\n\r\nexport type TeamActor = {\r\n userId: string;\r\n userRole: string;\r\n organizationId: string;\r\n organizationRole: string;\r\n teamId: string;\r\n teamRole: string;\r\n};\r\n\r\nexport type AuthenticatedActor = UserActor | OrganizationActor | TeamActor;\r\n\r\n/** @deprecated Prefer `AuthenticatedActor` — kept for grants and legacy call sites */\r\nexport type ServiceActor = AuthenticatedActor;\r\n\r\nexport type Actor = {\r\n user: UserActor;\r\n organization: OrganizationActor;\r\n team: TeamActor;\r\n authenticated: AuthenticatedActor;\r\n};\r\n\r\nexport type ActorScope = \"user\" | \"organization\" | \"team\";\r\n\r\nexport type RequiredServiceActor<Scope extends ActorScope> = Actor[Scope];\r\n\r\n/** Claims shape used by tests and factories */\r\nexport type ServiceActorClaims = {\r\n userId: string;\r\n userRole: string;\r\n organizationId?: string | null;\r\n organizationRole?: string | null;\r\n teamId?: string | null;\r\n teamRole?: string | null;\r\n};\r\n\r\n/** @deprecated Prefer `OrganizationActor` */\r\nexport type ServiceOrganizationActor = OrganizationActor;\r\n/** @deprecated Prefer `TeamActor` */\r\nexport type ServiceTeamActor = TeamActor;\r\n\r\nexport function createActorFromContext(\r\n context: { user: User; session: Session },\r\n scope: \"team\"\r\n): TeamActor;\r\nexport function createActorFromContext(\r\n context: { user: User; session: Session },\r\n scope: \"organization\"\r\n): OrganizationActor;\r\nexport function createActorFromContext(\r\n context: { user: User; session: Session },\r\n scope: \"user\"\r\n): UserActor;\r\nexport function createActorFromContext(\r\n context: { user: User; session: Session },\r\n scope: ActorScope\r\n): AuthenticatedActor {\r\n if (!context.user.role) {\r\n throw new ServerError({\r\n code: \"BAD_REQUEST\",\r\n message: \"User role not found in context\",\r\n layer: \"controller\",\r\n layerName: \"ActorValidation\",\r\n });\r\n }\r\n\r\n if (scope === \"organization\") {\r\n if (!context.session.activeOrganizationId || !context.session.activeOrganizationRole) {\r\n throw new ServerError({\r\n code: \"FORBIDDEN\",\r\n message: \"Active organization context required\",\r\n layer: \"controller\",\r\n layerName: \"ActorValidation\",\r\n });\r\n }\r\n }\r\n\r\n if (scope === \"team\") {\r\n if (!context.session.activeOrganizationId || !context.session.activeOrganizationRole) {\r\n throw new ServerError({\r\n code: \"FORBIDDEN\",\r\n message: \"Active organization context required for team scope\",\r\n layer: \"controller\",\r\n layerName: \"ActorValidation\",\r\n });\r\n }\r\n if (!context.session.activeTeamId || !context.session.activeTeamRole) {\r\n throw new ServerError({\r\n code: \"FORBIDDEN\",\r\n message: \"Active team context required\",\r\n layer: \"controller\",\r\n layerName: \"ActorValidation\",\r\n });\r\n }\r\n }\r\n\r\n return {\r\n userId: context.user.id,\r\n userRole: context.user.role,\r\n organizationId: context.session.activeOrganizationId,\r\n organizationRole: context.session.activeOrganizationRole,\r\n teamId: context.session.activeTeamId,\r\n teamRole: context.session.activeTeamRole,\r\n };\r\n}\r\n\r\nexport function validateActor(actor: AuthenticatedActor, scope: ActorScope): boolean {\r\n if (!actor.userId || !actor.userRole) return false;\r\n if (scope === \"user\") return true;\r\n if (scope === \"organization\") {\r\n return Boolean(actor.organizationId && actor.organizationRole);\r\n }\r\n return Boolean(\r\n actor.organizationId && actor.organizationRole && actor.teamId && actor.teamRole\r\n );\r\n}\r\n\r\n/**\r\n * Builds a flat actor for tests / grants without session. Validates that team scope implies organization.\r\n */\r\nexport function createServiceActor(claims: ServiceActorClaims): AuthenticatedActor {\r\n const organizationId = claims.organizationId ?? null;\r\n const organizationRole = claims.organizationRole ?? null;\r\n const teamId = claims.teamId ?? null;\r\n const teamRole = claims.teamRole ?? null;\r\n\r\n if ((teamId || teamRole) && (!organizationId || !organizationRole)) {\r\n throw new Error(\"organization access before team access\");\r\n }\r\n\r\n return {\r\n userId: claims.userId,\r\n userRole: claims.userRole,\r\n organizationId,\r\n organizationRole,\r\n teamId,\r\n teamRole,\r\n };\r\n}\r\n\r\nexport function getServiceActorScope(actor: AuthenticatedActor): ActorScope {\r\n if (validateActor(actor, \"team\")) return \"team\";\r\n if (validateActor(actor, \"organization\")) return \"organization\";\r\n return \"user\";\r\n}\r\n\r\nexport function hasServiceActorScope(actor: AuthenticatedActor, scope: ActorScope): boolean {\r\n if (scope === \"team\") return validateActor(actor, \"team\");\r\n if (scope === \"organization\") {\r\n return validateActor(actor, \"organization\") || validateActor(actor, \"team\");\r\n }\r\n return validateActor(actor, \"user\");\r\n}\r\n"],"mappings":";;;AAyEA,SAAgB,uBACd,SACA,OACoB;AACpB,KAAI,CAAC,QAAQ,KAAK,KAChB,OAAM,IAAIA,yBAAAA,YAAY;EACpB,MAAM;EACN,SAAS;EACT,OAAO;EACP,WAAW;EACZ,CAAC;AAGJ,KAAI,UAAU;MACR,CAAC,QAAQ,QAAQ,wBAAwB,CAAC,QAAQ,QAAQ,uBAC5D,OAAM,IAAIA,yBAAAA,YAAY;GACpB,MAAM;GACN,SAAS;GACT,OAAO;GACP,WAAW;GACZ,CAAC;;AAIN,KAAI,UAAU,QAAQ;AACpB,MAAI,CAAC,QAAQ,QAAQ,wBAAwB,CAAC,QAAQ,QAAQ,uBAC5D,OAAM,IAAIA,yBAAAA,YAAY;GACpB,MAAM;GACN,SAAS;GACT,OAAO;GACP,WAAW;GACZ,CAAC;AAEJ,MAAI,CAAC,QAAQ,QAAQ,gBAAgB,CAAC,QAAQ,QAAQ,eACpD,OAAM,IAAIA,yBAAAA,YAAY;GACpB,MAAM;GACN,SAAS;GACT,OAAO;GACP,WAAW;GACZ,CAAC;;AAIN,QAAO;EACL,QAAQ,QAAQ,KAAK;EACrB,UAAU,QAAQ,KAAK;EACvB,gBAAgB,QAAQ,QAAQ;EAChC,kBAAkB,QAAQ,QAAQ;EAClC,QAAQ,QAAQ,QAAQ;EACxB,UAAU,QAAQ,QAAQ;EAC3B;;AAGH,SAAgB,cAAc,OAA2B,OAA4B;AACnF,KAAI,CAAC,MAAM,UAAU,CAAC,MAAM,SAAU,QAAO;AAC7C,KAAI,UAAU,OAAQ,QAAO;AAC7B,KAAI,UAAU,eACZ,QAAO,QAAQ,MAAM,kBAAkB,MAAM,iBAAiB;AAEhE,QAAO,QACL,MAAM,kBAAkB,MAAM,oBAAoB,MAAM,UAAU,MAAM,SACzE;;;;;AAMH,SAAgB,mBAAmB,QAAgD;CACjF,MAAM,iBAAiB,OAAO,kBAAkB;CAChD,MAAM,mBAAmB,OAAO,oBAAoB;CACpD,MAAM,SAAS,OAAO,UAAU;CAChC,MAAM,WAAW,OAAO,YAAY;AAEpC,MAAK,UAAU,cAAc,CAAC,kBAAkB,CAAC,kBAC/C,OAAM,IAAI,MAAM,yCAAyC;AAG3D,QAAO;EACL,QAAQ,OAAO;EACf,UAAU,OAAO;EACjB;EACA;EACA;EACA;EACD;;AAGH,SAAgB,qBAAqB,OAAuC;AAC1E,KAAI,cAAc,OAAO,OAAO,CAAE,QAAO;AACzC,KAAI,cAAc,OAAO,eAAe,CAAE,QAAO;AACjD,QAAO;;AAGT,SAAgB,qBAAqB,OAA2B,OAA4B;AAC1F,KAAI,UAAU,OAAQ,QAAO,cAAc,OAAO,OAAO;AACzD,KAAI,UAAU,eACZ,QAAO,cAAc,OAAO,eAAe,IAAI,cAAc,OAAO,OAAO;AAE7E,QAAO,cAAc,OAAO,OAAO"}
@@ -0,0 +1,73 @@
1
+ import { Session, User } from "../auth/auth.lib.cjs";
2
+
3
+ //#region src/modules/base/base.actor.d.ts
4
+ type UserActor = {
5
+ userId: string;
6
+ userRole: string;
7
+ organizationId: string | null;
8
+ organizationRole: string | null;
9
+ teamId: string | null;
10
+ teamRole: string | null;
11
+ };
12
+ type OrganizationActor = {
13
+ userId: string;
14
+ userRole: string;
15
+ organizationId: string;
16
+ organizationRole: string;
17
+ teamId: string | null;
18
+ teamRole: string | null;
19
+ };
20
+ type TeamActor = {
21
+ userId: string;
22
+ userRole: string;
23
+ organizationId: string;
24
+ organizationRole: string;
25
+ teamId: string;
26
+ teamRole: string;
27
+ };
28
+ type AuthenticatedActor = UserActor | OrganizationActor | TeamActor;
29
+ /** @deprecated Prefer `AuthenticatedActor` — kept for grants and legacy call sites */
30
+ type ServiceActor = AuthenticatedActor;
31
+ type Actor = {
32
+ user: UserActor;
33
+ organization: OrganizationActor;
34
+ team: TeamActor;
35
+ authenticated: AuthenticatedActor;
36
+ };
37
+ type ActorScope = "user" | "organization" | "team";
38
+ type RequiredServiceActor<Scope extends ActorScope> = Actor[Scope];
39
+ /** Claims shape used by tests and factories */
40
+ type ServiceActorClaims = {
41
+ userId: string;
42
+ userRole: string;
43
+ organizationId?: string | null;
44
+ organizationRole?: string | null;
45
+ teamId?: string | null;
46
+ teamRole?: string | null;
47
+ };
48
+ /** @deprecated Prefer `OrganizationActor` */
49
+ type ServiceOrganizationActor = OrganizationActor;
50
+ /** @deprecated Prefer `TeamActor` */
51
+ type ServiceTeamActor = TeamActor;
52
+ declare function createActorFromContext(context: {
53
+ user: User;
54
+ session: Session;
55
+ }, scope: "team"): TeamActor;
56
+ declare function createActorFromContext(context: {
57
+ user: User;
58
+ session: Session;
59
+ }, scope: "organization"): OrganizationActor;
60
+ declare function createActorFromContext(context: {
61
+ user: User;
62
+ session: Session;
63
+ }, scope: "user"): UserActor;
64
+ declare function validateActor(actor: AuthenticatedActor, scope: ActorScope): boolean;
65
+ /**
66
+ * Builds a flat actor for tests / grants without session. Validates that team scope implies organization.
67
+ */
68
+ declare function createServiceActor(claims: ServiceActorClaims): AuthenticatedActor;
69
+ declare function getServiceActorScope(actor: AuthenticatedActor): ActorScope;
70
+ declare function hasServiceActorScope(actor: AuthenticatedActor, scope: ActorScope): boolean;
71
+ //#endregion
72
+ export { Actor, ActorScope, AuthenticatedActor, OrganizationActor, RequiredServiceActor, ServiceActor, ServiceActorClaims, ServiceOrganizationActor, ServiceTeamActor, TeamActor, UserActor, createActorFromContext, createServiceActor, getServiceActorScope, hasServiceActorScope, validateActor };
73
+ //# sourceMappingURL=base.actor.d.cts.map
@@ -0,0 +1,98 @@
1
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
+ require("../../../_virtual/_rolldown/runtime.cjs");
3
+ let zod = require("zod");
4
+ let drizzle_orm = require("drizzle-orm");
5
+ let drizzle_zod = require("drizzle-zod");
6
+ //#region src/modules/base/base.dto.ts
7
+ const createTableSelectSchema = (table) => (0, drizzle_zod.createSelectSchema)(table);
8
+ function toZodFilter(array) {
9
+ return array.reduce((acc, column) => {
10
+ acc[column] = true;
11
+ return acc;
12
+ }, {});
13
+ }
14
+ function pickSchema(schema, keys) {
15
+ const mask = {};
16
+ for (const k of keys) mask[k] = true;
17
+ return schema.pick(mask);
18
+ }
19
+ function pickTableSchema(table, columns) {
20
+ return pickSchema((0, drizzle_zod.createSelectSchema)(table), columns);
21
+ }
22
+ function omitSchema(schema, keys) {
23
+ const mask = {};
24
+ for (const k of keys) mask[k] = true;
25
+ return schema.omit(mask);
26
+ }
27
+ function omitTableSchema(table, columns) {
28
+ return omitSchema((0, drizzle_zod.createSelectSchema)(table), columns);
29
+ }
30
+ function pickColumns(table, schema) {
31
+ const allColumns = (0, drizzle_orm.getTableColumns)(table);
32
+ const schemaKeys = Object.keys(schema.shape);
33
+ const result = {};
34
+ for (const key of schemaKeys) if (key in allColumns) result[key] = allColumns[key];
35
+ return result;
36
+ }
37
+ function pickTableColumns(table, columns) {
38
+ const allColumns = (0, drizzle_orm.getTableColumns)(table);
39
+ const result = {};
40
+ for (const key of columns) if (key in allColumns) result[key] = allColumns[key];
41
+ return result;
42
+ }
43
+ function omitTableColumns(table, columns) {
44
+ const allColumns = (0, drizzle_orm.getTableColumns)(table);
45
+ const columnsToOmit = new Set(columns);
46
+ const filteredEntries = Object.entries(allColumns).filter(([key]) => !columnsToOmit.has(key));
47
+ return Object.fromEntries(filteredEntries);
48
+ }
49
+ function createSelectDTO(table, partial) {
50
+ if (partial) {
51
+ if ("omit" in partial && partial.omit) return {
52
+ columns: omitTableColumns(table, partial.omit),
53
+ schema: omitTableSchema(table, partial.omit)
54
+ };
55
+ if ("pick" in partial && partial.pick) return {
56
+ columns: pickTableColumns(table, partial.pick),
57
+ schema: pickTableSchema(table, partial.pick)
58
+ };
59
+ }
60
+ return {
61
+ columns: (0, drizzle_orm.getTableColumns)(table),
62
+ schema: createTableSelectSchema(table)
63
+ };
64
+ }
65
+ function createSelectUtils(dtos, output, transformer) {
66
+ return {
67
+ select: Object.fromEntries(Object.entries(dtos).map(([key, dto]) => [key, dto.columns])),
68
+ output,
69
+ transformer
70
+ };
71
+ }
72
+ const uuidOutput = zod.z.object({ id: zod.z.uuid() });
73
+ const uuidManyOutput = zod.z.object({ ids: zod.z.array(zod.z.uuid()) });
74
+ const scheduleOutput = zod.z.object({ jobId: zod.z.string() });
75
+ const scheduleManyOutput = zod.z.object({ jobIds: zod.z.array(zod.z.string()) });
76
+ const deleteOutput = uuidOutput;
77
+ const deleteManyOutput = uuidManyOutput;
78
+ //#endregion
79
+ exports.createSelectDTO = createSelectDTO;
80
+ exports.createSelectUtils = createSelectUtils;
81
+ exports.createTableSelectSchema = createTableSelectSchema;
82
+ exports.deleteManyOutput = deleteManyOutput;
83
+ exports.deleteOutput = deleteOutput;
84
+ exports.getTableColumns = drizzle_orm.getTableColumns;
85
+ exports.omitSchema = omitSchema;
86
+ exports.omitTableColumns = omitTableColumns;
87
+ exports.omitTableSchema = omitTableSchema;
88
+ exports.pickColumns = pickColumns;
89
+ exports.pickSchema = pickSchema;
90
+ exports.pickTableColumns = pickTableColumns;
91
+ exports.pickTableSchema = pickTableSchema;
92
+ exports.scheduleManyOutput = scheduleManyOutput;
93
+ exports.scheduleOutput = scheduleOutput;
94
+ exports.toZodFilter = toZodFilter;
95
+ exports.uuidManyOutput = uuidManyOutput;
96
+ exports.uuidOutput = uuidOutput;
97
+
98
+ //# sourceMappingURL=base.dto.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"base.dto.cjs","names":["z"],"sources":["../../../../src/modules/base/base.dto.ts"],"sourcesContent":["import { getTableColumns, type InferSelectModel, type Table } from \"drizzle-orm\";\r\nimport { createSelectSchema } from \"drizzle-zod\";\r\nimport type { Result } from \"neverthrow\";\r\nimport { z } from \"zod\";\r\nimport type { ServerError } from \"../../utils/errors\";\r\n\r\ntype Simplify<T> = { [K in keyof T]: T[K] } & {};\r\ntype StringKeys<T> = Extract<keyof T, string>;\r\n\r\nexport type ServerResult<T> = Result<T, ServerError>;\r\nexport type ServerResultAsync<T> = Promise<ServerResult<T>>;\r\n\r\n// Wrapper to force the drizzle-zod overload to the Table version\r\nexport const createTableSelectSchema = <T extends Table>(table: T) => createSelectSchema(table);\r\n\r\nexport type ExtractColumnTypes<T extends Table, C extends Record<string, unknown>> = Simplify<\r\n Pick<InferSelectModel<T>, Extract<keyof C, keyof InferSelectModel<T>>>\r\n>;\r\n\r\nexport function toZodFilter<const T extends readonly string[]>(array: T): Record<T[number], true> {\r\n return array.reduce(\r\n (acc, column) => {\r\n acc[column as T[number]] = true;\r\n return acc;\r\n },\r\n {} as Record<T[number], true>\r\n );\r\n}\r\n\r\nexport function pickSchema<\r\n Shape extends z.ZodRawShape,\r\n const Keys extends readonly StringKeys<Shape>[],\r\n>(schema: z.ZodObject<Shape>, keys: Keys): z.ZodObject<Pick<Shape, Keys[number]>> {\r\n const mask: Record<keyof Shape, true> = {} as Record<keyof Shape, true>;\r\n for (const k of keys) {\r\n mask[k] = true;\r\n }\r\n return schema.pick(mask) as z.ZodObject<Pick<Shape, Keys[number]>>;\r\n}\r\n\r\nexport function pickTableSchema<T extends Table, K extends keyof InferSelectModel<T>>(\r\n table: T,\r\n columns: readonly K[]\r\n) {\r\n return pickSchema(createSelectSchema(table), columns);\r\n}\r\n\r\nexport function omitSchema<\r\n Shape extends z.ZodRawShape,\r\n const Keys extends readonly StringKeys<Shape>[],\r\n>(schema: z.ZodObject<Shape>, keys: Keys): z.ZodObject<Omit<Shape, Keys[number]>> {\r\n const mask: Record<keyof Shape, true> = {} as Record<keyof Shape, true>;\r\n for (const k of keys) {\r\n mask[k] = true;\r\n }\r\n return schema.omit(mask) as z.ZodObject<Omit<Shape, Keys[number]>>;\r\n}\r\n\r\nexport function omitTableSchema<T extends Table, K extends keyof InferSelectModel<T>>(\r\n table: T,\r\n columns: readonly K[]\r\n) {\r\n return omitSchema(createSelectSchema(table), columns);\r\n}\r\n\r\nexport { getTableColumns };\r\n\r\nexport function pickColumns<T extends Table, Shape extends z.ZodRawShape>(\r\n table: T,\r\n schema: z.ZodObject<Shape>\r\n): Pick<ReturnType<typeof getTableColumns<T>>, Extract<keyof Shape, string>> {\r\n const allColumns = getTableColumns(table);\r\n const schemaKeys = Object.keys(schema.shape) as Array<Extract<keyof Shape, string>>;\r\n\r\n const result = {} as Pick<typeof allColumns, Extract<keyof Shape, string>>;\r\n for (const key of schemaKeys) {\r\n if (key in allColumns) {\r\n (result as any)[key] = allColumns[key as keyof typeof allColumns];\r\n }\r\n }\r\n\r\n return result;\r\n}\r\n\r\nexport function pickTableColumns<T extends Table, K extends keyof InferSelectModel<T>>(\r\n table: T,\r\n columns: readonly K[]\r\n): Pick<ReturnType<typeof getTableColumns<T>>, K> {\r\n const allColumns = getTableColumns(table);\r\n const result = {} as Pick<typeof allColumns, K>;\r\n for (const key of columns) {\r\n if (key in allColumns) {\r\n result[key] = allColumns[key];\r\n }\r\n }\r\n return result;\r\n}\r\n\r\nexport function omitTableColumns<T extends Table, K extends keyof InferSelectModel<T>>(\r\n table: T,\r\n columns: readonly K[]\r\n): Omit<ReturnType<typeof getTableColumns<T>>, K> {\r\n const allColumns = getTableColumns(table);\r\n const columnsToOmit = new Set(columns as readonly string[]);\r\n const filteredEntries = Object.entries(allColumns).filter(([key]) => !columnsToOmit.has(key));\r\n return Object.fromEntries(filteredEntries) as Omit<typeof allColumns, K>;\r\n}\r\n\r\n// Overloads to narrow return type based on provided partial\r\nexport function createSelectDTO<T extends Table>(\r\n table: T\r\n): {\r\n columns: ReturnType<typeof getTableColumns<T>>;\r\n schema: ReturnType<typeof createTableSelectSchema<T>>;\r\n};\r\nexport function createSelectDTO<\r\n T extends Table,\r\n K extends Extract<keyof InferSelectModel<T>, string>,\r\n>(\r\n table: T,\r\n partial: { omit: readonly K[] }\r\n): {\r\n columns: ReturnType<typeof omitTableColumns<T, K>>;\r\n schema: ReturnType<typeof omitTableSchema<T, K>>;\r\n};\r\nexport function createSelectDTO<\r\n T extends Table,\r\n K extends Extract<keyof InferSelectModel<T>, string>,\r\n>(\r\n table: T,\r\n partial: { pick: readonly K[] }\r\n): {\r\n columns: ReturnType<typeof pickTableColumns<T, K>>;\r\n schema: ReturnType<typeof pickTableSchema<T, K>>;\r\n};\r\n\r\n// Implementation\r\nexport function createSelectDTO<T extends Table>(\r\n table: T,\r\n partial?:\r\n | { omit: readonly (keyof InferSelectModel<T>)[] }\r\n | { pick: readonly (keyof InferSelectModel<T>)[] }\r\n): { columns: unknown; schema: unknown } {\r\n if (partial) {\r\n if (\"omit\" in partial && partial.omit) {\r\n return {\r\n columns: omitTableColumns(table, partial.omit),\r\n schema: omitTableSchema(table, partial.omit),\r\n };\r\n }\r\n if (\"pick\" in partial && partial.pick) {\r\n return {\r\n columns: pickTableColumns(table, partial.pick),\r\n schema: pickTableSchema(table, partial.pick),\r\n };\r\n }\r\n }\r\n return { columns: getTableColumns(table), schema: createTableSelectSchema(table) };\r\n}\r\n\r\nexport function createSelectUtils<\r\n T extends Record<\r\n string,\r\n {\r\n columns: unknown;\r\n schema: z.ZodTypeAny;\r\n }\r\n >,\r\n S extends z.ZodTypeAny,\r\n>(\r\n dtos: T,\r\n output: S,\r\n transformer: (rows: Array<{ [K in keyof T]: z.infer<T[K][\"schema\"]> }>) => z.infer<S>\r\n): {\r\n select: { [K in keyof T]: T[K][\"columns\"] };\r\n output: S;\r\n transformer: (rows: Array<{ [K in keyof T]: z.infer<T[K][\"schema\"]> }>) => z.infer<S>;\r\n} {\r\n return {\r\n select: Object.fromEntries(Object.entries(dtos).map(([key, dto]) => [key, dto.columns])) as {\r\n [K in keyof T]: T[K][\"columns\"];\r\n },\r\n output,\r\n transformer,\r\n };\r\n}\r\n\r\nexport const uuidOutput = z.object({\r\n id: z.uuid(),\r\n});\r\n\r\nexport const uuidManyOutput = z.object({\r\n ids: z.array(z.uuid()),\r\n});\r\n\r\nexport const scheduleOutput = z.object({\r\n jobId: z.string(),\r\n});\r\n\r\nexport const scheduleManyOutput = z.object({\r\n jobIds: z.array(z.string()),\r\n});\r\n\r\nexport const deleteOutput = uuidOutput;\r\n\r\nexport const deleteManyOutput = uuidManyOutput;\r\n"],"mappings":";;;;;;AAaA,MAAa,2BAA4C,WAAA,GAAA,YAAA,oBAAgC,MAAM;AAM/F,SAAgB,YAA+C,OAAmC;AAChG,QAAO,MAAM,QACV,KAAK,WAAW;AACf,MAAI,UAAuB;AAC3B,SAAO;IAET,EAAE,CACH;;AAGH,SAAgB,WAGd,QAA4B,MAAoD;CAChF,MAAM,OAAkC,EAAE;AAC1C,MAAK,MAAM,KAAK,KACd,MAAK,KAAK;AAEZ,QAAO,OAAO,KAAK,KAAK;;AAG1B,SAAgB,gBACd,OACA,SACA;AACA,QAAO,YAAA,GAAA,YAAA,oBAA8B,MAAM,EAAE,QAAQ;;AAGvD,SAAgB,WAGd,QAA4B,MAAoD;CAChF,MAAM,OAAkC,EAAE;AAC1C,MAAK,MAAM,KAAK,KACd,MAAK,KAAK;AAEZ,QAAO,OAAO,KAAK,KAAK;;AAG1B,SAAgB,gBACd,OACA,SACA;AACA,QAAO,YAAA,GAAA,YAAA,oBAA8B,MAAM,EAAE,QAAQ;;AAKvD,SAAgB,YACd,OACA,QAC2E;CAC3E,MAAM,cAAA,GAAA,YAAA,iBAA6B,MAAM;CACzC,MAAM,aAAa,OAAO,KAAK,OAAO,MAAM;CAE5C,MAAM,SAAS,EAAE;AACjB,MAAK,MAAM,OAAO,WAChB,KAAI,OAAO,WACR,QAAe,OAAO,WAAW;AAItC,QAAO;;AAGT,SAAgB,iBACd,OACA,SACgD;CAChD,MAAM,cAAA,GAAA,YAAA,iBAA6B,MAAM;CACzC,MAAM,SAAS,EAAE;AACjB,MAAK,MAAM,OAAO,QAChB,KAAI,OAAO,WACT,QAAO,OAAO,WAAW;AAG7B,QAAO;;AAGT,SAAgB,iBACd,OACA,SACgD;CAChD,MAAM,cAAA,GAAA,YAAA,iBAA6B,MAAM;CACzC,MAAM,gBAAgB,IAAI,IAAI,QAA6B;CAC3D,MAAM,kBAAkB,OAAO,QAAQ,WAAW,CAAC,QAAQ,CAAC,SAAS,CAAC,cAAc,IAAI,IAAI,CAAC;AAC7F,QAAO,OAAO,YAAY,gBAAgB;;AAgC5C,SAAgB,gBACd,OACA,SAGuC;AACvC,KAAI,SAAS;AACX,MAAI,UAAU,WAAW,QAAQ,KAC/B,QAAO;GACL,SAAS,iBAAiB,OAAO,QAAQ,KAAK;GAC9C,QAAQ,gBAAgB,OAAO,QAAQ,KAAK;GAC7C;AAEH,MAAI,UAAU,WAAW,QAAQ,KAC/B,QAAO;GACL,SAAS,iBAAiB,OAAO,QAAQ,KAAK;GAC9C,QAAQ,gBAAgB,OAAO,QAAQ,KAAK;GAC7C;;AAGL,QAAO;EAAE,UAAA,GAAA,YAAA,iBAAyB,MAAM;EAAE,QAAQ,wBAAwB,MAAM;EAAE;;AAGpF,SAAgB,kBAUd,MACA,QACA,aAKA;AACA,QAAO;EACL,QAAQ,OAAO,YAAY,OAAO,QAAQ,KAAK,CAAC,KAAK,CAAC,KAAK,SAAS,CAAC,KAAK,IAAI,QAAQ,CAAC,CAAC;EAGxF;EACA;EACD;;AAGH,MAAa,aAAaA,IAAAA,EAAE,OAAO,EACjC,IAAIA,IAAAA,EAAE,MAAM,EACb,CAAC;AAEF,MAAa,iBAAiBA,IAAAA,EAAE,OAAO,EACrC,KAAKA,IAAAA,EAAE,MAAMA,IAAAA,EAAE,MAAM,CAAC,EACvB,CAAC;AAEF,MAAa,iBAAiBA,IAAAA,EAAE,OAAO,EACrC,OAAOA,IAAAA,EAAE,QAAQ,EAClB,CAAC;AAEF,MAAa,qBAAqBA,IAAAA,EAAE,OAAO,EACzC,QAAQA,IAAAA,EAAE,MAAMA,IAAAA,EAAE,QAAQ,CAAC,EAC5B,CAAC;AAEF,MAAa,eAAe;AAE5B,MAAa,mBAAmB"}
@@ -0,0 +1,67 @@
1
+ import { ServerError } from "../../utils/errors.cjs";
2
+ import * as _$drizzle_zod0 from "drizzle-zod";
3
+ import * as _$drizzle_orm0 from "drizzle-orm";
4
+ import { InferSelectModel, Table, getTableColumns } from "drizzle-orm";
5
+ import { Result } from "neverthrow";
6
+ import { z } from "zod";
7
+
8
+ //#region src/modules/base/base.dto.d.ts
9
+ type Simplify<T> = { [K in keyof T]: T[K] } & {};
10
+ type StringKeys<T> = Extract<keyof T, string>;
11
+ type ServerResult<T> = Result<T, ServerError>;
12
+ type ServerResultAsync<T> = Promise<ServerResult<T>>;
13
+ declare const createTableSelectSchema: <T extends Table>(table: T) => _$drizzle_zod0.BuildSchema<"select", T["_"]["columns"], undefined, undefined>;
14
+ type ExtractColumnTypes<T extends Table, C extends Record<string, unknown>> = Simplify<Pick<InferSelectModel<T>, Extract<keyof C, keyof InferSelectModel<T>>>>;
15
+ declare function toZodFilter<const T extends readonly string[]>(array: T): Record<T[number], true>;
16
+ 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]>>;
17
+ 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 _$drizzle_zod0.ColumnIsGeneratedAlwaysAs<T["_"]["columns"][K_2]> extends true ? K_2 : K_2]: T_2[K_2] extends infer TColumn extends _$drizzle_orm0.Column<_$drizzle_orm0.ColumnBaseConfig<_$drizzle_orm0.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 ? _$drizzle_orm0.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>>> : _$drizzle_zod0.HandleColumn<TType, TColumn, TCoerce> : T_2[K_2] extends infer TObject extends Table<_$drizzle_orm0.TableConfig<_$drizzle_orm0.Column<any, object, object>>> | _$drizzle_orm0.SelectedFieldsFlat<_$drizzle_orm0.Column<_$drizzle_orm0.ColumnBaseConfig<_$drizzle_orm0.ColumnDataType, string>, object, object>> | _$drizzle_orm0.View<string, boolean, _$drizzle_orm0.ColumnsSelection> ? _$drizzle_zod0.BuildSchema<TType, _$drizzle_zod0.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
+ 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]>>;
19
+ 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 _$drizzle_zod0.ColumnIsGeneratedAlwaysAs<T["_"]["columns"][K_2]> extends true ? K_2 : K_2]: T_2[K_2] extends infer TColumn extends _$drizzle_orm0.Column<_$drizzle_orm0.ColumnBaseConfig<_$drizzle_orm0.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 ? _$drizzle_orm0.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>>> : _$drizzle_zod0.HandleColumn<TType, TColumn, TCoerce> : T_2[K_2] extends infer TObject extends Table<_$drizzle_orm0.TableConfig<_$drizzle_orm0.Column<any, object, object>>> | _$drizzle_orm0.SelectedFieldsFlat<_$drizzle_orm0.Column<_$drizzle_orm0.ColumnBaseConfig<_$drizzle_orm0.ColumnDataType, string>, object, object>> | _$drizzle_orm0.View<string, boolean, _$drizzle_orm0.ColumnsSelection> ? _$drizzle_zod0.BuildSchema<TType, _$drizzle_zod0.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>;
20
+ 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>>;
21
+ declare function pickTableColumns<T extends Table, K extends keyof InferSelectModel<T>>(table: T, columns: readonly K[]): Pick<ReturnType<typeof getTableColumns<T>>, K>;
22
+ declare function omitTableColumns<T extends Table, K extends keyof InferSelectModel<T>>(table: T, columns: readonly K[]): Omit<ReturnType<typeof getTableColumns<T>>, K>;
23
+ declare function createSelectDTO<T extends Table>(table: T): {
24
+ columns: ReturnType<typeof getTableColumns<T>>;
25
+ schema: ReturnType<typeof createTableSelectSchema<T>>;
26
+ };
27
+ declare function createSelectDTO<T extends Table, K extends Extract<keyof InferSelectModel<T>, string>>(table: T, partial: {
28
+ omit: readonly K[];
29
+ }): {
30
+ columns: ReturnType<typeof omitTableColumns<T, K>>;
31
+ schema: ReturnType<typeof omitTableSchema<T, K>>;
32
+ };
33
+ declare function createSelectDTO<T extends Table, K extends Extract<keyof InferSelectModel<T>, string>>(table: T, partial: {
34
+ pick: readonly K[];
35
+ }): {
36
+ columns: ReturnType<typeof pickTableColumns<T, K>>;
37
+ schema: ReturnType<typeof pickTableSchema<T, K>>;
38
+ };
39
+ declare function createSelectUtils<T extends Record<string, {
40
+ columns: unknown;
41
+ schema: z.ZodTypeAny;
42
+ }>, S extends z.ZodTypeAny>(dtos: T, output: S, transformer: (rows: Array<{ [K in keyof T]: z.infer<T[K]["schema"]> }>) => z.infer<S>): {
43
+ select: { [K in keyof T]: T[K]["columns"] };
44
+ output: S;
45
+ transformer: (rows: Array<{ [K in keyof T]: z.infer<T[K]["schema"]> }>) => z.infer<S>;
46
+ };
47
+ declare const uuidOutput: z.ZodObject<{
48
+ id: z.ZodUUID;
49
+ }, z.core.$strip>;
50
+ declare const uuidManyOutput: z.ZodObject<{
51
+ ids: z.ZodArray<z.ZodUUID>;
52
+ }, z.core.$strip>;
53
+ declare const scheduleOutput: z.ZodObject<{
54
+ jobId: z.ZodString;
55
+ }, z.core.$strip>;
56
+ declare const scheduleManyOutput: z.ZodObject<{
57
+ jobIds: z.ZodArray<z.ZodString>;
58
+ }, z.core.$strip>;
59
+ declare const deleteOutput: z.ZodObject<{
60
+ id: z.ZodUUID;
61
+ }, z.core.$strip>;
62
+ declare const deleteManyOutput: z.ZodObject<{
63
+ ids: z.ZodArray<z.ZodUUID>;
64
+ }, z.core.$strip>;
65
+ //#endregion
66
+ export { ExtractColumnTypes, ServerResult, ServerResultAsync, createSelectDTO, createSelectUtils, createTableSelectSchema, deleteManyOutput, deleteOutput, getTableColumns, omitSchema, omitTableColumns, omitTableSchema, pickColumns, pickSchema, pickTableColumns, pickTableSchema, scheduleManyOutput, scheduleOutput, toZodFilter, uuidManyOutput, uuidOutput };
67
+ //# sourceMappingURL=base.dto.d.cts.map
@@ -0,0 +1,107 @@
1
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
+ require("../../../_virtual/_rolldown/runtime.cjs");
3
+ let neverthrow = require("neverthrow");
4
+ //#region src/modules/base/base.grants.ts
5
+ function flattenNestedGrants(nestedGrants) {
6
+ return Object.entries(nestedGrants).flatMap(([resource, levels]) => {
7
+ return Object.entries(levels).flatMap(([level, roles]) => {
8
+ return Object.entries(roles).flatMap(([role, actions]) => {
9
+ return Object.entries(actions).map(([action, access]) => {
10
+ return {
11
+ resource,
12
+ level,
13
+ role,
14
+ action,
15
+ access
16
+ };
17
+ });
18
+ });
19
+ });
20
+ });
21
+ }
22
+ function checkOwnership(entityField, contextValue, entities) {
23
+ if (!contextValue) return false;
24
+ if (!entities) return false;
25
+ return Array.isArray(entities) ? entities.every((e) => e[entityField] === contextValue) : entities[entityField] === contextValue;
26
+ }
27
+ const LEVEL_PRIORITY = [
28
+ "user",
29
+ "team",
30
+ "organization"
31
+ ];
32
+ function getRoleForLevel(level, ctx) {
33
+ switch (level) {
34
+ case "user": return ctx.userRole;
35
+ case "team": return ctx.teamRole;
36
+ case "organization": return ctx.organizationRole;
37
+ }
38
+ }
39
+ function getContextValueForLevel(level, ctx) {
40
+ switch (level) {
41
+ case "user": return ctx.userId;
42
+ case "team": return ctx.teamId;
43
+ case "organization": return ctx.organizationId;
44
+ }
45
+ }
46
+ function getOwnershipFieldForLevel(level) {
47
+ switch (level) {
48
+ case "user": return "userId";
49
+ case "team": return "teamId";
50
+ case "organization": return "organizationId";
51
+ }
52
+ }
53
+ function hasAllAccess(grants, roles) {
54
+ for (const level of LEVEL_PRIORITY) for (const grant of grants) {
55
+ if (grant.level !== level) continue;
56
+ if (grant.access !== "all") continue;
57
+ if (grant.role === getRoleForLevel(level, roles)) return true;
58
+ }
59
+ return false;
60
+ }
61
+ function checkOwnAccess(grants, roles, contextValues, entities) {
62
+ for (const level of LEVEL_PRIORITY) for (const grant of grants) {
63
+ if (grant.level !== level) continue;
64
+ if (grant.access !== "own") continue;
65
+ if (grant.role !== getRoleForLevel(level, roles)) continue;
66
+ if (checkOwnership(getOwnershipFieldForLevel(level), getContextValueForLevel(level, contextValues), entities)) return true;
67
+ }
68
+ return false;
69
+ }
70
+ function checkPermissionSync(actor, grants, entities) {
71
+ if (!grants || grants.length === 0) return false;
72
+ const roles = {
73
+ userRole: actor.userRole,
74
+ teamRole: actor.teamRole,
75
+ organizationRole: actor.organizationRole
76
+ };
77
+ const contextValues = {
78
+ userId: actor.userId,
79
+ teamId: actor.teamId,
80
+ organizationId: actor.organizationId
81
+ };
82
+ if (hasAllAccess(grants, roles)) return true;
83
+ return checkOwnAccess(grants, roles, contextValues, entities);
84
+ }
85
+ async function checkPermissionAsync(actor, grants, getEntities) {
86
+ if (!grants || grants.length === 0) return (0, neverthrow.ok)(false);
87
+ const roles = {
88
+ userRole: actor.userRole,
89
+ teamRole: actor.teamRole,
90
+ organizationRole: actor.organizationRole
91
+ };
92
+ const contextValues = {
93
+ userId: actor.userId,
94
+ teamId: actor.teamId,
95
+ organizationId: actor.organizationId
96
+ };
97
+ if (hasAllAccess(grants, roles)) return (0, neverthrow.ok)(true);
98
+ const entities = await getEntities();
99
+ if (entities.isErr()) return (0, neverthrow.err)(entities.error);
100
+ return (0, neverthrow.ok)(checkOwnAccess(grants, roles, contextValues, entities.value));
101
+ }
102
+ //#endregion
103
+ exports.checkPermissionAsync = checkPermissionAsync;
104
+ exports.checkPermissionSync = checkPermissionSync;
105
+ exports.flattenNestedGrants = flattenNestedGrants;
106
+
107
+ //# sourceMappingURL=base.grants.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"base.grants.cjs","names":[],"sources":["../../../../src/modules/base/base.grants.ts"],"sourcesContent":["import { err, ok } from \"neverthrow\";\r\nimport type { ServiceActor } from \"./base.actor\";\r\nimport type { ServerResultAsync } from \"./base.dto\";\r\n\r\ntype Level = \"user\" | \"team\" | \"organization\";\r\ntype Access = \"all\" | \"own\";\r\n\r\nexport type Entity = Partial<{\r\n userId: string | null;\r\n teamId: string | null;\r\n organizationId: string | null;\r\n}>;\r\n\r\nexport type Grant = {\r\n level: Level;\r\n role: string;\r\n action: string;\r\n resource: string;\r\n access: Access;\r\n attributes?: string[];\r\n};\r\n\r\nexport type NestedGrants = Record<\r\n string,\r\n Partial<Record<Level, Record<string, Record<string, Access>>>>\r\n>;\r\n\r\nexport type ResourceGrant = Omit<Grant, \"resource\">;\r\n\r\nexport type ResourceActionGrant = Omit<ResourceGrant, \"action\">;\r\n\r\nexport function flattenNestedGrants(nestedGrants: NestedGrants): Grant[] {\r\n return Object.entries(nestedGrants).flatMap(([resource, levels]) => {\r\n return Object.entries(levels).flatMap(([level, roles]) => {\r\n return Object.entries(roles).flatMap(([role, actions]) => {\r\n return Object.entries(actions).map(([action, access]) => {\r\n return {\r\n resource,\r\n level: level as Level,\r\n role,\r\n action,\r\n access,\r\n };\r\n });\r\n });\r\n });\r\n });\r\n}\r\n\r\nfunction checkOwnership(\r\n entityField: keyof Entity,\r\n contextValue: string | null | undefined,\r\n entities?: Entity | Entity[]\r\n): boolean {\r\n if (!contextValue) return false;\r\n if (!entities) return false;\r\n return Array.isArray(entities)\r\n ? entities.every((e) => e[entityField] === contextValue)\r\n : entities[entityField] === contextValue;\r\n}\r\n\r\ntype GrantLevel = \"user\" | \"team\" | \"organization\";\r\n\r\n// Level priority: user -> team -> organization (bottom-up)\r\nconst LEVEL_PRIORITY: readonly GrantLevel[] = [\"user\", \"team\", \"organization\"];\r\n\r\ninterface RoleContext {\r\n userRole: string | null;\r\n teamRole: string | null;\r\n organizationRole: string | null;\r\n}\r\n\r\ninterface ContextValues {\r\n userId: string;\r\n teamId: string | null;\r\n organizationId: string | null;\r\n}\r\n\r\nfunction getRoleForLevel(level: GrantLevel, ctx: RoleContext): string | null {\r\n switch (level) {\r\n case \"user\":\r\n return ctx.userRole;\r\n case \"team\":\r\n return ctx.teamRole;\r\n case \"organization\":\r\n return ctx.organizationRole;\r\n }\r\n}\r\n\r\nfunction getContextValueForLevel(level: GrantLevel, ctx: ContextValues): string | null {\r\n switch (level) {\r\n case \"user\":\r\n return ctx.userId;\r\n case \"team\":\r\n return ctx.teamId;\r\n case \"organization\":\r\n return ctx.organizationId;\r\n }\r\n}\r\n\r\nfunction getOwnershipFieldForLevel(level: GrantLevel): keyof Entity {\r\n switch (level) {\r\n case \"user\":\r\n return \"userId\";\r\n case \"team\":\r\n return \"teamId\";\r\n case \"organization\":\r\n return \"organizationId\";\r\n }\r\n}\r\n\r\nfunction hasAllAccess(grants: ResourceActionGrant[], roles: RoleContext): boolean {\r\n for (const level of LEVEL_PRIORITY) {\r\n for (const grant of grants) {\r\n if (grant.level !== level) continue;\r\n if (grant.access !== \"all\") continue;\r\n if (grant.role === getRoleForLevel(level, roles)) return true;\r\n }\r\n }\r\n return false;\r\n}\r\n\r\nfunction checkOwnAccess(\r\n grants: ResourceActionGrant[],\r\n roles: RoleContext,\r\n contextValues: ContextValues,\r\n entities: Entity | Entity[] | undefined\r\n): boolean {\r\n for (const level of LEVEL_PRIORITY) {\r\n for (const grant of grants) {\r\n if (grant.level !== level) continue;\r\n if (grant.access !== \"own\") continue;\r\n if (grant.role !== getRoleForLevel(level, roles)) continue;\r\n\r\n const ownershipField = getOwnershipFieldForLevel(level);\r\n const contextValue = getContextValueForLevel(level, contextValues);\r\n\r\n if (checkOwnership(ownershipField, contextValue, entities)) return true;\r\n }\r\n }\r\n return false;\r\n}\r\n\r\nexport function checkPermissionSync<T extends Entity>(\r\n actor: ServiceActor,\r\n grants: ResourceActionGrant[],\r\n entities?: T | T[]\r\n): boolean {\r\n if (!grants || grants.length === 0) return false;\r\n\r\n const roles = {\r\n userRole: actor.userRole,\r\n teamRole: actor.teamRole,\r\n organizationRole: actor.organizationRole,\r\n };\r\n const contextValues = {\r\n userId: actor.userId,\r\n teamId: actor.teamId,\r\n organizationId: actor.organizationId,\r\n };\r\n\r\n // Pass 1: Check for \"all\" access first (no ownership check needed)\r\n if (hasAllAccess(grants, roles)) return true;\r\n\r\n // Pass 2: Check \"own\" access with ownership validation\r\n return checkOwnAccess(grants, roles, contextValues, entities);\r\n}\r\n\r\nexport async function checkPermissionAsync<T extends Entity>(\r\n actor: ServiceActor,\r\n grants: ResourceActionGrant[],\r\n getEntities: () => ServerResultAsync<T | T[] | undefined>\r\n): ServerResultAsync<boolean> {\r\n if (!grants || grants.length === 0) return ok(false);\r\n\r\n const roles = {\r\n userRole: actor.userRole,\r\n teamRole: actor.teamRole,\r\n organizationRole: actor.organizationRole,\r\n };\r\n const contextValues = {\r\n userId: actor.userId,\r\n teamId: actor.teamId,\r\n organizationId: actor.organizationId,\r\n };\r\n\r\n // Pass 1: Check for \"all\" access first (no entity fetch needed)\r\n if (hasAllAccess(grants, roles)) return ok(true);\r\n\r\n // Pass 2: Only fetch entities if we need to check ownership\r\n const entities = await getEntities();\r\n if (entities.isErr()) return err(entities.error);\r\n return ok(checkOwnAccess(grants, roles, contextValues, entities.value));\r\n}\r\n"],"mappings":";;;;AA+BA,SAAgB,oBAAoB,cAAqC;AACvE,QAAO,OAAO,QAAQ,aAAa,CAAC,SAAS,CAAC,UAAU,YAAY;AAClE,SAAO,OAAO,QAAQ,OAAO,CAAC,SAAS,CAAC,OAAO,WAAW;AACxD,UAAO,OAAO,QAAQ,MAAM,CAAC,SAAS,CAAC,MAAM,aAAa;AACxD,WAAO,OAAO,QAAQ,QAAQ,CAAC,KAAK,CAAC,QAAQ,YAAY;AACvD,YAAO;MACL;MACO;MACP;MACA;MACA;MACD;MACD;KACF;IACF;GACF;;AAGJ,SAAS,eACP,aACA,cACA,UACS;AACT,KAAI,CAAC,aAAc,QAAO;AAC1B,KAAI,CAAC,SAAU,QAAO;AACtB,QAAO,MAAM,QAAQ,SAAS,GAC1B,SAAS,OAAO,MAAM,EAAE,iBAAiB,aAAa,GACtD,SAAS,iBAAiB;;AAMhC,MAAM,iBAAwC;CAAC;CAAQ;CAAQ;CAAe;AAc9E,SAAS,gBAAgB,OAAmB,KAAiC;AAC3E,SAAQ,OAAR;EACE,KAAK,OACH,QAAO,IAAI;EACb,KAAK,OACH,QAAO,IAAI;EACb,KAAK,eACH,QAAO,IAAI;;;AAIjB,SAAS,wBAAwB,OAAmB,KAAmC;AACrF,SAAQ,OAAR;EACE,KAAK,OACH,QAAO,IAAI;EACb,KAAK,OACH,QAAO,IAAI;EACb,KAAK,eACH,QAAO,IAAI;;;AAIjB,SAAS,0BAA0B,OAAiC;AAClE,SAAQ,OAAR;EACE,KAAK,OACH,QAAO;EACT,KAAK,OACH,QAAO;EACT,KAAK,eACH,QAAO;;;AAIb,SAAS,aAAa,QAA+B,OAA6B;AAChF,MAAK,MAAM,SAAS,eAClB,MAAK,MAAM,SAAS,QAAQ;AAC1B,MAAI,MAAM,UAAU,MAAO;AAC3B,MAAI,MAAM,WAAW,MAAO;AAC5B,MAAI,MAAM,SAAS,gBAAgB,OAAO,MAAM,CAAE,QAAO;;AAG7D,QAAO;;AAGT,SAAS,eACP,QACA,OACA,eACA,UACS;AACT,MAAK,MAAM,SAAS,eAClB,MAAK,MAAM,SAAS,QAAQ;AAC1B,MAAI,MAAM,UAAU,MAAO;AAC3B,MAAI,MAAM,WAAW,MAAO;AAC5B,MAAI,MAAM,SAAS,gBAAgB,OAAO,MAAM,CAAE;AAKlD,MAAI,eAHmB,0BAA0B,MAAM,EAClC,wBAAwB,OAAO,cAAc,EAEjB,SAAS,CAAE,QAAO;;AAGvE,QAAO;;AAGT,SAAgB,oBACd,OACA,QACA,UACS;AACT,KAAI,CAAC,UAAU,OAAO,WAAW,EAAG,QAAO;CAE3C,MAAM,QAAQ;EACZ,UAAU,MAAM;EAChB,UAAU,MAAM;EAChB,kBAAkB,MAAM;EACzB;CACD,MAAM,gBAAgB;EACpB,QAAQ,MAAM;EACd,QAAQ,MAAM;EACd,gBAAgB,MAAM;EACvB;AAGD,KAAI,aAAa,QAAQ,MAAM,CAAE,QAAO;AAGxC,QAAO,eAAe,QAAQ,OAAO,eAAe,SAAS;;AAG/D,eAAsB,qBACpB,OACA,QACA,aAC4B;AAC5B,KAAI,CAAC,UAAU,OAAO,WAAW,EAAG,SAAA,GAAA,WAAA,IAAU,MAAM;CAEpD,MAAM,QAAQ;EACZ,UAAU,MAAM;EAChB,UAAU,MAAM;EAChB,kBAAkB,MAAM;EACzB;CACD,MAAM,gBAAgB;EACpB,QAAQ,MAAM;EACd,QAAQ,MAAM;EACd,gBAAgB,MAAM;EACvB;AAGD,KAAI,aAAa,QAAQ,MAAM,CAAE,SAAA,GAAA,WAAA,IAAU,KAAK;CAGhD,MAAM,WAAW,MAAM,aAAa;AACpC,KAAI,SAAS,OAAO,CAAE,SAAA,GAAA,WAAA,KAAW,SAAS,MAAM;AAChD,SAAA,GAAA,WAAA,IAAU,eAAe,QAAQ,OAAO,eAAe,SAAS,MAAM,CAAC"}
@@ -0,0 +1,28 @@
1
+ import { ServerResultAsync } from "./base.dto.cjs";
2
+ import { ServiceActor } from "./base.actor.cjs";
3
+
4
+ //#region src/modules/base/base.grants.d.ts
5
+ type Level = "user" | "team" | "organization";
6
+ type Access = "all" | "own";
7
+ type Entity = Partial<{
8
+ userId: string | null;
9
+ teamId: string | null;
10
+ organizationId: string | null;
11
+ }>;
12
+ type Grant = {
13
+ level: Level;
14
+ role: string;
15
+ action: string;
16
+ resource: string;
17
+ access: Access;
18
+ attributes?: string[];
19
+ };
20
+ type NestedGrants = Record<string, Partial<Record<Level, Record<string, Record<string, Access>>>>>;
21
+ type ResourceGrant = Omit<Grant, "resource">;
22
+ type ResourceActionGrant = Omit<ResourceGrant, "action">;
23
+ declare function flattenNestedGrants(nestedGrants: NestedGrants): Grant[];
24
+ declare function checkPermissionSync<T extends Entity>(actor: ServiceActor, grants: ResourceActionGrant[], entities?: T | T[]): boolean;
25
+ declare function checkPermissionAsync<T extends Entity>(actor: ServiceActor, grants: ResourceActionGrant[], getEntities: () => ServerResultAsync<T | T[] | undefined>): ServerResultAsync<boolean>;
26
+ //#endregion
27
+ export { Entity, Grant, NestedGrants, ResourceActionGrant, ResourceGrant, checkPermissionAsync, checkPermissionSync, flattenNestedGrants };
28
+ //# sourceMappingURL=base.grants.d.cts.map