@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,402 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* X402 payment challenge / verification for builder reads.
|
|
3
|
+
*
|
|
4
|
+
* The personal server speaks an x402-style payment dance to builders on
|
|
5
|
+
* GET /v1/data/:scope. When a request arrives without (or with an invalid)
|
|
6
|
+
* X-PAYMENT header the server issues a 402 challenge: a server-signed
|
|
7
|
+
* RECORD_DATA_ACCESS attestation plus the canonical GenericPayment message
|
|
8
|
+
* the builder must EIP-712 sign. The builder retries with the signed
|
|
9
|
+
* message in X-PAYMENT; the server validates locally, then forwards to
|
|
10
|
+
* `POST /v1/escrow/pay` on the gateway. On 2xx the read proceeds; on
|
|
11
|
+
* 4xx/5xx the server responds with a fresh challenge.
|
|
12
|
+
*
|
|
13
|
+
* This module is wire-format only — it doesn't talk to the gateway or the
|
|
14
|
+
* storage layer. Callers in `api/index.ts` glue it to `gateway.getGrant`
|
|
15
|
+
* (for fee discovery), `IndexEntry.dataPointId/version` (for accessRecord
|
|
16
|
+
* binding), and a direct `fetch` to the gateway for payment forwarding.
|
|
17
|
+
*/
|
|
18
|
+
import { GENERIC_PAYMENT_TYPES, RECORD_DATA_ACCESS_TYPES, dataRegistryDomain, escrowPaymentDomain, } from "@opendatalabs/vana-sdk/browser";
|
|
19
|
+
import { recoverTypedDataAddress } from "viem";
|
|
20
|
+
// Per-event recordId on the access attestation. 32 cryptographically random
|
|
21
|
+
// bytes — collision-resistant under the DataRegistryV2 `_usedRecordIds`
|
|
22
|
+
// set the contract pins per access event.
|
|
23
|
+
export function generateRecordId() {
|
|
24
|
+
const bytes = new Uint8Array(32);
|
|
25
|
+
crypto.getRandomValues(bytes);
|
|
26
|
+
return ("0x" +
|
|
27
|
+
Array.from(bytes, (b) => b.toString(16).padStart(2, "0")).join(""));
|
|
28
|
+
}
|
|
29
|
+
// Build a fresh paymentNonce: high 32 bits = Date.now() (ms-monotonic), low
|
|
30
|
+
// 32 bits = cryptographic randomness (within-ms collision avoidance). Yields
|
|
31
|
+
// a strictly-increasing uint256 across ms ticks while keeping per-ms
|
|
32
|
+
// collision probability negligible. Serialized as a decimal string on the
|
|
33
|
+
// wire so the gateway's `^[1-9]\d*$` regex accepts it.
|
|
34
|
+
//
|
|
35
|
+
// Caveat: server-clock regressions can break monotonicity; the gateway
|
|
36
|
+
// rejects out-of-order nonces with 409 and the builder retries.
|
|
37
|
+
export function nextPaymentNonce() {
|
|
38
|
+
const rand = new Uint32Array(1);
|
|
39
|
+
crypto.getRandomValues(rand);
|
|
40
|
+
return (BigInt(Date.now()) << 32n) + BigInt(rand[0]);
|
|
41
|
+
}
|
|
42
|
+
// Recover the millisecond timestamp encoded in the high 32 bits of a nonce
|
|
43
|
+
// generated by `nextPaymentNonce`. Used for the optional freshness check
|
|
44
|
+
// during X-PAYMENT validation.
|
|
45
|
+
export function paymentNonceIssueTimeMs(nonce) {
|
|
46
|
+
return nonce >> 32n;
|
|
47
|
+
}
|
|
48
|
+
const CHALLENGE_TTL_SECONDS = 300; // 5 min — challenges are stateless; this
|
|
49
|
+
// is purely advisory for clients.
|
|
50
|
+
const NONCE_FRESHNESS_MS = 600_000; // accept paymentNonces issued within
|
|
51
|
+
// the last 10 minutes (or up to 1 min in the future — clock skew tolerance).
|
|
52
|
+
const NONCE_FUTURE_SKEW_MS = 60_000;
|
|
53
|
+
const BYTES32_REGEX = /^0x[0-9a-fA-F]{64}$/;
|
|
54
|
+
const ADDRESS_REGEX = /^0x[0-9a-fA-F]{40}$/;
|
|
55
|
+
const SIGNATURE_REGEX = /^0x[0-9a-fA-F]{130}$/;
|
|
56
|
+
const POSITIVE_DECIMAL_INT_REGEX = /^[1-9]\d*$/;
|
|
57
|
+
const NON_NEGATIVE_DECIMAL_INT_REGEX = /^(0|[1-9]\d*)$/;
|
|
58
|
+
export async function buildChallenge(input) {
|
|
59
|
+
const now = input.now?.() ?? new Date();
|
|
60
|
+
const expiresAt = Math.floor(now.getTime() / 1000) + CHALLENGE_TTL_SECONDS;
|
|
61
|
+
const generateNonce = input.generateNonce ?? nextPaymentNonce;
|
|
62
|
+
const generateRecord = input.generateRecordIdFn ?? generateRecordId;
|
|
63
|
+
// The canary `totalDue` already accounts for paymentStatus (registration
|
|
64
|
+
// is omitted when grant.paymentStatus === 'paid'). SDK comment: "snapshot
|
|
65
|
+
// — clients shouldn't cache across requests", so the caller re-fetches.
|
|
66
|
+
const amount = input.grant.fee.totalDue;
|
|
67
|
+
const registrationOwed = input.grant.paymentStatus !== "paid";
|
|
68
|
+
const asset = input.grant.fee.asset;
|
|
69
|
+
let accessRecord;
|
|
70
|
+
if (input.serverSigner &&
|
|
71
|
+
input.serverOwner &&
|
|
72
|
+
input.entry &&
|
|
73
|
+
input.entry.dataPointId !== null) {
|
|
74
|
+
const recordId = generateRecord();
|
|
75
|
+
const version = BigInt(input.entry.version);
|
|
76
|
+
const signature = await input.serverSigner.signRecordDataAccess({
|
|
77
|
+
ownerAddress: input.serverOwner,
|
|
78
|
+
scope: input.entry.scope,
|
|
79
|
+
version,
|
|
80
|
+
accessor: input.builder,
|
|
81
|
+
recordId,
|
|
82
|
+
});
|
|
83
|
+
accessRecord = {
|
|
84
|
+
dataPointId: input.entry.dataPointId,
|
|
85
|
+
version: version.toString(),
|
|
86
|
+
accessor: input.builder,
|
|
87
|
+
recordId,
|
|
88
|
+
signature,
|
|
89
|
+
};
|
|
90
|
+
}
|
|
91
|
+
const message = {
|
|
92
|
+
payerAddress: input.builder,
|
|
93
|
+
opType: "grant",
|
|
94
|
+
opId: input.grantId,
|
|
95
|
+
asset,
|
|
96
|
+
amount,
|
|
97
|
+
paymentNonce: generateNonce().toString(),
|
|
98
|
+
};
|
|
99
|
+
return {
|
|
100
|
+
x402Version: 1,
|
|
101
|
+
error: "PAYMENT_REQUIRED",
|
|
102
|
+
accepts: [
|
|
103
|
+
{
|
|
104
|
+
scheme: "vana-escrow-grant",
|
|
105
|
+
network: input.network,
|
|
106
|
+
asset,
|
|
107
|
+
amount,
|
|
108
|
+
domain: escrowPaymentDomain(input.gatewayConfig),
|
|
109
|
+
types: GENERIC_PAYMENT_TYPES,
|
|
110
|
+
message,
|
|
111
|
+
breakdown: {
|
|
112
|
+
registrationFee: registrationOwed
|
|
113
|
+
? input.grant.fee.registrationFee
|
|
114
|
+
: "0",
|
|
115
|
+
dataAccessFee: input.grant.fee.dataAccessFee,
|
|
116
|
+
registrationOwed,
|
|
117
|
+
},
|
|
118
|
+
...(accessRecord ? { accessRecord } : {}),
|
|
119
|
+
expiresAt,
|
|
120
|
+
},
|
|
121
|
+
],
|
|
122
|
+
};
|
|
123
|
+
}
|
|
124
|
+
// Decode base64 to UTF-8. Tolerates standard + url-safe alphabets so clients
|
|
125
|
+
// can use either. Uses the universally-available `atob` + Web text codecs
|
|
126
|
+
// rather than Node's Buffer so this module remains browser-safe (consumed
|
|
127
|
+
// by ps-lite as well as the Node server).
|
|
128
|
+
function base64decode(input) {
|
|
129
|
+
let s = input.replace(/-/g, "+").replace(/_/g, "/");
|
|
130
|
+
const pad = (4 - (s.length % 4)) % 4;
|
|
131
|
+
s += "=".repeat(pad);
|
|
132
|
+
const binString = atob(s);
|
|
133
|
+
const bytes = Uint8Array.from(binString, (c) => c.codePointAt(0) ?? 0);
|
|
134
|
+
return new TextDecoder().decode(bytes);
|
|
135
|
+
}
|
|
136
|
+
function base64encode(input) {
|
|
137
|
+
const bytes = new TextEncoder().encode(input);
|
|
138
|
+
let binString = "";
|
|
139
|
+
for (const b of bytes)
|
|
140
|
+
binString += String.fromCodePoint(b);
|
|
141
|
+
return btoa(binString);
|
|
142
|
+
}
|
|
143
|
+
/**
|
|
144
|
+
* Parse the X-PAYMENT header value. Returns `null` if missing/malformed —
|
|
145
|
+
* the caller should treat that as "no payment provided" and issue a 402.
|
|
146
|
+
*/
|
|
147
|
+
export function parsePaymentHeader(headerValue) {
|
|
148
|
+
if (!headerValue)
|
|
149
|
+
return null;
|
|
150
|
+
let decoded;
|
|
151
|
+
try {
|
|
152
|
+
decoded = base64decode(headerValue.trim());
|
|
153
|
+
}
|
|
154
|
+
catch {
|
|
155
|
+
return null;
|
|
156
|
+
}
|
|
157
|
+
let parsed;
|
|
158
|
+
try {
|
|
159
|
+
parsed = JSON.parse(decoded);
|
|
160
|
+
}
|
|
161
|
+
catch {
|
|
162
|
+
return null;
|
|
163
|
+
}
|
|
164
|
+
if (!parsed || typeof parsed !== "object")
|
|
165
|
+
return null;
|
|
166
|
+
const obj = parsed;
|
|
167
|
+
if (obj["x402Version"] !== 1)
|
|
168
|
+
return null;
|
|
169
|
+
if (obj["scheme"] !== "vana-escrow-grant")
|
|
170
|
+
return null;
|
|
171
|
+
if (typeof obj["network"] !== "string")
|
|
172
|
+
return null;
|
|
173
|
+
const payload = obj["payload"];
|
|
174
|
+
if (!payload || typeof payload !== "object")
|
|
175
|
+
return null;
|
|
176
|
+
const p = payload;
|
|
177
|
+
const message = p["message"];
|
|
178
|
+
if (!message || typeof message !== "object")
|
|
179
|
+
return null;
|
|
180
|
+
const m = message;
|
|
181
|
+
if (typeof m["payerAddress"] !== "string" ||
|
|
182
|
+
!ADDRESS_REGEX.test(m["payerAddress"]) ||
|
|
183
|
+
typeof m["opType"] !== "string" ||
|
|
184
|
+
typeof m["opId"] !== "string" ||
|
|
185
|
+
!BYTES32_REGEX.test(m["opId"]) ||
|
|
186
|
+
typeof m["asset"] !== "string" ||
|
|
187
|
+
!ADDRESS_REGEX.test(m["asset"]) ||
|
|
188
|
+
typeof m["amount"] !== "string" ||
|
|
189
|
+
!NON_NEGATIVE_DECIMAL_INT_REGEX.test(m["amount"]) ||
|
|
190
|
+
typeof m["paymentNonce"] !== "string" ||
|
|
191
|
+
!POSITIVE_DECIMAL_INT_REGEX.test(m["paymentNonce"])) {
|
|
192
|
+
return null;
|
|
193
|
+
}
|
|
194
|
+
if (typeof p["signature"] !== "string" ||
|
|
195
|
+
!SIGNATURE_REGEX.test(p["signature"])) {
|
|
196
|
+
return null;
|
|
197
|
+
}
|
|
198
|
+
const accessRecordRaw = p["accessRecord"];
|
|
199
|
+
let accessRecord;
|
|
200
|
+
if (accessRecordRaw !== undefined) {
|
|
201
|
+
if (!accessRecordRaw || typeof accessRecordRaw !== "object")
|
|
202
|
+
return null;
|
|
203
|
+
const ar = accessRecordRaw;
|
|
204
|
+
if (typeof ar["dataPointId"] !== "string" ||
|
|
205
|
+
!BYTES32_REGEX.test(ar["dataPointId"]) ||
|
|
206
|
+
typeof ar["version"] !== "string" ||
|
|
207
|
+
!POSITIVE_DECIMAL_INT_REGEX.test(ar["version"]) ||
|
|
208
|
+
typeof ar["accessor"] !== "string" ||
|
|
209
|
+
!ADDRESS_REGEX.test(ar["accessor"]) ||
|
|
210
|
+
typeof ar["recordId"] !== "string" ||
|
|
211
|
+
!BYTES32_REGEX.test(ar["recordId"]) ||
|
|
212
|
+
typeof ar["signature"] !== "string" ||
|
|
213
|
+
!SIGNATURE_REGEX.test(ar["signature"])) {
|
|
214
|
+
return null;
|
|
215
|
+
}
|
|
216
|
+
accessRecord = {
|
|
217
|
+
dataPointId: ar["dataPointId"],
|
|
218
|
+
version: ar["version"],
|
|
219
|
+
accessor: ar["accessor"],
|
|
220
|
+
recordId: ar["recordId"],
|
|
221
|
+
signature: ar["signature"],
|
|
222
|
+
};
|
|
223
|
+
}
|
|
224
|
+
return {
|
|
225
|
+
x402Version: 1,
|
|
226
|
+
scheme: "vana-escrow-grant",
|
|
227
|
+
network: obj["network"],
|
|
228
|
+
payload: {
|
|
229
|
+
message: {
|
|
230
|
+
payerAddress: m["payerAddress"],
|
|
231
|
+
opType: m["opType"],
|
|
232
|
+
opId: m["opId"],
|
|
233
|
+
asset: m["asset"],
|
|
234
|
+
amount: m["amount"],
|
|
235
|
+
paymentNonce: m["paymentNonce"],
|
|
236
|
+
},
|
|
237
|
+
signature: p["signature"],
|
|
238
|
+
...(accessRecord ? { accessRecord } : {}),
|
|
239
|
+
},
|
|
240
|
+
};
|
|
241
|
+
}
|
|
242
|
+
/**
|
|
243
|
+
* Encode an X402Payment back to a base64 header value. Useful for client
|
|
244
|
+
* code (the personal server only decodes here; this is exported for tests
|
|
245
|
+
* and downstream builders that want a shared serializer).
|
|
246
|
+
*/
|
|
247
|
+
export function encodePaymentHeader(payment) {
|
|
248
|
+
return base64encode(JSON.stringify(payment));
|
|
249
|
+
}
|
|
250
|
+
/**
|
|
251
|
+
* Validate a parsed X-PAYMENT against the live grant + entry state. On
|
|
252
|
+
* success the caller forwards the payment verbatim to the gateway. Any
|
|
253
|
+
* failure should result in a fresh 402 challenge.
|
|
254
|
+
*
|
|
255
|
+
* Replay defense is layered: gateway enforces per-(payer, opType, nonce)
|
|
256
|
+
* uniqueness via DB constraint and per-recordId uniqueness via the on-chain
|
|
257
|
+
* `_usedRecordIds` set. Local checks here catch obvious malformed echoes
|
|
258
|
+
* before they reach the gateway.
|
|
259
|
+
*/
|
|
260
|
+
export async function verifyPayment(input) {
|
|
261
|
+
const { payment, grant, builder } = input;
|
|
262
|
+
const msg = payment.payload.message;
|
|
263
|
+
// Builder identity: the payment must claim the authenticated signer.
|
|
264
|
+
// Recovery below cryptographically pins this.
|
|
265
|
+
if (msg.payerAddress.toLowerCase() !== builder.toLowerCase()) {
|
|
266
|
+
return {
|
|
267
|
+
ok: false,
|
|
268
|
+
reason: "payerAddress does not match authenticated builder",
|
|
269
|
+
};
|
|
270
|
+
}
|
|
271
|
+
if (msg.opType !== "grant") {
|
|
272
|
+
return { ok: false, reason: `Unsupported opType: ${msg.opType}` };
|
|
273
|
+
}
|
|
274
|
+
if (msg.opId.toLowerCase() !== input.grantId.toLowerCase()) {
|
|
275
|
+
return { ok: false, reason: "opId does not match the request's grantId" };
|
|
276
|
+
}
|
|
277
|
+
// Amount + asset must match the gateway's canonical values. Re-fetched
|
|
278
|
+
// per request, so a builder echoing stale amounts gets rejected here
|
|
279
|
+
// before we hit the gateway.
|
|
280
|
+
if (msg.asset.toLowerCase() !== grant.fee.asset.toLowerCase()) {
|
|
281
|
+
return { ok: false, reason: "asset does not match grant fee asset" };
|
|
282
|
+
}
|
|
283
|
+
if (msg.amount !== grant.fee.totalDue) {
|
|
284
|
+
return {
|
|
285
|
+
ok: false,
|
|
286
|
+
reason: `amount ${msg.amount} != grant.fee.totalDue ${grant.fee.totalDue}`,
|
|
287
|
+
};
|
|
288
|
+
}
|
|
289
|
+
// Stateless freshness check: extract the issue-time from the high 32 bits
|
|
290
|
+
// of paymentNonce and require it within the last ~10 minutes. Cheap; no
|
|
291
|
+
// server state. Catches replays of captured X-PAYMENTs far in the past.
|
|
292
|
+
let nonceBig;
|
|
293
|
+
try {
|
|
294
|
+
nonceBig = BigInt(msg.paymentNonce);
|
|
295
|
+
}
|
|
296
|
+
catch {
|
|
297
|
+
return { ok: false, reason: "paymentNonce is not a valid uint256" };
|
|
298
|
+
}
|
|
299
|
+
const issueMs = paymentNonceIssueTimeMs(nonceBig);
|
|
300
|
+
const nowMs = BigInt(input.nowMs?.() ?? Date.now());
|
|
301
|
+
if (issueMs > nowMs + BigInt(NONCE_FUTURE_SKEW_MS)) {
|
|
302
|
+
return { ok: false, reason: "paymentNonce timestamp is in the future" };
|
|
303
|
+
}
|
|
304
|
+
if (nowMs - issueMs > BigInt(NONCE_FRESHNESS_MS)) {
|
|
305
|
+
return {
|
|
306
|
+
ok: false,
|
|
307
|
+
reason: "paymentNonce is older than the freshness window",
|
|
308
|
+
};
|
|
309
|
+
}
|
|
310
|
+
// GenericPayment signature recovery — must recover to the builder.
|
|
311
|
+
let recoveredPayer;
|
|
312
|
+
try {
|
|
313
|
+
recoveredPayer = await recoverTypedDataAddress({
|
|
314
|
+
domain: escrowPaymentDomain(input.gatewayConfig),
|
|
315
|
+
types: GENERIC_PAYMENT_TYPES,
|
|
316
|
+
primaryType: "GenericPayment",
|
|
317
|
+
message: {
|
|
318
|
+
payerAddress: msg.payerAddress,
|
|
319
|
+
opType: msg.opType,
|
|
320
|
+
opId: msg.opId,
|
|
321
|
+
asset: msg.asset,
|
|
322
|
+
amount: BigInt(msg.amount),
|
|
323
|
+
paymentNonce: nonceBig,
|
|
324
|
+
},
|
|
325
|
+
signature: payment.payload.signature,
|
|
326
|
+
});
|
|
327
|
+
}
|
|
328
|
+
catch {
|
|
329
|
+
return { ok: false, reason: "GenericPayment signature recovery failed" };
|
|
330
|
+
}
|
|
331
|
+
if (recoveredPayer.toLowerCase() !== builder.toLowerCase()) {
|
|
332
|
+
return {
|
|
333
|
+
ok: false,
|
|
334
|
+
reason: "GenericPayment signer does not match authenticated builder",
|
|
335
|
+
};
|
|
336
|
+
}
|
|
337
|
+
// AccessRecord echo (when present) — verify the server actually signed it
|
|
338
|
+
// and the binding fields match the entry being served.
|
|
339
|
+
if (payment.payload.accessRecord) {
|
|
340
|
+
const ar = payment.payload.accessRecord;
|
|
341
|
+
if (!input.entry) {
|
|
342
|
+
return {
|
|
343
|
+
ok: false,
|
|
344
|
+
reason: "accessRecord supplied but no entry to bind it to",
|
|
345
|
+
};
|
|
346
|
+
}
|
|
347
|
+
if (input.entry.dataPointId === null) {
|
|
348
|
+
return {
|
|
349
|
+
ok: false,
|
|
350
|
+
reason: "accessRecord supplied but entry has no dataPointId yet",
|
|
351
|
+
};
|
|
352
|
+
}
|
|
353
|
+
if (ar.dataPointId.toLowerCase() !== input.entry.dataPointId.toLowerCase()) {
|
|
354
|
+
return {
|
|
355
|
+
ok: false,
|
|
356
|
+
reason: "accessRecord.dataPointId does not match entry",
|
|
357
|
+
};
|
|
358
|
+
}
|
|
359
|
+
if (ar.version !== String(input.entry.version)) {
|
|
360
|
+
return { ok: false, reason: "accessRecord.version does not match entry" };
|
|
361
|
+
}
|
|
362
|
+
if (ar.accessor.toLowerCase() !== builder.toLowerCase()) {
|
|
363
|
+
return {
|
|
364
|
+
ok: false,
|
|
365
|
+
reason: "accessRecord.accessor does not match authenticated builder",
|
|
366
|
+
};
|
|
367
|
+
}
|
|
368
|
+
if (!input.serverOwner) {
|
|
369
|
+
return {
|
|
370
|
+
ok: false,
|
|
371
|
+
reason: "serverOwner required to verify accessRecord signature",
|
|
372
|
+
};
|
|
373
|
+
}
|
|
374
|
+
let recoveredServer;
|
|
375
|
+
try {
|
|
376
|
+
recoveredServer = await recoverTypedDataAddress({
|
|
377
|
+
domain: dataRegistryDomain(input.gatewayConfig),
|
|
378
|
+
types: RECORD_DATA_ACCESS_TYPES,
|
|
379
|
+
primaryType: "RecordDataAccess",
|
|
380
|
+
message: {
|
|
381
|
+
ownerAddress: input.serverOwner,
|
|
382
|
+
scope: input.entry.scope,
|
|
383
|
+
version: BigInt(ar.version),
|
|
384
|
+
accessor: ar.accessor,
|
|
385
|
+
recordId: ar.recordId,
|
|
386
|
+
},
|
|
387
|
+
signature: ar.signature,
|
|
388
|
+
});
|
|
389
|
+
}
|
|
390
|
+
catch {
|
|
391
|
+
return { ok: false, reason: "accessRecord signature recovery failed" };
|
|
392
|
+
}
|
|
393
|
+
if (recoveredServer.toLowerCase() !== input.serverAddress.toLowerCase()) {
|
|
394
|
+
return {
|
|
395
|
+
ok: false,
|
|
396
|
+
reason: "accessRecord signer is not this personal server",
|
|
397
|
+
};
|
|
398
|
+
}
|
|
399
|
+
}
|
|
400
|
+
return { ok: true, payment };
|
|
401
|
+
}
|
|
402
|
+
//# sourceMappingURL=x402.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"x402.js","sourceRoot":"","sources":["../../src/payment/x402.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,182 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Authorization sessions and authenticated owner approval.
|
|
3
|
+
*
|
|
4
|
+
* This is the module that decides whether a consent decision is real. The
|
|
5
|
+
* threat it exists to stop is an approval that looks right — correct session,
|
|
6
|
+
* correct review digest, arriving from the first-party consent UI — but that
|
|
7
|
+
* no authenticated owner actually made.
|
|
8
|
+
*
|
|
9
|
+
* The rule: **affiliation is not authentication.** The AS does not accept an
|
|
10
|
+
* approval because it came from an allowlisted origin, a first-party console,
|
|
11
|
+
* a shared UI/server secret, or a signed assertion from the consent broker
|
|
12
|
+
* saying "the owner agreed". Each of those authenticates a *channel* or
|
|
13
|
+
* delegates the decision to a browser-reachable component; compromise it and
|
|
14
|
+
* it mints approvals for any subject. Instead, the owner authenticates to the
|
|
15
|
+
* PS itself, and the resulting owner token — resolved through the same token
|
|
16
|
+
* service the RS uses — is what authorizes the decision. The consent UI
|
|
17
|
+
* forwards that token; it can never substitute for it.
|
|
18
|
+
*
|
|
19
|
+
* Two independent checks must both pass, and neither implies the other:
|
|
20
|
+
*
|
|
21
|
+
* 1. The caller presents an active token with `pdpp_token_kind: "owner"`
|
|
22
|
+
* whose `subject_id` equals the session's subject. Possession of the
|
|
23
|
+
* session id is not authority over it.
|
|
24
|
+
* 2. The presented `review_digest` matches a re-derivation over what is
|
|
25
|
+
* about to be issued (§7 staleness). Authenticating the owner does not
|
|
26
|
+
* excuse approving something other than what they reviewed.
|
|
27
|
+
*/
|
|
28
|
+
import { type ConsentReviewModel, type RequesterIdentity } from "./review.js";
|
|
29
|
+
import { type ConsentEvidence } from "./issuance.js";
|
|
30
|
+
import { type InstanceInventory } from "./resolve.js";
|
|
31
|
+
import type { PdppTokenService } from "./tokens.js";
|
|
32
|
+
import type { DeclarationSnapshot, Grant, SelectionRequest } from "./types.js";
|
|
33
|
+
/** How long an owner has to act on a consent screen before it goes stale. */
|
|
34
|
+
export declare const REVIEW_SESSION_TTL_SECONDS: number;
|
|
35
|
+
export type SessionState = "pending" | "approved" | "denied";
|
|
36
|
+
export interface AuthorizationSession {
|
|
37
|
+
session_id: string;
|
|
38
|
+
/** The subject this session belongs to. An approval must authenticate as this. */
|
|
39
|
+
subject_id: string;
|
|
40
|
+
request: SelectionRequest;
|
|
41
|
+
snapshot: DeclarationSnapshot;
|
|
42
|
+
requester: RequesterIdentity;
|
|
43
|
+
redirect_uri: string;
|
|
44
|
+
state_param?: string;
|
|
45
|
+
/** RFC 7636 challenge, carried to the authorization code minted on approval. */
|
|
46
|
+
code_challenge?: string;
|
|
47
|
+
code_challenge_method?: string;
|
|
48
|
+
expires_at: string;
|
|
49
|
+
status: SessionState;
|
|
50
|
+
/** AS-policy grant expiry carried into issuance. */
|
|
51
|
+
grant_expires_at?: string;
|
|
52
|
+
stream_descriptions?: Record<string, string>;
|
|
53
|
+
}
|
|
54
|
+
export type ApprovalFailureCode =
|
|
55
|
+
/** No owner token, an inactive one, a client token, or the wrong subject. */
|
|
56
|
+
"unauthorized" | "session_not_found" | "stale_review" | "ai_training_consent_required" | "access_denied" | "invalid_request";
|
|
57
|
+
export interface ApprovalFailure {
|
|
58
|
+
code: ApprovalFailureCode;
|
|
59
|
+
message: string;
|
|
60
|
+
}
|
|
61
|
+
export type ApprovalResult = {
|
|
62
|
+
ok: true;
|
|
63
|
+
grant: Grant;
|
|
64
|
+
consentEvidence: ConsentEvidence;
|
|
65
|
+
} | {
|
|
66
|
+
ok: false;
|
|
67
|
+
failure: ApprovalFailure;
|
|
68
|
+
};
|
|
69
|
+
/**
|
|
70
|
+
* In-memory pending-session store. Sessions are short-lived and pre-decision,
|
|
71
|
+
* so they hold no issued authority — losing them on restart costs an owner a
|
|
72
|
+
* re-click, not a grant. Issued grants and tokens go to SQLite, where
|
|
73
|
+
* durability actually matters.
|
|
74
|
+
*/
|
|
75
|
+
export declare class AuthorizationSessionStore {
|
|
76
|
+
private readonly sessions;
|
|
77
|
+
create(input: {
|
|
78
|
+
subjectId: string;
|
|
79
|
+
request: SelectionRequest;
|
|
80
|
+
snapshot: DeclarationSnapshot;
|
|
81
|
+
requester: RequesterIdentity;
|
|
82
|
+
redirectUri: string;
|
|
83
|
+
stateParam?: string;
|
|
84
|
+
codeChallenge?: string;
|
|
85
|
+
codeChallengeMethod?: string;
|
|
86
|
+
grantExpiresAt?: string;
|
|
87
|
+
streamDescriptions?: Record<string, string>;
|
|
88
|
+
now?: Date;
|
|
89
|
+
}): AuthorizationSession;
|
|
90
|
+
get(sessionId: string): AuthorizationSession | null;
|
|
91
|
+
setStatus(sessionId: string, status: SessionState): void;
|
|
92
|
+
}
|
|
93
|
+
/**
|
|
94
|
+
* A stream the owner must pick an instance for before the review can resolve.
|
|
95
|
+
*
|
|
96
|
+
* §6 is strict that omitting `instance_ids` never means fan-in, so a stream
|
|
97
|
+
* with several eligible handles and none named is a decision only the owner
|
|
98
|
+
* can make. Surfacing the candidates as first-class review data is what turns
|
|
99
|
+
* that from a dead-end resolution failure into a consent step: the UI renders
|
|
100
|
+
* the choice, the owner picks, and the pick flows back through
|
|
101
|
+
* `instanceChoices` on the next review fetch and on approval.
|
|
102
|
+
*/
|
|
103
|
+
export interface InstanceChoice {
|
|
104
|
+
stream: string;
|
|
105
|
+
candidates: string[];
|
|
106
|
+
}
|
|
107
|
+
export interface ReviewFetchResult {
|
|
108
|
+
session_id: string;
|
|
109
|
+
/** Present only once every stream resolves. Absent while a choice is pending. */
|
|
110
|
+
review?: ConsentReviewModel;
|
|
111
|
+
/**
|
|
112
|
+
* Non-empty when the owner must choose instance handles before there is a
|
|
113
|
+
* decision to review. The UI collects these and re-fetches with the picks.
|
|
114
|
+
*/
|
|
115
|
+
instance_choice_required?: InstanceChoice[];
|
|
116
|
+
expires_at: string;
|
|
117
|
+
}
|
|
118
|
+
/**
|
|
119
|
+
* Build the review an authenticated owner sees.
|
|
120
|
+
*
|
|
121
|
+
* Resolution runs here against current inventory, so the digest the owner is
|
|
122
|
+
* handed reflects the world as it is right now. If it changes before they
|
|
123
|
+
* approve, `approveAuthorization` will re-derive a different digest and reject.
|
|
124
|
+
*/
|
|
125
|
+
export declare function fetchReview(input: {
|
|
126
|
+
sessions: AuthorizationSessionStore;
|
|
127
|
+
tokens: PdppTokenService;
|
|
128
|
+
sessionId: string;
|
|
129
|
+
ownerToken: string | undefined;
|
|
130
|
+
inventory: InstanceInventory;
|
|
131
|
+
/** The owner's instance picks, keyed by stream, from a prior choice step. */
|
|
132
|
+
instanceChoices?: Record<string, string[]>;
|
|
133
|
+
now?: Date;
|
|
134
|
+
}): {
|
|
135
|
+
ok: true;
|
|
136
|
+
result: ReviewFetchResult;
|
|
137
|
+
} | {
|
|
138
|
+
ok: false;
|
|
139
|
+
failure: ApprovalFailure;
|
|
140
|
+
};
|
|
141
|
+
/**
|
|
142
|
+
* Approve an authorization: authenticate the owner, then issue.
|
|
143
|
+
*
|
|
144
|
+
* Order is deliberate. Authentication runs before anything else, so an
|
|
145
|
+
* unauthenticated caller cannot learn from the error whether their digest was
|
|
146
|
+
* fresh — a spoofed approval with a perfectly valid digest gets the same
|
|
147
|
+
* `unauthorized` as one with a garbage digest.
|
|
148
|
+
*/
|
|
149
|
+
export declare function approveAuthorization(input: {
|
|
150
|
+
sessions: AuthorizationSessionStore;
|
|
151
|
+
tokens: PdppTokenService;
|
|
152
|
+
sessionId: string;
|
|
153
|
+
ownerToken: string | undefined;
|
|
154
|
+
reviewDigest: string;
|
|
155
|
+
inventory: InstanceInventory;
|
|
156
|
+
/**
|
|
157
|
+
* The owner's instance picks, which must match the ones the review was
|
|
158
|
+
* rendered with. They feed resolution, so they land inside the recomputed
|
|
159
|
+
* digest — a different pick than the owner reviewed fails as stale rather
|
|
160
|
+
* than silently issuing a grant over another instance.
|
|
161
|
+
*/
|
|
162
|
+
instanceChoices?: Record<string, string[]>;
|
|
163
|
+
explicitAiTrainingConsent?: boolean;
|
|
164
|
+
now?: Date;
|
|
165
|
+
}): ApprovalResult;
|
|
166
|
+
/**
|
|
167
|
+
* Deny an authorization. Terminal, and retains no consent evidence — there is
|
|
168
|
+
* nothing the owner consented to, so there is nothing to hold evidence of.
|
|
169
|
+
*/
|
|
170
|
+
export declare function denyAuthorization(input: {
|
|
171
|
+
sessions: AuthorizationSessionStore;
|
|
172
|
+
tokens: PdppTokenService;
|
|
173
|
+
sessionId: string;
|
|
174
|
+
ownerToken: string | undefined;
|
|
175
|
+
now?: Date;
|
|
176
|
+
}): {
|
|
177
|
+
ok: true;
|
|
178
|
+
} | {
|
|
179
|
+
ok: false;
|
|
180
|
+
failure: ApprovalFailure;
|
|
181
|
+
};
|
|
182
|
+
//# sourceMappingURL=approval.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"approval.d.ts","sourceRoot":"","sources":["../../src/pdpp/approval.ts"],"names":[],"mappings":"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"}
|