memory-journal-mcp 6.1.2 → 6.2.1
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 +44 -28
- package/dist/{chunk-X4SWFATC.js → chunk-BI4ZNSKA.js} +38 -24
- package/dist/{chunk-HCEWINSB.js → chunk-N6EBIDN7.js} +99 -102
- package/dist/cli.js +2 -2
- package/dist/index.js +2 -2
- package/dist/tools-WPRY5MJ6.js +2 -0
- package/package.json +10 -1
- package/skills/github-commander/SKILL.md +151 -0
- package/skills/github-commander/config/project-config.example.md +125 -0
- package/skills/github-commander/workflows/code-quality-audit.md +80 -0
- package/skills/github-commander/workflows/full-audit.md +134 -0
- package/skills/github-commander/workflows/issue-triage.md +239 -0
- package/skills/github-commander/workflows/milestone-sprint.md +81 -0
- package/skills/github-commander/workflows/perf-audit.md +142 -0
- package/skills/github-commander/workflows/pr-review.md +123 -0
- package/skills/github-commander/workflows/security-audit.md +170 -0
- package/skills/github-commander/workflows/update-deps.md +109 -0
- package/.dockerignore +0 -139
- package/.gitattributes +0 -20
- package/.github/ISSUE_TEMPLATE/bug_report.md +0 -95
- package/.github/ISSUE_TEMPLATE/config.yml +0 -11
- package/.github/ISSUE_TEMPLATE/feature_request.md +0 -110
- package/.github/ISSUE_TEMPLATE/question.md +0 -78
- package/.github/aw/actions-lock.json +0 -14
- package/.github/copilot-instructions.md +0 -122
- package/.github/dependabot.yml +0 -93
- package/.github/pull_request_template.md +0 -135
- package/.github/workflows/README.md +0 -133
- package/.github/workflows/agentics-maintenance.yml +0 -141
- package/.github/workflows/auto-release.yml +0 -68
- package/.github/workflows/ci-health-monitor.lock.yml +0 -1121
- package/.github/workflows/ci-health-monitor.md +0 -87
- package/.github/workflows/codeql.yml +0 -41
- package/.github/workflows/dependabot-auto-merge.yml +0 -42
- package/.github/workflows/dependency-maintenance.lock.yml +0 -1182
- package/.github/workflows/dependency-maintenance.md +0 -147
- package/.github/workflows/docker-publish.yml +0 -254
- package/.github/workflows/docs-drift-detector.lock.yml +0 -1142
- package/.github/workflows/docs-drift-detector.md +0 -115
- package/.github/workflows/lint-and-test.yml +0 -60
- package/.github/workflows/publish-npm.yml +0 -85
- package/.github/workflows/secrets-scanning.yml +0 -32
- package/.github/workflows/security-update.yml +0 -127
- package/.gitleaks.toml +0 -9
- package/.prettierignore +0 -21
- package/.prettierrc +0 -33
- package/.scout-ignore +0 -12
- package/.trivyignore +0 -21
- package/CHANGELOG.md +0 -1814
- package/CODE_OF_CONDUCT.md +0 -133
- package/CONTRIBUTING.md +0 -263
- package/DOCKER_README.md +0 -331
- package/Dockerfile +0 -128
- package/SECURITY.md +0 -227
- package/UNRELEASED.md +0 -1
- package/dist/tools-T4U5A3X4.js +0 -2
- package/docker-compose.yml +0 -71
- package/docs/README.md +0 -18
- package/docs/agentic-journal-synergy.md +0 -175
- package/docs/copilot-setup.md +0 -72
- package/eslint.config.js +0 -110
- package/mcp-config-example.json +0 -21
- package/playwright.config.ts +0 -35
- package/releases/v2.1.0.md +0 -220
- package/releases/v2.2.0.md +0 -168
- package/releases/v3.0.0.md +0 -237
- package/releases/v3.1.0.md +0 -104
- package/releases/v3.1.1.md +0 -42
- package/releases/v3.1.2.md +0 -40
- package/releases/v3.1.3.md +0 -64
- package/releases/v3.1.4.md +0 -32
- package/releases/v3.1.5.md +0 -44
- package/releases/v4.0.0.md +0 -71
- package/releases/v4.1.0.md +0 -88
- package/releases/v4.2.0.md +0 -90
- package/releases/v4.3.0.md +0 -92
- package/releases/v4.3.1.md +0 -69
- package/releases/v4.4.0.md +0 -120
- package/releases/v4.4.1.md +0 -33
- package/releases/v4.4.2.md +0 -31
- package/releases/v4.5.0.md +0 -116
- package/releases/v5.0.0.md +0 -105
- package/releases/v5.0.1.md +0 -25
- package/releases/v5.1.0.md +0 -83
- package/releases/v5.1.1.md +0 -10
- package/releases/v6.0.0.md +0 -48
- package/releases/v6.0.1.md +0 -36
- package/releases/v6.1.0.md +0 -68
- package/releases/v6.1.1.md +0 -30
- package/releases/v6.1.2.md +0 -23
- package/scripts/generate-server-instructions.ts +0 -306
- package/scripts/server-instructions-function-body.ts +0 -107
- package/scripts/server-instructions-gotchas.ts +0 -45
- package/server.json +0 -42
- package/social-preview.png +0 -0
- package/src/auth/auth-context.ts +0 -78
- package/src/auth/authorization-server-discovery.ts +0 -263
- package/src/auth/errors.ts +0 -215
- package/src/auth/index.ts +0 -58
- package/src/auth/middleware.ts +0 -392
- package/src/auth/oauth-resource-server.ts +0 -170
- package/src/auth/scope-map.ts +0 -46
- package/src/auth/scopes.ts +0 -256
- package/src/auth/token-validator.ts +0 -293
- package/src/auth/transport-agnostic.ts +0 -164
- package/src/auth/types.ts +0 -372
- package/src/cli.ts +0 -279
- package/src/codemode/api-constants.ts +0 -263
- package/src/codemode/api.ts +0 -302
- package/src/codemode/auto-return.ts +0 -65
- package/src/codemode/index.ts +0 -47
- package/src/codemode/sandbox-factory.ts +0 -144
- package/src/codemode/sandbox.ts +0 -220
- package/src/codemode/security.ts +0 -155
- package/src/codemode/types.ts +0 -228
- package/src/codemode/worker-sandbox.ts +0 -277
- package/src/codemode/worker-script.ts +0 -239
- package/src/constants/icons.ts +0 -183
- package/src/constants/server-instructions.md +0 -166
- package/src/constants/server-instructions.ts +0 -514
- package/src/database/adapter-factory.ts +0 -16
- package/src/database/core/entry-columns.ts +0 -10
- package/src/database/core/interfaces.ts +0 -188
- package/src/database/core/schema.ts +0 -152
- package/src/database/sqlite-adapter/backup.ts +0 -167
- package/src/database/sqlite-adapter/entries/crud.ts +0 -233
- package/src/database/sqlite-adapter/entries/importance.ts +0 -76
- package/src/database/sqlite-adapter/entries/index.ts +0 -142
- package/src/database/sqlite-adapter/entries/search.ts +0 -294
- package/src/database/sqlite-adapter/entries/shared.ts +0 -102
- package/src/database/sqlite-adapter/entries/statistics.ts +0 -162
- package/src/database/sqlite-adapter/index.ts +0 -265
- package/src/database/sqlite-adapter/native-connection.ts +0 -301
- package/src/database/sqlite-adapter/relationships.ts +0 -70
- package/src/database/sqlite-adapter/tags.ts +0 -182
- package/src/filtering/tool-filter.ts +0 -312
- package/src/github/github-integration/client.ts +0 -114
- package/src/github/github-integration/index.ts +0 -297
- package/src/github/github-integration/insights.ts +0 -155
- package/src/github/github-integration/issues.ts +0 -213
- package/src/github/github-integration/milestones.ts +0 -262
- package/src/github/github-integration/projects.ts +0 -414
- package/src/github/github-integration/pull-requests.ts +0 -235
- package/src/github/github-integration/repository.ts +0 -110
- package/src/github/github-integration/types.ts +0 -43
- package/src/handlers/prompts/github.ts +0 -210
- package/src/handlers/prompts/index.ts +0 -97
- package/src/handlers/prompts/workflow.ts +0 -361
- package/src/handlers/resources/core/briefing/context-section.ts +0 -182
- package/src/handlers/resources/core/briefing/github-section.ts +0 -354
- package/src/handlers/resources/core/briefing/index.ts +0 -106
- package/src/handlers/resources/core/briefing/user-message.ts +0 -114
- package/src/handlers/resources/core/health.ts +0 -75
- package/src/handlers/resources/core/index.ts +0 -31
- package/src/handlers/resources/core/instructions.ts +0 -45
- package/src/handlers/resources/core/utilities.ts +0 -310
- package/src/handlers/resources/github.ts +0 -340
- package/src/handlers/resources/graph.ts +0 -218
- package/src/handlers/resources/help.ts +0 -410
- package/src/handlers/resources/index.ts +0 -143
- package/src/handlers/resources/shared.ts +0 -219
- package/src/handlers/resources/team.ts +0 -134
- package/src/handlers/resources/templates.ts +0 -334
- package/src/handlers/tools/admin.ts +0 -351
- package/src/handlers/tools/analytics.ts +0 -346
- package/src/handlers/tools/backup.ts +0 -272
- package/src/handlers/tools/codemode.ts +0 -188
- package/src/handlers/tools/core.ts +0 -359
- package/src/handlers/tools/error-fields-mixin.ts +0 -10
- package/src/handlers/tools/export.ts +0 -150
- package/src/handlers/tools/github/copilot-tools.ts +0 -72
- package/src/handlers/tools/github/helpers.ts +0 -125
- package/src/handlers/tools/github/insights-tools.ts +0 -112
- package/src/handlers/tools/github/issue-tools.ts +0 -442
- package/src/handlers/tools/github/kanban-tools.ts +0 -153
- package/src/handlers/tools/github/milestone-tools.ts +0 -371
- package/src/handlers/tools/github/mutation-tools.ts +0 -17
- package/src/handlers/tools/github/read-tools.ts +0 -302
- package/src/handlers/tools/github/schemas.ts +0 -435
- package/src/handlers/tools/github.ts +0 -39
- package/src/handlers/tools/index.ts +0 -255
- package/src/handlers/tools/relationships.ts +0 -390
- package/src/handlers/tools/schemas.ts +0 -165
- package/src/handlers/tools/search.ts +0 -448
- package/src/handlers/tools/team/admin-tools.ts +0 -164
- package/src/handlers/tools/team/analytics-tools.ts +0 -233
- package/src/handlers/tools/team/backup-tools.ts +0 -83
- package/src/handlers/tools/team/core-tools.ts +0 -197
- package/src/handlers/tools/team/export-tools.ts +0 -130
- package/src/handlers/tools/team/helpers.ts +0 -66
- package/src/handlers/tools/team/index.ts +0 -45
- package/src/handlers/tools/team/relationship-tools.ts +0 -219
- package/src/handlers/tools/team/schemas.ts +0 -558
- package/src/handlers/tools/team/search-tools.ts +0 -145
- package/src/handlers/tools/team/vector-tools.ts +0 -261
- package/src/index.ts +0 -57
- package/src/server/mcp-server.ts +0 -446
- package/src/server/registration.ts +0 -141
- package/src/server/scheduler.ts +0 -283
- package/src/transports/http/handlers.ts +0 -78
- package/src/transports/http/index.ts +0 -8
- package/src/transports/http/security.ts +0 -147
- package/src/transports/http/server/index.ts +0 -397
- package/src/transports/http/server/legacy-sse.ts +0 -87
- package/src/transports/http/server/stateful.ts +0 -222
- package/src/transports/http/server/stateless.ts +0 -42
- package/src/transports/http/types.ts +0 -132
- package/src/types/entities.ts +0 -145
- package/src/types/error-types.ts +0 -92
- package/src/types/errors.ts +0 -200
- package/src/types/filtering.ts +0 -55
- package/src/types/github.ts +0 -216
- package/src/types/index.ts +0 -348
- package/src/utils/error-helpers.ts +0 -78
- package/src/utils/errors/error-response-fields.ts +0 -29
- package/src/utils/errors/suggestions.ts +0 -94
- package/src/utils/github-helpers.ts +0 -33
- package/src/utils/logger.ts +0 -107
- package/src/utils/mcp-logger.ts +0 -155
- package/src/utils/progress-utils.ts +0 -100
- package/src/utils/query-helpers.ts +0 -78
- package/src/utils/resource-annotations.ts +0 -75
- package/src/utils/security-utils.ts +0 -198
- package/src/utils/vector-index-helpers.ts +0 -24
- package/src/vector/vector-search-manager.ts +0 -409
- package/src/version.ts +0 -15
- package/test-server/README.md +0 -193
- package/test-server/code-map.md +0 -399
- package/test-server/test-agent-experience.md +0 -213
- package/test-server/test-filter-instructions.mjs +0 -295
- package/test-server/test-instruction-levels.mjs +0 -102
- package/test-server/test-preflight.md +0 -55
- package/test-server/test-prompts.mjs +0 -185
- package/test-server/test-scheduler.mjs +0 -174
- package/test-server/test-tool-annotations.mjs +0 -115
- package/test-server/test-tools-codemode.md +0 -632
- package/test-server/test-tools-codemode2.md +0 -1218
- package/test-server/test-tools-team.md +0 -215
- package/test-server/test-tools.md +0 -429
- package/test-server/test-tools2.md +0 -361
- package/test-server/test-tools3.md +0 -396
- package/test-server/tool-reference.md +0 -231
- package/tests/README.md +0 -54
- package/tests/auth/auth-context.test.ts +0 -162
- package/tests/auth/authorization-server-discovery.test.ts +0 -265
- package/tests/auth/errors.test.ts +0 -170
- package/tests/auth/middleware.test.ts +0 -585
- package/tests/auth/oauth-resource-server.test.ts +0 -173
- package/tests/auth/scope-map.test.ts +0 -66
- package/tests/auth/scopes.test.ts +0 -347
- package/tests/auth/token-validator.test.ts +0 -271
- package/tests/codemode/api.test.ts +0 -396
- package/tests/codemode/auto-return.test.ts +0 -167
- package/tests/codemode/codemode-tool-handlers.test.ts +0 -197
- package/tests/codemode/sandbox-factory.test.ts +0 -152
- package/tests/codemode/sandbox.test.ts +0 -190
- package/tests/codemode/security.test.ts +0 -242
- package/tests/codemode/worker-sandbox.test.ts +0 -106
- package/tests/constants/icons.test.ts +0 -101
- package/tests/constants/server-instructions.test.ts +0 -514
- package/tests/database/crud-workflow-branches.test.ts +0 -418
- package/tests/database/database-branches.test.ts +0 -132
- package/tests/database/entries-auth-branches.test.ts +0 -390
- package/tests/database/native-connection.test.ts +0 -249
- package/tests/database/shared-helpers.test.ts +0 -103
- package/tests/database/sqlite-adapter.bench.ts +0 -63
- package/tests/database/sqlite-adapter.test.ts +0 -690
- package/tests/database/tags.test.ts +0 -134
- package/tests/e2e/README.md +0 -39
- package/tests/e2e/auth.spec.ts +0 -106
- package/tests/e2e/codemode-abuse.spec.ts +0 -75
- package/tests/e2e/health.spec.ts +0 -63
- package/tests/e2e/helpers.ts +0 -139
- package/tests/e2e/oauth-discovery.spec.ts +0 -102
- package/tests/e2e/oauth-scopes.spec.ts +0 -222
- package/tests/e2e/payloads-admin.spec.ts +0 -76
- package/tests/e2e/payloads-analytics.spec.ts +0 -37
- package/tests/e2e/payloads-backup-restore.spec.ts +0 -102
- package/tests/e2e/payloads-backup.spec.ts +0 -44
- package/tests/e2e/payloads-codemode-api.spec.ts +0 -131
- package/tests/e2e/payloads-codemode-readonly.spec.ts +0 -116
- package/tests/e2e/payloads-codemode.spec.ts +0 -116
- package/tests/e2e/payloads-core.spec.ts +0 -82
- package/tests/e2e/payloads-error-contracts.spec.ts +0 -159
- package/tests/e2e/payloads-export.spec.ts +0 -46
- package/tests/e2e/payloads-github-degradation.spec.ts +0 -73
- package/tests/e2e/payloads-github.spec.ts +0 -176
- package/tests/e2e/payloads-relationships.spec.ts +0 -56
- package/tests/e2e/payloads-search.spec.ts +0 -64
- package/tests/e2e/payloads-team-happy.spec.ts +0 -231
- package/tests/e2e/payloads-team.spec.ts +0 -174
- package/tests/e2e/prompts-expanded.spec.ts +0 -137
- package/tests/e2e/prompts.spec.ts +0 -62
- package/tests/e2e/protocols.spec.ts +0 -134
- package/tests/e2e/rate-limiting.spec.ts +0 -291
- package/tests/e2e/resources-briefing-env.spec.ts +0 -106
- package/tests/e2e/resources-complete.spec.ts +0 -180
- package/tests/e2e/resources-expanded.spec.ts +0 -83
- package/tests/e2e/resources-instructions-levels.spec.ts +0 -145
- package/tests/e2e/resources-templates.spec.ts +0 -123
- package/tests/e2e/resources.spec.ts +0 -103
- package/tests/e2e/scheduler.spec.ts +0 -79
- package/tests/e2e/security.spec.ts +0 -112
- package/tests/e2e/session-advanced.spec.ts +0 -152
- package/tests/e2e/sessions.spec.ts +0 -95
- package/tests/e2e/stateless.spec.ts +0 -79
- package/tests/e2e/streaming.spec.ts +0 -176
- package/tests/e2e/tool-filtering-presets.spec.ts +0 -192
- package/tests/e2e/tool-filtering.spec.ts +0 -77
- package/tests/e2e/tools.spec.ts +0 -111
- package/tests/filtering/tool-filter.test.ts +0 -314
- package/tests/github/client-issues-errors.test.ts +0 -433
- package/tests/github/github-integration-branches.test.ts +0 -490
- package/tests/github/github-integration.test.ts +0 -1015
- package/tests/github/github-managers-branches.test.ts +0 -907
- package/tests/github/pull-requests.test.ts +0 -334
- package/tests/handlers/analytics-branches.test.ts +0 -222
- package/tests/handlers/backup-branches.test.ts +0 -270
- package/tests/handlers/briefing-context-section.test.ts +0 -388
- package/tests/handlers/briefing-github-section.test.ts +0 -392
- package/tests/handlers/briefing-user-message.test.ts +0 -405
- package/tests/handlers/codemode-tools.test.ts +0 -85
- package/tests/handlers/copilot-tools.test.ts +0 -126
- package/tests/handlers/error-path-coverage.test.ts +0 -324
- package/tests/handlers/export-tools.test.ts +0 -203
- package/tests/handlers/github-resource-handlers.test.ts +0 -929
- package/tests/handlers/github-tool-handlers.test.ts +0 -1452
- package/tests/handlers/handler-error-branches.test.ts +0 -346
- package/tests/handlers/help-resource.test.ts +0 -92
- package/tests/handlers/prompt-handler-coverage.test.ts +0 -108
- package/tests/handlers/prompt-handlers.test.ts +0 -131
- package/tests/handlers/resource-handler-coverage.test.ts +0 -281
- package/tests/handlers/resource-handlers.test.ts +0 -357
- package/tests/handlers/resource-prompt-branches.test.ts +0 -495
- package/tests/handlers/search-tool-handlers.test.ts +0 -379
- package/tests/handlers/targeted-gap-closure.test.ts +0 -387
- package/tests/handlers/team-admin.test.ts +0 -291
- package/tests/handlers/team-analytics.test.ts +0 -220
- package/tests/handlers/team-core.test.ts +0 -148
- package/tests/handlers/team-data.test.ts +0 -198
- package/tests/handlers/team-relationships.test.ts +0 -271
- package/tests/handlers/team-resource-handlers.test.ts +0 -161
- package/tests/handlers/team-search.test.ts +0 -134
- package/tests/handlers/team-tool-handlers.test.ts +0 -301
- package/tests/handlers/team-vector.test.ts +0 -213
- package/tests/handlers/template-github-branches.test.ts +0 -676
- package/tests/handlers/tool-annotations.test.ts +0 -90
- package/tests/handlers/tool-handler-coverage.test.ts +0 -514
- package/tests/handlers/tool-handlers.test.ts +0 -510
- package/tests/handlers/tool-output-schemas.test.ts +0 -116
- package/tests/handlers/vector-tool-handlers.test.ts +0 -238
- package/tests/security/sql-injection.test.ts +0 -284
- package/tests/server/mcp-server.bench.ts +0 -55
- package/tests/server/mcp-server.test.ts +0 -1326
- package/tests/server/scheduler.test.ts +0 -400
- package/tests/transports/http-legacy-sse.test.ts +0 -275
- package/tests/transports/http-security.test.ts +0 -322
- package/tests/transports/http-stateful.test.ts +0 -487
- package/tests/transports/http-transport-server.test.ts +0 -301
- package/tests/transports/http-transport.test.ts +0 -771
- package/tests/utils/github-helpers.test.ts +0 -58
- package/tests/utils/logger.test.ts +0 -180
- package/tests/utils/mcp-logger.test.ts +0 -211
- package/tests/utils/progress-utils.test.ts +0 -156
- package/tests/utils/query-helpers.test.ts +0 -80
- package/tests/utils/security-utils.test.ts +0 -82
- package/tests/vector/vector-search-branches.test.ts +0 -111
- package/tests/vector/vector-search-manager.test.ts +0 -375
- package/tests/vector/vector-search.bench.ts +0 -48
- package/tsconfig.json +0 -42
- package/tsup.config.ts +0 -19
- package/vitest.config.ts +0 -25
package/src/auth/auth-context.ts
DELETED
|
@@ -1,78 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* memory-journal-mcp — Auth Context (AsyncLocalStorage)
|
|
3
|
-
*
|
|
4
|
-
* Provides per-request authentication context threading using Node.js
|
|
5
|
-
* AsyncLocalStorage. Allows the HTTP transport to store the validated
|
|
6
|
-
* auth context so that tool handlers can enforce per-tool scopes
|
|
7
|
-
* without direct parameter coupling through the MCP SDK layer.
|
|
8
|
-
*/
|
|
9
|
-
|
|
10
|
-
import { AsyncLocalStorage } from 'node:async_hooks'
|
|
11
|
-
import type { AuthenticatedContext } from './middleware.js'
|
|
12
|
-
|
|
13
|
-
/**
|
|
14
|
-
* Singleton AsyncLocalStorage instance for auth context.
|
|
15
|
-
* Each HTTP request runs within its own async context.
|
|
16
|
-
*/
|
|
17
|
-
const authContextStorage = new AsyncLocalStorage<AuthenticatedContext>()
|
|
18
|
-
|
|
19
|
-
/**
|
|
20
|
-
* Run a function within an authenticated context.
|
|
21
|
-
* Called by the HTTP transport after token validation.
|
|
22
|
-
*
|
|
23
|
-
* @param context - The validated auth context from middleware
|
|
24
|
-
* @param fn - The async function to run (MCP SDK request handling)
|
|
25
|
-
* @returns The result of the wrapped function
|
|
26
|
-
*/
|
|
27
|
-
export function runWithAuthContext<T>(context: AuthenticatedContext, fn: () => T): T {
|
|
28
|
-
return authContextStorage.run(context, fn)
|
|
29
|
-
}
|
|
30
|
-
|
|
31
|
-
/**
|
|
32
|
-
* Get the current request's auth context.
|
|
33
|
-
* Returns undefined when:
|
|
34
|
-
* - OAuth is not configured (stdio transport, no auth)
|
|
35
|
-
* - Called outside of an HTTP request context
|
|
36
|
-
*
|
|
37
|
-
* Tool handlers use this to enforce per-tool scope checks.
|
|
38
|
-
*/
|
|
39
|
-
export function getAuthContext(): AuthenticatedContext | undefined {
|
|
40
|
-
return authContextStorage.getStore()
|
|
41
|
-
}
|
|
42
|
-
|
|
43
|
-
/**
|
|
44
|
-
* Set auth context imperatively using enterWith().
|
|
45
|
-
* Replaces the current store for the remainder of the async context.
|
|
46
|
-
* Prefer runWithAuthContext() for request-scoped usage.
|
|
47
|
-
*/
|
|
48
|
-
export function setAuthContext(context: AuthenticatedContext): void {
|
|
49
|
-
authContextStorage.enterWith(context)
|
|
50
|
-
}
|
|
51
|
-
|
|
52
|
-
/**
|
|
53
|
-
* Run a callback within a specific auth context.
|
|
54
|
-
* Alias for runWithAuthContext with synchronous return type.
|
|
55
|
-
*/
|
|
56
|
-
export function withAuthContext<T>(context: AuthenticatedContext, fn: () => T): T {
|
|
57
|
-
return authContextStorage.run(context, fn)
|
|
58
|
-
}
|
|
59
|
-
|
|
60
|
-
/**
|
|
61
|
-
* Check if the current request has an authenticated context.
|
|
62
|
-
*/
|
|
63
|
-
export function isAuthenticated(): boolean {
|
|
64
|
-
const ctx = authContextStorage.getStore()
|
|
65
|
-
return ctx?.authenticated === true
|
|
66
|
-
}
|
|
67
|
-
|
|
68
|
-
/**
|
|
69
|
-
* Get the scopes from the current authenticated context.
|
|
70
|
-
* Returns empty array if not authenticated.
|
|
71
|
-
*/
|
|
72
|
-
export function getAuthenticatedScopes(): string[] {
|
|
73
|
-
const ctx = authContextStorage.getStore()
|
|
74
|
-
if (ctx?.authenticated && ctx.claims?.scopes) {
|
|
75
|
-
return ctx.claims.scopes
|
|
76
|
-
}
|
|
77
|
-
return []
|
|
78
|
-
}
|
|
@@ -1,263 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* memory-journal-mcp — Authorization Server Discovery (RFC 8414)
|
|
3
|
-
*
|
|
4
|
-
* Discovers and caches OAuth 2.0 Authorization Server Metadata
|
|
5
|
-
* as specified in RFC 8414.
|
|
6
|
-
*
|
|
7
|
-
* @see https://datatracker.ietf.org/doc/html/rfc8414
|
|
8
|
-
*/
|
|
9
|
-
|
|
10
|
-
import type { AuthorizationServerMetadata, AuthServerDiscoveryConfig } from './types.js'
|
|
11
|
-
import { AuthServerDiscoveryError } from './errors.js'
|
|
12
|
-
import { ConfigurationError } from '../types/errors.js'
|
|
13
|
-
import { logger } from '../utils/logger.js'
|
|
14
|
-
|
|
15
|
-
// =============================================================================
|
|
16
|
-
// Authorization Server Discovery
|
|
17
|
-
// =============================================================================
|
|
18
|
-
|
|
19
|
-
/**
|
|
20
|
-
* Authorization Server Metadata Discovery
|
|
21
|
-
*
|
|
22
|
-
* Fetches and caches OAuth 2.0 authorization server metadata
|
|
23
|
-
* from the /.well-known/oauth-authorization-server endpoint.
|
|
24
|
-
*/
|
|
25
|
-
export class AuthorizationServerDiscovery {
|
|
26
|
-
private readonly authServerUrl: string
|
|
27
|
-
private readonly cacheTtl: number
|
|
28
|
-
private readonly timeout: number
|
|
29
|
-
|
|
30
|
-
private cachedMetadata: AuthorizationServerMetadata | null = null
|
|
31
|
-
private cacheExpiry = 0
|
|
32
|
-
|
|
33
|
-
constructor(config: AuthServerDiscoveryConfig) {
|
|
34
|
-
// Normalize URL (remove trailing slash)
|
|
35
|
-
this.authServerUrl = config.authServerUrl.replace(/\/+$/, '')
|
|
36
|
-
this.cacheTtl = config.cacheTtl ?? 3600
|
|
37
|
-
this.timeout = config.timeout ?? 5000
|
|
38
|
-
|
|
39
|
-
logger.info(`Authorization Server Discovery initialized for: ${this.authServerUrl}`, {
|
|
40
|
-
module: 'AUTH',
|
|
41
|
-
operation: 'init',
|
|
42
|
-
})
|
|
43
|
-
}
|
|
44
|
-
|
|
45
|
-
/**
|
|
46
|
-
* Discover authorization server metadata
|
|
47
|
-
*
|
|
48
|
-
* Fetches from /.well-known/oauth-authorization-server
|
|
49
|
-
* Results are cached for cacheTtl seconds.
|
|
50
|
-
*
|
|
51
|
-
* @returns Authorization server metadata
|
|
52
|
-
* @throws AuthServerDiscoveryError if discovery fails
|
|
53
|
-
*/
|
|
54
|
-
async discover(): Promise<AuthorizationServerMetadata> {
|
|
55
|
-
// Check cache
|
|
56
|
-
if (this.cachedMetadata && Date.now() < this.cacheExpiry) {
|
|
57
|
-
logger.info('Using cached authorization server metadata', {
|
|
58
|
-
module: 'AUTH',
|
|
59
|
-
operation: 'cache-hit',
|
|
60
|
-
})
|
|
61
|
-
return this.cachedMetadata
|
|
62
|
-
}
|
|
63
|
-
|
|
64
|
-
const metadataUrl = `${this.authServerUrl}/.well-known/oauth-authorization-server`
|
|
65
|
-
|
|
66
|
-
logger.info(`Fetching authorization server metadata from: ${metadataUrl}`, {
|
|
67
|
-
module: 'AUTH',
|
|
68
|
-
operation: 'discovery',
|
|
69
|
-
})
|
|
70
|
-
|
|
71
|
-
try {
|
|
72
|
-
const controller = new AbortController()
|
|
73
|
-
const timeoutId = setTimeout(() => controller.abort(), this.timeout)
|
|
74
|
-
|
|
75
|
-
const response = await fetch(metadataUrl, {
|
|
76
|
-
method: 'GET',
|
|
77
|
-
headers: {
|
|
78
|
-
Accept: 'application/json',
|
|
79
|
-
},
|
|
80
|
-
signal: controller.signal,
|
|
81
|
-
})
|
|
82
|
-
|
|
83
|
-
clearTimeout(timeoutId)
|
|
84
|
-
|
|
85
|
-
if (!response.ok) {
|
|
86
|
-
throw new ConfigurationError(
|
|
87
|
-
`HTTP ${String(response.status)}: ${response.statusText}`
|
|
88
|
-
)
|
|
89
|
-
}
|
|
90
|
-
|
|
91
|
-
const metadata = (await response.json()) as AuthorizationServerMetadata
|
|
92
|
-
|
|
93
|
-
// Validate required fields per RFC 8414
|
|
94
|
-
this.validateMetadata(metadata)
|
|
95
|
-
|
|
96
|
-
// Cache the metadata
|
|
97
|
-
this.cachedMetadata = metadata
|
|
98
|
-
this.cacheExpiry = Date.now() + this.cacheTtl * 1000
|
|
99
|
-
|
|
100
|
-
logger.info(`Authorization server metadata cached for ${String(this.cacheTtl)}s`, {
|
|
101
|
-
module: 'AUTH',
|
|
102
|
-
operation: 'discovery-success',
|
|
103
|
-
})
|
|
104
|
-
|
|
105
|
-
return metadata
|
|
106
|
-
} catch (error) {
|
|
107
|
-
if (error instanceof AuthServerDiscoveryError) {
|
|
108
|
-
throw error
|
|
109
|
-
}
|
|
110
|
-
|
|
111
|
-
const cause = error instanceof Error ? error : new Error(String(error))
|
|
112
|
-
|
|
113
|
-
logger.error(`Failed to discover authorization server: ${this.authServerUrl}`, {
|
|
114
|
-
module: 'AUTH',
|
|
115
|
-
operation: 'discovery',
|
|
116
|
-
error: cause.message,
|
|
117
|
-
})
|
|
118
|
-
|
|
119
|
-
throw new AuthServerDiscoveryError(this.authServerUrl, cause)
|
|
120
|
-
}
|
|
121
|
-
}
|
|
122
|
-
|
|
123
|
-
/**
|
|
124
|
-
* Validate required metadata fields per RFC 8414
|
|
125
|
-
*/
|
|
126
|
-
private validateMetadata(metadata: AuthorizationServerMetadata): void {
|
|
127
|
-
if (!metadata.issuer) {
|
|
128
|
-
throw new ConfigurationError('Missing required field: issuer')
|
|
129
|
-
}
|
|
130
|
-
|
|
131
|
-
if (!metadata.token_endpoint) {
|
|
132
|
-
throw new ConfigurationError('Missing required field: token_endpoint')
|
|
133
|
-
}
|
|
134
|
-
|
|
135
|
-
// Validate issuer matches the expected URL
|
|
136
|
-
// Per RFC 8414, issuer MUST be identical to the authorization server URL
|
|
137
|
-
const expectedIssuer = this.authServerUrl
|
|
138
|
-
if (metadata.issuer !== expectedIssuer) {
|
|
139
|
-
logger.warning(`Issuer mismatch: expected ${expectedIssuer}, got ${metadata.issuer}`, {
|
|
140
|
-
module: 'AUTH',
|
|
141
|
-
operation: 'discovery-validation',
|
|
142
|
-
})
|
|
143
|
-
// Note: This is a warning, not an error, as some auth servers may use different URLs
|
|
144
|
-
}
|
|
145
|
-
}
|
|
146
|
-
|
|
147
|
-
/**
|
|
148
|
-
* Get cached metadata (throws if not discovered)
|
|
149
|
-
*/
|
|
150
|
-
getMetadata(): AuthorizationServerMetadata {
|
|
151
|
-
if (!this.cachedMetadata) {
|
|
152
|
-
throw new ConfigurationError(
|
|
153
|
-
'Authorization server metadata not yet discovered. Call discover() first.'
|
|
154
|
-
)
|
|
155
|
-
}
|
|
156
|
-
return this.cachedMetadata
|
|
157
|
-
}
|
|
158
|
-
|
|
159
|
-
/**
|
|
160
|
-
* Get JWKS URI from metadata
|
|
161
|
-
*
|
|
162
|
-
* @throws Error if metadata not discovered or jwks_uri not present
|
|
163
|
-
*/
|
|
164
|
-
getJwksUri(): string {
|
|
165
|
-
const metadata = this.getMetadata()
|
|
166
|
-
|
|
167
|
-
if (!metadata.jwks_uri) {
|
|
168
|
-
throw new ConfigurationError('Authorization server does not provide jwks_uri')
|
|
169
|
-
}
|
|
170
|
-
|
|
171
|
-
return metadata.jwks_uri
|
|
172
|
-
}
|
|
173
|
-
|
|
174
|
-
/**
|
|
175
|
-
* Get token endpoint from metadata
|
|
176
|
-
*/
|
|
177
|
-
getTokenEndpoint(): string {
|
|
178
|
-
return this.getMetadata().token_endpoint
|
|
179
|
-
}
|
|
180
|
-
|
|
181
|
-
/**
|
|
182
|
-
* Get issuer from metadata
|
|
183
|
-
*/
|
|
184
|
-
getIssuer(): string {
|
|
185
|
-
return this.getMetadata().issuer
|
|
186
|
-
}
|
|
187
|
-
|
|
188
|
-
/**
|
|
189
|
-
* Get registration endpoint from metadata (RFC 7591)
|
|
190
|
-
*
|
|
191
|
-
* @returns Registration endpoint or null if not supported
|
|
192
|
-
*/
|
|
193
|
-
getRegistrationEndpoint(): string | null {
|
|
194
|
-
return this.getMetadata().registration_endpoint ?? null
|
|
195
|
-
}
|
|
196
|
-
|
|
197
|
-
/**
|
|
198
|
-
* Check if dynamic client registration is supported
|
|
199
|
-
*/
|
|
200
|
-
supportsClientRegistration(): boolean {
|
|
201
|
-
return this.getRegistrationEndpoint() !== null
|
|
202
|
-
}
|
|
203
|
-
|
|
204
|
-
/**
|
|
205
|
-
* Get supported scopes from metadata
|
|
206
|
-
*/
|
|
207
|
-
getSupportedScopes(): string[] {
|
|
208
|
-
return this.getMetadata().scopes_supported ?? []
|
|
209
|
-
}
|
|
210
|
-
|
|
211
|
-
/**
|
|
212
|
-
* Check if a specific scope is supported
|
|
213
|
-
*/
|
|
214
|
-
isScopeSupported(scope: string): boolean {
|
|
215
|
-
const supportedScopes = this.getSupportedScopes()
|
|
216
|
-
// If no scopes are listed, assume all scopes are supported
|
|
217
|
-
return supportedScopes.length === 0 || supportedScopes.includes(scope)
|
|
218
|
-
}
|
|
219
|
-
|
|
220
|
-
/**
|
|
221
|
-
* Clear cached metadata
|
|
222
|
-
*/
|
|
223
|
-
clearCache(): void {
|
|
224
|
-
this.cachedMetadata = null
|
|
225
|
-
this.cacheExpiry = 0
|
|
226
|
-
logger.info('Authorization server metadata cache cleared', {
|
|
227
|
-
module: 'AUTH',
|
|
228
|
-
operation: 'cache-clear',
|
|
229
|
-
})
|
|
230
|
-
}
|
|
231
|
-
|
|
232
|
-
/**
|
|
233
|
-
* Check if cache is valid
|
|
234
|
-
*/
|
|
235
|
-
isCacheValid(): boolean {
|
|
236
|
-
return this.cachedMetadata !== null && Date.now() < this.cacheExpiry
|
|
237
|
-
}
|
|
238
|
-
|
|
239
|
-
/**
|
|
240
|
-
* Get the authorization server URL
|
|
241
|
-
*/
|
|
242
|
-
getAuthServerUrl(): string {
|
|
243
|
-
return this.authServerUrl
|
|
244
|
-
}
|
|
245
|
-
}
|
|
246
|
-
|
|
247
|
-
// =============================================================================
|
|
248
|
-
// Factory Function
|
|
249
|
-
// =============================================================================
|
|
250
|
-
|
|
251
|
-
/**
|
|
252
|
-
* Create an Authorization Server Discovery instance
|
|
253
|
-
*/
|
|
254
|
-
export function createAuthServerDiscovery(
|
|
255
|
-
authServerUrl: string,
|
|
256
|
-
options?: Partial<Omit<AuthServerDiscoveryConfig, 'authServerUrl'>>
|
|
257
|
-
): AuthorizationServerDiscovery {
|
|
258
|
-
return new AuthorizationServerDiscovery({
|
|
259
|
-
authServerUrl,
|
|
260
|
-
cacheTtl: options?.cacheTtl,
|
|
261
|
-
timeout: options?.timeout,
|
|
262
|
-
})
|
|
263
|
-
}
|
package/src/auth/errors.ts
DELETED
|
@@ -1,215 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* memory-journal-mcp — OAuth Error Classes
|
|
3
|
-
*
|
|
4
|
-
* Module-prefixed error classes for OAuth 2.0 authentication
|
|
5
|
-
* and authorization failures. Extends MemoryJournalMcpError
|
|
6
|
-
* for harmonized error handling across the MCP ecosystem.
|
|
7
|
-
*/
|
|
8
|
-
|
|
9
|
-
import { MemoryJournalMcpError } from '../types/errors.js'
|
|
10
|
-
import { ErrorCategory } from '../types/error-types.js'
|
|
11
|
-
|
|
12
|
-
// =============================================================================
|
|
13
|
-
// Error Codes
|
|
14
|
-
// =============================================================================
|
|
15
|
-
|
|
16
|
-
/**
|
|
17
|
-
* OAuth error code constants
|
|
18
|
-
*/
|
|
19
|
-
export const AUTH_ERROR_CODES = {
|
|
20
|
-
TOKEN_MISSING: 'AUTH_TOKEN_MISSING',
|
|
21
|
-
TOKEN_INVALID: 'AUTH_TOKEN_INVALID',
|
|
22
|
-
TOKEN_EXPIRED: 'AUTH_TOKEN_EXPIRED',
|
|
23
|
-
SIGNATURE_INVALID: 'AUTH_SIGNATURE_INVALID',
|
|
24
|
-
SCOPE_DENIED: 'AUTH_SCOPE_DENIED',
|
|
25
|
-
DISCOVERY_FAILED: 'AUTH_DISCOVERY_FAILED',
|
|
26
|
-
JWKS_FETCH_FAILED: 'AUTH_JWKS_FETCH_FAILED',
|
|
27
|
-
REGISTRATION_FAILED: 'AUTH_REGISTRATION_FAILED',
|
|
28
|
-
} as const
|
|
29
|
-
|
|
30
|
-
// =============================================================================
|
|
31
|
-
// Base OAuth Error
|
|
32
|
-
// =============================================================================
|
|
33
|
-
|
|
34
|
-
/**
|
|
35
|
-
* Base class for OAuth-related errors.
|
|
36
|
-
* Extends MemoryJournalMcpError with OAuth-specific properties.
|
|
37
|
-
*/
|
|
38
|
-
export class OAuthError extends MemoryJournalMcpError {
|
|
39
|
-
/** HTTP status code for this error */
|
|
40
|
-
readonly httpStatus: number
|
|
41
|
-
|
|
42
|
-
/** WWW-Authenticate header value */
|
|
43
|
-
readonly wwwAuthenticate?: string | undefined
|
|
44
|
-
|
|
45
|
-
constructor(
|
|
46
|
-
message: string,
|
|
47
|
-
code: string,
|
|
48
|
-
httpStatus: number,
|
|
49
|
-
details?: Record<string, unknown>,
|
|
50
|
-
wwwAuthenticate?: string
|
|
51
|
-
) {
|
|
52
|
-
const category =
|
|
53
|
-
httpStatus === 403 ? ErrorCategory.AUTHORIZATION : ErrorCategory.AUTHENTICATION
|
|
54
|
-
super(message, code, category, {
|
|
55
|
-
suggestion:
|
|
56
|
-
httpStatus === 403
|
|
57
|
-
? 'Request a token with the required scopes'
|
|
58
|
-
: 'Provide a valid OAuth 2.0 bearer token',
|
|
59
|
-
recoverable: httpStatus !== 500,
|
|
60
|
-
details,
|
|
61
|
-
})
|
|
62
|
-
this.name = 'OAuthError'
|
|
63
|
-
this.httpStatus = httpStatus
|
|
64
|
-
this.wwwAuthenticate = wwwAuthenticate
|
|
65
|
-
}
|
|
66
|
-
}
|
|
67
|
-
|
|
68
|
-
// =============================================================================
|
|
69
|
-
// Authentication Errors (401)
|
|
70
|
-
// =============================================================================
|
|
71
|
-
|
|
72
|
-
/**
|
|
73
|
-
* Token is missing from the request
|
|
74
|
-
*/
|
|
75
|
-
export class TokenMissingError extends OAuthError {
|
|
76
|
-
constructor(realm = 'memory-journal-mcp') {
|
|
77
|
-
super(
|
|
78
|
-
'No access token provided',
|
|
79
|
-
AUTH_ERROR_CODES.TOKEN_MISSING,
|
|
80
|
-
401,
|
|
81
|
-
undefined,
|
|
82
|
-
`Bearer realm="${realm}"`
|
|
83
|
-
)
|
|
84
|
-
this.name = 'TokenMissingError'
|
|
85
|
-
}
|
|
86
|
-
}
|
|
87
|
-
|
|
88
|
-
/**
|
|
89
|
-
* Token is invalid (malformed, wrong format, etc.)
|
|
90
|
-
*/
|
|
91
|
-
export class InvalidTokenError extends OAuthError {
|
|
92
|
-
constructor(message = 'Invalid access token', details?: Record<string, unknown>) {
|
|
93
|
-
super(message, AUTH_ERROR_CODES.TOKEN_INVALID, 401, details, 'Bearer error="invalid_token"')
|
|
94
|
-
this.name = 'InvalidTokenError'
|
|
95
|
-
}
|
|
96
|
-
}
|
|
97
|
-
|
|
98
|
-
/**
|
|
99
|
-
* Token has expired
|
|
100
|
-
*/
|
|
101
|
-
export class TokenExpiredError extends OAuthError {
|
|
102
|
-
constructor(expiredAt?: Date) {
|
|
103
|
-
super(
|
|
104
|
-
'Access token has expired',
|
|
105
|
-
AUTH_ERROR_CODES.TOKEN_EXPIRED,
|
|
106
|
-
401,
|
|
107
|
-
expiredAt ? { expiredAt: expiredAt.toISOString() } : undefined,
|
|
108
|
-
'Bearer error="invalid_token", error_description="Token has expired"'
|
|
109
|
-
)
|
|
110
|
-
this.name = 'TokenExpiredError'
|
|
111
|
-
}
|
|
112
|
-
}
|
|
113
|
-
|
|
114
|
-
/**
|
|
115
|
-
* Token signature is invalid
|
|
116
|
-
*/
|
|
117
|
-
export class InvalidSignatureError extends OAuthError {
|
|
118
|
-
constructor(message = 'Token signature verification failed') {
|
|
119
|
-
super(
|
|
120
|
-
message,
|
|
121
|
-
AUTH_ERROR_CODES.SIGNATURE_INVALID,
|
|
122
|
-
401,
|
|
123
|
-
undefined,
|
|
124
|
-
'Bearer error="invalid_token", error_description="Signature verification failed"'
|
|
125
|
-
)
|
|
126
|
-
this.name = 'InvalidSignatureError'
|
|
127
|
-
}
|
|
128
|
-
}
|
|
129
|
-
|
|
130
|
-
// =============================================================================
|
|
131
|
-
// Authorization Errors (403)
|
|
132
|
-
// =============================================================================
|
|
133
|
-
|
|
134
|
-
/**
|
|
135
|
-
* Token does not have required scope
|
|
136
|
-
*/
|
|
137
|
-
export class InsufficientScopeError extends OAuthError {
|
|
138
|
-
constructor(requiredScope: string | string[], providedScopes?: string[]) {
|
|
139
|
-
const required = Array.isArray(requiredScope) ? requiredScope : [requiredScope]
|
|
140
|
-
const scopeValue = required.join(' ')
|
|
141
|
-
|
|
142
|
-
super(
|
|
143
|
-
`Insufficient scope. Required: ${scopeValue}`,
|
|
144
|
-
AUTH_ERROR_CODES.SCOPE_DENIED,
|
|
145
|
-
403,
|
|
146
|
-
{ requiredScope: required, providedScopes },
|
|
147
|
-
`Bearer error="insufficient_scope", scope="${scopeValue}"`
|
|
148
|
-
)
|
|
149
|
-
this.name = 'InsufficientScopeError'
|
|
150
|
-
}
|
|
151
|
-
}
|
|
152
|
-
|
|
153
|
-
// =============================================================================
|
|
154
|
-
// Server Errors (500)
|
|
155
|
-
// =============================================================================
|
|
156
|
-
|
|
157
|
-
/**
|
|
158
|
-
* Failed to discover authorization server metadata
|
|
159
|
-
*/
|
|
160
|
-
export class AuthServerDiscoveryError extends OAuthError {
|
|
161
|
-
constructor(serverUrl: string, cause?: Error) {
|
|
162
|
-
super(
|
|
163
|
-
'Failed to discover authorization server metadata: ' + serverUrl,
|
|
164
|
-
AUTH_ERROR_CODES.DISCOVERY_FAILED,
|
|
165
|
-
500,
|
|
166
|
-
{
|
|
167
|
-
serverUrl,
|
|
168
|
-
cause: cause?.message,
|
|
169
|
-
}
|
|
170
|
-
)
|
|
171
|
-
this.name = 'AuthServerDiscoveryError'
|
|
172
|
-
}
|
|
173
|
-
}
|
|
174
|
-
|
|
175
|
-
/**
|
|
176
|
-
* Failed to fetch JWKS
|
|
177
|
-
*/
|
|
178
|
-
export class JwksFetchError extends OAuthError {
|
|
179
|
-
constructor(jwksUri: string, cause?: Error) {
|
|
180
|
-
super('Failed to fetch JWKS: ' + jwksUri, AUTH_ERROR_CODES.JWKS_FETCH_FAILED, 500, {
|
|
181
|
-
jwksUri,
|
|
182
|
-
cause: cause?.message,
|
|
183
|
-
})
|
|
184
|
-
this.name = 'JwksFetchError'
|
|
185
|
-
}
|
|
186
|
-
}
|
|
187
|
-
|
|
188
|
-
/**
|
|
189
|
-
* Failed to register client
|
|
190
|
-
*/
|
|
191
|
-
export class ClientRegistrationError extends OAuthError {
|
|
192
|
-
constructor(message: string, details?: Record<string, unknown>) {
|
|
193
|
-
super(message, AUTH_ERROR_CODES.REGISTRATION_FAILED, 500, details)
|
|
194
|
-
this.name = 'ClientRegistrationError'
|
|
195
|
-
}
|
|
196
|
-
}
|
|
197
|
-
|
|
198
|
-
// =============================================================================
|
|
199
|
-
// Utility Functions
|
|
200
|
-
// =============================================================================
|
|
201
|
-
|
|
202
|
-
/**
|
|
203
|
-
* Check if an error is an OAuth error
|
|
204
|
-
*/
|
|
205
|
-
export function isOAuthError(error: unknown): error is OAuthError {
|
|
206
|
-
return error instanceof OAuthError
|
|
207
|
-
}
|
|
208
|
-
|
|
209
|
-
/**
|
|
210
|
-
* Get WWW-Authenticate header for an OAuth error.
|
|
211
|
-
* @deprecated Use error.wwwAuthenticate property directly instead
|
|
212
|
-
*/
|
|
213
|
-
export function getWWWAuthenticateHeader(error: OAuthError, realm = 'memory-journal-mcp'): string {
|
|
214
|
-
return error.wwwAuthenticate ?? `Bearer realm="${realm}"`
|
|
215
|
-
}
|
package/src/auth/index.ts
DELETED
|
@@ -1,58 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* memory-journal-mcp — Auth Module Public Exports
|
|
3
|
-
*
|
|
4
|
-
* OAuth 2.0 authentication and authorization components.
|
|
5
|
-
*/
|
|
6
|
-
|
|
7
|
-
// Types
|
|
8
|
-
export type * from './types.js'
|
|
9
|
-
// Error classes
|
|
10
|
-
export {
|
|
11
|
-
AUTH_ERROR_CODES,
|
|
12
|
-
OAuthError,
|
|
13
|
-
TokenMissingError,
|
|
14
|
-
InvalidTokenError,
|
|
15
|
-
TokenExpiredError,
|
|
16
|
-
InvalidSignatureError,
|
|
17
|
-
InsufficientScopeError,
|
|
18
|
-
AuthServerDiscoveryError,
|
|
19
|
-
JwksFetchError,
|
|
20
|
-
ClientRegistrationError,
|
|
21
|
-
isOAuthError,
|
|
22
|
-
} from './errors.js'
|
|
23
|
-
|
|
24
|
-
// Scopes
|
|
25
|
-
export * from './scopes.js'
|
|
26
|
-
|
|
27
|
-
// Scope Map (tool → scope reverse lookup)
|
|
28
|
-
export { getRequiredScope, getToolScopeMap } from './scope-map.js'
|
|
29
|
-
|
|
30
|
-
// Auth Context (AsyncLocalStorage per-request threading)
|
|
31
|
-
export { runWithAuthContext, getAuthContext } from './auth-context.js'
|
|
32
|
-
|
|
33
|
-
// Core classes
|
|
34
|
-
export { OAuthResourceServer, createOAuthResourceServer } from './oauth-resource-server.js'
|
|
35
|
-
export {
|
|
36
|
-
AuthorizationServerDiscovery,
|
|
37
|
-
createAuthServerDiscovery,
|
|
38
|
-
} from './authorization-server-discovery.js'
|
|
39
|
-
export { TokenValidator, createTokenValidator } from './token-validator.js'
|
|
40
|
-
|
|
41
|
-
// Middleware (Express-specific)
|
|
42
|
-
export {
|
|
43
|
-
createAuthMiddleware,
|
|
44
|
-
extractBearerToken,
|
|
45
|
-
requireScope,
|
|
46
|
-
requireAnyScope,
|
|
47
|
-
requireToolScope,
|
|
48
|
-
oauthErrorHandler,
|
|
49
|
-
type AuthMiddlewareConfig,
|
|
50
|
-
} from './middleware.js'
|
|
51
|
-
|
|
52
|
-
// Middleware (transport-agnostic)
|
|
53
|
-
export {
|
|
54
|
-
createAuthenticatedContext,
|
|
55
|
-
validateAuth,
|
|
56
|
-
formatOAuthError,
|
|
57
|
-
type AuthenticatedContext,
|
|
58
|
-
} from './middleware.js'
|