@revisium/core 2.8.0 → 2.9.0

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 (253) hide show
  1. package/README.md +4 -3
  2. package/dist/package.json +35 -14
  3. package/dist/prisma/migrations/20260222210834_add_oauth/migration.sql +110 -0
  4. package/dist/prisma/schema.prisma +72 -0
  5. package/dist/src/__generated__/client/browser.d.ts +4 -0
  6. package/dist/src/__generated__/client/browser.js.map +1 -1
  7. package/dist/src/__generated__/client/client.d.ts +9 -5
  8. package/dist/src/__generated__/client/client.js.map +1 -1
  9. package/dist/src/__generated__/client/commonInputTypes.d.ts +49 -3
  10. package/dist/src/__generated__/client/enums.js +2 -2
  11. package/dist/src/__generated__/client/enums.js.map +1 -1
  12. package/dist/src/__generated__/client/internal/class.d.ts +15 -3
  13. package/dist/src/__generated__/client/internal/class.js +19 -22
  14. package/dist/src/__generated__/client/internal/class.js.map +1 -1
  15. package/dist/src/__generated__/client/internal/prismaNamespace.d.ts +394 -10
  16. package/dist/src/__generated__/client/internal/prismaNamespace.js +117 -41
  17. package/dist/src/__generated__/client/internal/prismaNamespace.js.map +1 -1
  18. package/dist/src/__generated__/client/internal/prismaNamespaceBrowser.d.ts +87 -4
  19. package/dist/src/__generated__/client/internal/prismaNamespaceBrowser.js +112 -37
  20. package/dist/src/__generated__/client/internal/prismaNamespaceBrowser.js.map +1 -1
  21. package/dist/src/__generated__/client/models/Branch.d.ts +48 -48
  22. package/dist/src/__generated__/client/models/Endpoint.d.ts +54 -54
  23. package/dist/src/__generated__/client/models/EndpointVersion.d.ts +35 -35
  24. package/dist/src/__generated__/client/models/Instance.d.ts +25 -25
  25. package/dist/src/__generated__/client/models/OAuthAccessToken.d.ts +777 -0
  26. package/dist/src/__generated__/client/models/OAuthAccessToken.js +3 -0
  27. package/dist/src/__generated__/client/models/OAuthAccessToken.js.map +1 -0
  28. package/dist/src/__generated__/client/models/OAuthAuthorizationCode.d.ts +862 -0
  29. package/dist/src/__generated__/client/models/OAuthAuthorizationCode.js +3 -0
  30. package/dist/src/__generated__/client/models/OAuthAuthorizationCode.js.map +1 -0
  31. package/dist/src/__generated__/client/models/OAuthClient.d.ts +748 -0
  32. package/dist/src/__generated__/client/models/OAuthClient.js +3 -0
  33. package/dist/src/__generated__/client/models/OAuthClient.js.map +1 -0
  34. package/dist/src/__generated__/client/models/OAuthRefreshToken.d.ts +818 -0
  35. package/dist/src/__generated__/client/models/OAuthRefreshToken.js +3 -0
  36. package/dist/src/__generated__/client/models/OAuthRefreshToken.js.map +1 -0
  37. package/dist/src/__generated__/client/models/Organization.d.ts +30 -30
  38. package/dist/src/__generated__/client/models/Permission.d.ts +47 -47
  39. package/dist/src/__generated__/client/models/Project.d.ts +54 -54
  40. package/dist/src/__generated__/client/models/Revision.d.ts +75 -75
  41. package/dist/src/__generated__/client/models/Role.d.ts +51 -51
  42. package/dist/src/__generated__/client/models/Row.d.ts +77 -77
  43. package/dist/src/__generated__/client/models/Table.d.ts +58 -58
  44. package/dist/src/__generated__/client/models/User.d.ts +422 -62
  45. package/dist/src/__generated__/client/models/UserOrganization.d.ts +49 -49
  46. package/dist/src/__generated__/client/models/UserProject.d.ts +49 -49
  47. package/dist/src/__generated__/client/models.d.ts +4 -0
  48. package/dist/src/__generated__/client/sql/$DbEnums.d.ts +2 -2
  49. package/dist/src/__generated__/client/sql/countRowChangesBetweenRevisions.d.ts +9 -2
  50. package/dist/src/__generated__/client/sql/countRowChangesBetweenRevisions.js +1 -1
  51. package/dist/src/__generated__/client/sql/countRowChangesBetweenRevisions.js.map +1 -1
  52. package/dist/src/__generated__/client/sql/countTableDiffsBetweenRevisions.d.ts +7 -2
  53. package/dist/src/__generated__/client/sql/countTableDiffsBetweenRevisions.js +1 -1
  54. package/dist/src/__generated__/client/sql/countTableDiffsBetweenRevisions.js.map +1 -1
  55. package/dist/src/__generated__/client/sql/getRowChangesPaginatedBetweenRevisions.d.ts +11 -2
  56. package/dist/src/__generated__/client/sql/getRowChangesPaginatedBetweenRevisions.js +1 -1
  57. package/dist/src/__generated__/client/sql/getRowChangesPaginatedBetweenRevisions.js.map +1 -1
  58. package/dist/src/__generated__/client/sql/getRowChangesStatsBetweenRevisions.d.ts +7 -2
  59. package/dist/src/__generated__/client/sql/getRowChangesStatsBetweenRevisions.js +1 -1
  60. package/dist/src/__generated__/client/sql/getRowChangesStatsBetweenRevisions.js.map +1 -1
  61. package/dist/src/__generated__/client/sql/getTableDiffsPaginatedBetweenRevisions.d.ts +9 -2
  62. package/dist/src/__generated__/client/sql/getTableDiffsPaginatedBetweenRevisions.js +1 -1
  63. package/dist/src/__generated__/client/sql/getTableDiffsPaginatedBetweenRevisions.js.map +1 -1
  64. package/dist/src/__generated__/client/sql/getTableDiffsStatsBetweenRevisions.d.ts +6 -2
  65. package/dist/src/__generated__/client/sql/getTableDiffsStatsBetweenRevisions.js +1 -1
  66. package/dist/src/__generated__/client/sql/getTableDiffsStatsBetweenRevisions.js.map +1 -1
  67. package/dist/src/__generated__/client/sql/hasRowDiffsBetweenRevisions.d.ts +6 -2
  68. package/dist/src/__generated__/client/sql/hasRowDiffsBetweenRevisions.js +1 -1
  69. package/dist/src/__generated__/client/sql/hasRowDiffsBetweenRevisions.js.map +1 -1
  70. package/dist/src/__generated__/client/sql/hasTableDiffsBetweenRevisions.d.ts +1 -1
  71. package/dist/src/__generated__/client/sql/hasTableDiffsBetweenRevisions.js +1 -1
  72. package/dist/src/__generated__/client/sql/hasTableDiffsBetweenRevisions.js.map +1 -1
  73. package/dist/src/__generated__/client/sql.d.ts +9 -9
  74. package/dist/src/__generated__/client/sql.js.map +1 -1
  75. package/dist/src/api/graphql-api/branch/model/branch.model.d.ts +6 -5
  76. package/dist/src/api/graphql-api/branch/model/branch.model.js +5 -5
  77. package/dist/src/api/graphql-api/branch/model/branch.model.js.map +1 -1
  78. package/dist/src/api/graphql-api/branch/model/parent-branch.model.d.ts +3 -2
  79. package/dist/src/api/graphql-api/branch/model/parent-branch.model.js +2 -2
  80. package/dist/src/api/graphql-api/branch/model/parent-branch.model.js.map +1 -1
  81. package/dist/src/api/graphql-api/endpoint/model/endpoint.model.d.ts +2 -1
  82. package/dist/src/api/graphql-api/endpoint/model/endpoint.model.js +1 -1
  83. package/dist/src/api/graphql-api/endpoint/model/endpoint.model.js.map +1 -1
  84. package/dist/src/api/graphql-api/project/model/project.model.d.ts +3 -2
  85. package/dist/src/api/graphql-api/project/model/project.model.js +2 -2
  86. package/dist/src/api/graphql-api/project/model/project.model.js.map +1 -1
  87. package/dist/src/api/graphql-api/revision/model/child-branch.model.d.ts +3 -2
  88. package/dist/src/api/graphql-api/revision/model/child-branch.model.js +2 -2
  89. package/dist/src/api/graphql-api/revision/model/child-branch.model.js.map +1 -1
  90. package/dist/src/api/graphql-api/revision/model/revision.model.d.ts +4 -3
  91. package/dist/src/api/graphql-api/revision/model/revision.model.js +3 -3
  92. package/dist/src/api/graphql-api/revision/model/revision.model.js.map +1 -1
  93. package/dist/src/api/graphql-api/row/inputs/get-rows.input.d.ts +2 -0
  94. package/dist/src/api/graphql-api/row/inputs/get-rows.input.js +8 -0
  95. package/dist/src/api/graphql-api/row/inputs/get-rows.input.js.map +1 -1
  96. package/dist/src/api/graphql-api/row/model/row.model.d.ts +3 -2
  97. package/dist/src/api/graphql-api/row/model/row.model.js +2 -2
  98. package/dist/src/api/graphql-api/row/model/row.model.js.map +1 -1
  99. package/dist/src/api/graphql-api/share/model/relation.type.d.ts +1 -0
  100. package/dist/src/api/graphql-api/share/model/relation.type.js +3 -0
  101. package/dist/src/api/graphql-api/share/model/relation.type.js.map +1 -0
  102. package/dist/src/api/graphql-api/table/model/table.model.d.ts +3 -2
  103. package/dist/src/api/graphql-api/table/model/table.model.js +2 -2
  104. package/dist/src/api/graphql-api/table/model/table.model.js.map +1 -1
  105. package/dist/src/api/graphql-api/views/input/update-table-views.input.d.ts +1 -0
  106. package/dist/src/api/graphql-api/views/input/update-table-views.input.js +4 -0
  107. package/dist/src/api/graphql-api/views/input/update-table-views.input.js.map +1 -1
  108. package/dist/src/api/graphql-api/views/model/view-column.model.d.ts +1 -0
  109. package/dist/src/api/graphql-api/views/model/view-column.model.js +4 -0
  110. package/dist/src/api/graphql-api/views/model/view-column.model.js.map +1 -1
  111. package/dist/src/api/mcp-api/mcp-auth.service.d.ts +21 -0
  112. package/dist/src/api/mcp-api/mcp-auth.service.js +82 -0
  113. package/dist/src/api/mcp-api/mcp-auth.service.js.map +1 -0
  114. package/dist/src/api/mcp-api/mcp-server.service.d.ts +5 -8
  115. package/dist/src/api/mcp-api/mcp-server.service.js +50 -86
  116. package/dist/src/api/mcp-api/mcp-server.service.js.map +1 -1
  117. package/dist/src/api/mcp-api/mcp.controller.d.ts +7 -4
  118. package/dist/src/api/mcp-api/mcp.controller.js +74 -78
  119. package/dist/src/api/mcp-api/mcp.controller.js.map +1 -1
  120. package/dist/src/api/mcp-api/mcp.module.js +4 -2
  121. package/dist/src/api/mcp-api/mcp.module.js.map +1 -1
  122. package/dist/src/api/mcp-api/resources/schema.resource.js +6 -12
  123. package/dist/src/api/mcp-api/resources/schema.resource.js.map +1 -1
  124. package/dist/src/api/mcp-api/tools/branch.tools.js +116 -12
  125. package/dist/src/api/mcp-api/tools/branch.tools.js.map +1 -1
  126. package/dist/src/api/mcp-api/tools/endpoint.tools.js +12 -18
  127. package/dist/src/api/mcp-api/tools/endpoint.tools.js.map +1 -1
  128. package/dist/src/api/mcp-api/tools/file.tools.js +2 -3
  129. package/dist/src/api/mcp-api/tools/file.tools.js.map +1 -1
  130. package/dist/src/api/mcp-api/tools/index.d.ts +0 -1
  131. package/dist/src/api/mcp-api/tools/index.js +1 -3
  132. package/dist/src/api/mcp-api/tools/index.js.map +1 -1
  133. package/dist/src/api/mcp-api/tools/migration.tools.js +4 -6
  134. package/dist/src/api/mcp-api/tools/migration.tools.js.map +1 -1
  135. package/dist/src/api/mcp-api/tools/organization.tools.js +5 -7
  136. package/dist/src/api/mcp-api/tools/organization.tools.js.map +1 -1
  137. package/dist/src/api/mcp-api/tools/project.tools.js +39 -8
  138. package/dist/src/api/mcp-api/tools/project.tools.js.map +1 -1
  139. package/dist/src/api/mcp-api/tools/revision-changes.tools.js +6 -9
  140. package/dist/src/api/mcp-api/tools/revision-changes.tools.js.map +1 -1
  141. package/dist/src/api/mcp-api/tools/revision.tools.js +27 -6
  142. package/dist/src/api/mcp-api/tools/revision.tools.js.map +1 -1
  143. package/dist/src/api/mcp-api/tools/row.tools.d.ts +39 -0
  144. package/dist/src/api/mcp-api/tools/row.tools.js +129 -34
  145. package/dist/src/api/mcp-api/tools/row.tools.js.map +1 -1
  146. package/dist/src/api/mcp-api/tools/table.tools.js +55 -28
  147. package/dist/src/api/mcp-api/tools/table.tools.js.map +1 -1
  148. package/dist/src/api/mcp-api/tools/user.tools.js +3 -5
  149. package/dist/src/api/mcp-api/tools/user.tools.js.map +1 -1
  150. package/dist/src/api/mcp-api/types.d.ts +1 -5
  151. package/dist/src/features/branch/commands/handlers/delete-branch.handler.js +1 -2
  152. package/dist/src/features/branch/commands/handlers/delete-branch.handler.js.map +1 -1
  153. package/dist/src/features/branch/quieries/handlers/get-branch.handler.js +1 -4
  154. package/dist/src/features/branch/quieries/handlers/get-branch.handler.js.map +1 -1
  155. package/dist/src/features/draft/commands/handlers/api-create-revision.handler.js +2 -2
  156. package/dist/src/features/draft/commands/handlers/api-create-revision.handler.js.map +1 -1
  157. package/dist/src/features/draft/commands/handlers/create-rows.handler.js.map +1 -1
  158. package/dist/src/features/draft/commands/handlers/patch-rows.handler.js.map +1 -1
  159. package/dist/src/features/draft/commands/handlers/transactional/internal-rename-row.handler.js.map +1 -1
  160. package/dist/src/features/draft/commands/handlers/transactional/validate-schema.handler.js +4 -1
  161. package/dist/src/features/draft/commands/handlers/transactional/validate-schema.handler.js.map +1 -1
  162. package/dist/src/features/draft/commands/handlers/update-rows.handler.js.map +1 -1
  163. package/dist/src/features/draft/commands/handlers/update-table.handler.js +4 -1
  164. package/dist/src/features/draft/commands/handlers/update-table.handler.js.map +1 -1
  165. package/dist/src/features/draft-revision/commands/handlers/draft-revision-recompute-has-changes.handler.js +6 -5
  166. package/dist/src/features/draft-revision/commands/handlers/draft-revision-recompute-has-changes.handler.js.map +1 -1
  167. package/dist/src/features/oauth/oauth-authorization.service.d.ts +22 -0
  168. package/dist/src/features/oauth/oauth-authorization.service.js +78 -0
  169. package/dist/src/features/oauth/oauth-authorization.service.js.map +1 -0
  170. package/dist/src/features/oauth/oauth-client.service.d.ts +25 -0
  171. package/dist/src/features/oauth/oauth-client.service.js +82 -0
  172. package/dist/src/features/oauth/oauth-client.service.js.map +1 -0
  173. package/dist/src/features/oauth/oauth-token.service.d.ts +27 -0
  174. package/dist/src/features/oauth/oauth-token.service.js +190 -0
  175. package/dist/src/features/oauth/oauth-token.service.js.map +1 -0
  176. package/dist/src/features/oauth/oauth.controller.d.ts +88 -0
  177. package/dist/src/features/oauth/oauth.controller.js +285 -0
  178. package/dist/src/features/oauth/oauth.controller.js.map +1 -0
  179. package/dist/src/features/oauth/oauth.module.d.ts +2 -0
  180. package/dist/src/features/oauth/oauth.module.js +29 -0
  181. package/dist/src/features/oauth/oauth.module.js.map +1 -0
  182. package/dist/src/features/plugin/file/file.plugin.js.map +1 -1
  183. package/dist/src/features/plugin/plugin.service.js.map +1 -1
  184. package/dist/src/features/plugin/row-created-at/row-created-at.plugin.js.map +1 -1
  185. package/dist/src/features/plugin/row-created-id/row-created-id.plugin.js.map +1 -1
  186. package/dist/src/features/plugin/row-hash/row-hash.plugin.js.map +1 -1
  187. package/dist/src/features/plugin/row-id/row-id.plugin.js.map +1 -1
  188. package/dist/src/features/plugin/row-published-at/row-published-at.plugin.js.map +1 -1
  189. package/dist/src/features/plugin/row-schema-hash/row-schema-hash.plugin.js.map +1 -1
  190. package/dist/src/features/plugin/row-updated-at/row-updated-at.plugin.js.map +1 -1
  191. package/dist/src/features/plugin/row-version-id/row-version-id.plugin.js.map +1 -1
  192. package/dist/src/features/project/commands/handlers/delete-project.handler.js +1 -4
  193. package/dist/src/features/project/commands/handlers/delete-project.handler.js.map +1 -1
  194. package/dist/src/features/project/commands/handlers/update-project.handler.js +1 -4
  195. package/dist/src/features/project/commands/handlers/update-project.handler.js.map +1 -1
  196. package/dist/src/features/project/queries/handlers/get-project.handler.js +1 -4
  197. package/dist/src/features/project/queries/handlers/get-project.handler.js.map +1 -1
  198. package/dist/src/features/row/queries/handlers/get-rows.handler.d.ts +0 -2
  199. package/dist/src/features/row/queries/handlers/get-rows.handler.js +7 -13
  200. package/dist/src/features/row/queries/handlers/get-rows.handler.js.map +1 -1
  201. package/dist/src/features/row/queries/handlers/resolve-row-count-foreign-keys-to.handler.js.map +1 -1
  202. package/dist/src/features/row/queries/handlers/resolve-row-foreign-keys-to.handler.js.map +1 -1
  203. package/dist/src/features/row/services/system-column-mapping.service.js +5 -1
  204. package/dist/src/features/row/services/system-column-mapping.service.js.map +1 -1
  205. package/dist/src/features/row/utils/get-keyset-pagination.d.ts +17 -0
  206. package/dist/src/features/row/utils/get-keyset-pagination.js +61 -0
  207. package/dist/src/features/row/utils/get-keyset-pagination.js.map +1 -0
  208. package/dist/src/features/row/utils/get-rows-sql.d.ts +2 -1
  209. package/dist/src/features/row/utils/get-rows-sql.js +76 -21
  210. package/dist/src/features/row/utils/get-rows-sql.js.map +1 -1
  211. package/dist/src/features/share/schema/table-views-schema.js +1 -0
  212. package/dist/src/features/share/schema/table-views-schema.js.map +1 -1
  213. package/dist/src/features/share/utils/validateUrlLikeId/reserved-names.d.ts +1 -1
  214. package/dist/src/features/share/utils/validateUrlLikeId/reserved-names.js +3 -0
  215. package/dist/src/features/share/utils/validateUrlLikeId/reserved-names.js.map +1 -1
  216. package/dist/src/features/share/views-migration.service.js.map +1 -1
  217. package/dist/src/features/sub-schema/queries/handlers/get-sub-schema-items.handler.js.map +1 -1
  218. package/dist/src/features/views/services/view-validation.service.js +10 -1
  219. package/dist/src/features/views/services/view-validation.service.js.map +1 -1
  220. package/dist/src/features/views/types/views.types.d.ts +1 -0
  221. package/dist/src/features/views/types/views.types.js.map +1 -1
  222. package/dist/src/infrastructure/clean/clean.service.d.ts +1 -0
  223. package/dist/src/infrastructure/clean/clean.service.js +23 -0
  224. package/dist/src/infrastructure/clean/clean.service.js.map +1 -1
  225. package/dist/src/infrastructure/clean/commands/handlers/clean-oauth-expired-access-tokens.handler.d.ts +8 -0
  226. package/dist/src/infrastructure/clean/commands/handlers/clean-oauth-expired-access-tokens.handler.js +33 -0
  227. package/dist/src/infrastructure/clean/commands/handlers/clean-oauth-expired-access-tokens.handler.js.map +1 -0
  228. package/dist/src/infrastructure/clean/commands/handlers/clean-oauth-expired-codes.handler.d.ts +8 -0
  229. package/dist/src/infrastructure/clean/commands/handlers/clean-oauth-expired-codes.handler.js +33 -0
  230. package/dist/src/infrastructure/clean/commands/handlers/clean-oauth-expired-codes.handler.js.map +1 -0
  231. package/dist/src/infrastructure/clean/commands/handlers/clean-oauth-expired-refresh-tokens.handler.d.ts +8 -0
  232. package/dist/src/infrastructure/clean/commands/handlers/clean-oauth-expired-refresh-tokens.handler.js +33 -0
  233. package/dist/src/infrastructure/clean/commands/handlers/clean-oauth-expired-refresh-tokens.handler.js.map +1 -0
  234. package/dist/src/infrastructure/clean/commands/handlers/index.d.ts +4 -1
  235. package/dist/src/infrastructure/clean/commands/handlers/index.js +10 -1
  236. package/dist/src/infrastructure/clean/commands/handlers/index.js.map +1 -1
  237. package/dist/src/infrastructure/clean/commands/impl/clean-oauth-expired-access-tokens.command.d.ts +2 -0
  238. package/dist/src/infrastructure/clean/commands/impl/clean-oauth-expired-access-tokens.command.js +7 -0
  239. package/dist/src/infrastructure/clean/commands/impl/clean-oauth-expired-access-tokens.command.js.map +1 -0
  240. package/dist/src/infrastructure/clean/commands/impl/clean-oauth-expired-codes.command.d.ts +2 -0
  241. package/dist/src/infrastructure/clean/commands/impl/clean-oauth-expired-codes.command.js +7 -0
  242. package/dist/src/infrastructure/clean/commands/impl/clean-oauth-expired-codes.command.js.map +1 -0
  243. package/dist/src/infrastructure/clean/commands/impl/clean-oauth-expired-refresh-tokens.command.d.ts +2 -0
  244. package/dist/src/infrastructure/clean/commands/impl/clean-oauth-expired-refresh-tokens.command.js +7 -0
  245. package/dist/src/infrastructure/clean/commands/impl/clean-oauth-expired-refresh-tokens.command.js.map +1 -0
  246. package/dist/tsconfig.build.tsbuildinfo +1 -1
  247. package/package.json +35 -14
  248. package/dist/src/api/mcp-api/mcp-session.service.d.ts +0 -19
  249. package/dist/src/api/mcp-api/mcp-session.service.js +0 -57
  250. package/dist/src/api/mcp-api/mcp-session.service.js.map +0 -1
  251. package/dist/src/api/mcp-api/tools/auth.tools.d.ts +0 -12
  252. package/dist/src/api/mcp-api/tools/auth.tools.js +0 -182
  253. package/dist/src/api/mcp-api/tools/auth.tools.js.map +0 -1
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@revisium/core",
3
- "version": "2.8.0",
3
+ "version": "2.9.0",
4
4
  "description": "Revisium is a tool (UI/API) inspired by JSON (JSON Schema) and Git, designed to provide a flexible and low-level headless CMS solution.",
5
5
  "private": false,
6
6
  "homepage": "https://revisium.io",
@@ -33,11 +33,10 @@
33
33
  "start:prod": "NODE_ENV=production npm run prisma:migrate:deploy && npm run seed:prod && node --experimental-require-module dist/src/main",
34
34
  "lint:ci": "eslint \"{src,apps,libs,test}/**/*.ts\" --max-warnings 0",
35
35
  "lint:fix": "eslint \"{src,apps,libs,test}/**/*.ts\" --max-warnings 0 --fix",
36
- "test": "NODE_ENV=test jest",
36
+ "test": "NODE_ENV=test jest --maxWorkers=50% --forceExit",
37
37
  "test:watch": "NODE_ENV=test jest --watch",
38
- "test:cov": "NODE_ENV=test jest --coverage --silent",
38
+ "test:cov": "NODE_ENV=test jest --maxWorkers=50% --forceExit --coverage --silent",
39
39
  "test:debug": "NODE_ENV=test node --inspect-brk -r tsconfig-paths/register -r ts-node/register node_modules/.bin/jest --runInBand",
40
- "test:e2e": "NODE_ENV=test jest --config ./test/jest-e2e.json",
41
40
  "tsc": "tsc -p tsconfig.json",
42
41
  "docker:test-container-up": "docker compose -f docker-compose-test.yml -p revisium-core-test up -d && sleep 1 && dotenv -e .env.test npm run prisma:migrate:deploy && dotenv -e .env.test npm run seed",
43
42
  "docker:test-container-down": "docker compose -f docker-compose-test.yml -p revisium-core-test down --volumes",
@@ -47,6 +46,7 @@
47
46
  "dependencies": {
48
47
  "@aws-sdk/client-s3": "^3.816.0",
49
48
  "@casl/ability": "^6.7.5",
49
+ "@graphql-yoga/nestjs": "^3.8.0",
50
50
  "@modelcontextprotocol/sdk": "^1.25.3",
51
51
  "@nestjs/cache-manager": "^3.1.0",
52
52
  "@nestjs/common": "^11.1.11",
@@ -54,7 +54,6 @@
54
54
  "@nestjs/core": "^11.1.11",
55
55
  "@nestjs/cqrs": "^11.0.3",
56
56
  "@nestjs/event-emitter": "^3.0.1",
57
- "@graphql-yoga/nestjs": "^3.8.0",
58
57
  "@nestjs/graphql": "^13.2.3",
59
58
  "@nestjs/jwt": "^11.0.2",
60
59
  "@nestjs/microservices": "^11.1.11",
@@ -66,8 +65,8 @@
66
65
  "@nestjs/terminus": "^11.0.0",
67
66
  "@prisma/adapter-pg": "^7.4.0",
68
67
  "@prisma/client": "^7.4.0",
69
- "@revisium/prisma-pg-json": "^1.4.0",
70
- "@revisium/schema-toolkit": "^0.14.3",
68
+ "@revisium/prisma-pg-json": "^1.5.0",
69
+ "@revisium/schema-toolkit": "^0.23.0",
71
70
  "ajv": "^8.17.1",
72
71
  "bcrypt": "^6.0.0",
73
72
  "bentocache": "^1.6.0",
@@ -77,8 +76,8 @@
77
76
  "compression": "^1.8.1",
78
77
  "dotenv": "^17.2.3",
79
78
  "graphql": "^16.12.0",
80
- "graphql-yoga": "^5.18.0",
81
79
  "graphql-scalars": "^1.25.0",
80
+ "graphql-yoga": "^5.18.0",
82
81
  "handlebars": "^4.7.8",
83
82
  "ioredis": "^5.9.0",
84
83
  "lru-cache": "^11.2.4",
@@ -94,10 +93,12 @@
94
93
  "sharp": "^0.34.5"
95
94
  },
96
95
  "devDependencies": {
97
- "@eslint/js": "^9.29.0",
96
+ "@eslint/js": "^9.39.3",
98
97
  "@nestjs/cli": "^11.0.14",
99
98
  "@nestjs/schematics": "^11.0.9",
100
99
  "@nestjs/testing": "^11.1.11",
100
+ "@swc/core": "^1.15.11",
101
+ "@swc/jest": "^0.2.39",
101
102
  "@types/bcrypt": "^5.0.2",
102
103
  "@types/compression": "^1.8.1",
103
104
  "@types/express": "^5.0.6",
@@ -111,13 +112,13 @@
111
112
  "@types/supertest": "^6.0.3",
112
113
  "aws-sdk-client-mock": "^4.1.0",
113
114
  "dotenv-cli": "^8.0.0",
114
- "eslint": "^9.27.0",
115
+ "eslint": "^9.39.3",
115
116
  "eslint-config-prettier": "^10.1.8",
116
- "eslint-plugin-prettier": "^5.4.1",
117
+ "eslint-plugin-prettier": "^5.5.5",
117
118
  "globals": "^16.1.0",
118
119
  "jest": "^29.7.0",
119
120
  "jest-mock-extended": "^3.0.7",
120
- "prettier": "^3.5.3",
121
+ "prettier": "^3.8.1",
121
122
  "prisma": "^7.4.0",
122
123
  "shx": "^0.4.0",
123
124
  "source-map-support": "^0.5.21",
@@ -129,7 +130,7 @@
129
130
  "tsc-alias": "^1.8.16",
130
131
  "tsconfig-paths": "^4.2.0",
131
132
  "typescript": "^5.9.3",
132
- "typescript-eslint": "^8.52.0"
133
+ "typescript-eslint": "^8.56.0"
133
134
  },
134
135
  "overrides": {
135
136
  "lodash": "^4.17.23",
@@ -147,7 +148,26 @@
147
148
  "rootDir": "./",
148
149
  "testRegex": ".*\\.spec\\.ts$",
149
150
  "transform": {
150
- "^.+\\.(t|j)s$": "ts-jest"
151
+ "^.+\\.(t|j)sx?$": [
152
+ "@swc/jest",
153
+ {
154
+ "jsc": {
155
+ "target": "es2021",
156
+ "parser": {
157
+ "syntax": "typescript",
158
+ "tsx": false,
159
+ "decorators": true
160
+ },
161
+ "transform": {
162
+ "decoratorMetadata": true
163
+ }
164
+ },
165
+ "module": {
166
+ "type": "commonjs"
167
+ },
168
+ "sourceMaps": "inline"
169
+ }
170
+ ]
151
171
  },
152
172
  "collectCoverageFrom": [
153
173
  "<rootDir>/src/**/*.(t|j)s",
@@ -162,6 +182,7 @@
162
182
  "text-summary",
163
183
  "lcov"
164
184
  ],
185
+ "testTimeout": 30000,
165
186
  "testEnvironment": "node",
166
187
  "setupFiles": [
167
188
  "<rootDir>/jest.setup.ts"
@@ -1,19 +0,0 @@
1
- import { JwtService } from '@nestjs/jwt';
2
- import { JwtSecretService } from '../../features/auth/jwt-secret.service';
3
- export interface McpSession {
4
- userId: string;
5
- username: string;
6
- email: string;
7
- roleId: string | null;
8
- }
9
- export declare class McpSessionService {
10
- private readonly jwtService;
11
- private readonly jwtSecret;
12
- private readonly sessions;
13
- constructor(jwtService: JwtService, jwtSecret: JwtSecretService);
14
- createSession(sessionId: string, token: string, session: McpSession): void;
15
- getSession(sessionId: string): McpSession | null;
16
- getToken(sessionId: string): string | null;
17
- deleteSession(sessionId: string): void;
18
- verifyToken(token: string): McpSession | null;
19
- }
@@ -1,57 +0,0 @@
1
- "use strict";
2
- var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
- var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
- if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
- else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
- return c > 3 && r && Object.defineProperty(target, key, r), r;
7
- };
8
- var __metadata = (this && this.__metadata) || function (k, v) {
9
- if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
- };
11
- Object.defineProperty(exports, "__esModule", { value: true });
12
- exports.McpSessionService = void 0;
13
- const common_1 = require("@nestjs/common");
14
- const jwt_1 = require("@nestjs/jwt");
15
- const jwt_secret_service_1 = require("../../features/auth/jwt-secret.service");
16
- let McpSessionService = class McpSessionService {
17
- constructor(jwtService, jwtSecret) {
18
- this.jwtService = jwtService;
19
- this.jwtSecret = jwtSecret;
20
- this.sessions = new Map();
21
- }
22
- createSession(sessionId, token, session) {
23
- this.sessions.set(sessionId, { token, session });
24
- }
25
- getSession(sessionId) {
26
- return this.sessions.get(sessionId)?.session ?? null;
27
- }
28
- getToken(sessionId) {
29
- return this.sessions.get(sessionId)?.token ?? null;
30
- }
31
- deleteSession(sessionId) {
32
- this.sessions.delete(sessionId);
33
- }
34
- verifyToken(token) {
35
- try {
36
- const payload = this.jwtService.verify(token, {
37
- secret: this.jwtSecret.secret,
38
- });
39
- return {
40
- userId: payload.sub,
41
- username: payload.username,
42
- email: payload.email || '',
43
- roleId: payload.roleId || null,
44
- };
45
- }
46
- catch {
47
- return null;
48
- }
49
- }
50
- };
51
- exports.McpSessionService = McpSessionService;
52
- exports.McpSessionService = McpSessionService = __decorate([
53
- (0, common_1.Injectable)(),
54
- __metadata("design:paramtypes", [jwt_1.JwtService,
55
- jwt_secret_service_1.JwtSecretService])
56
- ], McpSessionService);
57
- //# sourceMappingURL=mcp-session.service.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"mcp-session.service.js","sourceRoot":"","sources":["../../../../src/api/mcp-api/mcp-session.service.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,2CAA4C;AAC5C,qCAAyC;AACzC,+EAAwE;AAUjE,IAAM,iBAAiB,GAAvB,MAAM,iBAAiB;IAM5B,YACmB,UAAsB,EACtB,SAA2B;QAD3B,eAAU,GAAV,UAAU,CAAY;QACtB,cAAS,GAAT,SAAS,CAAkB;QAP7B,aAAQ,GAGrB,IAAI,GAAG,EAAE,CAAC;IAKX,CAAC;IAEG,aAAa,CAClB,SAAiB,EACjB,KAAa,EACb,OAAmB;QAEnB,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,SAAS,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,CAAC;IACnD,CAAC;IAEM,UAAU,CAAC,SAAiB;QACjC,OAAO,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,OAAO,IAAI,IAAI,CAAC;IACvD,CAAC;IAEM,QAAQ,CAAC,SAAiB;QAC/B,OAAO,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,KAAK,IAAI,IAAI,CAAC;IACrD,CAAC;IAEM,aAAa,CAAC,SAAiB;QACpC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;IAClC,CAAC;IAEM,WAAW,CAAC,KAAa;QAC9B,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,KAAK,EAAE;gBAC5C,MAAM,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM;aAC9B,CAAC,CAAC;YACH,OAAO;gBACL,MAAM,EAAE,OAAO,CAAC,GAAG;gBACnB,QAAQ,EAAE,OAAO,CAAC,QAAQ;gBAC1B,KAAK,EAAE,OAAO,CAAC,KAAK,IAAI,EAAE;gBAC1B,MAAM,EAAE,OAAO,CAAC,MAAM,IAAI,IAAI;aAC/B,CAAC;QACJ,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC;CACF,CAAA;AA9CY,8CAAiB;4BAAjB,iBAAiB;IAD7B,IAAA,mBAAU,GAAE;qCAQoB,gBAAU;QACX,qCAAgB;GARnC,iBAAiB,CA8C7B"}
@@ -1,12 +0,0 @@
1
- import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
2
- import { AuthApiService } from '../../../features/auth/commands/auth-api.service';
3
- import { McpSessionService } from '../mcp-session.service';
4
- import { McpAuthHelpers, McpToolRegistrar } from '../types';
5
- export declare class AuthTools implements McpToolRegistrar {
6
- private readonly mcpSession;
7
- private readonly authApi;
8
- private readonly publicUrl?;
9
- constructor(mcpSession: McpSessionService, authApi: AuthApiService, publicUrl?: string | undefined);
10
- register(server: McpServer, _auth: McpAuthHelpers): void;
11
- private getSessionFromContext;
12
- }
@@ -1,182 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.AuthTools = void 0;
4
- const zod_1 = require("zod");
5
- class AuthTools {
6
- constructor(mcpSession, authApi, publicUrl) {
7
- this.mcpSession = mcpSession;
8
- this.authApi = authApi;
9
- this.publicUrl = publicUrl;
10
- }
11
- register(server, _auth) {
12
- server.registerTool('login', {
13
- description: 'Authenticate with Revisium API using username and password',
14
- inputSchema: {
15
- username: zod_1.z.string().describe('Username'),
16
- password: zod_1.z.string().describe('Password'),
17
- },
18
- annotations: { readOnlyHint: true },
19
- }, async ({ username, password }, context) => {
20
- try {
21
- const result = await this.authApi.login({
22
- emailOrUsername: username,
23
- password,
24
- });
25
- const session = this.mcpSession.verifyToken(result.accessToken);
26
- if (!session) {
27
- throw new Error('Failed to verify token');
28
- }
29
- if (context.sessionId) {
30
- this.mcpSession.createSession(context.sessionId, result.accessToken, session);
31
- }
32
- return {
33
- content: [
34
- {
35
- type: 'text',
36
- text: JSON.stringify({
37
- success: true,
38
- user: {
39
- id: session.userId,
40
- username: session.username,
41
- email: session.email,
42
- },
43
- }, null, 2),
44
- },
45
- ],
46
- };
47
- }
48
- catch (error) {
49
- return {
50
- content: [
51
- {
52
- type: 'text',
53
- text: JSON.stringify({
54
- success: false,
55
- error: error instanceof Error
56
- ? error.message
57
- : 'Authentication failed',
58
- }, null, 2),
59
- },
60
- ],
61
- };
62
- }
63
- });
64
- server.registerTool('login_with_token', {
65
- description: 'Authenticate with Revisium API using an existing JWT access token. Useful when already logged in via UI (Google, GitHub, or password).',
66
- inputSchema: {
67
- accessToken: zod_1.z.string().describe('JWT access token from Revisium UI'),
68
- },
69
- annotations: { readOnlyHint: true },
70
- }, async ({ accessToken }, context) => {
71
- try {
72
- const session = this.mcpSession.verifyToken(accessToken);
73
- if (!session) {
74
- return {
75
- content: [
76
- {
77
- type: 'text',
78
- text: JSON.stringify({
79
- success: false,
80
- error: 'Invalid or expired token',
81
- }, null, 2),
82
- },
83
- ],
84
- };
85
- }
86
- if (context.sessionId) {
87
- this.mcpSession.createSession(context.sessionId, accessToken, session);
88
- }
89
- return {
90
- content: [
91
- {
92
- type: 'text',
93
- text: JSON.stringify({
94
- success: true,
95
- user: {
96
- id: session.userId,
97
- username: session.username,
98
- email: session.email,
99
- },
100
- }, null, 2),
101
- },
102
- ],
103
- };
104
- }
105
- catch (error) {
106
- return {
107
- content: [
108
- {
109
- type: 'text',
110
- text: JSON.stringify({
111
- success: false,
112
- error: error instanceof Error
113
- ? error.message
114
- : 'Token verification failed',
115
- }, null, 2),
116
- },
117
- ],
118
- };
119
- }
120
- });
121
- server.registerTool('me', {
122
- description: 'Get current authenticated user information',
123
- inputSchema: {},
124
- annotations: { readOnlyHint: true },
125
- }, async (_args, context) => {
126
- const session = this.getSessionFromContext(context);
127
- if (!session) {
128
- const tokenUrl = this.publicUrl
129
- ? `${this.publicUrl}/get-mcp-token`
130
- : null;
131
- const authOptions = {
132
- authenticated: false,
133
- message: 'Not authenticated. ASK THE USER which authentication method they prefer:',
134
- options: [
135
- {
136
- method: 'login_with_token',
137
- description: '[Recommended] Get access token from Revisium UI and use login_with_token',
138
- tokenUrl,
139
- usage: 'login_with_token(accessToken)',
140
- },
141
- {
142
- method: 'login',
143
- description: 'Ask user for their username and password, then use login',
144
- usage: 'login(username, password)',
145
- },
146
- ],
147
- important: 'DO NOT assume or guess credentials. Always ask the user first.',
148
- };
149
- return {
150
- content: [
151
- {
152
- type: 'text',
153
- text: JSON.stringify(authOptions, null, 2),
154
- },
155
- ],
156
- };
157
- }
158
- return {
159
- content: [
160
- {
161
- type: 'text',
162
- text: JSON.stringify({
163
- authenticated: true,
164
- user: {
165
- id: session.userId,
166
- username: session.username,
167
- email: session.email,
168
- },
169
- }, null, 2),
170
- },
171
- ],
172
- };
173
- });
174
- }
175
- getSessionFromContext(context) {
176
- if (!context?.sessionId)
177
- return null;
178
- return this.mcpSession.getSession(context.sessionId);
179
- }
180
- }
181
- exports.AuthTools = AuthTools;
182
- //# sourceMappingURL=auth.tools.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"auth.tools.js","sourceRoot":"","sources":["../../../../../src/api/mcp-api/tools/auth.tools.ts"],"names":[],"mappings":"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"}