@aptos-labs/ts-sdk 1.15.0-win.2 → 1.16.0-zeta.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/dist/common/{accountAddress-ccLvlUQe.d.ts → accountAddress-BtD_TE5q.d.ts} +49 -3
- package/dist/common/chunk-VLEH6QBR.js +2 -0
- package/dist/common/chunk-VLEH6QBR.js.map +1 -0
- package/dist/common/cli/index.d.ts +1 -1
- package/dist/common/cli/index.js +1 -1
- package/dist/common/cli/index.js.map +1 -1
- package/dist/common/index.d.ts +627 -52
- package/dist/common/index.js +28 -28
- package/dist/common/index.js.map +1 -1
- package/dist/esm/{Ed25519Account-B1VMJOY2.d.mts → Ed25519Account-9zBaZEnp.d.mts} +1 -1
- package/dist/esm/account/Account.d.mts +2 -2
- package/dist/esm/account/Account.mjs +1 -1
- package/dist/esm/account/Ed25519Account.d.mts +2 -2
- package/dist/esm/account/Ed25519Account.mjs +1 -1
- package/dist/esm/account/EphemeralKeyPair.d.mts +85 -0
- package/dist/esm/account/EphemeralKeyPair.mjs +2 -0
- package/dist/esm/account/KeylessAccount.d.mts +166 -0
- package/dist/esm/account/KeylessAccount.mjs +2 -0
- package/dist/esm/account/MultiKeyAccount.d.mts +13 -7
- package/dist/esm/account/MultiKeyAccount.mjs +1 -1
- package/dist/esm/account/SingleKeyAccount.d.mts +2 -2
- package/dist/esm/account/SingleKeyAccount.mjs +1 -1
- package/dist/esm/account/index.d.mts +10 -2
- package/dist/esm/account/index.mjs +1 -1
- package/dist/esm/api/account.d.mts +2 -2
- package/dist/esm/api/account.mjs +1 -1
- package/dist/esm/api/ans.d.mts +2 -2
- package/dist/esm/api/ans.mjs +1 -1
- package/dist/esm/api/aptos.d.mts +12 -3
- package/dist/esm/api/aptos.mjs +1 -1
- package/dist/esm/api/aptosConfig.d.mts +20 -0
- package/dist/esm/api/aptosConfig.mjs +1 -1
- package/dist/esm/api/coin.d.mts +1 -1
- package/dist/esm/api/coin.mjs +1 -1
- package/dist/esm/api/digitalAsset.d.mts +2 -2
- package/dist/esm/api/digitalAsset.mjs +1 -1
- package/dist/esm/api/event.mjs +1 -1
- package/dist/esm/api/faucet.mjs +1 -1
- package/dist/esm/api/fungibleAsset.d.mts +2 -2
- package/dist/esm/api/fungibleAsset.mjs +1 -1
- package/dist/esm/api/general.d.mts +1 -1
- package/dist/esm/api/general.mjs +1 -1
- package/dist/esm/api/index.d.mts +10 -2
- package/dist/esm/api/index.mjs +1 -1
- package/dist/esm/api/keyless.d.mts +83 -0
- package/dist/esm/api/keyless.mjs +2 -0
- package/dist/esm/api/keyless.mjs.map +1 -0
- package/dist/esm/api/staking.mjs +1 -1
- package/dist/esm/api/table.mjs +1 -1
- package/dist/esm/api/transaction.d.mts +2 -2
- package/dist/esm/api/transaction.mjs +1 -1
- package/dist/esm/api/transactionSubmission/build.d.mts +1 -1
- package/dist/esm/api/transactionSubmission/build.mjs +1 -1
- package/dist/esm/api/transactionSubmission/management.d.mts +2 -2
- package/dist/esm/api/transactionSubmission/management.mjs +1 -1
- package/dist/esm/api/transactionSubmission/sign.d.mts +2 -2
- package/dist/esm/api/transactionSubmission/sign.mjs +1 -1
- package/dist/esm/api/transactionSubmission/sign.mjs.map +1 -1
- package/dist/esm/api/transactionSubmission/simulate.d.mts +1 -1
- package/dist/esm/api/transactionSubmission/simulate.mjs +1 -1
- package/dist/esm/api/transactionSubmission/submit.d.mts +1 -1
- package/dist/esm/api/transactionSubmission/submit.mjs +1 -1
- package/dist/esm/api/utils.mjs +1 -1
- package/dist/esm/bcs/cryptoHasher.d.mts +15 -0
- package/dist/esm/bcs/cryptoHasher.mjs +2 -0
- package/dist/esm/bcs/cryptoHasher.mjs.map +1 -0
- package/dist/esm/bcs/deserializer.d.mts +26 -0
- package/dist/esm/bcs/deserializer.mjs +1 -1
- package/dist/esm/bcs/index.mjs +1 -1
- package/dist/esm/bcs/serializable/entryFunctionBytes.mjs +1 -1
- package/dist/esm/bcs/serializable/fixedBytes.mjs +1 -1
- package/dist/esm/bcs/serializable/movePrimitives.mjs +1 -1
- package/dist/esm/bcs/serializable/moveStructs.mjs +1 -1
- package/dist/esm/bcs/serializer.d.mts +2 -0
- package/dist/esm/bcs/serializer.mjs +1 -1
- package/dist/esm/chunk-3FVRXELT.mjs +2 -0
- package/dist/esm/{chunk-U3YYSIIT.mjs → chunk-3VGX3TXH.mjs} +2 -2
- package/dist/esm/{chunk-4W3ZDREO.mjs → chunk-3Y6JNFPD.mjs} +2 -2
- package/dist/esm/chunk-4KEEUDZA.mjs +2 -0
- package/dist/esm/chunk-4KEEUDZA.mjs.map +1 -0
- package/dist/esm/chunk-4USAUOCE.mjs +2 -0
- package/dist/esm/{chunk-C4RK5AB6.mjs.map → chunk-4USAUOCE.mjs.map} +1 -1
- package/dist/esm/chunk-5ADNWXP2.mjs +2 -0
- package/dist/esm/chunk-5ADNWXP2.mjs.map +1 -0
- package/dist/esm/{chunk-JP4W2YJF.mjs → chunk-5RRZMXND.mjs} +2 -2
- package/dist/esm/chunk-5V2RGYYK.mjs +2 -0
- package/dist/esm/chunk-5V2RGYYK.mjs.map +1 -0
- package/dist/esm/chunk-5YI2GEG5.mjs +2 -0
- package/dist/esm/chunk-5YI2GEG5.mjs.map +1 -0
- package/dist/esm/chunk-6KNAIXZ3.mjs +2 -0
- package/dist/esm/chunk-6KNAIXZ3.mjs.map +1 -0
- package/dist/esm/{chunk-64MINNG2.mjs → chunk-6M53MDWB.mjs} +2 -2
- package/dist/esm/chunk-6RBUXB5I.mjs +2 -0
- package/dist/esm/{chunk-SRDIYE3M.mjs.map → chunk-6RBUXB5I.mjs.map} +1 -1
- package/dist/esm/{chunk-UPSCPEEE.mjs → chunk-7H3HRFVM.mjs} +2 -2
- package/dist/esm/chunk-7QGIAVW4.mjs +2 -0
- package/dist/esm/chunk-7QGIAVW4.mjs.map +1 -0
- package/dist/esm/{chunk-5EN52MUT.mjs → chunk-7STYQ5ZE.mjs} +2 -2
- package/dist/esm/chunk-7Z6DYLCA.mjs +1 -0
- package/dist/esm/chunk-7Z6DYLCA.mjs.map +1 -0
- package/dist/esm/{chunk-J77BLQCV.mjs → chunk-A3UVZHDJ.mjs} +2 -2
- package/dist/esm/{chunk-BCUSI3N6.mjs → chunk-AOCNYMMX.mjs} +2 -2
- package/dist/esm/chunk-AQ4I7VVB.mjs +1 -0
- package/dist/esm/chunk-AQ4I7VVB.mjs.map +1 -0
- package/dist/esm/{chunk-2O5VFH5O.mjs → chunk-C34M4T77.mjs} +2 -2
- package/dist/esm/chunk-C3L4ETUF.mjs +2 -0
- package/dist/esm/chunk-CNH2RAJQ.mjs +2 -0
- package/dist/esm/chunk-CNH2RAJQ.mjs.map +1 -0
- package/dist/esm/chunk-COW5IGYC.mjs +2 -0
- package/dist/esm/{chunk-TLLWFCCP.mjs → chunk-EADBYPUD.mjs} +2 -2
- package/dist/esm/{chunk-G56GPLTB.mjs → chunk-EB7AI4B4.mjs} +2 -2
- package/dist/esm/{chunk-AJU3EBVX.mjs → chunk-EIRSA5UU.mjs} +2 -2
- package/dist/esm/{chunk-SSSWFYAX.mjs → chunk-EPTCPBVW.mjs} +2 -2
- package/dist/esm/chunk-EU6CX56Q.mjs +2 -0
- package/dist/esm/chunk-EU6CX56Q.mjs.map +1 -0
- package/dist/esm/{chunk-AG3TUKNI.mjs → chunk-F5C4SZZ7.mjs} +2 -2
- package/dist/esm/{chunk-ECVKW776.mjs → chunk-FBLSW5TB.mjs} +2 -2
- package/dist/esm/chunk-FBPNHF54.mjs +2 -0
- package/dist/esm/{chunk-KAGLWBIJ.mjs → chunk-HGZGTBA4.mjs} +2 -2
- package/dist/esm/chunk-I5JWDZIP.mjs +2 -0
- package/dist/esm/chunk-I5JWDZIP.mjs.map +1 -0
- package/dist/esm/chunk-IEZO4PIG.mjs +2 -0
- package/dist/esm/{chunk-BZCARW2P.mjs → chunk-IJE5YSXW.mjs} +2 -2
- package/dist/esm/chunk-JCDZ2WXX.mjs +2 -0
- package/dist/esm/chunk-JCDZ2WXX.mjs.map +1 -0
- package/dist/esm/chunk-JKZHPY24.mjs +2 -0
- package/dist/esm/{chunk-CJDEPZ4J.mjs.map → chunk-JKZHPY24.mjs.map} +1 -1
- package/dist/esm/chunk-JM2B5E2I.mjs +2 -0
- package/dist/esm/chunk-JM2B5E2I.mjs.map +1 -0
- package/dist/esm/{chunk-DZJ2RMX3.mjs → chunk-KFUOOBMJ.mjs} +2 -2
- package/dist/esm/{chunk-CWO2JAUL.mjs → chunk-KKP4FBWZ.mjs} +2 -2
- package/dist/esm/chunk-KPZDC5ZE.mjs +2 -0
- package/dist/esm/chunk-KPZDC5ZE.mjs.map +1 -0
- package/dist/esm/{chunk-OUTRV57V.mjs → chunk-LEBJNW6Y.mjs} +2 -2
- package/dist/esm/chunk-LECNIPW7.mjs +2 -0
- package/dist/esm/chunk-LECNIPW7.mjs.map +1 -0
- package/dist/esm/{chunk-UEELI2FS.mjs → chunk-LO7B3CWN.mjs} +2 -2
- package/dist/esm/{chunk-EU7EBOVD.mjs → chunk-LQH7T3TE.mjs} +2 -2
- package/dist/esm/{chunk-VC4A47VQ.mjs → chunk-M7HZOQ6A.mjs} +2 -2
- package/dist/esm/chunk-MGOHPDX4.mjs +2 -0
- package/dist/esm/{chunk-P6GWG2CY.mjs → chunk-MKUAW7KW.mjs} +2 -2
- package/dist/esm/{chunk-I6ST47U7.mjs → chunk-MTLETLKV.mjs} +2 -2
- package/dist/esm/{chunk-QYJF7C23.mjs → chunk-MWN63XBE.mjs} +2 -2
- package/dist/esm/chunk-MWUJCP27.mjs +2 -0
- package/dist/esm/chunk-N466X3S6.mjs +2 -0
- package/dist/esm/chunk-N466X3S6.mjs.map +1 -0
- package/dist/esm/chunk-N7CE244N.mjs +2 -0
- package/dist/esm/{chunk-2XK53QFA.mjs.map → chunk-N7CE244N.mjs.map} +1 -1
- package/dist/esm/{chunk-GM56MMNJ.mjs → chunk-NC5HHEEM.mjs} +2 -2
- package/dist/esm/chunk-NCDP26DV.mjs +2 -0
- package/dist/esm/chunk-NCDP26DV.mjs.map +1 -0
- package/dist/esm/{chunk-EKOTTHRQ.mjs → chunk-NQMF46E5.mjs} +2 -2
- package/dist/esm/chunk-NWWXZ7EW.mjs +2 -0
- package/dist/esm/chunk-NWWXZ7EW.mjs.map +1 -0
- package/dist/esm/{chunk-AJIDUBBG.mjs → chunk-ONIYM7IU.mjs} +2 -2
- package/dist/esm/{chunk-GWPTNJTQ.mjs → chunk-OT37OTT7.mjs} +2 -2
- package/dist/esm/{chunk-7FIS3GNZ.mjs → chunk-OX5GWFHX.mjs} +2 -2
- package/dist/esm/{chunk-SGTNW5YI.mjs → chunk-PYUU4OEL.mjs} +2 -2
- package/dist/esm/{chunk-T4J32V4F.mjs → chunk-Q3AUNZDW.mjs} +2 -2
- package/dist/esm/chunk-QZRWRX6P.mjs +2 -0
- package/dist/esm/{chunk-YMB2XW2O.mjs.map → chunk-QZRWRX6P.mjs.map} +1 -1
- package/dist/esm/chunk-R2P2XANA.mjs +2 -0
- package/dist/esm/chunk-R2P2XANA.mjs.map +1 -0
- package/dist/esm/{chunk-25HG3O2C.mjs → chunk-REBMGDZ5.mjs} +2 -2
- package/dist/esm/{chunk-GHYE26Q5.mjs → chunk-RKHPXZM6.mjs} +2 -2
- package/dist/esm/{chunk-GHYE26Q5.mjs.map → chunk-RKHPXZM6.mjs.map} +1 -1
- package/dist/esm/chunk-RUSWW265.mjs +2 -0
- package/dist/esm/{chunk-M3YZNSJI.mjs → chunk-SBQRBBRS.mjs} +2 -2
- package/dist/esm/chunk-STYDBDYL.mjs +2 -0
- package/dist/esm/{chunk-QRS4DGP3.mjs → chunk-T23OVRNF.mjs} +2 -2
- package/dist/esm/{chunk-QRS4DGP3.mjs.map → chunk-T23OVRNF.mjs.map} +1 -1
- package/dist/esm/{chunk-TUMYQZ27.mjs → chunk-T6OEZ4KP.mjs} +2 -2
- package/dist/esm/{chunk-L7LLGJRG.mjs → chunk-TEJ7BXJK.mjs} +2 -2
- package/dist/esm/chunk-TJDC5PWD.mjs +2 -0
- package/dist/esm/{chunk-36QXVFR5.mjs → chunk-TVRJ3M7B.mjs} +2 -2
- package/dist/esm/{chunk-36QXVFR5.mjs.map → chunk-TVRJ3M7B.mjs.map} +1 -1
- package/dist/esm/{chunk-UQU5WAX2.mjs → chunk-UDU5L4XH.mjs} +2 -2
- package/dist/esm/{chunk-Y3RPWX6U.mjs → chunk-UFJGYMEB.mjs} +2 -2
- package/dist/esm/chunk-UO5LUYGO.mjs +2 -0
- package/dist/esm/chunk-UO5LUYGO.mjs.map +1 -0
- package/dist/esm/chunk-UTXJOB3O.mjs +2 -0
- package/dist/esm/{chunk-DQOIESL4.mjs → chunk-UWI5D7FD.mjs} +2 -2
- package/dist/esm/chunk-VT6XJSRO.mjs +2 -0
- package/dist/esm/chunk-VT6XJSRO.mjs.map +1 -0
- package/dist/esm/{chunk-GCBRNHAO.mjs → chunk-W36IQO5K.mjs} +2 -2
- package/dist/esm/chunk-W4IWORPF.mjs +2 -0
- package/dist/esm/chunk-W4IWORPF.mjs.map +1 -0
- package/dist/esm/{chunk-BHLICYAI.mjs → chunk-W637YAND.mjs} +2 -2
- package/dist/esm/{chunk-NNUKSGEX.mjs → chunk-WAXCU6D6.mjs} +2 -2
- package/dist/esm/chunk-WDE54GRQ.mjs +2 -0
- package/dist/esm/chunk-WDE54GRQ.mjs.map +1 -0
- package/dist/esm/{chunk-2ZGHK5BB.mjs → chunk-Y33VGXNI.mjs} +2 -2
- package/dist/esm/chunk-Y5BON557.mjs +2 -0
- package/dist/esm/chunk-YE5B2S5L.mjs +2 -0
- package/dist/esm/chunk-YE5B2S5L.mjs.map +1 -0
- package/dist/esm/{chunk-ZJMW5Z76.mjs → chunk-YHO2EBXH.mjs} +2 -2
- package/dist/esm/chunk-YZPQVZ7S.mjs +2 -0
- package/dist/esm/chunk-YZPQVZ7S.mjs.map +1 -0
- package/dist/esm/chunk-Z2ZR4PTF.mjs +2 -0
- package/dist/esm/{chunk-5WFN54GV.mjs → chunk-Z6JERVLX.mjs} +2 -2
- package/dist/esm/chunk-ZCCYHFPK.mjs +2 -0
- package/dist/esm/chunk-ZCCYHFPK.mjs.map +1 -0
- package/dist/esm/{chunk-35EWRSDK.mjs → chunk-ZNEBMSNC.mjs} +2 -2
- package/dist/esm/chunk-ZUQJLFR2.mjs +2 -0
- package/dist/esm/chunk-ZUQJLFR2.mjs.map +1 -0
- package/dist/esm/cli/index.mjs +1 -1
- package/dist/esm/cli/localNode.mjs +1 -1
- package/dist/esm/client/core.mjs +1 -1
- package/dist/esm/client/get.d.mts +2 -1
- package/dist/esm/client/get.mjs +1 -1
- package/dist/esm/client/index.d.mts +2 -2
- package/dist/esm/client/index.mjs +1 -1
- package/dist/esm/client/post.d.mts +3 -1
- package/dist/esm/client/post.mjs +1 -1
- package/dist/esm/client/types.d.mts +5 -1
- package/dist/esm/client/types.mjs +1 -1
- package/dist/esm/core/account/index.mjs +1 -1
- package/dist/esm/core/account/utils/address.mjs +1 -1
- package/dist/esm/core/account/utils/index.mjs +1 -1
- package/dist/esm/core/accountAddress.mjs +1 -1
- package/dist/esm/core/authenticationKey.d.mts +1 -1
- package/dist/esm/core/authenticationKey.mjs +1 -1
- package/dist/esm/core/common.mjs +1 -1
- package/dist/esm/core/crypto/ed25519.d.mts +1 -1
- package/dist/esm/core/crypto/ed25519.mjs +1 -1
- package/dist/esm/core/crypto/ephemeral.d.mts +73 -0
- package/dist/esm/core/crypto/ephemeral.mjs +2 -0
- package/dist/esm/core/crypto/ephemeral.mjs.map +1 -0
- package/dist/esm/core/crypto/index.d.mts +4 -1
- package/dist/esm/core/crypto/index.mjs +1 -1
- package/dist/esm/core/crypto/keyless.d.mts +232 -0
- package/dist/esm/core/crypto/keyless.mjs +2 -0
- package/dist/esm/core/crypto/keyless.mjs.map +1 -0
- package/dist/esm/core/crypto/multiEd25519.d.mts +1 -1
- package/dist/esm/core/crypto/multiEd25519.mjs +1 -1
- package/dist/esm/core/crypto/multiKey.d.mts +1 -1
- package/dist/esm/core/crypto/multiKey.mjs +1 -1
- package/dist/esm/core/crypto/poseidon.d.mts +7 -0
- package/dist/esm/core/crypto/poseidon.mjs +2 -0
- package/dist/esm/core/crypto/poseidon.mjs.map +1 -0
- package/dist/esm/core/crypto/privateKey.d.mts +1 -1
- package/dist/esm/core/crypto/proof.d.mts +21 -0
- package/dist/esm/core/crypto/proof.mjs +2 -0
- package/dist/esm/core/crypto/proof.mjs.map +1 -0
- package/dist/esm/core/crypto/publicKey.d.mts +1 -1
- package/dist/esm/core/crypto/publicKey.mjs +1 -1
- package/dist/esm/core/crypto/secp256k1.d.mts +1 -1
- package/dist/esm/core/crypto/secp256k1.mjs +1 -1
- package/dist/esm/core/crypto/signature.mjs +1 -1
- package/dist/esm/core/crypto/singleKey.d.mts +1 -1
- package/dist/esm/core/crypto/singleKey.mjs +1 -1
- package/dist/esm/core/crypto/utils.mjs +1 -1
- package/dist/esm/core/hex.mjs +1 -1
- package/dist/esm/core/index.d.mts +4 -1
- package/dist/esm/core/index.mjs +1 -1
- package/dist/esm/index.d.mts +16 -9
- package/dist/esm/index.mjs +1 -1
- package/dist/esm/internal/account.d.mts +2 -2
- package/dist/esm/internal/account.mjs +1 -1
- package/dist/esm/internal/ans.d.mts +2 -2
- package/dist/esm/internal/ans.mjs +1 -1
- package/dist/esm/internal/coin.d.mts +1 -1
- package/dist/esm/internal/coin.mjs +1 -1
- package/dist/esm/internal/digitalAsset.d.mts +2 -2
- package/dist/esm/internal/digitalAsset.mjs +1 -1
- package/dist/esm/internal/event.mjs +1 -1
- package/dist/esm/internal/faucet.mjs +1 -1
- package/dist/esm/internal/fungibleAsset.d.mts +2 -2
- package/dist/esm/internal/fungibleAsset.mjs +1 -1
- package/dist/esm/internal/general.mjs +1 -1
- package/dist/esm/internal/keyless.d.mts +76 -0
- package/dist/esm/internal/keyless.mjs +2 -0
- package/dist/esm/internal/keyless.mjs.map +1 -0
- package/dist/esm/internal/staking.mjs +1 -1
- package/dist/esm/internal/table.mjs +1 -1
- package/dist/esm/internal/transaction.mjs +1 -1
- package/dist/esm/internal/transactionSubmission.d.mts +2 -2
- package/dist/esm/internal/transactionSubmission.mjs +1 -1
- package/dist/esm/internal/view.d.mts +1 -1
- package/dist/esm/internal/view.mjs +1 -1
- package/dist/esm/transactions/authenticator/account.d.mts +1 -1
- package/dist/esm/transactions/authenticator/account.mjs +1 -1
- package/dist/esm/transactions/authenticator/index.d.mts +1 -1
- package/dist/esm/transactions/authenticator/index.mjs +1 -1
- package/dist/esm/transactions/authenticator/transaction.d.mts +1 -1
- package/dist/esm/transactions/authenticator/transaction.mjs +1 -1
- package/dist/esm/transactions/index.d.mts +4 -3
- package/dist/esm/transactions/index.mjs +1 -1
- package/dist/esm/transactions/instances/chainId.mjs +1 -1
- package/dist/esm/transactions/instances/identifier.mjs +1 -1
- package/dist/esm/transactions/instances/index.d.mts +1 -1
- package/dist/esm/transactions/instances/index.mjs +1 -1
- package/dist/esm/transactions/instances/moduleId.mjs +1 -1
- package/dist/esm/transactions/instances/multiAgentTransaction.mjs +1 -1
- package/dist/esm/transactions/instances/rawTransaction.mjs +1 -1
- package/dist/esm/transactions/instances/rotationProofChallenge.d.mts +1 -1
- package/dist/esm/transactions/instances/rotationProofChallenge.mjs +1 -1
- package/dist/esm/transactions/instances/signedTransaction.d.mts +1 -1
- package/dist/esm/transactions/instances/signedTransaction.mjs +1 -1
- package/dist/esm/transactions/instances/simpleTransaction.mjs +1 -1
- package/dist/esm/transactions/instances/transactionPayload.mjs +1 -1
- package/dist/esm/transactions/management/accountSequenceNumber.d.mts +2 -2
- package/dist/esm/transactions/management/accountSequenceNumber.mjs +1 -1
- package/dist/esm/transactions/management/index.d.mts +2 -2
- package/dist/esm/transactions/management/index.mjs +1 -1
- package/dist/esm/transactions/management/transactionWorker.d.mts +2 -2
- package/dist/esm/transactions/management/transactionWorker.mjs +1 -1
- package/dist/esm/transactions/transactionBuilder/helpers.d.mts +1 -1
- package/dist/esm/transactions/transactionBuilder/helpers.mjs +1 -1
- package/dist/esm/transactions/transactionBuilder/index.d.mts +3 -2
- package/dist/esm/transactions/transactionBuilder/index.mjs +1 -1
- package/dist/esm/transactions/transactionBuilder/remoteAbi.d.mts +3 -3
- package/dist/esm/transactions/transactionBuilder/remoteAbi.mjs +1 -1
- package/dist/esm/transactions/transactionBuilder/signingMessage.d.mts +7 -6
- package/dist/esm/transactions/transactionBuilder/signingMessage.mjs +1 -1
- package/dist/esm/transactions/transactionBuilder/transactionBuilder.d.mts +2 -2
- package/dist/esm/transactions/transactionBuilder/transactionBuilder.mjs +1 -1
- package/dist/esm/transactions/typeTag/index.mjs +1 -1
- package/dist/esm/transactions/typeTag/parser.d.mts +3 -1
- package/dist/esm/transactions/typeTag/parser.mjs +1 -1
- package/dist/esm/transactions/types.d.mts +23 -5
- package/dist/esm/types/index.d.mts +19 -3
- package/dist/esm/types/index.mjs +1 -1
- package/dist/esm/types/keyless.d.mts +16 -0
- package/dist/esm/types/keyless.mjs +1 -0
- package/dist/esm/types/keyless.mjs.map +1 -0
- package/dist/esm/utils/apiEndpoints.d.mts +3 -1
- package/dist/esm/utils/apiEndpoints.mjs +1 -1
- package/dist/esm/utils/const.d.mts +3 -1
- package/dist/esm/utils/const.mjs +1 -1
- package/dist/esm/utils/helpers.d.mts +4 -1
- package/dist/esm/utils/helpers.mjs +1 -1
- package/dist/esm/utils/index.d.mts +1 -1
- package/dist/esm/utils/index.mjs +1 -1
- package/dist/esm/utils/normalizeBundle.mjs +1 -1
- package/dist/esm/version.d.mts +1 -1
- package/dist/esm/version.mjs +1 -1
- package/package.json +11 -3
- package/src/account/EphemeralKeyPair.ts +157 -0
- package/src/account/KeylessAccount.ts +366 -0
- package/src/account/MultiKeyAccount.ts +11 -0
- package/src/account/index.ts +2 -0
- package/src/api/aptos.ts +6 -0
- package/src/api/aptosConfig.ts +46 -1
- package/src/api/keyless.ts +48 -0
- package/src/bcs/cryptoHasher.ts +6 -0
- package/src/bcs/deserializer.ts +40 -0
- package/src/bcs/serializer.ts +18 -0
- package/src/cli/localNode.ts +11 -1
- package/src/client/core.ts +8 -0
- package/src/client/get.ts +6 -0
- package/src/client/post.ts +12 -0
- package/src/client/types.ts +1 -1
- package/src/core/crypto/ephemeral.ts +138 -0
- package/src/core/crypto/index.ts +2 -0
- package/src/core/crypto/keyless.ts +453 -0
- package/src/core/crypto/poseidon.ts +133 -0
- package/src/core/crypto/proof.ts +16 -0
- package/src/core/crypto/singleKey.ts +11 -0
- package/src/internal/keyless.ts +109 -0
- package/src/internal/transactionSubmission.ts +7 -2
- package/src/transactions/transactionBuilder/remoteAbi.ts +16 -2
- package/src/transactions/transactionBuilder/signingMessage.ts +4 -4
- package/src/transactions/transactionBuilder/transactionBuilder.ts +21 -3
- package/src/transactions/typeTag/parser.ts +98 -52
- package/src/transactions/types.ts +22 -3
- package/src/types/index.ts +22 -0
- package/src/types/keyless.ts +6 -0
- package/src/utils/apiEndpoints.ts +14 -0
- package/src/utils/const.ts +2 -0
- package/src/utils/helpers.ts +25 -0
- package/src/version.ts +1 -1
- package/dist/common/chunk-KSEUZTKY.js +0 -2
- package/dist/common/chunk-KSEUZTKY.js.map +0 -1
- package/dist/esm/chunk-2XK53QFA.mjs +0 -2
- package/dist/esm/chunk-3JPVQHOR.mjs +0 -2
- package/dist/esm/chunk-3JPVQHOR.mjs.map +0 -1
- package/dist/esm/chunk-4NHWV5AI.mjs +0 -2
- package/dist/esm/chunk-6IFMQ5AS.mjs +0 -2
- package/dist/esm/chunk-6IFMQ5AS.mjs.map +0 -1
- package/dist/esm/chunk-6QJOCI5Y.mjs +0 -2
- package/dist/esm/chunk-7VRZLDIJ.mjs +0 -2
- package/dist/esm/chunk-B7X6PSE7.mjs +0 -2
- package/dist/esm/chunk-BO2TLWNT.mjs +0 -2
- package/dist/esm/chunk-BVV56I3P.mjs +0 -2
- package/dist/esm/chunk-BVV56I3P.mjs.map +0 -1
- package/dist/esm/chunk-C4RK5AB6.mjs +0 -2
- package/dist/esm/chunk-C6HODGUS.mjs +0 -2
- package/dist/esm/chunk-CEHCDA3G.mjs +0 -2
- package/dist/esm/chunk-CJDEPZ4J.mjs +0 -2
- package/dist/esm/chunk-CYNQRMO5.mjs +0 -2
- package/dist/esm/chunk-CYNQRMO5.mjs.map +0 -1
- package/dist/esm/chunk-DCF2OTJS.mjs +0 -2
- package/dist/esm/chunk-DCF2OTJS.mjs.map +0 -1
- package/dist/esm/chunk-EW3AR5V3.mjs +0 -2
- package/dist/esm/chunk-EW3AR5V3.mjs.map +0 -1
- package/dist/esm/chunk-F7EMGK4M.mjs +0 -2
- package/dist/esm/chunk-HYCGMFC2.mjs +0 -2
- package/dist/esm/chunk-HYCGMFC2.mjs.map +0 -1
- package/dist/esm/chunk-JDDYOCHY.mjs +0 -2
- package/dist/esm/chunk-JDDYOCHY.mjs.map +0 -1
- package/dist/esm/chunk-JFIAWBCK.mjs +0 -2
- package/dist/esm/chunk-JFIAWBCK.mjs.map +0 -1
- package/dist/esm/chunk-L54P6EGN.mjs +0 -2
- package/dist/esm/chunk-L54P6EGN.mjs.map +0 -1
- package/dist/esm/chunk-LG7RJQ57.mjs +0 -2
- package/dist/esm/chunk-MJPUASSD.mjs +0 -2
- package/dist/esm/chunk-MJPUASSD.mjs.map +0 -1
- package/dist/esm/chunk-MV6ORORF.mjs +0 -2
- package/dist/esm/chunk-MV6ORORF.mjs.map +0 -1
- package/dist/esm/chunk-N3U47Y6Y.mjs +0 -2
- package/dist/esm/chunk-OWW6SIDP.mjs +0 -2
- package/dist/esm/chunk-OWW6SIDP.mjs.map +0 -1
- package/dist/esm/chunk-PF57EOJY.mjs +0 -2
- package/dist/esm/chunk-PYGUW7SU.mjs +0 -2
- package/dist/esm/chunk-PYGUW7SU.mjs.map +0 -1
- package/dist/esm/chunk-ROXFCLDT.mjs +0 -2
- package/dist/esm/chunk-RTSWVT2Q.mjs +0 -2
- package/dist/esm/chunk-RTSWVT2Q.mjs.map +0 -1
- package/dist/esm/chunk-S2VSJJRJ.mjs +0 -2
- package/dist/esm/chunk-S2VSJJRJ.mjs.map +0 -1
- package/dist/esm/chunk-SRDIYE3M.mjs +0 -2
- package/dist/esm/chunk-UGPALAPN.mjs +0 -2
- package/dist/esm/chunk-UO3NZ5AH.mjs +0 -1
- package/dist/esm/chunk-UVSRX4SV.mjs +0 -1
- package/dist/esm/chunk-YMB2XW2O.mjs +0 -2
- /package/dist/esm/{chunk-UO3NZ5AH.mjs.map → account/EphemeralKeyPair.mjs.map} +0 -0
- /package/dist/esm/{chunk-UVSRX4SV.mjs.map → account/KeylessAccount.mjs.map} +0 -0
- /package/dist/esm/{chunk-CEHCDA3G.mjs.map → chunk-3FVRXELT.mjs.map} +0 -0
- /package/dist/esm/{chunk-U3YYSIIT.mjs.map → chunk-3VGX3TXH.mjs.map} +0 -0
- /package/dist/esm/{chunk-4W3ZDREO.mjs.map → chunk-3Y6JNFPD.mjs.map} +0 -0
- /package/dist/esm/{chunk-JP4W2YJF.mjs.map → chunk-5RRZMXND.mjs.map} +0 -0
- /package/dist/esm/{chunk-64MINNG2.mjs.map → chunk-6M53MDWB.mjs.map} +0 -0
- /package/dist/esm/{chunk-UPSCPEEE.mjs.map → chunk-7H3HRFVM.mjs.map} +0 -0
- /package/dist/esm/{chunk-5EN52MUT.mjs.map → chunk-7STYQ5ZE.mjs.map} +0 -0
- /package/dist/esm/{chunk-J77BLQCV.mjs.map → chunk-A3UVZHDJ.mjs.map} +0 -0
- /package/dist/esm/{chunk-BCUSI3N6.mjs.map → chunk-AOCNYMMX.mjs.map} +0 -0
- /package/dist/esm/{chunk-2O5VFH5O.mjs.map → chunk-C34M4T77.mjs.map} +0 -0
- /package/dist/esm/{chunk-N3U47Y6Y.mjs.map → chunk-C3L4ETUF.mjs.map} +0 -0
- /package/dist/esm/{chunk-4NHWV5AI.mjs.map → chunk-COW5IGYC.mjs.map} +0 -0
- /package/dist/esm/{chunk-TLLWFCCP.mjs.map → chunk-EADBYPUD.mjs.map} +0 -0
- /package/dist/esm/{chunk-G56GPLTB.mjs.map → chunk-EB7AI4B4.mjs.map} +0 -0
- /package/dist/esm/{chunk-AJU3EBVX.mjs.map → chunk-EIRSA5UU.mjs.map} +0 -0
- /package/dist/esm/{chunk-SSSWFYAX.mjs.map → chunk-EPTCPBVW.mjs.map} +0 -0
- /package/dist/esm/{chunk-AG3TUKNI.mjs.map → chunk-F5C4SZZ7.mjs.map} +0 -0
- /package/dist/esm/{chunk-ECVKW776.mjs.map → chunk-FBLSW5TB.mjs.map} +0 -0
- /package/dist/esm/{chunk-LG7RJQ57.mjs.map → chunk-FBPNHF54.mjs.map} +0 -0
- /package/dist/esm/{chunk-KAGLWBIJ.mjs.map → chunk-HGZGTBA4.mjs.map} +0 -0
- /package/dist/esm/{chunk-7VRZLDIJ.mjs.map → chunk-IEZO4PIG.mjs.map} +0 -0
- /package/dist/esm/{chunk-BZCARW2P.mjs.map → chunk-IJE5YSXW.mjs.map} +0 -0
- /package/dist/esm/{chunk-DZJ2RMX3.mjs.map → chunk-KFUOOBMJ.mjs.map} +0 -0
- /package/dist/esm/{chunk-CWO2JAUL.mjs.map → chunk-KKP4FBWZ.mjs.map} +0 -0
- /package/dist/esm/{chunk-OUTRV57V.mjs.map → chunk-LEBJNW6Y.mjs.map} +0 -0
- /package/dist/esm/{chunk-UEELI2FS.mjs.map → chunk-LO7B3CWN.mjs.map} +0 -0
- /package/dist/esm/{chunk-EU7EBOVD.mjs.map → chunk-LQH7T3TE.mjs.map} +0 -0
- /package/dist/esm/{chunk-VC4A47VQ.mjs.map → chunk-M7HZOQ6A.mjs.map} +0 -0
- /package/dist/esm/{chunk-B7X6PSE7.mjs.map → chunk-MGOHPDX4.mjs.map} +0 -0
- /package/dist/esm/{chunk-P6GWG2CY.mjs.map → chunk-MKUAW7KW.mjs.map} +0 -0
- /package/dist/esm/{chunk-I6ST47U7.mjs.map → chunk-MTLETLKV.mjs.map} +0 -0
- /package/dist/esm/{chunk-QYJF7C23.mjs.map → chunk-MWN63XBE.mjs.map} +0 -0
- /package/dist/esm/{chunk-PF57EOJY.mjs.map → chunk-MWUJCP27.mjs.map} +0 -0
- /package/dist/esm/{chunk-GM56MMNJ.mjs.map → chunk-NC5HHEEM.mjs.map} +0 -0
- /package/dist/esm/{chunk-EKOTTHRQ.mjs.map → chunk-NQMF46E5.mjs.map} +0 -0
- /package/dist/esm/{chunk-AJIDUBBG.mjs.map → chunk-ONIYM7IU.mjs.map} +0 -0
- /package/dist/esm/{chunk-GWPTNJTQ.mjs.map → chunk-OT37OTT7.mjs.map} +0 -0
- /package/dist/esm/{chunk-7FIS3GNZ.mjs.map → chunk-OX5GWFHX.mjs.map} +0 -0
- /package/dist/esm/{chunk-SGTNW5YI.mjs.map → chunk-PYUU4OEL.mjs.map} +0 -0
- /package/dist/esm/{chunk-T4J32V4F.mjs.map → chunk-Q3AUNZDW.mjs.map} +0 -0
- /package/dist/esm/{chunk-25HG3O2C.mjs.map → chunk-REBMGDZ5.mjs.map} +0 -0
- /package/dist/esm/{chunk-6QJOCI5Y.mjs.map → chunk-RUSWW265.mjs.map} +0 -0
- /package/dist/esm/{chunk-M3YZNSJI.mjs.map → chunk-SBQRBBRS.mjs.map} +0 -0
- /package/dist/esm/{chunk-UGPALAPN.mjs.map → chunk-STYDBDYL.mjs.map} +0 -0
- /package/dist/esm/{chunk-TUMYQZ27.mjs.map → chunk-T6OEZ4KP.mjs.map} +0 -0
- /package/dist/esm/{chunk-L7LLGJRG.mjs.map → chunk-TEJ7BXJK.mjs.map} +0 -0
- /package/dist/esm/{chunk-F7EMGK4M.mjs.map → chunk-TJDC5PWD.mjs.map} +0 -0
- /package/dist/esm/{chunk-UQU5WAX2.mjs.map → chunk-UDU5L4XH.mjs.map} +0 -0
- /package/dist/esm/{chunk-Y3RPWX6U.mjs.map → chunk-UFJGYMEB.mjs.map} +0 -0
- /package/dist/esm/{chunk-ROXFCLDT.mjs.map → chunk-UTXJOB3O.mjs.map} +0 -0
- /package/dist/esm/{chunk-DQOIESL4.mjs.map → chunk-UWI5D7FD.mjs.map} +0 -0
- /package/dist/esm/{chunk-GCBRNHAO.mjs.map → chunk-W36IQO5K.mjs.map} +0 -0
- /package/dist/esm/{chunk-BHLICYAI.mjs.map → chunk-W637YAND.mjs.map} +0 -0
- /package/dist/esm/{chunk-NNUKSGEX.mjs.map → chunk-WAXCU6D6.mjs.map} +0 -0
- /package/dist/esm/{chunk-2ZGHK5BB.mjs.map → chunk-Y33VGXNI.mjs.map} +0 -0
- /package/dist/esm/{chunk-C6HODGUS.mjs.map → chunk-Y5BON557.mjs.map} +0 -0
- /package/dist/esm/{chunk-ZJMW5Z76.mjs.map → chunk-YHO2EBXH.mjs.map} +0 -0
- /package/dist/esm/{chunk-BO2TLWNT.mjs.map → chunk-Z2ZR4PTF.mjs.map} +0 -0
- /package/dist/esm/{chunk-5WFN54GV.mjs.map → chunk-Z6JERVLX.mjs.map} +0 -0
- /package/dist/esm/{chunk-35EWRSDK.mjs.map → chunk-ZNEBMSNC.mjs.map} +0 -0
- /package/dist/esm/{publicKey-B3XRNhHO.d.mts → publicKey-lq5djCIY.d.mts} +0 -0
|
@@ -0,0 +1,366 @@
|
|
|
1
|
+
// Copyright © Aptos Foundation
|
|
2
|
+
// SPDX-License-Identifier: Apache-2.0
|
|
3
|
+
|
|
4
|
+
import { JwtPayload, jwtDecode } from "jwt-decode";
|
|
5
|
+
import { JwksClient } from "jwks-rsa";
|
|
6
|
+
import EventEmitter from "eventemitter3";
|
|
7
|
+
import { EphemeralCertificateVariant, HexInput, SigningScheme } from "../types";
|
|
8
|
+
import { AccountAddress } from "../core/accountAddress";
|
|
9
|
+
import {
|
|
10
|
+
AnyPublicKey,
|
|
11
|
+
AnySignature,
|
|
12
|
+
KeylessPublicKey,
|
|
13
|
+
KeylessSignature,
|
|
14
|
+
EphemeralCertificate,
|
|
15
|
+
Signature,
|
|
16
|
+
ZeroKnowledgeSig,
|
|
17
|
+
ZkProof,
|
|
18
|
+
} from "../core/crypto";
|
|
19
|
+
|
|
20
|
+
import { Account } from "./Account";
|
|
21
|
+
import { EphemeralKeyPair } from "./EphemeralKeyPair";
|
|
22
|
+
import { Hex } from "../core/hex";
|
|
23
|
+
import { AccountAuthenticatorSingleKey } from "../transactions/authenticator/account";
|
|
24
|
+
import { Deserializer, Serializable, Serializer } from "../bcs";
|
|
25
|
+
import {
|
|
26
|
+
deriveTransactionType,
|
|
27
|
+
generateSigningMessageForBcsCryptoHashable,
|
|
28
|
+
} from "../transactions/transactionBuilder/signingMessage";
|
|
29
|
+
import { AnyRawTransaction, AnyRawTransactionInstance } from "../transactions/types";
|
|
30
|
+
import { AptosApiError } from "../client/types";
|
|
31
|
+
import { AptsoDomainSeparator, CryptoHashable } from "../bcs/cryptoHasher";
|
|
32
|
+
import { base64UrlDecode } from "../utils/helpers";
|
|
33
|
+
|
|
34
|
+
export const IssuerToJwkEndpoint: Record<string, string> = {
|
|
35
|
+
"https://accounts.google.com": "https://www.googleapis.com/oauth2/v3/certs",
|
|
36
|
+
};
|
|
37
|
+
|
|
38
|
+
export enum KeylessErrorType {
|
|
39
|
+
JWK_EXPIRED,
|
|
40
|
+
EPK_EXPIRED,
|
|
41
|
+
PROOF_NOT_FOUND,
|
|
42
|
+
UNKNOWN_INVALID_SIGNATURE,
|
|
43
|
+
UNKNOWN,
|
|
44
|
+
}
|
|
45
|
+
export class KeylessError extends Error {
|
|
46
|
+
readonly type: KeylessErrorType;
|
|
47
|
+
|
|
48
|
+
constructor(type: KeylessErrorType) {
|
|
49
|
+
super();
|
|
50
|
+
this.type = type;
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
static async fromAptosApiError(error: AptosApiError, signer: KeylessAccount): Promise<KeylessError> {
|
|
54
|
+
if (!error.data.message.includes("INVALID_SIGNATURE")) {
|
|
55
|
+
return new KeylessError(KeylessErrorType.UNKNOWN);
|
|
56
|
+
}
|
|
57
|
+
if (signer.isExpired()) {
|
|
58
|
+
return new KeylessError(KeylessErrorType.EPK_EXPIRED);
|
|
59
|
+
}
|
|
60
|
+
if (!(await signer.checkJwkValidity())) {
|
|
61
|
+
return new KeylessError(KeylessErrorType.JWK_EXPIRED);
|
|
62
|
+
}
|
|
63
|
+
return new KeylessError(KeylessErrorType.UNKNOWN_INVALID_SIGNATURE);
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
export class KeylessAccount extends Serializable implements Account {
|
|
68
|
+
static readonly PEPPER_LENGTH: number = 31;
|
|
69
|
+
|
|
70
|
+
readonly publicKey: KeylessPublicKey;
|
|
71
|
+
|
|
72
|
+
readonly ephemeralKeyPair: EphemeralKeyPair;
|
|
73
|
+
|
|
74
|
+
readonly uidKey: string;
|
|
75
|
+
|
|
76
|
+
readonly uidVal: string;
|
|
77
|
+
|
|
78
|
+
readonly aud: string;
|
|
79
|
+
|
|
80
|
+
readonly pepper: Uint8Array;
|
|
81
|
+
|
|
82
|
+
readonly accountAddress: AccountAddress;
|
|
83
|
+
|
|
84
|
+
proof: ZeroKnowledgeSig | undefined;
|
|
85
|
+
|
|
86
|
+
readonly proofOrPromise: ZeroKnowledgeSig | Promise<ZeroKnowledgeSig>;
|
|
87
|
+
|
|
88
|
+
readonly signingScheme: SigningScheme;
|
|
89
|
+
|
|
90
|
+
private jwt: string;
|
|
91
|
+
|
|
92
|
+
private isJwtValid: boolean;
|
|
93
|
+
|
|
94
|
+
readonly emitter: EventEmitter<ProofFetchEvents>;
|
|
95
|
+
|
|
96
|
+
constructor(args: {
|
|
97
|
+
address?: AccountAddress;
|
|
98
|
+
ephemeralKeyPair: EphemeralKeyPair;
|
|
99
|
+
iss: string;
|
|
100
|
+
uidKey: string;
|
|
101
|
+
uidVal: string;
|
|
102
|
+
aud: string;
|
|
103
|
+
pepper: HexInput;
|
|
104
|
+
proofOrFetcher: ZeroKnowledgeSig | Promise<ZeroKnowledgeSig>;
|
|
105
|
+
proofFetchCallback?: ProofFetchCallback;
|
|
106
|
+
jwt: string;
|
|
107
|
+
}) {
|
|
108
|
+
super();
|
|
109
|
+
const { address, ephemeralKeyPair, uidKey, uidVal, aud, pepper, proofOrFetcher, proofFetchCallback, jwt } = args;
|
|
110
|
+
this.ephemeralKeyPair = ephemeralKeyPair;
|
|
111
|
+
this.publicKey = KeylessPublicKey.create(args);
|
|
112
|
+
this.accountAddress = address ? AccountAddress.from(address) : this.publicKey.authKey().derivedAddress();
|
|
113
|
+
this.uidKey = uidKey;
|
|
114
|
+
this.uidVal = uidVal;
|
|
115
|
+
this.aud = aud;
|
|
116
|
+
this.jwt = jwt;
|
|
117
|
+
this.emitter = new EventEmitter<ProofFetchEvents>();
|
|
118
|
+
this.proofOrPromise = proofOrFetcher;
|
|
119
|
+
if (proofOrFetcher instanceof ZeroKnowledgeSig) {
|
|
120
|
+
this.proof = proofOrFetcher;
|
|
121
|
+
} else {
|
|
122
|
+
if (proofFetchCallback === undefined) {
|
|
123
|
+
throw new Error("Must provide callback for async proof fetch");
|
|
124
|
+
}
|
|
125
|
+
this.emitter.on("proofFetchFinish", async (status) => {
|
|
126
|
+
await proofFetchCallback(status);
|
|
127
|
+
this.emitter.removeAllListeners();
|
|
128
|
+
});
|
|
129
|
+
this.init(proofOrFetcher);
|
|
130
|
+
}
|
|
131
|
+
this.signingScheme = SigningScheme.SingleKey;
|
|
132
|
+
const pepperBytes = Hex.fromHexInput(pepper).toUint8Array();
|
|
133
|
+
if (pepperBytes.length !== KeylessAccount.PEPPER_LENGTH) {
|
|
134
|
+
throw new Error(`Pepper length in bytes should be ${KeylessAccount.PEPPER_LENGTH}`);
|
|
135
|
+
}
|
|
136
|
+
this.pepper = pepperBytes;
|
|
137
|
+
this.isJwtValid = true;
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
/**
|
|
141
|
+
* This initializes the asyncronous proof fetch
|
|
142
|
+
* @return
|
|
143
|
+
*/
|
|
144
|
+
async init(promise: Promise<ZeroKnowledgeSig>) {
|
|
145
|
+
try {
|
|
146
|
+
this.proof = await promise;
|
|
147
|
+
this.emitter.emit("proofFetchFinish", { status: "Success" });
|
|
148
|
+
} catch (error) {
|
|
149
|
+
if (error instanceof Error) {
|
|
150
|
+
this.emitter.emit("proofFetchFinish", { status: "Failed", error: error.toString() });
|
|
151
|
+
} else {
|
|
152
|
+
this.emitter.emit("proofFetchFinish", { status: "Failed", error: "Unknown" });
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
serialize(serializer: Serializer): void {
|
|
158
|
+
serializer.serializeStr(this.jwt);
|
|
159
|
+
serializer.serializeStr(this.uidKey);
|
|
160
|
+
serializer.serializeFixedBytes(this.pepper);
|
|
161
|
+
this.ephemeralKeyPair.serialize(serializer);
|
|
162
|
+
if (this.proof === undefined) {
|
|
163
|
+
throw new Error("Connot serialize - proof undefined");
|
|
164
|
+
}
|
|
165
|
+
this.proof.serialize(serializer);
|
|
166
|
+
}
|
|
167
|
+
|
|
168
|
+
static deserialize(deserializer: Deserializer): KeylessAccount {
|
|
169
|
+
const jwt = deserializer.deserializeStr();
|
|
170
|
+
const uidKey = deserializer.deserializeStr();
|
|
171
|
+
const pepper = deserializer.deserializeFixedBytes(31);
|
|
172
|
+
const ephemeralKeyPair = EphemeralKeyPair.deserialize(deserializer);
|
|
173
|
+
const proof = ZeroKnowledgeSig.deserialize(deserializer);
|
|
174
|
+
return KeylessAccount.fromJWTAndProof({
|
|
175
|
+
proof,
|
|
176
|
+
pepper,
|
|
177
|
+
uidKey,
|
|
178
|
+
jwt,
|
|
179
|
+
ephemeralKeyPair,
|
|
180
|
+
});
|
|
181
|
+
}
|
|
182
|
+
|
|
183
|
+
/**
|
|
184
|
+
* Checks if the proof is expired. If so the account must be rederived with a new EphemeralKeyPair
|
|
185
|
+
* and JWT token.
|
|
186
|
+
* @return boolean
|
|
187
|
+
*/
|
|
188
|
+
isExpired(): boolean {
|
|
189
|
+
return this.ephemeralKeyPair.isExpired();
|
|
190
|
+
}
|
|
191
|
+
|
|
192
|
+
/**
|
|
193
|
+
* Checks if the the JWK used to verify the token still exists on the issuer's JWK uri.
|
|
194
|
+
* Caches the result.
|
|
195
|
+
* @return boolean
|
|
196
|
+
*/
|
|
197
|
+
async checkJwkValidity(): Promise<boolean> {
|
|
198
|
+
if (!this.isJwtValid) {
|
|
199
|
+
return false;
|
|
200
|
+
}
|
|
201
|
+
const jwtHeader = jwtDecode(this.jwt, { header: true });
|
|
202
|
+
const client = new JwksClient({
|
|
203
|
+
jwksUri: IssuerToJwkEndpoint[this.publicKey.iss],
|
|
204
|
+
});
|
|
205
|
+
try {
|
|
206
|
+
await client.getSigningKey(jwtHeader.kid);
|
|
207
|
+
return true;
|
|
208
|
+
} catch (error) {
|
|
209
|
+
this.isJwtValid = false;
|
|
210
|
+
return false;
|
|
211
|
+
}
|
|
212
|
+
}
|
|
213
|
+
|
|
214
|
+
/**
|
|
215
|
+
* Sign a message using Keyless.
|
|
216
|
+
* @param message the message to sign, as binary input
|
|
217
|
+
* @return the AccountAuthenticator containing the signature, together with the account's public key
|
|
218
|
+
*/
|
|
219
|
+
signWithAuthenticator(message: HexInput): AccountAuthenticatorSingleKey {
|
|
220
|
+
const signature = new AnySignature(this.sign(message));
|
|
221
|
+
const publicKey = new AnyPublicKey(this.publicKey);
|
|
222
|
+
return new AccountAuthenticatorSingleKey(publicKey, signature);
|
|
223
|
+
}
|
|
224
|
+
|
|
225
|
+
/**
|
|
226
|
+
* Sign a transaction using Keyless.
|
|
227
|
+
* @param transaction the raw transaction
|
|
228
|
+
* @return the AccountAuthenticator containing the signature of the transaction, together with the account's public key
|
|
229
|
+
*/
|
|
230
|
+
signTransactionWithAuthenticator(transaction: AnyRawTransaction): AccountAuthenticatorSingleKey {
|
|
231
|
+
const signature = new AnySignature(this.signTransaction(transaction));
|
|
232
|
+
const publicKey = new AnyPublicKey(this.publicKey);
|
|
233
|
+
return new AccountAuthenticatorSingleKey(publicKey, signature);
|
|
234
|
+
}
|
|
235
|
+
|
|
236
|
+
/**
|
|
237
|
+
* Waits for asyncronous proof fetching to finish.
|
|
238
|
+
* @return
|
|
239
|
+
*/
|
|
240
|
+
async waitForProofFetch() {
|
|
241
|
+
if (this.proofOrPromise instanceof Promise) {
|
|
242
|
+
await this.proofOrPromise;
|
|
243
|
+
}
|
|
244
|
+
}
|
|
245
|
+
|
|
246
|
+
/**
|
|
247
|
+
* Sign the given message using Keyless.
|
|
248
|
+
* @param message in HexInput format
|
|
249
|
+
* @returns Signature
|
|
250
|
+
*/
|
|
251
|
+
sign(data: HexInput): KeylessSignature {
|
|
252
|
+
const { expiryDateSecs } = this.ephemeralKeyPair;
|
|
253
|
+
if (this.isExpired()) {
|
|
254
|
+
throw new KeylessError(KeylessErrorType.EPK_EXPIRED);
|
|
255
|
+
}
|
|
256
|
+
if (this.proof === undefined) {
|
|
257
|
+
throw new KeylessError(KeylessErrorType.PROOF_NOT_FOUND);
|
|
258
|
+
}
|
|
259
|
+
if (!this.isJwtValid) {
|
|
260
|
+
throw new KeylessError(KeylessErrorType.JWK_EXPIRED);
|
|
261
|
+
}
|
|
262
|
+
const ephemeralPublicKey = this.ephemeralKeyPair.getPublicKey();
|
|
263
|
+
const ephemeralSignature = this.ephemeralKeyPair.sign(data);
|
|
264
|
+
|
|
265
|
+
return new KeylessSignature({
|
|
266
|
+
jwtHeader: base64UrlDecode(this.jwt.split(".")[0]),
|
|
267
|
+
ephemeralCertificate: new EphemeralCertificate(this.proof, EphemeralCertificateVariant.ZkProof),
|
|
268
|
+
expiryDateSecs,
|
|
269
|
+
ephemeralPublicKey,
|
|
270
|
+
ephemeralSignature,
|
|
271
|
+
});
|
|
272
|
+
}
|
|
273
|
+
|
|
274
|
+
/**
|
|
275
|
+
* Sign the given transaction with Keyless.
|
|
276
|
+
* Signs the transaction and proof to guard against proof malleability.
|
|
277
|
+
* @param transaction the transaction to be signed
|
|
278
|
+
* @returns KeylessSignature
|
|
279
|
+
*/
|
|
280
|
+
signTransaction(transaction: AnyRawTransaction): KeylessSignature {
|
|
281
|
+
if (this.proof === undefined) {
|
|
282
|
+
throw new Error("Proof not found");
|
|
283
|
+
}
|
|
284
|
+
const raw = deriveTransactionType(transaction);
|
|
285
|
+
const txnAndProof = new TransactionAndProof(raw, this.proof.proof);
|
|
286
|
+
const signMess = generateSigningMessageForBcsCryptoHashable(txnAndProof);
|
|
287
|
+
return this.sign(signMess);
|
|
288
|
+
}
|
|
289
|
+
|
|
290
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars, class-methods-use-this
|
|
291
|
+
verifySignature(args: { message: HexInput; signature: Signature }): boolean {
|
|
292
|
+
throw new Error("Not implemented");
|
|
293
|
+
}
|
|
294
|
+
|
|
295
|
+
static fromBytes(bytes: Uint8Array): KeylessAccount {
|
|
296
|
+
return KeylessAccount.deserialize(new Deserializer(bytes));
|
|
297
|
+
}
|
|
298
|
+
|
|
299
|
+
static fromJWTAndProof(args: {
|
|
300
|
+
proof: ZeroKnowledgeSig | Promise<ZeroKnowledgeSig>;
|
|
301
|
+
jwt: string;
|
|
302
|
+
ephemeralKeyPair: EphemeralKeyPair;
|
|
303
|
+
pepper: HexInput;
|
|
304
|
+
uidKey?: string;
|
|
305
|
+
proofFetchCallback?: ProofFetchCallback;
|
|
306
|
+
}): KeylessAccount {
|
|
307
|
+
const { proof, jwt, ephemeralKeyPair, pepper, proofFetchCallback } = args;
|
|
308
|
+
const uidKey = args.uidKey ?? "sub";
|
|
309
|
+
|
|
310
|
+
const jwtPayload = jwtDecode<JwtPayload & { [key: string]: string }>(jwt);
|
|
311
|
+
const iss = jwtPayload.iss!;
|
|
312
|
+
if (typeof jwtPayload.aud !== "string") {
|
|
313
|
+
throw new Error("aud was not found or an array of values");
|
|
314
|
+
}
|
|
315
|
+
const aud = jwtPayload.aud!;
|
|
316
|
+
const uidVal = jwtPayload[uidKey];
|
|
317
|
+
return new KeylessAccount({
|
|
318
|
+
proofOrFetcher: proof,
|
|
319
|
+
ephemeralKeyPair,
|
|
320
|
+
iss,
|
|
321
|
+
uidKey,
|
|
322
|
+
uidVal,
|
|
323
|
+
aud,
|
|
324
|
+
pepper,
|
|
325
|
+
jwt,
|
|
326
|
+
proofFetchCallback,
|
|
327
|
+
});
|
|
328
|
+
}
|
|
329
|
+
}
|
|
330
|
+
|
|
331
|
+
export class TransactionAndProof extends CryptoHashable {
|
|
332
|
+
transaction: AnyRawTransactionInstance;
|
|
333
|
+
|
|
334
|
+
proof?: ZkProof;
|
|
335
|
+
|
|
336
|
+
domainSeparator: AptsoDomainSeparator;
|
|
337
|
+
|
|
338
|
+
constructor(transaction: AnyRawTransactionInstance, proof?: ZkProof) {
|
|
339
|
+
super();
|
|
340
|
+
this.transaction = transaction;
|
|
341
|
+
this.proof = proof;
|
|
342
|
+
this.domainSeparator = "APTOS::TransactionAndProof"
|
|
343
|
+
}
|
|
344
|
+
|
|
345
|
+
serialize(serializer: Serializer): void {
|
|
346
|
+
serializer.serializeFixedBytes(this.transaction.bcsToBytes());
|
|
347
|
+
serializer.serializeOption(this.proof);
|
|
348
|
+
}
|
|
349
|
+
}
|
|
350
|
+
|
|
351
|
+
export type ProofFetchSuccess = {
|
|
352
|
+
status: "Success";
|
|
353
|
+
};
|
|
354
|
+
|
|
355
|
+
export type ProofFetchFailure = {
|
|
356
|
+
status: "Failed";
|
|
357
|
+
error: string;
|
|
358
|
+
};
|
|
359
|
+
|
|
360
|
+
export type ProofFetchStatus = ProofFetchSuccess | ProofFetchFailure;
|
|
361
|
+
|
|
362
|
+
export type ProofFetchCallback = (status: ProofFetchStatus) => Promise<void>;
|
|
363
|
+
|
|
364
|
+
export interface ProofFetchEvents {
|
|
365
|
+
proofFetchFinish: (status: ProofFetchStatus) => void;
|
|
366
|
+
}
|
|
@@ -7,6 +7,7 @@ import { AccountAddress } from "../core/accountAddress";
|
|
|
7
7
|
import { HexInput, SigningScheme } from "../types";
|
|
8
8
|
import { AccountAuthenticatorMultiKey } from "../transactions/authenticator/account";
|
|
9
9
|
import { AnyRawTransaction } from "../transactions/types";
|
|
10
|
+
import { KeylessAccount } from "./KeylessAccount";
|
|
10
11
|
|
|
11
12
|
export interface VerifyMultiKeySignatureArgs {
|
|
12
13
|
message: HexInput;
|
|
@@ -123,6 +124,16 @@ export class MultiKeyAccount implements Account {
|
|
|
123
124
|
return new AccountAuthenticatorMultiKey(this.publicKey, this.signTransaction(transaction));
|
|
124
125
|
}
|
|
125
126
|
|
|
127
|
+
/**
|
|
128
|
+
* Waits for any proofs on any KeylessAccount signers to be fetched. If the proof is fetched a syncronously, call this
|
|
129
|
+
* to ensure signing with the KeylessAccount does not fail as the proof must be ready.
|
|
130
|
+
* @return
|
|
131
|
+
*/
|
|
132
|
+
async waitForProofFetch() {
|
|
133
|
+
const keylessSigners = this.signers.filter((signer) => signer instanceof KeylessAccount) as KeylessAccount[];
|
|
134
|
+
await Promise.all(keylessSigners.filter((signer) => signer.proof instanceof Promise).map((signer) => signer.proof));
|
|
135
|
+
}
|
|
136
|
+
|
|
126
137
|
/**
|
|
127
138
|
* Sign the given message using the MultiKeyAccount's signers
|
|
128
139
|
* @param message in HexInput format
|
package/src/account/index.ts
CHANGED
package/src/api/aptos.ts
CHANGED
|
@@ -13,6 +13,7 @@ import { ANS } from "./ans";
|
|
|
13
13
|
import { Staking } from "./staking";
|
|
14
14
|
import { Transaction } from "./transaction";
|
|
15
15
|
import { Table } from "./table";
|
|
16
|
+
import { Keyless } from "./keyless";
|
|
16
17
|
|
|
17
18
|
/**
|
|
18
19
|
* This class is the main entry point into Aptos's
|
|
@@ -50,6 +51,8 @@ export class Aptos {
|
|
|
50
51
|
|
|
51
52
|
readonly table: Table;
|
|
52
53
|
|
|
54
|
+
readonly keyless: Keyless;
|
|
55
|
+
|
|
53
56
|
constructor(settings?: AptosConfig) {
|
|
54
57
|
this.config = new AptosConfig(settings);
|
|
55
58
|
this.account = new Account(this.config);
|
|
@@ -63,6 +66,7 @@ export class Aptos {
|
|
|
63
66
|
this.staking = new Staking(this.config);
|
|
64
67
|
this.transaction = new Transaction(this.config);
|
|
65
68
|
this.table = new Table(this.config);
|
|
69
|
+
this.keyless = new Keyless(this.config);
|
|
66
70
|
}
|
|
67
71
|
}
|
|
68
72
|
|
|
@@ -77,6 +81,7 @@ export interface Aptos
|
|
|
77
81
|
Faucet,
|
|
78
82
|
FungibleAsset,
|
|
79
83
|
General,
|
|
84
|
+
Keyless,
|
|
80
85
|
Staking,
|
|
81
86
|
Table,
|
|
82
87
|
Omit<Transaction, "build" | "simulate" | "submit" | "batch"> {}
|
|
@@ -113,3 +118,4 @@ applyMixin(Aptos, General, "general");
|
|
|
113
118
|
applyMixin(Aptos, Staking, "staking");
|
|
114
119
|
applyMixin(Aptos, Transaction, "transaction");
|
|
115
120
|
applyMixin(Aptos, Table, "table");
|
|
121
|
+
applyMixin(Aptos, Keyless, "keyless");
|
package/src/api/aptosConfig.ts
CHANGED
|
@@ -3,7 +3,14 @@
|
|
|
3
3
|
|
|
4
4
|
import aptosClient from "@aptos-labs/aptos-client";
|
|
5
5
|
import { AptosSettings, ClientConfig, Client, FullNodeConfig, IndexerConfig, FaucetConfig } from "../types";
|
|
6
|
-
import {
|
|
6
|
+
import {
|
|
7
|
+
NetworkToNodeAPI,
|
|
8
|
+
NetworkToFaucetAPI,
|
|
9
|
+
NetworkToIndexerAPI,
|
|
10
|
+
Network,
|
|
11
|
+
NetworkToPepperAPI,
|
|
12
|
+
NetworkToProverAPI,
|
|
13
|
+
} from "../utils/apiEndpoints";
|
|
7
14
|
import { AptosApiType } from "../utils/const";
|
|
8
15
|
|
|
9
16
|
/**
|
|
@@ -34,6 +41,16 @@ export class AptosConfig {
|
|
|
34
41
|
*/
|
|
35
42
|
readonly faucet?: string;
|
|
36
43
|
|
|
44
|
+
/**
|
|
45
|
+
* The optional hardcoded pepper service URL to send requests to instead of using the network
|
|
46
|
+
*/
|
|
47
|
+
readonly pepper?: string;
|
|
48
|
+
|
|
49
|
+
/**
|
|
50
|
+
* The optional hardcoded prover service URL to send requests to instead of using the network
|
|
51
|
+
*/
|
|
52
|
+
readonly prover?: string;
|
|
53
|
+
|
|
37
54
|
/**
|
|
38
55
|
* The optional hardcoded indexer URL to send requests to instead of using the network
|
|
39
56
|
*/
|
|
@@ -63,6 +80,8 @@ export class AptosConfig {
|
|
|
63
80
|
this.network = settings?.network ?? Network.DEVNET;
|
|
64
81
|
this.fullnode = settings?.fullnode;
|
|
65
82
|
this.faucet = settings?.faucet;
|
|
83
|
+
this.pepper = settings?.pepper;
|
|
84
|
+
this.prover = settings?.prover;
|
|
66
85
|
this.indexer = settings?.indexer;
|
|
67
86
|
this.client = settings?.client ?? { provider: aptosClient };
|
|
68
87
|
this.clientConfig = settings?.clientConfig ?? {};
|
|
@@ -95,8 +114,34 @@ export class AptosConfig {
|
|
|
95
114
|
if (this.indexer !== undefined) return this.indexer;
|
|
96
115
|
if (this.network === Network.CUSTOM) throw new Error("Please provide a custom indexer url");
|
|
97
116
|
return NetworkToIndexerAPI[this.network];
|
|
117
|
+
case AptosApiType.PEPPER:
|
|
118
|
+
if (this.pepper !== undefined) return this.pepper;
|
|
119
|
+
if (this.network === Network.CUSTOM) throw new Error("Please provide a custom pepper service url");
|
|
120
|
+
return NetworkToPepperAPI[this.network];
|
|
121
|
+
case AptosApiType.PROVER:
|
|
122
|
+
if (this.prover !== undefined) return this.prover;
|
|
123
|
+
if (this.network === Network.CUSTOM) throw new Error("Please provide a custom prover service url");
|
|
124
|
+
return NetworkToProverAPI[this.network];
|
|
98
125
|
default:
|
|
99
126
|
throw Error(`apiType ${apiType} is not supported`);
|
|
100
127
|
}
|
|
101
128
|
}
|
|
129
|
+
|
|
130
|
+
/**
|
|
131
|
+
* Checks if the URL is a known pepper service endpoint
|
|
132
|
+
*
|
|
133
|
+
* @internal
|
|
134
|
+
* */
|
|
135
|
+
isPepperServiceRequest(url: string): boolean {
|
|
136
|
+
return NetworkToPepperAPI[this.network] === url;
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
/**
|
|
140
|
+
* Checks if the URL is a known prover service endpoint
|
|
141
|
+
*
|
|
142
|
+
* @internal
|
|
143
|
+
* */
|
|
144
|
+
isProverServiceRequest(url: string): boolean {
|
|
145
|
+
return NetworkToProverAPI[this.network] === url;
|
|
146
|
+
}
|
|
102
147
|
}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
// Copyright © Aptos Foundation
|
|
2
|
+
// SPDX-License-Identifier: Apache-2.0
|
|
3
|
+
|
|
4
|
+
import { EphemeralKeyPair, KeylessAccount, ProofFetchCallback } from "../account";
|
|
5
|
+
import { deriveKeylessAccount, getPepper } from "../internal/keyless";
|
|
6
|
+
import { HexInput } from "../types";
|
|
7
|
+
import { AptosConfig } from "./aptosConfig";
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
* A class to query all `Keyless` related queries on Aptos.
|
|
11
|
+
*/
|
|
12
|
+
export class Keyless {
|
|
13
|
+
constructor(readonly config: AptosConfig) {}
|
|
14
|
+
|
|
15
|
+
/**
|
|
16
|
+
* Fetches the pepper from the Aptos pepper service API.
|
|
17
|
+
*
|
|
18
|
+
* @param args.jwt JWT token
|
|
19
|
+
* @param args.ephemeralKeyPair the EphemeralKeyPair used to generate the nonce in the JWT token
|
|
20
|
+
* @returns The pepper which is a Uint8Array of length 31.
|
|
21
|
+
*/
|
|
22
|
+
async getPepper(args: { jwt: string; ephemeralKeyPair: EphemeralKeyPair }): Promise<Uint8Array> {
|
|
23
|
+
return getPepper({ aptosConfig: this.config, ...args });
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
/**
|
|
27
|
+
* Fetches the pepper from the Aptos pepper service API.
|
|
28
|
+
*
|
|
29
|
+
* @param args.jwt JWT token
|
|
30
|
+
* @param args.ephemeralKeyPair the EphemeralKeyPair used to generate the nonce in the JWT token
|
|
31
|
+
* @param args.uidKey a key in the JWT token to use to set the uidVal in the IdCommitment
|
|
32
|
+
* @param args.pepper the pepper
|
|
33
|
+
* @param args.extraFieldKey a key in the JWT token used to reveal a value on chain
|
|
34
|
+
* @param args.proofFetchCallback a callback function that if set, the fetch of the proof will be done asyncronously. Once
|
|
35
|
+
* if finishes the callback function will be called.
|
|
36
|
+
* @returns A KeylessAccount that can be used to sign transactions
|
|
37
|
+
*/
|
|
38
|
+
async deriveKeylessAccount(args: {
|
|
39
|
+
jwt: string;
|
|
40
|
+
ephemeralKeyPair: EphemeralKeyPair;
|
|
41
|
+
uidKey?: string;
|
|
42
|
+
pepper?: HexInput;
|
|
43
|
+
extraFieldKey?: string;
|
|
44
|
+
proofFetchCallback?: ProofFetchCallback;
|
|
45
|
+
}): Promise<KeylessAccount> {
|
|
46
|
+
return deriveKeylessAccount({ aptosConfig: this.config, ...args });
|
|
47
|
+
}
|
|
48
|
+
}
|
package/src/bcs/deserializer.ts
CHANGED
|
@@ -56,6 +56,46 @@ export class Deserializer {
|
|
|
56
56
|
return textDecoder.decode(value);
|
|
57
57
|
}
|
|
58
58
|
|
|
59
|
+
/**
|
|
60
|
+
* Deserializes a an optional string.
|
|
61
|
+
*
|
|
62
|
+
* BCS layout for Optional<String>: 0 if none, else 1 | string_length | string_content
|
|
63
|
+
* @example
|
|
64
|
+
* ```ts
|
|
65
|
+
* const deserializer = new Deserializer(new Uint8Array([0x00]));
|
|
66
|
+
* assert(deserializer.deserializeOptionStr() === undefined);
|
|
67
|
+
* const deserializer = new Deserializer(new Uint8Array([1, 8, 49, 50, 51, 52, 97, 98, 99, 100]));
|
|
68
|
+
* assert(deserializer.deserializeOptionStr() === "1234abcd");
|
|
69
|
+
* ```
|
|
70
|
+
*/
|
|
71
|
+
deserializeOptionStr(): string | undefined {
|
|
72
|
+
const exists = this.deserializeUleb128AsU32();
|
|
73
|
+
if (exists === 1) {
|
|
74
|
+
return this.deserializeStr();
|
|
75
|
+
}
|
|
76
|
+
return undefined;
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
/**
|
|
80
|
+
* Deserializes a an optional string.
|
|
81
|
+
*
|
|
82
|
+
* BCS layout for Optional<String>: 0 if none, else 1 | string_length | string_content
|
|
83
|
+
* @example
|
|
84
|
+
* ```ts
|
|
85
|
+
* const deserializer = new Deserializer(new Uint8Array([0x00]));
|
|
86
|
+
* assert(deserializer.deserializeOptionStr() === undefined);
|
|
87
|
+
* const deserializer = new Deserializer(new Uint8Array([1, 8, 49, 50, 51, 52, 97, 98, 99, 100]));
|
|
88
|
+
* assert(deserializer.deserializeOptionStr() === "1234abcd");
|
|
89
|
+
* ```
|
|
90
|
+
*/
|
|
91
|
+
deserializeOption<T>(cls: Deserializable<T>): T | undefined {
|
|
92
|
+
const exists = this.deserializeUleb128AsU32();
|
|
93
|
+
if (exists === 1) {
|
|
94
|
+
return this.deserialize(cls);
|
|
95
|
+
}
|
|
96
|
+
return undefined;
|
|
97
|
+
}
|
|
98
|
+
|
|
59
99
|
/**
|
|
60
100
|
* Deserializes an array of bytes.
|
|
61
101
|
*
|
package/src/bcs/serializer.ts
CHANGED
|
@@ -316,6 +316,24 @@ export class Serializer {
|
|
|
316
316
|
item.serialize(this);
|
|
317
317
|
});
|
|
318
318
|
}
|
|
319
|
+
|
|
320
|
+
serializeOption<T extends Serializable>(value?: T): void {
|
|
321
|
+
if (value === undefined) {
|
|
322
|
+
this.serializeU32AsUleb128(0);
|
|
323
|
+
} else {
|
|
324
|
+
this.serializeU32AsUleb128(1);
|
|
325
|
+
value.serialize(this);
|
|
326
|
+
}
|
|
327
|
+
}
|
|
328
|
+
|
|
329
|
+
serializeOptionStr(value?: string): void {
|
|
330
|
+
if (value === undefined) {
|
|
331
|
+
this.serializeU32AsUleb128(0);
|
|
332
|
+
} else {
|
|
333
|
+
this.serializeU32AsUleb128(1);
|
|
334
|
+
this.serializeStr(value);
|
|
335
|
+
}
|
|
336
|
+
}
|
|
319
337
|
}
|
|
320
338
|
|
|
321
339
|
export function ensureBoolean(value: unknown): asserts value is boolean {
|
package/src/cli/localNode.ts
CHANGED
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
import { ChildProcessWithoutNullStreams, spawn } from "child_process";
|
|
2
2
|
import kill from "tree-kill";
|
|
3
|
+
import { platform } from "os";
|
|
4
|
+
|
|
3
5
|
import { sleep } from "../utils/helpers";
|
|
4
6
|
|
|
5
7
|
export class LocalNode {
|
|
@@ -40,7 +42,15 @@ export class LocalNode {
|
|
|
40
42
|
const cliCommand = "npx";
|
|
41
43
|
const cliArgs = ["aptos", "node", "run-local-testnet", "--force-restart", "--assume-yes", "--with-indexer-api"];
|
|
42
44
|
|
|
43
|
-
const
|
|
45
|
+
const currentPlatform = platform();
|
|
46
|
+
let childProcess;
|
|
47
|
+
// Check if current OS is windows
|
|
48
|
+
if (currentPlatform === "win32") {
|
|
49
|
+
childProcess = spawn(cliCommand, cliArgs, { shell: true });
|
|
50
|
+
} else {
|
|
51
|
+
childProcess = spawn(cliCommand, cliArgs);
|
|
52
|
+
}
|
|
53
|
+
|
|
44
54
|
this.process = childProcess;
|
|
45
55
|
|
|
46
56
|
childProcess.stderr?.on("data", (data: any) => {
|
package/src/client/core.ts
CHANGED
|
@@ -106,6 +106,14 @@ export async function aptosRequest<Req extends {}, Res extends {}>(
|
|
|
106
106
|
return result;
|
|
107
107
|
}
|
|
108
108
|
|
|
109
|
+
if (result.status >= 500) {
|
|
110
|
+
throw new AptosApiError(options, result, `${response.data}`);
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
if (aptosConfig.isPepperServiceRequest(url) || aptosConfig.isProverServiceRequest(url)) {
|
|
114
|
+
throw new AptosApiError(options, result, `${response.data}`);
|
|
115
|
+
}
|
|
116
|
+
|
|
109
117
|
let errorMessage: string;
|
|
110
118
|
|
|
111
119
|
if (result && result.data && "message" in result.data && "error_code" in result.data) {
|
package/src/client/get.ts
CHANGED
|
@@ -89,6 +89,12 @@ export async function getAptosFullNode<Req extends {}, Res extends {}>(
|
|
|
89
89
|
});
|
|
90
90
|
}
|
|
91
91
|
|
|
92
|
+
export async function getAptosPepperService<Req extends {}, Res extends {}>(
|
|
93
|
+
options: GetAptosRequestOptions,
|
|
94
|
+
): Promise<AptosResponse<Req, Res>> {
|
|
95
|
+
return get<Req, Res>({ ...options, type: AptosApiType.PEPPER });
|
|
96
|
+
}
|
|
97
|
+
|
|
92
98
|
/// This function is a helper for paginating using a function wrapping an API
|
|
93
99
|
export async function paginateWithCursor<Req extends Record<string, any>, Res extends Array<{}>>(
|
|
94
100
|
options: GetAptosRequestOptions,
|