@pcontext/api 0.0.1

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 (342) hide show
  1. package/README.md +151 -0
  2. package/dist/app.d.mts +44779 -0
  3. package/dist/app.d.mts.map +1 -0
  4. package/dist/app.mjs +37 -0
  5. package/dist/app.mjs.map +1 -0
  6. package/dist/client.d.mts +22428 -0
  7. package/dist/client.d.mts.map +1 -0
  8. package/dist/client.mjs +15 -0
  9. package/dist/client.mjs.map +1 -0
  10. package/dist/dev.d.mts +11 -0
  11. package/dist/dev.d.mts.map +1 -0
  12. package/dist/dev.mjs +16 -0
  13. package/dist/dev.mjs.map +1 -0
  14. package/dist/index.d.mts +3 -0
  15. package/dist/index.mjs +10 -0
  16. package/dist/index.mjs.map +1 -0
  17. package/dist/modules/doc/chat.route.d.mts +18 -0
  18. package/dist/modules/doc/chat.route.d.mts.map +1 -0
  19. package/dist/modules/doc/chat.route.mjs +20 -0
  20. package/dist/modules/doc/chat.route.mjs.map +1 -0
  21. package/dist/modules/doc/chat.service.d.mts +10 -0
  22. package/dist/modules/doc/chat.service.d.mts.map +1 -0
  23. package/dist/modules/doc/chat.service.mjs +29 -0
  24. package/dist/modules/doc/chat.service.mjs.map +1 -0
  25. package/dist/modules/doc/doc.dto.d.mts +67 -0
  26. package/dist/modules/doc/doc.dto.d.mts.map +1 -0
  27. package/dist/modules/doc/doc.dto.mjs +43 -0
  28. package/dist/modules/doc/doc.dto.mjs.map +1 -0
  29. package/dist/modules/doc/doc.entity.d.mts +19 -0
  30. package/dist/modules/doc/doc.entity.d.mts.map +1 -0
  31. package/dist/modules/doc/doc.entity.mjs +1 -0
  32. package/dist/modules/doc/doc.repo.interface.d.mts +28 -0
  33. package/dist/modules/doc/doc.repo.interface.d.mts.map +1 -0
  34. package/dist/modules/doc/doc.repo.interface.mjs +1 -0
  35. package/dist/modules/doc/doc.route.d.mts +14193 -0
  36. package/dist/modules/doc/doc.route.d.mts.map +1 -0
  37. package/dist/modules/doc/doc.route.mjs +100 -0
  38. package/dist/modules/doc/doc.route.mjs.map +1 -0
  39. package/dist/modules/doc/doc.service.d.mts +38 -0
  40. package/dist/modules/doc/doc.service.d.mts.map +1 -0
  41. package/dist/modules/doc/doc.service.mjs +134 -0
  42. package/dist/modules/doc/doc.service.mjs.map +1 -0
  43. package/dist/modules/doc/doc.vo.d.mts +17 -0
  44. package/dist/modules/doc/doc.vo.d.mts.map +1 -0
  45. package/dist/modules/doc/doc.vo.mjs +1 -0
  46. package/dist/modules/doc/infrastructure/agent/engine/chat.d.mts +21 -0
  47. package/dist/modules/doc/infrastructure/agent/engine/chat.d.mts.map +1 -0
  48. package/dist/modules/doc/infrastructure/agent/engine/chat.mjs +36 -0
  49. package/dist/modules/doc/infrastructure/agent/engine/chat.mjs.map +1 -0
  50. package/dist/modules/doc/infrastructure/agent/engine/generate.d.mts +28 -0
  51. package/dist/modules/doc/infrastructure/agent/engine/generate.d.mts.map +1 -0
  52. package/dist/modules/doc/infrastructure/agent/engine/generate.mjs +135 -0
  53. package/dist/modules/doc/infrastructure/agent/engine/generate.mjs.map +1 -0
  54. package/dist/modules/doc/infrastructure/agent/engine/query-filter.d.mts +7 -0
  55. package/dist/modules/doc/infrastructure/agent/engine/query-filter.d.mts.map +1 -0
  56. package/dist/modules/doc/infrastructure/agent/engine/query-filter.mjs +12 -0
  57. package/dist/modules/doc/infrastructure/agent/engine/query-filter.mjs.map +1 -0
  58. package/dist/modules/doc/infrastructure/agent/loaders/git-repository-reader.d.mts +54 -0
  59. package/dist/modules/doc/infrastructure/agent/loaders/git-repository-reader.d.mts.map +1 -0
  60. package/dist/modules/doc/infrastructure/agent/loaders/git-repository-reader.mjs +142 -0
  61. package/dist/modules/doc/infrastructure/agent/loaders/git-repository-reader.mjs.map +1 -0
  62. package/dist/modules/doc/infrastructure/agent/loaders/index.d.mts +3 -0
  63. package/dist/modules/doc/infrastructure/agent/loaders/index.mjs +4 -0
  64. package/dist/modules/doc/infrastructure/agent/loaders/website-crawl-reader.d.mts +42 -0
  65. package/dist/modules/doc/infrastructure/agent/loaders/website-crawl-reader.d.mts.map +1 -0
  66. package/dist/modules/doc/infrastructure/agent/loaders/website-crawl-reader.mjs +104 -0
  67. package/dist/modules/doc/infrastructure/agent/loaders/website-crawl-reader.mjs.map +1 -0
  68. package/dist/modules/doc/infrastructure/agent/settings.d.mts +5 -0
  69. package/dist/modules/doc/infrastructure/agent/settings.d.mts.map +1 -0
  70. package/dist/modules/doc/infrastructure/agent/settings.mjs +72 -0
  71. package/dist/modules/doc/infrastructure/agent/settings.mjs.map +1 -0
  72. package/dist/modules/doc/infrastructure/agent/storage/index.d.mts +7 -0
  73. package/dist/modules/doc/infrastructure/agent/storage/index.d.mts.map +1 -0
  74. package/dist/modules/doc/infrastructure/agent/storage/index.mjs +12 -0
  75. package/dist/modules/doc/infrastructure/agent/storage/index.mjs.map +1 -0
  76. package/dist/modules/doc/infrastructure/agent/storage/vector-store.d.mts +14 -0
  77. package/dist/modules/doc/infrastructure/agent/storage/vector-store.d.mts.map +1 -0
  78. package/dist/modules/doc/infrastructure/agent/storage/vector-store.mjs +35 -0
  79. package/dist/modules/doc/infrastructure/agent/storage/vector-store.mjs.map +1 -0
  80. package/dist/modules/doc/infrastructure/doc.po.d.mts +570 -0
  81. package/dist/modules/doc/infrastructure/doc.po.d.mts.map +1 -0
  82. package/dist/modules/doc/infrastructure/doc.po.mjs +54 -0
  83. package/dist/modules/doc/infrastructure/doc.po.mjs.map +1 -0
  84. package/dist/modules/doc/infrastructure/doc.repo.pg.d.mts +32 -0
  85. package/dist/modules/doc/infrastructure/doc.repo.pg.d.mts.map +1 -0
  86. package/dist/modules/doc/infrastructure/doc.repo.pg.mjs +157 -0
  87. package/dist/modules/doc/infrastructure/doc.repo.pg.mjs.map +1 -0
  88. package/dist/modules/doc/infrastructure/doc.repo.sqlite.d.mts +32 -0
  89. package/dist/modules/doc/infrastructure/doc.repo.sqlite.d.mts.map +1 -0
  90. package/dist/modules/doc/infrastructure/doc.repo.sqlite.mjs +153 -0
  91. package/dist/modules/doc/infrastructure/doc.repo.sqlite.mjs.map +1 -0
  92. package/dist/modules/doc/mcp.route.d.mts +18 -0
  93. package/dist/modules/doc/mcp.route.d.mts.map +1 -0
  94. package/dist/modules/doc/mcp.route.mjs +39 -0
  95. package/dist/modules/doc/mcp.route.mjs.map +1 -0
  96. package/dist/modules/doc/mcp.service.d.mts +22 -0
  97. package/dist/modules/doc/mcp.service.d.mts.map +1 -0
  98. package/dist/modules/doc/mcp.service.mjs +119 -0
  99. package/dist/modules/doc/mcp.service.mjs.map +1 -0
  100. package/dist/modules/rank/rank.dto.d.mts +10 -0
  101. package/dist/modules/rank/rank.dto.d.mts.map +1 -0
  102. package/dist/modules/rank/rank.dto.mjs +8 -0
  103. package/dist/modules/rank/rank.dto.mjs.map +1 -0
  104. package/dist/modules/rank/rank.route.d.mts +2033 -0
  105. package/dist/modules/rank/rank.route.d.mts.map +1 -0
  106. package/dist/modules/rank/rank.route.mjs +20 -0
  107. package/dist/modules/rank/rank.route.mjs.map +1 -0
  108. package/dist/modules/rank/rank.service.d.mts +32 -0
  109. package/dist/modules/rank/rank.service.d.mts.map +1 -0
  110. package/dist/modules/rank/rank.service.mjs +3 -0
  111. package/dist/modules/rank/rank.vo.d.mts +9 -0
  112. package/dist/modules/rank/rank.vo.d.mts.map +1 -0
  113. package/dist/modules/rank/rank.vo.mjs +1 -0
  114. package/dist/modules/task/infrastructure/mq/task-context.d.mts +29 -0
  115. package/dist/modules/task/infrastructure/mq/task-context.d.mts.map +1 -0
  116. package/dist/modules/task/infrastructure/mq/task-context.mjs +70 -0
  117. package/dist/modules/task/infrastructure/mq/task-context.mjs.map +1 -0
  118. package/dist/modules/task/infrastructure/mq/task-queue.d.mts +10 -0
  119. package/dist/modules/task/infrastructure/mq/task-queue.d.mts.map +1 -0
  120. package/dist/modules/task/infrastructure/mq/task-queue.mjs +12 -0
  121. package/dist/modules/task/infrastructure/mq/task-queue.mjs.map +1 -0
  122. package/dist/modules/task/infrastructure/mq/task-worker.d.mts +13 -0
  123. package/dist/modules/task/infrastructure/mq/task-worker.d.mts.map +1 -0
  124. package/dist/modules/task/infrastructure/mq/task-worker.mjs +35 -0
  125. package/dist/modules/task/infrastructure/mq/task-worker.mjs.map +1 -0
  126. package/dist/modules/task/infrastructure/task.po.d.mts +1147 -0
  127. package/dist/modules/task/infrastructure/task.po.d.mts.map +1 -0
  128. package/dist/modules/task/infrastructure/task.po.mjs +55 -0
  129. package/dist/modules/task/infrastructure/task.po.mjs.map +1 -0
  130. package/dist/modules/task/infrastructure/task.repo.pg.d.mts +21 -0
  131. package/dist/modules/task/infrastructure/task.repo.pg.d.mts.map +1 -0
  132. package/dist/modules/task/infrastructure/task.repo.pg.mjs +86 -0
  133. package/dist/modules/task/infrastructure/task.repo.pg.mjs.map +1 -0
  134. package/dist/modules/task/infrastructure/task.repo.sqlite.d.mts +21 -0
  135. package/dist/modules/task/infrastructure/task.repo.sqlite.d.mts.map +1 -0
  136. package/dist/modules/task/infrastructure/task.repo.sqlite.mjs +89 -0
  137. package/dist/modules/task/infrastructure/task.repo.sqlite.mjs.map +1 -0
  138. package/dist/modules/task/task.dto.d.mts +26 -0
  139. package/dist/modules/task/task.dto.d.mts.map +1 -0
  140. package/dist/modules/task/task.dto.mjs +25 -0
  141. package/dist/modules/task/task.dto.mjs.map +1 -0
  142. package/dist/modules/task/task.entity.d.mts +43 -0
  143. package/dist/modules/task/task.entity.d.mts.map +1 -0
  144. package/dist/modules/task/task.entity.mjs +1 -0
  145. package/dist/modules/task/task.repo.interface.d.mts +17 -0
  146. package/dist/modules/task/task.repo.interface.d.mts.map +1 -0
  147. package/dist/modules/task/task.repo.interface.mjs +1 -0
  148. package/dist/modules/task/task.route.d.mts +4087 -0
  149. package/dist/modules/task/task.route.d.mts.map +1 -0
  150. package/dist/modules/task/task.route.mjs +63 -0
  151. package/dist/modules/task/task.route.mjs.map +1 -0
  152. package/dist/modules/task/task.service.d.mts +28 -0
  153. package/dist/modules/task/task.service.d.mts.map +1 -0
  154. package/dist/modules/task/task.service.mjs +202 -0
  155. package/dist/modules/task/task.service.mjs.map +1 -0
  156. package/dist/modules/task/task.vo.d.mts +18 -0
  157. package/dist/modules/task/task.vo.d.mts.map +1 -0
  158. package/dist/modules/task/task.vo.mjs +1 -0
  159. package/dist/modules/user/application/user.service.d.mts +24 -0
  160. package/dist/modules/user/application/user.service.d.mts.map +1 -0
  161. package/dist/modules/user/application/user.service.mjs +153 -0
  162. package/dist/modules/user/application/user.service.mjs.map +1 -0
  163. package/dist/modules/user/domain/user.entity.d.mts +24 -0
  164. package/dist/modules/user/domain/user.entity.d.mts.map +1 -0
  165. package/dist/modules/user/domain/user.entity.mjs +35 -0
  166. package/dist/modules/user/domain/user.entity.mjs.map +1 -0
  167. package/dist/modules/user/domain/user.repo.interface.d.mts +27 -0
  168. package/dist/modules/user/domain/user.repo.interface.d.mts.map +1 -0
  169. package/dist/modules/user/domain/user.repo.interface.mjs +1 -0
  170. package/dist/modules/user/infrastructure/casbin/adapter.d.mts +7 -0
  171. package/dist/modules/user/infrastructure/casbin/adapter.d.mts.map +1 -0
  172. package/dist/modules/user/infrastructure/casbin/adapter.mjs +13 -0
  173. package/dist/modules/user/infrastructure/casbin/adapter.mjs.map +1 -0
  174. package/dist/modules/user/infrastructure/casbin/adapter.pg.d.mts +19 -0
  175. package/dist/modules/user/infrastructure/casbin/adapter.pg.d.mts.map +1 -0
  176. package/dist/modules/user/infrastructure/casbin/adapter.pg.mjs +129 -0
  177. package/dist/modules/user/infrastructure/casbin/adapter.pg.mjs.map +1 -0
  178. package/dist/modules/user/infrastructure/casbin/adapter.sqlite.d.mts +19 -0
  179. package/dist/modules/user/infrastructure/casbin/adapter.sqlite.d.mts.map +1 -0
  180. package/dist/modules/user/infrastructure/casbin/adapter.sqlite.mjs +129 -0
  181. package/dist/modules/user/infrastructure/casbin/adapter.sqlite.mjs.map +1 -0
  182. package/dist/modules/user/infrastructure/casbin/enforcer.d.mts +9 -0
  183. package/dist/modules/user/infrastructure/casbin/enforcer.d.mts.map +1 -0
  184. package/dist/modules/user/infrastructure/casbin/enforcer.mjs +150 -0
  185. package/dist/modules/user/infrastructure/casbin/enforcer.mjs.map +1 -0
  186. package/dist/modules/user/infrastructure/casbin-rule.po.d.mts +643 -0
  187. package/dist/modules/user/infrastructure/casbin-rule.po.d.mts.map +1 -0
  188. package/dist/modules/user/infrastructure/casbin-rule.po.mjs +30 -0
  189. package/dist/modules/user/infrastructure/casbin-rule.po.mjs.map +1 -0
  190. package/dist/modules/user/infrastructure/user.po.d.mts +392 -0
  191. package/dist/modules/user/infrastructure/user.po.d.mts.map +1 -0
  192. package/dist/modules/user/infrastructure/user.po.mjs +34 -0
  193. package/dist/modules/user/infrastructure/user.po.mjs.map +1 -0
  194. package/dist/modules/user/infrastructure/user.repo.pg.d.mts +24 -0
  195. package/dist/modules/user/infrastructure/user.repo.pg.d.mts.map +1 -0
  196. package/dist/modules/user/infrastructure/user.repo.pg.mjs +90 -0
  197. package/dist/modules/user/infrastructure/user.repo.pg.mjs.map +1 -0
  198. package/dist/modules/user/infrastructure/user.repo.sqlite.d.mts +24 -0
  199. package/dist/modules/user/infrastructure/user.repo.sqlite.d.mts.map +1 -0
  200. package/dist/modules/user/infrastructure/user.repo.sqlite.mjs +88 -0
  201. package/dist/modules/user/infrastructure/user.repo.sqlite.mjs.map +1 -0
  202. package/dist/modules/user/interfaces/admin.route.d.mts +8270 -0
  203. package/dist/modules/user/interfaces/admin.route.d.mts.map +1 -0
  204. package/dist/modules/user/interfaces/admin.route.mjs +74 -0
  205. package/dist/modules/user/interfaces/admin.route.mjs.map +1 -0
  206. package/dist/modules/user/interfaces/role.route.d.mts +102 -0
  207. package/dist/modules/user/interfaces/role.route.d.mts.map +1 -0
  208. package/dist/modules/user/interfaces/role.route.mjs +60 -0
  209. package/dist/modules/user/interfaces/role.route.mjs.map +1 -0
  210. package/dist/modules/user/interfaces/user.dto.d.mts +106 -0
  211. package/dist/modules/user/interfaces/user.dto.d.mts.map +1 -0
  212. package/dist/modules/user/interfaces/user.dto.mjs +32 -0
  213. package/dist/modules/user/interfaces/user.dto.mjs.map +1 -0
  214. package/dist/modules/user/interfaces/user.route.d.mts +2093 -0
  215. package/dist/modules/user/interfaces/user.route.d.mts.map +1 -0
  216. package/dist/modules/user/interfaces/user.route.mjs +69 -0
  217. package/dist/modules/user/interfaces/user.route.mjs.map +1 -0
  218. package/dist/modules/user/interfaces/user.vo.d.mts +28 -0
  219. package/dist/modules/user/interfaces/user.vo.d.mts.map +1 -0
  220. package/dist/modules/user/interfaces/user.vo.mjs +18 -0
  221. package/dist/modules/user/interfaces/user.vo.mjs.map +1 -0
  222. package/dist/rank.service-D2h-2iJA.mjs +109 -0
  223. package/dist/rank.service-D2h-2iJA.mjs.map +1 -0
  224. package/dist/settings.d.mts +12 -0
  225. package/dist/settings.d.mts.map +1 -0
  226. package/dist/settings.mjs +27 -0
  227. package/dist/settings.mjs.map +1 -0
  228. package/dist/shared/create-app.d.mts +13 -0
  229. package/dist/shared/create-app.d.mts.map +1 -0
  230. package/dist/shared/create-app.mjs +45 -0
  231. package/dist/shared/create-app.mjs.map +1 -0
  232. package/dist/shared/db/bootstrap.d.mts +5 -0
  233. package/dist/shared/db/bootstrap.d.mts.map +1 -0
  234. package/dist/shared/db/bootstrap.mjs +51 -0
  235. package/dist/shared/db/bootstrap.mjs.map +1 -0
  236. package/dist/shared/db/connection.d.mts +1567 -0
  237. package/dist/shared/db/connection.d.mts.map +1 -0
  238. package/dist/shared/db/connection.mjs +59 -0
  239. package/dist/shared/db/connection.mjs.map +1 -0
  240. package/dist/shared/db/migrations/pg/0000_init.sql +74 -0
  241. package/dist/shared/db/migrations/pg/0001_snippets & tokens.sql +6 -0
  242. package/dist/shared/db/migrations/pg/0002_change_task_id_to_uuid_v7.sql +3 -0
  243. package/dist/shared/db/migrations/pg/meta/0000_snapshot.json +498 -0
  244. package/dist/shared/db/migrations/pg/meta/0001_snapshot.json +513 -0
  245. package/dist/shared/db/migrations/pg/meta/0002_snapshot.json +514 -0
  246. package/dist/shared/db/migrations/pg/meta/_journal.json +27 -0
  247. package/dist/shared/db/migrations/sqlite/0000_init.sql +72 -0
  248. package/dist/shared/db/migrations/sqlite/0001_snippets & tokens.sql +2 -0
  249. package/dist/shared/db/migrations/sqlite/0002_change_task_id_to_uuid_v7.sql +35 -0
  250. package/dist/shared/db/migrations/sqlite/meta/0000_snapshot.json +493 -0
  251. package/dist/shared/db/migrations/sqlite/meta/0001_snapshot.json +509 -0
  252. package/dist/shared/db/migrations/sqlite/meta/0002_snapshot.json +509 -0
  253. package/dist/shared/db/migrations/sqlite/meta/_journal.json +27 -0
  254. package/dist/shared/db/seed.d.mts +5 -0
  255. package/dist/shared/db/seed.d.mts.map +1 -0
  256. package/dist/shared/db/seed.mjs +42 -0
  257. package/dist/shared/db/seed.mjs.map +1 -0
  258. package/dist/shared/deps.d.mts +28 -0
  259. package/dist/shared/deps.d.mts.map +1 -0
  260. package/dist/shared/deps.mjs +69 -0
  261. package/dist/shared/deps.mjs.map +1 -0
  262. package/dist/shared/dto/index.d.mts +11 -0
  263. package/dist/shared/dto/index.d.mts.map +1 -0
  264. package/dist/shared/dto/index.mjs +11 -0
  265. package/dist/shared/dto/index.mjs.map +1 -0
  266. package/dist/shared/logger.d.mts +14 -0
  267. package/dist/shared/logger.d.mts.map +1 -0
  268. package/dist/shared/logger.mjs +37 -0
  269. package/dist/shared/logger.mjs.map +1 -0
  270. package/dist/shared/mcp/createTool.d.mts +15 -0
  271. package/dist/shared/mcp/createTool.d.mts.map +1 -0
  272. package/dist/shared/mcp/createTool.mjs +8 -0
  273. package/dist/shared/mcp/createTool.mjs.map +1 -0
  274. package/dist/shared/middleware/authorization.d.mts +15 -0
  275. package/dist/shared/middleware/authorization.d.mts.map +1 -0
  276. package/dist/shared/middleware/authorization.mjs +46 -0
  277. package/dist/shared/middleware/authorization.mjs.map +1 -0
  278. package/dist/shared/middleware/http-logger.d.mts +7 -0
  279. package/dist/shared/middleware/http-logger.d.mts.map +1 -0
  280. package/dist/shared/middleware/http-logger.mjs +40 -0
  281. package/dist/shared/middleware/http-logger.mjs.map +1 -0
  282. package/dist/shared/middleware/jwt.d.mts +7 -0
  283. package/dist/shared/middleware/jwt.d.mts.map +1 -0
  284. package/dist/shared/middleware/jwt.mjs +34 -0
  285. package/dist/shared/middleware/jwt.mjs.map +1 -0
  286. package/dist/shared/middleware/limiter.d.mts +7 -0
  287. package/dist/shared/middleware/limiter.d.mts.map +1 -0
  288. package/dist/shared/middleware/limiter.mjs +10 -0
  289. package/dist/shared/middleware/limiter.mjs.map +1 -0
  290. package/dist/shared/middleware/services.d.mts +8 -0
  291. package/dist/shared/middleware/services.d.mts.map +1 -0
  292. package/dist/shared/middleware/services.mjs +19 -0
  293. package/dist/shared/middleware/services.mjs.map +1 -0
  294. package/dist/shared/redis/decorator.d.mts +113 -0
  295. package/dist/shared/redis/decorator.d.mts.map +1 -0
  296. package/dist/shared/redis/decorator.mjs +203 -0
  297. package/dist/shared/redis/decorator.mjs.map +1 -0
  298. package/dist/shared/redis/factory.d.mts +18 -0
  299. package/dist/shared/redis/factory.d.mts.map +1 -0
  300. package/dist/shared/redis/factory.mjs +41 -0
  301. package/dist/shared/redis/factory.mjs.map +1 -0
  302. package/dist/shared/redis/index.d.mts +12 -0
  303. package/dist/shared/redis/index.d.mts.map +1 -0
  304. package/dist/shared/redis/index.mjs +14 -0
  305. package/dist/shared/redis/index.mjs.map +1 -0
  306. package/dist/shared/types.d.mts +36 -0
  307. package/dist/shared/types.d.mts.map +1 -0
  308. package/dist/shared/types.mjs +1 -0
  309. package/dist/shared/utils/date.d.mts +1 -0
  310. package/dist/shared/utils/date.mjs +1 -0
  311. package/dist/shared/utils/error-handler.d.mts +7 -0
  312. package/dist/shared/utils/error-handler.d.mts.map +1 -0
  313. package/dist/shared/utils/error-handler.mjs +22 -0
  314. package/dist/shared/utils/error-handler.mjs.map +1 -0
  315. package/dist/shared/utils/format.d.mts +8 -0
  316. package/dist/shared/utils/format.d.mts.map +1 -0
  317. package/dist/shared/utils/format.mjs +24 -0
  318. package/dist/shared/utils/format.mjs.map +1 -0
  319. package/dist/shared/utils/pagination.d.mts +9 -0
  320. package/dist/shared/utils/pagination.d.mts.map +1 -0
  321. package/dist/shared/utils/pagination.mjs +12 -0
  322. package/dist/shared/utils/pagination.mjs.map +1 -0
  323. package/dist/shared/utils/response-template.d.mts +69 -0
  324. package/dist/shared/utils/response-template.d.mts.map +1 -0
  325. package/dist/shared/utils/response-template.mjs +96 -0
  326. package/dist/shared/utils/response-template.mjs.map +1 -0
  327. package/dist/shared/utils/url.d.mts +18 -0
  328. package/dist/shared/utils/url.d.mts.map +1 -0
  329. package/dist/shared/utils/url.mjs +39 -0
  330. package/dist/shared/utils/url.mjs.map +1 -0
  331. package/dist/shared/utils/user.d.mts +8 -0
  332. package/dist/shared/utils/user.d.mts.map +1 -0
  333. package/dist/shared/utils/user.mjs +11 -0
  334. package/dist/shared/utils/user.mjs.map +1 -0
  335. package/dist/shared/utils/validator.d.mts +5984 -0
  336. package/dist/shared/utils/validator.d.mts.map +1 -0
  337. package/dist/shared/utils/validator.mjs +34 -0
  338. package/dist/shared/utils/validator.mjs.map +1 -0
  339. package/dist/shared/vo/index.d.mts +11 -0
  340. package/dist/shared/vo/index.d.mts.map +1 -0
  341. package/dist/shared/vo/index.mjs +1 -0
  342. package/package.json +86 -0
@@ -0,0 +1,27 @@
1
+ import { PaginationVO } from "../../../shared/vo/index.mjs";
2
+ import { CreateUserDTO, UpdateSelfDTO, UpdateUserDTO } from "../interfaces/user.dto.mjs";
3
+ import { UserEntity } from "./user.entity.mjs";
4
+
5
+ //#region src/modules/user/domain/user.repo.interface.d.ts
6
+ interface AuthUserRecord {
7
+ id: number;
8
+ username: string;
9
+ password: string;
10
+ role: UserEntity['role'];
11
+ status: UserEntity['status'];
12
+ }
13
+ interface IUserRepository {
14
+ findById: (id: number) => Promise<UserEntity | null>;
15
+ findByUsername: (username: string) => Promise<UserEntity | null>;
16
+ findByPhone: (phone: string) => Promise<UserEntity | null>;
17
+ findByEmail: (email: string) => Promise<UserEntity | null>;
18
+ list: (page: number, pageSize: number, filters?: {
19
+ name?: string;
20
+ }) => Promise<PaginationVO<UserEntity>>;
21
+ create: (input: CreateUserDTO) => Promise<UserEntity>;
22
+ updateById: (id: number, input: UpdateUserDTO) => Promise<UserEntity | null>;
23
+ updateSelf: (id: number, input: UpdateSelfDTO) => Promise<UserEntity | null>;
24
+ }
25
+ //#endregion
26
+ export { AuthUserRecord, IUserRepository };
27
+ //# sourceMappingURL=user.repo.interface.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"user.repo.interface.d.mts","names":[],"sources":["../../../../src/modules/user/domain/user.repo.interface.ts"],"mappings":";;;;;UAIiB,cAAA;EACf,EAAA;EACA,QAAA;EACA,QAAA;EACA,IAAA,EAAM,UAAA;EACN,MAAA,EAAQ,UAAA;AAAA;AAAA,UAGO,eAAA;EACf,QAAA,GAAW,EAAA,aAAe,OAAA,CAAQ,UAAA;EAClC,cAAA,GAAiB,QAAA,aAAqB,OAAA,CAAQ,UAAA;EAC9C,WAAA,GAAc,KAAA,aAAkB,OAAA,CAAQ,UAAA;EACxC,WAAA,GAAc,KAAA,aAAkB,OAAA,CAAQ,UAAA;EACxC,IAAA,GAAO,IAAA,UAAc,QAAA,UAAkB,OAAA;IAAY,IAAA;EAAA,MAAoB,OAAA,CAAQ,YAAA,CAAa,UAAA;EAC5F,MAAA,GAAS,KAAA,EAAO,aAAA,KAAkB,OAAA,CAAQ,UAAA;EAC1C,UAAA,GAAa,EAAA,UAAY,KAAA,EAAO,aAAA,KAAkB,OAAA,CAAQ,UAAA;EAC1D,UAAA,GAAa,EAAA,UAAY,KAAA,EAAO,aAAA,KAAkB,OAAA,CAAQ,UAAA;AAAA"}
@@ -0,0 +1 @@
1
+ export { };
@@ -0,0 +1,7 @@
1
+ import { UpdatableAdapter } from "casbin";
2
+
3
+ //#region src/modules/user/infrastructure/casbin/adapter.d.ts
4
+ declare function getCasbinAdapter(): UpdatableAdapter;
5
+ //#endregion
6
+ export { getCasbinAdapter };
7
+ //# sourceMappingURL=adapter.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"adapter.d.mts","names":[],"sources":["../../../../../src/modules/user/infrastructure/casbin/adapter.ts"],"mappings":";;;iBAKgB,gBAAA,CAAA,GAAoB,gBAAA"}
@@ -0,0 +1,13 @@
1
+ import { getDbProvider, getPgDb, getSqliteDb } from "../../../../shared/db/connection.mjs";
2
+ import { PgCasbinAdapter } from "./adapter.pg.mjs";
3
+ import { SqliteCasbinAdapter } from "./adapter.sqlite.mjs";
4
+
5
+ //#region src/modules/user/infrastructure/casbin/adapter.ts
6
+ function getCasbinAdapter() {
7
+ if (getDbProvider() === "postgresql") return new PgCasbinAdapter(getPgDb());
8
+ return new SqliteCasbinAdapter(getSqliteDb());
9
+ }
10
+
11
+ //#endregion
12
+ export { getCasbinAdapter };
13
+ //# sourceMappingURL=adapter.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"adapter.mjs","names":[],"sources":["../../../../../src/modules/user/infrastructure/casbin/adapter.ts"],"sourcesContent":["import type { UpdatableAdapter } from 'casbin'\nimport { getDbProvider, getPgDb, getSqliteDb } from '@/shared/db/connection'\nimport { PgCasbinAdapter } from './adapter.pg'\nimport { SqliteCasbinAdapter } from './adapter.sqlite'\n\nexport function getCasbinAdapter(): UpdatableAdapter {\n const provider = getDbProvider()\n if (provider === 'postgresql') {\n return new PgCasbinAdapter(getPgDb())\n }\n return new SqliteCasbinAdapter(getSqliteDb())\n}\n"],"mappings":";;;;;AAKA,SAAgB,mBAAqC;AAEnD,KADiB,eAAe,KACf,aACf,QAAO,IAAI,gBAAgB,SAAS,CAAC;AAEvC,QAAO,IAAI,oBAAoB,aAAa,CAAC"}
@@ -0,0 +1,19 @@
1
+ import { PostgresqlDB } from "../../../../shared/db/connection.mjs";
2
+ import { Model, UpdatableAdapter } from "casbin";
3
+
4
+ //#region src/modules/user/infrastructure/casbin/adapter.pg.d.ts
5
+ declare class PgCasbinAdapter implements UpdatableAdapter {
6
+ private db;
7
+ constructor(db: PostgresqlDB);
8
+ loadPolicy(model: Model): Promise<void>;
9
+ savePolicy(model: Model): Promise<boolean>;
10
+ addPolicy(_sec: string, ptype: string, rule: string[]): Promise<void>;
11
+ removePolicy(_sec: string, ptype: string, rule: string[]): Promise<void>;
12
+ removeFilteredPolicy(_sec: string, ptype: string, fieldIndex: number, ...fieldValues: string[]): Promise<void>;
13
+ updatePolicy(_sec: string, ptype: string, oldRule: string[], newRule: string[]): Promise<void>;
14
+ updatePolicies(_sec: string, ptype: string, oldRules: string[][], newRules: string[][]): Promise<void>;
15
+ updateFilteredPolicies(_sec: string, ptype: string, newRules: string[][], fieldIndex: number, ...fieldValues: string[]): Promise<string[][]>;
16
+ }
17
+ //#endregion
18
+ export { PgCasbinAdapter };
19
+ //# sourceMappingURL=adapter.pg.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"adapter.pg.d.mts","names":[],"sources":["../../../../../src/modules/user/infrastructure/casbin/adapter.pg.ts"],"mappings":";;;;cAkDa,eAAA,YAA2B,gBAAA;EAAA,QAClB,EAAA;cAAA,EAAA,EAAI,YAAA;EAElB,UAAA,CAAW,KAAA,EAAO,KAAA,GAAQ,OAAA;EAK1B,UAAA,CAAW,KAAA,EAAO,KAAA,GAAQ,OAAA;EAmB1B,SAAA,CAAU,IAAA,UAAc,KAAA,UAAe,IAAA,aAAiB,OAAA;EAKxD,YAAA,CAAa,IAAA,UAAc,KAAA,UAAe,IAAA,aAAiB,OAAA;EAM3D,oBAAA,CAAqB,IAAA,UAAc,KAAA,UAAe,UAAA,aAAuB,WAAA,aAAwB,OAAA;EAoBjG,YAAA,CAAa,IAAA,UAAc,KAAA,UAAe,OAAA,YAAmB,OAAA,aAAoB,OAAA;EAOjF,cAAA,CAAe,IAAA,UAAc,KAAA,UAAe,QAAA,cAAsB,QAAA,eAAuB,OAAA;EAgBzF,sBAAA,CAAuB,IAAA,UAAc,KAAA,UAAe,QAAA,cAAsB,UAAA,aAAuB,WAAA,aAAwB,OAAA;AAAA"}
@@ -0,0 +1,129 @@
1
+ import { casbinRulePg } from "../casbin-rule.po.mjs";
2
+ import { Helper } from "casbin";
3
+ import { and, eq } from "drizzle-orm";
4
+
5
+ //#region src/modules/user/infrastructure/casbin/adapter.pg.ts
6
+ function toPolicyLine(line, model) {
7
+ const text = `${line.ptype || ""}, ${[
8
+ line.v0,
9
+ line.v1,
10
+ line.v2,
11
+ line.v3,
12
+ line.v4,
13
+ line.v5
14
+ ].filter(Boolean).join(", ")}`;
15
+ Helper.loadPolicyLine(text, model);
16
+ }
17
+ function buildConditions(line) {
18
+ const conds = [];
19
+ if (line.ptype) conds.push(eq(casbinRulePg.ptype, line.ptype));
20
+ if (line.v0 !== void 0) conds.push(eq(casbinRulePg.v0, line.v0));
21
+ if (line.v1 !== void 0) conds.push(eq(casbinRulePg.v1, line.v1));
22
+ if (line.v2 !== void 0) conds.push(eq(casbinRulePg.v2, line.v2));
23
+ if (line.v3 !== void 0) conds.push(eq(casbinRulePg.v3, line.v3));
24
+ if (line.v4 !== void 0) conds.push(eq(casbinRulePg.v4, line.v4));
25
+ if (line.v5 !== void 0) conds.push(eq(casbinRulePg.v5, line.v5));
26
+ return conds.length ? and(...conds) : void 0;
27
+ }
28
+ function savePolicyLine(ptype, rule) {
29
+ const line = { ptype };
30
+ if (rule.length > 0) line.v0 = rule[0];
31
+ if (rule.length > 1) line.v1 = rule[1];
32
+ if (rule.length > 2) line.v2 = rule[2];
33
+ if (rule.length > 3) line.v3 = rule[3];
34
+ if (rule.length > 4) line.v4 = rule[4];
35
+ if (rule.length > 5) line.v5 = rule[5];
36
+ return line;
37
+ }
38
+ var PgCasbinAdapter = class {
39
+ constructor(db) {
40
+ this.db = db;
41
+ }
42
+ async loadPolicy(model) {
43
+ const rows = await this.db.select().from(casbinRulePg);
44
+ for (const r of rows) toPolicyLine(r, model);
45
+ }
46
+ async savePolicy(model) {
47
+ await this.db.delete(casbinRulePg);
48
+ let astMap = model.model.get("p");
49
+ for (const [ptype, ast] of astMap) for (const rule of ast.policy) {
50
+ const line = savePolicyLine(ptype, rule);
51
+ await this.db.insert(casbinRulePg).values(line);
52
+ }
53
+ astMap = model.model.get("g");
54
+ for (const [ptype, ast] of astMap) for (const rule of ast.policy) {
55
+ const line = savePolicyLine(ptype, rule);
56
+ await this.db.insert(casbinRulePg).values(line);
57
+ }
58
+ return true;
59
+ }
60
+ async addPolicy(_sec, ptype, rule) {
61
+ const line = savePolicyLine(ptype, rule);
62
+ await this.db.insert(casbinRulePg).values(line);
63
+ }
64
+ async removePolicy(_sec, ptype, rule) {
65
+ const where = buildConditions(savePolicyLine(ptype, rule));
66
+ if (where) await this.db.delete(casbinRulePg).where(where);
67
+ }
68
+ async removeFilteredPolicy(_sec, ptype, fieldIndex, ...fieldValues) {
69
+ const line = { ptype };
70
+ const idx = fieldIndex + fieldValues.length;
71
+ if (fieldIndex <= 0 && idx > 0) line.v0 = fieldValues[0 - fieldIndex];
72
+ if (fieldIndex <= 1 && idx > 1) line.v1 = fieldValues[1 - fieldIndex];
73
+ if (fieldIndex <= 2 && idx > 2) line.v2 = fieldValues[2 - fieldIndex];
74
+ if (fieldIndex <= 3 && idx > 3) line.v3 = fieldValues[3 - fieldIndex];
75
+ if (fieldIndex <= 4 && idx > 4) line.v4 = fieldValues[4 - fieldIndex];
76
+ if (fieldIndex <= 5 && idx > 5) line.v5 = fieldValues[5 - fieldIndex];
77
+ const where = buildConditions(line);
78
+ if (where) await this.db.delete(casbinRulePg).where(where);
79
+ }
80
+ async updatePolicy(_sec, ptype, oldRule, newRule) {
81
+ const where = buildConditions(savePolicyLine(ptype, oldRule));
82
+ const next = savePolicyLine(ptype, newRule);
83
+ if (where) await this.db.update(casbinRulePg).set(next).where(where);
84
+ }
85
+ async updatePolicies(_sec, ptype, oldRules, newRules) {
86
+ if (oldRules.length !== newRules.length) throw new Error("oldRules and newRules must have the same length");
87
+ await this.db.transaction(async (tx) => {
88
+ for (let i = 0; i < oldRules.length; i++) {
89
+ const where = buildConditions(savePolicyLine(ptype, oldRules[i]));
90
+ const next = savePolicyLine(ptype, newRules[i]);
91
+ if (where) await tx.update(casbinRulePg).set(next).where(where);
92
+ }
93
+ });
94
+ }
95
+ async updateFilteredPolicies(_sec, ptype, newRules, fieldIndex, ...fieldValues) {
96
+ const line = { ptype };
97
+ const idx = fieldIndex + fieldValues.length;
98
+ if (fieldIndex <= 0 && idx > 0) line.v0 = fieldValues[0 - fieldIndex];
99
+ if (fieldIndex <= 1 && idx > 1) line.v1 = fieldValues[1 - fieldIndex];
100
+ if (fieldIndex <= 2 && idx > 2) line.v2 = fieldValues[2 - fieldIndex];
101
+ if (fieldIndex <= 3 && idx > 3) line.v3 = fieldValues[3 - fieldIndex];
102
+ if (fieldIndex <= 4 && idx > 4) line.v4 = fieldValues[4 - fieldIndex];
103
+ if (fieldIndex <= 5 && idx > 5) line.v5 = fieldValues[5 - fieldIndex];
104
+ const where = buildConditions(line);
105
+ if (!where) return [];
106
+ const oldRules = (await this.db.select().from(casbinRulePg).where(where)).map((r) => {
107
+ const rule = [];
108
+ if (r.v0 != null) rule.push(r.v0);
109
+ if (r.v1 != null) rule.push(r.v1);
110
+ if (r.v2 != null) rule.push(r.v2);
111
+ if (r.v3 != null) rule.push(r.v3);
112
+ if (r.v4 != null) rule.push(r.v4);
113
+ if (r.v5 != null) rule.push(r.v5);
114
+ return rule;
115
+ });
116
+ await this.db.transaction(async (tx) => {
117
+ await tx.delete(casbinRulePg).where(where);
118
+ for (const rule of newRules) {
119
+ const next = savePolicyLine(ptype, rule);
120
+ await tx.insert(casbinRulePg).values(next);
121
+ }
122
+ });
123
+ return oldRules;
124
+ }
125
+ };
126
+
127
+ //#endregion
128
+ export { PgCasbinAdapter };
129
+ //# sourceMappingURL=adapter.pg.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"adapter.pg.mjs","names":[],"sources":["../../../../../src/modules/user/infrastructure/casbin/adapter.pg.ts"],"sourcesContent":["import type { Model, UpdatableAdapter } from 'casbin'\nimport type { PostgresqlDB } from '@/shared/db/connection'\nimport { Helper } from 'casbin'\nimport { and, eq } from 'drizzle-orm'\nimport { casbinRulePg } from '@/modules/user/infrastructure/casbin-rule.po'\n\ntype Row = typeof casbinRulePg.$inferSelect\ntype Create = typeof casbinRulePg.$inferInsert\n\nfunction toPolicyLine(line: Row, model: Model) {\n const text = `${line.ptype || ''}, ${[line.v0, line.v1, line.v2, line.v3, line.v4, line.v5].filter(Boolean).join(', ')}`\n Helper.loadPolicyLine(text, model)\n}\n\nfunction buildConditions(line: Partial<Create>) {\n const conds: any[] = []\n if (line.ptype)\n conds.push(eq(casbinRulePg.ptype, line.ptype))\n if (line.v0 !== undefined)\n conds.push(eq(casbinRulePg.v0, line.v0 as string))\n if (line.v1 !== undefined)\n conds.push(eq(casbinRulePg.v1, line.v1 as string))\n if (line.v2 !== undefined)\n conds.push(eq(casbinRulePg.v2, line.v2 as string))\n if (line.v3 !== undefined)\n conds.push(eq(casbinRulePg.v3, line.v3 as string))\n if (line.v4 !== undefined)\n conds.push(eq(casbinRulePg.v4, line.v4 as string))\n if (line.v5 !== undefined)\n conds.push(eq(casbinRulePg.v5, line.v5 as string))\n return conds.length ? and(...conds) : undefined\n}\n\nfunction savePolicyLine(ptype: string, rule: string[]): Create {\n const line: Create = { ptype }\n if (rule.length > 0)\n line.v0 = rule[0]\n if (rule.length > 1)\n line.v1 = rule[1]\n if (rule.length > 2)\n line.v2 = rule[2]\n if (rule.length > 3)\n line.v3 = rule[3]\n if (rule.length > 4)\n line.v4 = rule[4]\n if (rule.length > 5)\n line.v5 = rule[5]\n return line\n}\n\nexport class PgCasbinAdapter implements UpdatableAdapter {\n constructor(private db: PostgresqlDB) {}\n\n async loadPolicy(model: Model): Promise<void> {\n const rows = await this.db.select().from(casbinRulePg)\n for (const r of rows) toPolicyLine(r, model)\n }\n\n async savePolicy(model: Model): Promise<boolean> {\n await this.db.delete(casbinRulePg)\n let astMap = model.model.get('p')!\n for (const [ptype, ast] of astMap) {\n for (const rule of ast.policy) {\n const line = savePolicyLine(ptype, rule)\n await this.db.insert(casbinRulePg).values(line)\n }\n }\n astMap = model.model.get('g')!\n for (const [ptype, ast] of astMap) {\n for (const rule of ast.policy) {\n const line = savePolicyLine(ptype, rule)\n await this.db.insert(casbinRulePg).values(line)\n }\n }\n return true\n }\n\n async addPolicy(_sec: string, ptype: string, rule: string[]): Promise<void> {\n const line = savePolicyLine(ptype, rule)\n await this.db.insert(casbinRulePg).values(line)\n }\n\n async removePolicy(_sec: string, ptype: string, rule: string[]): Promise<void> {\n const where = buildConditions(savePolicyLine(ptype, rule))\n if (where)\n await this.db.delete(casbinRulePg).where(where)\n }\n\n async removeFilteredPolicy(_sec: string, ptype: string, fieldIndex: number, ...fieldValues: string[]): Promise<void> {\n const line: Partial<Create> = { ptype }\n const idx = fieldIndex + fieldValues.length\n if (fieldIndex <= 0 && idx > 0)\n line.v0 = fieldValues[0 - fieldIndex]\n if (fieldIndex <= 1 && idx > 1)\n line.v1 = fieldValues[1 - fieldIndex]\n if (fieldIndex <= 2 && idx > 2)\n line.v2 = fieldValues[2 - fieldIndex]\n if (fieldIndex <= 3 && idx > 3)\n line.v3 = fieldValues[3 - fieldIndex]\n if (fieldIndex <= 4 && idx > 4)\n line.v4 = fieldValues[4 - fieldIndex]\n if (fieldIndex <= 5 && idx > 5)\n line.v5 = fieldValues[5 - fieldIndex]\n const where = buildConditions(line)\n if (where)\n await this.db.delete(casbinRulePg).where(where)\n }\n\n async updatePolicy(_sec: string, ptype: string, oldRule: string[], newRule: string[]): Promise<void> {\n const where = buildConditions(savePolicyLine(ptype, oldRule))\n const next = savePolicyLine(ptype, newRule)\n if (where)\n await this.db.update(casbinRulePg).set(next).where(where)\n }\n\n async updatePolicies(_sec: string, ptype: string, oldRules: string[][], newRules: string[][]): Promise<void> {\n if (oldRules.length !== newRules.length) {\n throw new Error('oldRules and newRules must have the same length')\n }\n\n await this.db.transaction(async (tx) => {\n for (let i = 0; i < oldRules.length; i++) {\n const where = buildConditions(savePolicyLine(ptype, oldRules[i]))\n const next = savePolicyLine(ptype, newRules[i])\n if (where) {\n await tx.update(casbinRulePg).set(next).where(where)\n }\n }\n })\n }\n\n async updateFilteredPolicies(_sec: string, ptype: string, newRules: string[][], fieldIndex: number, ...fieldValues: string[]): Promise<string[][]> {\n const line: Partial<Create> = { ptype }\n const idx = fieldIndex + fieldValues.length\n if (fieldIndex <= 0 && idx > 0)\n line.v0 = fieldValues[0 - fieldIndex]\n if (fieldIndex <= 1 && idx > 1)\n line.v1 = fieldValues[1 - fieldIndex]\n if (fieldIndex <= 2 && idx > 2)\n line.v2 = fieldValues[2 - fieldIndex]\n if (fieldIndex <= 3 && idx > 3)\n line.v3 = fieldValues[3 - fieldIndex]\n if (fieldIndex <= 4 && idx > 4)\n line.v4 = fieldValues[4 - fieldIndex]\n if (fieldIndex <= 5 && idx > 5)\n line.v5 = fieldValues[5 - fieldIndex]\n const where = buildConditions(line)\n\n if (!where)\n return []\n\n const oldRows = await this.db.select().from(casbinRulePg).where(where)\n const oldRules: string[][] = oldRows.map((r) => {\n const rule: string[] = []\n if (r.v0 != null)\n rule.push(r.v0)\n if (r.v1 != null)\n rule.push(r.v1)\n if (r.v2 != null)\n rule.push(r.v2)\n if (r.v3 != null)\n rule.push(r.v3)\n if (r.v4 != null)\n rule.push(r.v4)\n if (r.v5 != null)\n rule.push(r.v5)\n return rule\n })\n\n await this.db.transaction(async (tx) => {\n await tx.delete(casbinRulePg).where(where)\n for (const rule of newRules) {\n const next = savePolicyLine(ptype, rule)\n await tx.insert(casbinRulePg).values(next)\n }\n })\n\n return oldRules\n }\n}\n"],"mappings":";;;;;AASA,SAAS,aAAa,MAAW,OAAc;CAC7C,MAAM,OAAO,GAAG,KAAK,SAAS,GAAG,IAAI;EAAC,KAAK;EAAI,KAAK;EAAI,KAAK;EAAI,KAAK;EAAI,KAAK;EAAI,KAAK;EAAG,CAAC,OAAO,QAAQ,CAAC,KAAK,KAAK;AACtH,QAAO,eAAe,MAAM,MAAM;;AAGpC,SAAS,gBAAgB,MAAuB;CAC9C,MAAM,QAAe,EAAE;AACvB,KAAI,KAAK,MACP,OAAM,KAAK,GAAG,aAAa,OAAO,KAAK,MAAM,CAAC;AAChD,KAAI,KAAK,OAAO,OACd,OAAM,KAAK,GAAG,aAAa,IAAI,KAAK,GAAa,CAAC;AACpD,KAAI,KAAK,OAAO,OACd,OAAM,KAAK,GAAG,aAAa,IAAI,KAAK,GAAa,CAAC;AACpD,KAAI,KAAK,OAAO,OACd,OAAM,KAAK,GAAG,aAAa,IAAI,KAAK,GAAa,CAAC;AACpD,KAAI,KAAK,OAAO,OACd,OAAM,KAAK,GAAG,aAAa,IAAI,KAAK,GAAa,CAAC;AACpD,KAAI,KAAK,OAAO,OACd,OAAM,KAAK,GAAG,aAAa,IAAI,KAAK,GAAa,CAAC;AACpD,KAAI,KAAK,OAAO,OACd,OAAM,KAAK,GAAG,aAAa,IAAI,KAAK,GAAa,CAAC;AACpD,QAAO,MAAM,SAAS,IAAI,GAAG,MAAM,GAAG;;AAGxC,SAAS,eAAe,OAAe,MAAwB;CAC7D,MAAM,OAAe,EAAE,OAAO;AAC9B,KAAI,KAAK,SAAS,EAChB,MAAK,KAAK,KAAK;AACjB,KAAI,KAAK,SAAS,EAChB,MAAK,KAAK,KAAK;AACjB,KAAI,KAAK,SAAS,EAChB,MAAK,KAAK,KAAK;AACjB,KAAI,KAAK,SAAS,EAChB,MAAK,KAAK,KAAK;AACjB,KAAI,KAAK,SAAS,EAChB,MAAK,KAAK,KAAK;AACjB,KAAI,KAAK,SAAS,EAChB,MAAK,KAAK,KAAK;AACjB,QAAO;;AAGT,IAAa,kBAAb,MAAyD;CACvD,YAAY,AAAQ,IAAkB;EAAlB;;CAEpB,MAAM,WAAW,OAA6B;EAC5C,MAAM,OAAO,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,aAAa;AACtD,OAAK,MAAM,KAAK,KAAM,cAAa,GAAG,MAAM;;CAG9C,MAAM,WAAW,OAAgC;AAC/C,QAAM,KAAK,GAAG,OAAO,aAAa;EAClC,IAAI,SAAS,MAAM,MAAM,IAAI,IAAI;AACjC,OAAK,MAAM,CAAC,OAAO,QAAQ,OACzB,MAAK,MAAM,QAAQ,IAAI,QAAQ;GAC7B,MAAM,OAAO,eAAe,OAAO,KAAK;AACxC,SAAM,KAAK,GAAG,OAAO,aAAa,CAAC,OAAO,KAAK;;AAGnD,WAAS,MAAM,MAAM,IAAI,IAAI;AAC7B,OAAK,MAAM,CAAC,OAAO,QAAQ,OACzB,MAAK,MAAM,QAAQ,IAAI,QAAQ;GAC7B,MAAM,OAAO,eAAe,OAAO,KAAK;AACxC,SAAM,KAAK,GAAG,OAAO,aAAa,CAAC,OAAO,KAAK;;AAGnD,SAAO;;CAGT,MAAM,UAAU,MAAc,OAAe,MAA+B;EAC1E,MAAM,OAAO,eAAe,OAAO,KAAK;AACxC,QAAM,KAAK,GAAG,OAAO,aAAa,CAAC,OAAO,KAAK;;CAGjD,MAAM,aAAa,MAAc,OAAe,MAA+B;EAC7E,MAAM,QAAQ,gBAAgB,eAAe,OAAO,KAAK,CAAC;AAC1D,MAAI,MACF,OAAM,KAAK,GAAG,OAAO,aAAa,CAAC,MAAM,MAAM;;CAGnD,MAAM,qBAAqB,MAAc,OAAe,YAAoB,GAAG,aAAsC;EACnH,MAAM,OAAwB,EAAE,OAAO;EACvC,MAAM,MAAM,aAAa,YAAY;AACrC,MAAI,cAAc,KAAK,MAAM,EAC3B,MAAK,KAAK,YAAY,IAAI;AAC5B,MAAI,cAAc,KAAK,MAAM,EAC3B,MAAK,KAAK,YAAY,IAAI;AAC5B,MAAI,cAAc,KAAK,MAAM,EAC3B,MAAK,KAAK,YAAY,IAAI;AAC5B,MAAI,cAAc,KAAK,MAAM,EAC3B,MAAK,KAAK,YAAY,IAAI;AAC5B,MAAI,cAAc,KAAK,MAAM,EAC3B,MAAK,KAAK,YAAY,IAAI;AAC5B,MAAI,cAAc,KAAK,MAAM,EAC3B,MAAK,KAAK,YAAY,IAAI;EAC5B,MAAM,QAAQ,gBAAgB,KAAK;AACnC,MAAI,MACF,OAAM,KAAK,GAAG,OAAO,aAAa,CAAC,MAAM,MAAM;;CAGnD,MAAM,aAAa,MAAc,OAAe,SAAmB,SAAkC;EACnG,MAAM,QAAQ,gBAAgB,eAAe,OAAO,QAAQ,CAAC;EAC7D,MAAM,OAAO,eAAe,OAAO,QAAQ;AAC3C,MAAI,MACF,OAAM,KAAK,GAAG,OAAO,aAAa,CAAC,IAAI,KAAK,CAAC,MAAM,MAAM;;CAG7D,MAAM,eAAe,MAAc,OAAe,UAAsB,UAAqC;AAC3G,MAAI,SAAS,WAAW,SAAS,OAC/B,OAAM,IAAI,MAAM,kDAAkD;AAGpE,QAAM,KAAK,GAAG,YAAY,OAAO,OAAO;AACtC,QAAK,IAAI,IAAI,GAAG,IAAI,SAAS,QAAQ,KAAK;IACxC,MAAM,QAAQ,gBAAgB,eAAe,OAAO,SAAS,GAAG,CAAC;IACjE,MAAM,OAAO,eAAe,OAAO,SAAS,GAAG;AAC/C,QAAI,MACF,OAAM,GAAG,OAAO,aAAa,CAAC,IAAI,KAAK,CAAC,MAAM,MAAM;;IAGxD;;CAGJ,MAAM,uBAAuB,MAAc,OAAe,UAAsB,YAAoB,GAAG,aAA4C;EACjJ,MAAM,OAAwB,EAAE,OAAO;EACvC,MAAM,MAAM,aAAa,YAAY;AACrC,MAAI,cAAc,KAAK,MAAM,EAC3B,MAAK,KAAK,YAAY,IAAI;AAC5B,MAAI,cAAc,KAAK,MAAM,EAC3B,MAAK,KAAK,YAAY,IAAI;AAC5B,MAAI,cAAc,KAAK,MAAM,EAC3B,MAAK,KAAK,YAAY,IAAI;AAC5B,MAAI,cAAc,KAAK,MAAM,EAC3B,MAAK,KAAK,YAAY,IAAI;AAC5B,MAAI,cAAc,KAAK,MAAM,EAC3B,MAAK,KAAK,YAAY,IAAI;AAC5B,MAAI,cAAc,KAAK,MAAM,EAC3B,MAAK,KAAK,YAAY,IAAI;EAC5B,MAAM,QAAQ,gBAAgB,KAAK;AAEnC,MAAI,CAAC,MACH,QAAO,EAAE;EAGX,MAAM,YADU,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,aAAa,CAAC,MAAM,MAAM,EACjC,KAAK,MAAM;GAC9C,MAAM,OAAiB,EAAE;AACzB,OAAI,EAAE,MAAM,KACV,MAAK,KAAK,EAAE,GAAG;AACjB,OAAI,EAAE,MAAM,KACV,MAAK,KAAK,EAAE,GAAG;AACjB,OAAI,EAAE,MAAM,KACV,MAAK,KAAK,EAAE,GAAG;AACjB,OAAI,EAAE,MAAM,KACV,MAAK,KAAK,EAAE,GAAG;AACjB,OAAI,EAAE,MAAM,KACV,MAAK,KAAK,EAAE,GAAG;AACjB,OAAI,EAAE,MAAM,KACV,MAAK,KAAK,EAAE,GAAG;AACjB,UAAO;IACP;AAEF,QAAM,KAAK,GAAG,YAAY,OAAO,OAAO;AACtC,SAAM,GAAG,OAAO,aAAa,CAAC,MAAM,MAAM;AAC1C,QAAK,MAAM,QAAQ,UAAU;IAC3B,MAAM,OAAO,eAAe,OAAO,KAAK;AACxC,UAAM,GAAG,OAAO,aAAa,CAAC,OAAO,KAAK;;IAE5C;AAEF,SAAO"}
@@ -0,0 +1,19 @@
1
+ import { SqliteDB } from "../../../../shared/db/connection.mjs";
2
+ import { Model, UpdatableAdapter } from "casbin";
3
+
4
+ //#region src/modules/user/infrastructure/casbin/adapter.sqlite.d.ts
5
+ declare class SqliteCasbinAdapter implements UpdatableAdapter {
6
+ private db;
7
+ constructor(db: SqliteDB);
8
+ loadPolicy(model: Model): Promise<void>;
9
+ savePolicy(model: Model): Promise<boolean>;
10
+ addPolicy(_sec: string, ptype: string, rule: string[]): Promise<void>;
11
+ removePolicy(_sec: string, ptype: string, rule: string[]): Promise<void>;
12
+ removeFilteredPolicy(_sec: string, ptype: string, fieldIndex: number, ...fieldValues: string[]): Promise<void>;
13
+ updatePolicy(_sec: string, ptype: string, oldRule: string[], newRule: string[]): Promise<void>;
14
+ updatePolicies(_sec: string, ptype: string, oldRules: string[][], newRules: string[][]): Promise<void>;
15
+ updateFilteredPolicies(_sec: string, ptype: string, newRules: string[][], fieldIndex: number, ...fieldValues: string[]): Promise<string[][]>;
16
+ }
17
+ //#endregion
18
+ export { SqliteCasbinAdapter };
19
+ //# sourceMappingURL=adapter.sqlite.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"adapter.sqlite.d.mts","names":[],"sources":["../../../../../src/modules/user/infrastructure/casbin/adapter.sqlite.ts"],"mappings":";;;;cAkDa,mBAAA,YAA+B,gBAAA;EAAA,QACtB,EAAA;cAAA,EAAA,EAAI,QAAA;EAElB,UAAA,CAAW,KAAA,EAAO,KAAA,GAAQ,OAAA;EAK1B,UAAA,CAAW,KAAA,EAAO,KAAA,GAAQ,OAAA;EAmB1B,SAAA,CAAU,IAAA,UAAc,KAAA,UAAe,IAAA,aAAiB,OAAA;EAKxD,YAAA,CAAa,IAAA,UAAc,KAAA,UAAe,IAAA,aAAiB,OAAA;EAM3D,oBAAA,CAAqB,IAAA,UAAc,KAAA,UAAe,UAAA,aAAuB,WAAA,aAAwB,OAAA;EAoBjG,YAAA,CAAa,IAAA,UAAc,KAAA,UAAe,OAAA,YAAmB,OAAA,aAAoB,OAAA;EAOjF,cAAA,CAAe,IAAA,UAAc,KAAA,UAAe,QAAA,cAAsB,QAAA,eAAuB,OAAA;EAgBzF,sBAAA,CAAuB,IAAA,UAAc,KAAA,UAAe,QAAA,cAAsB,UAAA,aAAuB,WAAA,aAAwB,OAAA;AAAA"}
@@ -0,0 +1,129 @@
1
+ import { casbinRuleSqlite } from "../casbin-rule.po.mjs";
2
+ import { Helper } from "casbin";
3
+ import { and, eq } from "drizzle-orm";
4
+
5
+ //#region src/modules/user/infrastructure/casbin/adapter.sqlite.ts
6
+ function toPolicyLine(line, model) {
7
+ const text = `${line.ptype || ""}, ${[
8
+ line.v0,
9
+ line.v1,
10
+ line.v2,
11
+ line.v3,
12
+ line.v4,
13
+ line.v5
14
+ ].filter(Boolean).join(", ")}`;
15
+ Helper.loadPolicyLine(text, model);
16
+ }
17
+ function buildConditions(line) {
18
+ const conds = [];
19
+ if (line.ptype) conds.push(eq(casbinRuleSqlite.ptype, line.ptype));
20
+ if (line.v0 !== void 0) conds.push(eq(casbinRuleSqlite.v0, line.v0));
21
+ if (line.v1 !== void 0) conds.push(eq(casbinRuleSqlite.v1, line.v1));
22
+ if (line.v2 !== void 0) conds.push(eq(casbinRuleSqlite.v2, line.v2));
23
+ if (line.v3 !== void 0) conds.push(eq(casbinRuleSqlite.v3, line.v3));
24
+ if (line.v4 !== void 0) conds.push(eq(casbinRuleSqlite.v4, line.v4));
25
+ if (line.v5 !== void 0) conds.push(eq(casbinRuleSqlite.v5, line.v5));
26
+ return conds.length ? and(...conds) : void 0;
27
+ }
28
+ function savePolicyLine(ptype, rule) {
29
+ const line = { ptype };
30
+ if (rule.length > 0) line.v0 = rule[0];
31
+ if (rule.length > 1) line.v1 = rule[1];
32
+ if (rule.length > 2) line.v2 = rule[2];
33
+ if (rule.length > 3) line.v3 = rule[3];
34
+ if (rule.length > 4) line.v4 = rule[4];
35
+ if (rule.length > 5) line.v5 = rule[5];
36
+ return line;
37
+ }
38
+ var SqliteCasbinAdapter = class {
39
+ constructor(db) {
40
+ this.db = db;
41
+ }
42
+ async loadPolicy(model) {
43
+ const rows = await this.db.select().from(casbinRuleSqlite);
44
+ for (const r of rows) toPolicyLine(r, model);
45
+ }
46
+ async savePolicy(model) {
47
+ await this.db.delete(casbinRuleSqlite);
48
+ let astMap = model.model.get("p");
49
+ for (const [ptype, ast] of astMap) for (const rule of ast.policy) {
50
+ const line = savePolicyLine(ptype, rule);
51
+ await this.db.insert(casbinRuleSqlite).values(line);
52
+ }
53
+ astMap = model.model.get("g");
54
+ for (const [ptype, ast] of astMap) for (const rule of ast.policy) {
55
+ const line = savePolicyLine(ptype, rule);
56
+ await this.db.insert(casbinRuleSqlite).values(line);
57
+ }
58
+ return true;
59
+ }
60
+ async addPolicy(_sec, ptype, rule) {
61
+ const line = savePolicyLine(ptype, rule);
62
+ await this.db.insert(casbinRuleSqlite).values(line);
63
+ }
64
+ async removePolicy(_sec, ptype, rule) {
65
+ const where = buildConditions(savePolicyLine(ptype, rule));
66
+ if (where) await this.db.delete(casbinRuleSqlite).where(where);
67
+ }
68
+ async removeFilteredPolicy(_sec, ptype, fieldIndex, ...fieldValues) {
69
+ const line = { ptype };
70
+ const idx = fieldIndex + fieldValues.length;
71
+ if (fieldIndex <= 0 && idx > 0) line.v0 = fieldValues[0 - fieldIndex];
72
+ if (fieldIndex <= 1 && idx > 1) line.v1 = fieldValues[1 - fieldIndex];
73
+ if (fieldIndex <= 2 && idx > 2) line.v2 = fieldValues[2 - fieldIndex];
74
+ if (fieldIndex <= 3 && idx > 3) line.v3 = fieldValues[3 - fieldIndex];
75
+ if (fieldIndex <= 4 && idx > 4) line.v4 = fieldValues[4 - fieldIndex];
76
+ if (fieldIndex <= 5 && idx > 5) line.v5 = fieldValues[5 - fieldIndex];
77
+ const where = buildConditions(line);
78
+ if (where) await this.db.delete(casbinRuleSqlite).where(where);
79
+ }
80
+ async updatePolicy(_sec, ptype, oldRule, newRule) {
81
+ const where = buildConditions(savePolicyLine(ptype, oldRule));
82
+ const next = savePolicyLine(ptype, newRule);
83
+ if (where) await this.db.update(casbinRuleSqlite).set(next).where(where);
84
+ }
85
+ async updatePolicies(_sec, ptype, oldRules, newRules) {
86
+ if (oldRules.length !== newRules.length) throw new Error("oldRules and newRules must have the same length");
87
+ await this.db.transaction(async (tx) => {
88
+ for (let i = 0; i < oldRules.length; i++) {
89
+ const where = buildConditions(savePolicyLine(ptype, oldRules[i]));
90
+ const next = savePolicyLine(ptype, newRules[i]);
91
+ if (where) await tx.update(casbinRuleSqlite).set(next).where(where);
92
+ }
93
+ });
94
+ }
95
+ async updateFilteredPolicies(_sec, ptype, newRules, fieldIndex, ...fieldValues) {
96
+ const line = { ptype };
97
+ const idx = fieldIndex + fieldValues.length;
98
+ if (fieldIndex <= 0 && idx > 0) line.v0 = fieldValues[0 - fieldIndex];
99
+ if (fieldIndex <= 1 && idx > 1) line.v1 = fieldValues[1 - fieldIndex];
100
+ if (fieldIndex <= 2 && idx > 2) line.v2 = fieldValues[2 - fieldIndex];
101
+ if (fieldIndex <= 3 && idx > 3) line.v3 = fieldValues[3 - fieldIndex];
102
+ if (fieldIndex <= 4 && idx > 4) line.v4 = fieldValues[4 - fieldIndex];
103
+ if (fieldIndex <= 5 && idx > 5) line.v5 = fieldValues[5 - fieldIndex];
104
+ const where = buildConditions(line);
105
+ if (!where) return [];
106
+ const oldRules = (await this.db.select().from(casbinRuleSqlite).where(where)).map((r) => {
107
+ const rule = [];
108
+ if (r.v0 != null) rule.push(r.v0);
109
+ if (r.v1 != null) rule.push(r.v1);
110
+ if (r.v2 != null) rule.push(r.v2);
111
+ if (r.v3 != null) rule.push(r.v3);
112
+ if (r.v4 != null) rule.push(r.v4);
113
+ if (r.v5 != null) rule.push(r.v5);
114
+ return rule;
115
+ });
116
+ await this.db.transaction(async (tx) => {
117
+ await tx.delete(casbinRuleSqlite).where(where);
118
+ for (const rule of newRules) {
119
+ const next = savePolicyLine(ptype, rule);
120
+ await tx.insert(casbinRuleSqlite).values(next);
121
+ }
122
+ });
123
+ return oldRules;
124
+ }
125
+ };
126
+
127
+ //#endregion
128
+ export { SqliteCasbinAdapter };
129
+ //# sourceMappingURL=adapter.sqlite.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"adapter.sqlite.mjs","names":[],"sources":["../../../../../src/modules/user/infrastructure/casbin/adapter.sqlite.ts"],"sourcesContent":["import type { Model, UpdatableAdapter } from 'casbin'\nimport type { SqliteDB } from '@/shared/db/connection'\nimport { Helper } from 'casbin'\nimport { and, eq } from 'drizzle-orm'\nimport { casbinRuleSqlite } from '@/modules/user/infrastructure/casbin-rule.po'\n\ntype Row = typeof casbinRuleSqlite.$inferSelect\ntype Create = typeof casbinRuleSqlite.$inferInsert\n\nfunction toPolicyLine(line: Row, model: Model) {\n const text = `${line.ptype || ''}, ${[line.v0, line.v1, line.v2, line.v3, line.v4, line.v5].filter(Boolean).join(', ')}`\n Helper.loadPolicyLine(text, model)\n}\n\nfunction buildConditions(line: Partial<Create>) {\n const conds: any[] = []\n if (line.ptype)\n conds.push(eq(casbinRuleSqlite.ptype, line.ptype))\n if (line.v0 !== undefined)\n conds.push(eq(casbinRuleSqlite.v0, line.v0 as string))\n if (line.v1 !== undefined)\n conds.push(eq(casbinRuleSqlite.v1, line.v1 as string))\n if (line.v2 !== undefined)\n conds.push(eq(casbinRuleSqlite.v2, line.v2 as string))\n if (line.v3 !== undefined)\n conds.push(eq(casbinRuleSqlite.v3, line.v3 as string))\n if (line.v4 !== undefined)\n conds.push(eq(casbinRuleSqlite.v4, line.v4 as string))\n if (line.v5 !== undefined)\n conds.push(eq(casbinRuleSqlite.v5, line.v5 as string))\n return conds.length ? and(...conds) : undefined\n}\n\nfunction savePolicyLine(ptype: string, rule: string[]): Create {\n const line: Create = { ptype }\n if (rule.length > 0)\n line.v0 = rule[0]\n if (rule.length > 1)\n line.v1 = rule[1]\n if (rule.length > 2)\n line.v2 = rule[2]\n if (rule.length > 3)\n line.v3 = rule[3]\n if (rule.length > 4)\n line.v4 = rule[4]\n if (rule.length > 5)\n line.v5 = rule[5]\n return line\n}\n\nexport class SqliteCasbinAdapter implements UpdatableAdapter {\n constructor(private db: SqliteDB) {}\n\n async loadPolicy(model: Model): Promise<void> {\n const rows = await this.db.select().from(casbinRuleSqlite)\n for (const r of rows) toPolicyLine(r, model)\n }\n\n async savePolicy(model: Model): Promise<boolean> {\n await this.db.delete(casbinRuleSqlite)\n let astMap = model.model.get('p')!\n for (const [ptype, ast] of astMap) {\n for (const rule of ast.policy) {\n const line = savePolicyLine(ptype, rule)\n await this.db.insert(casbinRuleSqlite).values(line)\n }\n }\n astMap = model.model.get('g')!\n for (const [ptype, ast] of astMap) {\n for (const rule of ast.policy) {\n const line = savePolicyLine(ptype, rule)\n await this.db.insert(casbinRuleSqlite).values(line)\n }\n }\n return true\n }\n\n async addPolicy(_sec: string, ptype: string, rule: string[]): Promise<void> {\n const line = savePolicyLine(ptype, rule)\n await this.db.insert(casbinRuleSqlite).values(line)\n }\n\n async removePolicy(_sec: string, ptype: string, rule: string[]): Promise<void> {\n const where = buildConditions(savePolicyLine(ptype, rule))\n if (where)\n await this.db.delete(casbinRuleSqlite).where(where)\n }\n\n async removeFilteredPolicy(_sec: string, ptype: string, fieldIndex: number, ...fieldValues: string[]): Promise<void> {\n const line: Partial<Create> = { ptype }\n const idx = fieldIndex + fieldValues.length\n if (fieldIndex <= 0 && idx > 0)\n line.v0 = fieldValues[0 - fieldIndex]\n if (fieldIndex <= 1 && idx > 1)\n line.v1 = fieldValues[1 - fieldIndex]\n if (fieldIndex <= 2 && idx > 2)\n line.v2 = fieldValues[2 - fieldIndex]\n if (fieldIndex <= 3 && idx > 3)\n line.v3 = fieldValues[3 - fieldIndex]\n if (fieldIndex <= 4 && idx > 4)\n line.v4 = fieldValues[4 - fieldIndex]\n if (fieldIndex <= 5 && idx > 5)\n line.v5 = fieldValues[5 - fieldIndex]\n const where = buildConditions(line)\n if (where)\n await this.db.delete(casbinRuleSqlite).where(where)\n }\n\n async updatePolicy(_sec: string, ptype: string, oldRule: string[], newRule: string[]): Promise<void> {\n const where = buildConditions(savePolicyLine(ptype, oldRule))\n const next = savePolicyLine(ptype, newRule)\n if (where)\n await this.db.update(casbinRuleSqlite).set(next).where(where)\n }\n\n async updatePolicies(_sec: string, ptype: string, oldRules: string[][], newRules: string[][]): Promise<void> {\n if (oldRules.length !== newRules.length) {\n throw new Error('oldRules and newRules must have the same length')\n }\n\n await this.db.transaction(async (tx) => {\n for (let i = 0; i < oldRules.length; i++) {\n const where = buildConditions(savePolicyLine(ptype, oldRules[i]))\n const next = savePolicyLine(ptype, newRules[i])\n if (where) {\n await tx.update(casbinRuleSqlite).set(next).where(where)\n }\n }\n })\n }\n\n async updateFilteredPolicies(_sec: string, ptype: string, newRules: string[][], fieldIndex: number, ...fieldValues: string[]): Promise<string[][]> {\n const line: Partial<Create> = { ptype }\n const idx = fieldIndex + fieldValues.length\n if (fieldIndex <= 0 && idx > 0)\n line.v0 = fieldValues[0 - fieldIndex]\n if (fieldIndex <= 1 && idx > 1)\n line.v1 = fieldValues[1 - fieldIndex]\n if (fieldIndex <= 2 && idx > 2)\n line.v2 = fieldValues[2 - fieldIndex]\n if (fieldIndex <= 3 && idx > 3)\n line.v3 = fieldValues[3 - fieldIndex]\n if (fieldIndex <= 4 && idx > 4)\n line.v4 = fieldValues[4 - fieldIndex]\n if (fieldIndex <= 5 && idx > 5)\n line.v5 = fieldValues[5 - fieldIndex]\n const where = buildConditions(line)\n\n if (!where)\n return []\n\n const oldRows = await this.db.select().from(casbinRuleSqlite).where(where)\n const oldRules: string[][] = oldRows.map((r) => {\n const rule: string[] = []\n if (r.v0 != null)\n rule.push(r.v0)\n if (r.v1 != null)\n rule.push(r.v1)\n if (r.v2 != null)\n rule.push(r.v2)\n if (r.v3 != null)\n rule.push(r.v3)\n if (r.v4 != null)\n rule.push(r.v4)\n if (r.v5 != null)\n rule.push(r.v5)\n return rule\n })\n\n await this.db.transaction(async (tx) => {\n await tx.delete(casbinRuleSqlite).where(where)\n for (const rule of newRules) {\n const next = savePolicyLine(ptype, rule)\n await tx.insert(casbinRuleSqlite).values(next)\n }\n })\n\n return oldRules\n }\n}\n"],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ import * as casbin from "casbin";
2
+
3
+ //#region src/modules/user/infrastructure/casbin/enforcer.d.ts
4
+ declare function initEnforcer(): Promise<casbin.Enforcer>;
5
+ declare function initEnforcer(adapter: casbin.Adapter): Promise<casbin.Enforcer>;
6
+ declare function getEnforcer(): casbin.Enforcer;
7
+ //#endregion
8
+ export { getEnforcer, initEnforcer };
9
+ //# sourceMappingURL=enforcer.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"enforcer.d.mts","names":[],"sources":["../../../../../src/modules/user/infrastructure/casbin/enforcer.ts"],"mappings":";;;iBAsDgB,YAAA,CAAA,GAAgB,OAAA,CAAJ,MAAA,CAA6B,QAAA;AAAA,iBACzC,YAAA,CAAa,OAAA,EAAD,MAAA,CAA2B,OAAA,GAAU,OAAA,CAAH,MAAA,CAA4B,QAAA;AAAA,iBA4B1E,WAAA,CAAA,GAAW,MAAA,CAI8B,QAAA"}
@@ -0,0 +1,150 @@
1
+ import AppSettings from "../../../../settings.mjs";
2
+ import { getCasbinAdapter } from "./adapter.mjs";
3
+ import { newEnforcer, newModelFromString } from "casbin";
4
+
5
+ //#region src/modules/user/infrastructure/casbin/enforcer.ts
6
+ const RBAC_MODEL = `
7
+ [request_definition]
8
+ r = sub, obj, act
9
+
10
+ [policy_definition]
11
+ p = sub, obj, act
12
+
13
+ [role_definition]
14
+ g = _, _
15
+
16
+ [policy_effect]
17
+ e = some(where (p.eft == allow))
18
+
19
+ [matchers]
20
+ m = (r.sub == p.sub || g(r.sub, p.sub)) && keyMatch2(r.obj, p.obj) && regexMatch(r.act, p.act)
21
+ `;
22
+ let enforcerPromise = null;
23
+ const SEED_POLICIES = [
24
+ [
25
+ "admin",
26
+ "/api/*",
27
+ ".*"
28
+ ],
29
+ [
30
+ "user",
31
+ "/api/health",
32
+ "GET"
33
+ ],
34
+ [
35
+ "user",
36
+ "/api/users",
37
+ "GET"
38
+ ],
39
+ [
40
+ "user",
41
+ "/api/docs",
42
+ "POST"
43
+ ],
44
+ [
45
+ "user",
46
+ "/api/docs/*/favorite",
47
+ "POST"
48
+ ],
49
+ [
50
+ "user",
51
+ "/api/users/login",
52
+ "POST"
53
+ ],
54
+ [
55
+ "user",
56
+ "/api/users/logout",
57
+ "POST"
58
+ ],
59
+ [
60
+ "user",
61
+ "/api/users/me",
62
+ "GET"
63
+ ],
64
+ [
65
+ "user",
66
+ "/api/tasks/*",
67
+ "GET"
68
+ ],
69
+ [
70
+ "user",
71
+ "/api/tasks/*/progress",
72
+ "GET"
73
+ ],
74
+ [
75
+ "guest",
76
+ "/api/health",
77
+ "GET"
78
+ ],
79
+ [
80
+ "guest",
81
+ "/api/docs",
82
+ "GET"
83
+ ],
84
+ [
85
+ "guest",
86
+ "/api/docs/query",
87
+ "GET"
88
+ ],
89
+ [
90
+ "guest",
91
+ "/api/docs/*/check",
92
+ "POST"
93
+ ],
94
+ [
95
+ "guest",
96
+ "/api/chat",
97
+ "POST"
98
+ ],
99
+ [
100
+ "guest",
101
+ "/api/ranking/docs",
102
+ "GET"
103
+ ],
104
+ [
105
+ "guest",
106
+ "/api/mcp",
107
+ ".*"
108
+ ],
109
+ [
110
+ "guest",
111
+ "/api/users/login",
112
+ "POST"
113
+ ],
114
+ [
115
+ "guest",
116
+ "/api/users/logout",
117
+ "POST"
118
+ ],
119
+ [
120
+ "guest",
121
+ "/api/users/me",
122
+ "GET"
123
+ ]
124
+ ];
125
+ async function initEnforcer(adapter) {
126
+ if (AppSettings.global.enforcer) return Promise.resolve(AppSettings.global.enforcer);
127
+ if (!enforcerPromise) enforcerPromise = (async () => {
128
+ const e = await newEnforcer(newModelFromString(RBAC_MODEL), adapter ?? getCasbinAdapter());
129
+ const policies = await e.getPolicy();
130
+ const existing = new Set((policies ?? []).map((p) => p.join("|")));
131
+ const missing = SEED_POLICIES.filter((p) => !existing.has(p.join("|")));
132
+ if (missing.length > 0) {
133
+ e.enableAutoSave(false);
134
+ await e.addPolicies(missing);
135
+ await e.savePolicy();
136
+ e.enableAutoSave(true);
137
+ }
138
+ AppSettings.global.enforcer = e;
139
+ return e;
140
+ })();
141
+ return enforcerPromise;
142
+ }
143
+ function getEnforcer() {
144
+ if (!AppSettings.global.enforcer) throw new Error("Enforcer not initialized, call initEnforcer() at startup");
145
+ return AppSettings.global.enforcer;
146
+ }
147
+
148
+ //#endregion
149
+ export { getEnforcer, initEnforcer };
150
+ //# sourceMappingURL=enforcer.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"enforcer.mjs","names":[],"sources":["../../../../../src/modules/user/infrastructure/casbin/enforcer.ts"],"sourcesContent":["import { newEnforcer, newModelFromString } from 'casbin'\nimport AppSettings from '@/settings'\nimport { getCasbinAdapter } from './adapter'\n\nconst RBAC_MODEL = `\n[request_definition]\nr = sub, obj, act\n\n[policy_definition]\np = sub, obj, act\n\n[role_definition]\ng = _, _\n\n[policy_effect]\ne = some(where (p.eft == allow))\n\n[matchers]\nm = (r.sub == p.sub || g(r.sub, p.sub)) && keyMatch2(r.obj, p.obj) && regexMatch(r.act, p.act)\n`\n\nlet enforcerPromise: Promise<import('casbin').Enforcer> | null = null\n\nconst SEED_POLICIES: [string, string, string][] = [\n ['admin', '/api/*', '.*'],\n\n ['user', '/api/health', 'GET'],\n ['user', '/api/users', 'GET'],\n ['user', '/api/docs', 'POST'],\n ['user', '/api/docs/*/favorite', 'POST'],\n\n ['user', '/api/users/login', 'POST'],\n ['user', '/api/users/logout', 'POST'],\n ['user', '/api/users/me', 'GET'],\n ['user', '/api/tasks/*', 'GET'],\n ['user', '/api/tasks/*/progress', 'GET'],\n\n ['guest', '/api/health', 'GET'],\n ['guest', '/api/docs', 'GET'],\n ['guest', '/api/docs/query', 'GET'],\n ['guest', '/api/docs/*/check', 'POST'],\n ['guest', '/api/chat', 'POST'],\n ['guest', '/api/ranking/docs', 'GET'],\n ['guest', '/api/mcp', '.*'],\n\n ['guest', '/api/users/login', 'POST'],\n ['guest', '/api/users/logout', 'POST'],\n ['guest', '/api/users/me', 'GET'],\n]\n\n// TODO: 增加表配置前端权限\n// role, permissionCode\n// const SEED_FRONT_PERMISSIONS = []\n\nexport function initEnforcer(): Promise<import('casbin').Enforcer>\nexport function initEnforcer(adapter: import('casbin').Adapter): Promise<import('casbin').Enforcer>\nexport async function initEnforcer(adapter?: import('casbin').Adapter) {\n if (AppSettings.global.enforcer) {\n return Promise.resolve(AppSettings.global.enforcer as import('casbin').Enforcer)\n }\n if (!enforcerPromise) {\n enforcerPromise = (async () => {\n const model = newModelFromString(RBAC_MODEL)\n const actualAdapter = adapter ?? getCasbinAdapter()\n const e = await newEnforcer(model, actualAdapter)\n\n const policies = await e.getPolicy()\n const existing = new Set((policies ?? []).map(p => p.join('|')))\n const missing = SEED_POLICIES.filter(p => !existing.has(p.join('|')))\n if (missing.length > 0) {\n e.enableAutoSave(false)\n await e.addPolicies(missing)\n await e.savePolicy()\n e.enableAutoSave(true)\n }\n\n AppSettings.global.enforcer = e\n return e\n })()\n }\n return enforcerPromise as Promise<import('casbin').Enforcer>\n}\n\nexport function getEnforcer() {\n if (!AppSettings.global.enforcer) {\n throw new Error('Enforcer not initialized, call initEnforcer() at startup')\n }\n return AppSettings.global.enforcer as import('casbin').Enforcer\n}\n"],"mappings":";;;;;AAIA,MAAM,aAAa;;;;;;;;;;;;;;;;AAiBnB,IAAI,kBAA6D;AAEjE,MAAM,gBAA4C;CAChD;EAAC;EAAS;EAAU;EAAK;CAEzB;EAAC;EAAQ;EAAe;EAAM;CAC9B;EAAC;EAAQ;EAAc;EAAM;CAC7B;EAAC;EAAQ;EAAa;EAAO;CAC7B;EAAC;EAAQ;EAAwB;EAAO;CAExC;EAAC;EAAQ;EAAoB;EAAO;CACpC;EAAC;EAAQ;EAAqB;EAAO;CACrC;EAAC;EAAQ;EAAiB;EAAM;CAChC;EAAC;EAAQ;EAAgB;EAAM;CAC/B;EAAC;EAAQ;EAAyB;EAAM;CAExC;EAAC;EAAS;EAAe;EAAM;CAC/B;EAAC;EAAS;EAAa;EAAM;CAC7B;EAAC;EAAS;EAAmB;EAAM;CACnC;EAAC;EAAS;EAAqB;EAAO;CACtC;EAAC;EAAS;EAAa;EAAO;CAC9B;EAAC;EAAS;EAAqB;EAAM;CACrC;EAAC;EAAS;EAAY;EAAK;CAE3B;EAAC;EAAS;EAAoB;EAAO;CACrC;EAAC;EAAS;EAAqB;EAAO;CACtC;EAAC;EAAS;EAAiB;EAAM;CAClC;AAQD,eAAsB,aAAa,SAAoC;AACrE,KAAI,YAAY,OAAO,SACrB,QAAO,QAAQ,QAAQ,YAAY,OAAO,SAAsC;AAElF,KAAI,CAAC,gBACH,oBAAmB,YAAY;EAG7B,MAAM,IAAI,MAAM,YAFF,mBAAmB,WAAW,EACtB,WAAW,kBAAkB,CACF;EAEjD,MAAM,WAAW,MAAM,EAAE,WAAW;EACpC,MAAM,WAAW,IAAI,KAAK,YAAY,EAAE,EAAE,KAAI,MAAK,EAAE,KAAK,IAAI,CAAC,CAAC;EAChE,MAAM,UAAU,cAAc,QAAO,MAAK,CAAC,SAAS,IAAI,EAAE,KAAK,IAAI,CAAC,CAAC;AACrE,MAAI,QAAQ,SAAS,GAAG;AACtB,KAAE,eAAe,MAAM;AACvB,SAAM,EAAE,YAAY,QAAQ;AAC5B,SAAM,EAAE,YAAY;AACpB,KAAE,eAAe,KAAK;;AAGxB,cAAY,OAAO,WAAW;AAC9B,SAAO;KACL;AAEN,QAAO;;AAGT,SAAgB,cAAc;AAC5B,KAAI,CAAC,YAAY,OAAO,SACtB,OAAM,IAAI,MAAM,2DAA2D;AAE7E,QAAO,YAAY,OAAO"}