@opendatalabs/vana-sdk 2.3.0 → 3.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +76 -92
- package/dist/auth/errors.cjs +54 -0
- package/dist/auth/errors.cjs.map +1 -0
- package/dist/auth/errors.d.ts +26 -0
- package/dist/auth/errors.js +28 -0
- package/dist/auth/errors.js.map +1 -0
- package/dist/auth/pkce.cjs +100 -0
- package/dist/auth/pkce.cjs.map +1 -0
- package/dist/auth/pkce.d.ts +55 -0
- package/dist/auth/pkce.js +71 -0
- package/dist/auth/pkce.js.map +1 -0
- package/dist/auth/token-store.cjs +59 -0
- package/dist/auth/token-store.cjs.map +1 -0
- package/dist/auth/token-store.d.ts +61 -0
- package/dist/auth/token-store.js +35 -0
- package/dist/auth/token-store.js.map +1 -0
- package/dist/auth/web3-signed-builder.cjs +70 -0
- package/dist/auth/web3-signed-builder.cjs.map +1 -0
- package/dist/auth/web3-signed-builder.d.ts +47 -0
- package/dist/auth/web3-signed-builder.js +45 -0
- package/dist/auth/web3-signed-builder.js.map +1 -0
- package/dist/auth/web3-signed.cjs +150 -0
- package/dist/auth/web3-signed.cjs.map +1 -0
- package/dist/auth/web3-signed.d.ts +59 -0
- package/dist/auth/web3-signed.js +129 -0
- package/dist/auth/web3-signed.js.map +1 -0
- package/dist/chains/definitions.cjs +2 -6
- package/dist/chains/definitions.cjs.map +1 -1
- package/dist/chains/definitions.d.ts +1 -7
- package/dist/chains/definitions.js +2 -6
- package/dist/chains/definitions.js.map +1 -1
- package/dist/config/chains.d.ts +18 -0
- package/dist/config/contracts.config.cjs +7 -95
- package/dist/config/contracts.config.cjs.map +1 -1
- package/dist/config/contracts.config.d.ts +0 -54
- package/dist/config/contracts.config.js +6 -93
- package/dist/config/contracts.config.js.map +1 -1
- package/dist/config/default-services.cjs +0 -10
- package/dist/config/default-services.cjs.map +1 -1
- package/dist/config/default-services.d.ts +1 -20
- package/dist/config/default-services.js +0 -9
- package/dist/config/default-services.js.map +1 -1
- package/dist/crypto/ecies/interface.cjs +2 -0
- package/dist/crypto/ecies/interface.cjs.map +1 -1
- package/dist/crypto/ecies/interface.js +2 -0
- package/dist/crypto/ecies/interface.js.map +1 -1
- package/dist/crypto/envelope/openpgp.cjs +59 -0
- package/dist/crypto/envelope/openpgp.cjs.map +1 -0
- package/dist/crypto/envelope/openpgp.d.ts +28 -0
- package/dist/crypto/envelope/openpgp.js +24 -0
- package/dist/crypto/envelope/openpgp.js.map +1 -0
- package/dist/crypto/keys/derive.cjs +65 -0
- package/dist/crypto/keys/derive.cjs.map +1 -0
- package/dist/crypto/keys/derive.d.ts +45 -0
- package/dist/crypto/keys/derive.js +38 -0
- package/dist/crypto/keys/derive.js.map +1 -0
- package/dist/errors.cjs +10 -0
- package/dist/errors.cjs.map +1 -1
- package/dist/errors.js +10 -0
- package/dist/errors.js.map +1 -1
- package/dist/generated/abi/index.cjs +2 -37
- package/dist/generated/abi/index.cjs.map +1 -1
- package/dist/generated/abi/index.d.ts +2683 -9296
- package/dist/generated/abi/index.js +2 -29
- package/dist/generated/abi/index.js.map +1 -1
- package/dist/generated/addresses.cjs +5 -107
- package/dist/generated/addresses.cjs.map +1 -1
- package/dist/generated/addresses.d.ts +5 -99
- package/dist/generated/addresses.js +5 -105
- package/dist/generated/addresses.js.map +1 -1
- package/dist/index.browser.d.ts +24 -140
- package/dist/index.browser.js +32258 -114
- package/dist/index.browser.js.map +7 -1
- package/dist/index.node.cjs +32980 -160
- package/dist/index.node.cjs.map +7 -1
- package/dist/index.node.d.ts +23 -210
- package/dist/index.node.js +32884 -133
- package/dist/index.node.js.map +7 -1
- package/dist/protocol/data-file.cjs +56 -0
- package/dist/protocol/data-file.cjs.map +1 -0
- package/dist/protocol/data-file.d.ts +20 -0
- package/dist/protocol/data-file.js +30 -0
- package/dist/protocol/data-file.js.map +1 -0
- package/dist/protocol/eip712.cjs +123 -0
- package/dist/protocol/eip712.cjs.map +1 -0
- package/dist/protocol/eip712.d.ts +117 -0
- package/dist/protocol/eip712.js +90 -0
- package/dist/protocol/eip712.js.map +1 -0
- package/dist/protocol/gateway.cjs +226 -0
- package/dist/protocol/gateway.cjs.map +1 -0
- package/dist/protocol/gateway.d.ts +120 -0
- package/dist/protocol/gateway.js +202 -0
- package/dist/protocol/gateway.js.map +1 -0
- package/dist/protocol/grants.cjs +146 -0
- package/dist/protocol/grants.cjs.map +1 -0
- package/dist/protocol/grants.d.ts +31 -0
- package/dist/protocol/grants.js +123 -0
- package/dist/protocol/grants.js.map +1 -0
- package/dist/protocol/scopes.cjs +78 -0
- package/dist/protocol/scopes.cjs.map +1 -0
- package/dist/protocol/scopes.d.ts +13 -0
- package/dist/protocol/scopes.js +50 -0
- package/dist/protocol/scopes.js.map +1 -0
- package/dist/{types/atomicStore.cjs → storage/default.cjs} +9 -8
- package/dist/storage/default.cjs.map +1 -0
- package/dist/storage/default.d.ts +4 -0
- package/dist/storage/default.js +8 -0
- package/dist/storage/default.js.map +1 -0
- package/dist/storage/index.cjs +11 -2
- package/dist/storage/index.cjs.map +1 -1
- package/dist/storage/index.d.ts +9 -0
- package/dist/storage/index.js +7 -1
- package/dist/storage/index.js.map +1 -1
- package/dist/storage/providers/callback-storage.cjs +1 -0
- package/dist/storage/providers/callback-storage.cjs.map +1 -1
- package/dist/storage/providers/callback-storage.js +1 -0
- package/dist/storage/providers/callback-storage.js.map +1 -1
- package/dist/storage/providers/dropbox.cjs +1 -0
- package/dist/storage/providers/dropbox.cjs.map +1 -1
- package/dist/storage/providers/dropbox.js +1 -0
- package/dist/storage/providers/dropbox.js.map +1 -1
- package/dist/storage/providers/google-drive.cjs +1 -0
- package/dist/storage/providers/google-drive.cjs.map +1 -1
- package/dist/storage/providers/google-drive.js +1 -0
- package/dist/storage/providers/google-drive.js.map +1 -1
- package/dist/storage/providers/ipfs.cjs +1 -0
- package/dist/storage/providers/ipfs.cjs.map +1 -1
- package/dist/storage/providers/ipfs.js +1 -0
- package/dist/storage/providers/ipfs.js.map +1 -1
- package/dist/storage/providers/pinata.cjs +1 -0
- package/dist/storage/providers/pinata.cjs.map +1 -1
- package/dist/storage/providers/pinata.js +1 -0
- package/dist/storage/providers/pinata.js.map +1 -1
- package/dist/storage/providers/r2.cjs +376 -0
- package/dist/storage/providers/r2.cjs.map +1 -0
- package/dist/storage/providers/r2.d.ts +91 -0
- package/dist/storage/providers/r2.js +354 -0
- package/dist/storage/providers/r2.js.map +1 -0
- package/dist/storage/providers/vana-storage.cjs +251 -0
- package/dist/storage/providers/vana-storage.cjs.map +1 -0
- package/dist/storage/providers/vana-storage.d.ts +100 -0
- package/dist/storage/providers/vana-storage.js +231 -0
- package/dist/storage/providers/vana-storage.js.map +1 -0
- package/dist/types/config.cjs +0 -34
- package/dist/types/config.cjs.map +1 -1
- package/dist/types/config.d.ts +1 -607
- package/dist/types/config.js +0 -22
- package/dist/types/config.js.map +1 -1
- package/dist/types/contracts.cjs.map +1 -1
- package/dist/types/contracts.d.ts +1 -1
- package/dist/types/index.cjs +2 -33
- package/dist/types/index.cjs.map +1 -1
- package/dist/types/index.d.ts +2 -33
- package/dist/types/index.js +1 -35
- package/dist/types/index.js.map +1 -1
- package/dist/types/ps-errors.cjs +91 -0
- package/dist/types/ps-errors.cjs.map +1 -0
- package/dist/types/ps-errors.d.ts +26 -0
- package/dist/types/ps-errors.js +66 -0
- package/dist/types/ps-errors.js.map +1 -0
- package/dist/types.cjs.map +1 -1
- package/dist/types.d.ts +0 -29
- package/dist/types.js.map +1 -1
- package/package.json +7 -25
- package/dist/client/enhancedResponse.cjs +0 -164
- package/dist/client/enhancedResponse.cjs.map +0 -1
- package/dist/client/enhancedResponse.d.ts +0 -120
- package/dist/client/enhancedResponse.js +0 -138
- package/dist/client/enhancedResponse.js.map +0 -1
- package/dist/controllers/__tests__/data-consistency-integration.test.d.ts +0 -7
- package/dist/controllers/base.cjs +0 -116
- package/dist/controllers/base.cjs.map +0 -1
- package/dist/controllers/base.d.ts +0 -94
- package/dist/controllers/base.js +0 -92
- package/dist/controllers/base.js.map +0 -1
- package/dist/controllers/data.cjs +0 -2633
- package/dist/controllers/data.cjs.map +0 -1
- package/dist/controllers/data.d.ts +0 -1067
- package/dist/controllers/data.js +0 -2626
- package/dist/controllers/data.js.map +0 -1
- package/dist/controllers/operations.cjs +0 -430
- package/dist/controllers/operations.cjs.map +0 -1
- package/dist/controllers/operations.d.ts +0 -229
- package/dist/controllers/operations.js +0 -406
- package/dist/controllers/operations.js.map +0 -1
- package/dist/controllers/permissions.cjs +0 -4368
- package/dist/controllers/permissions.cjs.map +0 -1
- package/dist/controllers/permissions.d.ts +0 -1411
- package/dist/controllers/permissions.js +0 -4344
- package/dist/controllers/permissions.js.map +0 -1
- package/dist/controllers/protocol.cjs +0 -183
- package/dist/controllers/protocol.cjs.map +0 -1
- package/dist/controllers/protocol.d.ts +0 -138
- package/dist/controllers/protocol.js +0 -163
- package/dist/controllers/protocol.js.map +0 -1
- package/dist/controllers/schemas.cjs +0 -678
- package/dist/controllers/schemas.cjs.map +0 -1
- package/dist/controllers/schemas.d.ts +0 -293
- package/dist/controllers/schemas.js +0 -654
- package/dist/controllers/schemas.js.map +0 -1
- package/dist/controllers/server.cjs +0 -643
- package/dist/controllers/server.cjs.map +0 -1
- package/dist/controllers/server.d.ts +0 -322
- package/dist/controllers/server.js +0 -624
- package/dist/controllers/server.js.map +0 -1
- package/dist/controllers/staking.cjs +0 -626
- package/dist/controllers/staking.cjs.map +0 -1
- package/dist/controllers/staking.d.ts +0 -457
- package/dist/controllers/staking.js +0 -602
- package/dist/controllers/staking.js.map +0 -1
- package/dist/core/__tests__/pollingManager.test.d.ts +0 -4
- package/dist/core/apiClient.cjs +0 -378
- package/dist/core/apiClient.cjs.map +0 -1
- package/dist/core/apiClient.d.ts +0 -286
- package/dist/core/apiClient.js +0 -359
- package/dist/core/apiClient.js.map +0 -1
- package/dist/core/generics.cjs +0 -417
- package/dist/core/generics.cjs.map +0 -1
- package/dist/core/generics.d.ts +0 -205
- package/dist/core/generics.js +0 -386
- package/dist/core/generics.js.map +0 -1
- package/dist/core/health.cjs +0 -289
- package/dist/core/health.cjs.map +0 -1
- package/dist/core/health.d.ts +0 -143
- package/dist/core/health.js +0 -265
- package/dist/core/health.js.map +0 -1
- package/dist/core/inMemoryNonceManager.cjs +0 -138
- package/dist/core/inMemoryNonceManager.cjs.map +0 -1
- package/dist/core/inMemoryNonceManager.d.ts +0 -69
- package/dist/core/inMemoryNonceManager.js +0 -114
- package/dist/core/inMemoryNonceManager.js.map +0 -1
- package/dist/core/nonceManager.cjs +0 -304
- package/dist/core/nonceManager.cjs.map +0 -1
- package/dist/core/nonceManager.d.ts +0 -116
- package/dist/core/nonceManager.js +0 -280
- package/dist/core/nonceManager.js.map +0 -1
- package/dist/core/pollingManager.cjs +0 -292
- package/dist/core/pollingManager.cjs.map +0 -1
- package/dist/core/pollingManager.d.ts +0 -120
- package/dist/core/pollingManager.js +0 -268
- package/dist/core/pollingManager.js.map +0 -1
- package/dist/core.cjs +0 -781
- package/dist/core.cjs.map +0 -1
- package/dist/core.d.ts +0 -496
- package/dist/core.js +0 -756
- package/dist/core.js.map +0 -1
- package/dist/diagnostics.cjs +0 -37
- package/dist/diagnostics.cjs.map +0 -1
- package/dist/diagnostics.d.ts +0 -24
- package/dist/diagnostics.js +0 -13
- package/dist/diagnostics.js.map +0 -1
- package/dist/generated/abi/DLPPerformanceImplementation.cjs +0 -1202
- package/dist/generated/abi/DLPPerformanceImplementation.cjs.map +0 -1
- package/dist/generated/abi/DLPPerformanceImplementation.d.ts +0 -914
- package/dist/generated/abi/DLPPerformanceImplementation.js +0 -1178
- package/dist/generated/abi/DLPPerformanceImplementation.js.map +0 -1
- package/dist/generated/abi/DLPRewardDeployerImplementation.cjs +0 -1112
- package/dist/generated/abi/DLPRewardDeployerImplementation.cjs.map +0 -1
- package/dist/generated/abi/DLPRewardDeployerImplementation.d.ts +0 -840
- package/dist/generated/abi/DLPRewardDeployerImplementation.js +0 -1088
- package/dist/generated/abi/DLPRewardDeployerImplementation.js.map +0 -1
- package/dist/generated/abi/DLPRewardDeployerTreasuryImplementation.cjs +0 -612
- package/dist/generated/abi/DLPRewardDeployerTreasuryImplementation.cjs.map +0 -1
- package/dist/generated/abi/DLPRewardDeployerTreasuryImplementation.d.ts +0 -451
- package/dist/generated/abi/DLPRewardDeployerTreasuryImplementation.js +0 -588
- package/dist/generated/abi/DLPRewardDeployerTreasuryImplementation.js.map +0 -1
- package/dist/generated/abi/DLPRewardSwapImplementation.cjs +0 -939
- package/dist/generated/abi/DLPRewardSwapImplementation.cjs.map +0 -1
- package/dist/generated/abi/DLPRewardSwapImplementation.d.ts +0 -705
- package/dist/generated/abi/DLPRewardSwapImplementation.js +0 -915
- package/dist/generated/abi/DLPRewardSwapImplementation.js.map +0 -1
- package/dist/generated/abi/DLPRootImplementation.cjs +0 -1644
- package/dist/generated/abi/DLPRootImplementation.cjs.map +0 -1
- package/dist/generated/abi/DLPRootImplementation.d.ts +0 -1246
- package/dist/generated/abi/DLPRootImplementation.js +0 -1620
- package/dist/generated/abi/DLPRootImplementation.js.map +0 -1
- package/dist/generated/abi/DataLiquidityPoolImplementation.cjs +0 -985
- package/dist/generated/abi/DataLiquidityPoolImplementation.cjs.map +0 -1
- package/dist/generated/abi/DataLiquidityPoolImplementation.d.ts +0 -735
- package/dist/generated/abi/DataLiquidityPoolImplementation.js +0 -961
- package/dist/generated/abi/DataLiquidityPoolImplementation.js.map +0 -1
- package/dist/generated/abi/SwapHelperImplementation.cjs +0 -976
- package/dist/generated/abi/SwapHelperImplementation.cjs.map +0 -1
- package/dist/generated/abi/SwapHelperImplementation.d.ts +0 -728
- package/dist/generated/abi/SwapHelperImplementation.js +0 -952
- package/dist/generated/abi/SwapHelperImplementation.js.map +0 -1
- package/dist/generated/abi/TeePoolImplementation.cjs +0 -1313
- package/dist/generated/abi/TeePoolImplementation.cjs.map +0 -1
- package/dist/generated/abi/TeePoolImplementation.d.ts +0 -992
- package/dist/generated/abi/TeePoolImplementation.js +0 -1289
- package/dist/generated/abi/TeePoolImplementation.js.map +0 -1
- package/dist/generated/event-types.cjs +0 -17
- package/dist/generated/event-types.cjs.map +0 -1
- package/dist/generated/event-types.d.ts +0 -816
- package/dist/generated/event-types.js +0 -1
- package/dist/generated/event-types.js.map +0 -1
- package/dist/generated/eventRegistry.cjs +0 -4512
- package/dist/generated/eventRegistry.cjs.map +0 -1
- package/dist/generated/eventRegistry.d.ts +0 -14
- package/dist/generated/eventRegistry.js +0 -4487
- package/dist/generated/eventRegistry.js.map +0 -1
- package/dist/generated/server/server-exports.cjs +0 -45
- package/dist/generated/server/server-exports.cjs.map +0 -1
- package/dist/generated/server/server-exports.d.ts +0 -36
- package/dist/generated/server/server-exports.js +0 -19
- package/dist/generated/server/server-exports.js.map +0 -1
- package/dist/generated/server/server.cjs +0 -17
- package/dist/generated/server/server.cjs.map +0 -1
- package/dist/generated/server/server.d.ts +0 -907
- package/dist/generated/server/server.js +0 -1
- package/dist/generated/server/server.js.map +0 -1
- package/dist/generated/subgraph.cjs +0 -1440
- package/dist/generated/subgraph.cjs.map +0 -1
- package/dist/generated/subgraph.d.ts +0 -6113
- package/dist/generated/subgraph.js +0 -1404
- package/dist/generated/subgraph.js.map +0 -1
- package/dist/lib/__tests__/redisAtomicStore.test.d.ts +0 -1
- package/dist/lib/redisAtomicStore.cjs +0 -201
- package/dist/lib/redisAtomicStore.cjs.map +0 -1
- package/dist/lib/redisAtomicStore.d.ts +0 -120
- package/dist/lib/redisAtomicStore.js +0 -177
- package/dist/lib/redisAtomicStore.js.map +0 -1
- package/dist/server/relayerHandler.cjs +0 -452
- package/dist/server/relayerHandler.cjs.map +0 -1
- package/dist/server/relayerHandler.d.ts +0 -69
- package/dist/server/relayerHandler.js +0 -428
- package/dist/server/relayerHandler.js.map +0 -1
- package/dist/tests/abi.test.d.ts +0 -1
- package/dist/tests/chains-definitions.test.d.ts +0 -1
- package/dist/tests/core-encryption.test.d.ts +0 -1
- package/dist/tests/core-extended.test.d.ts +0 -1
- package/dist/tests/core-generics-coverage.test.d.ts +0 -1
- package/dist/tests/coverage-boost.test.d.ts +0 -1
- package/dist/tests/crypto-cross-platform-compatibility.test.d.ts +0 -1
- package/dist/tests/data-addfile-permissions-schema.test.d.ts +0 -1
- package/dist/tests/data-additional-methods.test.d.ts +0 -1
- package/dist/tests/data-controller-edge-cases.test.d.ts +0 -1
- package/dist/tests/data-ipfs-gateways.test.d.ts +0 -1
- package/dist/tests/data-relayer.test.d.ts +0 -1
- package/dist/tests/data-schema-validation.test.d.ts +0 -1
- package/dist/tests/data-simple-methods.test.d.ts +0 -1
- package/dist/tests/data-upload-owner-validation.test.d.ts +0 -1
- package/dist/tests/data.test.d.ts +0 -1
- package/dist/tests/demo-integration.test.d.ts +0 -1
- package/dist/tests/demo-trusted-server-integration.test.d.ts +0 -1
- package/dist/tests/download-relayer.test.d.ts +0 -1
- package/dist/tests/dual-mode-permissions.test.d.ts +0 -1
- package/dist/tests/dual-mode-trusted-servers.test.d.ts +0 -1
- package/dist/tests/encryption-correct-implementation.test.d.ts +0 -1
- package/dist/tests/encryption-coverage.test.d.ts +0 -1
- package/dist/tests/encryption-edge-cases.test.d.ts +0 -1
- package/dist/tests/encryption-utils-updated.test.d.ts +0 -1
- package/dist/tests/errors-coverage.test.d.ts +0 -1
- package/dist/tests/factories/mockFactory.d.ts +0 -316
- package/dist/tests/fakes/FakeStorageManager.d.ts +0 -200
- package/dist/tests/fakes/FakeStorageManager.test.d.ts +0 -1
- package/dist/tests/fakes/FakeWaitForTransactionEvents.d.ts +0 -170
- package/dist/tests/fakes/FakeWaitForTransactionEvents.test.d.ts +0 -1
- package/dist/tests/fakes/fake-pgp-port.d.ts +0 -13
- package/dist/tests/grantValidation-edge-cases.test.d.ts +0 -1
- package/dist/tests/grantValidation-unreachable-branch.test.d.ts +0 -1
- package/dist/tests/helper-methods.test.d.ts +0 -1
- package/dist/tests/helpers/typedMocks.d.ts +0 -64
- package/dist/tests/index-browser.test.d.ts +0 -1
- package/dist/tests/index-node.test.d.ts +0 -1
- package/dist/tests/index.test.d.ts +0 -1
- package/dist/tests/mocks/platformAdapter.d.ts +0 -12
- package/dist/tests/new-permissions-methods.test.d.ts +0 -1
- package/dist/tests/no-buffer-browser.test.d.ts +0 -1
- package/dist/tests/permissions-grantee.test.d.ts +0 -1
- package/dist/tests/permissions-revoke-relayer.test.d.ts +0 -1
- package/dist/tests/permissions-schema-validation.test.d.ts +0 -1
- package/dist/tests/permissions-server-files.test.d.ts +0 -1
- package/dist/tests/permissions-transaction-options.test.d.ts +0 -1
- package/dist/tests/permissions-trust-servers.test.d.ts +0 -1
- package/dist/tests/permissions.test.d.ts +0 -1
- package/dist/tests/personal.test.d.ts +0 -1
- package/dist/tests/platform-browser.test.d.ts +0 -1
- package/dist/tests/platform-crypto-expanded.test.d.ts +0 -1
- package/dist/tests/platform-crypto.test.d.ts +0 -1
- package/dist/tests/platform-index.test.d.ts +0 -1
- package/dist/tests/platform-node.test.d.ts +0 -1
- package/dist/tests/platform-shared-utils.test.d.ts +0 -1
- package/dist/tests/platform-updated.test.d.ts +0 -1
- package/dist/tests/protocol-additional-methods.test.d.ts +0 -1
- package/dist/tests/protocol.test.d.ts +0 -1
- package/dist/tests/read-only-mode.test.d.ts +0 -1
- package/dist/tests/relayer-integration.test.d.ts +0 -1
- package/dist/tests/relayer-unified.test.d.ts +0 -1
- package/dist/tests/schemas.test.d.ts +0 -1
- package/dist/tests/server-relayer-handler.test.d.ts +0 -1
- package/dist/tests/signatureFormatter.test.d.ts +0 -1
- package/dist/tests/staking.test.d.ts +0 -1
- package/dist/tests/trusted-server-queries.test.d.ts +0 -1
- package/dist/tests/typedDataConverter.test.d.ts +0 -1
- package/dist/tests/types-contracts.test.d.ts +0 -1
- package/dist/tests/types-data.test.d.ts +0 -1
- package/dist/tests/types-external-apis.test.d.ts +0 -1
- package/dist/tests/types-generics.test.d.ts +0 -1
- package/dist/tests/types-permissions.test.d.ts +0 -1
- package/dist/tests/types-upload-params.test.d.ts +0 -1
- package/dist/tests/types.test.d.ts +0 -1
- package/dist/tests/utils-formatters.test.d.ts +0 -1
- package/dist/tests/utils-grantFiles-edge-cases.test.d.ts +0 -1
- package/dist/tests/utils-grantFiles-validation.test.d.ts +0 -1
- package/dist/tests/utils-grantFiles.test.d.ts +0 -1
- package/dist/tests/utils-grantValidation-consolidated.test.d.ts +0 -1
- package/dist/tests/utils-grants.test.d.ts +0 -1
- package/dist/tests/utils-ipfs-additional.test.d.ts +0 -1
- package/dist/tests/utils-ipfs.test.d.ts +0 -4
- package/dist/tests/utils-schemaValidation.test.d.ts +0 -1
- package/dist/tests/vana.test.d.ts +0 -1
- package/dist/tests/wallet-crypto-compatibility.test.d.ts +0 -1
- package/dist/types/atomicStore.cjs.map +0 -1
- package/dist/types/atomicStore.d.ts +0 -236
- package/dist/types/atomicStore.js +0 -7
- package/dist/types/atomicStore.js.map +0 -1
- package/dist/types/blockchain.cjs +0 -17
- package/dist/types/blockchain.cjs.map +0 -1
- package/dist/types/blockchain.d.ts +0 -85
- package/dist/types/blockchain.js +0 -1
- package/dist/types/blockchain.js.map +0 -1
- package/dist/types/controller-context.cjs +0 -17
- package/dist/types/controller-context.cjs.map +0 -1
- package/dist/types/controller-context.d.ts +0 -68
- package/dist/types/controller-context.js +0 -1
- package/dist/types/controller-context.js.map +0 -1
- package/dist/types/data.cjs +0 -17
- package/dist/types/data.cjs.map +0 -1
- package/dist/types/data.d.ts +0 -763
- package/dist/types/data.js +0 -1
- package/dist/types/data.js.map +0 -1
- package/dist/types/external-apis.cjs +0 -61
- package/dist/types/external-apis.cjs.map +0 -1
- package/dist/types/external-apis.d.ts +0 -184
- package/dist/types/external-apis.js +0 -34
- package/dist/types/external-apis.js.map +0 -1
- package/dist/types/generics.cjs +0 -17
- package/dist/types/generics.cjs.map +0 -1
- package/dist/types/generics.d.ts +0 -518
- package/dist/types/generics.js +0 -1
- package/dist/types/generics.js.map +0 -1
- package/dist/types/operationStore.cjs +0 -17
- package/dist/types/operationStore.cjs.map +0 -1
- package/dist/types/operationStore.d.ts +0 -171
- package/dist/types/operationStore.js +0 -1
- package/dist/types/operationStore.js.map +0 -1
- package/dist/types/operations.cjs +0 -53
- package/dist/types/operations.cjs.map +0 -1
- package/dist/types/operations.d.ts +0 -204
- package/dist/types/operations.js +0 -26
- package/dist/types/operations.js.map +0 -1
- package/dist/types/options.cjs +0 -17
- package/dist/types/options.cjs.map +0 -1
- package/dist/types/options.d.ts +0 -308
- package/dist/types/options.js +0 -1
- package/dist/types/options.js.map +0 -1
- package/dist/types/permissions.cjs +0 -17
- package/dist/types/permissions.cjs.map +0 -1
- package/dist/types/permissions.d.ts +0 -955
- package/dist/types/permissions.js +0 -1
- package/dist/types/permissions.js.map +0 -1
- package/dist/types/personal.cjs +0 -17
- package/dist/types/personal.cjs.map +0 -1
- package/dist/types/personal.d.ts +0 -174
- package/dist/types/personal.js +0 -1
- package/dist/types/personal.js.map +0 -1
- package/dist/types/relayer.cjs +0 -17
- package/dist/types/relayer.cjs.map +0 -1
- package/dist/types/relayer.d.ts +0 -552
- package/dist/types/relayer.js +0 -1
- package/dist/types/relayer.js.map +0 -1
- package/dist/types/transactionResults.cjs +0 -17
- package/dist/types/transactionResults.cjs.map +0 -1
- package/dist/types/transactionResults.d.ts +0 -193
- package/dist/types/transactionResults.js +0 -1
- package/dist/types/transactionResults.js.map +0 -1
- package/dist/types/utils.cjs +0 -17
- package/dist/types/utils.cjs.map +0 -1
- package/dist/types/utils.d.ts +0 -771
- package/dist/types/utils.js +0 -1
- package/dist/types/utils.js.map +0 -1
- package/dist/utils/__tests__/chainQuery.test.d.ts +0 -1
- package/dist/utils/__tests__/parseTransaction.test.d.ts +0 -1
- package/dist/utils/__tests__/pojo-serialization.test.d.ts +0 -1
- package/dist/utils/__tests__/signatureCache.test.d.ts +0 -1
- package/dist/utils/__tests__/subgraphConsistency.test.d.ts +0 -4
- package/dist/utils/__tests__/subgraphPagination.test.d.ts +0 -4
- package/dist/utils/__tests__/transaction-edge-cases.test.d.ts +0 -1
- package/dist/utils/__tests__/transactionHelpers.test.d.ts +0 -1
- package/dist/utils/__tests__/urlResolver.test.d.ts +0 -4
- package/dist/utils/blockchain/registry.cjs +0 -81
- package/dist/utils/blockchain/registry.cjs.map +0 -1
- package/dist/utils/blockchain/registry.d.ts +0 -32
- package/dist/utils/blockchain/registry.js +0 -56
- package/dist/utils/blockchain/registry.js.map +0 -1
- package/dist/utils/blockchain/registry.test.d.ts +0 -1
- package/dist/utils/chainQuery.cjs +0 -107
- package/dist/utils/chainQuery.cjs.map +0 -1
- package/dist/utils/chainQuery.d.ts +0 -31
- package/dist/utils/chainQuery.js +0 -82
- package/dist/utils/chainQuery.js.map +0 -1
- package/dist/utils/download.cjs +0 -69
- package/dist/utils/download.cjs.map +0 -1
- package/dist/utils/download.d.ts +0 -40
- package/dist/utils/download.js +0 -45
- package/dist/utils/download.js.map +0 -1
- package/dist/utils/encryption.cjs +0 -176
- package/dist/utils/encryption.cjs.map +0 -1
- package/dist/utils/encryption.d.ts +0 -271
- package/dist/utils/encryption.js +0 -142
- package/dist/utils/encryption.js.map +0 -1
- package/dist/utils/formatters.cjs +0 -55
- package/dist/utils/formatters.cjs.map +0 -1
- package/dist/utils/formatters.d.ts +0 -118
- package/dist/utils/formatters.js +0 -28
- package/dist/utils/formatters.js.map +0 -1
- package/dist/utils/grantFiles.cjs +0 -181
- package/dist/utils/grantFiles.cjs.map +0 -1
- package/dist/utils/grantFiles.d.ts +0 -172
- package/dist/utils/grantFiles.js +0 -143
- package/dist/utils/grantFiles.js.map +0 -1
- package/dist/utils/grantValidation.cjs +0 -243
- package/dist/utils/grantValidation.cjs.map +0 -1
- package/dist/utils/grantValidation.d.ts +0 -226
- package/dist/utils/grantValidation.js +0 -201
- package/dist/utils/grantValidation.js.map +0 -1
- package/dist/utils/grants.cjs +0 -108
- package/dist/utils/grants.cjs.map +0 -1
- package/dist/utils/grants.d.ts +0 -148
- package/dist/utils/grants.js +0 -82
- package/dist/utils/grants.js.map +0 -1
- package/dist/utils/ipfs.cjs +0 -128
- package/dist/utils/ipfs.cjs.map +0 -1
- package/dist/utils/ipfs.d.ts +0 -88
- package/dist/utils/ipfs.js +0 -97
- package/dist/utils/ipfs.js.map +0 -1
- package/dist/utils/multicall.cjs +0 -233
- package/dist/utils/multicall.cjs.map +0 -1
- package/dist/utils/multicall.d.ts +0 -126
- package/dist/utils/multicall.js +0 -208
- package/dist/utils/multicall.js.map +0 -1
- package/dist/utils/parseTransactionPojo.cjs +0 -87
- package/dist/utils/parseTransactionPojo.cjs.map +0 -1
- package/dist/utils/parseTransactionPojo.d.ts +0 -31
- package/dist/utils/parseTransactionPojo.js +0 -63
- package/dist/utils/parseTransactionPojo.js.map +0 -1
- package/dist/utils/schemaValidation.cjs +0 -258
- package/dist/utils/schemaValidation.cjs.map +0 -1
- package/dist/utils/schemaValidation.d.ts +0 -168
- package/dist/utils/schemaValidation.js +0 -219
- package/dist/utils/schemaValidation.js.map +0 -1
- package/dist/utils/signatureCache.cjs +0 -192
- package/dist/utils/signatureCache.cjs.map +0 -1
- package/dist/utils/signatureCache.d.ts +0 -172
- package/dist/utils/signatureCache.js +0 -167
- package/dist/utils/signatureCache.js.map +0 -1
- package/dist/utils/signatureFormatter.cjs +0 -42
- package/dist/utils/signatureFormatter.cjs.map +0 -1
- package/dist/utils/signatureFormatter.d.ts +0 -36
- package/dist/utils/signatureFormatter.js +0 -18
- package/dist/utils/signatureFormatter.js.map +0 -1
- package/dist/utils/subgraphConsistency.cjs +0 -184
- package/dist/utils/subgraphConsistency.cjs.map +0 -1
- package/dist/utils/subgraphConsistency.d.ts +0 -65
- package/dist/utils/subgraphConsistency.js +0 -155
- package/dist/utils/subgraphConsistency.js.map +0 -1
- package/dist/utils/subgraphMetaCache.cjs +0 -101
- package/dist/utils/subgraphMetaCache.cjs.map +0 -1
- package/dist/utils/subgraphMetaCache.d.ts +0 -56
- package/dist/utils/subgraphMetaCache.js +0 -76
- package/dist/utils/subgraphMetaCache.js.map +0 -1
- package/dist/utils/subgraphPagination.cjs +0 -104
- package/dist/utils/subgraphPagination.cjs.map +0 -1
- package/dist/utils/subgraphPagination.d.ts +0 -78
- package/dist/utils/subgraphPagination.js +0 -78
- package/dist/utils/subgraphPagination.js.map +0 -1
- package/dist/utils/tests/multicall.test.d.ts +0 -1
- package/dist/utils/transactionHelpers.cjs +0 -54
- package/dist/utils/transactionHelpers.cjs.map +0 -1
- package/dist/utils/transactionHelpers.d.ts +0 -80
- package/dist/utils/transactionHelpers.js +0 -29
- package/dist/utils/transactionHelpers.js.map +0 -1
- package/dist/utils/typeGuards.cjs +0 -109
- package/dist/utils/typeGuards.cjs.map +0 -1
- package/dist/utils/typeGuards.d.ts +0 -138
- package/dist/utils/typeGuards.js +0 -74
- package/dist/utils/typeGuards.js.map +0 -1
- package/dist/utils/typedDataConverter.cjs +0 -43
- package/dist/utils/typedDataConverter.cjs.map +0 -1
- package/dist/utils/typedDataConverter.d.ts +0 -46
- package/dist/utils/typedDataConverter.js +0 -19
- package/dist/utils/typedDataConverter.js.map +0 -1
- package/dist/utils/urlResolver.cjs +0 -62
- package/dist/utils/urlResolver.cjs.map +0 -1
- package/dist/utils/urlResolver.d.ts +0 -56
- package/dist/utils/urlResolver.js +0 -37
- package/dist/utils/urlResolver.js.map +0 -1
- package/dist/utils/wallet.cjs +0 -63
- package/dist/utils/wallet.cjs.map +0 -1
- package/dist/utils/wallet.d.ts +0 -94
- package/dist/utils/wallet.js +0 -37
- package/dist/utils/wallet.js.map +0 -1
- package/dist/utils/withEvents.cjs +0 -44
- package/dist/utils/withEvents.cjs.map +0 -1
- package/dist/utils/withEvents.d.ts +0 -56
- package/dist/utils/withEvents.js +0 -18
- package/dist/utils/withEvents.js.map +0 -1
- /package/dist/{__tests__/waitForTransactionEvents.test.d.ts → auth/pkce.test.d.ts} +0 -0
- /package/dist/{client/__tests__/enhancedResponse.test.d.ts → auth/token-store.test.d.ts} +0 -0
- /package/dist/{controllers/__tests__/operations.processQueue.test.d.ts → auth/web3-signed.test.d.ts} +0 -0
- /package/dist/{controllers/__tests__/schemas-edge-cases.test.d.ts → crypto/envelope/openpgp.test.d.ts} +0 -0
- /package/dist/{controllers/data-error-handling.test.d.ts → crypto/keys/derive.test.d.ts} +0 -0
- /package/dist/{tests/errors.test.d.ts → errors.test.d.ts} +0 -0
- /package/dist/{controllers/server-additional.test.d.ts → protocol/data-file.test.d.ts} +0 -0
- /package/dist/{core/__tests__/health.test.d.ts → protocol/eip712.test.d.ts} +0 -0
- /package/dist/{core/__tests__/inMemoryNonceManager.test.d.ts → protocol/gateway.test.d.ts} +0 -0
- /package/dist/{core/__tests__/nonceManager.test.d.ts → protocol/grants.test.d.ts} +0 -0
- /package/dist/{core/core.test.d.ts → protocol/scopes.test.d.ts} +0 -0
- /package/dist/{core/tests/apiClient.test.d.ts → storage/tests/defaultStorage.test.d.ts} +0 -0
- /package/dist/{core/tests/client.test.d.ts → storage/tests/r2Storage.test.d.ts} +0 -0
- /package/dist/{core/tests/generics.test.d.ts → storage/tests/vanaStorage.test.d.ts} +0 -0
- /package/dist/{diagnostics.test.d.ts → types/ps-errors.test.d.ts} +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/auth/token-store.ts"],"sourcesContent":["/**\n * Token storage primitives for OAuth grant and access tokens.\n *\n * @remarks\n * Defines the {@link TokenStore} interface and a default in-memory\n * implementation. Persistent backends (e.g., browser storage, secure\n * keychains) are intentionally not provided here — consumers can implement\n * the interface for their environment.\n *\n * @category Auth\n * @module auth/token-store\n */\n\n/**\n * A persisted token record.\n */\nexport interface TokenRecord {\n /** The opaque token value. */\n token: string;\n /** Optional expiration as a Unix timestamp in seconds. */\n expiresAt?: number;\n}\n\n/**\n * Async key/value store for token records.\n */\nexport interface TokenStore {\n /**\n * Returns the record for `key`, or `null` if missing or expired.\n */\n get(key: string): Promise<TokenRecord | null>;\n /**\n * Stores `record` under `key`, overwriting any existing entry.\n */\n set(key: string, record: TokenRecord): Promise<void>;\n /**\n * Removes the entry for `key`. No-op if `key` is absent.\n */\n delete(key: string): Promise<void>;\n /**\n * Removes all entries.\n */\n clear(): Promise<void>;\n}\n\n/**\n * In-memory {@link TokenStore} implementation.\n *\n * @remarks\n * Expired entries are evicted lazily on read. Records are shallow-copied on\n * `set` and `get` so caller mutations do not leak into stored state.\n */\nexport class InMemoryTokenStore implements TokenStore {\n readonly #records = new Map<string, TokenRecord>();\n\n public get(key: string): Promise<TokenRecord | null> {\n const record = this.#records.get(key);\n if (record === undefined) return Promise.resolve(null);\n if (\n record.expiresAt !== undefined &&\n record.expiresAt <= Math.floor(Date.now() / 1000)\n ) {\n this.#records.delete(key);\n return Promise.resolve(null);\n }\n return Promise.resolve({ ...record });\n }\n\n public set(key: string, record: TokenRecord): Promise<void> {\n this.#records.set(key, { ...record });\n return Promise.resolve();\n }\n\n public delete(key: string): Promise<void> {\n this.#records.delete(key);\n return Promise.resolve();\n }\n\n public clear(): Promise<void> {\n this.#records.clear();\n return Promise.resolve();\n }\n\n /**\n * Returns the number of stored entries (including any not yet\n * lazily evicted). Intended for tests and diagnostics.\n */\n public get size(): number {\n return this.#records.size;\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAoDO,MAAM,mBAAyC;AAAA,EAC3C,WAAW,oBAAI,IAAyB;AAAA,EAE1C,IAAI,KAA0C;AACnD,UAAM,SAAS,KAAK,SAAS,IAAI,GAAG;AACpC,QAAI,WAAW,OAAW,QAAO,QAAQ,QAAQ,IAAI;AACrD,QACE,OAAO,cAAc,UACrB,OAAO,aAAa,KAAK,MAAM,KAAK,IAAI,IAAI,GAAI,GAChD;AACA,WAAK,SAAS,OAAO,GAAG;AACxB,aAAO,QAAQ,QAAQ,IAAI;AAAA,IAC7B;AACA,WAAO,QAAQ,QAAQ,EAAE,GAAG,OAAO,CAAC;AAAA,EACtC;AAAA,EAEO,IAAI,KAAa,QAAoC;AAC1D,SAAK,SAAS,IAAI,KAAK,EAAE,GAAG,OAAO,CAAC;AACpC,WAAO,QAAQ,QAAQ;AAAA,EACzB;AAAA,EAEO,OAAO,KAA4B;AACxC,SAAK,SAAS,OAAO,GAAG;AACxB,WAAO,QAAQ,QAAQ;AAAA,EACzB;AAAA,EAEO,QAAuB;AAC5B,SAAK,SAAS,MAAM;AACpB,WAAO,QAAQ,QAAQ;AAAA,EACzB;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,IAAW,OAAe;AACxB,WAAO,KAAK,SAAS;AAAA,EACvB;AACF;","names":[]}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Token storage primitives for OAuth grant and access tokens.
|
|
3
|
+
*
|
|
4
|
+
* @remarks
|
|
5
|
+
* Defines the {@link TokenStore} interface and a default in-memory
|
|
6
|
+
* implementation. Persistent backends (e.g., browser storage, secure
|
|
7
|
+
* keychains) are intentionally not provided here — consumers can implement
|
|
8
|
+
* the interface for their environment.
|
|
9
|
+
*
|
|
10
|
+
* @category Auth
|
|
11
|
+
* @module auth/token-store
|
|
12
|
+
*/
|
|
13
|
+
/**
|
|
14
|
+
* A persisted token record.
|
|
15
|
+
*/
|
|
16
|
+
export interface TokenRecord {
|
|
17
|
+
/** The opaque token value. */
|
|
18
|
+
token: string;
|
|
19
|
+
/** Optional expiration as a Unix timestamp in seconds. */
|
|
20
|
+
expiresAt?: number;
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Async key/value store for token records.
|
|
24
|
+
*/
|
|
25
|
+
export interface TokenStore {
|
|
26
|
+
/**
|
|
27
|
+
* Returns the record for `key`, or `null` if missing or expired.
|
|
28
|
+
*/
|
|
29
|
+
get(key: string): Promise<TokenRecord | null>;
|
|
30
|
+
/**
|
|
31
|
+
* Stores `record` under `key`, overwriting any existing entry.
|
|
32
|
+
*/
|
|
33
|
+
set(key: string, record: TokenRecord): Promise<void>;
|
|
34
|
+
/**
|
|
35
|
+
* Removes the entry for `key`. No-op if `key` is absent.
|
|
36
|
+
*/
|
|
37
|
+
delete(key: string): Promise<void>;
|
|
38
|
+
/**
|
|
39
|
+
* Removes all entries.
|
|
40
|
+
*/
|
|
41
|
+
clear(): Promise<void>;
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* In-memory {@link TokenStore} implementation.
|
|
45
|
+
*
|
|
46
|
+
* @remarks
|
|
47
|
+
* Expired entries are evicted lazily on read. Records are shallow-copied on
|
|
48
|
+
* `set` and `get` so caller mutations do not leak into stored state.
|
|
49
|
+
*/
|
|
50
|
+
export declare class InMemoryTokenStore implements TokenStore {
|
|
51
|
+
#private;
|
|
52
|
+
get(key: string): Promise<TokenRecord | null>;
|
|
53
|
+
set(key: string, record: TokenRecord): Promise<void>;
|
|
54
|
+
delete(key: string): Promise<void>;
|
|
55
|
+
clear(): Promise<void>;
|
|
56
|
+
/**
|
|
57
|
+
* Returns the number of stored entries (including any not yet
|
|
58
|
+
* lazily evicted). Intended for tests and diagnostics.
|
|
59
|
+
*/
|
|
60
|
+
get size(): number;
|
|
61
|
+
}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
class InMemoryTokenStore {
|
|
2
|
+
#records = /* @__PURE__ */ new Map();
|
|
3
|
+
get(key) {
|
|
4
|
+
const record = this.#records.get(key);
|
|
5
|
+
if (record === void 0) return Promise.resolve(null);
|
|
6
|
+
if (record.expiresAt !== void 0 && record.expiresAt <= Math.floor(Date.now() / 1e3)) {
|
|
7
|
+
this.#records.delete(key);
|
|
8
|
+
return Promise.resolve(null);
|
|
9
|
+
}
|
|
10
|
+
return Promise.resolve({ ...record });
|
|
11
|
+
}
|
|
12
|
+
set(key, record) {
|
|
13
|
+
this.#records.set(key, { ...record });
|
|
14
|
+
return Promise.resolve();
|
|
15
|
+
}
|
|
16
|
+
delete(key) {
|
|
17
|
+
this.#records.delete(key);
|
|
18
|
+
return Promise.resolve();
|
|
19
|
+
}
|
|
20
|
+
clear() {
|
|
21
|
+
this.#records.clear();
|
|
22
|
+
return Promise.resolve();
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Returns the number of stored entries (including any not yet
|
|
26
|
+
* lazily evicted). Intended for tests and diagnostics.
|
|
27
|
+
*/
|
|
28
|
+
get size() {
|
|
29
|
+
return this.#records.size;
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
export {
|
|
33
|
+
InMemoryTokenStore
|
|
34
|
+
};
|
|
35
|
+
//# sourceMappingURL=token-store.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/auth/token-store.ts"],"sourcesContent":["/**\n * Token storage primitives for OAuth grant and access tokens.\n *\n * @remarks\n * Defines the {@link TokenStore} interface and a default in-memory\n * implementation. Persistent backends (e.g., browser storage, secure\n * keychains) are intentionally not provided here — consumers can implement\n * the interface for their environment.\n *\n * @category Auth\n * @module auth/token-store\n */\n\n/**\n * A persisted token record.\n */\nexport interface TokenRecord {\n /** The opaque token value. */\n token: string;\n /** Optional expiration as a Unix timestamp in seconds. */\n expiresAt?: number;\n}\n\n/**\n * Async key/value store for token records.\n */\nexport interface TokenStore {\n /**\n * Returns the record for `key`, or `null` if missing or expired.\n */\n get(key: string): Promise<TokenRecord | null>;\n /**\n * Stores `record` under `key`, overwriting any existing entry.\n */\n set(key: string, record: TokenRecord): Promise<void>;\n /**\n * Removes the entry for `key`. No-op if `key` is absent.\n */\n delete(key: string): Promise<void>;\n /**\n * Removes all entries.\n */\n clear(): Promise<void>;\n}\n\n/**\n * In-memory {@link TokenStore} implementation.\n *\n * @remarks\n * Expired entries are evicted lazily on read. Records are shallow-copied on\n * `set` and `get` so caller mutations do not leak into stored state.\n */\nexport class InMemoryTokenStore implements TokenStore {\n readonly #records = new Map<string, TokenRecord>();\n\n public get(key: string): Promise<TokenRecord | null> {\n const record = this.#records.get(key);\n if (record === undefined) return Promise.resolve(null);\n if (\n record.expiresAt !== undefined &&\n record.expiresAt <= Math.floor(Date.now() / 1000)\n ) {\n this.#records.delete(key);\n return Promise.resolve(null);\n }\n return Promise.resolve({ ...record });\n }\n\n public set(key: string, record: TokenRecord): Promise<void> {\n this.#records.set(key, { ...record });\n return Promise.resolve();\n }\n\n public delete(key: string): Promise<void> {\n this.#records.delete(key);\n return Promise.resolve();\n }\n\n public clear(): Promise<void> {\n this.#records.clear();\n return Promise.resolve();\n }\n\n /**\n * Returns the number of stored entries (including any not yet\n * lazily evicted). Intended for tests and diagnostics.\n */\n public get size(): number {\n return this.#records.size;\n }\n}\n"],"mappings":"AAoDO,MAAM,mBAAyC;AAAA,EAC3C,WAAW,oBAAI,IAAyB;AAAA,EAE1C,IAAI,KAA0C;AACnD,UAAM,SAAS,KAAK,SAAS,IAAI,GAAG;AACpC,QAAI,WAAW,OAAW,QAAO,QAAQ,QAAQ,IAAI;AACrD,QACE,OAAO,cAAc,UACrB,OAAO,aAAa,KAAK,MAAM,KAAK,IAAI,IAAI,GAAI,GAChD;AACA,WAAK,SAAS,OAAO,GAAG;AACxB,aAAO,QAAQ,QAAQ,IAAI;AAAA,IAC7B;AACA,WAAO,QAAQ,QAAQ,EAAE,GAAG,OAAO,CAAC;AAAA,EACtC;AAAA,EAEO,IAAI,KAAa,QAAoC;AAC1D,SAAK,SAAS,IAAI,KAAK,EAAE,GAAG,OAAO,CAAC;AACpC,WAAO,QAAQ,QAAQ;AAAA,EACzB;AAAA,EAEO,OAAO,KAA4B;AACxC,SAAK,SAAS,OAAO,GAAG;AACxB,WAAO,QAAQ,QAAQ;AAAA,EACzB;AAAA,EAEO,QAAuB;AAC5B,SAAK,SAAS,MAAM;AACpB,WAAO,QAAQ,QAAQ;AAAA,EACzB;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,IAAW,OAAe;AACxB,WAAO,KAAK,SAAS;AAAA,EACvB;AACF;","names":[]}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
+
var __export = (target, all) => {
|
|
7
|
+
for (var name in all)
|
|
8
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
9
|
+
};
|
|
10
|
+
var __copyProps = (to, from, except, desc) => {
|
|
11
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
12
|
+
for (let key of __getOwnPropNames(from))
|
|
13
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
14
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
15
|
+
}
|
|
16
|
+
return to;
|
|
17
|
+
};
|
|
18
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
19
|
+
var web3_signed_builder_exports = {};
|
|
20
|
+
__export(web3_signed_builder_exports, {
|
|
21
|
+
buildWeb3SignedHeader: () => buildWeb3SignedHeader,
|
|
22
|
+
computeBodyHash: () => computeBodyHash
|
|
23
|
+
});
|
|
24
|
+
module.exports = __toCommonJS(web3_signed_builder_exports);
|
|
25
|
+
var import_sha2 = require("@noble/hashes/sha2");
|
|
26
|
+
var import_viem = require("viem");
|
|
27
|
+
var import_encoding = require("../utils/encoding");
|
|
28
|
+
const EMPTY_BODY_HASH = "sha256:e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855";
|
|
29
|
+
const DEFAULT_TTL_SECONDS = 300;
|
|
30
|
+
function base64urlEncode(input) {
|
|
31
|
+
return (0, import_encoding.toBase64)(input).replace(/\+/g, "-").replace(/\//g, "_").replace(/=+$/, "");
|
|
32
|
+
}
|
|
33
|
+
function computeBodyHash(body) {
|
|
34
|
+
if (!body || body.length === 0) {
|
|
35
|
+
return EMPTY_BODY_HASH;
|
|
36
|
+
}
|
|
37
|
+
const digest = (0, import_sha2.sha256)(body);
|
|
38
|
+
return `sha256:${(0, import_viem.bytesToHex)(digest).slice(2)}`;
|
|
39
|
+
}
|
|
40
|
+
async function buildWeb3SignedHeader(params) {
|
|
41
|
+
const now = Math.floor(Date.now() / 1e3);
|
|
42
|
+
const iat = params.iat ?? now;
|
|
43
|
+
const exp = params.exp ?? iat + DEFAULT_TTL_SECONDS;
|
|
44
|
+
const payload = {
|
|
45
|
+
aud: params.aud,
|
|
46
|
+
bodyHash: params.bodyHash ?? computeBodyHash(params.body),
|
|
47
|
+
exp,
|
|
48
|
+
iat,
|
|
49
|
+
method: params.method,
|
|
50
|
+
uri: params.uri
|
|
51
|
+
};
|
|
52
|
+
if (params.grantId !== void 0) {
|
|
53
|
+
payload["grantId"] = params.grantId;
|
|
54
|
+
}
|
|
55
|
+
const sortedPayload = Object.keys(payload).sort().reduce((acc, key) => {
|
|
56
|
+
acc[key] = payload[key];
|
|
57
|
+
return acc;
|
|
58
|
+
}, {});
|
|
59
|
+
const payloadJson = JSON.stringify(sortedPayload);
|
|
60
|
+
const payloadBytes = new TextEncoder().encode(payloadJson);
|
|
61
|
+
const payloadBase64 = base64urlEncode(payloadBytes);
|
|
62
|
+
const signature = await params.signMessage(payloadBase64);
|
|
63
|
+
return `Web3Signed ${payloadBase64}.${signature}`;
|
|
64
|
+
}
|
|
65
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
66
|
+
0 && (module.exports = {
|
|
67
|
+
buildWeb3SignedHeader,
|
|
68
|
+
computeBodyHash
|
|
69
|
+
});
|
|
70
|
+
//# sourceMappingURL=web3-signed-builder.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/auth/web3-signed-builder.ts"],"sourcesContent":["/**\n * Builder for Web3Signed Authorization headers.\n *\n * @remarks\n * Ported from `personal-server-ts`\n * (`packages/core/src/signing/request-signer.ts`). The original was wired\n * to a Node-only `ServerAccount` and `node:crypto`. This isomorphic version\n * accepts any `signMessage` callback (viem accounts, wallet clients, etc.)\n * and uses `@noble/hashes` for SHA-256 so it runs in browsers and Workers.\n *\n * Wire format is identical to PS — payload is JSON with sorted keys,\n * base64url-encoded, signed via EIP-191.\n *\n * @category Auth\n */\n\nimport { sha256 } from \"@noble/hashes/sha2\";\nimport { bytesToHex } from \"viem\";\nimport { toBase64 } from \"../utils/encoding\";\n\n/**\n * Sign-message callback compatible with viem `LocalAccount`/`WalletClient`-style\n * signers. Must produce an EIP-191 (`personal_sign`) signature.\n */\nexport type Web3SignedSignFn = (message: string) => Promise<`0x${string}`>;\n\n/** SHA-256 of the empty string — bodyHash for empty bodies. */\nconst EMPTY_BODY_HASH =\n \"sha256:e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855\";\n\n/** Default token lifetime (seconds). */\nconst DEFAULT_TTL_SECONDS = 300;\n\n/** Base64url encode bytes (no padding). */\nfunction base64urlEncode(input: Uint8Array): string {\n return toBase64(input)\n .replace(/\\+/g, \"-\")\n .replace(/\\//g, \"_\")\n .replace(/=+$/, \"\");\n}\n\n/** Compute the `sha256:<hex>` bodyHash claim for a request body. */\nexport function computeBodyHash(body: Uint8Array | undefined): string {\n if (!body || body.length === 0) {\n return EMPTY_BODY_HASH;\n }\n const digest = sha256(body);\n return `sha256:${bytesToHex(digest).slice(2)}`;\n}\n\n/**\n * Build a Web3Signed Authorization header value.\n *\n * @returns The full header value (`\"Web3Signed <base64url>.<sig>\"`).\n */\nexport async function buildWeb3SignedHeader(params: {\n /** EIP-191 signer (e.g. viem `account.signMessage`). */\n signMessage: Web3SignedSignFn;\n /** Expected origin (e.g. `\"https://ps.example.com\"`). */\n aud: string;\n /** HTTP method (e.g. `\"GET\"`). */\n method: string;\n /** Request URI/path (e.g. `\"/v1/data/instagram.profile\"`). */\n uri: string;\n /** Optional request body — when present, used to compute `bodyHash`. */\n body?: Uint8Array;\n /** Issued-at (unix seconds). Defaults to now. */\n iat?: number;\n /** Expiry (unix seconds). Defaults to `iat + 300`. */\n exp?: number;\n /** Optional grant id, attached as the `grantId` claim. */\n grantId?: string;\n /** Pre-computed `bodyHash` claim — overrides `body`. */\n bodyHash?: string;\n}): Promise<string> {\n const now = Math.floor(Date.now() / 1000);\n const iat = params.iat ?? now;\n const exp = params.exp ?? iat + DEFAULT_TTL_SECONDS;\n\n const payload: Record<string, unknown> = {\n aud: params.aud,\n bodyHash: params.bodyHash ?? computeBodyHash(params.body),\n exp,\n iat,\n method: params.method,\n uri: params.uri,\n };\n\n if (params.grantId !== undefined) {\n payload[\"grantId\"] = params.grantId;\n }\n\n // Sort keys for deterministic serialization.\n const sortedPayload = Object.keys(payload)\n .sort()\n .reduce<Record<string, unknown>>((acc, key) => {\n acc[key] = payload[key];\n return acc;\n }, {});\n\n const payloadJson = JSON.stringify(sortedPayload);\n const payloadBytes = new TextEncoder().encode(payloadJson);\n const payloadBase64 = base64urlEncode(payloadBytes);\n\n const signature = await params.signMessage(payloadBase64);\n\n return `Web3Signed ${payloadBase64}.${signature}`;\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAgBA,kBAAuB;AACvB,kBAA2B;AAC3B,sBAAyB;AASzB,MAAM,kBACJ;AAGF,MAAM,sBAAsB;AAG5B,SAAS,gBAAgB,OAA2B;AAClD,aAAO,0BAAS,KAAK,EAClB,QAAQ,OAAO,GAAG,EAClB,QAAQ,OAAO,GAAG,EAClB,QAAQ,OAAO,EAAE;AACtB;AAGO,SAAS,gBAAgB,MAAsC;AACpE,MAAI,CAAC,QAAQ,KAAK,WAAW,GAAG;AAC9B,WAAO;AAAA,EACT;AACA,QAAM,aAAS,oBAAO,IAAI;AAC1B,SAAO,cAAU,wBAAW,MAAM,EAAE,MAAM,CAAC,CAAC;AAC9C;AAOA,eAAsB,sBAAsB,QAmBxB;AAClB,QAAM,MAAM,KAAK,MAAM,KAAK,IAAI,IAAI,GAAI;AACxC,QAAM,MAAM,OAAO,OAAO;AAC1B,QAAM,MAAM,OAAO,OAAO,MAAM;AAEhC,QAAM,UAAmC;AAAA,IACvC,KAAK,OAAO;AAAA,IACZ,UAAU,OAAO,YAAY,gBAAgB,OAAO,IAAI;AAAA,IACxD;AAAA,IACA;AAAA,IACA,QAAQ,OAAO;AAAA,IACf,KAAK,OAAO;AAAA,EACd;AAEA,MAAI,OAAO,YAAY,QAAW;AAChC,YAAQ,SAAS,IAAI,OAAO;AAAA,EAC9B;AAGA,QAAM,gBAAgB,OAAO,KAAK,OAAO,EACtC,KAAK,EACL,OAAgC,CAAC,KAAK,QAAQ;AAC7C,QAAI,GAAG,IAAI,QAAQ,GAAG;AACtB,WAAO;AAAA,EACT,GAAG,CAAC,CAAC;AAEP,QAAM,cAAc,KAAK,UAAU,aAAa;AAChD,QAAM,eAAe,IAAI,YAAY,EAAE,OAAO,WAAW;AACzD,QAAM,gBAAgB,gBAAgB,YAAY;AAElD,QAAM,YAAY,MAAM,OAAO,YAAY,aAAa;AAExD,SAAO,cAAc,aAAa,IAAI,SAAS;AACjD;","names":[]}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Builder for Web3Signed Authorization headers.
|
|
3
|
+
*
|
|
4
|
+
* @remarks
|
|
5
|
+
* Ported from `personal-server-ts`
|
|
6
|
+
* (`packages/core/src/signing/request-signer.ts`). The original was wired
|
|
7
|
+
* to a Node-only `ServerAccount` and `node:crypto`. This isomorphic version
|
|
8
|
+
* accepts any `signMessage` callback (viem accounts, wallet clients, etc.)
|
|
9
|
+
* and uses `@noble/hashes` for SHA-256 so it runs in browsers and Workers.
|
|
10
|
+
*
|
|
11
|
+
* Wire format is identical to PS — payload is JSON with sorted keys,
|
|
12
|
+
* base64url-encoded, signed via EIP-191.
|
|
13
|
+
*
|
|
14
|
+
* @category Auth
|
|
15
|
+
*/
|
|
16
|
+
/**
|
|
17
|
+
* Sign-message callback compatible with viem `LocalAccount`/`WalletClient`-style
|
|
18
|
+
* signers. Must produce an EIP-191 (`personal_sign`) signature.
|
|
19
|
+
*/
|
|
20
|
+
export type Web3SignedSignFn = (message: string) => Promise<`0x${string}`>;
|
|
21
|
+
/** Compute the `sha256:<hex>` bodyHash claim for a request body. */
|
|
22
|
+
export declare function computeBodyHash(body: Uint8Array | undefined): string;
|
|
23
|
+
/**
|
|
24
|
+
* Build a Web3Signed Authorization header value.
|
|
25
|
+
*
|
|
26
|
+
* @returns The full header value (`"Web3Signed <base64url>.<sig>"`).
|
|
27
|
+
*/
|
|
28
|
+
export declare function buildWeb3SignedHeader(params: {
|
|
29
|
+
/** EIP-191 signer (e.g. viem `account.signMessage`). */
|
|
30
|
+
signMessage: Web3SignedSignFn;
|
|
31
|
+
/** Expected origin (e.g. `"https://ps.example.com"`). */
|
|
32
|
+
aud: string;
|
|
33
|
+
/** HTTP method (e.g. `"GET"`). */
|
|
34
|
+
method: string;
|
|
35
|
+
/** Request URI/path (e.g. `"/v1/data/instagram.profile"`). */
|
|
36
|
+
uri: string;
|
|
37
|
+
/** Optional request body — when present, used to compute `bodyHash`. */
|
|
38
|
+
body?: Uint8Array;
|
|
39
|
+
/** Issued-at (unix seconds). Defaults to now. */
|
|
40
|
+
iat?: number;
|
|
41
|
+
/** Expiry (unix seconds). Defaults to `iat + 300`. */
|
|
42
|
+
exp?: number;
|
|
43
|
+
/** Optional grant id, attached as the `grantId` claim. */
|
|
44
|
+
grantId?: string;
|
|
45
|
+
/** Pre-computed `bodyHash` claim — overrides `body`. */
|
|
46
|
+
bodyHash?: string;
|
|
47
|
+
}): Promise<string>;
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import { sha256 } from "@noble/hashes/sha2";
|
|
2
|
+
import { bytesToHex } from "viem";
|
|
3
|
+
import { toBase64 } from "../utils/encoding";
|
|
4
|
+
const EMPTY_BODY_HASH = "sha256:e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855";
|
|
5
|
+
const DEFAULT_TTL_SECONDS = 300;
|
|
6
|
+
function base64urlEncode(input) {
|
|
7
|
+
return toBase64(input).replace(/\+/g, "-").replace(/\//g, "_").replace(/=+$/, "");
|
|
8
|
+
}
|
|
9
|
+
function computeBodyHash(body) {
|
|
10
|
+
if (!body || body.length === 0) {
|
|
11
|
+
return EMPTY_BODY_HASH;
|
|
12
|
+
}
|
|
13
|
+
const digest = sha256(body);
|
|
14
|
+
return `sha256:${bytesToHex(digest).slice(2)}`;
|
|
15
|
+
}
|
|
16
|
+
async function buildWeb3SignedHeader(params) {
|
|
17
|
+
const now = Math.floor(Date.now() / 1e3);
|
|
18
|
+
const iat = params.iat ?? now;
|
|
19
|
+
const exp = params.exp ?? iat + DEFAULT_TTL_SECONDS;
|
|
20
|
+
const payload = {
|
|
21
|
+
aud: params.aud,
|
|
22
|
+
bodyHash: params.bodyHash ?? computeBodyHash(params.body),
|
|
23
|
+
exp,
|
|
24
|
+
iat,
|
|
25
|
+
method: params.method,
|
|
26
|
+
uri: params.uri
|
|
27
|
+
};
|
|
28
|
+
if (params.grantId !== void 0) {
|
|
29
|
+
payload["grantId"] = params.grantId;
|
|
30
|
+
}
|
|
31
|
+
const sortedPayload = Object.keys(payload).sort().reduce((acc, key) => {
|
|
32
|
+
acc[key] = payload[key];
|
|
33
|
+
return acc;
|
|
34
|
+
}, {});
|
|
35
|
+
const payloadJson = JSON.stringify(sortedPayload);
|
|
36
|
+
const payloadBytes = new TextEncoder().encode(payloadJson);
|
|
37
|
+
const payloadBase64 = base64urlEncode(payloadBytes);
|
|
38
|
+
const signature = await params.signMessage(payloadBase64);
|
|
39
|
+
return `Web3Signed ${payloadBase64}.${signature}`;
|
|
40
|
+
}
|
|
41
|
+
export {
|
|
42
|
+
buildWeb3SignedHeader,
|
|
43
|
+
computeBodyHash
|
|
44
|
+
};
|
|
45
|
+
//# sourceMappingURL=web3-signed-builder.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/auth/web3-signed-builder.ts"],"sourcesContent":["/**\n * Builder for Web3Signed Authorization headers.\n *\n * @remarks\n * Ported from `personal-server-ts`\n * (`packages/core/src/signing/request-signer.ts`). The original was wired\n * to a Node-only `ServerAccount` and `node:crypto`. This isomorphic version\n * accepts any `signMessage` callback (viem accounts, wallet clients, etc.)\n * and uses `@noble/hashes` for SHA-256 so it runs in browsers and Workers.\n *\n * Wire format is identical to PS — payload is JSON with sorted keys,\n * base64url-encoded, signed via EIP-191.\n *\n * @category Auth\n */\n\nimport { sha256 } from \"@noble/hashes/sha2\";\nimport { bytesToHex } from \"viem\";\nimport { toBase64 } from \"../utils/encoding\";\n\n/**\n * Sign-message callback compatible with viem `LocalAccount`/`WalletClient`-style\n * signers. Must produce an EIP-191 (`personal_sign`) signature.\n */\nexport type Web3SignedSignFn = (message: string) => Promise<`0x${string}`>;\n\n/** SHA-256 of the empty string — bodyHash for empty bodies. */\nconst EMPTY_BODY_HASH =\n \"sha256:e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855\";\n\n/** Default token lifetime (seconds). */\nconst DEFAULT_TTL_SECONDS = 300;\n\n/** Base64url encode bytes (no padding). */\nfunction base64urlEncode(input: Uint8Array): string {\n return toBase64(input)\n .replace(/\\+/g, \"-\")\n .replace(/\\//g, \"_\")\n .replace(/=+$/, \"\");\n}\n\n/** Compute the `sha256:<hex>` bodyHash claim for a request body. */\nexport function computeBodyHash(body: Uint8Array | undefined): string {\n if (!body || body.length === 0) {\n return EMPTY_BODY_HASH;\n }\n const digest = sha256(body);\n return `sha256:${bytesToHex(digest).slice(2)}`;\n}\n\n/**\n * Build a Web3Signed Authorization header value.\n *\n * @returns The full header value (`\"Web3Signed <base64url>.<sig>\"`).\n */\nexport async function buildWeb3SignedHeader(params: {\n /** EIP-191 signer (e.g. viem `account.signMessage`). */\n signMessage: Web3SignedSignFn;\n /** Expected origin (e.g. `\"https://ps.example.com\"`). */\n aud: string;\n /** HTTP method (e.g. `\"GET\"`). */\n method: string;\n /** Request URI/path (e.g. `\"/v1/data/instagram.profile\"`). */\n uri: string;\n /** Optional request body — when present, used to compute `bodyHash`. */\n body?: Uint8Array;\n /** Issued-at (unix seconds). Defaults to now. */\n iat?: number;\n /** Expiry (unix seconds). Defaults to `iat + 300`. */\n exp?: number;\n /** Optional grant id, attached as the `grantId` claim. */\n grantId?: string;\n /** Pre-computed `bodyHash` claim — overrides `body`. */\n bodyHash?: string;\n}): Promise<string> {\n const now = Math.floor(Date.now() / 1000);\n const iat = params.iat ?? now;\n const exp = params.exp ?? iat + DEFAULT_TTL_SECONDS;\n\n const payload: Record<string, unknown> = {\n aud: params.aud,\n bodyHash: params.bodyHash ?? computeBodyHash(params.body),\n exp,\n iat,\n method: params.method,\n uri: params.uri,\n };\n\n if (params.grantId !== undefined) {\n payload[\"grantId\"] = params.grantId;\n }\n\n // Sort keys for deterministic serialization.\n const sortedPayload = Object.keys(payload)\n .sort()\n .reduce<Record<string, unknown>>((acc, key) => {\n acc[key] = payload[key];\n return acc;\n }, {});\n\n const payloadJson = JSON.stringify(sortedPayload);\n const payloadBytes = new TextEncoder().encode(payloadJson);\n const payloadBase64 = base64urlEncode(payloadBytes);\n\n const signature = await params.signMessage(payloadBase64);\n\n return `Web3Signed ${payloadBase64}.${signature}`;\n}\n"],"mappings":"AAgBA,SAAS,cAAc;AACvB,SAAS,kBAAkB;AAC3B,SAAS,gBAAgB;AASzB,MAAM,kBACJ;AAGF,MAAM,sBAAsB;AAG5B,SAAS,gBAAgB,OAA2B;AAClD,SAAO,SAAS,KAAK,EAClB,QAAQ,OAAO,GAAG,EAClB,QAAQ,OAAO,GAAG,EAClB,QAAQ,OAAO,EAAE;AACtB;AAGO,SAAS,gBAAgB,MAAsC;AACpE,MAAI,CAAC,QAAQ,KAAK,WAAW,GAAG;AAC9B,WAAO;AAAA,EACT;AACA,QAAM,SAAS,OAAO,IAAI;AAC1B,SAAO,UAAU,WAAW,MAAM,EAAE,MAAM,CAAC,CAAC;AAC9C;AAOA,eAAsB,sBAAsB,QAmBxB;AAClB,QAAM,MAAM,KAAK,MAAM,KAAK,IAAI,IAAI,GAAI;AACxC,QAAM,MAAM,OAAO,OAAO;AAC1B,QAAM,MAAM,OAAO,OAAO,MAAM;AAEhC,QAAM,UAAmC;AAAA,IACvC,KAAK,OAAO;AAAA,IACZ,UAAU,OAAO,YAAY,gBAAgB,OAAO,IAAI;AAAA,IACxD;AAAA,IACA;AAAA,IACA,QAAQ,OAAO;AAAA,IACf,KAAK,OAAO;AAAA,EACd;AAEA,MAAI,OAAO,YAAY,QAAW;AAChC,YAAQ,SAAS,IAAI,OAAO;AAAA,EAC9B;AAGA,QAAM,gBAAgB,OAAO,KAAK,OAAO,EACtC,KAAK,EACL,OAAgC,CAAC,KAAK,QAAQ;AAC7C,QAAI,GAAG,IAAI,QAAQ,GAAG;AACtB,WAAO;AAAA,EACT,GAAG,CAAC,CAAC;AAEP,QAAM,cAAc,KAAK,UAAU,aAAa;AAChD,QAAM,eAAe,IAAI,YAAY,EAAE,OAAO,WAAW;AACzD,QAAM,gBAAgB,gBAAgB,YAAY;AAElD,QAAM,YAAY,MAAM,OAAO,YAAY,aAAa;AAExD,SAAO,cAAc,aAAa,IAAI,SAAS;AACjD;","names":[]}
|
|
@@ -0,0 +1,150 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
+
var __export = (target, all) => {
|
|
7
|
+
for (var name in all)
|
|
8
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
9
|
+
};
|
|
10
|
+
var __copyProps = (to, from, except, desc) => {
|
|
11
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
12
|
+
for (let key of __getOwnPropNames(from))
|
|
13
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
14
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
15
|
+
}
|
|
16
|
+
return to;
|
|
17
|
+
};
|
|
18
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
19
|
+
var web3_signed_exports = {};
|
|
20
|
+
__export(web3_signed_exports, {
|
|
21
|
+
parseWeb3SignedHeader: () => parseWeb3SignedHeader,
|
|
22
|
+
verifyWeb3Signed: () => verifyWeb3Signed
|
|
23
|
+
});
|
|
24
|
+
module.exports = __toCommonJS(web3_signed_exports);
|
|
25
|
+
var import_viem = require("viem");
|
|
26
|
+
var import_encoding = require("../utils/encoding");
|
|
27
|
+
var import_errors = require("./errors");
|
|
28
|
+
var import_web3_signed_builder = require("./web3-signed-builder");
|
|
29
|
+
const WEB3_SIGNED_PREFIX = "Web3Signed ";
|
|
30
|
+
const CLOCK_SKEW_SECONDS = 60;
|
|
31
|
+
function base64urlDecode(input) {
|
|
32
|
+
let base64 = input.replace(/-/g, "+").replace(/_/g, "/");
|
|
33
|
+
const padLength = (4 - base64.length % 4) % 4;
|
|
34
|
+
base64 += "=".repeat(padLength);
|
|
35
|
+
return new TextDecoder().decode((0, import_encoding.fromBase64)(base64));
|
|
36
|
+
}
|
|
37
|
+
function isFiniteNumber(value) {
|
|
38
|
+
return typeof value === "number" && Number.isFinite(value);
|
|
39
|
+
}
|
|
40
|
+
function parsePayload(value) {
|
|
41
|
+
if (value === null || typeof value !== "object" || Array.isArray(value)) {
|
|
42
|
+
throw new import_errors.InvalidSignatureError({ reason: "Invalid payload shape" });
|
|
43
|
+
}
|
|
44
|
+
const payload = value;
|
|
45
|
+
if (typeof payload["aud"] !== "string" || typeof payload["method"] !== "string" || typeof payload["uri"] !== "string" || typeof payload["bodyHash"] !== "string" || !isFiniteNumber(payload["iat"]) || !isFiniteNumber(payload["exp"])) {
|
|
46
|
+
throw new import_errors.InvalidSignatureError({ reason: "Invalid payload claims" });
|
|
47
|
+
}
|
|
48
|
+
if (payload["grantId"] !== void 0 && typeof payload["grantId"] !== "string") {
|
|
49
|
+
throw new import_errors.InvalidSignatureError({ reason: "Invalid grantId claim" });
|
|
50
|
+
}
|
|
51
|
+
return {
|
|
52
|
+
aud: payload["aud"],
|
|
53
|
+
method: payload["method"],
|
|
54
|
+
uri: payload["uri"],
|
|
55
|
+
bodyHash: payload["bodyHash"],
|
|
56
|
+
iat: payload["iat"],
|
|
57
|
+
exp: payload["exp"],
|
|
58
|
+
grantId: payload["grantId"]
|
|
59
|
+
};
|
|
60
|
+
}
|
|
61
|
+
function parseWeb3SignedHeader(headerValue) {
|
|
62
|
+
if (!headerValue) {
|
|
63
|
+
throw new import_errors.MissingAuthError();
|
|
64
|
+
}
|
|
65
|
+
if (!headerValue.startsWith(WEB3_SIGNED_PREFIX)) {
|
|
66
|
+
throw new import_errors.InvalidSignatureError({ reason: "Missing Web3Signed prefix" });
|
|
67
|
+
}
|
|
68
|
+
const value = headerValue.slice(WEB3_SIGNED_PREFIX.length);
|
|
69
|
+
const dotIndex = value.indexOf(".");
|
|
70
|
+
if (dotIndex === -1 || dotIndex === 0 || dotIndex === value.length - 1) {
|
|
71
|
+
throw new import_errors.InvalidSignatureError({ reason: "Invalid header format" });
|
|
72
|
+
}
|
|
73
|
+
const payloadBase64 = value.slice(0, dotIndex);
|
|
74
|
+
const signatureStr = value.slice(dotIndex + 1);
|
|
75
|
+
if (!signatureStr.startsWith("0x")) {
|
|
76
|
+
throw new import_errors.InvalidSignatureError({ reason: "Invalid signature format" });
|
|
77
|
+
}
|
|
78
|
+
let payload;
|
|
79
|
+
try {
|
|
80
|
+
const decoded = base64urlDecode(payloadBase64);
|
|
81
|
+
payload = parsePayload(JSON.parse(decoded));
|
|
82
|
+
} catch (err) {
|
|
83
|
+
if (err instanceof import_errors.InvalidSignatureError) throw err;
|
|
84
|
+
throw new import_errors.InvalidSignatureError({ reason: "Invalid payload encoding" });
|
|
85
|
+
}
|
|
86
|
+
return {
|
|
87
|
+
payloadBase64,
|
|
88
|
+
payload,
|
|
89
|
+
signature: signatureStr
|
|
90
|
+
};
|
|
91
|
+
}
|
|
92
|
+
async function verifyWeb3Signed(params) {
|
|
93
|
+
const { payloadBase64, payload, signature } = parseWeb3SignedHeader(
|
|
94
|
+
params.headerValue
|
|
95
|
+
);
|
|
96
|
+
let signer;
|
|
97
|
+
try {
|
|
98
|
+
signer = await (0, import_viem.recoverMessageAddress)({
|
|
99
|
+
message: payloadBase64,
|
|
100
|
+
signature
|
|
101
|
+
});
|
|
102
|
+
} catch {
|
|
103
|
+
throw new import_errors.InvalidSignatureError({ reason: "Signature recovery failed" });
|
|
104
|
+
}
|
|
105
|
+
if (payload.aud !== params.expectedOrigin) {
|
|
106
|
+
throw new import_errors.InvalidSignatureError({
|
|
107
|
+
reason: "Audience mismatch",
|
|
108
|
+
expected: params.expectedOrigin,
|
|
109
|
+
actual: payload.aud
|
|
110
|
+
});
|
|
111
|
+
}
|
|
112
|
+
if (payload.method !== params.expectedMethod) {
|
|
113
|
+
throw new import_errors.InvalidSignatureError({
|
|
114
|
+
reason: "Method mismatch",
|
|
115
|
+
expected: params.expectedMethod,
|
|
116
|
+
actual: payload.method
|
|
117
|
+
});
|
|
118
|
+
}
|
|
119
|
+
if (payload.uri !== params.expectedPath) {
|
|
120
|
+
throw new import_errors.InvalidSignatureError({
|
|
121
|
+
reason: "URI mismatch",
|
|
122
|
+
expected: params.expectedPath,
|
|
123
|
+
actual: payload.uri
|
|
124
|
+
});
|
|
125
|
+
}
|
|
126
|
+
if (params.bodyBytes !== void 0) {
|
|
127
|
+
const expectedBodyHash = (0, import_web3_signed_builder.computeBodyHash)(params.bodyBytes);
|
|
128
|
+
if (payload.bodyHash !== expectedBodyHash) {
|
|
129
|
+
throw new import_errors.InvalidSignatureError({
|
|
130
|
+
reason: "Body hash mismatch",
|
|
131
|
+
expected: expectedBodyHash,
|
|
132
|
+
actual: payload.bodyHash
|
|
133
|
+
});
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
const now = params.now ?? Math.floor(Date.now() / 1e3);
|
|
137
|
+
if (payload.exp < now - CLOCK_SKEW_SECONDS) {
|
|
138
|
+
throw new import_errors.ExpiredTokenError({ reason: "Token expired" });
|
|
139
|
+
}
|
|
140
|
+
if (payload.iat > now + CLOCK_SKEW_SECONDS) {
|
|
141
|
+
throw new import_errors.ExpiredTokenError({ reason: "Token issued in the future" });
|
|
142
|
+
}
|
|
143
|
+
return { signer, payload };
|
|
144
|
+
}
|
|
145
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
146
|
+
0 && (module.exports = {
|
|
147
|
+
parseWeb3SignedHeader,
|
|
148
|
+
verifyWeb3Signed
|
|
149
|
+
});
|
|
150
|
+
//# sourceMappingURL=web3-signed.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/auth/web3-signed.ts"],"sourcesContent":["/**\n * Web3Signed Authorization header parsing and verification.\n *\n * @remarks\n * Header format: `\"Web3Signed {base64url(payload)}.{signature}\"`.\n * Payload is JSON with fields `aud`, `method`, `uri`, `bodyHash`, `iat`, `exp`,\n * and optional `grantId`. The signature is EIP-191 over the base64url-encoded\n * payload string.\n *\n * Ported from `personal-server-ts` (`packages/core/src/auth/web3-signed.ts`).\n * Adjusted to be isomorphic (no `Buffer`) and to use SDK-local error types.\n *\n * @category Auth\n */\n\nimport { recoverMessageAddress } from \"viem\";\nimport { fromBase64 } from \"../utils/encoding\";\nimport {\n MissingAuthError,\n InvalidSignatureError,\n ExpiredTokenError,\n} from \"./errors\";\nimport { computeBodyHash } from \"./web3-signed-builder\";\n\nexport interface Web3SignedPayload {\n aud: string;\n method: string;\n uri: string;\n bodyHash: string;\n iat: number;\n exp: number;\n grantId?: string;\n}\n\nexport interface VerifiedAuth {\n signer: `0x${string}`;\n payload: Web3SignedPayload;\n}\n\nconst WEB3_SIGNED_PREFIX = \"Web3Signed \";\nconst CLOCK_SKEW_SECONDS = 60;\n\n/** Decode a base64url string (no padding) to UTF-8. */\nfunction base64urlDecode(input: string): string {\n let base64 = input.replace(/-/g, \"+\").replace(/_/g, \"/\");\n const padLength = (4 - (base64.length % 4)) % 4;\n base64 += \"=\".repeat(padLength);\n return new TextDecoder().decode(fromBase64(base64));\n}\n\nfunction isFiniteNumber(value: unknown): value is number {\n return typeof value === \"number\" && Number.isFinite(value);\n}\n\nfunction parsePayload(value: unknown): Web3SignedPayload {\n if (value === null || typeof value !== \"object\" || Array.isArray(value)) {\n throw new InvalidSignatureError({ reason: \"Invalid payload shape\" });\n }\n\n const payload = value as Record<string, unknown>;\n if (\n typeof payload[\"aud\"] !== \"string\" ||\n typeof payload[\"method\"] !== \"string\" ||\n typeof payload[\"uri\"] !== \"string\" ||\n typeof payload[\"bodyHash\"] !== \"string\" ||\n !isFiniteNumber(payload[\"iat\"]) ||\n !isFiniteNumber(payload[\"exp\"])\n ) {\n throw new InvalidSignatureError({ reason: \"Invalid payload claims\" });\n }\n\n if (\n payload[\"grantId\"] !== undefined &&\n typeof payload[\"grantId\"] !== \"string\"\n ) {\n throw new InvalidSignatureError({ reason: \"Invalid grantId claim\" });\n }\n\n return {\n aud: payload[\"aud\"],\n method: payload[\"method\"],\n uri: payload[\"uri\"],\n bodyHash: payload[\"bodyHash\"],\n iat: payload[\"iat\"],\n exp: payload[\"exp\"],\n grantId: payload[\"grantId\"],\n };\n}\n\n/**\n * Parse a `\"Web3Signed <base64url>.<signature>\"` header value.\n *\n * @throws {MissingAuthError} If the header is missing or empty.\n * @throws {InvalidSignatureError} If the format is invalid.\n */\nexport function parseWeb3SignedHeader(headerValue: string | undefined): {\n payloadBase64: string;\n payload: Web3SignedPayload;\n signature: `0x${string}`;\n} {\n if (!headerValue) {\n throw new MissingAuthError();\n }\n\n if (!headerValue.startsWith(WEB3_SIGNED_PREFIX)) {\n throw new InvalidSignatureError({ reason: \"Missing Web3Signed prefix\" });\n }\n\n const value = headerValue.slice(WEB3_SIGNED_PREFIX.length);\n const dotIndex = value.indexOf(\".\");\n if (dotIndex === -1 || dotIndex === 0 || dotIndex === value.length - 1) {\n throw new InvalidSignatureError({ reason: \"Invalid header format\" });\n }\n\n const payloadBase64 = value.slice(0, dotIndex);\n const signatureStr = value.slice(dotIndex + 1);\n\n if (!signatureStr.startsWith(\"0x\")) {\n throw new InvalidSignatureError({ reason: \"Invalid signature format\" });\n }\n\n let payload: Web3SignedPayload;\n try {\n const decoded = base64urlDecode(payloadBase64);\n payload = parsePayload(JSON.parse(decoded));\n } catch (err) {\n if (err instanceof InvalidSignatureError) throw err;\n throw new InvalidSignatureError({ reason: \"Invalid payload encoding\" });\n }\n\n return {\n payloadBase64,\n payload,\n signature: signatureStr as `0x${string}`,\n };\n}\n\n/**\n * Full verification: parse header, recover signer via EIP-191, check claims.\n *\n * @remarks\n * Steps:\n * 1. Parse header to base64url + signature.\n * 2. Recover signer via {@link recoverMessageAddress} (EIP-191) over the base64url payload string.\n * 3. Check `aud === expectedOrigin`, `method === expectedMethod`, `uri === expectedPath`.\n * 4. Optionally check `bodyHash` against `bodyBytes`.\n * 5. Check `iat`/`exp` within a 60s clock skew.\n *\n * @returns The recovered signer address and parsed payload.\n */\nexport async function verifyWeb3Signed(params: {\n headerValue: string | undefined;\n expectedOrigin: string;\n expectedMethod: string;\n expectedPath: string;\n bodyBytes?: Uint8Array;\n now?: number;\n}): Promise<VerifiedAuth> {\n const { payloadBase64, payload, signature } = parseWeb3SignedHeader(\n params.headerValue,\n );\n\n let signer: `0x${string}`;\n try {\n signer = await recoverMessageAddress({\n message: payloadBase64,\n signature,\n });\n } catch {\n throw new InvalidSignatureError({ reason: \"Signature recovery failed\" });\n }\n\n if (payload.aud !== params.expectedOrigin) {\n throw new InvalidSignatureError({\n reason: \"Audience mismatch\",\n expected: params.expectedOrigin,\n actual: payload.aud,\n });\n }\n\n if (payload.method !== params.expectedMethod) {\n throw new InvalidSignatureError({\n reason: \"Method mismatch\",\n expected: params.expectedMethod,\n actual: payload.method,\n });\n }\n\n if (payload.uri !== params.expectedPath) {\n throw new InvalidSignatureError({\n reason: \"URI mismatch\",\n expected: params.expectedPath,\n actual: payload.uri,\n });\n }\n\n if (params.bodyBytes !== undefined) {\n const expectedBodyHash = computeBodyHash(params.bodyBytes);\n if (payload.bodyHash !== expectedBodyHash) {\n throw new InvalidSignatureError({\n reason: \"Body hash mismatch\",\n expected: expectedBodyHash,\n actual: payload.bodyHash,\n });\n }\n }\n\n const now = params.now ?? Math.floor(Date.now() / 1000);\n\n if (payload.exp < now - CLOCK_SKEW_SECONDS) {\n throw new ExpiredTokenError({ reason: \"Token expired\" });\n }\n\n if (payload.iat > now + CLOCK_SKEW_SECONDS) {\n throw new ExpiredTokenError({ reason: \"Token issued in the future\" });\n }\n\n return { signer, payload };\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAeA,kBAAsC;AACtC,sBAA2B;AAC3B,oBAIO;AACP,iCAAgC;AAiBhC,MAAM,qBAAqB;AAC3B,MAAM,qBAAqB;AAG3B,SAAS,gBAAgB,OAAuB;AAC9C,MAAI,SAAS,MAAM,QAAQ,MAAM,GAAG,EAAE,QAAQ,MAAM,GAAG;AACvD,QAAM,aAAa,IAAK,OAAO,SAAS,KAAM;AAC9C,YAAU,IAAI,OAAO,SAAS;AAC9B,SAAO,IAAI,YAAY,EAAE,WAAO,4BAAW,MAAM,CAAC;AACpD;AAEA,SAAS,eAAe,OAAiC;AACvD,SAAO,OAAO,UAAU,YAAY,OAAO,SAAS,KAAK;AAC3D;AAEA,SAAS,aAAa,OAAmC;AACvD,MAAI,UAAU,QAAQ,OAAO,UAAU,YAAY,MAAM,QAAQ,KAAK,GAAG;AACvE,UAAM,IAAI,oCAAsB,EAAE,QAAQ,wBAAwB,CAAC;AAAA,EACrE;AAEA,QAAM,UAAU;AAChB,MACE,OAAO,QAAQ,KAAK,MAAM,YAC1B,OAAO,QAAQ,QAAQ,MAAM,YAC7B,OAAO,QAAQ,KAAK,MAAM,YAC1B,OAAO,QAAQ,UAAU,MAAM,YAC/B,CAAC,eAAe,QAAQ,KAAK,CAAC,KAC9B,CAAC,eAAe,QAAQ,KAAK,CAAC,GAC9B;AACA,UAAM,IAAI,oCAAsB,EAAE,QAAQ,yBAAyB,CAAC;AAAA,EACtE;AAEA,MACE,QAAQ,SAAS,MAAM,UACvB,OAAO,QAAQ,SAAS,MAAM,UAC9B;AACA,UAAM,IAAI,oCAAsB,EAAE,QAAQ,wBAAwB,CAAC;AAAA,EACrE;AAEA,SAAO;AAAA,IACL,KAAK,QAAQ,KAAK;AAAA,IAClB,QAAQ,QAAQ,QAAQ;AAAA,IACxB,KAAK,QAAQ,KAAK;AAAA,IAClB,UAAU,QAAQ,UAAU;AAAA,IAC5B,KAAK,QAAQ,KAAK;AAAA,IAClB,KAAK,QAAQ,KAAK;AAAA,IAClB,SAAS,QAAQ,SAAS;AAAA,EAC5B;AACF;AAQO,SAAS,sBAAsB,aAIpC;AACA,MAAI,CAAC,aAAa;AAChB,UAAM,IAAI,+BAAiB;AAAA,EAC7B;AAEA,MAAI,CAAC,YAAY,WAAW,kBAAkB,GAAG;AAC/C,UAAM,IAAI,oCAAsB,EAAE,QAAQ,4BAA4B,CAAC;AAAA,EACzE;AAEA,QAAM,QAAQ,YAAY,MAAM,mBAAmB,MAAM;AACzD,QAAM,WAAW,MAAM,QAAQ,GAAG;AAClC,MAAI,aAAa,MAAM,aAAa,KAAK,aAAa,MAAM,SAAS,GAAG;AACtE,UAAM,IAAI,oCAAsB,EAAE,QAAQ,wBAAwB,CAAC;AAAA,EACrE;AAEA,QAAM,gBAAgB,MAAM,MAAM,GAAG,QAAQ;AAC7C,QAAM,eAAe,MAAM,MAAM,WAAW,CAAC;AAE7C,MAAI,CAAC,aAAa,WAAW,IAAI,GAAG;AAClC,UAAM,IAAI,oCAAsB,EAAE,QAAQ,2BAA2B,CAAC;AAAA,EACxE;AAEA,MAAI;AACJ,MAAI;AACF,UAAM,UAAU,gBAAgB,aAAa;AAC7C,cAAU,aAAa,KAAK,MAAM,OAAO,CAAC;AAAA,EAC5C,SAAS,KAAK;AACZ,QAAI,eAAe,oCAAuB,OAAM;AAChD,UAAM,IAAI,oCAAsB,EAAE,QAAQ,2BAA2B,CAAC;AAAA,EACxE;AAEA,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA,WAAW;AAAA,EACb;AACF;AAeA,eAAsB,iBAAiB,QAOb;AACxB,QAAM,EAAE,eAAe,SAAS,UAAU,IAAI;AAAA,IAC5C,OAAO;AAAA,EACT;AAEA,MAAI;AACJ,MAAI;AACF,aAAS,UAAM,mCAAsB;AAAA,MACnC,SAAS;AAAA,MACT;AAAA,IACF,CAAC;AAAA,EACH,QAAQ;AACN,UAAM,IAAI,oCAAsB,EAAE,QAAQ,4BAA4B,CAAC;AAAA,EACzE;AAEA,MAAI,QAAQ,QAAQ,OAAO,gBAAgB;AACzC,UAAM,IAAI,oCAAsB;AAAA,MAC9B,QAAQ;AAAA,MACR,UAAU,OAAO;AAAA,MACjB,QAAQ,QAAQ;AAAA,IAClB,CAAC;AAAA,EACH;AAEA,MAAI,QAAQ,WAAW,OAAO,gBAAgB;AAC5C,UAAM,IAAI,oCAAsB;AAAA,MAC9B,QAAQ;AAAA,MACR,UAAU,OAAO;AAAA,MACjB,QAAQ,QAAQ;AAAA,IAClB,CAAC;AAAA,EACH;AAEA,MAAI,QAAQ,QAAQ,OAAO,cAAc;AACvC,UAAM,IAAI,oCAAsB;AAAA,MAC9B,QAAQ;AAAA,MACR,UAAU,OAAO;AAAA,MACjB,QAAQ,QAAQ;AAAA,IAClB,CAAC;AAAA,EACH;AAEA,MAAI,OAAO,cAAc,QAAW;AAClC,UAAM,uBAAmB,4CAAgB,OAAO,SAAS;AACzD,QAAI,QAAQ,aAAa,kBAAkB;AACzC,YAAM,IAAI,oCAAsB;AAAA,QAC9B,QAAQ;AAAA,QACR,UAAU;AAAA,QACV,QAAQ,QAAQ;AAAA,MAClB,CAAC;AAAA,IACH;AAAA,EACF;AAEA,QAAM,MAAM,OAAO,OAAO,KAAK,MAAM,KAAK,IAAI,IAAI,GAAI;AAEtD,MAAI,QAAQ,MAAM,MAAM,oBAAoB;AAC1C,UAAM,IAAI,gCAAkB,EAAE,QAAQ,gBAAgB,CAAC;AAAA,EACzD;AAEA,MAAI,QAAQ,MAAM,MAAM,oBAAoB;AAC1C,UAAM,IAAI,gCAAkB,EAAE,QAAQ,6BAA6B,CAAC;AAAA,EACtE;AAEA,SAAO,EAAE,QAAQ,QAAQ;AAC3B;","names":[]}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Web3Signed Authorization header parsing and verification.
|
|
3
|
+
*
|
|
4
|
+
* @remarks
|
|
5
|
+
* Header format: `"Web3Signed {base64url(payload)}.{signature}"`.
|
|
6
|
+
* Payload is JSON with fields `aud`, `method`, `uri`, `bodyHash`, `iat`, `exp`,
|
|
7
|
+
* and optional `grantId`. The signature is EIP-191 over the base64url-encoded
|
|
8
|
+
* payload string.
|
|
9
|
+
*
|
|
10
|
+
* Ported from `personal-server-ts` (`packages/core/src/auth/web3-signed.ts`).
|
|
11
|
+
* Adjusted to be isomorphic (no `Buffer`) and to use SDK-local error types.
|
|
12
|
+
*
|
|
13
|
+
* @category Auth
|
|
14
|
+
*/
|
|
15
|
+
export interface Web3SignedPayload {
|
|
16
|
+
aud: string;
|
|
17
|
+
method: string;
|
|
18
|
+
uri: string;
|
|
19
|
+
bodyHash: string;
|
|
20
|
+
iat: number;
|
|
21
|
+
exp: number;
|
|
22
|
+
grantId?: string;
|
|
23
|
+
}
|
|
24
|
+
export interface VerifiedAuth {
|
|
25
|
+
signer: `0x${string}`;
|
|
26
|
+
payload: Web3SignedPayload;
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Parse a `"Web3Signed <base64url>.<signature>"` header value.
|
|
30
|
+
*
|
|
31
|
+
* @throws {MissingAuthError} If the header is missing or empty.
|
|
32
|
+
* @throws {InvalidSignatureError} If the format is invalid.
|
|
33
|
+
*/
|
|
34
|
+
export declare function parseWeb3SignedHeader(headerValue: string | undefined): {
|
|
35
|
+
payloadBase64: string;
|
|
36
|
+
payload: Web3SignedPayload;
|
|
37
|
+
signature: `0x${string}`;
|
|
38
|
+
};
|
|
39
|
+
/**
|
|
40
|
+
* Full verification: parse header, recover signer via EIP-191, check claims.
|
|
41
|
+
*
|
|
42
|
+
* @remarks
|
|
43
|
+
* Steps:
|
|
44
|
+
* 1. Parse header to base64url + signature.
|
|
45
|
+
* 2. Recover signer via {@link recoverMessageAddress} (EIP-191) over the base64url payload string.
|
|
46
|
+
* 3. Check `aud === expectedOrigin`, `method === expectedMethod`, `uri === expectedPath`.
|
|
47
|
+
* 4. Optionally check `bodyHash` against `bodyBytes`.
|
|
48
|
+
* 5. Check `iat`/`exp` within a 60s clock skew.
|
|
49
|
+
*
|
|
50
|
+
* @returns The recovered signer address and parsed payload.
|
|
51
|
+
*/
|
|
52
|
+
export declare function verifyWeb3Signed(params: {
|
|
53
|
+
headerValue: string | undefined;
|
|
54
|
+
expectedOrigin: string;
|
|
55
|
+
expectedMethod: string;
|
|
56
|
+
expectedPath: string;
|
|
57
|
+
bodyBytes?: Uint8Array;
|
|
58
|
+
now?: number;
|
|
59
|
+
}): Promise<VerifiedAuth>;
|
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
import { recoverMessageAddress } from "viem";
|
|
2
|
+
import { fromBase64 } from "../utils/encoding";
|
|
3
|
+
import {
|
|
4
|
+
MissingAuthError,
|
|
5
|
+
InvalidSignatureError,
|
|
6
|
+
ExpiredTokenError
|
|
7
|
+
} from "./errors";
|
|
8
|
+
import { computeBodyHash } from "./web3-signed-builder";
|
|
9
|
+
const WEB3_SIGNED_PREFIX = "Web3Signed ";
|
|
10
|
+
const CLOCK_SKEW_SECONDS = 60;
|
|
11
|
+
function base64urlDecode(input) {
|
|
12
|
+
let base64 = input.replace(/-/g, "+").replace(/_/g, "/");
|
|
13
|
+
const padLength = (4 - base64.length % 4) % 4;
|
|
14
|
+
base64 += "=".repeat(padLength);
|
|
15
|
+
return new TextDecoder().decode(fromBase64(base64));
|
|
16
|
+
}
|
|
17
|
+
function isFiniteNumber(value) {
|
|
18
|
+
return typeof value === "number" && Number.isFinite(value);
|
|
19
|
+
}
|
|
20
|
+
function parsePayload(value) {
|
|
21
|
+
if (value === null || typeof value !== "object" || Array.isArray(value)) {
|
|
22
|
+
throw new InvalidSignatureError({ reason: "Invalid payload shape" });
|
|
23
|
+
}
|
|
24
|
+
const payload = value;
|
|
25
|
+
if (typeof payload["aud"] !== "string" || typeof payload["method"] !== "string" || typeof payload["uri"] !== "string" || typeof payload["bodyHash"] !== "string" || !isFiniteNumber(payload["iat"]) || !isFiniteNumber(payload["exp"])) {
|
|
26
|
+
throw new InvalidSignatureError({ reason: "Invalid payload claims" });
|
|
27
|
+
}
|
|
28
|
+
if (payload["grantId"] !== void 0 && typeof payload["grantId"] !== "string") {
|
|
29
|
+
throw new InvalidSignatureError({ reason: "Invalid grantId claim" });
|
|
30
|
+
}
|
|
31
|
+
return {
|
|
32
|
+
aud: payload["aud"],
|
|
33
|
+
method: payload["method"],
|
|
34
|
+
uri: payload["uri"],
|
|
35
|
+
bodyHash: payload["bodyHash"],
|
|
36
|
+
iat: payload["iat"],
|
|
37
|
+
exp: payload["exp"],
|
|
38
|
+
grantId: payload["grantId"]
|
|
39
|
+
};
|
|
40
|
+
}
|
|
41
|
+
function parseWeb3SignedHeader(headerValue) {
|
|
42
|
+
if (!headerValue) {
|
|
43
|
+
throw new MissingAuthError();
|
|
44
|
+
}
|
|
45
|
+
if (!headerValue.startsWith(WEB3_SIGNED_PREFIX)) {
|
|
46
|
+
throw new InvalidSignatureError({ reason: "Missing Web3Signed prefix" });
|
|
47
|
+
}
|
|
48
|
+
const value = headerValue.slice(WEB3_SIGNED_PREFIX.length);
|
|
49
|
+
const dotIndex = value.indexOf(".");
|
|
50
|
+
if (dotIndex === -1 || dotIndex === 0 || dotIndex === value.length - 1) {
|
|
51
|
+
throw new InvalidSignatureError({ reason: "Invalid header format" });
|
|
52
|
+
}
|
|
53
|
+
const payloadBase64 = value.slice(0, dotIndex);
|
|
54
|
+
const signatureStr = value.slice(dotIndex + 1);
|
|
55
|
+
if (!signatureStr.startsWith("0x")) {
|
|
56
|
+
throw new InvalidSignatureError({ reason: "Invalid signature format" });
|
|
57
|
+
}
|
|
58
|
+
let payload;
|
|
59
|
+
try {
|
|
60
|
+
const decoded = base64urlDecode(payloadBase64);
|
|
61
|
+
payload = parsePayload(JSON.parse(decoded));
|
|
62
|
+
} catch (err) {
|
|
63
|
+
if (err instanceof InvalidSignatureError) throw err;
|
|
64
|
+
throw new InvalidSignatureError({ reason: "Invalid payload encoding" });
|
|
65
|
+
}
|
|
66
|
+
return {
|
|
67
|
+
payloadBase64,
|
|
68
|
+
payload,
|
|
69
|
+
signature: signatureStr
|
|
70
|
+
};
|
|
71
|
+
}
|
|
72
|
+
async function verifyWeb3Signed(params) {
|
|
73
|
+
const { payloadBase64, payload, signature } = parseWeb3SignedHeader(
|
|
74
|
+
params.headerValue
|
|
75
|
+
);
|
|
76
|
+
let signer;
|
|
77
|
+
try {
|
|
78
|
+
signer = await recoverMessageAddress({
|
|
79
|
+
message: payloadBase64,
|
|
80
|
+
signature
|
|
81
|
+
});
|
|
82
|
+
} catch {
|
|
83
|
+
throw new InvalidSignatureError({ reason: "Signature recovery failed" });
|
|
84
|
+
}
|
|
85
|
+
if (payload.aud !== params.expectedOrigin) {
|
|
86
|
+
throw new InvalidSignatureError({
|
|
87
|
+
reason: "Audience mismatch",
|
|
88
|
+
expected: params.expectedOrigin,
|
|
89
|
+
actual: payload.aud
|
|
90
|
+
});
|
|
91
|
+
}
|
|
92
|
+
if (payload.method !== params.expectedMethod) {
|
|
93
|
+
throw new InvalidSignatureError({
|
|
94
|
+
reason: "Method mismatch",
|
|
95
|
+
expected: params.expectedMethod,
|
|
96
|
+
actual: payload.method
|
|
97
|
+
});
|
|
98
|
+
}
|
|
99
|
+
if (payload.uri !== params.expectedPath) {
|
|
100
|
+
throw new InvalidSignatureError({
|
|
101
|
+
reason: "URI mismatch",
|
|
102
|
+
expected: params.expectedPath,
|
|
103
|
+
actual: payload.uri
|
|
104
|
+
});
|
|
105
|
+
}
|
|
106
|
+
if (params.bodyBytes !== void 0) {
|
|
107
|
+
const expectedBodyHash = computeBodyHash(params.bodyBytes);
|
|
108
|
+
if (payload.bodyHash !== expectedBodyHash) {
|
|
109
|
+
throw new InvalidSignatureError({
|
|
110
|
+
reason: "Body hash mismatch",
|
|
111
|
+
expected: expectedBodyHash,
|
|
112
|
+
actual: payload.bodyHash
|
|
113
|
+
});
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
const now = params.now ?? Math.floor(Date.now() / 1e3);
|
|
117
|
+
if (payload.exp < now - CLOCK_SKEW_SECONDS) {
|
|
118
|
+
throw new ExpiredTokenError({ reason: "Token expired" });
|
|
119
|
+
}
|
|
120
|
+
if (payload.iat > now + CLOCK_SKEW_SECONDS) {
|
|
121
|
+
throw new ExpiredTokenError({ reason: "Token issued in the future" });
|
|
122
|
+
}
|
|
123
|
+
return { signer, payload };
|
|
124
|
+
}
|
|
125
|
+
export {
|
|
126
|
+
parseWeb3SignedHeader,
|
|
127
|
+
verifyWeb3Signed
|
|
128
|
+
};
|
|
129
|
+
//# sourceMappingURL=web3-signed.js.map
|