ox 0.0.1 → 0.1.0
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/Abi/package.json +6 -0
- package/Abi.ts +163 -0
- package/AbiConstructor/package.json +6 -0
- package/AbiConstructor.ts +413 -0
- package/AbiError/package.json +6 -0
- package/AbiError.ts +719 -0
- package/AbiEvent/package.json +6 -0
- package/AbiEvent.ts +1284 -0
- package/AbiFunction/package.json +6 -0
- package/AbiFunction.ts +813 -0
- package/AbiItem/package.json +6 -0
- package/AbiItem.ts +779 -0
- package/AbiParameters/package.json +6 -0
- package/AbiParameters.ts +712 -0
- package/AccessList/package.json +6 -0
- package/AccessList.ts +124 -0
- package/AccountProof/package.json +6 -0
- package/AccountProof.ts +35 -0
- package/Address/package.json +6 -0
- package/Address.ts +359 -0
- package/AesGcm/package.json +6 -0
- package/AesGcm.ts +220 -0
- package/Authorization/package.json +6 -0
- package/Authorization.ts +639 -0
- package/Base58/package.json +6 -0
- package/Base58.ts +180 -0
- package/Base64/package.json +6 -0
- package/Base64.ts +333 -0
- package/Blobs/package.json +6 -0
- package/Blobs.ts +982 -0
- package/Block/package.json +6 -0
- package/Block.ts +317 -0
- package/Bloom/package.json +6 -0
- package/Bloom.ts +80 -0
- package/Bls/package.json +6 -0
- package/Bls.ts +496 -0
- package/BlsPoint/package.json +6 -0
- package/BlsPoint.ts +232 -0
- package/Bytes/package.json +6 -0
- package/Bytes.ts +963 -0
- package/CHANGELOG.md +7 -0
- package/Caches/package.json +6 -0
- package/Caches.ts +21 -0
- package/ContractAddress/package.json +6 -0
- package/ContractAddress.ts +181 -0
- package/Ens/package.json +6 -0
- package/Ens.ts +116 -0
- package/Errors/package.json +6 -0
- package/Errors.ts +95 -0
- package/Fee/package.json +6 -0
- package/Fee.ts +57 -0
- package/Filter/package.json +6 -0
- package/Filter.ts +144 -0
- package/Hash/package.json +6 -0
- package/Hash.ts +210 -0
- package/HdKey/package.json +6 -0
- package/HdKey.ts +175 -0
- package/Hex/package.json +6 -0
- package/Hex.ts +1040 -0
- package/Json/package.json +6 -0
- package/Json.ts +84 -0
- package/Kzg/package.json +6 -0
- package/Kzg.ts +51 -0
- package/LICENSE +21 -0
- package/Log/package.json +6 -0
- package/Log.ts +248 -0
- package/Mnemonic/package.json +6 -0
- package/Mnemonic.ts +249 -0
- package/P256/package.json +6 -0
- package/P256.ts +230 -0
- package/PersonalMessage/package.json +6 -0
- package/PersonalMessage.ts +70 -0
- package/Provider/package.json +6 -0
- package/Provider.ts +354 -0
- package/PublicKey/package.json +6 -0
- package/PublicKey.ts +545 -0
- package/README.md +75 -26
- package/Rlp/package.json +6 -0
- package/Rlp.ts +390 -0
- package/RpcRequest/package.json +6 -0
- package/RpcRequest.ts +192 -0
- package/RpcResponse/package.json +6 -0
- package/RpcResponse.ts +389 -0
- package/RpcSchema/package.json +6 -0
- package/RpcSchema.ts +273 -0
- package/RpcTransport/package.json +6 -0
- package/RpcTransport.ts +198 -0
- package/Secp256k1/package.json +6 -0
- package/Secp256k1.ts +304 -0
- package/Signature/package.json +6 -0
- package/Signature.ts +909 -0
- package/Siwe/package.json +6 -0
- package/Siwe.ts +516 -0
- package/Solidity/package.json +6 -0
- package/Solidity.ts +109 -0
- package/Transaction/package.json +6 -0
- package/Transaction.ts +429 -0
- package/TransactionEnvelope/package.json +6 -0
- package/TransactionEnvelope.ts +205 -0
- package/TransactionEnvelopeEip1559/package.json +6 -0
- package/TransactionEnvelopeEip1559.ts +656 -0
- package/TransactionEnvelopeEip2930/package.json +6 -0
- package/TransactionEnvelopeEip2930.ts +624 -0
- package/TransactionEnvelopeEip4844/package.json +6 -0
- package/TransactionEnvelopeEip4844.ts +764 -0
- package/TransactionEnvelopeEip7702/package.json +6 -0
- package/TransactionEnvelopeEip7702.ts +639 -0
- package/TransactionEnvelopeLegacy/package.json +6 -0
- package/TransactionEnvelopeLegacy.ts +674 -0
- package/TransactionReceipt/package.json +6 -0
- package/TransactionReceipt.ts +341 -0
- package/TransactionRequest/package.json +6 -0
- package/TransactionRequest.ts +151 -0
- package/TypedData/package.json +6 -0
- package/TypedData.ts +931 -0
- package/ValidatorData/package.json +6 -0
- package/ValidatorData.ts +87 -0
- package/Value/package.json +6 -0
- package/Value.ts +242 -0
- package/WebAuthnP256/package.json +6 -0
- package/WebAuthnP256.ts +803 -0
- package/WebCryptoP256/package.json +6 -0
- package/WebCryptoP256.ts +190 -0
- package/Withdrawal/package.json +6 -0
- package/Withdrawal.ts +95 -0
- package/_cjs/Abi.js +17 -0
- package/_cjs/Abi.js.map +1 -0
- package/_cjs/AbiConstructor.js +42 -0
- package/_cjs/AbiConstructor.js.map +1 -0
- package/_cjs/AbiError.js +98 -0
- package/_cjs/AbiError.js.map +1 -0
- package/_cjs/AbiEvent.js +338 -0
- package/_cjs/AbiEvent.js.map +1 -0
- package/_cjs/AbiFunction.js +85 -0
- package/_cjs/AbiFunction.js.map +1 -0
- package/_cjs/AbiItem.js +180 -0
- package/_cjs/AbiItem.js.map +1 -0
- package/_cjs/AbiParameters.js +229 -0
- package/_cjs/AbiParameters.js.map +1 -0
- package/_cjs/AccessList.js +51 -0
- package/_cjs/AccessList.js.map +1 -0
- package/_cjs/AccountProof.js +3 -0
- package/_cjs/AccountProof.js.map +1 -0
- package/_cjs/Address.js +121 -0
- package/_cjs/Address.js.map +1 -0
- package/_cjs/AesGcm.js +55 -0
- package/_cjs/AesGcm.js.map +1 -0
- package/_cjs/Authorization.js +99 -0
- package/_cjs/Authorization.js.map +1 -0
- package/_cjs/Base58.js +52 -0
- package/_cjs/Base58.js.map +1 -0
- package/_cjs/Base64.js +76 -0
- package/_cjs/Base64.js.map +1 -0
- package/_cjs/Blobs.js +255 -0
- package/_cjs/Blobs.js.map +1 -0
- package/_cjs/Block.js +87 -0
- package/_cjs/Block.js.map +1 -0
- package/_cjs/Bloom.js +23 -0
- package/_cjs/Bloom.js.map +1 -0
- package/_cjs/Bls.js +79 -0
- package/_cjs/Bls.js.map +1 -0
- package/_cjs/BlsPoint.js +32 -0
- package/_cjs/BlsPoint.js.map +1 -0
- package/_cjs/Bytes.js +279 -0
- package/_cjs/Bytes.js.map +1 -0
- package/_cjs/Caches.js +14 -0
- package/_cjs/Caches.js.map +1 -0
- package/_cjs/ContractAddress.js +39 -0
- package/_cjs/ContractAddress.js.map +1 -0
- package/_cjs/Ens.js +37 -0
- package/_cjs/Ens.js.map +1 -0
- package/_cjs/Errors.js +99 -0
- package/_cjs/Errors.js.map +1 -0
- package/_cjs/Fee.js +3 -0
- package/_cjs/Fee.js.map +1 -0
- package/_cjs/Filter.js +43 -0
- package/_cjs/Filter.js.map +1 -0
- package/_cjs/Hash.js +40 -0
- package/_cjs/Hash.js.map +1 -0
- package/_cjs/HdKey.js +30 -0
- package/_cjs/HdKey.js.map +1 -0
- package/_cjs/Hex.js +324 -0
- package/_cjs/Hex.js.map +1 -0
- package/_cjs/Json.js +25 -0
- package/_cjs/Json.js.map +1 -0
- package/_cjs/Kzg.js +14 -0
- package/_cjs/Kzg.js.map +1 -0
- package/_cjs/Log.js +35 -0
- package/_cjs/Log.js.map +1 -0
- package/_cjs/Mnemonic.js +56 -0
- package/_cjs/Mnemonic.js.map +1 -0
- package/_cjs/P256.js +52 -0
- package/_cjs/P256.js.map +1 -0
- package/_cjs/PersonalMessage.js +16 -0
- package/_cjs/PersonalMessage.js.map +1 -0
- package/_cjs/Provider.js +90 -0
- package/_cjs/Provider.js.map +1 -0
- package/_cjs/PublicKey.js +192 -0
- package/_cjs/PublicKey.js.map +1 -0
- package/_cjs/Rlp.js +179 -0
- package/_cjs/Rlp.js.map +1 -0
- package/_cjs/RpcRequest.js +27 -0
- package/_cjs/RpcRequest.js.map +1 -0
- package/_cjs/RpcResponse.js +368 -0
- package/_cjs/RpcResponse.js.map +1 -0
- package/_cjs/RpcSchema.js +7 -0
- package/_cjs/RpcSchema.js.map +1 -0
- package/_cjs/RpcTransport.js +95 -0
- package/_cjs/RpcTransport.js.map +1 -0
- package/_cjs/Secp256k1.js +57 -0
- package/_cjs/Secp256k1.js.map +1 -0
- package/_cjs/Signature.js +305 -0
- package/_cjs/Signature.js.map +1 -0
- package/_cjs/Siwe.js +231 -0
- package/_cjs/Siwe.js.map +1 -0
- package/_cjs/Solidity.js +104 -0
- package/_cjs/Solidity.js.map +1 -0
- package/_cjs/Transaction.js +106 -0
- package/_cjs/Transaction.js.map +1 -0
- package/_cjs/TransactionEnvelope.js +80 -0
- package/_cjs/TransactionEnvelope.js.map +1 -0
- package/_cjs/TransactionEnvelopeEip1559.js +182 -0
- package/_cjs/TransactionEnvelopeEip1559.js.map +1 -0
- package/_cjs/TransactionEnvelopeEip2930.js +166 -0
- package/_cjs/TransactionEnvelopeEip2930.js.map +1 -0
- package/_cjs/TransactionEnvelopeEip4844.js +224 -0
- package/_cjs/TransactionEnvelopeEip4844.js.map +1 -0
- package/_cjs/TransactionEnvelopeEip7702.js +156 -0
- package/_cjs/TransactionEnvelopeEip7702.js.map +1 -0
- package/_cjs/TransactionEnvelopeLegacy.js +221 -0
- package/_cjs/TransactionEnvelopeLegacy.js.map +1 -0
- package/_cjs/TransactionReceipt.js +76 -0
- package/_cjs/TransactionReceipt.js.map +1 -0
- package/_cjs/TransactionRequest.js +51 -0
- package/_cjs/TransactionRequest.js.map +1 -0
- package/_cjs/TypedData.js +318 -0
- package/_cjs/TypedData.js.map +1 -0
- package/_cjs/ValidatorData.js +16 -0
- package/_cjs/ValidatorData.js.map +1 -0
- package/_cjs/Value.js +96 -0
- package/_cjs/Value.js.map +1 -0
- package/_cjs/WebAuthnP256.js +245 -0
- package/_cjs/WebAuthnP256.js.map +1 -0
- package/_cjs/WebCryptoP256.js +46 -0
- package/_cjs/WebCryptoP256.js.map +1 -0
- package/_cjs/Withdrawal.js +24 -0
- package/_cjs/Withdrawal.js.map +1 -0
- package/_cjs/index.js +66 -0
- package/_cjs/index.js.map +1 -0
- package/_cjs/internal/abi.js +11 -0
- package/_cjs/internal/abi.js.map +1 -0
- package/_cjs/internal/abiConstructor.js +3 -0
- package/_cjs/internal/abiConstructor.js.map +1 -0
- package/_cjs/internal/abiError.js +3 -0
- package/_cjs/internal/abiError.js.map +1 -0
- package/_cjs/internal/abiEvent.js +3 -0
- package/_cjs/internal/abiEvent.js.map +1 -0
- package/_cjs/internal/abiFunction.js +3 -0
- package/_cjs/internal/abiFunction.js.map +1 -0
- package/_cjs/internal/abiItem.js +110 -0
- package/_cjs/internal/abiItem.js.map +1 -0
- package/_cjs/internal/abiParameters.js +376 -0
- package/_cjs/internal/abiParameters.js.map +1 -0
- package/_cjs/internal/base58.js +89 -0
- package/_cjs/internal/base58.js.map +1 -0
- package/_cjs/internal/bytes.js +88 -0
- package/_cjs/internal/bytes.js.map +1 -0
- package/_cjs/internal/cursor.js +210 -0
- package/_cjs/internal/cursor.js.map +1 -0
- package/_cjs/internal/ens.js +43 -0
- package/_cjs/internal/ens.js.map +1 -0
- package/_cjs/internal/errors.js +28 -0
- package/_cjs/internal/errors.js.map +1 -0
- package/_cjs/internal/hdKey.js +19 -0
- package/_cjs/internal/hdKey.js.map +1 -0
- package/_cjs/internal/hex.js +66 -0
- package/_cjs/internal/hex.js.map +1 -0
- package/_cjs/internal/lru.js +34 -0
- package/_cjs/internal/lru.js.map +1 -0
- package/_cjs/internal/mnemonic/wordlists.js +24 -0
- package/_cjs/internal/mnemonic/wordlists.js.map +1 -0
- package/_cjs/internal/promise.js +49 -0
- package/_cjs/internal/promise.js.map +1 -0
- package/_cjs/internal/register.js +3 -0
- package/_cjs/internal/register.js.map +1 -0
- package/_cjs/internal/rpcSchema.js +3 -0
- package/_cjs/internal/rpcSchema.js.map +1 -0
- package/_cjs/internal/rpcSchemas/eth.js +3 -0
- package/_cjs/internal/rpcSchemas/eth.js.map +1 -0
- package/_cjs/internal/rpcSchemas/wallet.js +3 -0
- package/_cjs/internal/rpcSchemas/wallet.js.map +1 -0
- package/_cjs/internal/rpcTransport.js +19 -0
- package/_cjs/internal/rpcTransport.js.map +1 -0
- package/_cjs/internal/types.js +3 -0
- package/_cjs/internal/types.js.map +1 -0
- package/_cjs/internal/uid.js +17 -0
- package/_cjs/internal/uid.js.map +1 -0
- package/_cjs/internal/webauthn.js +28 -0
- package/_cjs/internal/webauthn.js.map +1 -0
- package/_cjs/package.json +1 -0
- package/_cjs/trusted-setups/Paths.js +6 -0
- package/_cjs/trusted-setups/Paths.js.map +1 -0
- package/_cjs/trusted-setups/index.js +5 -0
- package/_cjs/trusted-setups/index.js.map +1 -0
- package/_cjs/trusted-setups/internal/paths.js +11 -0
- package/_cjs/trusted-setups/internal/paths.js.map +1 -0
- package/_cjs/version.js +5 -0
- package/_cjs/version.js.map +1 -0
- package/_cjs/window/index.js +3 -0
- package/_cjs/window/index.js.map +1 -0
- package/_esm/Abi.js +19 -0
- package/_esm/Abi.js.map +1 -0
- package/_esm/AbiConstructor.js +102 -0
- package/_esm/AbiConstructor.js.map +1 -0
- package/_esm/AbiError.js +364 -0
- package/_esm/AbiError.js.map +1 -0
- package/_esm/AbiEvent.js +1038 -0
- package/_esm/AbiEvent.js.map +1 -0
- package/_esm/AbiFunction.js +549 -0
- package/_esm/AbiFunction.js.map +1 -0
- package/_esm/AbiItem.js +574 -0
- package/_esm/AbiItem.js.map +1 -0
- package/_esm/AbiParameters.js +543 -0
- package/_esm/AbiParameters.js.map +1 -0
- package/_esm/AccessList.js +105 -0
- package/_esm/AccessList.js.map +1 -0
- package/_esm/AccountProof.js +2 -0
- package/_esm/AccountProof.js.map +1 -0
- package/_esm/Address.js +268 -0
- package/_esm/Address.js.map +1 -0
- package/_esm/AesGcm.js +124 -0
- package/_esm/AesGcm.js.map +1 -0
- package/_esm/Authorization.js +441 -0
- package/_esm/Authorization.js.map +1 -0
- package/_esm/Base58.js +142 -0
- package/_esm/Base58.js.map +1 -0
- package/_esm/Base64.js +236 -0
- package/_esm/Base64.js.map +1 -0
- package/_esm/Blobs.js +624 -0
- package/_esm/Blobs.js.map +1 -0
- package/_esm/Block.js +177 -0
- package/_esm/Block.js.map +1 -0
- package/_esm/Bloom.js +57 -0
- package/_esm/Bloom.js.map +1 -0
- package/_esm/Bls.js +141 -0
- package/_esm/Bls.js.map +1 -0
- package/_esm/BlsPoint.js +59 -0
- package/_esm/BlsPoint.js.map +1 -0
- package/_esm/Bytes.js +719 -0
- package/_esm/Bytes.js.map +1 -0
- package/_esm/Caches.js +19 -0
- package/_esm/Caches.js.map +1 -0
- package/_esm/ContractAddress.js +110 -0
- package/_esm/ContractAddress.js.map +1 -0
- package/_esm/Ens.js +84 -0
- package/_esm/Ens.js.map +1 -0
- package/_esm/Errors.js +105 -0
- package/_esm/Errors.js.map +1 -0
- package/_esm/Fee.js +2 -0
- package/_esm/Fee.js.map +1 -0
- package/_esm/Filter.js +100 -0
- package/_esm/Filter.js.map +1 -0
- package/_esm/Hash.js +126 -0
- package/_esm/Hash.js.map +1 -0
- package/_esm/HdKey.js +107 -0
- package/_esm/HdKey.js.map +1 -0
- package/_esm/Hex.js +763 -0
- package/_esm/Hex.js.map +1 -0
- package/_esm/Json.js +62 -0
- package/_esm/Json.js.map +1 -0
- package/_esm/Kzg.js +30 -0
- package/_esm/Kzg.js.map +1 -0
- package/_esm/Log.js +181 -0
- package/_esm/Log.js.map +1 -0
- package/_esm/Mnemonic.js +154 -0
- package/_esm/Mnemonic.js.map +1 -0
- package/_esm/P256.js +131 -0
- package/_esm/P256.js.map +1 -0
- package/_esm/PersonalMessage.js +46 -0
- package/_esm/PersonalMessage.js.map +1 -0
- package/_esm/Provider.js +122 -0
- package/_esm/Provider.js.map +1 -0
- package/_esm/PublicKey.js +395 -0
- package/_esm/PublicKey.js.map +1 -0
- package/_esm/Rlp.js +267 -0
- package/_esm/Rlp.js.map +1 -0
- package/_esm/RpcRequest.js +131 -0
- package/_esm/RpcRequest.js.map +1 -0
- package/_esm/RpcResponse.js +457 -0
- package/_esm/RpcResponse.js.map +1 -0
- package/_esm/RpcSchema.js +46 -0
- package/_esm/RpcSchema.js.map +1 -0
- package/_esm/RpcTransport.js +110 -0
- package/_esm/RpcTransport.js.map +1 -0
- package/_esm/Secp256k1.js +173 -0
- package/_esm/Secp256k1.js.map +1 -0
- package/_esm/Signature.js +696 -0
- package/_esm/Signature.js.map +1 -0
- package/_esm/Siwe.js +374 -0
- package/_esm/Siwe.js.map +1 -0
- package/_esm/Solidity.js +104 -0
- package/_esm/Solidity.js.map +1 -0
- package/_esm/Transaction.js +176 -0
- package/_esm/Transaction.js.map +1 -0
- package/_esm/TransactionEnvelope.js +139 -0
- package/_esm/TransactionEnvelope.js.map +1 -0
- package/_esm/TransactionEnvelopeEip1559.js +455 -0
- package/_esm/TransactionEnvelopeEip1559.js.map +1 -0
- package/_esm/TransactionEnvelopeEip2930.js +439 -0
- package/_esm/TransactionEnvelopeEip2930.js.map +1 -0
- package/_esm/TransactionEnvelopeEip4844.js +542 -0
- package/_esm/TransactionEnvelopeEip4844.js.map +1 -0
- package/_esm/TransactionEnvelopeEip7702.js +442 -0
- package/_esm/TransactionEnvelopeEip7702.js.map +1 -0
- package/_esm/TransactionEnvelopeLegacy.js +495 -0
- package/_esm/TransactionEnvelopeLegacy.js.map +1 -0
- package/_esm/TransactionReceipt.js +229 -0
- package/_esm/TransactionReceipt.js.map +1 -0
- package/_esm/TransactionRequest.js +89 -0
- package/_esm/TransactionRequest.js.map +1 -0
- package/_esm/TypedData.js +635 -0
- package/_esm/TypedData.js.map +1 -0
- package/_esm/ValidatorData.js +52 -0
- package/_esm/ValidatorData.js.map +1 -0
- package/_esm/Value.js +196 -0
- package/_esm/Value.js.map +1 -0
- package/_esm/WebAuthnP256.js +471 -0
- package/_esm/WebAuthnP256.js.map +1 -0
- package/_esm/WebCryptoP256.js +116 -0
- package/_esm/WebCryptoP256.js.map +1 -0
- package/_esm/Withdrawal.js +72 -0
- package/_esm/Withdrawal.js.map +1 -0
- package/_esm/index.js +3366 -0
- package/_esm/index.js.map +1 -0
- package/_esm/internal/abi.js +9 -0
- package/_esm/internal/abi.js.map +1 -0
- package/_esm/internal/abiConstructor.js +2 -0
- package/_esm/internal/abiConstructor.js.map +1 -0
- package/_esm/internal/abiError.js +2 -0
- package/_esm/internal/abiError.js.map +1 -0
- package/_esm/internal/abiEvent.js +2 -0
- package/_esm/internal/abiEvent.js.map +1 -0
- package/_esm/internal/abiFunction.js +2 -0
- package/_esm/internal/abiFunction.js.map +1 -0
- package/_esm/internal/abiItem.js +122 -0
- package/_esm/internal/abiItem.js.map +1 -0
- package/_esm/internal/abiParameters.js +419 -0
- package/_esm/internal/abiParameters.js.map +1 -0
- package/_esm/internal/base58.js +91 -0
- package/_esm/internal/base58.js.map +1 -0
- package/_esm/internal/bytes.js +86 -0
- package/_esm/internal/bytes.js.map +1 -0
- package/_esm/internal/cursor.js +207 -0
- package/_esm/internal/cursor.js.map +1 -0
- package/_esm/internal/ens.js +47 -0
- package/_esm/internal/ens.js.map +1 -0
- package/_esm/internal/errors.js +26 -0
- package/_esm/internal/errors.js.map +1 -0
- package/_esm/internal/hdKey.js +17 -0
- package/_esm/internal/hdKey.js.map +1 -0
- package/_esm/internal/hex.js +64 -0
- package/_esm/internal/hex.js.map +1 -0
- package/_esm/internal/lru.js +36 -0
- package/_esm/internal/lru.js.map +1 -0
- package/_esm/internal/mnemonic/wordlists.js +11 -0
- package/_esm/internal/mnemonic/wordlists.js.map +1 -0
- package/_esm/internal/promise.js +52 -0
- package/_esm/internal/promise.js.map +1 -0
- package/_esm/internal/register.js +2 -0
- package/_esm/internal/register.js.map +1 -0
- package/_esm/internal/rpcSchema.js +2 -0
- package/_esm/internal/rpcSchema.js.map +1 -0
- package/_esm/internal/rpcSchemas/eth.js +2 -0
- package/_esm/internal/rpcSchemas/eth.js.map +1 -0
- package/_esm/internal/rpcSchemas/wallet.js +2 -0
- package/_esm/internal/rpcSchemas/wallet.js.map +1 -0
- package/_esm/internal/rpcTransport.js +20 -0
- package/_esm/internal/rpcTransport.js.map +1 -0
- package/_esm/internal/types.js +2 -0
- package/_esm/internal/types.js.map +1 -0
- package/_esm/internal/uid.js +15 -0
- package/_esm/internal/uid.js.map +1 -0
- package/_esm/internal/webauthn.js +35 -0
- package/_esm/internal/webauthn.js.map +1 -0
- package/_esm/package.json +1 -0
- package/_esm/trusted-setups/Paths.js +3 -0
- package/_esm/trusted-setups/Paths.js.map +1 -0
- package/_esm/trusted-setups/index.js +2 -0
- package/_esm/trusted-setups/index.js.map +1 -0
- package/_esm/trusted-setups/internal/paths.js +12 -0
- package/_esm/trusted-setups/internal/paths.js.map +1 -0
- package/_esm/version.js +3 -0
- package/_esm/version.js.map +1 -0
- package/_esm/window/index.js +2 -0
- package/_esm/window/index.js.map +1 -0
- package/_test/Abi.test-d/package.json +6 -0
- package/_test/AbiConstructor.test-d/package.json +6 -0
- package/_test/AbiError.test-d/package.json +6 -0
- package/_test/AbiEvent.snap-d/package.json +6 -0
- package/_test/AbiEvent.snap-d.ts +329 -0
- package/_test/AbiFunction.snap-d/package.json +6 -0
- package/_test/AbiFunction.snap-d.ts +262 -0
- package/_test/AbiItem.snap-d/package.json +6 -0
- package/_test/AbiItem.snap-d.ts +131 -0
- package/_test/AbiParameters.bench/package.json +6 -0
- package/_test/AbiParameters.snap-d/package.json +6 -0
- package/_test/AbiParameters.snap-d.ts +66 -0
- package/_test/Address.bench/package.json +6 -0
- package/_test/Base58.bench/package.json +6 -0
- package/_test/Hex.bench/package.json +6 -0
- package/_test/Hex.test-d/package.json +6 -0
- package/_test/PublicKey.test-d/package.json +6 -0
- package/_test/Rlp.bench/package.json +6 -0
- package/_test/Rlp.test-d/package.json +6 -0
- package/_test/Signature.snap-d/package.json +6 -0
- package/_test/Signature.snap-d.ts +96 -0
- package/_test/TransactionEnvelopeEip1559.test-d/package.json +6 -0
- package/_test/TransactionEnvelopeEip2930.test-d/package.json +6 -0
- package/_test/TransactionEnvelopeEip4844.test-d/package.json +6 -0
- package/_test/TransactionEnvelopeEip7702.test-d/package.json +6 -0
- package/_test/TransactionEnvelopeLegacy.test-d/package.json +6 -0
- package/_test/TypedData.test-d/package.json +6 -0
- package/_types/Abi.d.ts +137 -0
- package/_types/Abi.d.ts.map +1 -0
- package/_types/AbiConstructor.d.ts +305 -0
- package/_types/AbiConstructor.d.ts.map +1 -0
- package/_types/AbiError.d.ts +522 -0
- package/_types/AbiError.d.ts.map +1 -0
- package/_types/AbiEvent.d.ts +892 -0
- package/_types/AbiEvent.d.ts.map +1 -0
- package/_types/AbiFunction.d.ts +602 -0
- package/_types/AbiFunction.d.ts.map +1 -0
- package/_types/AbiItem.d.ts +544 -0
- package/_types/AbiItem.d.ts.map +1 -0
- package/_types/AbiParameters.d.ts +466 -0
- package/_types/AbiParameters.d.ts.map +1 -0
- package/_types/AccessList.d.ts +83 -0
- package/_types/AccessList.d.ts.map +1 -0
- package/_types/AccountProof.d.ts +32 -0
- package/_types/AccountProof.d.ts.map +1 -0
- package/_types/Address.d.ts +244 -0
- package/_types/Address.d.ts.map +1 -0
- package/_types/AesGcm.d.ts +116 -0
- package/_types/AesGcm.d.ts.map +1 -0
- package/_types/Authorization.d.ts +461 -0
- package/_types/Authorization.d.ts.map +1 -0
- package/_types/Base58.d.ts +131 -0
- package/_types/Base58.d.ts.map +1 -0
- package/_types/Base64.d.ts +244 -0
- package/_types/Base64.d.ts.map +1 -0
- package/_types/Blobs.d.ts +556 -0
- package/_types/Blobs.d.ts.map +1 -0
- package/_types/Block.d.ts +190 -0
- package/_types/Block.d.ts.map +1 -0
- package/_types/Bloom.d.ts +54 -0
- package/_types/Bloom.d.ts.map +1 -0
- package/_types/Bls.d.ts +365 -0
- package/_types/Bls.d.ts.map +1 -0
- package/_types/BlsPoint.d.ts +187 -0
- package/_types/BlsPoint.d.ts.map +1 -0
- package/_types/Bytes.d.ts +674 -0
- package/_types/Bytes.d.ts.map +1 -0
- package/_types/Caches.d.ts +13 -0
- package/_types/Caches.d.ts.map +1 -0
- package/_types/ContractAddress.d.ts +115 -0
- package/_types/ContractAddress.d.ts.map +1 -0
- package/_types/Ens.d.ts +72 -0
- package/_types/Ens.d.ts.map +1 -0
- package/_types/Errors.d.ts +33 -0
- package/_types/Errors.d.ts.map +1 -0
- package/_types/Fee.d.ts +41 -0
- package/_types/Fee.d.ts.map +1 -0
- package/_types/Filter.d.ts +100 -0
- package/_types/Filter.d.ts.map +1 -0
- package/_types/Hash.d.ts +135 -0
- package/_types/Hash.d.ts.map +1 -0
- package/_types/HdKey.d.ts +146 -0
- package/_types/HdKey.d.ts.map +1 -0
- package/_types/Hex.d.ts +711 -0
- package/_types/Hex.d.ts.map +1 -0
- package/_types/Json.d.ts +53 -0
- package/_types/Json.d.ts.map +1 -0
- package/_types/Kzg.d.ts +42 -0
- package/_types/Kzg.d.ts.map +1 -0
- package/_types/Log.d.ts +194 -0
- package/_types/Log.d.ts.map +1 -0
- package/_types/Mnemonic.d.ts +176 -0
- package/_types/Mnemonic.d.ts.map +1 -0
- package/_types/P256.d.ts +207 -0
- package/_types/P256.d.ts.map +1 -0
- package/_types/PersonalMessage.d.ts +49 -0
- package/_types/PersonalMessage.d.ts.map +1 -0
- package/_types/Provider.d.ts +268 -0
- package/_types/Provider.d.ts.map +1 -0
- package/_types/PublicKey.d.ts +327 -0
- package/_types/PublicKey.d.ts.map +1 -0
- package/_types/Rlp.d.ts +153 -0
- package/_types/Rlp.d.ts.map +1 -0
- package/_types/RpcRequest.d.ts +144 -0
- package/_types/RpcRequest.d.ts.map +1 -0
- package/_types/RpcResponse.d.ts +266 -0
- package/_types/RpcResponse.d.ts.map +1 -0
- package/_types/RpcSchema.d.ts +248 -0
- package/_types/RpcSchema.d.ts.map +1 -0
- package/_types/RpcTransport.d.ts +65 -0
- package/_types/RpcTransport.d.ts.map +1 -0
- package/_types/Secp256k1.d.ts +277 -0
- package/_types/Secp256k1.d.ts.map +1 -0
- package/_types/Signature.d.ts +601 -0
- package/_types/Signature.d.ts.map +1 -0
- package/_types/Siwe.d.ts +249 -0
- package/_types/Siwe.d.ts.map +1 -0
- package/_types/Solidity.d.ts +100 -0
- package/_types/Solidity.d.ts.map +1 -0
- package/_types/Transaction.d.ts +235 -0
- package/_types/Transaction.d.ts.map +1 -0
- package/_types/TransactionEnvelope.d.ts +141 -0
- package/_types/TransactionEnvelope.d.ts.map +1 -0
- package/_types/TransactionEnvelopeEip1559.d.ts +367 -0
- package/_types/TransactionEnvelopeEip1559.d.ts.map +1 -0
- package/_types/TransactionEnvelopeEip2930.d.ts +364 -0
- package/_types/TransactionEnvelopeEip2930.d.ts.map +1 -0
- package/_types/TransactionEnvelopeEip4844.d.ts +419 -0
- package/_types/TransactionEnvelopeEip4844.d.ts.map +1 -0
- package/_types/TransactionEnvelopeEip7702.d.ts +377 -0
- package/_types/TransactionEnvelopeEip7702.d.ts.map +1 -0
- package/_types/TransactionEnvelopeLegacy.d.ts +358 -0
- package/_types/TransactionEnvelopeLegacy.d.ts.map +1 -0
- package/_types/TransactionReceipt.d.ts +271 -0
- package/_types/TransactionReceipt.d.ts.map +1 -0
- package/_types/TransactionRequest.d.ts +92 -0
- package/_types/TransactionRequest.d.ts.map +1 -0
- package/_types/TypedData.d.ts +496 -0
- package/_types/TypedData.d.ts.map +1 -0
- package/_types/ValidatorData.d.ts +64 -0
- package/_types/ValidatorData.d.ts.map +1 -0
- package/_types/Value.d.ts +159 -0
- package/_types/Value.d.ts.map +1 -0
- package/_types/WebAuthnP256.d.ts +445 -0
- package/_types/WebAuthnP256.d.ts.map +1 -0
- package/_types/WebCryptoP256.d.ts +119 -0
- package/_types/WebCryptoP256.d.ts.map +1 -0
- package/_types/Withdrawal.d.ts +74 -0
- package/_types/Withdrawal.d.ts.map +1 -0
- package/_types/index.d.ts +3367 -0
- package/_types/index.d.ts.map +1 -0
- package/_types/internal/abi.d.ts +4 -0
- package/_types/internal/abi.d.ts.map +1 -0
- package/_types/internal/abiConstructor.d.ts +11 -0
- package/_types/internal/abiConstructor.d.ts.map +1 -0
- package/_types/internal/abiError.d.ts +11 -0
- package/_types/internal/abiError.d.ts.map +1 -0
- package/_types/internal/abiEvent.d.ts +60 -0
- package/_types/internal/abiEvent.d.ts.map +1 -0
- package/_types/internal/abiFunction.d.ts +11 -0
- package/_types/internal/abiFunction.d.ts.map +1 -0
- package/_types/internal/abiItem.d.ts +100 -0
- package/_types/internal/abiItem.d.ts.map +1 -0
- package/_types/internal/abiParameters.d.ts +169 -0
- package/_types/internal/abiParameters.d.ts.map +1 -0
- package/_types/internal/base58.d.ts +17 -0
- package/_types/internal/base58.d.ts.map +1 -0
- package/_types/internal/bytes.d.ts +52 -0
- package/_types/internal/bytes.d.ts.map +1 -0
- package/_types/internal/cursor.d.ts +70 -0
- package/_types/internal/cursor.d.ts.map +1 -0
- package/_types/internal/ens.d.ts +23 -0
- package/_types/internal/ens.d.ts.map +1 -0
- package/_types/internal/errors.d.ts +7 -0
- package/_types/internal/errors.d.ts.map +1 -0
- package/_types/internal/hdKey.d.ts +10 -0
- package/_types/internal/hdKey.d.ts.map +1 -0
- package/_types/internal/hex.d.ts +39 -0
- package/_types/internal/hex.d.ts.map +1 -0
- package/_types/internal/lru.d.ts +13 -0
- package/_types/internal/lru.d.ts.map +1 -0
- package/_types/internal/mnemonic/wordlists.d.ts +11 -0
- package/_types/internal/mnemonic/wordlists.d.ts.map +1 -0
- package/_types/internal/promise.d.ts +27 -0
- package/_types/internal/promise.d.ts.map +1 -0
- package/_types/internal/register.d.ts +13 -0
- package/_types/internal/register.d.ts.map +1 -0
- package/_types/internal/rpcSchema.d.ts +12 -0
- package/_types/internal/rpcSchema.d.ts.map +1 -0
- package/_types/internal/rpcSchemas/eth.d.ts +718 -0
- package/_types/internal/rpcSchemas/eth.d.ts.map +1 -0
- package/_types/internal/rpcSchemas/wallet.d.ts +416 -0
- package/_types/internal/rpcSchemas/wallet.d.ts.map +1 -0
- package/_types/internal/rpcTransport.d.ts +38 -0
- package/_types/internal/rpcTransport.d.ts.map +1 -0
- package/_types/internal/types.d.ts +284 -0
- package/_types/internal/types.d.ts.map +1 -0
- package/_types/internal/uid.d.ts +3 -0
- package/_types/internal/uid.d.ts.map +1 -0
- package/_types/internal/webauthn.d.ts +127 -0
- package/_types/internal/webauthn.d.ts.map +1 -0
- package/_types/trusted-setups/Paths.d.ts +2 -0
- package/_types/trusted-setups/Paths.d.ts.map +1 -0
- package/_types/trusted-setups/index.d.ts +2 -0
- package/_types/trusted-setups/index.d.ts.map +1 -0
- package/_types/trusted-setups/internal/paths.d.ts +3 -0
- package/_types/trusted-setups/internal/paths.d.ts.map +1 -0
- package/_types/version.d.ts +3 -0
- package/_types/version.d.ts.map +1 -0
- package/_types/window/index.d.ts +7 -0
- package/_types/window/index.d.ts.map +1 -0
- package/index.ts +3427 -0
- package/internal/abi.ts +11 -0
- package/internal/abiConstructor.ts +32 -0
- package/internal/abiError.ts +30 -0
- package/internal/abiEvent.ts +154 -0
- package/internal/abiFunction.ts +32 -0
- package/internal/abiItem.ts +593 -0
- package/internal/abiParameters.ts +741 -0
- package/internal/base58.ts +106 -0
- package/internal/bytes.ts +152 -0
- package/internal/cursor.ts +252 -0
- package/internal/ens.ts +64 -0
- package/internal/errors.ts +26 -0
- package/internal/hdKey.ts +25 -0
- package/internal/hex.ts +123 -0
- package/internal/lru.ts +34 -0
- package/internal/mnemonic/wordlists.ts +10 -0
- package/internal/promise.ts +66 -0
- package/internal/register.ts +15 -0
- package/internal/rpcSchema.ts +20 -0
- package/internal/rpcSchemas/eth.ts +727 -0
- package/internal/rpcSchemas/wallet.ts +428 -0
- package/internal/rpcTransport.ts +74 -0
- package/internal/types.ts +414 -0
- package/internal/uid.ts +15 -0
- package/internal/webauthn.ts +198 -0
- package/package.json +500 -20
- package/trusted-setups/Paths/package.json +6 -0
- package/trusted-setups/Paths.ts +3 -0
- package/trusted-setups/index.ts +1 -0
- package/trusted-setups/internal/paths.ts +13 -0
- package/trusted-setups/internal/setups/mainnet.json +8265 -0
- package/trusted-setups/internal/setups/mainnet.txt +4163 -0
- package/trusted-setups/package.json +6 -0
- package/tsdoc.json +4 -0
- package/version/package.json +6 -0
- package/version.ts +2 -0
- package/window/index.ts +7 -0
- package/window/package.json +6 -0
- package/cl/ansiesc.js +0 -25
- package/cl/deps.js +0 -7
- package/cl/editor.js +0 -141
- package/cl/index.html +0 -19
- package/cl/ox.js +0 -44
- package/cl/socket.io.js +0 -1922
- package/cl/style.css +0 -37
- package/srv/deps.js +0 -88
- package/srv/httpSrv.js +0 -82
- package/srv/ox.js +0 -44
- package/srv/remoteXtermReq.js +0 -70
|
@@ -0,0 +1,471 @@
|
|
|
1
|
+
import * as Base64 from './Base64.js';
|
|
2
|
+
import * as Bytes from './Bytes.js';
|
|
3
|
+
import * as Errors from './Errors.js';
|
|
4
|
+
import * as Hash from './Hash.js';
|
|
5
|
+
import * as Hex from './Hex.js';
|
|
6
|
+
import * as P256 from './P256.js';
|
|
7
|
+
import * as internal from './internal/webauthn.js';
|
|
8
|
+
export const createChallenge = Uint8Array.from([
|
|
9
|
+
105, 171, 180, 181, 160, 222, 75, 198, 42, 42, 32, 31, 141, 37, 186, 233,
|
|
10
|
+
]);
|
|
11
|
+
/**
|
|
12
|
+
* Creates a new WebAuthn P256 Credential, which can be stored and later used for signing.
|
|
13
|
+
*
|
|
14
|
+
* @example
|
|
15
|
+
* ```ts twoslash
|
|
16
|
+
* import { WebAuthnP256 } from 'ox'
|
|
17
|
+
*
|
|
18
|
+
* const credential = await WebAuthnP256.createCredential({ name: 'Example' }) // [!code focus]
|
|
19
|
+
* // @log: {
|
|
20
|
+
* // @log: id: 'oZ48...',
|
|
21
|
+
* // @log: publicKey: { x: 51421...5123n, y: 12345...6789n },
|
|
22
|
+
* // @log: raw: PublicKeyCredential {},
|
|
23
|
+
* // @log: }
|
|
24
|
+
*
|
|
25
|
+
* const { metadata, signature } = await WebAuthnP256.sign({
|
|
26
|
+
* credentialId: credential.id,
|
|
27
|
+
* challenge: '0xdeadbeef',
|
|
28
|
+
* })
|
|
29
|
+
* ```
|
|
30
|
+
*
|
|
31
|
+
* @param options - Credential creation options.
|
|
32
|
+
* @returns A WebAuthn P256 credential.
|
|
33
|
+
*/
|
|
34
|
+
export async function createCredential(options) {
|
|
35
|
+
const { createFn = window.navigator.credentials.create.bind(window.navigator.credentials), ...rest } = options;
|
|
36
|
+
const creationOptions = getCredentialCreationOptions(rest);
|
|
37
|
+
try {
|
|
38
|
+
const credential = (await createFn(creationOptions));
|
|
39
|
+
if (!credential)
|
|
40
|
+
throw new CredentialCreationFailedError();
|
|
41
|
+
const publicKey = await internal.parseCredentialPublicKey(new Uint8Array(credential.response.getPublicKey()));
|
|
42
|
+
return {
|
|
43
|
+
id: credential.id,
|
|
44
|
+
publicKey,
|
|
45
|
+
raw: credential,
|
|
46
|
+
};
|
|
47
|
+
}
|
|
48
|
+
catch (error) {
|
|
49
|
+
throw new CredentialCreationFailedError({
|
|
50
|
+
cause: error,
|
|
51
|
+
});
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
createCredential.parseError = (error) =>
|
|
55
|
+
/* v8 ignore next */
|
|
56
|
+
error;
|
|
57
|
+
/**
|
|
58
|
+
* Gets the authenticator data which contains information about the
|
|
59
|
+
* processing of an authenticator request (ie. from `WebAuthnP256.sign`).
|
|
60
|
+
*
|
|
61
|
+
* :::warning
|
|
62
|
+
*
|
|
63
|
+
* This function is mainly for testing purposes or for manually constructing
|
|
64
|
+
* autenticator data. In most cases you will not need this function.
|
|
65
|
+
* `authenticatorData` is typically returned as part of the
|
|
66
|
+
* {@link ox#WebAuthnP256.(sign:function)} response (ie. an authenticator response).
|
|
67
|
+
*
|
|
68
|
+
* :::
|
|
69
|
+
*
|
|
70
|
+
* @example
|
|
71
|
+
* ```ts twoslash
|
|
72
|
+
* import { WebAuthnP256 } from 'ox'
|
|
73
|
+
*
|
|
74
|
+
* const authenticatorData = WebAuthnP256.getAuthenticatorData({
|
|
75
|
+
* rpId: 'example.com',
|
|
76
|
+
* signCount: 420,
|
|
77
|
+
* })
|
|
78
|
+
* // @log: "0xa379a6f6eeafb9a55e378c118034e2751e682fab9f2d30ab13d2125586ce194705000001a4"
|
|
79
|
+
* ```
|
|
80
|
+
*
|
|
81
|
+
* @param options - Options to construct the authenticator data.
|
|
82
|
+
* @returns The authenticator data.
|
|
83
|
+
*/
|
|
84
|
+
export function getAuthenticatorData(options = {}) {
|
|
85
|
+
const { flag = 5, rpId = window.location.hostname, signCount = 0 } = options;
|
|
86
|
+
const rpIdHash = Hash.sha256(Hex.fromString(rpId));
|
|
87
|
+
const flag_bytes = Hex.fromNumber(flag, { size: 1 });
|
|
88
|
+
const signCount_bytes = Hex.fromNumber(signCount, { size: 4 });
|
|
89
|
+
return Hex.concat(rpIdHash, flag_bytes, signCount_bytes);
|
|
90
|
+
}
|
|
91
|
+
getAuthenticatorData.parseError = (error) =>
|
|
92
|
+
/* v8 ignore next */
|
|
93
|
+
error;
|
|
94
|
+
/**
|
|
95
|
+
* Constructs the Client Data in stringified JSON format which represents client data that
|
|
96
|
+
* was passed to `credentials.get()` in {@link ox#WebAuthnP256.(sign:function)}.
|
|
97
|
+
*
|
|
98
|
+
* :::warning
|
|
99
|
+
*
|
|
100
|
+
* This function is mainly for testing purposes or for manually constructing
|
|
101
|
+
* client data. In most cases you will not need this function.
|
|
102
|
+
* `clientDataJSON` is typically returned as part of the
|
|
103
|
+
* {@link ox#WebAuthnP256.(sign:function)} response (ie. an authenticator response).
|
|
104
|
+
*
|
|
105
|
+
* :::
|
|
106
|
+
*
|
|
107
|
+
* @example
|
|
108
|
+
* ```ts twoslash
|
|
109
|
+
* import { WebAuthnP256 } from 'ox'
|
|
110
|
+
*
|
|
111
|
+
* const clientDataJSON = WebAuthnP256.getClientDataJSON({
|
|
112
|
+
* challenge: '0xdeadbeef',
|
|
113
|
+
* origin: 'https://example.com',
|
|
114
|
+
* })
|
|
115
|
+
* // @log: "{"type":"webauthn.get","challenge":"3q2-7w","origin":"https://example.com","crossOrigin":false}"
|
|
116
|
+
* ```
|
|
117
|
+
*
|
|
118
|
+
* @param options - Options to construct the client data.
|
|
119
|
+
* @returns The client data.
|
|
120
|
+
*/
|
|
121
|
+
export function getClientDataJSON(options) {
|
|
122
|
+
const { challenge, crossOrigin = false, extraClientData, origin = window.location.origin, } = options;
|
|
123
|
+
return JSON.stringify({
|
|
124
|
+
type: 'webauthn.get',
|
|
125
|
+
challenge: Base64.fromHex(challenge, { url: true, pad: false }),
|
|
126
|
+
origin,
|
|
127
|
+
crossOrigin,
|
|
128
|
+
...extraClientData,
|
|
129
|
+
});
|
|
130
|
+
}
|
|
131
|
+
getClientDataJSON.parseError = (error) =>
|
|
132
|
+
/* v8 ignore next */
|
|
133
|
+
error;
|
|
134
|
+
/**
|
|
135
|
+
* Returns the creation options for a P256 WebAuthn Credential to be used with
|
|
136
|
+
* the Web Authentication API.
|
|
137
|
+
*
|
|
138
|
+
* @example
|
|
139
|
+
* ```ts twoslash
|
|
140
|
+
* import { WebAuthnP256 } from 'ox'
|
|
141
|
+
*
|
|
142
|
+
* const options = WebAuthnP256.getCredentialCreationOptions({ name: 'Example' })
|
|
143
|
+
*
|
|
144
|
+
* const credential = await window.navigator.credentials.create(options)
|
|
145
|
+
* ```
|
|
146
|
+
*
|
|
147
|
+
* @param options - Options.
|
|
148
|
+
* @returns The credential creation options.
|
|
149
|
+
*/
|
|
150
|
+
export function getCredentialCreationOptions(options) {
|
|
151
|
+
const { attestation = 'none', authenticatorSelection = {
|
|
152
|
+
residentKey: 'preferred',
|
|
153
|
+
requireResidentKey: false,
|
|
154
|
+
userVerification: 'required',
|
|
155
|
+
}, challenge = createChallenge, excludeCredentialIds, name: name_, rp = {
|
|
156
|
+
id: window.location.hostname,
|
|
157
|
+
name: window.document.title,
|
|
158
|
+
}, user, extensions, } = options;
|
|
159
|
+
const name = (user?.name ?? name_);
|
|
160
|
+
return {
|
|
161
|
+
publicKey: {
|
|
162
|
+
attestation,
|
|
163
|
+
authenticatorSelection,
|
|
164
|
+
challenge,
|
|
165
|
+
...(excludeCredentialIds
|
|
166
|
+
? {
|
|
167
|
+
excludeCredentials: excludeCredentialIds?.map((id) => ({
|
|
168
|
+
id: Base64.toBytes(id),
|
|
169
|
+
type: 'public-key',
|
|
170
|
+
})),
|
|
171
|
+
}
|
|
172
|
+
: {}),
|
|
173
|
+
pubKeyCredParams: [
|
|
174
|
+
{
|
|
175
|
+
type: 'public-key',
|
|
176
|
+
alg: -7, // p256
|
|
177
|
+
},
|
|
178
|
+
],
|
|
179
|
+
rp,
|
|
180
|
+
user: {
|
|
181
|
+
id: user?.id ?? Hash.keccak256(Bytes.fromString(name), { as: 'Bytes' }),
|
|
182
|
+
name,
|
|
183
|
+
displayName: user?.displayName ?? name,
|
|
184
|
+
},
|
|
185
|
+
extensions,
|
|
186
|
+
},
|
|
187
|
+
};
|
|
188
|
+
}
|
|
189
|
+
getCredentialCreationOptions.parseError = (error) =>
|
|
190
|
+
/* v8 ignore next */
|
|
191
|
+
error;
|
|
192
|
+
/**
|
|
193
|
+
* Returns the request options to sign a challenge with the Web Authentication API.
|
|
194
|
+
*
|
|
195
|
+
* @example
|
|
196
|
+
* ```ts twoslash
|
|
197
|
+
* import { WebAuthnP256 } from 'ox'
|
|
198
|
+
*
|
|
199
|
+
* const options = WebAuthnP256.getCredentialRequestOptions({
|
|
200
|
+
* challenge: '0xdeadbeef',
|
|
201
|
+
* })
|
|
202
|
+
*
|
|
203
|
+
* const credential = await window.navigator.credentials.get(options)
|
|
204
|
+
* ```
|
|
205
|
+
*
|
|
206
|
+
* @param options - Options.
|
|
207
|
+
* @returns The credential request options.
|
|
208
|
+
*/
|
|
209
|
+
export function getCredentialRequestOptions(options) {
|
|
210
|
+
const { credentialId, challenge, rpId = window.location.hostname, userVerification = 'required', } = options;
|
|
211
|
+
return {
|
|
212
|
+
publicKey: {
|
|
213
|
+
...(credentialId
|
|
214
|
+
? {
|
|
215
|
+
allowCredentials: [
|
|
216
|
+
{
|
|
217
|
+
id: Base64.toBytes(credentialId),
|
|
218
|
+
type: 'public-key',
|
|
219
|
+
},
|
|
220
|
+
],
|
|
221
|
+
}
|
|
222
|
+
: {}),
|
|
223
|
+
challenge: Bytes.fromHex(challenge),
|
|
224
|
+
rpId,
|
|
225
|
+
userVerification,
|
|
226
|
+
},
|
|
227
|
+
};
|
|
228
|
+
}
|
|
229
|
+
getCredentialRequestOptions.parseError = (error) => error;
|
|
230
|
+
/**
|
|
231
|
+
* Constructs the final digest that was signed and computed by the authenticator. This payload includes
|
|
232
|
+
* the cryptographic `challenge`, as well as authenticator metadata (`authenticatorData` + `clientDataJSON`).
|
|
233
|
+
* This value can be also used with raw P256 verification (such as {@link ox#P256.(verify:function)} or
|
|
234
|
+
* {@link ox#WebCryptoP256.(verify:function)}).
|
|
235
|
+
*
|
|
236
|
+
* :::warning
|
|
237
|
+
*
|
|
238
|
+
* This function is mainly for testing purposes or for manually constructing
|
|
239
|
+
* signing payloads. In most cases you will not need this function and
|
|
240
|
+
* instead use {@link ox#WebAuthnP256.(sign:function)}.
|
|
241
|
+
*
|
|
242
|
+
* :::
|
|
243
|
+
*
|
|
244
|
+
* @example
|
|
245
|
+
* ```ts twoslash
|
|
246
|
+
* import { WebAuthnP256, WebCryptoP256 } from 'ox'
|
|
247
|
+
*
|
|
248
|
+
* const { metadata, payload } = WebAuthnP256.getSignPayload({ // [!code focus]
|
|
249
|
+
* challenge: '0xdeadbeef', // [!code focus]
|
|
250
|
+
* }) // [!code focus]
|
|
251
|
+
* // @log: {
|
|
252
|
+
* // @log: metadata: {
|
|
253
|
+
* // @log: authenticatorData: "0x49960de5880e8c687434170f6476605b8fe4aeb9a28632c7995cf3ba831d97630500000000",
|
|
254
|
+
* // @log: challengeIndex: 23,
|
|
255
|
+
* // @log: clientDataJSON: "{"type":"webauthn.get","challenge":"9jEFijuhEWrM4SOW-tChJbUEHEP44VcjcJ-Bqo1fTM8","origin":"http://localhost:5173","crossOrigin":false}",
|
|
256
|
+
* // @log: typeIndex: 1,
|
|
257
|
+
* // @log: userVerificationRequired: true,
|
|
258
|
+
* // @log: },
|
|
259
|
+
* // @log: payload: "0x49960de5880e8c687434170f6476605b8fe4aeb9a28632c7995cf3ba831d9763050000000045086dcb06a5f234db625bcdc94e657f86b76b6fd3eb9c30543eabc1e577a4b0",
|
|
260
|
+
* // @log: }
|
|
261
|
+
*
|
|
262
|
+
* const { publicKey, privateKey } = await WebCryptoP256.createKeyPair()
|
|
263
|
+
*
|
|
264
|
+
* const signature = await WebCryptoP256.sign({
|
|
265
|
+
* payload,
|
|
266
|
+
* privateKey,
|
|
267
|
+
* })
|
|
268
|
+
* ```
|
|
269
|
+
*
|
|
270
|
+
* @param options - Options to construct the signing payload.
|
|
271
|
+
* @returns The signing payload.
|
|
272
|
+
*/
|
|
273
|
+
export function getSignPayload(options) {
|
|
274
|
+
const { challenge, crossOrigin, extraClientData, flag, origin, rpId, signCount, userVerification = 'required', } = options;
|
|
275
|
+
const authenticatorData = getAuthenticatorData({
|
|
276
|
+
flag,
|
|
277
|
+
rpId,
|
|
278
|
+
signCount,
|
|
279
|
+
});
|
|
280
|
+
const clientDataJSON = getClientDataJSON({
|
|
281
|
+
challenge,
|
|
282
|
+
crossOrigin,
|
|
283
|
+
extraClientData,
|
|
284
|
+
origin,
|
|
285
|
+
});
|
|
286
|
+
const clientDataJSONHash = Hash.sha256(Hex.fromString(clientDataJSON));
|
|
287
|
+
const challengeIndex = clientDataJSON.indexOf('"challenge"');
|
|
288
|
+
const typeIndex = clientDataJSON.indexOf('"type"');
|
|
289
|
+
const metadata = {
|
|
290
|
+
authenticatorData,
|
|
291
|
+
clientDataJSON,
|
|
292
|
+
challengeIndex,
|
|
293
|
+
typeIndex,
|
|
294
|
+
userVerificationRequired: userVerification === 'required',
|
|
295
|
+
};
|
|
296
|
+
const payload = Hex.concat(authenticatorData, clientDataJSONHash);
|
|
297
|
+
return { metadata, payload };
|
|
298
|
+
}
|
|
299
|
+
getSignPayload.parseError = (error) =>
|
|
300
|
+
/* v8 ignore next */
|
|
301
|
+
error;
|
|
302
|
+
/**
|
|
303
|
+
* Signs a challenge using a stored WebAuthn P256 Credential. If no Credential is provided,
|
|
304
|
+
* a prompt will be displayed for the user to select an existing Credential
|
|
305
|
+
* that was previously registered.
|
|
306
|
+
*
|
|
307
|
+
* @example
|
|
308
|
+
* ```ts twoslash
|
|
309
|
+
* import { WebAuthnP256 } from 'ox'
|
|
310
|
+
*
|
|
311
|
+
* const credential = await WebAuthnP256.createCredential({
|
|
312
|
+
* name: 'Example',
|
|
313
|
+
* })
|
|
314
|
+
*
|
|
315
|
+
* const { metadata, signature } = await WebAuthnP256.sign({ // [!code focus]
|
|
316
|
+
* credentialId: credential.id, // [!code focus]
|
|
317
|
+
* challenge: '0xdeadbeef', // [!code focus]
|
|
318
|
+
* }) // [!code focus]
|
|
319
|
+
* // @log: {
|
|
320
|
+
* // @log: metadata: {
|
|
321
|
+
* // @log: authenticatorData: '0x49960de5880e8c687434170f6476605b8fe4aeb9a28632c7995cf3ba831d97630500000000',
|
|
322
|
+
* // @log: clientDataJSON: '{"type":"webauthn.get","challenge":"9jEFijuhEWrM4SOW-tChJbUEHEP44VcjcJ-Bqo1fTM8","origin":"http://localhost:5173","crossOrigin":false}',
|
|
323
|
+
* // @log: challengeIndex: 23,
|
|
324
|
+
* // @log: typeIndex: 1,
|
|
325
|
+
* // @log: userVerificationRequired: true,
|
|
326
|
+
* // @log: },
|
|
327
|
+
* // @log: signature: { r: 51231...4215n, s: 12345...6789n },
|
|
328
|
+
* // @log: }
|
|
329
|
+
* ```
|
|
330
|
+
*
|
|
331
|
+
* @param options - Options.
|
|
332
|
+
* @returns The signature.
|
|
333
|
+
*/
|
|
334
|
+
export async function sign(options) {
|
|
335
|
+
const { getFn = window.navigator.credentials.get.bind(window.navigator.credentials), ...rest } = options;
|
|
336
|
+
const requestOptions = getCredentialRequestOptions(rest);
|
|
337
|
+
try {
|
|
338
|
+
const credential = (await getFn(requestOptions));
|
|
339
|
+
if (!credential)
|
|
340
|
+
throw new CredentialRequestFailedError();
|
|
341
|
+
const response = credential.response;
|
|
342
|
+
const clientDataJSON = String.fromCharCode(...new Uint8Array(response.clientDataJSON));
|
|
343
|
+
const challengeIndex = clientDataJSON.indexOf('"challenge"');
|
|
344
|
+
const typeIndex = clientDataJSON.indexOf('"type"');
|
|
345
|
+
const signature = internal.parseAsn1Signature(new Uint8Array(response.signature));
|
|
346
|
+
return {
|
|
347
|
+
metadata: {
|
|
348
|
+
authenticatorData: Hex.fromBytes(new Uint8Array(response.authenticatorData)),
|
|
349
|
+
clientDataJSON,
|
|
350
|
+
challengeIndex,
|
|
351
|
+
typeIndex,
|
|
352
|
+
userVerificationRequired: requestOptions.publicKey.userVerification === 'required',
|
|
353
|
+
},
|
|
354
|
+
signature,
|
|
355
|
+
raw: credential,
|
|
356
|
+
};
|
|
357
|
+
}
|
|
358
|
+
catch (error) {
|
|
359
|
+
throw new CredentialRequestFailedError({
|
|
360
|
+
cause: error,
|
|
361
|
+
});
|
|
362
|
+
}
|
|
363
|
+
}
|
|
364
|
+
sign.parseError = (error) =>
|
|
365
|
+
/* v8 ignore next */
|
|
366
|
+
error;
|
|
367
|
+
/**
|
|
368
|
+
* Verifies a signature using the Credential's public key and the challenge which was signed.
|
|
369
|
+
*
|
|
370
|
+
* @example
|
|
371
|
+
* ```ts twoslash
|
|
372
|
+
* import { WebAuthnP256 } from 'ox'
|
|
373
|
+
*
|
|
374
|
+
* const credential = await WebAuthnP256.createCredential({
|
|
375
|
+
* name: 'Example',
|
|
376
|
+
* })
|
|
377
|
+
*
|
|
378
|
+
* const { metadata, signature } = await WebAuthnP256.sign({
|
|
379
|
+
* credentialId: credential.id,
|
|
380
|
+
* challenge: '0xdeadbeef',
|
|
381
|
+
* })
|
|
382
|
+
*
|
|
383
|
+
* const result = await WebAuthnP256.verify({ // [!code focus]
|
|
384
|
+
* metadata, // [!code focus]
|
|
385
|
+
* challenge: '0xdeadbeef', // [!code focus]
|
|
386
|
+
* publicKey: credential.publicKey, // [!code focus]
|
|
387
|
+
* signature, // [!code focus]
|
|
388
|
+
* }) // [!code focus]
|
|
389
|
+
* // @log: true
|
|
390
|
+
* ```
|
|
391
|
+
*
|
|
392
|
+
* @param options - Options.
|
|
393
|
+
* @returns Whether the signature is valid.
|
|
394
|
+
*/
|
|
395
|
+
export function verify(options) {
|
|
396
|
+
const { challenge, hash = true, metadata, publicKey, signature } = options;
|
|
397
|
+
const { authenticatorData, challengeIndex, clientDataJSON, typeIndex, userVerificationRequired, } = metadata;
|
|
398
|
+
const authenticatorDataBytes = Bytes.fromHex(authenticatorData);
|
|
399
|
+
// Check length of `authenticatorData`.
|
|
400
|
+
if (authenticatorDataBytes.length < 37)
|
|
401
|
+
return false;
|
|
402
|
+
const flag = authenticatorDataBytes[32];
|
|
403
|
+
// Verify that the UP bit of the flags in authData is set.
|
|
404
|
+
if ((flag & 0x01) !== 0x01)
|
|
405
|
+
return false;
|
|
406
|
+
// If user verification was determined to be required, verify that
|
|
407
|
+
// the UV bit of the flags in authData is set. Otherwise, ignore the
|
|
408
|
+
// value of the UV flag.
|
|
409
|
+
if (userVerificationRequired && (flag & 0x04) !== 0x04)
|
|
410
|
+
return false;
|
|
411
|
+
// If the BE bit of the flags in authData is not set, verify that
|
|
412
|
+
// the BS bit is not set.
|
|
413
|
+
if ((flag & 0x08) !== 0x08 && (flag & 0x10) === 0x10)
|
|
414
|
+
return false;
|
|
415
|
+
// Check that response is for an authentication assertion
|
|
416
|
+
const type = '"type":"webauthn.get"';
|
|
417
|
+
if (type !== clientDataJSON.slice(Number(typeIndex), type.length + 1))
|
|
418
|
+
return false;
|
|
419
|
+
// Check that hash is in the clientDataJSON.
|
|
420
|
+
const match = clientDataJSON
|
|
421
|
+
.slice(Number(challengeIndex))
|
|
422
|
+
.match(/^"challenge":"(.*?)"/);
|
|
423
|
+
if (!match)
|
|
424
|
+
return false;
|
|
425
|
+
// Validate the challenge in the clientDataJSON.
|
|
426
|
+
const [_, challenge_extracted] = match;
|
|
427
|
+
if (Hex.fromBytes(Base64.toBytes(challenge_extracted)) !== challenge)
|
|
428
|
+
return false;
|
|
429
|
+
const clientDataJSONHash = Hash.sha256(Bytes.fromString(clientDataJSON), {
|
|
430
|
+
as: 'Bytes',
|
|
431
|
+
});
|
|
432
|
+
const payload = Bytes.concat(authenticatorDataBytes, clientDataJSONHash);
|
|
433
|
+
return P256.verify({
|
|
434
|
+
hash,
|
|
435
|
+
payload,
|
|
436
|
+
publicKey,
|
|
437
|
+
signature,
|
|
438
|
+
});
|
|
439
|
+
}
|
|
440
|
+
verify.parseError = (error) =>
|
|
441
|
+
/* v8 ignore next */
|
|
442
|
+
error;
|
|
443
|
+
/** Thrown when a WebAuthn P256 credential creation fails. */
|
|
444
|
+
export class CredentialCreationFailedError extends Errors.BaseError {
|
|
445
|
+
constructor({ cause } = {}) {
|
|
446
|
+
super('Failed to create credential.', {
|
|
447
|
+
cause,
|
|
448
|
+
});
|
|
449
|
+
Object.defineProperty(this, "name", {
|
|
450
|
+
enumerable: true,
|
|
451
|
+
configurable: true,
|
|
452
|
+
writable: true,
|
|
453
|
+
value: 'WebAuthnP256.CredentialCreationFailedError'
|
|
454
|
+
});
|
|
455
|
+
}
|
|
456
|
+
}
|
|
457
|
+
/** Thrown when a WebAuthn P256 credential request fails. */
|
|
458
|
+
export class CredentialRequestFailedError extends Errors.BaseError {
|
|
459
|
+
constructor({ cause } = {}) {
|
|
460
|
+
super('Failed to request credential.', {
|
|
461
|
+
cause,
|
|
462
|
+
});
|
|
463
|
+
Object.defineProperty(this, "name", {
|
|
464
|
+
enumerable: true,
|
|
465
|
+
configurable: true,
|
|
466
|
+
writable: true,
|
|
467
|
+
value: 'WebAuthnP256.CredentialRequestFailedError'
|
|
468
|
+
});
|
|
469
|
+
}
|
|
470
|
+
}
|
|
471
|
+
//# sourceMappingURL=WebAuthnP256.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"WebAuthnP256.js","sourceRoot":"","sources":["../WebAuthnP256.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
import { p256 } from '@noble/curves/p256';
|
|
2
|
+
import * as Bytes from './Bytes.js';
|
|
3
|
+
import * as PublicKey from './PublicKey.js';
|
|
4
|
+
/**
|
|
5
|
+
* Generates an ECDSA P256 key pair that includes:
|
|
6
|
+
*
|
|
7
|
+
* - a `privateKey` of type [`CryptoKey`](https://developer.mozilla.org/en-US/docs/Web/API/CryptoKey)
|
|
8
|
+
*
|
|
9
|
+
* - a `publicKey` of type {@link ox#Hex.Hex} or {@link ox#Bytes.Bytes}
|
|
10
|
+
*
|
|
11
|
+
* @example
|
|
12
|
+
* ```ts twoslash
|
|
13
|
+
* import { WebCryptoP256 } from 'ox'
|
|
14
|
+
*
|
|
15
|
+
* const { publicKey, privateKey } = await WebCryptoP256.createKeyPair()
|
|
16
|
+
* // @log: {
|
|
17
|
+
* // @log: privateKey: CryptoKey {},
|
|
18
|
+
* // @log: publicKey: {
|
|
19
|
+
* // @log: x: 59295962801117472859457908919941473389380284132224861839820747729565200149877n,
|
|
20
|
+
* // @log: y: 24099691209996290925259367678540227198235484593389470330605641003500238088869n,
|
|
21
|
+
* // @log: prefix: 4,
|
|
22
|
+
* // @log: },
|
|
23
|
+
* // @log: }
|
|
24
|
+
* ```
|
|
25
|
+
*
|
|
26
|
+
* @param options - Options for creating the key pair.
|
|
27
|
+
* @returns The key pair.
|
|
28
|
+
*/
|
|
29
|
+
export async function createKeyPair(options = {}) {
|
|
30
|
+
const { extractable = false } = options;
|
|
31
|
+
const keypair = await globalThis.crypto.subtle.generateKey({
|
|
32
|
+
name: 'ECDSA',
|
|
33
|
+
namedCurve: 'P-256',
|
|
34
|
+
}, extractable, ['sign', 'verify']);
|
|
35
|
+
const publicKey_raw = await globalThis.crypto.subtle.exportKey('raw', keypair.publicKey);
|
|
36
|
+
const publicKey = PublicKey.from(new Uint8Array(publicKey_raw));
|
|
37
|
+
return {
|
|
38
|
+
privateKey: keypair.privateKey,
|
|
39
|
+
publicKey,
|
|
40
|
+
};
|
|
41
|
+
}
|
|
42
|
+
createKeyPair.parseError = (error) =>
|
|
43
|
+
/* v8 ignore next */
|
|
44
|
+
error;
|
|
45
|
+
/**
|
|
46
|
+
* Signs a payload with the provided `CryptoKey` private key and returns a P256 signature.
|
|
47
|
+
*
|
|
48
|
+
* @example
|
|
49
|
+
* ```ts twoslash
|
|
50
|
+
* import { WebCryptoP256 } from 'ox'
|
|
51
|
+
*
|
|
52
|
+
* const { privateKey } = await WebCryptoP256.createKeyPair()
|
|
53
|
+
*
|
|
54
|
+
* const signature = await WebCryptoP256.sign({ // [!code focus]
|
|
55
|
+
* payload: '0xdeadbeef', // [!code focus]
|
|
56
|
+
* privateKey, // [!code focus]
|
|
57
|
+
* }) // [!code focus]
|
|
58
|
+
* // @log: {
|
|
59
|
+
* // @log: r: 151231...4423n,
|
|
60
|
+
* // @log: s: 516123...5512n,
|
|
61
|
+
* // @log: }
|
|
62
|
+
* ```
|
|
63
|
+
*
|
|
64
|
+
* @param options - Options for signing the payload.
|
|
65
|
+
* @returns The P256 ECDSA {@link ox#Signature.Signature}.
|
|
66
|
+
*/
|
|
67
|
+
export async function sign(options) {
|
|
68
|
+
const { payload, privateKey } = options;
|
|
69
|
+
const signature = await globalThis.crypto.subtle.sign({
|
|
70
|
+
name: 'ECDSA',
|
|
71
|
+
hash: 'SHA-256',
|
|
72
|
+
}, privateKey, Bytes.from(payload));
|
|
73
|
+
const signature_bytes = Bytes.fromArray(new Uint8Array(signature));
|
|
74
|
+
const r = Bytes.toBigInt(Bytes.slice(signature_bytes, 0, 32));
|
|
75
|
+
let s = Bytes.toBigInt(Bytes.slice(signature_bytes, 32, 64));
|
|
76
|
+
if (s > p256.CURVE.n / 2n)
|
|
77
|
+
s = p256.CURVE.n - s;
|
|
78
|
+
return { r, s };
|
|
79
|
+
}
|
|
80
|
+
sign.parseError = (error) =>
|
|
81
|
+
/* v8 ignore next */
|
|
82
|
+
error;
|
|
83
|
+
/**
|
|
84
|
+
* Verifies a payload was signed by the provided public key.
|
|
85
|
+
*
|
|
86
|
+
* @example
|
|
87
|
+
*
|
|
88
|
+
* ```ts twoslash
|
|
89
|
+
* import { WebCryptoP256 } from 'ox'
|
|
90
|
+
*
|
|
91
|
+
* const { privateKey, publicKey } = await WebCryptoP256.createKeyPair()
|
|
92
|
+
* const signature = await WebCryptoP256.sign({ payload: '0xdeadbeef', privateKey })
|
|
93
|
+
*
|
|
94
|
+
* const verified = await WebCryptoP256.verify({ // [!code focus]
|
|
95
|
+
* payload: '0xdeadbeef', // [!code focus]
|
|
96
|
+
* publicKey, // [!code focus]
|
|
97
|
+
* signature, // [!code focus]
|
|
98
|
+
* }) // [!code focus]
|
|
99
|
+
* // @log: true
|
|
100
|
+
* ```
|
|
101
|
+
*
|
|
102
|
+
* @param options - The verification options.
|
|
103
|
+
* @returns Whether the payload was signed by the provided public key.
|
|
104
|
+
*/
|
|
105
|
+
export async function verify(options) {
|
|
106
|
+
const { payload, signature } = options;
|
|
107
|
+
const publicKey = await globalThis.crypto.subtle.importKey('raw', PublicKey.toBytes(options.publicKey), { name: 'ECDSA', namedCurve: 'P-256' }, true, ['verify']);
|
|
108
|
+
return await globalThis.crypto.subtle.verify({
|
|
109
|
+
name: 'ECDSA',
|
|
110
|
+
hash: 'SHA-256',
|
|
111
|
+
}, publicKey, Bytes.concat(Bytes.fromNumber(signature.r), Bytes.fromNumber(signature.s)), Bytes.from(payload));
|
|
112
|
+
}
|
|
113
|
+
verify.parseError = (error) =>
|
|
114
|
+
/* v8 ignore next */
|
|
115
|
+
error;
|
|
116
|
+
//# sourceMappingURL=WebCryptoP256.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"WebCryptoP256.js","sourceRoot":"","sources":["../WebCryptoP256.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
import * as Hex from './Hex.js';
|
|
2
|
+
/**
|
|
3
|
+
* Converts a {@link ox#Withdrawal.Rpc} to an {@link ox#Withdrawal.Withdrawal}.
|
|
4
|
+
*
|
|
5
|
+
* @example
|
|
6
|
+
* ```ts twoslash
|
|
7
|
+
* import { Withdrawal } from 'ox'
|
|
8
|
+
*
|
|
9
|
+
* const withdrawal = Withdrawal.fromRpc({
|
|
10
|
+
* address: '0x00000000219ab540356cBB839Cbe05303d7705Fa',
|
|
11
|
+
* amount: '0x620323',
|
|
12
|
+
* index: '0x0',
|
|
13
|
+
* validatorIndex: '0x1',
|
|
14
|
+
* })
|
|
15
|
+
* // @log: {
|
|
16
|
+
* // @log: address: '0x00000000219ab540356cBB839Cbe05303d7705Fa',
|
|
17
|
+
* // @log: amount: 6423331n,
|
|
18
|
+
* // @log: index: 0,
|
|
19
|
+
* // @log: validatorIndex: 1
|
|
20
|
+
* // @log: }
|
|
21
|
+
* ```
|
|
22
|
+
*
|
|
23
|
+
* @param withdrawal - The RPC withdrawal to convert.
|
|
24
|
+
* @returns An instantiated {@link ox#Withdrawal.Withdrawal}.
|
|
25
|
+
*/
|
|
26
|
+
export function fromRpc(withdrawal) {
|
|
27
|
+
return {
|
|
28
|
+
...withdrawal,
|
|
29
|
+
amount: BigInt(withdrawal.amount),
|
|
30
|
+
index: Number(withdrawal.index),
|
|
31
|
+
validatorIndex: Number(withdrawal.validatorIndex),
|
|
32
|
+
};
|
|
33
|
+
}
|
|
34
|
+
fromRpc.parseError = (error) =>
|
|
35
|
+
/* v8 ignore next */
|
|
36
|
+
error;
|
|
37
|
+
/**
|
|
38
|
+
* Converts a {@link ox#Withdrawal.Withdrawal} to an {@link ox#Withdrawal.Rpc}.
|
|
39
|
+
*
|
|
40
|
+
* @example
|
|
41
|
+
* ```ts twoslash
|
|
42
|
+
* import { Withdrawal } from 'ox'
|
|
43
|
+
*
|
|
44
|
+
* const withdrawal = Withdrawal.toRpc({
|
|
45
|
+
* address: '0x00000000219ab540356cBB839Cbe05303d7705Fa',
|
|
46
|
+
* amount: 6423331n,
|
|
47
|
+
* index: 0,
|
|
48
|
+
* validatorIndex: 1,
|
|
49
|
+
* })
|
|
50
|
+
* // @log: {
|
|
51
|
+
* // @log: address: '0x00000000219ab540356cBB839Cbe05303d7705Fa',
|
|
52
|
+
* // @log: amount: '0x620323',
|
|
53
|
+
* // @log: index: '0x0',
|
|
54
|
+
* // @log: validatorIndex: '0x1',
|
|
55
|
+
* // @log: }
|
|
56
|
+
* ```
|
|
57
|
+
*
|
|
58
|
+
* @param withdrawal - The Withdrawal to convert.
|
|
59
|
+
* @returns An RPC Withdrawal.
|
|
60
|
+
*/
|
|
61
|
+
export function toRpc(withdrawal) {
|
|
62
|
+
return {
|
|
63
|
+
address: withdrawal.address,
|
|
64
|
+
amount: Hex.fromNumber(withdrawal.amount),
|
|
65
|
+
index: Hex.fromNumber(withdrawal.index),
|
|
66
|
+
validatorIndex: Hex.fromNumber(withdrawal.validatorIndex),
|
|
67
|
+
};
|
|
68
|
+
}
|
|
69
|
+
toRpc.parseError = (error) =>
|
|
70
|
+
/* v8 ignore next */
|
|
71
|
+
error;
|
|
72
|
+
//# sourceMappingURL=Withdrawal.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Withdrawal.js","sourceRoot":"","sources":["../Withdrawal.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,GAAG,MAAM,UAAU,CAAA;AAa/B;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,MAAM,UAAU,OAAO,CAAC,UAAe;IACrC,OAAO;QACL,GAAG,UAAU;QACb,MAAM,EAAE,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC;QACjC,KAAK,EAAE,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC;QAC/B,cAAc,EAAE,MAAM,CAAC,UAAU,CAAC,cAAc,CAAC;KAClD,CAAA;AACH,CAAC;AAMD,OAAO,CAAC,UAAU,GAAG,CAAC,KAAc,EAAE,EAAE;AACtC,oBAAoB;AACpB,KAA0B,CAAA;AAE5B;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,MAAM,UAAU,KAAK,CAAC,UAAsB;IAC1C,OAAO;QACL,OAAO,EAAE,UAAU,CAAC,OAAO;QAC3B,MAAM,EAAE,GAAG,CAAC,UAAU,CAAC,UAAU,CAAC,MAAM,CAAC;QACzC,KAAK,EAAE,GAAG,CAAC,UAAU,CAAC,UAAU,CAAC,KAAK,CAAC;QACvC,cAAc,EAAE,GAAG,CAAC,UAAU,CAAC,UAAU,CAAC,cAAc,CAAC;KAC1D,CAAA;AACH,CAAC;AAMD,KAAK,CAAC,UAAU,GAAG,CAAC,KAAc,EAAE,EAAE;AACpC,oBAAoB;AACpB,KAAwB,CAAA"}
|