@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.
- package/README.md +4 -3
- package/dist/package.json +35 -14
- package/dist/prisma/migrations/20260222210834_add_oauth/migration.sql +110 -0
- package/dist/prisma/schema.prisma +72 -0
- package/dist/src/__generated__/client/browser.d.ts +4 -0
- package/dist/src/__generated__/client/browser.js.map +1 -1
- package/dist/src/__generated__/client/client.d.ts +9 -5
- package/dist/src/__generated__/client/client.js.map +1 -1
- package/dist/src/__generated__/client/commonInputTypes.d.ts +49 -3
- package/dist/src/__generated__/client/enums.js +2 -2
- package/dist/src/__generated__/client/enums.js.map +1 -1
- package/dist/src/__generated__/client/internal/class.d.ts +15 -3
- package/dist/src/__generated__/client/internal/class.js +19 -22
- package/dist/src/__generated__/client/internal/class.js.map +1 -1
- package/dist/src/__generated__/client/internal/prismaNamespace.d.ts +394 -10
- package/dist/src/__generated__/client/internal/prismaNamespace.js +117 -41
- package/dist/src/__generated__/client/internal/prismaNamespace.js.map +1 -1
- package/dist/src/__generated__/client/internal/prismaNamespaceBrowser.d.ts +87 -4
- package/dist/src/__generated__/client/internal/prismaNamespaceBrowser.js +112 -37
- package/dist/src/__generated__/client/internal/prismaNamespaceBrowser.js.map +1 -1
- package/dist/src/__generated__/client/models/Branch.d.ts +48 -48
- package/dist/src/__generated__/client/models/Endpoint.d.ts +54 -54
- package/dist/src/__generated__/client/models/EndpointVersion.d.ts +35 -35
- package/dist/src/__generated__/client/models/Instance.d.ts +25 -25
- package/dist/src/__generated__/client/models/OAuthAccessToken.d.ts +777 -0
- package/dist/src/__generated__/client/models/OAuthAccessToken.js +3 -0
- package/dist/src/__generated__/client/models/OAuthAccessToken.js.map +1 -0
- package/dist/src/__generated__/client/models/OAuthAuthorizationCode.d.ts +862 -0
- package/dist/src/__generated__/client/models/OAuthAuthorizationCode.js +3 -0
- package/dist/src/__generated__/client/models/OAuthAuthorizationCode.js.map +1 -0
- package/dist/src/__generated__/client/models/OAuthClient.d.ts +748 -0
- package/dist/src/__generated__/client/models/OAuthClient.js +3 -0
- package/dist/src/__generated__/client/models/OAuthClient.js.map +1 -0
- package/dist/src/__generated__/client/models/OAuthRefreshToken.d.ts +818 -0
- package/dist/src/__generated__/client/models/OAuthRefreshToken.js +3 -0
- package/dist/src/__generated__/client/models/OAuthRefreshToken.js.map +1 -0
- package/dist/src/__generated__/client/models/Organization.d.ts +30 -30
- package/dist/src/__generated__/client/models/Permission.d.ts +47 -47
- package/dist/src/__generated__/client/models/Project.d.ts +54 -54
- package/dist/src/__generated__/client/models/Revision.d.ts +75 -75
- package/dist/src/__generated__/client/models/Role.d.ts +51 -51
- package/dist/src/__generated__/client/models/Row.d.ts +77 -77
- package/dist/src/__generated__/client/models/Table.d.ts +58 -58
- package/dist/src/__generated__/client/models/User.d.ts +422 -62
- package/dist/src/__generated__/client/models/UserOrganization.d.ts +49 -49
- package/dist/src/__generated__/client/models/UserProject.d.ts +49 -49
- package/dist/src/__generated__/client/models.d.ts +4 -0
- package/dist/src/__generated__/client/sql/$DbEnums.d.ts +2 -2
- package/dist/src/__generated__/client/sql/countRowChangesBetweenRevisions.d.ts +9 -2
- package/dist/src/__generated__/client/sql/countRowChangesBetweenRevisions.js +1 -1
- package/dist/src/__generated__/client/sql/countRowChangesBetweenRevisions.js.map +1 -1
- package/dist/src/__generated__/client/sql/countTableDiffsBetweenRevisions.d.ts +7 -2
- package/dist/src/__generated__/client/sql/countTableDiffsBetweenRevisions.js +1 -1
- package/dist/src/__generated__/client/sql/countTableDiffsBetweenRevisions.js.map +1 -1
- package/dist/src/__generated__/client/sql/getRowChangesPaginatedBetweenRevisions.d.ts +11 -2
- package/dist/src/__generated__/client/sql/getRowChangesPaginatedBetweenRevisions.js +1 -1
- package/dist/src/__generated__/client/sql/getRowChangesPaginatedBetweenRevisions.js.map +1 -1
- package/dist/src/__generated__/client/sql/getRowChangesStatsBetweenRevisions.d.ts +7 -2
- package/dist/src/__generated__/client/sql/getRowChangesStatsBetweenRevisions.js +1 -1
- package/dist/src/__generated__/client/sql/getRowChangesStatsBetweenRevisions.js.map +1 -1
- package/dist/src/__generated__/client/sql/getTableDiffsPaginatedBetweenRevisions.d.ts +9 -2
- package/dist/src/__generated__/client/sql/getTableDiffsPaginatedBetweenRevisions.js +1 -1
- package/dist/src/__generated__/client/sql/getTableDiffsPaginatedBetweenRevisions.js.map +1 -1
- package/dist/src/__generated__/client/sql/getTableDiffsStatsBetweenRevisions.d.ts +6 -2
- package/dist/src/__generated__/client/sql/getTableDiffsStatsBetweenRevisions.js +1 -1
- package/dist/src/__generated__/client/sql/getTableDiffsStatsBetweenRevisions.js.map +1 -1
- package/dist/src/__generated__/client/sql/hasRowDiffsBetweenRevisions.d.ts +6 -2
- package/dist/src/__generated__/client/sql/hasRowDiffsBetweenRevisions.js +1 -1
- package/dist/src/__generated__/client/sql/hasRowDiffsBetweenRevisions.js.map +1 -1
- package/dist/src/__generated__/client/sql/hasTableDiffsBetweenRevisions.d.ts +1 -1
- package/dist/src/__generated__/client/sql/hasTableDiffsBetweenRevisions.js +1 -1
- package/dist/src/__generated__/client/sql/hasTableDiffsBetweenRevisions.js.map +1 -1
- package/dist/src/__generated__/client/sql.d.ts +9 -9
- package/dist/src/__generated__/client/sql.js.map +1 -1
- package/dist/src/api/graphql-api/branch/model/branch.model.d.ts +6 -5
- package/dist/src/api/graphql-api/branch/model/branch.model.js +5 -5
- package/dist/src/api/graphql-api/branch/model/branch.model.js.map +1 -1
- package/dist/src/api/graphql-api/branch/model/parent-branch.model.d.ts +3 -2
- package/dist/src/api/graphql-api/branch/model/parent-branch.model.js +2 -2
- package/dist/src/api/graphql-api/branch/model/parent-branch.model.js.map +1 -1
- package/dist/src/api/graphql-api/endpoint/model/endpoint.model.d.ts +2 -1
- package/dist/src/api/graphql-api/endpoint/model/endpoint.model.js +1 -1
- package/dist/src/api/graphql-api/endpoint/model/endpoint.model.js.map +1 -1
- package/dist/src/api/graphql-api/project/model/project.model.d.ts +3 -2
- package/dist/src/api/graphql-api/project/model/project.model.js +2 -2
- package/dist/src/api/graphql-api/project/model/project.model.js.map +1 -1
- package/dist/src/api/graphql-api/revision/model/child-branch.model.d.ts +3 -2
- package/dist/src/api/graphql-api/revision/model/child-branch.model.js +2 -2
- package/dist/src/api/graphql-api/revision/model/child-branch.model.js.map +1 -1
- package/dist/src/api/graphql-api/revision/model/revision.model.d.ts +4 -3
- package/dist/src/api/graphql-api/revision/model/revision.model.js +3 -3
- package/dist/src/api/graphql-api/revision/model/revision.model.js.map +1 -1
- package/dist/src/api/graphql-api/row/inputs/get-rows.input.d.ts +2 -0
- package/dist/src/api/graphql-api/row/inputs/get-rows.input.js +8 -0
- package/dist/src/api/graphql-api/row/inputs/get-rows.input.js.map +1 -1
- package/dist/src/api/graphql-api/row/model/row.model.d.ts +3 -2
- package/dist/src/api/graphql-api/row/model/row.model.js +2 -2
- package/dist/src/api/graphql-api/row/model/row.model.js.map +1 -1
- package/dist/src/api/graphql-api/share/model/relation.type.d.ts +1 -0
- package/dist/src/api/graphql-api/share/model/relation.type.js +3 -0
- package/dist/src/api/graphql-api/share/model/relation.type.js.map +1 -0
- package/dist/src/api/graphql-api/table/model/table.model.d.ts +3 -2
- package/dist/src/api/graphql-api/table/model/table.model.js +2 -2
- package/dist/src/api/graphql-api/table/model/table.model.js.map +1 -1
- package/dist/src/api/graphql-api/views/input/update-table-views.input.d.ts +1 -0
- package/dist/src/api/graphql-api/views/input/update-table-views.input.js +4 -0
- package/dist/src/api/graphql-api/views/input/update-table-views.input.js.map +1 -1
- package/dist/src/api/graphql-api/views/model/view-column.model.d.ts +1 -0
- package/dist/src/api/graphql-api/views/model/view-column.model.js +4 -0
- package/dist/src/api/graphql-api/views/model/view-column.model.js.map +1 -1
- package/dist/src/api/mcp-api/mcp-auth.service.d.ts +21 -0
- package/dist/src/api/mcp-api/mcp-auth.service.js +82 -0
- package/dist/src/api/mcp-api/mcp-auth.service.js.map +1 -0
- package/dist/src/api/mcp-api/mcp-server.service.d.ts +5 -8
- package/dist/src/api/mcp-api/mcp-server.service.js +50 -86
- package/dist/src/api/mcp-api/mcp-server.service.js.map +1 -1
- package/dist/src/api/mcp-api/mcp.controller.d.ts +7 -4
- package/dist/src/api/mcp-api/mcp.controller.js +74 -78
- package/dist/src/api/mcp-api/mcp.controller.js.map +1 -1
- package/dist/src/api/mcp-api/mcp.module.js +4 -2
- package/dist/src/api/mcp-api/mcp.module.js.map +1 -1
- package/dist/src/api/mcp-api/resources/schema.resource.js +6 -12
- package/dist/src/api/mcp-api/resources/schema.resource.js.map +1 -1
- package/dist/src/api/mcp-api/tools/branch.tools.js +116 -12
- package/dist/src/api/mcp-api/tools/branch.tools.js.map +1 -1
- package/dist/src/api/mcp-api/tools/endpoint.tools.js +12 -18
- package/dist/src/api/mcp-api/tools/endpoint.tools.js.map +1 -1
- package/dist/src/api/mcp-api/tools/file.tools.js +2 -3
- package/dist/src/api/mcp-api/tools/file.tools.js.map +1 -1
- package/dist/src/api/mcp-api/tools/index.d.ts +0 -1
- package/dist/src/api/mcp-api/tools/index.js +1 -3
- package/dist/src/api/mcp-api/tools/index.js.map +1 -1
- package/dist/src/api/mcp-api/tools/migration.tools.js +4 -6
- package/dist/src/api/mcp-api/tools/migration.tools.js.map +1 -1
- package/dist/src/api/mcp-api/tools/organization.tools.js +5 -7
- package/dist/src/api/mcp-api/tools/organization.tools.js.map +1 -1
- package/dist/src/api/mcp-api/tools/project.tools.js +39 -8
- package/dist/src/api/mcp-api/tools/project.tools.js.map +1 -1
- package/dist/src/api/mcp-api/tools/revision-changes.tools.js +6 -9
- package/dist/src/api/mcp-api/tools/revision-changes.tools.js.map +1 -1
- package/dist/src/api/mcp-api/tools/revision.tools.js +27 -6
- package/dist/src/api/mcp-api/tools/revision.tools.js.map +1 -1
- package/dist/src/api/mcp-api/tools/row.tools.d.ts +39 -0
- package/dist/src/api/mcp-api/tools/row.tools.js +129 -34
- package/dist/src/api/mcp-api/tools/row.tools.js.map +1 -1
- package/dist/src/api/mcp-api/tools/table.tools.js +55 -28
- package/dist/src/api/mcp-api/tools/table.tools.js.map +1 -1
- package/dist/src/api/mcp-api/tools/user.tools.js +3 -5
- package/dist/src/api/mcp-api/tools/user.tools.js.map +1 -1
- package/dist/src/api/mcp-api/types.d.ts +1 -5
- package/dist/src/features/branch/commands/handlers/delete-branch.handler.js +1 -2
- package/dist/src/features/branch/commands/handlers/delete-branch.handler.js.map +1 -1
- package/dist/src/features/branch/quieries/handlers/get-branch.handler.js +1 -4
- package/dist/src/features/branch/quieries/handlers/get-branch.handler.js.map +1 -1
- package/dist/src/features/draft/commands/handlers/api-create-revision.handler.js +2 -2
- package/dist/src/features/draft/commands/handlers/api-create-revision.handler.js.map +1 -1
- package/dist/src/features/draft/commands/handlers/create-rows.handler.js.map +1 -1
- package/dist/src/features/draft/commands/handlers/patch-rows.handler.js.map +1 -1
- package/dist/src/features/draft/commands/handlers/transactional/internal-rename-row.handler.js.map +1 -1
- package/dist/src/features/draft/commands/handlers/transactional/validate-schema.handler.js +4 -1
- package/dist/src/features/draft/commands/handlers/transactional/validate-schema.handler.js.map +1 -1
- package/dist/src/features/draft/commands/handlers/update-rows.handler.js.map +1 -1
- package/dist/src/features/draft/commands/handlers/update-table.handler.js +4 -1
- package/dist/src/features/draft/commands/handlers/update-table.handler.js.map +1 -1
- package/dist/src/features/draft-revision/commands/handlers/draft-revision-recompute-has-changes.handler.js +6 -5
- package/dist/src/features/draft-revision/commands/handlers/draft-revision-recompute-has-changes.handler.js.map +1 -1
- package/dist/src/features/oauth/oauth-authorization.service.d.ts +22 -0
- package/dist/src/features/oauth/oauth-authorization.service.js +78 -0
- package/dist/src/features/oauth/oauth-authorization.service.js.map +1 -0
- package/dist/src/features/oauth/oauth-client.service.d.ts +25 -0
- package/dist/src/features/oauth/oauth-client.service.js +82 -0
- package/dist/src/features/oauth/oauth-client.service.js.map +1 -0
- package/dist/src/features/oauth/oauth-token.service.d.ts +27 -0
- package/dist/src/features/oauth/oauth-token.service.js +190 -0
- package/dist/src/features/oauth/oauth-token.service.js.map +1 -0
- package/dist/src/features/oauth/oauth.controller.d.ts +88 -0
- package/dist/src/features/oauth/oauth.controller.js +285 -0
- package/dist/src/features/oauth/oauth.controller.js.map +1 -0
- package/dist/src/features/oauth/oauth.module.d.ts +2 -0
- package/dist/src/features/oauth/oauth.module.js +29 -0
- package/dist/src/features/oauth/oauth.module.js.map +1 -0
- package/dist/src/features/plugin/file/file.plugin.js.map +1 -1
- package/dist/src/features/plugin/plugin.service.js.map +1 -1
- package/dist/src/features/plugin/row-created-at/row-created-at.plugin.js.map +1 -1
- package/dist/src/features/plugin/row-created-id/row-created-id.plugin.js.map +1 -1
- package/dist/src/features/plugin/row-hash/row-hash.plugin.js.map +1 -1
- package/dist/src/features/plugin/row-id/row-id.plugin.js.map +1 -1
- package/dist/src/features/plugin/row-published-at/row-published-at.plugin.js.map +1 -1
- package/dist/src/features/plugin/row-schema-hash/row-schema-hash.plugin.js.map +1 -1
- package/dist/src/features/plugin/row-updated-at/row-updated-at.plugin.js.map +1 -1
- package/dist/src/features/plugin/row-version-id/row-version-id.plugin.js.map +1 -1
- package/dist/src/features/project/commands/handlers/delete-project.handler.js +1 -4
- package/dist/src/features/project/commands/handlers/delete-project.handler.js.map +1 -1
- package/dist/src/features/project/commands/handlers/update-project.handler.js +1 -4
- package/dist/src/features/project/commands/handlers/update-project.handler.js.map +1 -1
- package/dist/src/features/project/queries/handlers/get-project.handler.js +1 -4
- package/dist/src/features/project/queries/handlers/get-project.handler.js.map +1 -1
- package/dist/src/features/row/queries/handlers/get-rows.handler.d.ts +0 -2
- package/dist/src/features/row/queries/handlers/get-rows.handler.js +7 -13
- package/dist/src/features/row/queries/handlers/get-rows.handler.js.map +1 -1
- package/dist/src/features/row/queries/handlers/resolve-row-count-foreign-keys-to.handler.js.map +1 -1
- package/dist/src/features/row/queries/handlers/resolve-row-foreign-keys-to.handler.js.map +1 -1
- package/dist/src/features/row/services/system-column-mapping.service.js +5 -1
- package/dist/src/features/row/services/system-column-mapping.service.js.map +1 -1
- package/dist/src/features/row/utils/get-keyset-pagination.d.ts +17 -0
- package/dist/src/features/row/utils/get-keyset-pagination.js +61 -0
- package/dist/src/features/row/utils/get-keyset-pagination.js.map +1 -0
- package/dist/src/features/row/utils/get-rows-sql.d.ts +2 -1
- package/dist/src/features/row/utils/get-rows-sql.js +76 -21
- package/dist/src/features/row/utils/get-rows-sql.js.map +1 -1
- package/dist/src/features/share/schema/table-views-schema.js +1 -0
- package/dist/src/features/share/schema/table-views-schema.js.map +1 -1
- package/dist/src/features/share/utils/validateUrlLikeId/reserved-names.d.ts +1 -1
- package/dist/src/features/share/utils/validateUrlLikeId/reserved-names.js +3 -0
- package/dist/src/features/share/utils/validateUrlLikeId/reserved-names.js.map +1 -1
- package/dist/src/features/share/views-migration.service.js.map +1 -1
- package/dist/src/features/sub-schema/queries/handlers/get-sub-schema-items.handler.js.map +1 -1
- package/dist/src/features/views/services/view-validation.service.js +10 -1
- package/dist/src/features/views/services/view-validation.service.js.map +1 -1
- package/dist/src/features/views/types/views.types.d.ts +1 -0
- package/dist/src/features/views/types/views.types.js.map +1 -1
- package/dist/src/infrastructure/clean/clean.service.d.ts +1 -0
- package/dist/src/infrastructure/clean/clean.service.js +23 -0
- package/dist/src/infrastructure/clean/clean.service.js.map +1 -1
- package/dist/src/infrastructure/clean/commands/handlers/clean-oauth-expired-access-tokens.handler.d.ts +8 -0
- package/dist/src/infrastructure/clean/commands/handlers/clean-oauth-expired-access-tokens.handler.js +33 -0
- package/dist/src/infrastructure/clean/commands/handlers/clean-oauth-expired-access-tokens.handler.js.map +1 -0
- package/dist/src/infrastructure/clean/commands/handlers/clean-oauth-expired-codes.handler.d.ts +8 -0
- package/dist/src/infrastructure/clean/commands/handlers/clean-oauth-expired-codes.handler.js +33 -0
- package/dist/src/infrastructure/clean/commands/handlers/clean-oauth-expired-codes.handler.js.map +1 -0
- package/dist/src/infrastructure/clean/commands/handlers/clean-oauth-expired-refresh-tokens.handler.d.ts +8 -0
- package/dist/src/infrastructure/clean/commands/handlers/clean-oauth-expired-refresh-tokens.handler.js +33 -0
- package/dist/src/infrastructure/clean/commands/handlers/clean-oauth-expired-refresh-tokens.handler.js.map +1 -0
- package/dist/src/infrastructure/clean/commands/handlers/index.d.ts +4 -1
- package/dist/src/infrastructure/clean/commands/handlers/index.js +10 -1
- package/dist/src/infrastructure/clean/commands/handlers/index.js.map +1 -1
- package/dist/src/infrastructure/clean/commands/impl/clean-oauth-expired-access-tokens.command.d.ts +2 -0
- package/dist/src/infrastructure/clean/commands/impl/clean-oauth-expired-access-tokens.command.js +7 -0
- package/dist/src/infrastructure/clean/commands/impl/clean-oauth-expired-access-tokens.command.js.map +1 -0
- package/dist/src/infrastructure/clean/commands/impl/clean-oauth-expired-codes.command.d.ts +2 -0
- package/dist/src/infrastructure/clean/commands/impl/clean-oauth-expired-codes.command.js +7 -0
- package/dist/src/infrastructure/clean/commands/impl/clean-oauth-expired-codes.command.js.map +1 -0
- package/dist/src/infrastructure/clean/commands/impl/clean-oauth-expired-refresh-tokens.command.d.ts +2 -0
- package/dist/src/infrastructure/clean/commands/impl/clean-oauth-expired-refresh-tokens.command.js +7 -0
- package/dist/src/infrastructure/clean/commands/impl/clean-oauth-expired-refresh-tokens.command.js.map +1 -0
- package/dist/tsconfig.build.tsbuildinfo +1 -1
- package/package.json +35 -14
- package/dist/src/api/mcp-api/mcp-session.service.d.ts +0 -19
- package/dist/src/api/mcp-api/mcp-session.service.js +0 -57
- package/dist/src/api/mcp-api/mcp-session.service.js.map +0 -1
- package/dist/src/api/mcp-api/tools/auth.tools.d.ts +0 -12
- package/dist/src/api/mcp-api/tools/auth.tools.js +0 -182
- 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,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":";;;;;;;;;;;;AAAA,2CAA4C;AAC5C,2CAA+C;AAC/C,mCAAgC;AAChC,qCAAwE;AAExE,2DAA4E;AAC5E,2FAA2G;AAQ3G,sDAAoE;
|
|
1
|
+
{"version":3,"file":"file.plugin.js","sourceRoot":"","sources":["../../../../../src/features/plugin/file/file.plugin.ts"],"names":[],"mappings":"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"}
|