@opendatalabs/personal-server-ts-core 0.0.1-canary.00328bf
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/dist/api/index.d.ts +408 -0
- package/dist/api/index.d.ts.map +1 -0
- package/dist/api/index.js +1257 -0
- package/dist/api/index.js.map +1 -0
- package/dist/api/raw-envelope.d.ts +3 -0
- package/dist/api/raw-envelope.d.ts.map +1 -0
- package/dist/api/raw-envelope.js +215 -0
- package/dist/api/raw-envelope.js.map +1 -0
- package/dist/auth/index.d.ts +2 -0
- package/dist/auth/index.d.ts.map +1 -0
- package/dist/auth/index.js +2 -0
- package/dist/auth/index.js.map +1 -0
- package/dist/auth/request.d.ts +28 -0
- package/dist/auth/request.d.ts.map +1 -0
- package/dist/auth/request.js +106 -0
- package/dist/auth/request.js.map +1 -0
- package/dist/client.d.ts +233 -0
- package/dist/client.d.ts.map +1 -0
- package/dist/client.js +243 -0
- package/dist/client.js.map +1 -0
- package/dist/config/defaults.d.ts +12 -0
- package/dist/config/defaults.d.ts.map +1 -0
- package/dist/config/defaults.js +12 -0
- package/dist/config/defaults.js.map +1 -0
- package/dist/config/index.d.ts +3 -0
- package/dist/config/index.d.ts.map +1 -0
- package/dist/config/index.js +3 -0
- package/dist/config/index.js.map +1 -0
- package/dist/config/paths.d.ts +9 -0
- package/dist/config/paths.d.ts.map +1 -0
- package/dist/config/paths.js +14 -0
- package/dist/config/paths.js.map +1 -0
- package/dist/contracts/access-logs.d.ts +8 -0
- package/dist/contracts/access-logs.d.ts.map +1 -0
- package/dist/contracts/access-logs.js +7 -0
- package/dist/contracts/access-logs.js.map +1 -0
- package/dist/contracts/auth-device.d.ts +70 -0
- package/dist/contracts/auth-device.d.ts.map +1 -0
- package/dist/contracts/auth-device.js +163 -0
- package/dist/contracts/auth-device.js.map +1 -0
- package/dist/contracts/binary.d.ts +66 -0
- package/dist/contracts/binary.d.ts.map +1 -0
- package/dist/contracts/binary.js +123 -0
- package/dist/contracts/binary.js.map +1 -0
- package/dist/contracts/config.d.ts +5 -0
- package/dist/contracts/config.d.ts.map +1 -0
- package/dist/contracts/config.js +30 -0
- package/dist/contracts/config.js.map +1 -0
- package/dist/contracts/data.d.ts +165 -0
- package/dist/contracts/data.d.ts.map +1 -0
- package/dist/contracts/data.js +371 -0
- package/dist/contracts/data.js.map +1 -0
- package/dist/contracts/grants.d.ts +45 -0
- package/dist/contracts/grants.d.ts.map +1 -0
- package/dist/contracts/grants.js +177 -0
- package/dist/contracts/grants.js.map +1 -0
- package/dist/contracts/http.d.ts +21 -0
- package/dist/contracts/http.d.ts.map +1 -0
- package/dist/contracts/http.js +49 -0
- package/dist/contracts/http.js.map +1 -0
- package/dist/contracts/index.d.ts +16 -0
- package/dist/contracts/index.d.ts.map +1 -0
- package/dist/contracts/index.js +10 -0
- package/dist/contracts/index.js.map +1 -0
- package/dist/contracts/oauth.d.ts +38 -0
- package/dist/contracts/oauth.d.ts.map +1 -0
- package/dist/contracts/oauth.js +130 -0
- package/dist/contracts/oauth.js.map +1 -0
- package/dist/contracts/sync.d.ts +10 -0
- package/dist/contracts/sync.d.ts.map +1 -0
- package/dist/contracts/sync.js +35 -0
- package/dist/contracts/sync.js.map +1 -0
- package/dist/derivatives/answer-shape.d.ts +83 -0
- package/dist/derivatives/answer-shape.d.ts.map +1 -0
- package/dist/derivatives/answer-shape.js +320 -0
- package/dist/derivatives/answer-shape.js.map +1 -0
- package/dist/derivatives/api.d.ts +48 -0
- package/dist/derivatives/api.d.ts.map +1 -0
- package/dist/derivatives/api.js +374 -0
- package/dist/derivatives/api.js.map +1 -0
- package/dist/derivatives/compute.d.ts +112 -0
- package/dist/derivatives/compute.d.ts.map +1 -0
- package/dist/derivatives/compute.js +476 -0
- package/dist/derivatives/compute.js.map +1 -0
- package/dist/derivatives/e2ee/aad.d.ts +22 -0
- package/dist/derivatives/e2ee/aad.d.ts.map +1 -0
- package/dist/derivatives/e2ee/aad.js +32 -0
- package/dist/derivatives/e2ee/aad.js.map +1 -0
- package/dist/derivatives/e2ee/attestation.d.ts +134 -0
- package/dist/derivatives/e2ee/attestation.d.ts.map +1 -0
- package/dist/derivatives/e2ee/attestation.js +248 -0
- package/dist/derivatives/e2ee/attestation.js.map +1 -0
- package/dist/derivatives/e2ee/index.d.ts +6 -0
- package/dist/derivatives/e2ee/index.d.ts.map +1 -0
- package/dist/derivatives/e2ee/index.js +6 -0
- package/dist/derivatives/e2ee/index.js.map +1 -0
- package/dist/derivatives/e2ee/jcs.d.ts +17 -0
- package/dist/derivatives/e2ee/jcs.d.ts.map +1 -0
- package/dist/derivatives/e2ee/jcs.js +55 -0
- package/dist/derivatives/e2ee/jcs.js.map +1 -0
- package/dist/derivatives/e2ee/phala.d.ts +62 -0
- package/dist/derivatives/e2ee/phala.d.ts.map +1 -0
- package/dist/derivatives/e2ee/phala.js +168 -0
- package/dist/derivatives/e2ee/phala.js.map +1 -0
- package/dist/derivatives/e2ee/suite.d.ts +56 -0
- package/dist/derivatives/e2ee/suite.d.ts.map +1 -0
- package/dist/derivatives/e2ee/suite.js +164 -0
- package/dist/derivatives/e2ee/suite.js.map +1 -0
- package/dist/derivatives/index.d.ts +11 -0
- package/dist/derivatives/index.d.ts.map +1 -0
- package/dist/derivatives/index.js +11 -0
- package/dist/derivatives/index.js.map +1 -0
- package/dist/derivatives/inference.d.ts +151 -0
- package/dist/derivatives/inference.d.ts.map +1 -0
- package/dist/derivatives/inference.js +262 -0
- package/dist/derivatives/inference.js.map +1 -0
- package/dist/derivatives/prompt.d.ts +99 -0
- package/dist/derivatives/prompt.d.ts.map +1 -0
- package/dist/derivatives/prompt.js +281 -0
- package/dist/derivatives/prompt.js.map +1 -0
- package/dist/derivatives/registration.d.ts +56 -0
- package/dist/derivatives/registration.d.ts.map +1 -0
- package/dist/derivatives/registration.js +187 -0
- package/dist/derivatives/registration.js.map +1 -0
- package/dist/derivatives/scheduler.d.ts +114 -0
- package/dist/derivatives/scheduler.d.ts.map +1 -0
- package/dist/derivatives/scheduler.js +331 -0
- package/dist/derivatives/scheduler.js.map +1 -0
- package/dist/derivatives/store.d.ts +14 -0
- package/dist/derivatives/store.d.ts.map +1 -0
- package/dist/derivatives/store.js +79 -0
- package/dist/derivatives/store.js.map +1 -0
- package/dist/derivatives/types.d.ts +102 -0
- package/dist/derivatives/types.d.ts.map +1 -0
- package/dist/derivatives/types.js +29 -0
- package/dist/derivatives/types.js.map +1 -0
- package/dist/errors/catalog.d.ts +125 -0
- package/dist/errors/catalog.d.ts.map +1 -0
- package/dist/errors/catalog.js +198 -0
- package/dist/errors/catalog.js.map +1 -0
- package/dist/errors/pdpp-catalog.d.ts +36 -0
- package/dist/errors/pdpp-catalog.d.ts.map +1 -0
- package/dist/errors/pdpp-catalog.js +82 -0
- package/dist/errors/pdpp-catalog.js.map +1 -0
- package/dist/grants/index.d.ts +5 -0
- package/dist/grants/index.d.ts.map +1 -0
- package/dist/grants/index.js +6 -0
- package/dist/grants/index.js.map +1 -0
- package/dist/grants/pdpp-binding-store.d.ts +58 -0
- package/dist/grants/pdpp-binding-store.d.ts.map +1 -0
- package/dist/grants/pdpp-binding-store.js +97 -0
- package/dist/grants/pdpp-binding-store.js.map +1 -0
- package/dist/grants/pdpp-binding.d.ts +179 -0
- package/dist/grants/pdpp-binding.d.ts.map +1 -0
- package/dist/grants/pdpp-binding.js +214 -0
- package/dist/grants/pdpp-binding.js.map +1 -0
- package/dist/keys/index.d.ts +3 -0
- package/dist/keys/index.d.ts.map +1 -0
- package/dist/keys/index.js +2 -0
- package/dist/keys/index.js.map +1 -0
- package/dist/keys/public-only-account.d.ts +8 -0
- package/dist/keys/public-only-account.d.ts.map +1 -0
- package/dist/keys/public-only-account.js +21 -0
- package/dist/keys/public-only-account.js.map +1 -0
- package/dist/keys/server-account.d.ts +24 -0
- package/dist/keys/server-account.d.ts.map +1 -0
- package/dist/keys/server-account.js +2 -0
- package/dist/keys/server-account.js.map +1 -0
- package/dist/lineage/attestation.d.ts +42 -0
- package/dist/lineage/attestation.d.ts.map +1 -0
- package/dist/lineage/attestation.js +25 -0
- package/dist/lineage/attestation.js.map +1 -0
- package/dist/lineage/gateway.d.ts +105 -0
- package/dist/lineage/gateway.d.ts.map +1 -0
- package/dist/lineage/gateway.js +242 -0
- package/dist/lineage/gateway.js.map +1 -0
- package/dist/lineage/index.d.ts +5 -0
- package/dist/lineage/index.d.ts.map +1 -0
- package/dist/lineage/index.js +5 -0
- package/dist/lineage/index.js.map +1 -0
- package/dist/lineage/lineage.d.ts +141 -0
- package/dist/lineage/lineage.d.ts.map +1 -0
- package/dist/lineage/lineage.js +255 -0
- package/dist/lineage/lineage.js.map +1 -0
- package/dist/logger/index.d.ts +9 -0
- package/dist/logger/index.d.ts.map +1 -0
- package/dist/logger/index.js +5 -0
- package/dist/logger/index.js.map +1 -0
- package/dist/logging/access-log.d.ts +23 -0
- package/dist/logging/access-log.d.ts.map +1 -0
- package/dist/logging/access-log.js +2 -0
- package/dist/logging/access-log.js.map +1 -0
- package/dist/logging/access-reader.d.ts +14 -0
- package/dist/logging/access-reader.d.ts.map +1 -0
- package/dist/logging/access-reader.js +2 -0
- package/dist/logging/access-reader.js.map +1 -0
- package/dist/mcp/activity.d.ts +68 -0
- package/dist/mcp/activity.d.ts.map +1 -0
- package/dist/mcp/activity.js +111 -0
- package/dist/mcp/activity.js.map +1 -0
- package/dist/mcp/builder-registration.d.ts +24 -0
- package/dist/mcp/builder-registration.d.ts.map +1 -0
- package/dist/mcp/builder-registration.js +89 -0
- package/dist/mcp/builder-registration.js.map +1 -0
- package/dist/mcp/connection-api.d.ts +201 -0
- package/dist/mcp/connection-api.d.ts.map +1 -0
- package/dist/mcp/connection-api.js +506 -0
- package/dist/mcp/connection-api.js.map +1 -0
- package/dist/mcp/grantee.d.ts +52 -0
- package/dist/mcp/grantee.d.ts.map +1 -0
- package/dist/mcp/grantee.js +91 -0
- package/dist/mcp/grantee.js.map +1 -0
- package/dist/mcp/index.d.ts +12 -0
- package/dist/mcp/index.d.ts.map +1 -0
- package/dist/mcp/index.js +12 -0
- package/dist/mcp/index.js.map +1 -0
- package/dist/mcp/read-client.d.ts +176 -0
- package/dist/mcp/read-client.d.ts.map +1 -0
- package/dist/mcp/read-client.js +579 -0
- package/dist/mcp/read-client.js.map +1 -0
- package/dist/mcp/resources.d.ts +37 -0
- package/dist/mcp/resources.d.ts.map +1 -0
- package/dist/mcp/resources.js +114 -0
- package/dist/mcp/resources.js.map +1 -0
- package/dist/mcp/search/index.d.ts +34 -0
- package/dist/mcp/search/index.d.ts.map +1 -0
- package/dist/mcp/search/index.js +156 -0
- package/dist/mcp/search/index.js.map +1 -0
- package/dist/mcp/server.d.ts +72 -0
- package/dist/mcp/server.d.ts.map +1 -0
- package/dist/mcp/server.js +447 -0
- package/dist/mcp/server.js.map +1 -0
- package/dist/mcp/session.d.ts +160 -0
- package/dist/mcp/session.d.ts.map +1 -0
- package/dist/mcp/session.js +243 -0
- package/dist/mcp/session.js.map +1 -0
- package/dist/mcp/store.d.ts +13 -0
- package/dist/mcp/store.d.ts.map +1 -0
- package/dist/mcp/store.js +119 -0
- package/dist/mcp/store.js.map +1 -0
- package/dist/mcp/token-expiry.d.ts +38 -0
- package/dist/mcp/token-expiry.d.ts.map +1 -0
- package/dist/mcp/token-expiry.js +55 -0
- package/dist/mcp/token-expiry.js.map +1 -0
- package/dist/mcp/tools.d.ts +95 -0
- package/dist/mcp/tools.d.ts.map +1 -0
- package/dist/mcp/tools.js +1381 -0
- package/dist/mcp/tools.js.map +1 -0
- package/dist/mcp/types.d.ts +135 -0
- package/dist/mcp/types.d.ts.map +1 -0
- package/dist/mcp/types.js +24 -0
- package/dist/mcp/types.js.map +1 -0
- package/dist/payment/index.d.ts +2 -0
- package/dist/payment/index.d.ts.map +1 -0
- package/dist/payment/index.js +2 -0
- package/dist/payment/index.js.map +1 -0
- package/dist/payment/x402.d.ts +155 -0
- package/dist/payment/x402.d.ts.map +1 -0
- package/dist/payment/x402.js +402 -0
- package/dist/payment/x402.js.map +1 -0
- package/dist/pdpp/approval.d.ts +182 -0
- package/dist/pdpp/approval.d.ts.map +1 -0
- package/dist/pdpp/approval.js +337 -0
- package/dist/pdpp/approval.js.map +1 -0
- package/dist/pdpp/client-identity.d.ts +88 -0
- package/dist/pdpp/client-identity.d.ts.map +1 -0
- package/dist/pdpp/client-identity.js +183 -0
- package/dist/pdpp/client-identity.js.map +1 -0
- package/dist/pdpp/client-metadata.d.ts +95 -0
- package/dist/pdpp/client-metadata.d.ts.map +1 -0
- package/dist/pdpp/client-metadata.js +96 -0
- package/dist/pdpp/client-metadata.js.map +1 -0
- package/dist/pdpp/declaration.d.ts +118 -0
- package/dist/pdpp/declaration.d.ts.map +1 -0
- package/dist/pdpp/declaration.js +549 -0
- package/dist/pdpp/declaration.js.map +1 -0
- package/dist/pdpp/index.d.ts +35 -0
- package/dist/pdpp/index.d.ts.map +1 -0
- package/dist/pdpp/index.js +22 -0
- package/dist/pdpp/index.js.map +1 -0
- package/dist/pdpp/issuance.d.ts +91 -0
- package/dist/pdpp/issuance.d.ts.map +1 -0
- package/dist/pdpp/issuance.js +124 -0
- package/dist/pdpp/issuance.js.map +1 -0
- package/dist/pdpp/pkce.d.ts +53 -0
- package/dist/pdpp/pkce.d.ts.map +1 -0
- package/dist/pdpp/pkce.js +109 -0
- package/dist/pdpp/pkce.js.map +1 -0
- package/dist/pdpp/redirect.d.ts +60 -0
- package/dist/pdpp/redirect.d.ts.map +1 -0
- package/dist/pdpp/redirect.js +125 -0
- package/dist/pdpp/redirect.js.map +1 -0
- package/dist/pdpp/resolve.d.ts +53 -0
- package/dist/pdpp/resolve.d.ts.map +1 -0
- package/dist/pdpp/resolve.js +218 -0
- package/dist/pdpp/resolve.js.map +1 -0
- package/dist/pdpp/review.d.ts +155 -0
- package/dist/pdpp/review.d.ts.map +1 -0
- package/dist/pdpp/review.js +142 -0
- package/dist/pdpp/review.js.map +1 -0
- package/dist/pdpp/selection.d.ts +43 -0
- package/dist/pdpp/selection.d.ts.map +1 -0
- package/dist/pdpp/selection.js +211 -0
- package/dist/pdpp/selection.js.map +1 -0
- package/dist/pdpp/store.d.ts +204 -0
- package/dist/pdpp/store.d.ts.map +1 -0
- package/dist/pdpp/store.js +501 -0
- package/dist/pdpp/store.js.map +1 -0
- package/dist/pdpp/tokens.d.ts +149 -0
- package/dist/pdpp/tokens.d.ts.map +1 -0
- package/dist/pdpp/tokens.js +387 -0
- package/dist/pdpp/tokens.js.map +1 -0
- package/dist/pdpp/types.d.ts +258 -0
- package/dist/pdpp/types.d.ts.map +1 -0
- package/dist/pdpp/types.js +40 -0
- package/dist/pdpp/types.js.map +1 -0
- package/dist/pdpp-version.d.ts +28 -0
- package/dist/pdpp-version.d.ts.map +1 -0
- package/dist/pdpp-version.js +28 -0
- package/dist/pdpp-version.js.map +1 -0
- package/dist/policy/data-read.d.ts +56 -0
- package/dist/policy/data-read.d.ts.map +1 -0
- package/dist/policy/data-read.js +176 -0
- package/dist/policy/data-read.js.map +1 -0
- package/dist/policy/data-write.d.ts +69 -0
- package/dist/policy/data-write.d.ts.map +1 -0
- package/dist/policy/data-write.js +131 -0
- package/dist/policy/data-write.js.map +1 -0
- package/dist/policy/index.d.ts +4 -0
- package/dist/policy/index.d.ts.map +1 -0
- package/dist/policy/index.js +4 -0
- package/dist/policy/index.js.map +1 -0
- package/dist/policy/signed-artifacts.d.ts +17 -0
- package/dist/policy/signed-artifacts.d.ts.map +1 -0
- package/dist/policy/signed-artifacts.js +110 -0
- package/dist/policy/signed-artifacts.js.map +1 -0
- package/dist/ports/index.d.ts +243 -0
- package/dist/ports/index.d.ts.map +1 -0
- package/dist/ports/index.js +7 -0
- package/dist/ports/index.js.map +1 -0
- package/dist/ports/pdpp-auth.d.ts +103 -0
- package/dist/ports/pdpp-auth.d.ts.map +1 -0
- package/dist/ports/pdpp-auth.js +37 -0
- package/dist/ports/pdpp-auth.js.map +1 -0
- package/dist/ports/pdpp-auth.test-utils.d.ts +9 -0
- package/dist/ports/pdpp-auth.test-utils.d.ts.map +1 -0
- package/dist/ports/pdpp-auth.test-utils.js +18 -0
- package/dist/ports/pdpp-auth.test-utils.js.map +1 -0
- package/dist/schemas/server-config.d.ts +190 -0
- package/dist/schemas/server-config.d.ts.map +1 -0
- package/dist/schemas/server-config.js +282 -0
- package/dist/schemas/server-config.js.map +1 -0
- package/dist/signing/index.d.ts +3 -0
- package/dist/signing/index.d.ts.map +1 -0
- package/dist/signing/index.js +3 -0
- package/dist/signing/index.js.map +1 -0
- package/dist/signing/request-signer.d.ts +20 -0
- package/dist/signing/request-signer.d.ts.map +1 -0
- package/dist/signing/request-signer.js +23 -0
- package/dist/signing/request-signer.js.map +1 -0
- package/dist/signing/signer.d.ts +40 -0
- package/dist/signing/signer.d.ts.map +1 -0
- package/dist/signing/signer.js +56 -0
- package/dist/signing/signer.js.map +1 -0
- package/dist/storage/adapters/index.d.ts +4 -0
- package/dist/storage/adapters/index.d.ts.map +1 -0
- package/dist/storage/adapters/index.js +3 -0
- package/dist/storage/adapters/index.js.map +1 -0
- package/dist/storage/adapters/interface.d.ts +57 -0
- package/dist/storage/adapters/interface.d.ts.map +1 -0
- package/dist/storage/adapters/interface.js +2 -0
- package/dist/storage/adapters/interface.js.map +1 -0
- package/dist/storage/adapters/sdk.d.ts +23 -0
- package/dist/storage/adapters/sdk.d.ts.map +1 -0
- package/dist/storage/adapters/sdk.js +73 -0
- package/dist/storage/adapters/sdk.js.map +1 -0
- package/dist/storage/adapters/vana.d.ts +12 -0
- package/dist/storage/adapters/vana.d.ts.map +1 -0
- package/dist/storage/adapters/vana.js +111 -0
- package/dist/storage/adapters/vana.js.map +1 -0
- package/dist/storage/blocks/build.d.ts +20 -0
- package/dist/storage/blocks/build.d.ts.map +1 -0
- package/dist/storage/blocks/build.js +378 -0
- package/dist/storage/blocks/build.js.map +1 -0
- package/dist/storage/blocks/cursor.d.ts +33 -0
- package/dist/storage/blocks/cursor.d.ts.map +1 -0
- package/dist/storage/blocks/cursor.js +142 -0
- package/dist/storage/blocks/cursor.js.map +1 -0
- package/dist/storage/blocks/errors.d.ts +6 -0
- package/dist/storage/blocks/errors.d.ts.map +1 -0
- package/dist/storage/blocks/errors.js +9 -0
- package/dist/storage/blocks/errors.js.map +1 -0
- package/dist/storage/blocks/index.d.ts +6 -0
- package/dist/storage/blocks/index.d.ts.map +1 -0
- package/dist/storage/blocks/index.js +5 -0
- package/dist/storage/blocks/index.js.map +1 -0
- package/dist/storage/blocks/select.d.ts +29 -0
- package/dist/storage/blocks/select.d.ts.map +1 -0
- package/dist/storage/blocks/select.js +120 -0
- package/dist/storage/blocks/select.js.map +1 -0
- package/dist/storage/blocks/types.d.ts +56 -0
- package/dist/storage/blocks/types.d.ts.map +1 -0
- package/dist/storage/blocks/types.js +2 -0
- package/dist/storage/blocks/types.js.map +1 -0
- package/dist/storage/hierarchy/index.d.ts +3 -0
- package/dist/storage/hierarchy/index.d.ts.map +1 -0
- package/dist/storage/hierarchy/index.js +2 -0
- package/dist/storage/hierarchy/index.js.map +1 -0
- package/dist/storage/hierarchy/manager.d.ts +9 -0
- package/dist/storage/hierarchy/manager.d.ts.map +1 -0
- package/dist/storage/hierarchy/manager.js +2 -0
- package/dist/storage/hierarchy/manager.js.map +1 -0
- package/dist/storage/hierarchy/paths.d.ts +11 -0
- package/dist/storage/hierarchy/paths.d.ts.map +1 -0
- package/dist/storage/hierarchy/paths.js +43 -0
- package/dist/storage/hierarchy/paths.js.map +1 -0
- package/dist/storage/index/index.d.ts +3 -0
- package/dist/storage/index/index.d.ts.map +1 -0
- package/dist/storage/index/index.js +2 -0
- package/dist/storage/index/index.js.map +1 -0
- package/dist/storage/index/manager.d.ts +63 -0
- package/dist/storage/index/manager.d.ts.map +1 -0
- package/dist/storage/index/manager.js +2 -0
- package/dist/storage/index/manager.js.map +1 -0
- package/dist/storage/index/schema.d.ts +2 -0
- package/dist/storage/index/schema.d.ts.map +1 -0
- package/dist/storage/index/schema.js +2 -0
- package/dist/storage/index/schema.js.map +1 -0
- package/dist/storage/index/types.d.ts +37 -0
- package/dist/storage/index/types.d.ts.map +1 -0
- package/dist/storage/index/types.js +2 -0
- package/dist/storage/index/types.js.map +1 -0
- package/dist/storage/pdpp-records/cursor.d.ts +27 -0
- package/dist/storage/pdpp-records/cursor.d.ts.map +1 -0
- package/dist/storage/pdpp-records/cursor.js +49 -0
- package/dist/storage/pdpp-records/cursor.js.map +1 -0
- package/dist/storage/pdpp-records/enforcement.d.ts +37 -0
- package/dist/storage/pdpp-records/enforcement.d.ts.map +1 -0
- package/dist/storage/pdpp-records/enforcement.js +79 -0
- package/dist/storage/pdpp-records/enforcement.js.map +1 -0
- package/dist/storage/pdpp-records/index.d.ts +8 -0
- package/dist/storage/pdpp-records/index.d.ts.map +1 -0
- package/dist/storage/pdpp-records/index.js +8 -0
- package/dist/storage/pdpp-records/index.js.map +1 -0
- package/dist/storage/pdpp-records/interface.d.ts +49 -0
- package/dist/storage/pdpp-records/interface.d.ts.map +1 -0
- package/dist/storage/pdpp-records/interface.js +2 -0
- package/dist/storage/pdpp-records/interface.js.map +1 -0
- package/dist/storage/pdpp-records/memory-store.d.ts +9 -0
- package/dist/storage/pdpp-records/memory-store.d.ts.map +1 -0
- package/dist/storage/pdpp-records/memory-store.js +0 -0
- package/dist/storage/pdpp-records/memory-store.js.map +1 -0
- package/dist/storage/pdpp-records/record-key.d.ts +52 -0
- package/dist/storage/pdpp-records/record-key.d.ts.map +1 -0
- package/dist/storage/pdpp-records/record-key.js +97 -0
- package/dist/storage/pdpp-records/record-key.js.map +1 -0
- package/dist/storage/pdpp-records/stream-declaration.d.ts +43 -0
- package/dist/storage/pdpp-records/stream-declaration.d.ts.map +1 -0
- package/dist/storage/pdpp-records/stream-declaration.js +17 -0
- package/dist/storage/pdpp-records/stream-declaration.js.map +1 -0
- package/dist/storage/pdpp-records/types.d.ts +93 -0
- package/dist/storage/pdpp-records/types.d.ts.map +1 -0
- package/dist/storage/pdpp-records/types.js +17 -0
- package/dist/storage/pdpp-records/types.js.map +1 -0
- package/dist/storage/preview.d.ts +12 -0
- package/dist/storage/preview.d.ts.map +1 -0
- package/dist/storage/preview.js +239 -0
- package/dist/storage/preview.js.map +1 -0
- package/dist/sync/cursor.d.ts +10 -0
- package/dist/sync/cursor.d.ts.map +1 -0
- package/dist/sync/cursor.js +2 -0
- package/dist/sync/cursor.js.map +1 -0
- package/dist/sync/data-point-feed.d.ts +35 -0
- package/dist/sync/data-point-feed.d.ts.map +1 -0
- package/dist/sync/data-point-feed.js +122 -0
- package/dist/sync/data-point-feed.js.map +1 -0
- package/dist/sync/data-point-id.d.ts +7 -0
- package/dist/sync/data-point-id.d.ts.map +1 -0
- package/dist/sync/data-point-id.js +16 -0
- package/dist/sync/data-point-id.js.map +1 -0
- package/dist/sync/delete-data-port.d.ts +50 -0
- package/dist/sync/delete-data-port.d.ts.map +1 -0
- package/dist/sync/delete-data-port.js +244 -0
- package/dist/sync/delete-data-port.js.map +1 -0
- package/dist/sync/engine/sync-manager.d.ts +58 -0
- package/dist/sync/engine/sync-manager.d.ts.map +1 -0
- package/dist/sync/engine/sync-manager.js +285 -0
- package/dist/sync/engine/sync-manager.js.map +1 -0
- package/dist/sync/index.d.ts +15 -0
- package/dist/sync/index.d.ts.map +1 -0
- package/dist/sync/index.js +14 -0
- package/dist/sync/index.js.map +1 -0
- package/dist/sync/issues.d.ts +55 -0
- package/dist/sync/issues.d.ts.map +1 -0
- package/dist/sync/issues.js +168 -0
- package/dist/sync/issues.js.map +1 -0
- package/dist/sync/pdpp-import.d.ts +192 -0
- package/dist/sync/pdpp-import.d.ts.map +1 -0
- package/dist/sync/pdpp-import.js +422 -0
- package/dist/sync/pdpp-import.js.map +1 -0
- package/dist/sync/pending-blob-deletions.d.ts +29 -0
- package/dist/sync/pending-blob-deletions.d.ts.map +1 -0
- package/dist/sync/pending-blob-deletions.js +116 -0
- package/dist/sync/pending-blob-deletions.js.map +1 -0
- package/dist/sync/retry-memory.d.ts +33 -0
- package/dist/sync/retry-memory.d.ts.map +1 -0
- package/dist/sync/retry-memory.js +68 -0
- package/dist/sync/retry-memory.js.map +1 -0
- package/dist/sync/scope-deletions.d.ts +155 -0
- package/dist/sync/scope-deletions.d.ts.map +1 -0
- package/dist/sync/scope-deletions.js +225 -0
- package/dist/sync/scope-deletions.js.map +1 -0
- package/dist/sync/tombstone.d.ts +27 -0
- package/dist/sync/tombstone.d.ts.map +1 -0
- package/dist/sync/tombstone.js +28 -0
- package/dist/sync/tombstone.js.map +1 -0
- package/dist/sync/types.d.ts +27 -0
- package/dist/sync/types.d.ts.map +1 -0
- package/dist/sync/types.js +2 -0
- package/dist/sync/types.js.map +1 -0
- package/dist/sync/workers/delete.d.ts +163 -0
- package/dist/sync/workers/delete.d.ts.map +1 -0
- package/dist/sync/workers/delete.js +474 -0
- package/dist/sync/workers/delete.js.map +1 -0
- package/dist/sync/workers/download.d.ts +159 -0
- package/dist/sync/workers/download.d.ts.map +1 -0
- package/dist/sync/workers/download.js +731 -0
- package/dist/sync/workers/download.js.map +1 -0
- package/dist/sync/workers/upload.d.ts +98 -0
- package/dist/sync/workers/upload.d.ts.map +1 -0
- package/dist/sync/workers/upload.js +412 -0
- package/dist/sync/workers/upload.js.map +1 -0
- package/dist/test-utils/e2ee-fixtures.d.ts +94 -0
- package/dist/test-utils/e2ee-fixtures.d.ts.map +1 -0
- package/dist/test-utils/e2ee-fixtures.js +116 -0
- package/dist/test-utils/e2ee-fixtures.js.map +1 -0
- package/dist/test-utils/e2ee-gateway.d.ts +61 -0
- package/dist/test-utils/e2ee-gateway.d.ts.map +1 -0
- package/dist/test-utils/e2ee-gateway.js +248 -0
- package/dist/test-utils/e2ee-gateway.js.map +1 -0
- package/dist/test-utils/index.d.ts +5 -0
- package/dist/test-utils/index.d.ts.map +1 -0
- package/dist/test-utils/index.js +5 -0
- package/dist/test-utils/index.js.map +1 -0
- package/dist/test-utils/memory-storage.d.ts +12 -0
- package/dist/test-utils/memory-storage.d.ts.map +1 -0
- package/dist/test-utils/memory-storage.js +146 -0
- package/dist/test-utils/memory-storage.js.map +1 -0
- package/dist/test-utils/wallet.d.ts +47 -0
- package/dist/test-utils/wallet.d.ts.map +1 -0
- package/dist/test-utils/wallet.js +98 -0
- package/dist/test-utils/wallet.js.map +1 -0
- package/dist/write/attribution.d.ts +185 -0
- package/dist/write/attribution.d.ts.map +1 -0
- package/dist/write/attribution.js +450 -0
- package/dist/write/attribution.js.map +1 -0
- package/dist/write/authorize.d.ts +77 -0
- package/dist/write/authorize.d.ts.map +1 -0
- package/dist/write/authorize.js +109 -0
- package/dist/write/authorize.js.map +1 -0
- package/dist/write/index.d.ts +5 -0
- package/dist/write/index.d.ts.map +1 -0
- package/dist/write/index.js +5 -0
- package/dist/write/index.js.map +1 -0
- package/dist/write/route.d.ts +61 -0
- package/dist/write/route.d.ts.map +1 -0
- package/dist/write/route.js +132 -0
- package/dist/write/route.js.map +1 -0
- package/dist/write/session.d.ts +96 -0
- package/dist/write/session.d.ts.map +1 -0
- package/dist/write/session.js +136 -0
- package/dist/write/session.js.map +1 -0
- package/package.json +175 -0
|
@@ -0,0 +1,506 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Owner-only MCP connection management. Implements the four endpoints listed
|
|
3
|
+
* in §2 of 260604-PLAN-vana-mcp-personal-server.md:
|
|
4
|
+
*
|
|
5
|
+
* POST /v1/mcp/connections
|
|
6
|
+
* GET /v1/mcp/connections
|
|
7
|
+
* POST /v1/mcp/connections/:id/approve
|
|
8
|
+
* DELETE /v1/mcp/connections/:id
|
|
9
|
+
*
|
|
10
|
+
* These endpoints DO NOT read user data. They only manage connection records
|
|
11
|
+
* — create the per-connection grantee/token, store grant ids after the user
|
|
12
|
+
* approves them, and mark connections revoked.
|
|
13
|
+
*/
|
|
14
|
+
import { generateMcpGrantee } from "./grantee.js";
|
|
15
|
+
import { createGrantContract } from "../contracts/index.js";
|
|
16
|
+
import { appUrlFromOAuthRedirectUri, ensureMcpGranteeRegistered, McpGranteeRegistrationError, } from "./builder-registration.js";
|
|
17
|
+
import { MCP_SCOPE_ACCESS_REQUEST_LIMIT } from "./types.js";
|
|
18
|
+
import { isMcpRefreshExpired, MCP_TOKEN_TTL_MS, mcpRefreshExpiry, mcpTokenExpiry, } from "./token-expiry.js";
|
|
19
|
+
const TOKEN_BYTES = 32;
|
|
20
|
+
const OAUTH_AUTHORIZATION_TTL_MS = 10 * 60 * 1000;
|
|
21
|
+
/** Store patch that drops every refresh token a connection still answers to. */
|
|
22
|
+
const CLEARED_REFRESH_FAMILY = {
|
|
23
|
+
refreshTokenHash: undefined,
|
|
24
|
+
previousRefreshTokenHash: undefined,
|
|
25
|
+
refreshExpiresAt: undefined,
|
|
26
|
+
};
|
|
27
|
+
function nowIso(now) {
|
|
28
|
+
return (now ? now() : new Date()).toISOString();
|
|
29
|
+
}
|
|
30
|
+
function nowMs(now) {
|
|
31
|
+
return (now ? now() : new Date()).getTime();
|
|
32
|
+
}
|
|
33
|
+
function randomBytes(byteLength) {
|
|
34
|
+
const bytes = new Uint8Array(byteLength);
|
|
35
|
+
globalThis.crypto.getRandomValues(bytes);
|
|
36
|
+
return bytes;
|
|
37
|
+
}
|
|
38
|
+
function bytesToHex(bytes) {
|
|
39
|
+
return Array.from(bytes, (b) => b.toString(16).padStart(2, "0")).join("");
|
|
40
|
+
}
|
|
41
|
+
function bytesToBase64Url(bytes) {
|
|
42
|
+
let binary = "";
|
|
43
|
+
for (const byte of bytes)
|
|
44
|
+
binary += String.fromCharCode(byte);
|
|
45
|
+
// `btoa` exists in modern browsers AND Node ≥18 (the engines version that
|
|
46
|
+
// PS Lite and personal-server-ts already target).
|
|
47
|
+
const base64 = btoa(binary);
|
|
48
|
+
return base64.replace(/\+/g, "-").replace(/\//g, "_").replace(/=+$/, "");
|
|
49
|
+
}
|
|
50
|
+
export async function hashConnectionToken(token) {
|
|
51
|
+
const data = new TextEncoder().encode(token);
|
|
52
|
+
const digest = await globalThis.crypto.subtle.digest("SHA-256", data);
|
|
53
|
+
return bytesToHex(new Uint8Array(digest));
|
|
54
|
+
}
|
|
55
|
+
function randomId() {
|
|
56
|
+
return (globalThis.crypto?.randomUUID?.() ?? `mcp-${bytesToHex(randomBytes(8))}`);
|
|
57
|
+
}
|
|
58
|
+
function randomToken() {
|
|
59
|
+
return bytesToBase64Url(randomBytes(TOKEN_BYTES));
|
|
60
|
+
}
|
|
61
|
+
export async function createMcpConnection(input, options) {
|
|
62
|
+
const grantee = generateMcpGrantee();
|
|
63
|
+
const token = randomToken();
|
|
64
|
+
const tokenHash = await hashConnectionToken(token);
|
|
65
|
+
const id = randomId();
|
|
66
|
+
const createdAt = nowIso(options.now);
|
|
67
|
+
const record = {
|
|
68
|
+
id,
|
|
69
|
+
displayName: input.displayName?.trim() || "Claude",
|
|
70
|
+
granteeAddress: grantee.key.address,
|
|
71
|
+
granteePublicKey: grantee.key.publicKey,
|
|
72
|
+
encryptedGranteePrivateKey: grantee.key.encryptedPrivateKey,
|
|
73
|
+
tokenHash,
|
|
74
|
+
tokenExpiresAt: mcpTokenExpiry(nowMs(options.now)),
|
|
75
|
+
status: "pending",
|
|
76
|
+
grants: [],
|
|
77
|
+
createdAt,
|
|
78
|
+
};
|
|
79
|
+
await options.store.create(record);
|
|
80
|
+
return {
|
|
81
|
+
connectionId: id,
|
|
82
|
+
granteeAddress: grantee.key.address,
|
|
83
|
+
connectionToken: token,
|
|
84
|
+
mcpUrl: buildMcpUrl(options.publicOrigin, token),
|
|
85
|
+
createdAt,
|
|
86
|
+
};
|
|
87
|
+
}
|
|
88
|
+
export function buildMcpUrl(publicOrigin, token) {
|
|
89
|
+
const base = publicOrigin.endsWith("/")
|
|
90
|
+
? publicOrigin.slice(0, -1)
|
|
91
|
+
: publicOrigin;
|
|
92
|
+
return `${base}/mcp/${encodeURIComponent(token)}`;
|
|
93
|
+
}
|
|
94
|
+
export function buildStableMcpUrl(publicOrigin) {
|
|
95
|
+
const base = publicOrigin.endsWith("/")
|
|
96
|
+
? publicOrigin.slice(0, -1)
|
|
97
|
+
: publicOrigin;
|
|
98
|
+
return `${base}/mcp`;
|
|
99
|
+
}
|
|
100
|
+
export function buildMcpProtectedResourceMetadataUrl(publicOrigin) {
|
|
101
|
+
const base = publicOrigin.endsWith("/")
|
|
102
|
+
? publicOrigin.slice(0, -1)
|
|
103
|
+
: publicOrigin;
|
|
104
|
+
return `${base}/.well-known/oauth-protected-resource/mcp`;
|
|
105
|
+
}
|
|
106
|
+
export class McpConnectionNotFoundError extends Error {
|
|
107
|
+
connectionId;
|
|
108
|
+
constructor(connectionId) {
|
|
109
|
+
super(`mcp connection ${connectionId} not found`);
|
|
110
|
+
this.connectionId = connectionId;
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
export class McpConnectionStateError extends Error {
|
|
114
|
+
connectionId;
|
|
115
|
+
state;
|
|
116
|
+
expected;
|
|
117
|
+
constructor(connectionId, state, expected) {
|
|
118
|
+
super(`mcp connection ${connectionId} is ${state}; expected ${expected}`);
|
|
119
|
+
this.connectionId = connectionId;
|
|
120
|
+
this.state = state;
|
|
121
|
+
this.expected = expected;
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
export async function approveMcpConnection(input, options) {
|
|
125
|
+
if (!input.grants.length) {
|
|
126
|
+
throw new Error("approveMcpConnection requires at least one grant; the consent flow must mint grants first");
|
|
127
|
+
}
|
|
128
|
+
const approvedAt = nowIso(options.now);
|
|
129
|
+
const updated = await options.store.mutate(input.connectionId, (existing) => {
|
|
130
|
+
if (existing.status === "revoked") {
|
|
131
|
+
throw new McpConnectionStateError(input.connectionId, existing.status, "pending or approved");
|
|
132
|
+
}
|
|
133
|
+
const pendingRequest = existing.scopeAccessRequest;
|
|
134
|
+
const remainingRequestScopes = pendingRequest?.scopes.filter((scope) => !input.grants.some((grant) => grantCoversScope(grant, scope)));
|
|
135
|
+
return {
|
|
136
|
+
...existing,
|
|
137
|
+
status: "approved",
|
|
138
|
+
grants: input.grants,
|
|
139
|
+
approvedAt,
|
|
140
|
+
scopeAccessRequest: pendingRequest &&
|
|
141
|
+
remainingRequestScopes &&
|
|
142
|
+
remainingRequestScopes.length > 0
|
|
143
|
+
? { ...pendingRequest, scopes: remainingRequestScopes }
|
|
144
|
+
: undefined,
|
|
145
|
+
};
|
|
146
|
+
});
|
|
147
|
+
if (!updated)
|
|
148
|
+
throw new McpConnectionNotFoundError(input.connectionId);
|
|
149
|
+
return updated;
|
|
150
|
+
}
|
|
151
|
+
function grantCoversScope(grant, scope) {
|
|
152
|
+
return grant.scopes.some((granted) => granted === "*" ||
|
|
153
|
+
granted === scope ||
|
|
154
|
+
(granted.endsWith(".*") && scope.startsWith(granted.slice(0, -1))));
|
|
155
|
+
}
|
|
156
|
+
export async function requestMcpScopeAccess(input, options) {
|
|
157
|
+
const requestedAt = nowIso(options.now);
|
|
158
|
+
const inputScopes = Array.from(new Set(input.scopes.map((scope) => scope.trim()).filter(Boolean))).sort();
|
|
159
|
+
const updated = await options.store.mutate(input.connectionId, (existing) => {
|
|
160
|
+
if (existing.status !== "approved") {
|
|
161
|
+
throw new McpConnectionStateError(input.connectionId, existing.status, "approved");
|
|
162
|
+
}
|
|
163
|
+
const scopes = Array.from(new Set([...(existing.scopeAccessRequest?.scopes ?? []), ...inputScopes]
|
|
164
|
+
.map((scope) => scope.trim())
|
|
165
|
+
.filter((scope) => scope.length > 0 &&
|
|
166
|
+
!existing.grants.some((grant) => grantCoversScope(grant, scope))))).sort();
|
|
167
|
+
if (scopes.length === 0)
|
|
168
|
+
return existing;
|
|
169
|
+
if (scopes.length > MCP_SCOPE_ACCESS_REQUEST_LIMIT)
|
|
170
|
+
return existing;
|
|
171
|
+
const reason = input.reason?.trim() || existing.scopeAccessRequest?.reason;
|
|
172
|
+
const request = {
|
|
173
|
+
scopes,
|
|
174
|
+
...(reason ? { reason } : {}),
|
|
175
|
+
requestedAt,
|
|
176
|
+
};
|
|
177
|
+
return { ...existing, scopeAccessRequest: request };
|
|
178
|
+
});
|
|
179
|
+
if (!updated)
|
|
180
|
+
throw new McpConnectionNotFoundError(input.connectionId);
|
|
181
|
+
const missingInputScopes = inputScopes.filter((scope) => !updated.grants.some((grant) => grantCoversScope(grant, scope)));
|
|
182
|
+
return {
|
|
183
|
+
connection: updated,
|
|
184
|
+
requestRecorded: missingInputScopes.length > 0 &&
|
|
185
|
+
missingInputScopes.every((scope) => updated.scopeAccessRequest?.scopes.includes(scope)),
|
|
186
|
+
};
|
|
187
|
+
}
|
|
188
|
+
export async function revokeMcpConnection(connectionId, options) {
|
|
189
|
+
const existing = await options.store.getById(connectionId);
|
|
190
|
+
if (!existing)
|
|
191
|
+
throw new McpConnectionNotFoundError(connectionId);
|
|
192
|
+
if (existing.status === "revoked")
|
|
193
|
+
return existing;
|
|
194
|
+
const revokedAt = nowIso(options.now);
|
|
195
|
+
// The refresh token outlives the access token by weeks, so a revoke that
|
|
196
|
+
// left it in place would hand the holder a fresh bearer minutes later.
|
|
197
|
+
const updated = await options.store.update(connectionId, {
|
|
198
|
+
status: "revoked",
|
|
199
|
+
revokedAt,
|
|
200
|
+
...CLEARED_REFRESH_FAMILY,
|
|
201
|
+
});
|
|
202
|
+
if (!updated)
|
|
203
|
+
throw new McpConnectionNotFoundError(connectionId);
|
|
204
|
+
return updated;
|
|
205
|
+
}
|
|
206
|
+
export function toMcpConnectionView(record) {
|
|
207
|
+
return {
|
|
208
|
+
id: record.id,
|
|
209
|
+
displayName: record.displayName,
|
|
210
|
+
granteeAddress: record.granteeAddress,
|
|
211
|
+
status: record.status,
|
|
212
|
+
grants: record.grants,
|
|
213
|
+
scopeAccessRequest: record.scopeAccessRequest,
|
|
214
|
+
createdAt: record.createdAt,
|
|
215
|
+
approvedAt: record.approvedAt,
|
|
216
|
+
revokedAt: record.revokedAt,
|
|
217
|
+
lastUsedAt: record.lastUsedAt,
|
|
218
|
+
};
|
|
219
|
+
}
|
|
220
|
+
export async function listMcpConnectionViews(store) {
|
|
221
|
+
const records = await store.list();
|
|
222
|
+
return records.map(toMcpConnectionView);
|
|
223
|
+
}
|
|
224
|
+
export class McpOAuthAuthorizationError extends Error {
|
|
225
|
+
code;
|
|
226
|
+
status;
|
|
227
|
+
body;
|
|
228
|
+
constructor(code, message, status = 400, body) {
|
|
229
|
+
super(message);
|
|
230
|
+
this.code = code;
|
|
231
|
+
this.status = status;
|
|
232
|
+
this.body = body;
|
|
233
|
+
this.name = "McpOAuthAuthorizationError";
|
|
234
|
+
}
|
|
235
|
+
}
|
|
236
|
+
export async function createMcpOAuthAuthorization(input, options) {
|
|
237
|
+
if (!input.clientId.trim()) {
|
|
238
|
+
throw new McpOAuthAuthorizationError("invalid_client", "client_id is required");
|
|
239
|
+
}
|
|
240
|
+
if (!input.redirectUri.trim()) {
|
|
241
|
+
throw new McpOAuthAuthorizationError("invalid_request", "redirect_uri is required");
|
|
242
|
+
}
|
|
243
|
+
if (!input.codeChallenge.trim()) {
|
|
244
|
+
throw new McpOAuthAuthorizationError("invalid_request", "code_challenge is required");
|
|
245
|
+
}
|
|
246
|
+
if (input.codeChallengeMethod !== "S256") {
|
|
247
|
+
throw new McpOAuthAuthorizationError("invalid_request", "Only S256 PKCE is supported");
|
|
248
|
+
}
|
|
249
|
+
const now = options.now ? options.now() : new Date();
|
|
250
|
+
const expiresAt = new Date(now.getTime() + OAUTH_AUTHORIZATION_TTL_MS).toISOString();
|
|
251
|
+
const created = await createMcpConnection({ displayName: "Claude" }, {
|
|
252
|
+
store: options.connectionStore,
|
|
253
|
+
publicOrigin: options.publicOrigin,
|
|
254
|
+
now: () => now,
|
|
255
|
+
});
|
|
256
|
+
const authorizationId = randomId();
|
|
257
|
+
const record = {
|
|
258
|
+
id: authorizationId,
|
|
259
|
+
clientId: input.clientId,
|
|
260
|
+
redirectUri: input.redirectUri,
|
|
261
|
+
codeChallenge: input.codeChallenge,
|
|
262
|
+
codeChallengeMethod: "S256",
|
|
263
|
+
...(input.scope ? { scope: input.scope } : {}),
|
|
264
|
+
...(input.state ? { state: input.state } : {}),
|
|
265
|
+
connectionId: created.connectionId,
|
|
266
|
+
granteeAddress: created.granteeAddress,
|
|
267
|
+
status: "pending",
|
|
268
|
+
createdAt: now.toISOString(),
|
|
269
|
+
expiresAt,
|
|
270
|
+
};
|
|
271
|
+
await options.authorizationStore.create(record);
|
|
272
|
+
return {
|
|
273
|
+
authorizationId,
|
|
274
|
+
connectionId: created.connectionId,
|
|
275
|
+
granteeAddress: created.granteeAddress,
|
|
276
|
+
expiresAt,
|
|
277
|
+
};
|
|
278
|
+
}
|
|
279
|
+
export function toMcpOAuthAuthorizationView(record) {
|
|
280
|
+
return {
|
|
281
|
+
id: record.id,
|
|
282
|
+
clientId: record.clientId,
|
|
283
|
+
redirectUri: record.redirectUri,
|
|
284
|
+
...(record.scope ? { scope: record.scope } : {}),
|
|
285
|
+
...(record.state ? { state: record.state } : {}),
|
|
286
|
+
connectionId: record.connectionId,
|
|
287
|
+
granteeAddress: record.granteeAddress,
|
|
288
|
+
status: record.status,
|
|
289
|
+
createdAt: record.createdAt,
|
|
290
|
+
expiresAt: record.expiresAt,
|
|
291
|
+
};
|
|
292
|
+
}
|
|
293
|
+
export async function approveMcpOAuthAuthorization(input, options) {
|
|
294
|
+
const record = await options.authorizationStore.getById(input.authorizationId);
|
|
295
|
+
if (!record) {
|
|
296
|
+
throw new McpOAuthAuthorizationError("not_found", `mcp oauth authorization ${input.authorizationId} not found`);
|
|
297
|
+
}
|
|
298
|
+
if (record.status !== "pending") {
|
|
299
|
+
throw new McpOAuthAuthorizationError("invalid_state", `mcp oauth authorization ${input.authorizationId} is ${record.status}; expected pending`);
|
|
300
|
+
}
|
|
301
|
+
if (Date.parse(record.expiresAt) <= (options.now?.() ?? new Date()).getTime()) {
|
|
302
|
+
await options.authorizationStore.update(record.id, { status: "expired" });
|
|
303
|
+
throw new McpOAuthAuthorizationError("expired", "MCP OAuth authorization expired before approval");
|
|
304
|
+
}
|
|
305
|
+
if (input.grants.length === 0) {
|
|
306
|
+
throw new McpOAuthAuthorizationError("grants_required", "Approve requires at least one grant");
|
|
307
|
+
}
|
|
308
|
+
await approveMcpConnection({ connectionId: record.connectionId, grants: input.grants }, { store: options.connectionStore, now: options.now });
|
|
309
|
+
const authorizationCode = randomToken();
|
|
310
|
+
const authorizationCodeHash = await hashMcpOAuthAuthorizationCode(authorizationCode);
|
|
311
|
+
const approvedAt = (options.now ? options.now() : new Date()).toISOString();
|
|
312
|
+
await options.authorizationStore.update(record.id, {
|
|
313
|
+
status: "approved",
|
|
314
|
+
approvedAt,
|
|
315
|
+
authorizationCodeHash,
|
|
316
|
+
});
|
|
317
|
+
const redirectTo = new URL(record.redirectUri);
|
|
318
|
+
redirectTo.searchParams.set("code", authorizationCode);
|
|
319
|
+
if (record.state) {
|
|
320
|
+
redirectTo.searchParams.set("state", record.state);
|
|
321
|
+
}
|
|
322
|
+
return { redirectTo: redirectTo.toString(), authorizationCode };
|
|
323
|
+
}
|
|
324
|
+
export async function approveMcpOAuthAuthorizationWithScopes(input, options) {
|
|
325
|
+
const record = await options.authorizationStore.getById(input.authorizationId);
|
|
326
|
+
if (!record) {
|
|
327
|
+
throw new McpOAuthAuthorizationError("not_found", `mcp oauth authorization ${input.authorizationId} not found`, 404);
|
|
328
|
+
}
|
|
329
|
+
if (!Array.isArray(input.scopes) || input.scopes.length === 0) {
|
|
330
|
+
throw new McpOAuthAuthorizationError("scopes_required", "Approve requires at least one scope");
|
|
331
|
+
}
|
|
332
|
+
const connection = await options.connectionStore.getById(record.connectionId);
|
|
333
|
+
if (!connection) {
|
|
334
|
+
throw new McpOAuthAuthorizationError("connection_not_found", `mcp connection ${record.connectionId} not found`, 404);
|
|
335
|
+
}
|
|
336
|
+
try {
|
|
337
|
+
await ensureMcpGranteeRegistered({
|
|
338
|
+
connection,
|
|
339
|
+
gateway: options.gateway,
|
|
340
|
+
gatewayConfig: options.gatewayConfig,
|
|
341
|
+
gatewayUrl: options.gatewayUrl,
|
|
342
|
+
appUrl: appUrlFromOAuthRedirectUri(record.redirectUri, record.clientId),
|
|
343
|
+
fetch: options.fetch,
|
|
344
|
+
});
|
|
345
|
+
}
|
|
346
|
+
catch (err) {
|
|
347
|
+
if (err instanceof McpGranteeRegistrationError) {
|
|
348
|
+
throw new McpOAuthAuthorizationError(err.code, err.message, err.status ?? 502, err.body);
|
|
349
|
+
}
|
|
350
|
+
throw err;
|
|
351
|
+
}
|
|
352
|
+
const grantResult = await createGrantContract({
|
|
353
|
+
gateway: options.gateway,
|
|
354
|
+
serverOwner: options.serverOwner,
|
|
355
|
+
serverSigner: options.serverSigner,
|
|
356
|
+
body: {
|
|
357
|
+
granteeAddress: connection.granteeAddress,
|
|
358
|
+
scopes: input.scopes,
|
|
359
|
+
...(input.expiresAt !== undefined ? { expiresAt: input.expiresAt } : {}),
|
|
360
|
+
...(input.nonce !== undefined ? { nonce: input.nonce } : {}),
|
|
361
|
+
},
|
|
362
|
+
});
|
|
363
|
+
if (!grantResult.ok) {
|
|
364
|
+
throw new McpOAuthAuthorizationError("grant_creation_failed", extractGrantErrorMessage(grantResult.body), grantResult.status, grantResult.body);
|
|
365
|
+
}
|
|
366
|
+
const grantId = grantResult.body.grantId;
|
|
367
|
+
if (!grantId) {
|
|
368
|
+
throw new McpOAuthAuthorizationError("grant_creation_failed", "Personal Server did not return a grant id.", 500, grantResult.body);
|
|
369
|
+
}
|
|
370
|
+
return approveMcpOAuthAuthorization({
|
|
371
|
+
authorizationId: input.authorizationId,
|
|
372
|
+
grants: [{ grantId, scopes: input.scopes }],
|
|
373
|
+
}, options);
|
|
374
|
+
}
|
|
375
|
+
export async function redeemMcpOAuthAuthorizationCode(input, options) {
|
|
376
|
+
const codeHash = await hashMcpOAuthAuthorizationCode(input.authorizationCode);
|
|
377
|
+
const record = await options.authorizationStore.getByCodeHash(codeHash);
|
|
378
|
+
if (!record) {
|
|
379
|
+
throw new McpOAuthAuthorizationError("invalid_grant", "Unknown MCP authorization code");
|
|
380
|
+
}
|
|
381
|
+
if (record.status !== "approved") {
|
|
382
|
+
throw new McpOAuthAuthorizationError("invalid_grant", "MCP authorization code has already been used or is not approved");
|
|
383
|
+
}
|
|
384
|
+
if (record.clientId !== input.clientId) {
|
|
385
|
+
throw new McpOAuthAuthorizationError("invalid_grant", "client_id does not match authorization request");
|
|
386
|
+
}
|
|
387
|
+
if (record.redirectUri !== input.redirectUri) {
|
|
388
|
+
throw new McpOAuthAuthorizationError("invalid_grant", "redirect_uri does not match authorization request");
|
|
389
|
+
}
|
|
390
|
+
if (Date.parse(record.expiresAt) <= (options.now?.() ?? new Date()).getTime()) {
|
|
391
|
+
await options.authorizationStore.update(record.id, { status: "expired" });
|
|
392
|
+
throw new McpOAuthAuthorizationError("invalid_grant", "MCP authorization code expired");
|
|
393
|
+
}
|
|
394
|
+
if (!(await verifyPkceS256({
|
|
395
|
+
codeVerifier: input.codeVerifier,
|
|
396
|
+
expectedChallenge: record.codeChallenge,
|
|
397
|
+
}))) {
|
|
398
|
+
throw new McpOAuthAuthorizationError("invalid_grant", "PKCE verification failed");
|
|
399
|
+
}
|
|
400
|
+
const issued = await issueMcpTokenPair({
|
|
401
|
+
connectionId: record.connectionId,
|
|
402
|
+
clientId: record.clientId,
|
|
403
|
+
issuedAtMs: nowMs(options.now),
|
|
404
|
+
}, options.connectionStore);
|
|
405
|
+
if (!issued) {
|
|
406
|
+
throw new McpOAuthAuthorizationError("invalid_grant", "MCP connection for authorization no longer exists");
|
|
407
|
+
}
|
|
408
|
+
await options.authorizationStore.update(record.id, {
|
|
409
|
+
status: "redeemed",
|
|
410
|
+
redeemedAt: (options.now ? options.now() : new Date()).toISOString(),
|
|
411
|
+
});
|
|
412
|
+
return {
|
|
413
|
+
...issued,
|
|
414
|
+
...(record.scope ? { scope: record.scope } : {}),
|
|
415
|
+
};
|
|
416
|
+
}
|
|
417
|
+
/**
|
|
418
|
+
* RFC 6749 §6 refresh grant with RFC 9700 §4.14.2 rotation: every exchange
|
|
419
|
+
* mints a new pair and retires the presented refresh token, so the MCP client
|
|
420
|
+
* renews silently instead of re-consenting once an hour.
|
|
421
|
+
*/
|
|
422
|
+
export async function refreshMcpOAuthToken(input, options) {
|
|
423
|
+
const presentedHash = await hashMcpRefreshToken(input.refreshToken);
|
|
424
|
+
const connection = await options.connectionStore.getByRefreshTokenHash(presentedHash);
|
|
425
|
+
if (!connection) {
|
|
426
|
+
throw new McpOAuthAuthorizationError("invalid_grant", "Unknown MCP refresh token");
|
|
427
|
+
}
|
|
428
|
+
// Reuse detection. A rotated-out token still matching means two holders have
|
|
429
|
+
// the family — the legitimate client and a thief — and we cannot tell which
|
|
430
|
+
// one is calling, so the whole family dies. The access token keeps its own
|
|
431
|
+
// expiry: cutting it short would only punish the client that behaved.
|
|
432
|
+
if (connection.refreshTokenHash !== presentedHash) {
|
|
433
|
+
await options.connectionStore.update(connection.id, CLEARED_REFRESH_FAMILY);
|
|
434
|
+
throw new McpOAuthAuthorizationError("invalid_grant", "MCP refresh token was already rotated; the refresh family is revoked");
|
|
435
|
+
}
|
|
436
|
+
if (connection.status !== "approved") {
|
|
437
|
+
throw new McpOAuthAuthorizationError("invalid_grant", "MCP connection is not approved");
|
|
438
|
+
}
|
|
439
|
+
if (connection.clientId !== input.clientId) {
|
|
440
|
+
throw new McpOAuthAuthorizationError("invalid_grant", "client_id does not match the issued refresh token");
|
|
441
|
+
}
|
|
442
|
+
if (isMcpRefreshExpired(connection, nowMs(options.now))) {
|
|
443
|
+
throw new McpOAuthAuthorizationError("invalid_grant", "MCP refresh token expired");
|
|
444
|
+
}
|
|
445
|
+
const issued = await issueMcpTokenPair({
|
|
446
|
+
connectionId: connection.id,
|
|
447
|
+
clientId: input.clientId,
|
|
448
|
+
issuedAtMs: nowMs(options.now),
|
|
449
|
+
retiredRefreshHash: presentedHash,
|
|
450
|
+
}, options.connectionStore);
|
|
451
|
+
if (!issued) {
|
|
452
|
+
throw new McpOAuthAuthorizationError("invalid_grant", "MCP connection no longer exists");
|
|
453
|
+
}
|
|
454
|
+
return issued;
|
|
455
|
+
}
|
|
456
|
+
/**
|
|
457
|
+
* Mint one access/refresh pair. The rotation is a single store `update`, so a
|
|
458
|
+
* concurrent refresh either sees the old pair or the new one — never a
|
|
459
|
+
* connection with the old refresh already dead and no new one issued.
|
|
460
|
+
*/
|
|
461
|
+
async function issueMcpTokenPair(input, store) {
|
|
462
|
+
const accessToken = randomToken();
|
|
463
|
+
const refreshToken = randomToken();
|
|
464
|
+
const updated = await store.update(input.connectionId, {
|
|
465
|
+
clientId: input.clientId,
|
|
466
|
+
tokenHash: await hashConnectionToken(accessToken),
|
|
467
|
+
tokenExpiresAt: mcpTokenExpiry(input.issuedAtMs),
|
|
468
|
+
refreshTokenHash: await hashMcpRefreshToken(refreshToken),
|
|
469
|
+
previousRefreshTokenHash: input.retiredRefreshHash,
|
|
470
|
+
refreshExpiresAt: mcpRefreshExpiry(input.issuedAtMs),
|
|
471
|
+
});
|
|
472
|
+
if (!updated)
|
|
473
|
+
return null;
|
|
474
|
+
return {
|
|
475
|
+
accessToken,
|
|
476
|
+
refreshToken,
|
|
477
|
+
expiresIn: Math.floor(MCP_TOKEN_TTL_MS / 1000),
|
|
478
|
+
};
|
|
479
|
+
}
|
|
480
|
+
/** Domain-separated so a refresh token can never resolve as a bearer. */
|
|
481
|
+
async function hashMcpRefreshToken(token) {
|
|
482
|
+
return hashConnectionToken(`mcp-oauth-refresh:${token}`);
|
|
483
|
+
}
|
|
484
|
+
async function hashMcpOAuthAuthorizationCode(code) {
|
|
485
|
+
return hashConnectionToken(`mcp-oauth-code:${code}`);
|
|
486
|
+
}
|
|
487
|
+
async function verifyPkceS256(input) {
|
|
488
|
+
const data = new TextEncoder().encode(input.codeVerifier);
|
|
489
|
+
const digest = await globalThis.crypto.subtle.digest("SHA-256", data);
|
|
490
|
+
return bytesToBase64Url(new Uint8Array(digest)) === input.expectedChallenge;
|
|
491
|
+
}
|
|
492
|
+
function extractGrantErrorMessage(body) {
|
|
493
|
+
if (body && typeof body === "object") {
|
|
494
|
+
const record = body;
|
|
495
|
+
if (typeof record.message === "string")
|
|
496
|
+
return record.message;
|
|
497
|
+
const nested = record.error;
|
|
498
|
+
if (nested && typeof nested === "object") {
|
|
499
|
+
const message = nested.message;
|
|
500
|
+
if (typeof message === "string")
|
|
501
|
+
return message;
|
|
502
|
+
}
|
|
503
|
+
}
|
|
504
|
+
return "Could not create MCP grant";
|
|
505
|
+
}
|
|
506
|
+
//# sourceMappingURL=connection-api.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"connection-api.js","sourceRoot":"","sources":["../../src/mcp/connection-api.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Per-connection MCP grantee key generation + Web3Signed request signing.
|
|
3
|
+
*
|
|
4
|
+
* Each MCP connection gets a fresh secp256k1 keypair. The PS route uses this
|
|
5
|
+
* keypair to sign every read it performs on behalf of the connection so:
|
|
6
|
+
*
|
|
7
|
+
* 1. The data read flows through `authorizeBuilderRead` exactly like any
|
|
8
|
+
* external builder request.
|
|
9
|
+
* 2. The access log records the per-connection grantee address, not the
|
|
10
|
+
* owner.
|
|
11
|
+
* 3. Disconnecting one MCP client cannot affect another or the owner.
|
|
12
|
+
*
|
|
13
|
+
* This module does NOT do encryption-at-rest. The caller chooses the storage
|
|
14
|
+
* representation (`McpEncryptedPrivateKey`) — for Node the `plaintext` variant
|
|
15
|
+
* is fine (same trust boundary as the on-disk server key); for Web PS Lite the
|
|
16
|
+
* caller should wrap with the owner-derived master key.
|
|
17
|
+
*/
|
|
18
|
+
import type { ServerAccount } from "../keys/server-account.js";
|
|
19
|
+
import type { McpEncryptedPrivateKey } from "./types.js";
|
|
20
|
+
export interface McpGranteeKey {
|
|
21
|
+
address: `0x${string}`;
|
|
22
|
+
publicKey: `0x${string}`;
|
|
23
|
+
encryptedPrivateKey: McpEncryptedPrivateKey;
|
|
24
|
+
}
|
|
25
|
+
export interface GeneratedMcpGrantee {
|
|
26
|
+
key: McpGranteeKey;
|
|
27
|
+
account: ServerAccount;
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Generate a new MCP grantee keypair and return both the persisted
|
|
31
|
+
* (plaintext-wrapped) form and a ready-to-sign `ServerAccount`.
|
|
32
|
+
*/
|
|
33
|
+
export declare function generateMcpGrantee(): GeneratedMcpGrantee;
|
|
34
|
+
/**
|
|
35
|
+
* Reconstruct a `ServerAccount` from a persisted MCP grantee record.
|
|
36
|
+
* Only `plaintext` is supported here; Web PS Lite must decrypt to plaintext
|
|
37
|
+
* before calling.
|
|
38
|
+
*/
|
|
39
|
+
export declare function loadMcpGranteeAccount(key: McpGranteeKey): ServerAccount;
|
|
40
|
+
/**
|
|
41
|
+
* Build a Web3Signed Authorization header that authenticates the bearer as the
|
|
42
|
+
* MCP connection's grantee for a given grant id and request URL.
|
|
43
|
+
*/
|
|
44
|
+
export declare function signMcpGranteeRequest(params: {
|
|
45
|
+
account: ServerAccount;
|
|
46
|
+
aud: string;
|
|
47
|
+
method: string;
|
|
48
|
+
uri: string;
|
|
49
|
+
grantId: string;
|
|
50
|
+
body?: Uint8Array;
|
|
51
|
+
}): Promise<string>;
|
|
52
|
+
//# sourceMappingURL=grantee.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"grantee.d.ts","sourceRoot":"","sources":["../../src/mcp/grantee.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAIH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAC/D,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,YAAY,CAAC;AAEzD,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,KAAK,MAAM,EAAE,CAAC;IACvB,SAAS,EAAE,KAAK,MAAM,EAAE,CAAC;IACzB,mBAAmB,EAAE,sBAAsB,CAAC;CAC7C;AAED,MAAM,WAAW,mBAAmB;IAClC,GAAG,EAAE,aAAa,CAAC;IACnB,OAAO,EAAE,aAAa,CAAC;CACxB;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,IAAI,mBAAmB,CA8BxD;AAED;;;;GAIG;AACH,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,aAAa,GAAG,aAAa,CA0BvE;AAED;;;GAGG;AACH,wBAAsB,qBAAqB,CAAC,MAAM,EAAE;IAClD,OAAO,EAAE,aAAa,CAAC;IACvB,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;IACf,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,UAAU,CAAC;CACnB,GAAG,OAAO,CAAC,MAAM,CAAC,CASlB"}
|