@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
@@ -0,0 +1,190 @@
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.OAuthTokenService = void 0;
13
+ const common_1 = require("@nestjs/common");
14
+ const config_1 = require("@nestjs/config");
15
+ const node_crypto_1 = require("node:crypto");
16
+ const prisma_service_1 = require("../../infrastructure/database/prisma.service");
17
+ const ACCESS_TOKEN_PREFIX = 'oat_';
18
+ const REFRESH_TOKEN_PREFIX = 'ort_';
19
+ const ACCESS_TOKEN_EXPIRY_HOURS = 1;
20
+ const REFRESH_TOKEN_EXPIRY_DAYS = 30;
21
+ const DEFAULT_MCP_ACCESS_TOKEN_EXPIRY_DAYS = 30;
22
+ const MCP_REFRESH_TOKEN_EXPIRY_DAYS = 90;
23
+ let OAuthTokenService = class OAuthTokenService {
24
+ constructor(prisma, configService) {
25
+ this.prisma = prisma;
26
+ this.configService = configService;
27
+ const parsed = Number.parseInt(this.configService.get('MCP_ACCESS_TOKEN_EXPIRY_DAYS') ?? '', 10);
28
+ this.mcpAccessTokenExpiryDays =
29
+ parsed > 0 ? parsed : DEFAULT_MCP_ACCESS_TOKEN_EXPIRY_DAYS;
30
+ }
31
+ async createTokens(clientId, userId, scope) {
32
+ const accessToken = ACCESS_TOKEN_PREFIX + (0, node_crypto_1.randomBytes)(36).toString('hex');
33
+ const refreshToken = REFRESH_TOKEN_PREFIX + (0, node_crypto_1.randomBytes)(36).toString('hex');
34
+ const isMcpScope = scope?.split(' ').includes('mcp') ?? false;
35
+ const accessExpiresAt = new Date();
36
+ if (isMcpScope) {
37
+ accessExpiresAt.setDate(accessExpiresAt.getDate() + this.mcpAccessTokenExpiryDays);
38
+ }
39
+ else {
40
+ accessExpiresAt.setHours(accessExpiresAt.getHours() + ACCESS_TOKEN_EXPIRY_HOURS);
41
+ }
42
+ const refreshExpiryDays = isMcpScope
43
+ ? MCP_REFRESH_TOKEN_EXPIRY_DAYS
44
+ : REFRESH_TOKEN_EXPIRY_DAYS;
45
+ const refreshExpiresAt = new Date();
46
+ refreshExpiresAt.setDate(refreshExpiresAt.getDate() + refreshExpiryDays);
47
+ const expiresIn = isMcpScope
48
+ ? this.mcpAccessTokenExpiryDays * 86400
49
+ : ACCESS_TOKEN_EXPIRY_HOURS * 3600;
50
+ await this.prisma.$transaction([
51
+ this.prisma.oAuthAccessToken.create({
52
+ data: {
53
+ tokenHash: this.hashToken(accessToken),
54
+ clientId,
55
+ userId,
56
+ scope: scope ?? null,
57
+ expiresAt: accessExpiresAt,
58
+ },
59
+ }),
60
+ this.prisma.oAuthRefreshToken.create({
61
+ data: {
62
+ tokenHash: this.hashToken(refreshToken),
63
+ clientId,
64
+ userId,
65
+ scope: scope ?? null,
66
+ expiresAt: refreshExpiresAt,
67
+ },
68
+ }),
69
+ ]);
70
+ return {
71
+ accessToken,
72
+ refreshToken,
73
+ expiresIn,
74
+ tokenType: 'Bearer',
75
+ };
76
+ }
77
+ async validateAccessToken(token) {
78
+ const tokenHash = this.hashToken(token);
79
+ const accessToken = await this.prisma.oAuthAccessToken.findUnique({
80
+ where: { tokenHash },
81
+ include: {
82
+ user: {
83
+ select: {
84
+ id: true,
85
+ username: true,
86
+ email: true,
87
+ roleId: true,
88
+ },
89
+ },
90
+ },
91
+ });
92
+ if (!accessToken) {
93
+ throw new common_1.UnauthorizedException('Invalid access token');
94
+ }
95
+ if (accessToken.revokedAt) {
96
+ throw new common_1.UnauthorizedException('Access token has been revoked');
97
+ }
98
+ if (accessToken.expiresAt < new Date()) {
99
+ throw new common_1.UnauthorizedException('Access token expired');
100
+ }
101
+ return {
102
+ userId: accessToken.user.id,
103
+ username: accessToken.user.username ?? '',
104
+ email: accessToken.user.email ?? '',
105
+ roleId: accessToken.user.roleId,
106
+ };
107
+ }
108
+ async refreshTokens(refreshToken, clientId) {
109
+ const tokenHash = this.hashToken(refreshToken);
110
+ const result = await this.prisma.oAuthRefreshToken.updateMany({
111
+ where: {
112
+ tokenHash,
113
+ clientId,
114
+ revokedAt: null,
115
+ expiresAt: { gt: new Date() },
116
+ },
117
+ data: { revokedAt: new Date() },
118
+ });
119
+ if (result.count === 0) {
120
+ throw new common_1.UnauthorizedException('Invalid or expired refresh token');
121
+ }
122
+ const existing = await this.prisma.oAuthRefreshToken.findUnique({
123
+ where: { tokenHash },
124
+ });
125
+ if (!existing) {
126
+ throw new common_1.UnauthorizedException('Invalid refresh token');
127
+ }
128
+ return this.createTokens(clientId, existing.userId, existing.scope ?? undefined);
129
+ }
130
+ async revokeToken(token, tokenTypeHint, clientId) {
131
+ const tokenHash = this.hashToken(token);
132
+ if (tokenTypeHint === 'refresh_token' ||
133
+ token.startsWith(REFRESH_TOKEN_PREFIX)) {
134
+ const revoked = await this.revokeRefreshTokenWithCascade(tokenHash, clientId);
135
+ if (revoked) {
136
+ return;
137
+ }
138
+ }
139
+ if (tokenTypeHint === 'access_token' ||
140
+ token.startsWith(ACCESS_TOKEN_PREFIX)) {
141
+ await this.revokeAccessToken(tokenHash, clientId);
142
+ return;
143
+ }
144
+ const accessResult = await this.revokeAccessToken(tokenHash, clientId);
145
+ if (accessResult.count === 0) {
146
+ await this.revokeRefreshTokenWithCascade(tokenHash, clientId);
147
+ }
148
+ }
149
+ async revokeAccessToken(tokenHash, clientId) {
150
+ return this.prisma.oAuthAccessToken.updateMany({
151
+ where: { tokenHash, clientId, revokedAt: null },
152
+ data: { revokedAt: new Date() },
153
+ });
154
+ }
155
+ async revokeRefreshTokenWithCascade(tokenHash, clientId) {
156
+ return this.prisma.$transaction(async (tx) => {
157
+ const result = await tx.oAuthRefreshToken.updateMany({
158
+ where: { tokenHash, clientId, revokedAt: null },
159
+ data: { revokedAt: new Date() },
160
+ });
161
+ if (result.count === 0) {
162
+ return false;
163
+ }
164
+ const refreshToken = await tx.oAuthRefreshToken.findUnique({
165
+ where: { tokenHash },
166
+ });
167
+ if (refreshToken) {
168
+ await tx.oAuthAccessToken.updateMany({
169
+ where: {
170
+ clientId: refreshToken.clientId,
171
+ userId: refreshToken.userId,
172
+ revokedAt: null,
173
+ },
174
+ data: { revokedAt: new Date() },
175
+ });
176
+ }
177
+ return true;
178
+ });
179
+ }
180
+ hashToken(token) {
181
+ return (0, node_crypto_1.createHash)('sha256').update(token).digest('hex');
182
+ }
183
+ };
184
+ exports.OAuthTokenService = OAuthTokenService;
185
+ exports.OAuthTokenService = OAuthTokenService = __decorate([
186
+ (0, common_1.Injectable)(),
187
+ __metadata("design:paramtypes", [prisma_service_1.PrismaService,
188
+ config_1.ConfigService])
189
+ ], OAuthTokenService);
190
+ //# sourceMappingURL=oauth-token.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"oauth-token.service.js","sourceRoot":"","sources":["../../../../src/features/oauth/oauth-token.service.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,88 @@
1
+ import { ConfigService } from '@nestjs/config';
2
+ import { JwtService } from '@nestjs/jwt';
3
+ import { Request, Response } from 'express';
4
+ import { JwtSecretService } from '../../features/auth/jwt-secret.service';
5
+ import { OAuthClientService } from './oauth-client.service';
6
+ import { OAuthAuthorizationService } from './oauth-authorization.service';
7
+ import { OAuthTokenService } from './oauth-token.service';
8
+ export declare class OAuthController {
9
+ private readonly configService;
10
+ private readonly jwtService;
11
+ private readonly jwtSecret;
12
+ private readonly clientService;
13
+ private readonly authorizationService;
14
+ private readonly tokenService;
15
+ private readonly publicUrl;
16
+ constructor(configService: ConfigService, jwtService: JwtService, jwtSecret: JwtSecretService, clientService: OAuthClientService, authorizationService: OAuthAuthorizationService, tokenService: OAuthTokenService);
17
+ getAuthorizationServerMetadata(): {
18
+ issuer: string;
19
+ authorization_endpoint: string;
20
+ token_endpoint: string;
21
+ registration_endpoint: string;
22
+ response_types_supported: string[];
23
+ grant_types_supported: string[];
24
+ code_challenge_methods_supported: string[];
25
+ token_endpoint_auth_methods_supported: string[];
26
+ revocation_endpoint: string;
27
+ revocation_endpoint_auth_methods_supported: string[];
28
+ scopes_supported: string[];
29
+ };
30
+ getProtectedResourceMetadata(): {
31
+ resource: string;
32
+ authorization_servers: string[];
33
+ bearer_methods_supported: string[];
34
+ scopes_supported: string[];
35
+ };
36
+ registerClient(body: {
37
+ client_name: string;
38
+ redirect_uris: string[];
39
+ grant_types?: string[];
40
+ }): Promise<{
41
+ client_id: string;
42
+ client_secret: string;
43
+ client_name: string;
44
+ redirect_uris: string[];
45
+ grant_types: string[];
46
+ }>;
47
+ handleAuthorizeGet(query: {
48
+ client_id: string;
49
+ redirect_uri: string;
50
+ code_challenge: string;
51
+ code_challenge_method: string;
52
+ response_type: string;
53
+ state: string;
54
+ scope?: string;
55
+ }, res: Response): Promise<void>;
56
+ handleAuthorize(req: Request, body: {
57
+ client_id: string;
58
+ redirect_uri: string;
59
+ code_challenge: string;
60
+ state: string;
61
+ scope?: string;
62
+ }): Promise<{
63
+ redirect_uri: string;
64
+ }>;
65
+ revokeToken(body: {
66
+ token: string;
67
+ token_type_hint?: string;
68
+ client_id?: string;
69
+ client_secret?: string;
70
+ }): Promise<{}>;
71
+ exchangeToken(body: {
72
+ grant_type: string;
73
+ code?: string;
74
+ client_id?: string;
75
+ client_secret?: string;
76
+ code_verifier?: string;
77
+ redirect_uri?: string;
78
+ refresh_token?: string;
79
+ }): Promise<{
80
+ access_token: string;
81
+ token_type: string;
82
+ expires_in: number;
83
+ refresh_token: string;
84
+ }>;
85
+ private handleAuthorizationCodeGrant;
86
+ private handleRefreshTokenGrant;
87
+ private extractUserIdFromBearer;
88
+ }
@@ -0,0 +1,285 @@
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
+ var __param = (this && this.__param) || function (paramIndex, decorator) {
12
+ return function (target, key) { decorator(target, key, paramIndex); }
13
+ };
14
+ Object.defineProperty(exports, "__esModule", { value: true });
15
+ exports.OAuthController = void 0;
16
+ const common_1 = require("@nestjs/common");
17
+ const config_1 = require("@nestjs/config");
18
+ const jwt_1 = require("@nestjs/jwt");
19
+ const swagger_1 = require("@nestjs/swagger");
20
+ const jwt_secret_service_1 = require("../auth/jwt-secret.service");
21
+ const oauth_client_service_1 = require("./oauth-client.service");
22
+ const oauth_authorization_service_1 = require("./oauth-authorization.service");
23
+ const oauth_token_service_1 = require("./oauth-token.service");
24
+ let OAuthController = class OAuthController {
25
+ constructor(configService, jwtService, jwtSecret, clientService, authorizationService, tokenService) {
26
+ this.configService = configService;
27
+ this.jwtService = jwtService;
28
+ this.jwtSecret = jwtSecret;
29
+ this.clientService = clientService;
30
+ this.authorizationService = authorizationService;
31
+ this.tokenService = tokenService;
32
+ this.publicUrl =
33
+ this.configService.get('PUBLIC_URL') || 'http://localhost:8080';
34
+ }
35
+ getAuthorizationServerMetadata() {
36
+ return {
37
+ issuer: this.publicUrl,
38
+ authorization_endpoint: `${this.publicUrl}/oauth/authorize`,
39
+ token_endpoint: `${this.publicUrl}/oauth/token`,
40
+ registration_endpoint: `${this.publicUrl}/oauth/register`,
41
+ response_types_supported: ['code'],
42
+ grant_types_supported: ['authorization_code', 'refresh_token'],
43
+ code_challenge_methods_supported: ['S256'],
44
+ token_endpoint_auth_methods_supported: ['client_secret_post'],
45
+ revocation_endpoint: `${this.publicUrl}/oauth/revoke`,
46
+ revocation_endpoint_auth_methods_supported: ['client_secret_post'],
47
+ scopes_supported: ['mcp'],
48
+ };
49
+ }
50
+ getProtectedResourceMetadata() {
51
+ return {
52
+ resource: this.publicUrl,
53
+ authorization_servers: [this.publicUrl],
54
+ bearer_methods_supported: ['header'],
55
+ scopes_supported: ['mcp'],
56
+ };
57
+ }
58
+ async registerClient(body) {
59
+ if (!body.client_name) {
60
+ throw new common_1.BadRequestException('client_name is required');
61
+ }
62
+ if (!body.redirect_uris || body.redirect_uris.length === 0) {
63
+ throw new common_1.BadRequestException('redirect_uris is required');
64
+ }
65
+ const result = await this.clientService.registerClient({
66
+ clientName: body.client_name,
67
+ redirectUris: body.redirect_uris,
68
+ grantTypes: body.grant_types,
69
+ });
70
+ return {
71
+ client_id: result.clientId,
72
+ client_secret: result.clientSecret,
73
+ client_name: result.clientName,
74
+ redirect_uris: body.redirect_uris,
75
+ grant_types: body.grant_types ?? ['authorization_code', 'refresh_token'],
76
+ };
77
+ }
78
+ async handleAuthorizeGet(query, res) {
79
+ const { client_id: clientId, redirect_uri: redirectUri, code_challenge: codeChallenge, code_challenge_method: codeChallengeMethod, response_type: responseType, state, scope, } = query;
80
+ if (!clientId || !redirectUri || !codeChallenge || !state) {
81
+ throw new common_1.BadRequestException('Missing required parameters');
82
+ }
83
+ if (!responseType || responseType !== 'code') {
84
+ throw new common_1.BadRequestException('response_type is required and must be "code"');
85
+ }
86
+ if (!codeChallengeMethod || codeChallengeMethod !== 'S256') {
87
+ throw new common_1.BadRequestException('code_challenge_method is required and must be "S256"');
88
+ }
89
+ const client = await this.clientService.findClient(clientId);
90
+ if (!client) {
91
+ throw new common_1.BadRequestException('Unknown client_id');
92
+ }
93
+ if (!client.redirectUris.includes(redirectUri)) {
94
+ throw new common_1.BadRequestException('Invalid redirect_uri');
95
+ }
96
+ const params = new URLSearchParams({
97
+ client_id: clientId,
98
+ client_name: client.clientName,
99
+ redirect_uri: redirectUri,
100
+ code_challenge: codeChallenge,
101
+ state,
102
+ });
103
+ if (scope) {
104
+ params.set('scope', scope);
105
+ }
106
+ res.redirect(302, `${this.publicUrl}/authorize?${params.toString()}`);
107
+ }
108
+ async handleAuthorize(req, body) {
109
+ const { client_id, redirect_uri, code_challenge, state, scope } = body;
110
+ if (!client_id || !redirect_uri || !code_challenge || !state) {
111
+ throw new common_1.BadRequestException('Missing required fields');
112
+ }
113
+ const client = await this.clientService.findClient(client_id);
114
+ if (!client) {
115
+ throw new common_1.BadRequestException('Unknown client_id');
116
+ }
117
+ if (!client.redirectUris.includes(redirect_uri)) {
118
+ throw new common_1.BadRequestException('Invalid redirect_uri');
119
+ }
120
+ const userId = this.extractUserIdFromBearer(req);
121
+ const code = await this.authorizationService.createAuthorizationCode({
122
+ clientId: client_id,
123
+ userId,
124
+ redirectUri: redirect_uri,
125
+ codeChallenge: code_challenge,
126
+ scope,
127
+ });
128
+ const redirectUrl = new URL(redirect_uri);
129
+ redirectUrl.searchParams.set('code', code);
130
+ redirectUrl.searchParams.set('state', state);
131
+ return {
132
+ redirect_uri: redirectUrl.toString(),
133
+ };
134
+ }
135
+ async revokeToken(body) {
136
+ const { token, token_type_hint, client_id, client_secret } = body;
137
+ if (!token) {
138
+ throw new common_1.BadRequestException('token is required');
139
+ }
140
+ if (!client_id || !client_secret) {
141
+ throw new common_1.BadRequestException('Client authentication required');
142
+ }
143
+ const validSecret = await this.clientService.validateClientSecret(client_id, client_secret);
144
+ if (!validSecret) {
145
+ throw new common_1.BadRequestException('Invalid client credentials');
146
+ }
147
+ await this.tokenService.revokeToken(token, token_type_hint, client_id);
148
+ return {};
149
+ }
150
+ async exchangeToken(body) {
151
+ const grantType = body.grant_type;
152
+ if (grantType === 'authorization_code') {
153
+ return this.handleAuthorizationCodeGrant(body);
154
+ }
155
+ if (grantType === 'refresh_token') {
156
+ return this.handleRefreshTokenGrant(body);
157
+ }
158
+ throw new common_1.BadRequestException(`Unsupported grant_type: ${grantType}`);
159
+ }
160
+ async handleAuthorizationCodeGrant(body) {
161
+ const { code, client_id, client_secret, code_verifier, redirect_uri } = body;
162
+ if (!code ||
163
+ !client_id ||
164
+ !client_secret ||
165
+ !code_verifier ||
166
+ !redirect_uri) {
167
+ throw new common_1.BadRequestException('Missing required parameters for authorization_code grant');
168
+ }
169
+ const validSecret = await this.clientService.validateClientSecret(client_id, client_secret);
170
+ if (!validSecret) {
171
+ throw new common_1.BadRequestException('Invalid client credentials');
172
+ }
173
+ const { userId, scope } = await this.authorizationService.exchangeCode({
174
+ code,
175
+ clientId: client_id,
176
+ codeVerifier: code_verifier,
177
+ redirectUri: redirect_uri,
178
+ });
179
+ const tokens = await this.tokenService.createTokens(client_id, userId, scope ?? undefined);
180
+ return {
181
+ access_token: tokens.accessToken,
182
+ token_type: tokens.tokenType,
183
+ expires_in: tokens.expiresIn,
184
+ refresh_token: tokens.refreshToken,
185
+ };
186
+ }
187
+ async handleRefreshTokenGrant(body) {
188
+ const { client_id, client_secret, refresh_token } = body;
189
+ if (!client_id || !client_secret || !refresh_token) {
190
+ throw new common_1.BadRequestException('Missing required parameters for refresh_token grant');
191
+ }
192
+ const validSecret = await this.clientService.validateClientSecret(client_id, client_secret);
193
+ if (!validSecret) {
194
+ throw new common_1.BadRequestException('Invalid client credentials');
195
+ }
196
+ const tokens = await this.tokenService.refreshTokens(refresh_token, client_id);
197
+ return {
198
+ access_token: tokens.accessToken,
199
+ token_type: tokens.tokenType,
200
+ expires_in: tokens.expiresIn,
201
+ refresh_token: tokens.refreshToken,
202
+ };
203
+ }
204
+ extractUserIdFromBearer(req) {
205
+ const authHeader = req.headers['authorization'];
206
+ if (!authHeader?.startsWith('Bearer ')) {
207
+ throw new common_1.UnauthorizedException('Missing Authorization header');
208
+ }
209
+ const token = authHeader.slice(7);
210
+ try {
211
+ const decoded = this.jwtService.verify(token, {
212
+ secret: this.jwtSecret.secret,
213
+ });
214
+ if (!decoded?.sub) {
215
+ throw new common_1.UnauthorizedException('Invalid token');
216
+ }
217
+ return decoded.sub;
218
+ }
219
+ catch {
220
+ throw new common_1.UnauthorizedException('Invalid or expired token');
221
+ }
222
+ }
223
+ };
224
+ exports.OAuthController = OAuthController;
225
+ __decorate([
226
+ (0, common_1.Get)('.well-known/oauth-authorization-server'),
227
+ __metadata("design:type", Function),
228
+ __metadata("design:paramtypes", []),
229
+ __metadata("design:returntype", void 0)
230
+ ], OAuthController.prototype, "getAuthorizationServerMetadata", null);
231
+ __decorate([
232
+ (0, common_1.Get)('.well-known/oauth-protected-resource'),
233
+ __metadata("design:type", Function),
234
+ __metadata("design:paramtypes", []),
235
+ __metadata("design:returntype", void 0)
236
+ ], OAuthController.prototype, "getProtectedResourceMetadata", null);
237
+ __decorate([
238
+ (0, common_1.Post)('oauth/register'),
239
+ __param(0, (0, common_1.Body)()),
240
+ __metadata("design:type", Function),
241
+ __metadata("design:paramtypes", [Object]),
242
+ __metadata("design:returntype", Promise)
243
+ ], OAuthController.prototype, "registerClient", null);
244
+ __decorate([
245
+ (0, common_1.Get)('oauth/authorize'),
246
+ __param(0, (0, common_1.Query)()),
247
+ __param(1, (0, common_1.Res)()),
248
+ __metadata("design:type", Function),
249
+ __metadata("design:paramtypes", [Object, Object]),
250
+ __metadata("design:returntype", Promise)
251
+ ], OAuthController.prototype, "handleAuthorizeGet", null);
252
+ __decorate([
253
+ (0, common_1.Post)('oauth/authorize'),
254
+ __param(0, (0, common_1.Req)()),
255
+ __param(1, (0, common_1.Body)()),
256
+ __metadata("design:type", Function),
257
+ __metadata("design:paramtypes", [Object, Object]),
258
+ __metadata("design:returntype", Promise)
259
+ ], OAuthController.prototype, "handleAuthorize", null);
260
+ __decorate([
261
+ (0, common_1.Post)('oauth/revoke'),
262
+ (0, common_1.HttpCode)(200),
263
+ __param(0, (0, common_1.Body)()),
264
+ __metadata("design:type", Function),
265
+ __metadata("design:paramtypes", [Object]),
266
+ __metadata("design:returntype", Promise)
267
+ ], OAuthController.prototype, "revokeToken", null);
268
+ __decorate([
269
+ (0, common_1.Post)('oauth/token'),
270
+ __param(0, (0, common_1.Body)()),
271
+ __metadata("design:type", Function),
272
+ __metadata("design:paramtypes", [Object]),
273
+ __metadata("design:returntype", Promise)
274
+ ], OAuthController.prototype, "exchangeToken", null);
275
+ exports.OAuthController = OAuthController = __decorate([
276
+ (0, swagger_1.ApiExcludeController)(),
277
+ (0, common_1.Controller)(),
278
+ __metadata("design:paramtypes", [config_1.ConfigService,
279
+ jwt_1.JwtService,
280
+ jwt_secret_service_1.JwtSecretService,
281
+ oauth_client_service_1.OAuthClientService,
282
+ oauth_authorization_service_1.OAuthAuthorizationService,
283
+ oauth_token_service_1.OAuthTokenService])
284
+ ], OAuthController);
285
+ //# sourceMappingURL=oauth.controller.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"oauth.controller.js","sourceRoot":"","sources":["../../../../src/features/oauth/oauth.controller.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare class OAuthModule {
2
+ }
@@ -0,0 +1,29 @@
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
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ exports.OAuthModule = void 0;
10
+ const common_1 = require("@nestjs/common");
11
+ const config_1 = require("@nestjs/config");
12
+ const auth_module_1 = require("../auth/auth.module");
13
+ const database_module_1 = require("../../infrastructure/database/database.module");
14
+ const oauth_client_service_1 = require("./oauth-client.service");
15
+ const oauth_authorization_service_1 = require("./oauth-authorization.service");
16
+ const oauth_token_service_1 = require("./oauth-token.service");
17
+ const oauth_controller_1 = require("./oauth.controller");
18
+ let OAuthModule = class OAuthModule {
19
+ };
20
+ exports.OAuthModule = OAuthModule;
21
+ exports.OAuthModule = OAuthModule = __decorate([
22
+ (0, common_1.Module)({
23
+ imports: [config_1.ConfigModule, database_module_1.DatabaseModule, auth_module_1.AuthModule],
24
+ controllers: [oauth_controller_1.OAuthController],
25
+ providers: [oauth_client_service_1.OAuthClientService, oauth_authorization_service_1.OAuthAuthorizationService, oauth_token_service_1.OAuthTokenService],
26
+ exports: [oauth_token_service_1.OAuthTokenService],
27
+ })
28
+ ], OAuthModule);
29
+ //# sourceMappingURL=oauth.module.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"oauth.module.js","sourceRoot":"","sources":["../../../../src/features/oauth/oauth.module.ts"],"names":[],"mappings":";;;;;;;;;AAAA,2CAAwC;AACxC,2CAA8C;AAC9C,qDAA2D;AAC3D,mFAA6E;AAC7E,iEAA4D;AAC5D,+EAA0E;AAC1E,+DAA0D;AAC1D,yDAAqD;AAQ9C,IAAM,WAAW,GAAjB,MAAM,WAAW;CAAG,CAAA;AAAd,kCAAW;sBAAX,WAAW;IANvB,IAAA,eAAM,EAAC;QACN,OAAO,EAAE,CAAC,qBAAY,EAAE,gCAAc,EAAE,wBAAU,CAAC;QACnD,WAAW,EAAE,CAAC,kCAAe,CAAC;QAC9B,SAAS,EAAE,CAAC,yCAAkB,EAAE,uDAAyB,EAAE,uCAAiB,CAAC;QAC7E,OAAO,EAAE,CAAC,uCAAiB,CAAC;KAC7B,CAAC;GACW,WAAW,CAAG"}
@@ -1 +1 @@
1
- {"version":3,"file":"file.plugin.js","sourceRoot":"","sources":["../../../../../src/features/plugin/file/file.plugin.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"file.plugin.js","sourceRoot":"","sources":["../../../../../src/features/plugin/file/file.plugin.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,2CAA4C;AAC5C,2CAA+C;AAC/C,mCAAgC;AAChC,qCAAwE;AAExE,2DAA4E;AAC5E,2FAA2G;AAQ3G,sDAAoE;AAGpE,4EAAmE;AAG5D,IAAM,UAAU,GAAhB,MAAM,UAAU;IAGrB,YACmB,SAAoB,EACrC,aAA4B;QADX,cAAS,GAAT,SAAS,CAAW;QAGrC,MAAM,QAAQ,GAAG,aAAa,CAAC,GAAG,CAAC,6BAA6B,CAAC,CAAC;QAElE,IAAI,CAAC,cAAc,GAAG,QAAQ,IAAI,EAAE,CAAC;IACvC,CAAC;IAED,IAAW,WAAW;QACpB,OAAO,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC;IACpC,CAAC;IAEM,KAAK,CAAC,cAAc,CACzB,OAAsC;QAEtC,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC;YACtB,IAAA,4BAAW,EAAC,OAAO,CAAC,UAAU,EAAE,CAAC,IAAI,EAAE,EAAE;gBACvC,IAAA,2DAA0B,EAAC,IAAI,EAAE,OAAO,CAAC,UAAU,CAAC,CAAC;gBACrD,IAAI,CAAC,GAAG,GAAG,EAAE,CAAC;YAChB,CAAC,CAAC,CAAC;QACL,CAAC;aAAM,CAAC;YACN,IAAA,4BAAW,EAAC,OAAO,CAAC,UAAU,EAAE,CAAC,IAAI,EAAE,EAAE;gBACvC,IAAI,CAAC,cAAc,EAAE,CAAC;gBACtB,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC;YAC9B,CAAC,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAEM,KAAK,CAAC,cAAc,CACzB,OAAsC;QAEtC,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC;YACtB,IAAA,4BAAW,EAAC,OAAO,CAAC,UAAU,EAAE,CAAC,IAAI,EAAE,EAAE;gBACvC,IAAA,2DAA0B,EAAC,IAAI,EAAE,OAAO,CAAC,UAAU,CAAC,CAAC;gBACrD,IAAI,CAAC,GAAG,GAAG,EAAE,CAAC;YAChB,CAAC,CAAC,CAAC;QACL,CAAC;aAAM,CAAC;YACN,MAAM,aAAa,GAAgC,IAAI,GAAG,EAAE,CAAC;YAE7D,IAAA,4BAAW,EAAC,OAAO,CAAC,kBAAkB,EAAE,CAAC,IAAI,EAAE,EAAE;gBAC/C,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;YACvC,CAAC,CAAC,CAAC;YAEH,IAAA,4BAAW,EAAC,OAAO,CAAC,UAAU,EAAE,CAAC,IAAI,EAAE,EAAE;gBACvC,MAAM,YAAY,GAAG,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;gBAEpD,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;oBAChB,IAAI,CAAC,YAAY,EAAE,CAAC;wBAClB,MAAM,IAAI,KAAK,CAAC,QAAQ,IAAI,CAAC,MAAM,iBAAiB,CAAC,CAAC;oBACxD,CAAC;oBAED,IAAI,CAAC,cAAc,CAAC,YAAY,CAAC,CAAC;oBAClC,IAAI,CAAC,GAAG,GAAG,EAAE,CAAC;gBAChB,CAAC;qBAAM,CAAC;oBACN,IAAI,CAAC,cAAc,EAAE,CAAC;oBACtB,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC;gBAC9B,CAAC;YACH,CAAC,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAEM,KAAK,CAAC,WAAW,CAAC,OAAmC;QAC1D,KAAK,MAAM,GAAG,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;YAC/B,MAAM,UAAU,GAAG,IAAA,0BAAoB,EACrC,OAAO,CAAC,WAAW,EACnB,EAAE,EACF,GAAG,CAAC,IAAiB,CACtB,CAAC;YAEF,IAAA,4BAAW,EAAC,UAAU,EAAE,CAAC,IAAI,EAAE,EAAE;gBAC/B,IAAI,IAAI,CAAC,MAAM,KAAK,mBAAU,CAAC,QAAQ,EAAE,CAAC;oBACxC,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBACpC,CAAC;YACH,CAAC,CAAC,CAAC;YAEH,GAAG,CAAC,IAAI,GAAG,UAAU,CAAC,aAAa,EAAE,CAAC;QACxC,CAAC;IACH,CAAC;IAEM,KAAK,CAAC,gBAAgB,CAC3B,OAAwC;QAExC,KAAK,MAAM,GAAG,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;YAC/B,MAAM,UAAU,GAAG,IAAA,0BAAoB,EACrC,OAAO,CAAC,WAAW,EACnB,EAAE,EACF,GAAG,CAAC,IAAiB,CACtB,CAAC;YAEF,IAAA,4BAAW,EAAC,UAAU,EAAE,CAAC,IAAI,EAAE,EAAE;gBAC/B,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;oBACjB,IAAI,CAAC,cAAc,EAAE,CAAC;oBACtB,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC;gBAC9B,CAAC;YACH,CAAC,CAAC,CAAC;YAEH,GAAG,CAAC,IAAI,GAAG,UAAU,CAAC,aAAa,EAAE,CAAC;QACxC,CAAC;IACH,CAAC;IAEM,KAAK,CAAC,UAAU,CAAC,EACtB,UAAU,EACV,MAAM,EACN,IAAI,GAKL;QACC,MAAM,KAAK,GAAqB,EAAE,CAAC;QAEnC,IAAA,4BAAW,EAAC,UAAU,EAAE,CAAC,IAAI,EAAE,EAAE;YAC/B,IAAI,IAAI,CAAC,MAAM,KAAK,MAAM,EAAE,CAAC;gBAC3B,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACnB,CAAC;QACH,CAAC,CAAC,CAAC;QAEH,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACvB,MAAM,IAAI,KAAK,CAAC,wBAAwB,CAAC,CAAC;QAC5C,CAAC;QAED,MAAM,SAAS,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;QAC3B,MAAM,SAAS,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;QACjC,OAAO,SAAS,CAAC;IACnB,CAAC;IAEM,MAAM,CAAC,IAAY;QACxB,OAAO,SAAS,CAAC,GAAG,IAAI,CAAC,cAAc,IAAI,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACvE,CAAC;IAEM,WAAW,CAAC,IAAY;QAC7B,OAAO,SAAS,CAAC,GAAG,IAAI,EAAE,CAAC,CAAC;IAC9B,CAAC;IAEO,gBAAgB,CAAC,KAAqB;QAC5C,KAAK,CAAC,MAAM,GAAG,mBAAU,CAAC,KAAK,CAAC;QAChC,KAAK,CAAC,MAAM,GAAG,IAAA,eAAM,EAAC,kBAAS,CAAC,CAAC;IACnC,CAAC;CACF,CAAA;AA9IY,gCAAU;qBAAV,UAAU;IADtB,IAAA,mBAAU,GAAE;qCAKmB,sBAAS;QACtB,sBAAa;GALnB,UAAU,CA8ItB"}