@rekog/mcp-nest 1.9.10 → 2.0.0-alpha.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 +76 -29
- package/dist/index.d.ts +0 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +0 -1
- package/dist/index.js.map +1 -1
- package/dist/mcp/decorators/constants.d.ts +1 -0
- package/dist/mcp/decorators/constants.d.ts.map +1 -1
- package/dist/mcp/decorators/constants.js +2 -1
- package/dist/mcp/decorators/constants.js.map +1 -1
- package/dist/mcp/decorators/index.d.ts +3 -1
- package/dist/mcp/decorators/index.d.ts.map +1 -1
- package/dist/mcp/decorators/index.js +3 -1
- package/dist/mcp/decorators/index.js.map +1 -1
- package/dist/mcp/decorators/mcp-controller.decorator.d.ts +6 -0
- package/dist/mcp/decorators/mcp-controller.decorator.d.ts.map +1 -0
- package/dist/mcp/decorators/mcp-controller.decorator.js +43 -0
- package/dist/mcp/decorators/mcp-controller.decorator.js.map +1 -0
- package/dist/mcp/decorators/mcp-message-pattern.d.ts +3 -0
- package/dist/mcp/decorators/mcp-message-pattern.d.ts.map +1 -0
- package/dist/mcp/decorators/mcp-message-pattern.js +13 -0
- package/dist/mcp/decorators/mcp-message-pattern.js.map +1 -0
- package/dist/mcp/decorators/prompt.decorator.d.ts +1 -1
- package/dist/mcp/decorators/prompt.decorator.d.ts.map +1 -1
- package/dist/mcp/decorators/prompt.decorator.js +2 -1
- package/dist/mcp/decorators/prompt.decorator.js.map +1 -1
- package/dist/mcp/decorators/public.decorator.js.map +1 -1
- package/dist/mcp/decorators/raw-request.decorator.d.ts +2 -0
- package/dist/mcp/decorators/raw-request.decorator.d.ts.map +1 -0
- package/dist/mcp/decorators/raw-request.decorator.js +6 -0
- package/dist/mcp/decorators/raw-request.decorator.js.map +1 -0
- package/dist/mcp/decorators/resource-template.decorator.d.ts +1 -1
- package/dist/mcp/decorators/resource-template.decorator.d.ts.map +1 -1
- package/dist/mcp/decorators/resource-template.decorator.js +2 -1
- package/dist/mcp/decorators/resource-template.decorator.js.map +1 -1
- package/dist/mcp/decorators/resource.decorator.d.ts +1 -1
- package/dist/mcp/decorators/resource.decorator.d.ts.map +1 -1
- package/dist/mcp/decorators/resource.decorator.js +2 -1
- package/dist/mcp/decorators/resource.decorator.js.map +1 -1
- package/dist/mcp/decorators/tool.decorator.d.ts +1 -3
- package/dist/mcp/decorators/tool.decorator.d.ts.map +1 -1
- package/dist/mcp/decorators/tool.decorator.js +2 -1
- package/dist/mcp/decorators/tool.decorator.js.map +1 -1
- package/dist/mcp/filters/mcp-exception.filter.d.ts +6 -0
- package/dist/mcp/filters/mcp-exception.filter.d.ts.map +1 -0
- package/dist/mcp/filters/mcp-exception.filter.js +26 -0
- package/dist/mcp/filters/mcp-exception.filter.js.map +1 -0
- package/dist/mcp/index.d.ts +11 -7
- package/dist/mcp/index.d.ts.map +1 -1
- package/dist/mcp/index.js +11 -7
- package/dist/mcp/index.js.map +1 -1
- package/dist/mcp/interfaces/authenticated-user.interface.d.ts +9 -0
- package/dist/mcp/interfaces/authenticated-user.interface.d.ts.map +1 -0
- package/dist/{authz/interfaces/request-with-user.js → mcp/interfaces/authenticated-user.interface.js} +1 -1
- package/dist/mcp/interfaces/authenticated-user.interface.js.map +1 -0
- package/dist/mcp/interfaces/dynamic-prompt.interface.d.ts +1 -1
- package/dist/mcp/interfaces/dynamic-prompt.interface.d.ts.map +1 -1
- package/dist/mcp/interfaces/dynamic-prompt.interface.js.map +1 -1
- package/dist/mcp/interfaces/dynamic-resource.interface.d.ts +1 -1
- package/dist/mcp/interfaces/dynamic-resource.interface.d.ts.map +1 -1
- package/dist/mcp/interfaces/dynamic-resource.interface.js.map +1 -1
- package/dist/mcp/interfaces/dynamic-tool.interface.d.ts +1 -1
- package/dist/mcp/interfaces/dynamic-tool.interface.d.ts.map +1 -1
- package/dist/mcp/interfaces/dynamic-tool.interface.js.map +1 -1
- package/dist/mcp/interfaces/index.d.ts +2 -2
- package/dist/mcp/interfaces/index.d.ts.map +1 -1
- package/dist/mcp/interfaces/index.js +0 -3
- package/dist/mcp/interfaces/index.js.map +1 -1
- package/dist/mcp/services/tool-authorization.service.d.ts +7 -5
- package/dist/mcp/services/tool-authorization.service.d.ts.map +1 -1
- package/dist/mcp/services/tool-authorization.service.js +9 -6
- package/dist/mcp/services/tool-authorization.service.js.map +1 -1
- package/dist/mcp/transport/mcp-context.d.ts +34 -0
- package/dist/mcp/transport/mcp-context.d.ts.map +1 -0
- package/dist/mcp/transport/mcp-context.js +74 -0
- package/dist/mcp/transport/mcp-context.js.map +1 -0
- package/dist/mcp/transport/mcp-http-handler.d.ts +7 -0
- package/dist/mcp/transport/mcp-http-handler.d.ts.map +1 -0
- package/dist/mcp/transport/mcp-http-handler.js +5 -0
- package/dist/mcp/transport/mcp-http-handler.js.map +1 -0
- package/dist/mcp/transport/mcp-server-options.interface.d.ts +23 -0
- package/dist/mcp/transport/mcp-server-options.interface.d.ts.map +1 -0
- package/dist/{authz/providers/oauth-provider.interface.js → mcp/transport/mcp-server-options.interface.js} +1 -1
- package/dist/mcp/transport/mcp-server-options.interface.js.map +1 -0
- package/dist/mcp/transport/mcp-transport.constants.d.ts +19 -0
- package/dist/mcp/transport/mcp-transport.constants.d.ts.map +1 -0
- package/dist/mcp/transport/mcp-transport.constants.js +21 -0
- package/dist/mcp/transport/mcp-transport.constants.js.map +1 -0
- package/dist/mcp/transport/mcp-transport.interface.d.ts +17 -0
- package/dist/mcp/transport/mcp-transport.interface.d.ts.map +1 -0
- package/dist/{authz/interfaces/oauth-common.interface.js → mcp/transport/mcp-transport.interface.js} +1 -1
- package/dist/mcp/transport/mcp-transport.interface.js.map +1 -0
- package/dist/mcp/transport/mcp.strategy.d.ts +56 -0
- package/dist/mcp/transport/mcp.strategy.d.ts.map +1 -0
- package/dist/mcp/transport/mcp.strategy.js +446 -0
- package/dist/mcp/transport/mcp.strategy.js.map +1 -0
- package/dist/mcp/transport/resource-matcher.d.ts +13 -0
- package/dist/mcp/transport/resource-matcher.d.ts.map +1 -0
- package/dist/mcp/transport/resource-matcher.js +83 -0
- package/dist/mcp/transport/resource-matcher.js.map +1 -0
- package/dist/mcp/transport/streamable-http.controller.d.ts +16 -0
- package/dist/mcp/transport/streamable-http.controller.d.ts.map +1 -0
- package/dist/mcp/transport/streamable-http.controller.js +98 -0
- package/dist/mcp/transport/streamable-http.controller.js.map +1 -0
- package/dist/mcp/transport/transports/index.d.ts +3 -0
- package/dist/mcp/transport/transports/index.d.ts.map +1 -0
- package/dist/{authz → mcp/transport/transports}/index.js +2 -10
- package/dist/mcp/transport/transports/index.js.map +1 -0
- package/dist/mcp/transport/transports/read-body.d.ts +3 -0
- package/dist/mcp/transport/transports/read-body.d.ts.map +1 -0
- package/dist/mcp/transport/transports/read-body.js +32 -0
- package/dist/mcp/transport/transports/read-body.js.map +1 -0
- package/dist/mcp/transport/transports/stdio.transport.d.ts +9 -0
- package/dist/mcp/transport/transports/stdio.transport.d.ts.map +1 -0
- package/dist/mcp/transport/transports/stdio.transport.js +27 -0
- package/dist/mcp/transport/transports/stdio.transport.js.map +1 -0
- package/dist/mcp/transport/transports/streamable-http.transport.d.ts +33 -0
- package/dist/mcp/transport/transports/streamable-http.transport.d.ts.map +1 -0
- package/dist/mcp/transport/transports/streamable-http.transport.js +216 -0
- package/dist/mcp/transport/transports/streamable-http.transport.js.map +1 -0
- package/dist/mcp/utils/mcp-logger.factory.d.ts +6 -2
- package/dist/mcp/utils/mcp-logger.factory.d.ts.map +1 -1
- package/dist/mcp/utils/mcp-logger.factory.js.map +1 -1
- package/package.json +3 -66
- package/src/index.ts +0 -1
- package/src/mcp/decorators/constants.ts +1 -0
- package/src/mcp/decorators/index.ts +3 -1
- package/src/mcp/decorators/mcp-controller.decorator.ts +126 -0
- package/src/mcp/decorators/mcp-message-pattern.ts +38 -0
- package/src/mcp/decorators/prompt.decorator.ts +6 -2
- package/src/mcp/decorators/public.decorator.ts +3 -3
- package/src/mcp/decorators/raw-request.decorator.ts +32 -0
- package/src/mcp/decorators/resource-template.decorator.ts +6 -2
- package/src/mcp/decorators/resource.decorator.ts +6 -2
- package/src/mcp/decorators/tool.decorator.ts +6 -3
- package/src/mcp/filters/mcp-exception.filter.ts +47 -0
- package/src/mcp/index.ts +13 -7
- package/src/mcp/interfaces/authenticated-user.interface.ts +22 -0
- package/src/mcp/interfaces/dynamic-prompt.interface.ts +1 -1
- package/src/mcp/interfaces/dynamic-resource.interface.ts +1 -1
- package/src/mcp/interfaces/dynamic-tool.interface.ts +2 -2
- package/src/mcp/interfaces/index.ts +3 -7
- package/src/mcp/services/tool-authorization.service.ts +52 -72
- package/src/mcp/transport/mcp-context.ts +138 -0
- package/src/mcp/transport/mcp-http-handler.ts +32 -0
- package/src/mcp/transport/mcp-server-options.interface.ts +75 -0
- package/src/mcp/transport/mcp-transport.constants.ts +99 -0
- package/src/mcp/transport/mcp-transport.interface.ts +50 -0
- package/src/mcp/transport/mcp.strategy.ts +752 -0
- package/src/mcp/transport/resource-matcher.ts +107 -0
- package/src/mcp/transport/streamable-http.controller.ts +114 -0
- package/src/mcp/transport/transports/index.ts +2 -0
- package/src/mcp/transport/transports/read-body.ts +39 -0
- package/src/mcp/transport/transports/stdio.transport.ts +35 -0
- package/src/mcp/transport/transports/streamable-http.transport.ts +384 -0
- package/src/mcp/utils/mcp-logger.factory.spec.ts +8 -22
- package/src/mcp/utils/mcp-logger.factory.ts +13 -2
- package/dist/authz/guards/jwt-auth.guard.d.ts +0 -19
- package/dist/authz/guards/jwt-auth.guard.d.ts.map +0 -1
- package/dist/authz/guards/jwt-auth.guard.js +0 -108
- package/dist/authz/guards/jwt-auth.guard.js.map +0 -1
- package/dist/authz/index.d.ts +0 -11
- package/dist/authz/index.d.ts.map +0 -1
- package/dist/authz/index.js.map +0 -1
- package/dist/authz/interfaces/oauth-common.interface.d.ts +0 -21
- package/dist/authz/interfaces/oauth-common.interface.d.ts.map +0 -1
- package/dist/authz/interfaces/oauth-common.interface.js.map +0 -1
- package/dist/authz/interfaces/request-with-user.d.ts +0 -13
- package/dist/authz/interfaces/request-with-user.d.ts.map +0 -1
- package/dist/authz/interfaces/request-with-user.js.map +0 -1
- package/dist/authz/mcp-oauth.controller.d.ts +0 -81
- package/dist/authz/mcp-oauth.controller.d.ts.map +0 -1
- package/dist/authz/mcp-oauth.controller.js +0 -540
- package/dist/authz/mcp-oauth.controller.js.map +0 -1
- package/dist/authz/mcp-oauth.module.d.ts +0 -12
- package/dist/authz/mcp-oauth.module.d.ts.map +0 -1
- package/dist/authz/mcp-oauth.module.js +0 -271
- package/dist/authz/mcp-oauth.module.js.map +0 -1
- package/dist/authz/providers/azure-ad.provider.d.ts +0 -3
- package/dist/authz/providers/azure-ad.provider.d.ts.map +0 -1
- package/dist/authz/providers/azure-ad.provider.js +0 -37
- package/dist/authz/providers/azure-ad.provider.js.map +0 -1
- package/dist/authz/providers/github.provider.d.ts +0 -3
- package/dist/authz/providers/github.provider.d.ts.map +0 -1
- package/dist/authz/providers/github.provider.js +0 -24
- package/dist/authz/providers/github.provider.js.map +0 -1
- package/dist/authz/providers/google.provider.d.ts +0 -3
- package/dist/authz/providers/google.provider.d.ts.map +0 -1
- package/dist/authz/providers/google.provider.js +0 -25
- package/dist/authz/providers/google.provider.js.map +0 -1
- package/dist/authz/providers/oauth-provider.interface.d.ts +0 -107
- package/dist/authz/providers/oauth-provider.interface.d.ts.map +0 -1
- package/dist/authz/providers/oauth-provider.interface.js.map +0 -1
- package/dist/authz/services/client.service.d.ts +0 -12
- package/dist/authz/services/client.service.d.ts.map +0 -1
- package/dist/authz/services/client.service.js +0 -81
- package/dist/authz/services/client.service.js.map +0 -1
- package/dist/authz/services/jwt-token.service.d.ts +0 -37
- package/dist/authz/services/jwt-token.service.d.ts.map +0 -1
- package/dist/authz/services/jwt-token.service.js +0 -182
- package/dist/authz/services/jwt-token.service.js.map +0 -1
- package/dist/authz/services/oauth-strategy.service.d.ts +0 -13
- package/dist/authz/services/oauth-strategy.service.d.ts.map +0 -1
- package/dist/authz/services/oauth-strategy.service.js +0 -71
- package/dist/authz/services/oauth-strategy.service.js.map +0 -1
- package/dist/authz/stores/memory-store.service.d.ts +0 -27
- package/dist/authz/stores/memory-store.service.d.ts.map +0 -1
- package/dist/authz/stores/memory-store.service.js +0 -107
- package/dist/authz/stores/memory-store.service.js.map +0 -1
- package/dist/authz/stores/oauth-store.interface.d.ts +0 -61
- package/dist/authz/stores/oauth-store.interface.d.ts.map +0 -1
- package/dist/authz/stores/oauth-store.interface.js +0 -5
- package/dist/authz/stores/oauth-store.interface.js.map +0 -1
- package/dist/authz/stores/typeorm/constants.d.ts +0 -3
- package/dist/authz/stores/typeorm/constants.d.ts.map +0 -1
- package/dist/authz/stores/typeorm/constants.js +0 -6
- package/dist/authz/stores/typeorm/constants.js.map +0 -1
- package/dist/authz/stores/typeorm/entities/authorization-code.entity.d.ts +0 -15
- package/dist/authz/stores/typeorm/entities/authorization-code.entity.d.ts.map +0 -1
- package/dist/authz/stores/typeorm/entities/authorization-code.entity.js +0 -69
- package/dist/authz/stores/typeorm/entities/authorization-code.entity.js.map +0 -1
- package/dist/authz/stores/typeorm/entities/index.d.ts +0 -5
- package/dist/authz/stores/typeorm/entities/index.d.ts.map +0 -1
- package/dist/authz/stores/typeorm/entities/index.js +0 -12
- package/dist/authz/stores/typeorm/entities/index.js.map +0 -1
- package/dist/authz/stores/typeorm/entities/oauth-client.entity.d.ts +0 -17
- package/dist/authz/stores/typeorm/entities/oauth-client.entity.d.ts.map +0 -1
- package/dist/authz/stores/typeorm/entities/oauth-client.entity.js +0 -77
- package/dist/authz/stores/typeorm/entities/oauth-client.entity.js.map +0 -1
- package/dist/authz/stores/typeorm/entities/oauth-session.entity.d.ts +0 -14
- package/dist/authz/stores/typeorm/entities/oauth-session.entity.d.ts.map +0 -1
- package/dist/authz/stores/typeorm/entities/oauth-session.entity.js +0 -65
- package/dist/authz/stores/typeorm/entities/oauth-session.entity.js.map +0 -1
- package/dist/authz/stores/typeorm/entities/user-profile.entity.d.ts +0 -13
- package/dist/authz/stores/typeorm/entities/user-profile.entity.d.ts.map +0 -1
- package/dist/authz/stores/typeorm/entities/user-profile.entity.js +0 -62
- package/dist/authz/stores/typeorm/entities/user-profile.entity.js.map +0 -1
- package/dist/authz/stores/typeorm/typeorm-store.service.d.ts +0 -28
- package/dist/authz/stores/typeorm/typeorm-store.service.d.ts.map +0 -1
- package/dist/authz/stores/typeorm/typeorm-store.service.js +0 -138
- package/dist/authz/stores/typeorm/typeorm-store.service.js.map +0 -1
- package/dist/mcp/constants/feature-registration.constants.d.ts +0 -7
- package/dist/mcp/constants/feature-registration.constants.d.ts.map +0 -1
- package/dist/mcp/constants/feature-registration.constants.js +0 -5
- package/dist/mcp/constants/feature-registration.constants.js.map +0 -1
- package/dist/mcp/decorators/tool-guards.decorator.d.ts +0 -12
- package/dist/mcp/decorators/tool-guards.decorator.d.ts.map +0 -1
- package/dist/mcp/decorators/tool-guards.decorator.js +0 -13
- package/dist/mcp/decorators/tool-guards.decorator.js.map +0 -1
- package/dist/mcp/interfaces/mcp-options.interface.d.ts +0 -53
- package/dist/mcp/interfaces/mcp-options.interface.d.ts.map +0 -1
- package/dist/mcp/interfaces/mcp-options.interface.js +0 -10
- package/dist/mcp/interfaces/mcp-options.interface.js.map +0 -1
- package/dist/mcp/mcp.module.d.ts +0 -15
- package/dist/mcp/mcp.module.d.ts.map +0 -1
- package/dist/mcp/mcp.module.js +0 -248
- package/dist/mcp/mcp.module.js.map +0 -1
- package/dist/mcp/services/handlers/mcp-handler.base.d.ts +0 -117
- package/dist/mcp/services/handlers/mcp-handler.base.d.ts.map +0 -1
- package/dist/mcp/services/handlers/mcp-handler.base.js +0 -125
- package/dist/mcp/services/handlers/mcp-handler.base.js.map +0 -1
- package/dist/mcp/services/handlers/mcp-prompts.handler.d.ts +0 -12
- package/dist/mcp/services/handlers/mcp-prompts.handler.d.ts.map +0 -1
- package/dist/mcp/services/handlers/mcp-prompts.handler.js +0 -98
- package/dist/mcp/services/handlers/mcp-prompts.handler.js.map +0 -1
- package/dist/mcp/services/handlers/mcp-resources.handler.d.ts +0 -13
- package/dist/mcp/services/handlers/mcp-resources.handler.d.ts.map +0 -1
- package/dist/mcp/services/handlers/mcp-resources.handler.js +0 -117
- package/dist/mcp/services/handlers/mcp-resources.handler.js.map +0 -1
- package/dist/mcp/services/handlers/mcp-tools.handler.d.ts +0 -22
- package/dist/mcp/services/handlers/mcp-tools.handler.d.ts.map +0 -1
- package/dist/mcp/services/handlers/mcp-tools.handler.js +0 -258
- package/dist/mcp/services/handlers/mcp-tools.handler.js.map +0 -1
- package/dist/mcp/services/mcp-dynamic-registry.service.d.ts +0 -26
- package/dist/mcp/services/mcp-dynamic-registry.service.d.ts.map +0 -1
- package/dist/mcp/services/mcp-dynamic-registry.service.js +0 -133
- package/dist/mcp/services/mcp-dynamic-registry.service.js.map +0 -1
- package/dist/mcp/services/mcp-executor.service.d.ts +0 -15
- package/dist/mcp/services/mcp-executor.service.d.ts.map +0 -1
- package/dist/mcp/services/mcp-executor.service.js +0 -47
- package/dist/mcp/services/mcp-executor.service.js.map +0 -1
- package/dist/mcp/services/mcp-registry-discovery.service.d.ts +0 -63
- package/dist/mcp/services/mcp-registry-discovery.service.d.ts.map +0 -1
- package/dist/mcp/services/mcp-registry-discovery.service.js +0 -397
- package/dist/mcp/services/mcp-registry-discovery.service.js.map +0 -1
- package/dist/mcp/services/mcp-sse.service.d.ts +0 -20
- package/dist/mcp/services/mcp-sse.service.d.ts.map +0 -1
- package/dist/mcp/services/mcp-sse.service.js +0 -91
- package/dist/mcp/services/mcp-sse.service.js.map +0 -1
- package/dist/mcp/services/mcp-streamable-http.service.d.ts +0 -32
- package/dist/mcp/services/mcp-streamable-http.service.d.ts.map +0 -1
- package/dist/mcp/services/mcp-streamable-http.service.js +0 -327
- package/dist/mcp/services/mcp-streamable-http.service.js.map +0 -1
- package/dist/mcp/services/sse-ping.service.d.ts +0 -23
- package/dist/mcp/services/sse-ping.service.d.ts.map +0 -1
- package/dist/mcp/services/sse-ping.service.js +0 -99
- package/dist/mcp/services/sse-ping.service.js.map +0 -1
- package/dist/mcp/transport/sse.controller.factory.d.ts +0 -14
- package/dist/mcp/transport/sse.controller.factory.d.ts.map +0 -1
- package/dist/mcp/transport/sse.controller.factory.js +0 -67
- package/dist/mcp/transport/sse.controller.factory.js.map +0 -1
- package/dist/mcp/transport/stdio.service.d.ts +0 -14
- package/dist/mcp/transport/stdio.service.d.ts.map +0 -1
- package/dist/mcp/transport/stdio.service.js +0 -66
- package/dist/mcp/transport/stdio.service.js.map +0 -1
- package/dist/mcp/transport/streamable-http.controller.factory.d.ts +0 -14
- package/dist/mcp/transport/streamable-http.controller.factory.d.ts.map +0 -1
- package/dist/mcp/transport/streamable-http.controller.factory.js +0 -74
- package/dist/mcp/transport/streamable-http.controller.factory.js.map +0 -1
- package/dist/mcp/utils/capabilities-builder.d.ts +0 -5
- package/dist/mcp/utils/capabilities-builder.d.ts.map +0 -1
- package/dist/mcp/utils/capabilities-builder.js +0 -25
- package/dist/mcp/utils/capabilities-builder.js.map +0 -1
- package/dist/mcp/utils/mcp-server.factory.d.ts +0 -6
- package/dist/mcp/utils/mcp-server.factory.d.ts.map +0 -1
- package/dist/mcp/utils/mcp-server.factory.js +0 -22
- package/dist/mcp/utils/mcp-server.factory.js.map +0 -1
- package/src/authz/guards/jwt-auth.guard.ts +0 -127
- package/src/authz/index.ts +0 -10
- package/src/authz/interfaces/oauth-common.interface.ts +0 -21
- package/src/authz/interfaces/request-with-user.ts +0 -16
- package/src/authz/mcp-oauth.controller.ts +0 -860
- package/src/authz/mcp-oauth.module.ts +0 -384
- package/src/authz/providers/azure-ad.provider.ts +0 -40
- package/src/authz/providers/github.provider.ts +0 -22
- package/src/authz/providers/google.provider.ts +0 -23
- package/src/authz/providers/oauth-provider.interface.ts +0 -147
- package/src/authz/services/client.service.ts +0 -125
- package/src/authz/services/jwt-token.service.spec.ts +0 -67
- package/src/authz/services/jwt-token.service.ts +0 -188
- package/src/authz/services/oauth-strategy.service.ts +0 -64
- package/src/authz/stores/memory-store.service.spec.ts +0 -475
- package/src/authz/stores/memory-store.service.ts +0 -141
- package/src/authz/stores/oauth-store.interface.ts +0 -131
- package/src/authz/stores/typeorm/README.md +0 -140
- package/src/authz/stores/typeorm/constants.ts +0 -6
- package/src/authz/stores/typeorm/entities/authorization-code.entity.ts +0 -41
- package/src/authz/stores/typeorm/entities/index.ts +0 -4
- package/src/authz/stores/typeorm/entities/oauth-client.entity.ts +0 -53
- package/src/authz/stores/typeorm/entities/oauth-session.entity.ts +0 -38
- package/src/authz/stores/typeorm/entities/user-profile.entity.ts +0 -46
- package/src/authz/stores/typeorm/typeorm-store.service.spec.ts +0 -494
- package/src/authz/stores/typeorm/typeorm-store.service.ts +0 -165
- package/src/mcp/constants/feature-registration.constants.ts +0 -24
- package/src/mcp/decorators/tool-guards.decorator.ts +0 -82
- package/src/mcp/interfaces/mcp-options.interface.ts +0 -95
- package/src/mcp/mcp.module.ts +0 -349
- package/src/mcp/services/handlers/mcp-handler.base.ts +0 -203
- package/src/mcp/services/handlers/mcp-prompts.handler.ts +0 -143
- package/src/mcp/services/handlers/mcp-resources.handler.ts +0 -183
- package/src/mcp/services/handlers/mcp-tools.handler.spec.ts +0 -41
- package/src/mcp/services/handlers/mcp-tools.handler.ts +0 -436
- package/src/mcp/services/mcp-dynamic-registry.service.ts +0 -236
- package/src/mcp/services/mcp-executor.service.ts +0 -64
- package/src/mcp/services/mcp-registry-discovery.service.spec.ts +0 -306
- package/src/mcp/services/mcp-registry-discovery.service.ts +0 -849
- package/src/mcp/services/mcp-sse.service.ts +0 -124
- package/src/mcp/services/mcp-streamable-http.service.ts +0 -472
- package/src/mcp/services/sse-ping.service.ts +0 -144
- package/src/mcp/transport/custom-decorator.spec.ts +0 -75
- package/src/mcp/transport/sse.controller.factory.ts +0 -84
- package/src/mcp/transport/stdio.service.ts +0 -75
- package/src/mcp/transport/streamable-http.controller.factory.ts +0 -80
- package/src/mcp/utils/capabilities-builder.ts +0 -43
- package/src/mcp/utils/mcp-server.factory.ts +0 -33
|
@@ -1,131 +0,0 @@
|
|
|
1
|
-
import type {
|
|
2
|
-
OAuthSession,
|
|
3
|
-
OAuthUserProfile,
|
|
4
|
-
} from '../interfaces/oauth-common.interface';
|
|
5
|
-
|
|
6
|
-
export const MCP_OAUTH_TOKEN = 'MCP_OAUTH_TOKEN';
|
|
7
|
-
|
|
8
|
-
export interface OAuthClient {
|
|
9
|
-
client_id: string;
|
|
10
|
-
client_secret?: string;
|
|
11
|
-
client_name: string;
|
|
12
|
-
client_description?: string;
|
|
13
|
-
logo_uri?: string;
|
|
14
|
-
client_uri?: string;
|
|
15
|
-
developer_name?: string;
|
|
16
|
-
developer_email?: string;
|
|
17
|
-
redirect_uris: string[];
|
|
18
|
-
grant_types: string[];
|
|
19
|
-
response_types: string[];
|
|
20
|
-
token_endpoint_auth_method: string;
|
|
21
|
-
created_at: Date;
|
|
22
|
-
updated_at: Date;
|
|
23
|
-
}
|
|
24
|
-
|
|
25
|
-
export interface AuthorizationCode {
|
|
26
|
-
code: string;
|
|
27
|
-
user_id: string;
|
|
28
|
-
client_id: string;
|
|
29
|
-
redirect_uri: string;
|
|
30
|
-
code_challenge: string;
|
|
31
|
-
code_challenge_method: string;
|
|
32
|
-
resource?: string;
|
|
33
|
-
scope?: string;
|
|
34
|
-
expires_at: number;
|
|
35
|
-
used_at?: Date;
|
|
36
|
-
// Link to stored user profile (if available)
|
|
37
|
-
user_profile_id?: string;
|
|
38
|
-
}
|
|
39
|
-
|
|
40
|
-
export interface ClientRegistrationDto {
|
|
41
|
-
client_name: string;
|
|
42
|
-
client_description?: string;
|
|
43
|
-
logo_uri?: string;
|
|
44
|
-
client_uri?: string;
|
|
45
|
-
developer_name?: string;
|
|
46
|
-
developer_email?: string;
|
|
47
|
-
redirect_uris: string[];
|
|
48
|
-
grant_types?: string[];
|
|
49
|
-
response_types?: string[];
|
|
50
|
-
token_endpoint_auth_method?: string;
|
|
51
|
-
}
|
|
52
|
-
|
|
53
|
-
/**
|
|
54
|
-
* Interface for OAuth store implementations.
|
|
55
|
-
*
|
|
56
|
-
* Implement this interface to create custom storage solutions (e.g., Redis, Database, etc.).
|
|
57
|
-
* The default implementation is an in-memory store suitable for development.
|
|
58
|
-
*
|
|
59
|
-
* @example
|
|
60
|
-
* ```typescript
|
|
61
|
-
* class RedisOAuthStore implements IOAuthStore {
|
|
62
|
-
* constructor(private redisClient: RedisClient) {}
|
|
63
|
-
*
|
|
64
|
-
* async storeClient(client: OAuthClient): Promise<void> {
|
|
65
|
-
* await this.redisClient.set(`client:${client.client_id}`, JSON.stringify(client));
|
|
66
|
-
* }
|
|
67
|
-
*
|
|
68
|
-
* async getClient(client_id: string): Promise<OAuthClient | undefined> {
|
|
69
|
-
* const data = await this.redisClient.get(`client:${client_id}`);
|
|
70
|
-
* return data ? JSON.parse(data) : undefined;
|
|
71
|
-
* }
|
|
72
|
-
*
|
|
73
|
-
* async findClient(client_name: string): Promise<OAuthClient | undefined> {
|
|
74
|
-
* const data = await this.redisClient.get(`client_name:${client_name}`);
|
|
75
|
-
* return data ? JSON.parse(data) : undefined;
|
|
76
|
-
* }
|
|
77
|
-
*
|
|
78
|
-
* generateClientId(client: OAuthClient): string {
|
|
79
|
-
* // Custom client ID generation logic
|
|
80
|
-
* const normalizedName = client.client_name.toLowerCase().replace(/[^a-z0-9]/g, '');
|
|
81
|
-
* const timestamp = Date.now().toString(36);
|
|
82
|
-
* return `${normalizedName}_${timestamp}`;
|
|
83
|
-
* }
|
|
84
|
-
*
|
|
85
|
-
* // ... implement other methods
|
|
86
|
-
* }
|
|
87
|
-
*
|
|
88
|
-
* // Usage in module:
|
|
89
|
-
* McpOAuthModule.forRoot({
|
|
90
|
-
* provider: GoogleOAuthProvider,
|
|
91
|
-
* clientId: process.env.GOOGLE_CLIENT_ID!,
|
|
92
|
-
* clientSecret: process.env.GOOGLE_CLIENT_SECRET!,
|
|
93
|
-
* jwtSecret: process.env.JWT_SECRET!,
|
|
94
|
-
* memoryStore: new RedisOAuthStore(redisClient), // Custom implementation
|
|
95
|
-
* })
|
|
96
|
-
* ```
|
|
97
|
-
*/
|
|
98
|
-
export interface IOAuthStore {
|
|
99
|
-
// Client management
|
|
100
|
-
storeClient(client: OAuthClient): Promise<OAuthClient>;
|
|
101
|
-
getClient(client_id: string): Promise<OAuthClient | undefined>;
|
|
102
|
-
findClient(client_name: string): Promise<OAuthClient | undefined>;
|
|
103
|
-
generateClientId(client: OAuthClient): string;
|
|
104
|
-
|
|
105
|
-
// Authorization code management
|
|
106
|
-
storeAuthCode(code: AuthorizationCode): Promise<void>;
|
|
107
|
-
getAuthCode(code: string): Promise<AuthorizationCode | undefined>;
|
|
108
|
-
removeAuthCode(code: string): Promise<void>;
|
|
109
|
-
|
|
110
|
-
// OAuth session management
|
|
111
|
-
storeOAuthSession(sessionId: string, session: OAuthSession): Promise<void>;
|
|
112
|
-
getOAuthSession(sessionId: string): Promise<OAuthSession | undefined>;
|
|
113
|
-
removeOAuthSession(sessionId: string): Promise<void>;
|
|
114
|
-
|
|
115
|
-
// User profile management
|
|
116
|
-
/**
|
|
117
|
-
* Upsert a user profile from an OAuth provider and return a stable profile_id.
|
|
118
|
-
* The profile_id should be stable across logins for the same provider+user.
|
|
119
|
-
*/
|
|
120
|
-
upsertUserProfile(
|
|
121
|
-
profile: OAuthUserProfile,
|
|
122
|
-
provider: string,
|
|
123
|
-
): Promise<string>;
|
|
124
|
-
|
|
125
|
-
/** Retrieve a stored user profile by its profile_id */
|
|
126
|
-
getUserProfileById(
|
|
127
|
-
profileId: string,
|
|
128
|
-
): Promise<
|
|
129
|
-
(OAuthUserProfile & { profile_id: string; provider: string }) | undefined
|
|
130
|
-
>;
|
|
131
|
-
}
|
|
@@ -1,140 +0,0 @@
|
|
|
1
|
-
# TypeORM OAuth Store Implementation
|
|
2
|
-
|
|
3
|
-
This directory contains a TypeORM implementation of the `IOAuthStore` interface for persistent OAuth data storage.
|
|
4
|
-
|
|
5
|
-
## Features
|
|
6
|
-
|
|
7
|
-
- **Persistent Storage**: Unlike the in-memory store, data survives server restarts
|
|
8
|
-
- **Database Support**: Works with any database supported by TypeORM (PostgreSQL, MySQL, SQLite, etc.)
|
|
9
|
-
- **Automatic Schema Management**: Entities automatically create the required database tables
|
|
10
|
-
- **Expiration Handling**: Automatic cleanup of expired sessions and authorization codes
|
|
11
|
-
|
|
12
|
-
## Entities
|
|
13
|
-
|
|
14
|
-
### OAuthClientEntity
|
|
15
|
-
Stores OAuth client information including:
|
|
16
|
-
- Client credentials and metadata
|
|
17
|
-
- Redirect URIs and grant types
|
|
18
|
-
- Creation and update timestamps
|
|
19
|
-
|
|
20
|
-
### AuthorizationCodeEntity
|
|
21
|
-
Stores authorization codes with:
|
|
22
|
-
- Code challenge and method for PKCE
|
|
23
|
-
- Expiration and usage tracking
|
|
24
|
-
- Associated user and client information
|
|
25
|
-
|
|
26
|
-
### OAuthSessionEntity
|
|
27
|
-
Stores OAuth session data including:
|
|
28
|
-
- Session state and parameters
|
|
29
|
-
- Expiration handling
|
|
30
|
-
- Client association
|
|
31
|
-
|
|
32
|
-
### OAuthUserProfileEntity
|
|
33
|
-
Stores normalized user profile information per provider:
|
|
34
|
-
- Stable `profile_id` primary key
|
|
35
|
-
- `provider_user_id` and `provider`
|
|
36
|
-
- `username`, `email`, `displayName`, `avatarUrl`
|
|
37
|
-
- `raw` stringified provider payload
|
|
38
|
-
|
|
39
|
-
## Usage
|
|
40
|
-
|
|
41
|
-
### Basic SQLite Configuration
|
|
42
|
-
|
|
43
|
-
```typescript
|
|
44
|
-
McpOAuthModule.forRoot({
|
|
45
|
-
provider: GoogleOAuthProvider,
|
|
46
|
-
clientId: process.env.GOOGLE_CLIENT_ID!,
|
|
47
|
-
clientSecret: process.env.GOOGLE_CLIENT_SECRET!,
|
|
48
|
-
jwtSecret: process.env.JWT_SECRET!,
|
|
49
|
-
typeormOptions: {
|
|
50
|
-
type: 'sqlite',
|
|
51
|
-
database: 'oauth.db',
|
|
52
|
-
synchronize: true,
|
|
53
|
-
logging: false,
|
|
54
|
-
},
|
|
55
|
-
})
|
|
56
|
-
```
|
|
57
|
-
|
|
58
|
-
### PostgreSQL Configuration
|
|
59
|
-
|
|
60
|
-
```typescript
|
|
61
|
-
McpOAuthModule.forRoot({
|
|
62
|
-
provider: GoogleOAuthProvider,
|
|
63
|
-
clientId: process.env.GOOGLE_CLIENT_ID!,
|
|
64
|
-
clientSecret: process.env.GOOGLE_CLIENT_SECRET!,
|
|
65
|
-
jwtSecret: process.env.JWT_SECRET!,
|
|
66
|
-
typeormOptions: {
|
|
67
|
-
type: 'postgres',
|
|
68
|
-
host: process.env.DB_HOST || 'localhost',
|
|
69
|
-
port: parseInt(process.env.DB_PORT) || 5432,
|
|
70
|
-
username: process.env.DB_USERNAME || 'postgres',
|
|
71
|
-
password: process.env.DB_PASSWORD || 'password',
|
|
72
|
-
database: process.env.DB_NAME || 'oauth_db',
|
|
73
|
-
synchronize: process.env.NODE_ENV !== 'production',
|
|
74
|
-
logging: process.env.NODE_ENV === 'development',
|
|
75
|
-
},
|
|
76
|
-
})
|
|
77
|
-
```
|
|
78
|
-
|
|
79
|
-
### MySQL Configuration
|
|
80
|
-
|
|
81
|
-
```typescript
|
|
82
|
-
McpOAuthModule.forRoot({
|
|
83
|
-
provider: GoogleOAuthProvider,
|
|
84
|
-
clientId: process.env.GOOGLE_CLIENT_ID!,
|
|
85
|
-
clientSecret: process.env.GOOGLE_CLIENT_SECRET!,
|
|
86
|
-
jwtSecret: process.env.JWT_SECRET!,
|
|
87
|
-
typeormOptions: {
|
|
88
|
-
type: 'mysql',
|
|
89
|
-
host: process.env.DB_HOST || 'localhost',
|
|
90
|
-
port: parseInt(process.env.DB_PORT) || 3306,
|
|
91
|
-
username: process.env.DB_USERNAME || 'root',
|
|
92
|
-
password: process.env.DB_PASSWORD || 'password',
|
|
93
|
-
database: process.env.DB_NAME || 'oauth_db',
|
|
94
|
-
synchronize: process.env.NODE_ENV !== 'production',
|
|
95
|
-
logging: process.env.NODE_ENV === 'development',
|
|
96
|
-
},
|
|
97
|
-
})
|
|
98
|
-
```
|
|
99
|
-
|
|
100
|
-
## Configuration Options
|
|
101
|
-
|
|
102
|
-
All standard TypeORM options are supported:
|
|
103
|
-
|
|
104
|
-
- `type`: Database type (sqlite, postgres, mysql, etc.)
|
|
105
|
-
- `host`: Database host
|
|
106
|
-
- `port`: Database port
|
|
107
|
-
- `username`: Database username
|
|
108
|
-
- `password`: Database password
|
|
109
|
-
- `database`: Database name or file path (for SQLite)
|
|
110
|
-
- `synchronize`: Auto-create tables (disable in production)
|
|
111
|
-
- `logging`: Enable query logging
|
|
112
|
-
- `entities`: Additional entities (OAuth entities are automatically included)
|
|
113
|
-
- `migrations`: Database migrations
|
|
114
|
-
- `ssl`: SSL configuration for production databases
|
|
115
|
-
|
|
116
|
-
## Production Considerations
|
|
117
|
-
|
|
118
|
-
1. **Disable synchronize**: Use migrations instead of auto-sync in production
|
|
119
|
-
2. **Enable SSL**: Configure SSL for production database connections
|
|
120
|
-
3. **Connection Pooling**: Configure appropriate connection pool settings
|
|
121
|
-
4. **Logging**: Disable query logging in production for performance
|
|
122
|
-
5. **Backup Strategy**: Implement regular database backups
|
|
123
|
-
|
|
124
|
-
## Migrations
|
|
125
|
-
|
|
126
|
-
For production use, create migrations instead of using `synchronize: true`:
|
|
127
|
-
|
|
128
|
-
```bash
|
|
129
|
-
npx typeorm migration:generate -n CreateOAuthTables
|
|
130
|
-
npx typeorm migration:run
|
|
131
|
-
```
|
|
132
|
-
|
|
133
|
-
## Interface Compatibility
|
|
134
|
-
|
|
135
|
-
The TypeORM implementation provides both synchronous and asynchronous methods:
|
|
136
|
-
|
|
137
|
-
- Synchronous methods (for IOAuthStore compatibility): Log warnings and use fire-and-forget async operations
|
|
138
|
-
- Asynchronous methods (recommended): `*Async` versions that return promises
|
|
139
|
-
|
|
140
|
-
Consider updating your application to use the async methods for better error handling and performance.
|
|
@@ -1,6 +0,0 @@
|
|
|
1
|
-
// Unique TypeORM connection name used by the OAuth store to avoid
|
|
2
|
-
// collisions with an application's own connections.
|
|
3
|
-
export const OAUTH_TYPEORM_CONNECTION_NAME = '@rekog/mcp-nest:oauth';
|
|
4
|
-
|
|
5
|
-
// Table name prefix to avoid collisions with application tables.
|
|
6
|
-
export const OAUTH_TABLE_PREFIX = 'rekog_mcp_auth_';
|
|
@@ -1,41 +0,0 @@
|
|
|
1
|
-
import { Entity, Column, PrimaryColumn, CreateDateColumn } from 'typeorm';
|
|
2
|
-
import { OAUTH_TABLE_PREFIX } from '../constants';
|
|
3
|
-
|
|
4
|
-
@Entity(`${OAUTH_TABLE_PREFIX}authorization_codes`)
|
|
5
|
-
export class AuthorizationCodeEntity {
|
|
6
|
-
@PrimaryColumn()
|
|
7
|
-
code: string;
|
|
8
|
-
|
|
9
|
-
@Column()
|
|
10
|
-
user_id: string;
|
|
11
|
-
|
|
12
|
-
@Column()
|
|
13
|
-
client_id: string;
|
|
14
|
-
|
|
15
|
-
@Column()
|
|
16
|
-
redirect_uri: string;
|
|
17
|
-
|
|
18
|
-
@Column()
|
|
19
|
-
code_challenge: string;
|
|
20
|
-
|
|
21
|
-
@Column()
|
|
22
|
-
code_challenge_method: string;
|
|
23
|
-
|
|
24
|
-
@Column('bigint')
|
|
25
|
-
expires_at: number;
|
|
26
|
-
|
|
27
|
-
@Column()
|
|
28
|
-
resource: string;
|
|
29
|
-
|
|
30
|
-
@Column({ nullable: true })
|
|
31
|
-
scope?: string;
|
|
32
|
-
|
|
33
|
-
@Column({ nullable: true })
|
|
34
|
-
used_at?: Date;
|
|
35
|
-
|
|
36
|
-
@Column({ nullable: true })
|
|
37
|
-
user_profile_id?: string;
|
|
38
|
-
|
|
39
|
-
@CreateDateColumn()
|
|
40
|
-
created_at: Date;
|
|
41
|
-
}
|
|
@@ -1,53 +0,0 @@
|
|
|
1
|
-
import {
|
|
2
|
-
Entity,
|
|
3
|
-
Column,
|
|
4
|
-
PrimaryColumn,
|
|
5
|
-
CreateDateColumn,
|
|
6
|
-
UpdateDateColumn,
|
|
7
|
-
} from 'typeorm';
|
|
8
|
-
import { OAUTH_TABLE_PREFIX } from '../constants';
|
|
9
|
-
|
|
10
|
-
@Entity(`${OAUTH_TABLE_PREFIX}clients`)
|
|
11
|
-
export class OAuthClientEntity {
|
|
12
|
-
@PrimaryColumn()
|
|
13
|
-
client_id: string;
|
|
14
|
-
|
|
15
|
-
@Column({ nullable: true })
|
|
16
|
-
client_secret?: string;
|
|
17
|
-
|
|
18
|
-
@Column()
|
|
19
|
-
client_name: string;
|
|
20
|
-
|
|
21
|
-
@Column({ nullable: true })
|
|
22
|
-
client_description?: string;
|
|
23
|
-
|
|
24
|
-
@Column({ nullable: true })
|
|
25
|
-
logo_uri?: string;
|
|
26
|
-
|
|
27
|
-
@Column({ nullable: true })
|
|
28
|
-
client_uri?: string;
|
|
29
|
-
|
|
30
|
-
@Column({ nullable: true })
|
|
31
|
-
developer_name?: string;
|
|
32
|
-
|
|
33
|
-
@Column({ nullable: true })
|
|
34
|
-
developer_email?: string;
|
|
35
|
-
|
|
36
|
-
@Column('simple-array')
|
|
37
|
-
redirect_uris: string[];
|
|
38
|
-
|
|
39
|
-
@Column('simple-array')
|
|
40
|
-
grant_types: string[];
|
|
41
|
-
|
|
42
|
-
@Column('simple-array')
|
|
43
|
-
response_types: string[];
|
|
44
|
-
|
|
45
|
-
@Column()
|
|
46
|
-
token_endpoint_auth_method: string;
|
|
47
|
-
|
|
48
|
-
@CreateDateColumn()
|
|
49
|
-
created_at: Date;
|
|
50
|
-
|
|
51
|
-
@UpdateDateColumn()
|
|
52
|
-
updated_at: Date;
|
|
53
|
-
}
|
|
@@ -1,38 +0,0 @@
|
|
|
1
|
-
import { Entity, Column, PrimaryColumn, CreateDateColumn } from 'typeorm';
|
|
2
|
-
import { OAUTH_TABLE_PREFIX } from '../constants';
|
|
3
|
-
|
|
4
|
-
@Entity(`${OAUTH_TABLE_PREFIX}sessions`)
|
|
5
|
-
export class OAuthSessionEntity {
|
|
6
|
-
@PrimaryColumn()
|
|
7
|
-
sessionId: string;
|
|
8
|
-
|
|
9
|
-
@Column()
|
|
10
|
-
state: string;
|
|
11
|
-
|
|
12
|
-
@Column({ nullable: true })
|
|
13
|
-
clientId?: string;
|
|
14
|
-
|
|
15
|
-
@Column({ nullable: true })
|
|
16
|
-
redirectUri?: string;
|
|
17
|
-
|
|
18
|
-
@Column({ nullable: true })
|
|
19
|
-
codeChallenge?: string;
|
|
20
|
-
|
|
21
|
-
@Column({ nullable: true })
|
|
22
|
-
codeChallengeMethod?: string;
|
|
23
|
-
|
|
24
|
-
@Column({ nullable: true })
|
|
25
|
-
oauthState?: string;
|
|
26
|
-
|
|
27
|
-
@Column({ nullable: true })
|
|
28
|
-
resource?: string;
|
|
29
|
-
|
|
30
|
-
@Column({ nullable: true })
|
|
31
|
-
scope?: string;
|
|
32
|
-
|
|
33
|
-
@Column('bigint')
|
|
34
|
-
expiresAt: number;
|
|
35
|
-
|
|
36
|
-
@CreateDateColumn()
|
|
37
|
-
created_at: Date;
|
|
38
|
-
}
|
|
@@ -1,46 +0,0 @@
|
|
|
1
|
-
import {
|
|
2
|
-
Entity,
|
|
3
|
-
Column,
|
|
4
|
-
PrimaryColumn,
|
|
5
|
-
CreateDateColumn,
|
|
6
|
-
UpdateDateColumn,
|
|
7
|
-
Index,
|
|
8
|
-
} from 'typeorm';
|
|
9
|
-
import { OAUTH_TABLE_PREFIX } from '../constants';
|
|
10
|
-
|
|
11
|
-
@Entity(`${OAUTH_TABLE_PREFIX}user_profiles`)
|
|
12
|
-
export class OAuthUserProfileEntity {
|
|
13
|
-
// Stable profile id we return to callers
|
|
14
|
-
@PrimaryColumn()
|
|
15
|
-
profile_id: string;
|
|
16
|
-
|
|
17
|
-
// Provider-unique user id (e.g., GitHub id)
|
|
18
|
-
@Index('idx_provider_user')
|
|
19
|
-
@Column()
|
|
20
|
-
provider_user_id: string;
|
|
21
|
-
|
|
22
|
-
@Column()
|
|
23
|
-
provider: string;
|
|
24
|
-
|
|
25
|
-
@Column()
|
|
26
|
-
username: string;
|
|
27
|
-
|
|
28
|
-
@Column({ nullable: true })
|
|
29
|
-
email?: string;
|
|
30
|
-
|
|
31
|
-
@Column({ nullable: true })
|
|
32
|
-
displayName?: string;
|
|
33
|
-
|
|
34
|
-
@Column({ nullable: true })
|
|
35
|
-
avatarUrl?: string;
|
|
36
|
-
|
|
37
|
-
// Store raw provider profile for completeness/debugging
|
|
38
|
-
@Column({ type: 'text', nullable: true })
|
|
39
|
-
raw?: string;
|
|
40
|
-
|
|
41
|
-
@CreateDateColumn()
|
|
42
|
-
created_at: Date;
|
|
43
|
-
|
|
44
|
-
@UpdateDateColumn()
|
|
45
|
-
updated_at: Date;
|
|
46
|
-
}
|