nitrostack 1.0.83 → 1.0.85
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/LICENSE +1 -1
- package/README.md +42 -137
- package/assets/gif/nitrocli.gif +0 -0
- package/assets/gif/nitrostudio-chat.gif +0 -0
- package/assets/gif/nitrostudio-main.gif +0 -0
- package/assets/gif/nitrostudio-testing.gif +0 -0
- package/package.json +15 -50
- package/dist/auth/__tests__/api-key.test.d.ts +0 -2
- package/dist/auth/__tests__/api-key.test.d.ts.map +0 -1
- package/dist/auth/__tests__/api-key.test.js +0 -156
- package/dist/auth/__tests__/api-key.test.js.map +0 -1
- package/dist/auth/__tests__/client.test.d.ts +0 -2
- package/dist/auth/__tests__/client.test.d.ts.map +0 -1
- package/dist/auth/__tests__/client.test.js +0 -173
- package/dist/auth/__tests__/client.test.js.map +0 -1
- package/dist/auth/__tests__/middleware.test.d.ts +0 -2
- package/dist/auth/__tests__/middleware.test.d.ts.map +0 -1
- package/dist/auth/__tests__/middleware.test.js +0 -232
- package/dist/auth/__tests__/middleware.test.js.map +0 -1
- package/dist/auth/__tests__/pkce.test.d.ts +0 -2
- package/dist/auth/__tests__/pkce.test.d.ts.map +0 -1
- package/dist/auth/__tests__/pkce.test.js +0 -110
- package/dist/auth/__tests__/pkce.test.js.map +0 -1
- package/dist/auth/__tests__/quick-setup.test.d.ts +0 -2
- package/dist/auth/__tests__/quick-setup.test.d.ts.map +0 -1
- package/dist/auth/__tests__/quick-setup.test.js +0 -95
- package/dist/auth/__tests__/quick-setup.test.js.map +0 -1
- package/dist/auth/__tests__/secure-secret.test.d.ts +0 -2
- package/dist/auth/__tests__/secure-secret.test.d.ts.map +0 -1
- package/dist/auth/__tests__/secure-secret.test.js +0 -104
- package/dist/auth/__tests__/secure-secret.test.js.map +0 -1
- package/dist/auth/__tests__/server-integration.test.d.ts +0 -2
- package/dist/auth/__tests__/server-integration.test.d.ts.map +0 -1
- package/dist/auth/__tests__/server-integration.test.js +0 -156
- package/dist/auth/__tests__/server-integration.test.js.map +0 -1
- package/dist/auth/__tests__/server-metadata.test.d.ts +0 -2
- package/dist/auth/__tests__/server-metadata.test.d.ts.map +0 -1
- package/dist/auth/__tests__/server-metadata.test.js +0 -72
- package/dist/auth/__tests__/server-metadata.test.js.map +0 -1
- package/dist/auth/__tests__/simple-jwt.test.d.ts +0 -2
- package/dist/auth/__tests__/simple-jwt.test.d.ts.map +0 -1
- package/dist/auth/__tests__/simple-jwt.test.js +0 -125
- package/dist/auth/__tests__/simple-jwt.test.js.map +0 -1
- package/dist/auth/__tests__/token-store.test.d.ts +0 -2
- package/dist/auth/__tests__/token-store.test.d.ts.map +0 -1
- package/dist/auth/__tests__/token-store.test.js +0 -167
- package/dist/auth/__tests__/token-store.test.js.map +0 -1
- package/dist/auth/__tests__/token-validation.test.d.ts +0 -2
- package/dist/auth/__tests__/token-validation.test.d.ts.map +0 -1
- package/dist/auth/__tests__/token-validation.test.js +0 -219
- package/dist/auth/__tests__/token-validation.test.js.map +0 -1
- package/dist/auth/api-key.d.ts +0 -118
- package/dist/auth/api-key.d.ts.map +0 -1
- package/dist/auth/api-key.js +0 -168
- package/dist/auth/api-key.js.map +0 -1
- package/dist/auth/client.d.ts +0 -151
- package/dist/auth/client.d.ts.map +0 -1
- package/dist/auth/client.js +0 -330
- package/dist/auth/client.js.map +0 -1
- package/dist/auth/index.d.ts +0 -31
- package/dist/auth/index.d.ts.map +0 -1
- package/dist/auth/index.js +0 -46
- package/dist/auth/index.js.map +0 -1
- package/dist/auth/middleware.d.ts +0 -95
- package/dist/auth/middleware.d.ts.map +0 -1
- package/dist/auth/middleware.js +0 -260
- package/dist/auth/middleware.js.map +0 -1
- package/dist/auth/pkce.d.ts +0 -53
- package/dist/auth/pkce.d.ts.map +0 -1
- package/dist/auth/pkce.js +0 -105
- package/dist/auth/pkce.js.map +0 -1
- package/dist/auth/quick-setup.d.ts +0 -94
- package/dist/auth/quick-setup.d.ts.map +0 -1
- package/dist/auth/quick-setup.js +0 -210
- package/dist/auth/quick-setup.js.map +0 -1
- package/dist/auth/secure-secret.d.ts +0 -136
- package/dist/auth/secure-secret.d.ts.map +0 -1
- package/dist/auth/secure-secret.js +0 -182
- package/dist/auth/secure-secret.js.map +0 -1
- package/dist/auth/server-integration.d.ts +0 -97
- package/dist/auth/server-integration.d.ts.map +0 -1
- package/dist/auth/server-integration.js +0 -182
- package/dist/auth/server-integration.js.map +0 -1
- package/dist/auth/server-metadata.d.ts +0 -51
- package/dist/auth/server-metadata.d.ts.map +0 -1
- package/dist/auth/server-metadata.js +0 -106
- package/dist/auth/server-metadata.js.map +0 -1
- package/dist/auth/simple-jwt.d.ts +0 -174
- package/dist/auth/simple-jwt.d.ts.map +0 -1
- package/dist/auth/simple-jwt.js +0 -162
- package/dist/auth/simple-jwt.js.map +0 -1
- package/dist/auth/token-store.d.ts +0 -104
- package/dist/auth/token-store.d.ts.map +0 -1
- package/dist/auth/token-store.js +0 -205
- package/dist/auth/token-store.js.map +0 -1
- package/dist/auth/token-validation.d.ts +0 -59
- package/dist/auth/token-validation.d.ts.map +0 -1
- package/dist/auth/token-validation.js +0 -241
- package/dist/auth/token-validation.js.map +0 -1
- package/dist/auth/types.d.ts +0 -215
- package/dist/auth/types.d.ts.map +0 -1
- package/dist/auth/types.js +0 -6
- package/dist/auth/types.js.map +0 -1
- package/dist/core/__tests__/app-decorator.test.d.ts +0 -2
- package/dist/core/__tests__/app-decorator.test.d.ts.map +0 -1
- package/dist/core/__tests__/app-decorator.test.js +0 -100
- package/dist/core/__tests__/app-decorator.test.js.map +0 -1
- package/dist/core/__tests__/app-factory.extended.test.d.ts +0 -2
- package/dist/core/__tests__/app-factory.extended.test.d.ts.map +0 -1
- package/dist/core/__tests__/app-factory.extended.test.js +0 -244
- package/dist/core/__tests__/app-factory.extended.test.js.map +0 -1
- package/dist/core/__tests__/builders.test.d.ts +0 -2
- package/dist/core/__tests__/builders.test.d.ts.map +0 -1
- package/dist/core/__tests__/builders.test.js +0 -98
- package/dist/core/__tests__/builders.test.js.map +0 -1
- package/dist/core/__tests__/component.test.d.ts +0 -2
- package/dist/core/__tests__/component.test.d.ts.map +0 -1
- package/dist/core/__tests__/component.test.js +0 -151
- package/dist/core/__tests__/component.test.js.map +0 -1
- package/dist/core/__tests__/config-module.test.d.ts +0 -2
- package/dist/core/__tests__/config-module.test.d.ts.map +0 -1
- package/dist/core/__tests__/config-module.test.js +0 -90
- package/dist/core/__tests__/config-module.test.js.map +0 -1
- package/dist/core/__tests__/core-modules.test.d.ts +0 -2
- package/dist/core/__tests__/core-modules.test.d.ts.map +0 -1
- package/dist/core/__tests__/core-modules.test.js +0 -36
- package/dist/core/__tests__/core-modules.test.js.map +0 -1
- package/dist/core/__tests__/di.test.d.ts +0 -2
- package/dist/core/__tests__/di.test.d.ts.map +0 -1
- package/dist/core/__tests__/di.test.js +0 -101
- package/dist/core/__tests__/di.test.js.map +0 -1
- package/dist/core/__tests__/errors.test.d.ts +0 -2
- package/dist/core/__tests__/errors.test.d.ts.map +0 -1
- package/dist/core/__tests__/errors.test.js +0 -109
- package/dist/core/__tests__/errors.test.js.map +0 -1
- package/dist/core/__tests__/final.blitz.test.d.ts +0 -2
- package/dist/core/__tests__/final.blitz.test.d.ts.map +0 -1
- package/dist/core/__tests__/final.blitz.test.js +0 -327
- package/dist/core/__tests__/final.blitz.test.js.map +0 -1
- package/dist/core/__tests__/jwt-module.test.d.ts +0 -2
- package/dist/core/__tests__/jwt-module.test.d.ts.map +0 -1
- package/dist/core/__tests__/jwt-module.test.js +0 -60
- package/dist/core/__tests__/jwt-module.test.js.map +0 -1
- package/dist/core/__tests__/logger.test.d.ts +0 -2
- package/dist/core/__tests__/logger.test.d.ts.map +0 -1
- package/dist/core/__tests__/logger.test.js +0 -83
- package/dist/core/__tests__/logger.test.js.map +0 -1
- package/dist/core/__tests__/models.test.d.ts +0 -2
- package/dist/core/__tests__/models.test.d.ts.map +0 -1
- package/dist/core/__tests__/models.test.js +0 -142
- package/dist/core/__tests__/models.test.js.map +0 -1
- package/dist/core/__tests__/module.test.d.ts +0 -2
- package/dist/core/__tests__/module.test.d.ts.map +0 -1
- package/dist/core/__tests__/module.test.js +0 -58
- package/dist/core/__tests__/module.test.js.map +0 -1
- package/dist/core/__tests__/oauth-module.test.d.ts +0 -2
- package/dist/core/__tests__/oauth-module.test.d.ts.map +0 -1
- package/dist/core/__tests__/oauth-module.test.js +0 -168
- package/dist/core/__tests__/oauth-module.test.js.map +0 -1
- package/dist/core/__tests__/oauth.extended.test.d.ts +0 -2
- package/dist/core/__tests__/oauth.extended.test.d.ts.map +0 -1
- package/dist/core/__tests__/oauth.extended.test.js +0 -146
- package/dist/core/__tests__/oauth.extended.test.js.map +0 -1
- package/dist/core/__tests__/prompt.test.d.ts +0 -2
- package/dist/core/__tests__/prompt.test.d.ts.map +0 -1
- package/dist/core/__tests__/prompt.test.js +0 -126
- package/dist/core/__tests__/prompt.test.js.map +0 -1
- package/dist/core/__tests__/resource.test.d.ts +0 -2
- package/dist/core/__tests__/resource.test.d.ts.map +0 -1
- package/dist/core/__tests__/resource.test.js +0 -173
- package/dist/core/__tests__/resource.test.js.map +0 -1
- package/dist/core/__tests__/server.extended.test.d.ts +0 -2
- package/dist/core/__tests__/server.extended.test.d.ts.map +0 -1
- package/dist/core/__tests__/server.extended.test.js +0 -242
- package/dist/core/__tests__/server.extended.test.js.map +0 -1
- package/dist/core/__tests__/server.test.d.ts +0 -2
- package/dist/core/__tests__/server.test.d.ts.map +0 -1
- package/dist/core/__tests__/server.test.js +0 -120
- package/dist/core/__tests__/server.test.js.map +0 -1
- package/dist/core/__tests__/transport.http.test.d.ts +0 -2
- package/dist/core/__tests__/transport.http.test.d.ts.map +0 -1
- package/dist/core/__tests__/transport.http.test.js +0 -119
- package/dist/core/__tests__/transport.http.test.js.map +0 -1
- package/dist/core/__tests__/transport.streamable.test.d.ts +0 -2
- package/dist/core/__tests__/transport.streamable.test.d.ts.map +0 -1
- package/dist/core/__tests__/transport.streamable.test.js +0 -168
- package/dist/core/__tests__/transport.streamable.test.js.map +0 -1
- package/dist/core/__tests__/transports.test.d.ts +0 -2
- package/dist/core/__tests__/transports.test.d.ts.map +0 -1
- package/dist/core/__tests__/transports.test.js +0 -12
- package/dist/core/__tests__/transports.test.js.map +0 -1
- package/dist/core/apikey-module.d.ts +0 -69
- package/dist/core/apikey-module.d.ts.map +0 -1
- package/dist/core/apikey-module.js +0 -114
- package/dist/core/apikey-module.js.map +0 -1
- package/dist/core/app-decorator.d.ts +0 -59
- package/dist/core/app-decorator.d.ts.map +0 -1
- package/dist/core/app-decorator.js +0 -322
- package/dist/core/app-decorator.js.map +0 -1
- package/dist/core/builders.d.ts +0 -50
- package/dist/core/builders.d.ts.map +0 -1
- package/dist/core/builders.js +0 -139
- package/dist/core/builders.js.map +0 -1
- package/dist/core/component.d.ts +0 -111
- package/dist/core/component.d.ts.map +0 -1
- package/dist/core/component.js +0 -228
- package/dist/core/component.js.map +0 -1
- package/dist/core/config-module.d.ts +0 -62
- package/dist/core/config-module.d.ts.map +0 -1
- package/dist/core/config-module.js +0 -94
- package/dist/core/config-module.js.map +0 -1
- package/dist/core/decorators/__tests__/decorators.test.d.ts +0 -2
- package/dist/core/decorators/__tests__/decorators.test.d.ts.map +0 -1
- package/dist/core/decorators/__tests__/decorators.test.js +0 -103
- package/dist/core/decorators/__tests__/decorators.test.js.map +0 -1
- package/dist/core/decorators/__tests__/extended-decorators.test.d.ts +0 -2
- package/dist/core/decorators/__tests__/extended-decorators.test.d.ts.map +0 -1
- package/dist/core/decorators/__tests__/extended-decorators.test.js +0 -194
- package/dist/core/decorators/__tests__/extended-decorators.test.js.map +0 -1
- package/dist/core/decorators/__tests__/health-check.test.d.ts +0 -2
- package/dist/core/decorators/__tests__/health-check.test.d.ts.map +0 -1
- package/dist/core/decorators/__tests__/health-check.test.js +0 -119
- package/dist/core/decorators/__tests__/health-check.test.js.map +0 -1
- package/dist/core/decorators/cache.decorator.d.ts +0 -61
- package/dist/core/decorators/cache.decorator.d.ts.map +0 -1
- package/dist/core/decorators/cache.decorator.js +0 -115
- package/dist/core/decorators/cache.decorator.js.map +0 -1
- package/dist/core/decorators/health-check.decorator.d.ts +0 -80
- package/dist/core/decorators/health-check.decorator.d.ts.map +0 -1
- package/dist/core/decorators/health-check.decorator.js +0 -153
- package/dist/core/decorators/health-check.decorator.js.map +0 -1
- package/dist/core/decorators/rate-limit.decorator.d.ts +0 -63
- package/dist/core/decorators/rate-limit.decorator.d.ts.map +0 -1
- package/dist/core/decorators/rate-limit.decorator.js +0 -129
- package/dist/core/decorators/rate-limit.decorator.js.map +0 -1
- package/dist/core/decorators.d.ts +0 -190
- package/dist/core/decorators.d.ts.map +0 -1
- package/dist/core/decorators.js +0 -170
- package/dist/core/decorators.js.map +0 -1
- package/dist/core/di/__tests__/container.test.d.ts +0 -2
- package/dist/core/di/__tests__/container.test.d.ts.map +0 -1
- package/dist/core/di/__tests__/container.test.js +0 -88
- package/dist/core/di/__tests__/container.test.js.map +0 -1
- package/dist/core/di/container.d.ts +0 -64
- package/dist/core/di/container.d.ts.map +0 -1
- package/dist/core/di/container.js +0 -105
- package/dist/core/di/container.js.map +0 -1
- package/dist/core/di/injectable.decorator.d.ts +0 -62
- package/dist/core/di/injectable.decorator.d.ts.map +0 -1
- package/dist/core/di/injectable.decorator.js +0 -66
- package/dist/core/di/injectable.decorator.js.map +0 -1
- package/dist/core/di/metadata-shim.d.ts +0 -31
- package/dist/core/di/metadata-shim.d.ts.map +0 -1
- package/dist/core/di/metadata-shim.js +0 -181
- package/dist/core/di/metadata-shim.js.map +0 -1
- package/dist/core/errors.d.ts +0 -54
- package/dist/core/errors.d.ts.map +0 -1
- package/dist/core/errors.js +0 -87
- package/dist/core/errors.js.map +0 -1
- package/dist/core/events/__tests__/events.test.d.ts +0 -2
- package/dist/core/events/__tests__/events.test.d.ts.map +0 -1
- package/dist/core/events/__tests__/events.test.js +0 -177
- package/dist/core/events/__tests__/events.test.js.map +0 -1
- package/dist/core/events/event-emitter.d.ts +0 -50
- package/dist/core/events/event-emitter.d.ts.map +0 -1
- package/dist/core/events/event-emitter.js +0 -94
- package/dist/core/events/event-emitter.js.map +0 -1
- package/dist/core/events/event.decorator.d.ts +0 -48
- package/dist/core/events/event.decorator.d.ts.map +0 -1
- package/dist/core/events/event.decorator.js +0 -72
- package/dist/core/events/event.decorator.js.map +0 -1
- package/dist/core/events/log-emitter.d.ts +0 -14
- package/dist/core/events/log-emitter.d.ts.map +0 -1
- package/dist/core/events/log-emitter.js +0 -20
- package/dist/core/events/log-emitter.js.map +0 -1
- package/dist/core/filters/__tests__/filters.test.d.ts +0 -2
- package/dist/core/filters/__tests__/filters.test.d.ts.map +0 -1
- package/dist/core/filters/__tests__/filters.test.js +0 -72
- package/dist/core/filters/__tests__/filters.test.js.map +0 -1
- package/dist/core/filters/exception-filter.decorator.d.ts +0 -40
- package/dist/core/filters/exception-filter.decorator.d.ts.map +0 -1
- package/dist/core/filters/exception-filter.decorator.js +0 -54
- package/dist/core/filters/exception-filter.decorator.js.map +0 -1
- package/dist/core/filters/exception-filter.interface.d.ts +0 -39
- package/dist/core/filters/exception-filter.interface.d.ts.map +0 -1
- package/dist/core/filters/exception-filter.interface.js +0 -2
- package/dist/core/filters/exception-filter.interface.js.map +0 -1
- package/dist/core/guards/__tests__/guards.test.d.ts +0 -2
- package/dist/core/guards/__tests__/guards.test.d.ts.map +0 -1
- package/dist/core/guards/__tests__/guards.test.js +0 -55
- package/dist/core/guards/__tests__/guards.test.js.map +0 -1
- package/dist/core/guards/apikey.guard.d.ts +0 -22
- package/dist/core/guards/apikey.guard.d.ts.map +0 -1
- package/dist/core/guards/apikey.guard.js +0 -11
- package/dist/core/guards/apikey.guard.js.map +0 -1
- package/dist/core/guards/guard.interface.d.ts +0 -18
- package/dist/core/guards/guard.interface.d.ts.map +0 -1
- package/dist/core/guards/guard.interface.js +0 -2
- package/dist/core/guards/guard.interface.js.map +0 -1
- package/dist/core/guards/jwt.guard.d.ts +0 -18
- package/dist/core/guards/jwt.guard.d.ts.map +0 -1
- package/dist/core/guards/jwt.guard.js +0 -2
- package/dist/core/guards/jwt.guard.js.map +0 -1
- package/dist/core/guards/oauth.guard.d.ts +0 -35
- package/dist/core/guards/oauth.guard.d.ts.map +0 -1
- package/dist/core/guards/oauth.guard.js +0 -2
- package/dist/core/guards/oauth.guard.js.map +0 -1
- package/dist/core/guards/use-guards.decorator.d.ts +0 -25
- package/dist/core/guards/use-guards.decorator.d.ts.map +0 -1
- package/dist/core/guards/use-guards.decorator.js +0 -32
- package/dist/core/guards/use-guards.decorator.js.map +0 -1
- package/dist/core/health/__tests__/health.test.d.ts +0 -2
- package/dist/core/health/__tests__/health.test.d.ts.map +0 -1
- package/dist/core/health/__tests__/health.test.js +0 -31
- package/dist/core/health/__tests__/health.test.js.map +0 -1
- package/dist/core/health/health-checks.resource.d.ts +0 -14
- package/dist/core/health/health-checks.resource.d.ts.map +0 -1
- package/dist/core/health/health-checks.resource.js +0 -29
- package/dist/core/health/health-checks.resource.js.map +0 -1
- package/dist/core/index.d.ts +0 -57
- package/dist/core/index.d.ts.map +0 -1
- package/dist/core/index.js +0 -59
- package/dist/core/index.js.map +0 -1
- package/dist/core/interceptors/__tests__/interceptors.test.d.ts +0 -2
- package/dist/core/interceptors/__tests__/interceptors.test.d.ts.map +0 -1
- package/dist/core/interceptors/__tests__/interceptors.test.js +0 -52
- package/dist/core/interceptors/__tests__/interceptors.test.js.map +0 -1
- package/dist/core/interceptors/interceptor.decorator.d.ts +0 -37
- package/dist/core/interceptors/interceptor.decorator.d.ts.map +0 -1
- package/dist/core/interceptors/interceptor.decorator.js +0 -51
- package/dist/core/interceptors/interceptor.decorator.js.map +0 -1
- package/dist/core/interceptors/interceptor.interface.d.ts +0 -31
- package/dist/core/interceptors/interceptor.interface.d.ts.map +0 -1
- package/dist/core/interceptors/interceptor.interface.js +0 -2
- package/dist/core/interceptors/interceptor.interface.js.map +0 -1
- package/dist/core/jwt-module.d.ts +0 -51
- package/dist/core/jwt-module.d.ts.map +0 -1
- package/dist/core/jwt-module.js +0 -52
- package/dist/core/jwt-module.js.map +0 -1
- package/dist/core/logger.d.ts +0 -18
- package/dist/core/logger.d.ts.map +0 -1
- package/dist/core/logger.js +0 -53
- package/dist/core/logger.js.map +0 -1
- package/dist/core/middleware/__tests__/middleware.test.d.ts +0 -2
- package/dist/core/middleware/__tests__/middleware.test.d.ts.map +0 -1
- package/dist/core/middleware/__tests__/middleware.test.js +0 -105
- package/dist/core/middleware/__tests__/middleware.test.js.map +0 -1
- package/dist/core/middleware/middleware.decorator.d.ts +0 -39
- package/dist/core/middleware/middleware.decorator.d.ts.map +0 -1
- package/dist/core/middleware/middleware.decorator.js +0 -53
- package/dist/core/middleware/middleware.decorator.js.map +0 -1
- package/dist/core/middleware/middleware.interface.d.ts +0 -29
- package/dist/core/middleware/middleware.interface.d.ts.map +0 -1
- package/dist/core/middleware/middleware.interface.js +0 -2
- package/dist/core/middleware/middleware.interface.js.map +0 -1
- package/dist/core/module.d.ts +0 -93
- package/dist/core/module.d.ts.map +0 -1
- package/dist/core/module.js +0 -87
- package/dist/core/module.js.map +0 -1
- package/dist/core/oauth-module.d.ts +0 -123
- package/dist/core/oauth-module.d.ts.map +0 -1
- package/dist/core/oauth-module.js +0 -324
- package/dist/core/oauth-module.js.map +0 -1
- package/dist/core/pipes/__tests__/pipes.test.d.ts +0 -2
- package/dist/core/pipes/__tests__/pipes.test.d.ts.map +0 -1
- package/dist/core/pipes/__tests__/pipes.test.js +0 -164
- package/dist/core/pipes/__tests__/pipes.test.js.map +0 -1
- package/dist/core/pipes/pipe.decorator.d.ts +0 -64
- package/dist/core/pipes/pipe.decorator.d.ts.map +0 -1
- package/dist/core/pipes/pipe.decorator.js +0 -85
- package/dist/core/pipes/pipe.decorator.js.map +0 -1
- package/dist/core/pipes/pipe.interface.d.ts +0 -41
- package/dist/core/pipes/pipe.interface.d.ts.map +0 -1
- package/dist/core/pipes/pipe.interface.js +0 -2
- package/dist/core/pipes/pipe.interface.js.map +0 -1
- package/dist/core/prompt.d.ts +0 -46
- package/dist/core/prompt.d.ts.map +0 -1
- package/dist/core/prompt.js +0 -76
- package/dist/core/prompt.js.map +0 -1
- package/dist/core/resource.d.ts +0 -47
- package/dist/core/resource.d.ts.map +0 -1
- package/dist/core/resource.js +0 -90
- package/dist/core/resource.js.map +0 -1
- package/dist/core/server.d.ts +0 -129
- package/dist/core/server.d.ts.map +0 -1
- package/dist/core/server.js +0 -617
- package/dist/core/server.js.map +0 -1
- package/dist/core/tool.d.ts +0 -108
- package/dist/core/tool.d.ts.map +0 -1
- package/dist/core/tool.js +0 -241
- package/dist/core/tool.js.map +0 -1
- package/dist/core/transports/__tests__/transports.test.d.ts +0 -2
- package/dist/core/transports/__tests__/transports.test.d.ts.map +0 -1
- package/dist/core/transports/__tests__/transports.test.js +0 -249
- package/dist/core/transports/__tests__/transports.test.js.map +0 -1
- package/dist/core/transports/discovery-http-server.d.ts +0 -19
- package/dist/core/transports/discovery-http-server.d.ts.map +0 -1
- package/dist/core/transports/discovery-http-server.js +0 -54
- package/dist/core/transports/discovery-http-server.js.map +0 -1
- package/dist/core/transports/http-server.d.ts +0 -108
- package/dist/core/transports/http-server.d.ts.map +0 -1
- package/dist/core/transports/http-server.js +0 -293
- package/dist/core/transports/http-server.js.map +0 -1
- package/dist/core/transports/streamable-http.d.ts +0 -177
- package/dist/core/transports/streamable-http.d.ts.map +0 -1
- package/dist/core/transports/streamable-http.js +0 -1287
- package/dist/core/transports/streamable-http.js.map +0 -1
- package/dist/core/types.d.ts +0 -195
- package/dist/core/types.d.ts.map +0 -1
- package/dist/core/types.js +0 -2
- package/dist/core/types.js.map +0 -1
- package/dist/core/widgets/__tests__/registry.test.d.ts +0 -2
- package/dist/core/widgets/__tests__/registry.test.d.ts.map +0 -1
- package/dist/core/widgets/__tests__/registry.test.js +0 -69
- package/dist/core/widgets/__tests__/registry.test.js.map +0 -1
- package/dist/core/widgets/widget-examples.resource.d.ts +0 -17
- package/dist/core/widgets/widget-examples.resource.d.ts.map +0 -1
- package/dist/core/widgets/widget-examples.resource.js +0 -28
- package/dist/core/widgets/widget-examples.resource.js.map +0 -1
- package/dist/core/widgets/widget-registry.d.ts +0 -56
- package/dist/core/widgets/widget-registry.d.ts.map +0 -1
- package/dist/core/widgets/widget-registry.js +0 -75
- package/dist/core/widgets/widget-registry.js.map +0 -1
- package/dist/testing/__tests__/testing.test.d.ts +0 -2
- package/dist/testing/__tests__/testing.test.d.ts.map +0 -1
- package/dist/testing/__tests__/testing.test.js +0 -167
- package/dist/testing/__tests__/testing.test.js.map +0 -1
- package/dist/testing/index.d.ts +0 -103
- package/dist/testing/index.d.ts.map +0 -1
- package/dist/testing/index.js +0 -161
- package/dist/testing/index.js.map +0 -1
- package/dist/ui-next/__tests__/ui-next.test.d.ts +0 -2
- package/dist/ui-next/__tests__/ui-next.test.d.ts.map +0 -1
- package/dist/ui-next/__tests__/ui-next.test.js +0 -74
- package/dist/ui-next/__tests__/ui-next.test.js.map +0 -1
- package/dist/ui-next/index.d.ts +0 -31
- package/dist/ui-next/index.d.ts.map +0 -1
- package/dist/ui-next/index.js +0 -687
- package/dist/ui-next/index.js.map +0 -1
|
@@ -1,123 +0,0 @@
|
|
|
1
|
-
import 'reflect-metadata';
|
|
2
|
-
/**
|
|
3
|
-
* OAuth 2.1 Module Configuration
|
|
4
|
-
*
|
|
5
|
-
* Compliant with:
|
|
6
|
-
* - OAuth 2.1 (draft-ietf-oauth-v2-1-13)
|
|
7
|
-
* - RFC 9728 - Protected Resource Metadata
|
|
8
|
-
* - RFC 8414 - Authorization Server Metadata
|
|
9
|
-
* - RFC 7591 - Dynamic Client Registration
|
|
10
|
-
* - RFC 8707 - Resource Indicators (Token Audience Binding)
|
|
11
|
-
* - RFC 7636 - PKCE
|
|
12
|
-
* - RFC 7662 - Token Introspection
|
|
13
|
-
*/
|
|
14
|
-
export interface OAuthModuleConfig {
|
|
15
|
-
/**
|
|
16
|
-
* Resource URI - The MCP server's public URL
|
|
17
|
-
* Used for token audience validation (RFC 8707)
|
|
18
|
-
*/
|
|
19
|
-
resourceUri: string;
|
|
20
|
-
/**
|
|
21
|
-
* Authorization Server(s)
|
|
22
|
-
* The OAuth 2.1 authorization server URLs
|
|
23
|
-
*/
|
|
24
|
-
authorizationServers: string[];
|
|
25
|
-
/**
|
|
26
|
-
* Supported scopes for this MCP server
|
|
27
|
-
* Example: ['mcp:read', 'mcp:write', 'tools:execute']
|
|
28
|
-
*/
|
|
29
|
-
scopesSupported?: string[];
|
|
30
|
-
/**
|
|
31
|
-
* HTTP server configuration
|
|
32
|
-
* OAuth requires HTTP transport - port will be extracted from resourceUri or use this
|
|
33
|
-
*/
|
|
34
|
-
http?: {
|
|
35
|
-
port?: number;
|
|
36
|
-
host?: string;
|
|
37
|
-
basePath?: string;
|
|
38
|
-
};
|
|
39
|
-
/**
|
|
40
|
-
* Token Introspection Endpoint (RFC 7662)
|
|
41
|
-
* Required for validating opaque tokens
|
|
42
|
-
*/
|
|
43
|
-
tokenIntrospectionEndpoint?: string;
|
|
44
|
-
/**
|
|
45
|
-
* Client ID for token introspection
|
|
46
|
-
*/
|
|
47
|
-
tokenIntrospectionClientId?: string;
|
|
48
|
-
/**
|
|
49
|
-
* Client Secret for token introspection
|
|
50
|
-
* Should be stored in environment variable
|
|
51
|
-
*/
|
|
52
|
-
tokenIntrospectionClientSecret?: string;
|
|
53
|
-
/**
|
|
54
|
-
* Expected audience for tokens (RFC 8707)
|
|
55
|
-
* If not provided, defaults to resourceUri
|
|
56
|
-
*/
|
|
57
|
-
audience?: string;
|
|
58
|
-
/**
|
|
59
|
-
* Issuer validation
|
|
60
|
-
* If provided, tokens must be from this issuer
|
|
61
|
-
*/
|
|
62
|
-
issuer?: string;
|
|
63
|
-
/**
|
|
64
|
-
* Custom token validation
|
|
65
|
-
* Additional validation logic beyond spec requirements
|
|
66
|
-
*/
|
|
67
|
-
customValidation?: (token: unknown) => Promise<boolean> | boolean;
|
|
68
|
-
}
|
|
69
|
-
import { NitroStackServer } from './server.js';
|
|
70
|
-
import { Logger } from './types.js';
|
|
71
|
-
export declare class OAuthModule {
|
|
72
|
-
private config;
|
|
73
|
-
private server;
|
|
74
|
-
private logger;
|
|
75
|
-
private static config;
|
|
76
|
-
private discoveryServer;
|
|
77
|
-
private wellKnownHandler;
|
|
78
|
-
private resourceMetadataHandler;
|
|
79
|
-
constructor(config: OAuthModuleConfig, server: NitroStackServer, logger: Logger);
|
|
80
|
-
onModuleInit(): void;
|
|
81
|
-
start(): Promise<void>;
|
|
82
|
-
stop(): Promise<void>;
|
|
83
|
-
private registerDiscoveryHandlers;
|
|
84
|
-
/**
|
|
85
|
-
* Configure OAuth module for the application
|
|
86
|
-
*/
|
|
87
|
-
static forRoot(config: OAuthModuleConfig): {
|
|
88
|
-
module: typeof OAuthModule;
|
|
89
|
-
providers: {
|
|
90
|
-
provide: string;
|
|
91
|
-
useValue: OAuthModuleConfig;
|
|
92
|
-
}[];
|
|
93
|
-
};
|
|
94
|
-
/**
|
|
95
|
-
* Get current OAuth configuration
|
|
96
|
-
*/
|
|
97
|
-
static getConfig(): OAuthModuleConfig | null;
|
|
98
|
-
/**
|
|
99
|
-
* Validate an access token
|
|
100
|
-
*
|
|
101
|
-
* Performs:
|
|
102
|
-
* 1. Token introspection (if endpoint configured)
|
|
103
|
-
* 2. Audience validation (RFC 8807)
|
|
104
|
-
* 3. Issuer validation (if configured)
|
|
105
|
-
* 4. Custom validation (if configured)
|
|
106
|
-
*/
|
|
107
|
-
static validateToken(token: string): Promise<{
|
|
108
|
-
valid: boolean;
|
|
109
|
-
payload?: Record<string, unknown>;
|
|
110
|
-
error?: string;
|
|
111
|
-
}>;
|
|
112
|
-
/**
|
|
113
|
-
* Introspect token using RFC 7662
|
|
114
|
-
* @private
|
|
115
|
-
*/
|
|
116
|
-
private static introspectToken;
|
|
117
|
-
/**
|
|
118
|
-
* Decode JWT token (without validation)
|
|
119
|
-
* @private
|
|
120
|
-
*/
|
|
121
|
-
private static decodeToken;
|
|
122
|
-
}
|
|
123
|
-
//# sourceMappingURL=oauth-module.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"oauth-module.d.ts","sourceRoot":"","sources":["../../src/core/oauth-module.ts"],"names":[],"mappings":"AAAA,OAAO,kBAAkB,CAAC;AAE1B;;;;;;;;;;;GAWG;AACH,MAAM,WAAW,iBAAiB;IAChC;;;OAGG;IACH,WAAW,EAAE,MAAM,CAAC;IAEpB;;;OAGG;IACH,oBAAoB,EAAE,MAAM,EAAE,CAAC;IAE/B;;;OAGG;IACH,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;IAE3B;;;OAGG;IACH,IAAI,CAAC,EAAE;QACL,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,QAAQ,CAAC,EAAE,MAAM,CAAC;KACnB,CAAC;IAEF;;;OAGG;IACH,0BAA0B,CAAC,EAAE,MAAM,CAAC;IAEpC;;OAEG;IACH,0BAA0B,CAAC,EAAE,MAAM,CAAC;IAEpC;;;OAGG;IACH,8BAA8B,CAAC,EAAE,MAAM,CAAC;IAExC;;;OAGG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAElB;;;OAGG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;IAEhB;;;OAGG;IACH,gBAAgB,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,OAAO,CAAC,OAAO,CAAC,GAAG,OAAO,CAAC;CACnE;AA2CD,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAC/C,OAAO,EAAE,MAAM,EAAE,MAAM,YAAY,CAAC;AAGpC,qBACa,WAAW;IA8BI,OAAO,CAAC,MAAM;IACtC,OAAO,CAAC,MAAM;IACI,OAAO,CAAC,MAAM;IA/BlC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAkC;IACvD,OAAO,CAAC,eAAe,CAAoC;IAE3D,OAAO,CAAC,gBAAgB,CAOtB;IAEF,OAAO,CAAC,uBAAuB,CAc7B;gBAGgC,MAAM,EAAE,iBAAiB,EACjD,MAAM,EAAE,gBAAgB,EACN,MAAM,EAAE,MAAM;IAKnC,YAAY;IAKN,KAAK;IAmCL,IAAI;IAOjB,OAAO,CAAC,yBAAyB;IAKjC;;OAEG;IACH,MAAM,CAAC,OAAO,CAAC,MAAM,EAAE,iBAAiB,GAAG;QAAE,MAAM,EAAE,OAAO,WAAW,CAAC;QAAC,SAAS,EAAE;YAAE,OAAO,EAAE,MAAM,CAAC;YAAC,QAAQ,EAAE,iBAAiB,CAAA;SAAE,EAAE,CAAA;KAAE;IAyBxI;;OAEG;IACH,MAAM,CAAC,SAAS,IAAI,iBAAiB,GAAG,IAAI;IAI5C;;;;;;;;OAQG;WACU,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC;QACjD,KAAK,EAAE,OAAO,CAAC;QACf,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAClC,KAAK,CAAC,EAAE,MAAM,CAAC;KAChB,CAAC;IA2EF;;;OAGG;mBACkB,eAAe;IAyDpC;;;OAGG;IACH,OAAO,CAAC,MAAM,CAAC,WAAW;CAyB3B"}
|
|
@@ -1,324 +0,0 @@
|
|
|
1
|
-
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
2
|
-
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
3
|
-
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
4
|
-
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;
|
|
5
|
-
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
6
|
-
};
|
|
7
|
-
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
8
|
-
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
9
|
-
};
|
|
10
|
-
var __param = (this && this.__param) || function (paramIndex, decorator) {
|
|
11
|
-
return function (target, key) { decorator(target, key, paramIndex); }
|
|
12
|
-
};
|
|
13
|
-
var OAuthModule_1;
|
|
14
|
-
import 'reflect-metadata';
|
|
15
|
-
/**
|
|
16
|
-
* OAuth Module - Enable OAuth 2.1 authentication in your MCP server
|
|
17
|
-
*
|
|
18
|
-
* This module provides:
|
|
19
|
-
* - Protected Resource Metadata (RFC 9728)
|
|
20
|
-
* - Token validation with audience binding (RFC 8707)
|
|
21
|
-
* - Token introspection (RFC 7662)
|
|
22
|
-
* - PKCE support (RFC 7636)
|
|
23
|
-
*
|
|
24
|
-
* Compatible with OpenAI Apps SDK and MCP specification.
|
|
25
|
-
*
|
|
26
|
-
* @example
|
|
27
|
-
* ```typescript
|
|
28
|
-
* import { McpApplicationFactory, OAuthModule } from 'nitrostack';
|
|
29
|
-
* import { AppModule } from './app.module.js';
|
|
30
|
-
*
|
|
31
|
-
* @McpApp({
|
|
32
|
-
* module: AppModule,
|
|
33
|
-
* server: {
|
|
34
|
-
* name: 'OAuth MCP Server',
|
|
35
|
-
* version: '1.0.0',
|
|
36
|
-
* },
|
|
37
|
-
* })
|
|
38
|
-
* @Module({
|
|
39
|
-
* name: 'app',
|
|
40
|
-
* imports: [
|
|
41
|
-
* // Enable OAuth 2.1 authentication
|
|
42
|
-
* OAuthModule.forRoot({
|
|
43
|
-
* resourceUri: process.env.RESOURCE_URI!,
|
|
44
|
-
* authorizationServers: [process.env.AUTH_SERVER_URL!],
|
|
45
|
-
* scopesSupported: ['mcp:read', 'mcp:write', 'tools:execute'],
|
|
46
|
-
* tokenIntrospectionEndpoint: process.env.INTROSPECTION_ENDPOINT,
|
|
47
|
-
* tokenIntrospectionClientId: process.env.INTROSPECTION_CLIENT_ID,
|
|
48
|
-
* tokenIntrospectionClientSecret: process.env.INTROSPECTION_CLIENT_SECRET,
|
|
49
|
-
* }),
|
|
50
|
-
* ],
|
|
51
|
-
* })
|
|
52
|
-
* export class AppModule {}
|
|
53
|
-
* ```
|
|
54
|
-
*/
|
|
55
|
-
import { Injectable, Inject } from './di/injectable.decorator.js';
|
|
56
|
-
import { NitroStackServer } from './server.js';
|
|
57
|
-
import { DiscoveryHttpServer } from './transports/discovery-http-server.js';
|
|
58
|
-
let OAuthModule = class OAuthModule {
|
|
59
|
-
static { OAuthModule_1 = this; }
|
|
60
|
-
config;
|
|
61
|
-
server;
|
|
62
|
-
logger;
|
|
63
|
-
static config = null;
|
|
64
|
-
discoveryServer = null;
|
|
65
|
-
wellKnownHandler = (req, res) => {
|
|
66
|
-
res.writeHead(200, { 'Content-Type': 'application/json' });
|
|
67
|
-
res.end(JSON.stringify({
|
|
68
|
-
issuer: this.config.issuer,
|
|
69
|
-
token_endpoint: `${this.config.authorizationServers[0]}/oauth/token`,
|
|
70
|
-
// Add other metadata as needed
|
|
71
|
-
}));
|
|
72
|
-
};
|
|
73
|
-
resourceMetadataHandler = (req, res) => {
|
|
74
|
-
res.writeHead(200, { 'Content-Type': 'application/json' });
|
|
75
|
-
// RFC 9728 - Protected Resource Metadata format
|
|
76
|
-
const metadata = {
|
|
77
|
-
resource: this.config.resourceUri,
|
|
78
|
-
authorization_servers: this.config.authorizationServers,
|
|
79
|
-
};
|
|
80
|
-
// Add optional fields
|
|
81
|
-
if (this.config.scopesSupported && this.config.scopesSupported.length > 0) {
|
|
82
|
-
metadata.scopes_supported = this.config.scopesSupported;
|
|
83
|
-
}
|
|
84
|
-
res.end(JSON.stringify(metadata));
|
|
85
|
-
};
|
|
86
|
-
constructor(config, server, logger) {
|
|
87
|
-
this.config = config;
|
|
88
|
-
this.server = server;
|
|
89
|
-
this.logger = logger;
|
|
90
|
-
OAuthModule_1.config = config;
|
|
91
|
-
}
|
|
92
|
-
onModuleInit() {
|
|
93
|
-
// Register the discovery endpoints
|
|
94
|
-
// Handlers are now arrow functions, so no need to bind
|
|
95
|
-
}
|
|
96
|
-
async start() {
|
|
97
|
-
this.logger.info('OAuthModule: start method called');
|
|
98
|
-
const transportType = this.server._transportType;
|
|
99
|
-
// Get port from environment or config, fallback to 3005
|
|
100
|
-
// Check MCP_SERVER_PORT first (set by dev command), then PORT, then config
|
|
101
|
-
const port = process.env.MCP_SERVER_PORT
|
|
102
|
-
? parseInt(process.env.MCP_SERVER_PORT)
|
|
103
|
-
: process.env.PORT
|
|
104
|
-
? parseInt(process.env.PORT)
|
|
105
|
-
: (this.config.http?.port || 3005);
|
|
106
|
-
if (transportType === 'stdio') {
|
|
107
|
-
this.logger.info(`OAuthModule: Running in STDIO mode, starting DiscoveryHttpServer on port ${port}`);
|
|
108
|
-
// In stdio mode, start a separate discovery server for OAuth endpoints
|
|
109
|
-
this.discoveryServer = new DiscoveryHttpServer(port, this.logger);
|
|
110
|
-
this.registerDiscoveryHandlers(this.discoveryServer);
|
|
111
|
-
await this.discoveryServer.start();
|
|
112
|
-
}
|
|
113
|
-
else {
|
|
114
|
-
this.logger.info(`OAuthModule: Running in ${transportType} mode, registering handlers with main server`);
|
|
115
|
-
// In http or dual mode, register the handlers with the main server
|
|
116
|
-
const httpTransport = this.server._httpTransport;
|
|
117
|
-
if (httpTransport) {
|
|
118
|
-
this.registerDiscoveryHandlers(httpTransport);
|
|
119
|
-
}
|
|
120
|
-
else {
|
|
121
|
-
// Fallback: if httpTransport is not available, start a discovery server anyway
|
|
122
|
-
// This handles edge cases where the transport setup fails or is delayed
|
|
123
|
-
this.logger.warn(`OAuthModule: httpTransport not found for ${transportType} mode. Starting fallback DiscoveryHttpServer on port ${port}`);
|
|
124
|
-
this.discoveryServer = new DiscoveryHttpServer(port, this.logger);
|
|
125
|
-
this.registerDiscoveryHandlers(this.discoveryServer);
|
|
126
|
-
await this.discoveryServer.start();
|
|
127
|
-
}
|
|
128
|
-
}
|
|
129
|
-
}
|
|
130
|
-
async stop() {
|
|
131
|
-
if (this.discoveryServer) {
|
|
132
|
-
await this.discoveryServer.stop();
|
|
133
|
-
this.discoveryServer = null;
|
|
134
|
-
}
|
|
135
|
-
}
|
|
136
|
-
registerDiscoveryHandlers(server) {
|
|
137
|
-
server.on('/.well-known/oauth-authorization-server', this.wellKnownHandler);
|
|
138
|
-
server.on('/.well-known/oauth-protected-resource', this.resourceMetadataHandler);
|
|
139
|
-
}
|
|
140
|
-
/**
|
|
141
|
-
* Configure OAuth module for the application
|
|
142
|
-
*/
|
|
143
|
-
static forRoot(config) {
|
|
144
|
-
// Validate required fields
|
|
145
|
-
if (!config.resourceUri) {
|
|
146
|
-
throw new Error('OAuthModule: resourceUri is required');
|
|
147
|
-
}
|
|
148
|
-
if (!config.authorizationServers || config.authorizationServers.length === 0) {
|
|
149
|
-
throw new Error('OAuthModule: at least one authorizationServer is required');
|
|
150
|
-
}
|
|
151
|
-
// Set default audience to resourceUri if not provided
|
|
152
|
-
if (!config.audience) {
|
|
153
|
-
config.audience = config.resourceUri;
|
|
154
|
-
}
|
|
155
|
-
this.config = config;
|
|
156
|
-
return {
|
|
157
|
-
module: OAuthModule_1,
|
|
158
|
-
providers: [
|
|
159
|
-
{ provide: 'OAUTH_CONFIG', useValue: config }
|
|
160
|
-
],
|
|
161
|
-
};
|
|
162
|
-
}
|
|
163
|
-
/**
|
|
164
|
-
* Get current OAuth configuration
|
|
165
|
-
*/
|
|
166
|
-
static getConfig() {
|
|
167
|
-
return this.config;
|
|
168
|
-
}
|
|
169
|
-
/**
|
|
170
|
-
* Validate an access token
|
|
171
|
-
*
|
|
172
|
-
* Performs:
|
|
173
|
-
* 1. Token introspection (if endpoint configured)
|
|
174
|
-
* 2. Audience validation (RFC 8807)
|
|
175
|
-
* 3. Issuer validation (if configured)
|
|
176
|
-
* 4. Custom validation (if configured)
|
|
177
|
-
*/
|
|
178
|
-
static async validateToken(token) {
|
|
179
|
-
if (!this.config) {
|
|
180
|
-
return { valid: false, error: 'OAuth module not configured' };
|
|
181
|
-
}
|
|
182
|
-
try {
|
|
183
|
-
// Decode the header to check token type and provide helpful error message
|
|
184
|
-
try {
|
|
185
|
-
const headerPart = token.split('.')[0];
|
|
186
|
-
const decodedHeader = JSON.parse(Buffer.from(headerPart, 'base64').toString());
|
|
187
|
-
// Check if we received a JWE (encrypted) token instead of JWT
|
|
188
|
-
if (decodedHeader.alg === 'dir' || decodedHeader.enc) {
|
|
189
|
-
return {
|
|
190
|
-
valid: false,
|
|
191
|
-
error: 'Received encrypted JWE token. MCP servers require unencrypted JWT access tokens. Check your OAuth provider application settings to ensure ID Token Encryption is disabled and that the "audience" parameter is being sent in authorization requests.'
|
|
192
|
-
};
|
|
193
|
-
}
|
|
194
|
-
}
|
|
195
|
-
catch (headerError) {
|
|
196
|
-
// If header decode fails, continue with normal validation
|
|
197
|
-
}
|
|
198
|
-
// If introspection endpoint is configured, use it
|
|
199
|
-
if (this.config.tokenIntrospectionEndpoint) {
|
|
200
|
-
return await this.introspectToken(token);
|
|
201
|
-
}
|
|
202
|
-
// For JWT tokens without introspection, decode and validate
|
|
203
|
-
// Note: In production, you should validate JWT signature
|
|
204
|
-
const payload = this.decodeToken(token);
|
|
205
|
-
if (!payload) {
|
|
206
|
-
return { valid: false, error: 'Invalid token format' };
|
|
207
|
-
}
|
|
208
|
-
// Validate audience (RFC 8707 - critical for security)
|
|
209
|
-
if (payload.aud) {
|
|
210
|
-
const audiences = Array.isArray(payload.aud) ? payload.aud : [payload.aud];
|
|
211
|
-
if (!audiences.includes(this.config.audience)) {
|
|
212
|
-
return {
|
|
213
|
-
valid: false,
|
|
214
|
-
error: `Token audience mismatch. Expected: ${this.config.audience}, Got: ${audiences.join(', ')}`,
|
|
215
|
-
};
|
|
216
|
-
}
|
|
217
|
-
}
|
|
218
|
-
// Validate issuer
|
|
219
|
-
if (this.config.issuer && payload.iss !== this.config.issuer) {
|
|
220
|
-
return {
|
|
221
|
-
valid: false,
|
|
222
|
-
error: `Token issuer mismatch. Expected: ${this.config.issuer}, Got: ${payload.iss}`,
|
|
223
|
-
};
|
|
224
|
-
}
|
|
225
|
-
// Check expiration
|
|
226
|
-
const expiration = payload.exp;
|
|
227
|
-
if (expiration && expiration < Date.now() / 1000) {
|
|
228
|
-
return { valid: false, error: 'Token expired' };
|
|
229
|
-
}
|
|
230
|
-
// Custom validation
|
|
231
|
-
if (this.config.customValidation) {
|
|
232
|
-
const customValid = await this.config.customValidation(payload);
|
|
233
|
-
if (!customValid) {
|
|
234
|
-
return { valid: false, error: 'Custom validation failed' };
|
|
235
|
-
}
|
|
236
|
-
}
|
|
237
|
-
return { valid: true, payload };
|
|
238
|
-
}
|
|
239
|
-
catch (error) {
|
|
240
|
-
return { valid: false, error: error instanceof Error ? error.message : String(error) };
|
|
241
|
-
}
|
|
242
|
-
}
|
|
243
|
-
/**
|
|
244
|
-
* Introspect token using RFC 7662
|
|
245
|
-
* @private
|
|
246
|
-
*/
|
|
247
|
-
static async introspectToken(token) {
|
|
248
|
-
if (!this.config?.tokenIntrospectionEndpoint) {
|
|
249
|
-
return { valid: false, error: 'Introspection endpoint not configured' };
|
|
250
|
-
}
|
|
251
|
-
try {
|
|
252
|
-
const auth = Buffer.from(`${this.config.tokenIntrospectionClientId}:${this.config.tokenIntrospectionClientSecret}`).toString('base64');
|
|
253
|
-
const response = await fetch(this.config.tokenIntrospectionEndpoint, {
|
|
254
|
-
method: 'POST',
|
|
255
|
-
headers: {
|
|
256
|
-
'Content-Type': 'application/x-www-form-urlencoded',
|
|
257
|
-
'Authorization': `Basic ${auth}`,
|
|
258
|
-
},
|
|
259
|
-
body: new URLSearchParams({
|
|
260
|
-
token: token,
|
|
261
|
-
token_type_hint: 'access_token',
|
|
262
|
-
}),
|
|
263
|
-
});
|
|
264
|
-
if (!response.ok) {
|
|
265
|
-
return {
|
|
266
|
-
valid: false,
|
|
267
|
-
error: `Introspection failed: ${response.status} ${response.statusText}`,
|
|
268
|
-
};
|
|
269
|
-
}
|
|
270
|
-
const result = await response.json();
|
|
271
|
-
if (!result.active) {
|
|
272
|
-
return { valid: false, error: 'Token is not active' };
|
|
273
|
-
}
|
|
274
|
-
// Validate audience from introspection response
|
|
275
|
-
if (result.aud) {
|
|
276
|
-
const audiences = Array.isArray(result.aud) ? result.aud : [result.aud];
|
|
277
|
-
if (!audiences.includes(this.config.audience)) {
|
|
278
|
-
return {
|
|
279
|
-
valid: false,
|
|
280
|
-
error: `Token audience mismatch. Expected: ${this.config.audience}`,
|
|
281
|
-
};
|
|
282
|
-
}
|
|
283
|
-
}
|
|
284
|
-
return { valid: true, payload: result };
|
|
285
|
-
}
|
|
286
|
-
catch (error) {
|
|
287
|
-
return { valid: false, error: `Introspection error: ${error instanceof Error ? error.message : String(error)}` };
|
|
288
|
-
}
|
|
289
|
-
}
|
|
290
|
-
/**
|
|
291
|
-
* Decode JWT token (without validation)
|
|
292
|
-
* @private
|
|
293
|
-
*/
|
|
294
|
-
static decodeToken(token) {
|
|
295
|
-
try {
|
|
296
|
-
const parts = token.split('.');
|
|
297
|
-
if (parts.length !== 3)
|
|
298
|
-
return null;
|
|
299
|
-
// Convert base64url to base64 by replacing URL-safe characters
|
|
300
|
-
let base64 = parts[1].replace(/-/g, '+').replace(/_/g, '/');
|
|
301
|
-
// Add padding if necessary
|
|
302
|
-
const padding = base64.length % 4;
|
|
303
|
-
if (padding === 2) {
|
|
304
|
-
base64 += '==';
|
|
305
|
-
}
|
|
306
|
-
else if (padding === 3) {
|
|
307
|
-
base64 += '=';
|
|
308
|
-
}
|
|
309
|
-
const payload = JSON.parse(Buffer.from(base64, 'base64').toString('utf8'));
|
|
310
|
-
return payload;
|
|
311
|
-
}
|
|
312
|
-
catch {
|
|
313
|
-
return null;
|
|
314
|
-
}
|
|
315
|
-
}
|
|
316
|
-
};
|
|
317
|
-
OAuthModule = OAuthModule_1 = __decorate([
|
|
318
|
-
Injectable(),
|
|
319
|
-
__param(0, Inject('OAUTH_CONFIG')),
|
|
320
|
-
__param(2, Inject('Logger')),
|
|
321
|
-
__metadata("design:paramtypes", [Object, NitroStackServer, Object])
|
|
322
|
-
], OAuthModule);
|
|
323
|
-
export { OAuthModule };
|
|
324
|
-
//# sourceMappingURL=oauth-module.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"oauth-module.js","sourceRoot":"","sources":["../../src/core/oauth-module.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"pipes.test.d.ts","sourceRoot":"","sources":["../../../../src/core/pipes/__tests__/pipes.test.ts"],"names":[],"mappings":"AACA,OAAO,kBAAkB,CAAC"}
|
|
@@ -1,164 +0,0 @@
|
|
|
1
|
-
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
2
|
-
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
3
|
-
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
4
|
-
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;
|
|
5
|
-
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
6
|
-
};
|
|
7
|
-
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
8
|
-
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
9
|
-
};
|
|
10
|
-
var __param = (this && this.__param) || function (paramIndex, decorator) {
|
|
11
|
-
return function (target, key) { decorator(target, key, paramIndex); }
|
|
12
|
-
};
|
|
13
|
-
import { describe, it, expect } from '@jest/globals';
|
|
14
|
-
import 'reflect-metadata';
|
|
15
|
-
import { UsePipes, getPipeMetadata, Pipe, Body, Validated, getParamPipesMetadata, isPipe } from '../pipe.decorator.js';
|
|
16
|
-
describe('Pipes Module', () => {
|
|
17
|
-
describe('@Pipe Decorator', () => {
|
|
18
|
-
it('should mark a class as a pipe', () => {
|
|
19
|
-
let TestPipe = class TestPipe {
|
|
20
|
-
transform(value) { return value; }
|
|
21
|
-
};
|
|
22
|
-
TestPipe = __decorate([
|
|
23
|
-
Pipe()
|
|
24
|
-
], TestPipe);
|
|
25
|
-
expect(isPipe(TestPipe)).toBe(true);
|
|
26
|
-
});
|
|
27
|
-
it('should return false for non-pipe classes', () => {
|
|
28
|
-
class RegularClass {
|
|
29
|
-
}
|
|
30
|
-
expect(isPipe(RegularClass)).toBe(false);
|
|
31
|
-
});
|
|
32
|
-
});
|
|
33
|
-
describe('@UsePipes Decorator', () => {
|
|
34
|
-
it('should register pipes metadata', () => {
|
|
35
|
-
class MockPipe {
|
|
36
|
-
transform(value) { return value; }
|
|
37
|
-
}
|
|
38
|
-
class TestController {
|
|
39
|
-
method() { }
|
|
40
|
-
}
|
|
41
|
-
__decorate([
|
|
42
|
-
UsePipes(MockPipe),
|
|
43
|
-
__metadata("design:type", Function),
|
|
44
|
-
__metadata("design:paramtypes", []),
|
|
45
|
-
__metadata("design:returntype", void 0)
|
|
46
|
-
], TestController.prototype, "method", null);
|
|
47
|
-
const metadata = getPipeMetadata(TestController.prototype, 'method');
|
|
48
|
-
expect(metadata).toEqual([MockPipe]);
|
|
49
|
-
});
|
|
50
|
-
it('should register multiple pipes', () => {
|
|
51
|
-
class Pipe1 {
|
|
52
|
-
transform(v) { return v; }
|
|
53
|
-
}
|
|
54
|
-
class Pipe2 {
|
|
55
|
-
transform(v) { return v; }
|
|
56
|
-
}
|
|
57
|
-
class TestController {
|
|
58
|
-
method() { }
|
|
59
|
-
}
|
|
60
|
-
__decorate([
|
|
61
|
-
UsePipes(Pipe1, Pipe2),
|
|
62
|
-
__metadata("design:type", Function),
|
|
63
|
-
__metadata("design:paramtypes", []),
|
|
64
|
-
__metadata("design:returntype", void 0)
|
|
65
|
-
], TestController.prototype, "method", null);
|
|
66
|
-
const metadata = getPipeMetadata(TestController.prototype, 'method');
|
|
67
|
-
expect(metadata).toEqual([Pipe1, Pipe2]);
|
|
68
|
-
});
|
|
69
|
-
it('should return empty array for methods without pipes', () => {
|
|
70
|
-
class TestController {
|
|
71
|
-
method() { }
|
|
72
|
-
}
|
|
73
|
-
const metadata = getPipeMetadata(TestController.prototype, 'method');
|
|
74
|
-
expect(metadata).toEqual([]);
|
|
75
|
-
});
|
|
76
|
-
it('should accumulate pipes from multiple @UsePipes', () => {
|
|
77
|
-
class Pipe1 {
|
|
78
|
-
transform(v) { return v; }
|
|
79
|
-
}
|
|
80
|
-
class Pipe2 {
|
|
81
|
-
transform(v) { return v; }
|
|
82
|
-
}
|
|
83
|
-
class TestController {
|
|
84
|
-
method() { }
|
|
85
|
-
}
|
|
86
|
-
__decorate([
|
|
87
|
-
UsePipes(Pipe1),
|
|
88
|
-
UsePipes(Pipe2),
|
|
89
|
-
__metadata("design:type", Function),
|
|
90
|
-
__metadata("design:paramtypes", []),
|
|
91
|
-
__metadata("design:returntype", void 0)
|
|
92
|
-
], TestController.prototype, "method", null);
|
|
93
|
-
const metadata = getPipeMetadata(TestController.prototype, 'method');
|
|
94
|
-
expect(metadata).toContain(Pipe1);
|
|
95
|
-
expect(metadata).toContain(Pipe2);
|
|
96
|
-
});
|
|
97
|
-
});
|
|
98
|
-
describe('@Body Decorator', () => {
|
|
99
|
-
it('should register parameter pipe metadata', () => {
|
|
100
|
-
class ValidationPipe {
|
|
101
|
-
transform(v) { return v; }
|
|
102
|
-
}
|
|
103
|
-
class TestController {
|
|
104
|
-
method(input) { }
|
|
105
|
-
}
|
|
106
|
-
__decorate([
|
|
107
|
-
__param(0, Body(ValidationPipe)),
|
|
108
|
-
__metadata("design:type", Function),
|
|
109
|
-
__metadata("design:paramtypes", [Object]),
|
|
110
|
-
__metadata("design:returntype", void 0)
|
|
111
|
-
], TestController.prototype, "method", null);
|
|
112
|
-
const metadata = getParamPipesMetadata(TestController.prototype, 'method');
|
|
113
|
-
expect(metadata[0]).toEqual({
|
|
114
|
-
type: 'body',
|
|
115
|
-
pipes: [ValidationPipe]
|
|
116
|
-
});
|
|
117
|
-
});
|
|
118
|
-
it('should register multiple pipes for parameter', () => {
|
|
119
|
-
class Pipe1 {
|
|
120
|
-
transform(v) { return v; }
|
|
121
|
-
}
|
|
122
|
-
class Pipe2 {
|
|
123
|
-
transform(v) { return v; }
|
|
124
|
-
}
|
|
125
|
-
class TestController {
|
|
126
|
-
method(input) { }
|
|
127
|
-
}
|
|
128
|
-
__decorate([
|
|
129
|
-
__param(0, Body(Pipe1, Pipe2)),
|
|
130
|
-
__metadata("design:type", Function),
|
|
131
|
-
__metadata("design:paramtypes", [Object]),
|
|
132
|
-
__metadata("design:returntype", void 0)
|
|
133
|
-
], TestController.prototype, "method", null);
|
|
134
|
-
const metadata = getParamPipesMetadata(TestController.prototype, 'method');
|
|
135
|
-
expect(metadata[0].pipes).toEqual([Pipe1, Pipe2]);
|
|
136
|
-
});
|
|
137
|
-
it('should return empty object for methods without param pipes', () => {
|
|
138
|
-
class TestController {
|
|
139
|
-
method(input) { }
|
|
140
|
-
}
|
|
141
|
-
const metadata = getParamPipesMetadata(TestController.prototype, 'method');
|
|
142
|
-
expect(metadata).toEqual({});
|
|
143
|
-
});
|
|
144
|
-
});
|
|
145
|
-
describe('@Validated Decorator', () => {
|
|
146
|
-
it('should register body type with empty pipes', () => {
|
|
147
|
-
class TestController {
|
|
148
|
-
method(input) { }
|
|
149
|
-
}
|
|
150
|
-
__decorate([
|
|
151
|
-
__param(0, Validated()),
|
|
152
|
-
__metadata("design:type", Function),
|
|
153
|
-
__metadata("design:paramtypes", [Object]),
|
|
154
|
-
__metadata("design:returntype", void 0)
|
|
155
|
-
], TestController.prototype, "method", null);
|
|
156
|
-
const metadata = getParamPipesMetadata(TestController.prototype, 'method');
|
|
157
|
-
expect(metadata[0]).toEqual({
|
|
158
|
-
type: 'body',
|
|
159
|
-
pipes: []
|
|
160
|
-
});
|
|
161
|
-
});
|
|
162
|
-
});
|
|
163
|
-
});
|
|
164
|
-
//# sourceMappingURL=pipes.test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"pipes.test.js","sourceRoot":"","sources":["../../../../src/core/pipes/__tests__/pipes.test.ts"],"names":[],"mappings":"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"}
|