@ritbit/v4-client-js 2.5.2 → 2.6.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.
Files changed (151) hide show
  1. package/build/cjs/node_modules/@ritbit/v4-proto/src/codegen/ritbit/accountplus/models.js +19 -3
  2. package/build/cjs/node_modules/@ritbit/v4-proto/src/codegen/ritbit/accountplus/params.js +28 -3
  3. package/build/cjs/node_modules/@ritbit/v4-proto/src/codegen/ritbit/accountplus/tx.js +92 -5
  4. package/build/cjs/node_modules/@ritbit/v4-proto/src/codegen/ritbit/accountplus/tx.rpc.msg.js +7 -1
  5. package/build/cjs/node_modules/@ritbit/v4-proto/src/codegen/ritbit/assets/tx.js +19 -3
  6. package/build/cjs/node_modules/@ritbit/v4-proto/src/codegen/ritbit/bridge/tx.js +1 -1
  7. package/build/cjs/node_modules/@ritbit/v4-proto/src/codegen/ritbit/denomwrap/params.js +134 -0
  8. package/build/cjs/node_modules/@ritbit/v4-proto/src/codegen/ritbit/denomwrap/tx.js +204 -0
  9. package/build/cjs/node_modules/@ritbit/v4-proto/src/codegen/ritbit/denomwrap/tx.rpc.msg.js +57 -0
  10. package/build/cjs/node_modules/@ritbit/v4-proto/src/codegen/ritbit/lcd.js +4 -1
  11. package/build/cjs/node_modules/@ritbit/v4-proto/src/codegen/ritbit/rpc.query.js +3 -2
  12. package/build/cjs/node_modules/@ritbit/v4-proto/src/codegen/ritbit/rpc.tx.js +4 -2
  13. package/build/cjs/node_modules/@ritbit/v4-proto/src/codegen/ritbit/sending/tx.js +1 -1
  14. package/build/cjs/node_modules/@ritbit/v4-proto/src/codegen/ritbit/wrap/genesis.js +151 -0
  15. package/build/cjs/node_modules/@ritbit/v4-proto/src/codegen/ritbit/wrap/params.js +134 -0
  16. package/build/cjs/node_modules/@ritbit/v4-proto/src/codegen/ritbit/wrap/query.js +248 -0
  17. package/build/cjs/node_modules/@ritbit/v4-proto/src/codegen/ritbit/wrap/query.lcd.js +34 -0
  18. package/build/cjs/node_modules/@ritbit/v4-proto/src/codegen/ritbit/wrap/query.rpc.Query.js +71 -0
  19. package/build/cjs/node_modules/@ritbit/v4-proto/src/codegen/ritbit/wrap/tx.js +282 -0
  20. package/build/cjs/node_modules/@ritbit/v4-proto/src/codegen/ritbit/wrap/tx.rpc.msg.js +63 -0
  21. package/build/cjs/src/clients/composite-client.js +7 -3
  22. package/build/cjs/src/clients/constants.js +15 -3
  23. package/build/cjs/src/clients/lib/accounts.js +44 -5
  24. package/build/cjs/src/clients/lib/agent-approval-tx.js +83 -0
  25. package/build/cjs/src/clients/lib/agent-approval.js +119 -0
  26. package/build/cjs/src/clients/lib/eip712.js +592 -0
  27. package/build/cjs/src/clients/lib/eth-pubkey.js +68 -0
  28. package/build/cjs/src/clients/modules/composer.js +15 -2
  29. package/build/cjs/src/clients/modules/eip712-signer.js +189 -0
  30. package/build/cjs/src/clients/modules/eth-agent-wallet.js +101 -0
  31. package/build/cjs/src/clients/modules/eth-wallet.js +91 -0
  32. package/build/cjs/src/clients/modules/local-wallet.js +9 -2
  33. package/build/cjs/src/clients/modules/post.js +14 -4
  34. package/build/cjs/src/clients/modules/signer.js +7 -2
  35. package/build/cjs/src/index.js +38 -2
  36. package/build/cjs/src/lib/evm-address.js +92 -0
  37. package/build/cjs/src/lib/trading-key-utils.js +41 -3
  38. package/build/cjs/tsconfig.cjs.tsbuildinfo +1 -1
  39. package/build/esm/node_modules/@ritbit/v4-proto/src/codegen/ritbit/accountplus/models.d.ts +15 -0
  40. package/build/esm/node_modules/@ritbit/v4-proto/src/codegen/ritbit/accountplus/models.d.ts.map +1 -1
  41. package/build/esm/node_modules/@ritbit/v4-proto/src/codegen/ritbit/accountplus/models.js +19 -3
  42. package/build/esm/node_modules/@ritbit/v4-proto/src/codegen/ritbit/accountplus/params.d.ts +24 -1
  43. package/build/esm/node_modules/@ritbit/v4-proto/src/codegen/ritbit/accountplus/params.d.ts.map +1 -1
  44. package/build/esm/node_modules/@ritbit/v4-proto/src/codegen/ritbit/accountplus/params.js +28 -3
  45. package/build/esm/node_modules/@ritbit/v4-proto/src/codegen/ritbit/accountplus/tx.d.ts +43 -1
  46. package/build/esm/node_modules/@ritbit/v4-proto/src/codegen/ritbit/accountplus/tx.d.ts.map +1 -1
  47. package/build/esm/node_modules/@ritbit/v4-proto/src/codegen/ritbit/accountplus/tx.js +91 -4
  48. package/build/esm/node_modules/@ritbit/v4-proto/src/codegen/ritbit/accountplus/tx.rpc.msg.d.ts +4 -1
  49. package/build/esm/node_modules/@ritbit/v4-proto/src/codegen/ritbit/accountplus/tx.rpc.msg.d.ts.map +1 -1
  50. package/build/esm/node_modules/@ritbit/v4-proto/src/codegen/ritbit/accountplus/tx.rpc.msg.js +8 -2
  51. package/build/esm/node_modules/@ritbit/v4-proto/src/codegen/ritbit/assets/tx.d.ts +9 -0
  52. package/build/esm/node_modules/@ritbit/v4-proto/src/codegen/ritbit/assets/tx.d.ts.map +1 -1
  53. package/build/esm/node_modules/@ritbit/v4-proto/src/codegen/ritbit/assets/tx.js +19 -3
  54. package/build/esm/node_modules/@ritbit/v4-proto/src/codegen/ritbit/bridge/tx.d.ts +14 -1
  55. package/build/esm/node_modules/@ritbit/v4-proto/src/codegen/ritbit/bridge/tx.d.ts.map +1 -1
  56. package/build/esm/node_modules/@ritbit/v4-proto/src/codegen/ritbit/bridge/tx.js +1 -1
  57. package/build/esm/node_modules/@ritbit/v4-proto/src/codegen/ritbit/denomwrap/params.d.ts +116 -0
  58. package/build/esm/node_modules/@ritbit/v4-proto/src/codegen/ritbit/denomwrap/params.d.ts.map +1 -0
  59. package/build/esm/node_modules/@ritbit/v4-proto/src/codegen/ritbit/denomwrap/params.js +98 -0
  60. package/build/esm/node_modules/@ritbit/v4-proto/src/codegen/ritbit/denomwrap/tx.d.ts +80 -0
  61. package/build/esm/node_modules/@ritbit/v4-proto/src/codegen/ritbit/denomwrap/tx.d.ts.map +1 -0
  62. package/build/esm/node_modules/@ritbit/v4-proto/src/codegen/ritbit/denomwrap/tx.js +168 -0
  63. package/build/esm/node_modules/@ritbit/v4-proto/src/codegen/ritbit/denomwrap/tx.rpc.msg.d.ts +21 -0
  64. package/build/esm/node_modules/@ritbit/v4-proto/src/codegen/ritbit/denomwrap/tx.rpc.msg.d.ts.map +1 -0
  65. package/build/esm/node_modules/@ritbit/v4-proto/src/codegen/ritbit/denomwrap/tx.rpc.msg.js +20 -0
  66. package/build/esm/node_modules/@ritbit/v4-proto/src/codegen/ritbit/lcd.d.ts +1 -0
  67. package/build/esm/node_modules/@ritbit/v4-proto/src/codegen/ritbit/lcd.d.ts.map +1 -1
  68. package/build/esm/node_modules/@ritbit/v4-proto/src/codegen/ritbit/lcd.js +4 -1
  69. package/build/esm/node_modules/@ritbit/v4-proto/src/codegen/ritbit/rpc.query.d.ts +4 -0
  70. package/build/esm/node_modules/@ritbit/v4-proto/src/codegen/ritbit/rpc.query.d.ts.map +1 -1
  71. package/build/esm/node_modules/@ritbit/v4-proto/src/codegen/ritbit/rpc.query.js +3 -2
  72. package/build/esm/node_modules/@ritbit/v4-proto/src/codegen/ritbit/rpc.tx.d.ts +2 -0
  73. package/build/esm/node_modules/@ritbit/v4-proto/src/codegen/ritbit/rpc.tx.d.ts.map +1 -1
  74. package/build/esm/node_modules/@ritbit/v4-proto/src/codegen/ritbit/rpc.tx.js +4 -2
  75. package/build/esm/node_modules/@ritbit/v4-proto/src/codegen/ritbit/sending/tx.d.ts +0 -1
  76. package/build/esm/node_modules/@ritbit/v4-proto/src/codegen/ritbit/sending/tx.d.ts.map +1 -1
  77. package/build/esm/node_modules/@ritbit/v4-proto/src/codegen/ritbit/sending/tx.js +1 -1
  78. package/build/esm/node_modules/@ritbit/v4-proto/src/codegen/ritbit/wrap/genesis.d.ts +79 -0
  79. package/build/esm/node_modules/@ritbit/v4-proto/src/codegen/ritbit/wrap/genesis.d.ts.map +1 -0
  80. package/build/esm/node_modules/@ritbit/v4-proto/src/codegen/ritbit/wrap/genesis.js +115 -0
  81. package/build/esm/node_modules/@ritbit/v4-proto/src/codegen/ritbit/wrap/params.d.ts +116 -0
  82. package/build/esm/node_modules/@ritbit/v4-proto/src/codegen/ritbit/wrap/params.d.ts.map +1 -0
  83. package/build/esm/node_modules/@ritbit/v4-proto/src/codegen/ritbit/wrap/params.js +98 -0
  84. package/build/esm/node_modules/@ritbit/v4-proto/src/codegen/ritbit/wrap/query.d.ts +82 -0
  85. package/build/esm/node_modules/@ritbit/v4-proto/src/codegen/ritbit/wrap/query.d.ts.map +1 -0
  86. package/build/esm/node_modules/@ritbit/v4-proto/src/codegen/ritbit/wrap/query.js +212 -0
  87. package/build/esm/node_modules/@ritbit/v4-proto/src/codegen/ritbit/wrap/query.lcd.d.ts +11 -0
  88. package/build/esm/node_modules/@ritbit/v4-proto/src/codegen/ritbit/wrap/query.lcd.d.ts.map +1 -0
  89. package/build/esm/node_modules/@ritbit/v4-proto/src/codegen/ritbit/wrap/query.lcd.js +30 -0
  90. package/build/esm/node_modules/@ritbit/v4-proto/src/codegen/ritbit/wrap/query.rpc.Query.d.ts +29 -0
  91. package/build/esm/node_modules/@ritbit/v4-proto/src/codegen/ritbit/wrap/query.rpc.Query.d.ts.map +1 -0
  92. package/build/esm/node_modules/@ritbit/v4-proto/src/codegen/ritbit/wrap/query.rpc.Query.js +33 -0
  93. package/build/esm/node_modules/@ritbit/v4-proto/src/codegen/ritbit/wrap/tx.d.ts +123 -0
  94. package/build/esm/node_modules/@ritbit/v4-proto/src/codegen/ritbit/wrap/tx.d.ts.map +1 -0
  95. package/build/esm/node_modules/@ritbit/v4-proto/src/codegen/ritbit/wrap/tx.js +246 -0
  96. package/build/esm/node_modules/@ritbit/v4-proto/src/codegen/ritbit/wrap/tx.rpc.msg.d.ts +36 -0
  97. package/build/esm/node_modules/@ritbit/v4-proto/src/codegen/ritbit/wrap/tx.rpc.msg.d.ts.map +1 -0
  98. package/build/esm/node_modules/@ritbit/v4-proto/src/codegen/ritbit/wrap/tx.rpc.msg.js +26 -0
  99. package/build/esm/src/clients/composite-client.d.ts +6 -1
  100. package/build/esm/src/clients/composite-client.d.ts.map +1 -1
  101. package/build/esm/src/clients/composite-client.js +7 -3
  102. package/build/esm/src/clients/constants.d.ts +13 -1
  103. package/build/esm/src/clients/constants.d.ts.map +1 -1
  104. package/build/esm/src/clients/constants.js +13 -1
  105. package/build/esm/src/clients/lib/accounts.d.ts +4 -3
  106. package/build/esm/src/clients/lib/accounts.d.ts.map +1 -1
  107. package/build/esm/src/clients/lib/accounts.js +44 -5
  108. package/build/esm/src/clients/lib/agent-approval-tx.d.ts +46 -0
  109. package/build/esm/src/clients/lib/agent-approval-tx.d.ts.map +1 -0
  110. package/build/esm/src/clients/lib/agent-approval-tx.js +79 -0
  111. package/build/esm/src/clients/lib/agent-approval.d.ts +64 -0
  112. package/build/esm/src/clients/lib/agent-approval.d.ts.map +1 -0
  113. package/build/esm/src/clients/lib/agent-approval.js +112 -0
  114. package/build/esm/src/clients/lib/eip712.d.ts +95 -0
  115. package/build/esm/src/clients/lib/eip712.d.ts.map +1 -0
  116. package/build/esm/src/clients/lib/eip712.js +581 -0
  117. package/build/esm/src/clients/lib/eth-pubkey.d.ts +44 -0
  118. package/build/esm/src/clients/lib/eth-pubkey.d.ts.map +1 -0
  119. package/build/esm/src/clients/lib/eth-pubkey.js +61 -0
  120. package/build/esm/src/clients/modules/composer.d.ts +12 -1
  121. package/build/esm/src/clients/modules/composer.d.ts.map +1 -1
  122. package/build/esm/src/clients/modules/composer.js +15 -2
  123. package/build/esm/src/clients/modules/eip712-signer.d.ts +99 -0
  124. package/build/esm/src/clients/modules/eip712-signer.d.ts.map +1 -0
  125. package/build/esm/src/clients/modules/eip712-signer.js +183 -0
  126. package/build/esm/src/clients/modules/eth-agent-wallet.d.ts +39 -0
  127. package/build/esm/src/clients/modules/eth-agent-wallet.d.ts.map +1 -0
  128. package/build/esm/src/clients/modules/eth-agent-wallet.js +97 -0
  129. package/build/esm/src/clients/modules/eth-wallet.d.ts +32 -0
  130. package/build/esm/src/clients/modules/eth-wallet.d.ts.map +1 -0
  131. package/build/esm/src/clients/modules/eth-wallet.js +83 -0
  132. package/build/esm/src/clients/modules/local-wallet.d.ts +2 -1
  133. package/build/esm/src/clients/modules/local-wallet.d.ts.map +1 -1
  134. package/build/esm/src/clients/modules/local-wallet.js +9 -2
  135. package/build/esm/src/clients/modules/post.d.ts +1 -1
  136. package/build/esm/src/clients/modules/post.d.ts.map +1 -1
  137. package/build/esm/src/clients/modules/post.js +14 -4
  138. package/build/esm/src/clients/modules/signer.d.ts +2 -1
  139. package/build/esm/src/clients/modules/signer.d.ts.map +1 -1
  140. package/build/esm/src/clients/modules/signer.js +7 -2
  141. package/build/esm/src/index.d.ts +13 -0
  142. package/build/esm/src/index.d.ts.map +1 -1
  143. package/build/esm/src/index.js +9 -1
  144. package/build/esm/src/lib/evm-address.d.ts +31 -0
  145. package/build/esm/src/lib/evm-address.d.ts.map +1 -0
  146. package/build/esm/src/lib/evm-address.js +85 -0
  147. package/build/esm/src/lib/trading-key-utils.d.ts +3 -0
  148. package/build/esm/src/lib/trading-key-utils.d.ts.map +1 -1
  149. package/build/esm/src/lib/trading-key-utils.js +42 -4
  150. package/build/esm/tsconfig.esm.tsbuildinfo +1 -1
  151. package/package.json +2 -2
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/index.ts"],"names":[],"mappings":"AACA,cAAc,SAAS,CAAC;AAGxB,OAAO,KAAK,OAAO,MAAM,eAAe,CAAC;AACzC,OAAO,KAAK,UAAU,MAAM,kBAAkB,CAAC;AAC/C,OAAO,KAAK,eAAe,MAAM,yBAAyB,CAAC;AAC3D,OAAO,KAAK,KAAK,MAAM,aAAa,CAAC;AACrC,OAAO,KAAK,UAAU,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAC7D,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AACvD,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AACzD,OAAO,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,gCAAgC,CAAC;AACxE,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AACrD,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AACvD,OAAO,EAAE,cAAc,IAAI,gBAAgB,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAC1F,OAAO,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAC7D,OAAO,EAAE,UAAU,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAC9D,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAGvD,cAAc,kCAAkC,CAAC;AACjD,cAAc,8BAA8B,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/index.ts"],"names":[],"mappings":"AACA,cAAc,SAAS,CAAC;AAGxB,OAAO,KAAK,UAAU,MAAM,mBAAmB,CAAC;AAChD,OAAO,KAAK,OAAO,MAAM,eAAe,CAAC;AACzC,OAAO,KAAK,UAAU,MAAM,kBAAkB,CAAC;AAC/C,OAAO,KAAK,eAAe,MAAM,yBAAyB,CAAC;AAC3D,OAAO,KAAK,KAAK,MAAM,aAAa,CAAC;AACrC,OAAO,KAAK,UAAU,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAC7D,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AACvD,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AACzD,OAAO,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,gCAAgC,CAAC;AACxE,OAAO,EACL,OAAO,IAAI,cAAc,EACzB,wBAAwB,EACxB,iBAAiB,GAClB,MAAM,8BAA8B,CAAC;AACtC,OAAO,EACL,wBAAwB,EACxB,oBAAoB,EACpB,uBAAuB,EACvB,yBAAyB,EACzB,6BAA6B,GAC9B,MAAM,0BAA0B,CAAC;AAClC,YAAY,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AACnE,OAAO,EACL,kBAAkB,EAClB,YAAY,EACZ,4BAA4B,EAC5B,6BAA6B,EAC7B,wBAAwB,GACzB,MAAM,sBAAsB,CAAC;AAC9B,YAAY,EACV,oBAAoB,EACpB,cAAc,EACd,YAAY,EACZ,eAAe,EACf,eAAe,EACf,WAAW,GACZ,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EACL,YAAY,EACZ,mCAAmC,EACnC,sBAAsB,GACvB,MAAM,iCAAiC,CAAC;AACzC,YAAY,EAAE,iBAAiB,EAAE,qBAAqB,EAAE,MAAM,iCAAiC,CAAC;AAChG,OAAO,EACL,0BAA0B,EAC1B,6BAA6B,EAC7B,2BAA2B,EAC3B,wBAAwB,EACxB,wBAAwB,EACxB,iBAAiB,EACjB,iBAAiB,EACjB,mBAAmB,EACnB,sBAAsB,GACvB,MAAM,8BAA8B,CAAC;AACtC,YAAY,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAClE,OAAO,EACL,uBAAuB,EACvB,mBAAmB,GACpB,MAAM,iCAAiC,CAAC;AACzC,YAAY,EACV,sBAAsB,EACtB,yBAAyB,GAC1B,MAAM,iCAAiC,CAAC;AACzC,OAAO,EAAE,cAAc,EAAE,MAAM,oCAAoC,CAAC;AACpE,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AACrD,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AACvD,OAAO,EAAE,cAAc,IAAI,gBAAgB,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAC1F,OAAO,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAC7D,OAAO,EAAE,UAAU,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAC9D,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAGvD,cAAc,kCAAkC,CAAC;AACjD,cAAc,8BAA8B,CAAC"}
@@ -1,6 +1,7 @@
1
1
  // Types.
2
2
  export * from './types';
3
3
  // Utility functions.
4
+ export * as evmAddress from './lib/evm-address';
4
5
  export * as helpers from './lib/helpers';
5
6
  export * as onboarding from './lib/onboarding';
6
7
  export * as tradingKeyUtils from './lib/trading-key-utils';
@@ -10,6 +11,13 @@ export { CompositeClient } from './clients/composite-client';
10
11
  export { FaucetClient } from './clients/faucet-client';
11
12
  export { IndexerClient } from './clients/indexer-client';
12
13
  export { default as LocalWallet } from './clients/modules/local-wallet';
14
+ export { default as EthLocalWallet, DirectEthSecp256k1Signer, ETH_BIP44_HD_PATH, } from './clients/modules/eth-wallet';
15
+ export { encodeEthSecp256k1Pubkey, isEthSecp256k1Pubkey, ethSecp256k1PubkeyToAny, ETH_SECP256K1_PUBKEY_TYPE, ETH_SECP256K1_PUBKEY_TYPE_URL, } from './clients/lib/eth-pubkey';
16
+ export { createEip712Domain, eip712Digest, registerEip712AminoConverter, signDocBytesToEip712TypedData, signDocToEip712TypedData, } from './clients/lib/eip712';
17
+ export { Eip712Signer, recoverPubKeyFromTypedDataSignature, signCosmosTxWithEip712, } from './clients/modules/eip712-signer';
18
+ export { AGENT_APPROVAL_DOMAIN_NAME, AGENT_APPROVAL_DOMAIN_VERSION, AGENT_APPROVAL_PRIMARY_TYPE, AGENT_AUTHENTICATOR_TYPE, AGENT_REVOCATION_ADDRESS, agentAddressBytes, agentAddressToHex, agentApprovalDigest, agentApprovalTypedData, } from './clients/lib/agent-approval';
19
+ export { composeAgentApprovalMsg, signAgentApprovalTx, } from './clients/lib/agent-approval-tx';
20
+ export { EthAgentWallet } from './clients/modules/eth-agent-wallet';
13
21
  export { NobleClient } from './clients/noble-client';
14
22
  export { SocketClient } from './clients/socket-client';
15
23
  export { SubaccountInfo as SubaccountClient, SubaccountInfo } from './clients/subaccount';
@@ -19,4 +27,4 @@ export { NetworkOptimizer } from './network_optimizer';
19
27
  // Dual / multi-asset collateral helpers.
20
28
  export * from './clients/helpers/asset-registry';
21
29
  export * from './clients/helpers/collateral';
22
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsU0FBUztBQUNULGNBQWMsU0FBUyxDQUFDO0FBRXhCLHFCQUFxQjtBQUNyQixPQUFPLEtBQUssT0FBTyxNQUFNLGVBQWUsQ0FBQztBQUN6QyxPQUFPLEtBQUssVUFBVSxNQUFNLGtCQUFrQixDQUFDO0FBQy9DLE9BQU8sS0FBSyxlQUFlLE1BQU0seUJBQXlCLENBQUM7QUFDM0QsT0FBTyxLQUFLLEtBQUssTUFBTSxhQUFhLENBQUM7QUFDckMsT0FBTyxLQUFLLFVBQVUsTUFBTSxrQkFBa0IsQ0FBQztBQUMvQyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDN0QsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUN6RCxPQUFPLEVBQUUsT0FBTyxJQUFJLFdBQVcsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQ3hFLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUNyRCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDdkQsT0FBTyxFQUFFLGNBQWMsSUFBSSxnQkFBZ0IsRUFBRSxjQUFjLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUMxRixPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDN0QsT0FBTyxFQUFFLFVBQVUsRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM5RCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUV2RCx5Q0FBeUM7QUFDekMsY0FBYyxrQ0FBa0MsQ0FBQztBQUNqRCxjQUFjLDhCQUE4QixDQUFDIn0=
30
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsU0FBUztBQUNULGNBQWMsU0FBUyxDQUFDO0FBRXhCLHFCQUFxQjtBQUNyQixPQUFPLEtBQUssVUFBVSxNQUFNLG1CQUFtQixDQUFDO0FBQ2hELE9BQU8sS0FBSyxPQUFPLE1BQU0sZUFBZSxDQUFDO0FBQ3pDLE9BQU8sS0FBSyxVQUFVLE1BQU0sa0JBQWtCLENBQUM7QUFDL0MsT0FBTyxLQUFLLGVBQWUsTUFBTSx5QkFBeUIsQ0FBQztBQUMzRCxPQUFPLEtBQUssS0FBSyxNQUFNLGFBQWEsQ0FBQztBQUNyQyxPQUFPLEtBQUssVUFBVSxNQUFNLGtCQUFrQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUM3RCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDdkQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ3pELE9BQU8sRUFBRSxPQUFPLElBQUksV0FBVyxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDeEUsT0FBTyxFQUNMLE9BQU8sSUFBSSxjQUFjLEVBQ3pCLHdCQUF3QixFQUN4QixpQkFBaUIsR0FDbEIsTUFBTSw4QkFBOEIsQ0FBQztBQUN0QyxPQUFPLEVBQ0wsd0JBQXdCLEVBQ3hCLG9CQUFvQixFQUNwQix1QkFBdUIsRUFDdkIseUJBQXlCLEVBQ3pCLDZCQUE2QixHQUM5QixNQUFNLDBCQUEwQixDQUFDO0FBRWxDLE9BQU8sRUFDTCxrQkFBa0IsRUFDbEIsWUFBWSxFQUNaLDRCQUE0QixFQUM1Qiw2QkFBNkIsRUFDN0Isd0JBQXdCLEdBQ3pCLE1BQU0sc0JBQXNCLENBQUM7QUFTOUIsT0FBTyxFQUNMLFlBQVksRUFDWixtQ0FBbUMsRUFDbkMsc0JBQXNCLEdBQ3ZCLE1BQU0saUNBQWlDLENBQUM7QUFFekMsT0FBTyxFQUNMLDBCQUEwQixFQUMxQiw2QkFBNkIsRUFDN0IsMkJBQTJCLEVBQzNCLHdCQUF3QixFQUN4Qix3QkFBd0IsRUFDeEIsaUJBQWlCLEVBQ2pCLGlCQUFpQixFQUNqQixtQkFBbUIsRUFDbkIsc0JBQXNCLEdBQ3ZCLE1BQU0sOEJBQThCLENBQUM7QUFFdEMsT0FBTyxFQUNMLHVCQUF1QixFQUN2QixtQkFBbUIsR0FDcEIsTUFBTSxpQ0FBaUMsQ0FBQztBQUt6QyxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDcEUsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3JELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUN2RCxPQUFPLEVBQUUsY0FBYyxJQUFJLGdCQUFnQixFQUFFLGNBQWMsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQzFGLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUM3RCxPQUFPLEVBQUUsVUFBVSxFQUFFLGlCQUFpQixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzlELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBRXZELHlDQUF5QztBQUN6QyxjQUFjLGtDQUFrQyxDQUFDO0FBQ2pELGNBQWMsOEJBQThCLENBQUMifQ==
@@ -0,0 +1,31 @@
1
+ /**
2
+ * @description Derive the ethereum-style 20-byte address from a secp256k1
3
+ * public key (compressed 33-byte or uncompressed 65-byte form).
4
+ *
5
+ * @returns keccak256(uncompressed pubkey without the 04 prefix)[12:].
6
+ */
7
+ export declare function ethAddressBytesFromPubkey(pubkey: Uint8Array): Uint8Array;
8
+ /**
9
+ * @description Apply the EIP-55 mixed-case checksum to a hex address.
10
+ *
11
+ * @returns Checksummed address with 0x prefix.
12
+ */
13
+ export declare function toChecksumEthAddress(ethAddress: string): string;
14
+ /**
15
+ * @description An address is valid if it is 0x + 40 hex characters and, when
16
+ * mixed-case, carries a correct EIP-55 checksum. All-lowercase and
17
+ * all-uppercase addresses are accepted as checksum-less.
18
+ */
19
+ export declare function isValidEthAddress(address: string): boolean;
20
+ /**
21
+ * @description Convert a 0x address to its bech32 representation (the same 20
22
+ * bytes). Accepts the address with or without the 0x prefix; a mixed-case
23
+ * address must carry a valid EIP-55 checksum.
24
+ */
25
+ export declare function ethAddressToBech32(ethAddress: string, prefix?: string): string;
26
+ /**
27
+ * @description Convert a bech32 account address to its 0x representation (the
28
+ * same 20 bytes) with EIP-55 checksum casing.
29
+ */
30
+ export declare function bech32ToEthAddress(address: string): string;
31
+ //# sourceMappingURL=evm-address.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"evm-address.d.ts","sourceRoot":"","sources":["../../../../src/lib/evm-address.ts"],"names":[],"mappings":"AAiBA;;;;;GAKG;AACH,wBAAgB,yBAAyB,CAAC,MAAM,EAAE,UAAU,GAAG,UAAU,CAOxE;AAED;;;;GAIG;AACH,wBAAgB,oBAAoB,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CAW/D;AAED;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAS1D;AAED;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,GAAE,MAAsB,GAAG,MAAM,CAS7F;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAQ1D"}
@@ -0,0 +1,85 @@
1
+ import { fromBech32, fromHex, toBech32, toHex } from '@cosmjs/encoding';
2
+ import { keccak256 } from 'ethereum-cryptography/keccak';
3
+ import { secp256k1 } from 'ethereum-cryptography/secp256k1';
4
+ import { BECH32_PREFIX } from './constants';
5
+ import { stripHexPrefix } from './helpers';
6
+ /**
7
+ * Ethereum-style address helpers for the 0x == rit1 wallet model: an
8
+ * eth_secp256k1 account's address is keccak256(uncompressed pubkey without the
9
+ * 04 prefix)[12:], and the 0x and bech32 representations are the same 20
10
+ * bytes.
11
+ */
12
+ const ETH_ADDRESS_BYTE_LENGTH = 20;
13
+ const ETH_ADDRESS_REGEX = /^(0x)?[0-9a-fA-F]{40}$/;
14
+ /**
15
+ * @description Derive the ethereum-style 20-byte address from a secp256k1
16
+ * public key (compressed 33-byte or uncompressed 65-byte form).
17
+ *
18
+ * @returns keccak256(uncompressed pubkey without the 04 prefix)[12:].
19
+ */
20
+ export function ethAddressBytesFromPubkey(pubkey) {
21
+ const uncompressed = pubkey.length === 65 && pubkey[0] === 0x04
22
+ ? pubkey
23
+ : secp256k1.ProjectivePoint.fromHex(pubkey).toRawBytes(false);
24
+ // Last 20 bytes of the 32-byte keccak hash.
25
+ return keccak256(uncompressed.slice(1)).slice(-ETH_ADDRESS_BYTE_LENGTH);
26
+ }
27
+ /**
28
+ * @description Apply the EIP-55 mixed-case checksum to a hex address.
29
+ *
30
+ * @returns Checksummed address with 0x prefix.
31
+ */
32
+ export function toChecksumEthAddress(ethAddress) {
33
+ const hex = stripHexPrefix(ethAddress).toLowerCase();
34
+ if (!ETH_ADDRESS_REGEX.test(hex)) {
35
+ throw new Error(`Invalid ethereum address: ${ethAddress}`);
36
+ }
37
+ const hash = toHex(keccak256(new Uint8Array(Buffer.from(hex, 'ascii'))));
38
+ let checksummed = '';
39
+ for (let i = 0; i < hex.length; i++) {
40
+ checksummed += parseInt(hash[i], 16) >= 8 ? hex[i].toUpperCase() : hex[i];
41
+ }
42
+ return `0x${checksummed}`;
43
+ }
44
+ /**
45
+ * @description An address is valid if it is 0x + 40 hex characters and, when
46
+ * mixed-case, carries a correct EIP-55 checksum. All-lowercase and
47
+ * all-uppercase addresses are accepted as checksum-less.
48
+ */
49
+ export function isValidEthAddress(address) {
50
+ if (!/^0x[0-9a-fA-F]{40}$/.test(address)) {
51
+ return false;
52
+ }
53
+ const hex = address.slice(2);
54
+ if (hex === hex.toLowerCase() || hex === hex.toUpperCase()) {
55
+ return true;
56
+ }
57
+ return address === toChecksumEthAddress(address);
58
+ }
59
+ /**
60
+ * @description Convert a 0x address to its bech32 representation (the same 20
61
+ * bytes). Accepts the address with or without the 0x prefix; a mixed-case
62
+ * address must carry a valid EIP-55 checksum.
63
+ */
64
+ export function ethAddressToBech32(ethAddress, prefix = BECH32_PREFIX) {
65
+ const hex = stripHexPrefix(ethAddress);
66
+ if (!ETH_ADDRESS_REGEX.test(hex)) {
67
+ throw new Error(`Invalid ethereum address: ${ethAddress}`);
68
+ }
69
+ if (hex !== hex.toLowerCase() && hex !== hex.toUpperCase() && !isValidEthAddress(`0x${hex}`)) {
70
+ throw new Error(`Invalid EIP-55 checksum in ethereum address: ${ethAddress}`);
71
+ }
72
+ return toBech32(prefix, fromHex(hex.toLowerCase()));
73
+ }
74
+ /**
75
+ * @description Convert a bech32 account address to its 0x representation (the
76
+ * same 20 bytes) with EIP-55 checksum casing.
77
+ */
78
+ export function bech32ToEthAddress(address) {
79
+ const { data } = fromBech32(address);
80
+ if (data.length !== ETH_ADDRESS_BYTE_LENGTH) {
81
+ throw new Error(`Address ${address} decodes to ${data.length} bytes, expected ${ETH_ADDRESS_BYTE_LENGTH}`);
82
+ }
83
+ return toChecksumEthAddress(toHex(data));
84
+ }
85
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXZtLWFkZHJlc3MuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbGliL2V2bS1hZGRyZXNzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsT0FBTyxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUN4RSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDekQsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBRTVELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDNUMsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUUzQzs7Ozs7R0FLRztBQUVILE1BQU0sdUJBQXVCLEdBQUcsRUFBRSxDQUFDO0FBQ25DLE1BQU0saUJBQWlCLEdBQUcsd0JBQXdCLENBQUM7QUFFbkQ7Ozs7O0dBS0c7QUFDSCxNQUFNLFVBQVUseUJBQXlCLENBQUMsTUFBa0I7SUFDMUQsTUFBTSxZQUFZLEdBQ2hCLE1BQU0sQ0FBQyxNQUFNLEtBQUssRUFBRSxJQUFJLE1BQU0sQ0FBQyxDQUFDLENBQUMsS0FBSyxJQUFJO1FBQ3hDLENBQUMsQ0FBQyxNQUFNO1FBQ1IsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxlQUFlLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNsRSw0Q0FBNEM7SUFDNUMsT0FBTyxTQUFTLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLHVCQUF1QixDQUFDLENBQUM7QUFDMUUsQ0FBQztBQUVEOzs7O0dBSUc7QUFDSCxNQUFNLFVBQVUsb0JBQW9CLENBQUMsVUFBa0I7SUFDckQsTUFBTSxHQUFHLEdBQUcsY0FBYyxDQUFDLFVBQVUsQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUFDO0lBQ3JELElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztRQUNqQyxNQUFNLElBQUksS0FBSyxDQUFDLDZCQUE2QixVQUFVLEVBQUUsQ0FBQyxDQUFDO0lBQzdELENBQUM7SUFDRCxNQUFNLElBQUksR0FBRyxLQUFLLENBQUMsU0FBUyxDQUFDLElBQUksVUFBVSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3pFLElBQUksV0FBVyxHQUFHLEVBQUUsQ0FBQztJQUNyQixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsR0FBRyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDO1FBQ3BDLFdBQVcsSUFBSSxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDNUUsQ0FBQztJQUNELE9BQU8sS0FBSyxXQUFXLEVBQUUsQ0FBQztBQUM1QixDQUFDO0FBRUQ7Ozs7R0FJRztBQUNILE1BQU0sVUFBVSxpQkFBaUIsQ0FBQyxPQUFlO0lBQy9DLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztRQUN6QyxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7SUFDRCxNQUFNLEdBQUcsR0FBRyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzdCLElBQUksR0FBRyxLQUFLLEdBQUcsQ0FBQyxXQUFXLEVBQUUsSUFBSSxHQUFHLEtBQUssR0FBRyxDQUFDLFdBQVcsRUFBRSxFQUFFLENBQUM7UUFDM0QsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBQ0QsT0FBTyxPQUFPLEtBQUssb0JBQW9CLENBQUMsT0FBTyxDQUFDLENBQUM7QUFDbkQsQ0FBQztBQUVEOzs7O0dBSUc7QUFDSCxNQUFNLFVBQVUsa0JBQWtCLENBQUMsVUFBa0IsRUFBRSxTQUFpQixhQUFhO0lBQ25GLE1BQU0sR0FBRyxHQUFHLGNBQWMsQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUN2QyxJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7UUFDakMsTUFBTSxJQUFJLEtBQUssQ0FBQyw2QkFBNkIsVUFBVSxFQUFFLENBQUMsQ0FBQztJQUM3RCxDQUFDO0lBQ0QsSUFBSSxHQUFHLEtBQUssR0FBRyxDQUFDLFdBQVcsRUFBRSxJQUFJLEdBQUcsS0FBSyxHQUFHLENBQUMsV0FBVyxFQUFFLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxLQUFLLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQztRQUM3RixNQUFNLElBQUksS0FBSyxDQUFDLGdEQUFnRCxVQUFVLEVBQUUsQ0FBQyxDQUFDO0lBQ2hGLENBQUM7SUFDRCxPQUFPLFFBQVEsQ0FBQyxNQUFNLEVBQUUsT0FBTyxDQUFDLEdBQUcsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDdEQsQ0FBQztBQUVEOzs7R0FHRztBQUNILE1BQU0sVUFBVSxrQkFBa0IsQ0FBQyxPQUFlO0lBQ2hELE1BQU0sRUFBRSxJQUFJLEVBQUUsR0FBRyxVQUFVLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDckMsSUFBSSxJQUFJLENBQUMsTUFBTSxLQUFLLHVCQUF1QixFQUFFLENBQUM7UUFDNUMsTUFBTSxJQUFJLEtBQUssQ0FDYixXQUFXLE9BQU8sZUFBZSxJQUFJLENBQUMsTUFBTSxvQkFBb0IsdUJBQXVCLEVBQUUsQ0FDMUYsQ0FBQztJQUNKLENBQUM7SUFDRCxPQUFPLG9CQUFvQixDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQzNDLENBQUMifQ==
@@ -17,6 +17,9 @@ export declare const getAuthorizedTradingKeysMetadata: (authorizedKeys: Awaited<
17
17
  id: string;
18
18
  publicKey: string;
19
19
  address: string;
20
+ name: string;
21
+ /** Unix seconds; 0 when the key never expires. */
22
+ expiresAt: number;
20
23
  }>;
21
24
  export {};
22
25
  //# sourceMappingURL=trading-key-utils.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"trading-key-utils.d.ts","sourceRoot":"","sources":["../../../../src/lib/trading-key-utils.ts"],"names":[],"mappings":"AAKA,OAAO,EAEL,iBAAiB,EAIlB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,KAAK,GAAG,EAAE,MAAM,wBAAwB,CAAC;AAKlD,eAAO,MAAM,0BAA0B,QAAa,OAAO,CACzD;IAAE,aAAa,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,GAAG,SAAS,CAwB5F,CAAC;AAIF,eAAO,MAAM,kCAAkC,GAAI,4BAEhD;IACD,qBAAqB,EAAE,MAAM,CAAC;CAC/B,KAAG;IAAE,IAAI,EAAE,iBAAiB,CAAC;IAAC,IAAI,EAAE,UAAU,CAAA;CA6C9C,CAAC;AAGF,KAAK,OAAO,CAAC,CAAC,IAAI,CAAC,SAAS,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AAIrD,eAAO,MAAM,gCAAgC,GAC3C,gBAAgB,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,mBAAmB,CAAC,CAAC,CAAC,CAAC,uBAAuB,CAAC,KACrF,KAAK,CAAC;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CA+B1D,CAAC"}
1
+ {"version":3,"file":"trading-key-utils.d.ts","sourceRoot":"","sources":["../../../../src/lib/trading-key-utils.ts"],"names":[],"mappings":"AAKA,OAAO,EAEL,iBAAiB,EAOlB,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EAAE,KAAK,GAAG,EAAE,MAAM,wBAAwB,CAAC;AAKlD,eAAO,MAAM,0BAA0B,QAAa,OAAO,CACzD;IAAE,aAAa,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,GAAG,SAAS,CAwB5F,CAAC;AAIF,eAAO,MAAM,kCAAkC,GAAI,4BAEhD;IACD,qBAAqB,EAAE,MAAM,CAAC;CAC/B,KAAG;IAAE,IAAI,EAAE,iBAAiB,CAAC;IAAC,IAAI,EAAE,UAAU,CAAA;CAoE9C,CAAC;AAGF,KAAK,OAAO,CAAC,CAAC,IAAI,CAAC,SAAS,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AAIrD,eAAO,MAAM,gCAAgC,GAC3C,gBAAgB,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,mBAAmB,CAAC,CAAC,CAAC,CAAC,uBAAuB,CAAC,KACrF,KAAK,CAAC;IACP,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,kDAAkD;IAClD,SAAS,EAAE,MAAM,CAAC;CACnB,CAkDA,CAAC"}
@@ -2,7 +2,7 @@ import { fromBase64, toBase64, toBech32, toHex } from '@cosmjs/encoding';
2
2
  import { rawSecp256k1PubkeyToRawAddress } from '@cosmjs/tendermint-rpc';
3
3
  import { generateMnemonic } from '@scure/bip39';
4
4
  import { wordlist } from '@scure/bip39/wordlists/english';
5
- import { AuthenticatorType, TYPE_URL_BATCH_CANCEL, TYPE_URL_MSG_CANCEL_ORDER, TYPE_URL_MSG_PLACE_ORDER, } from '../clients/constants';
5
+ import { AuthenticatorType, TYPE_URL_BATCH_CANCEL, TYPE_URL_MSG_CANCEL_ORDER, TYPE_URL_MSG_CREATE_TRANSFER, TYPE_URL_MSG_DEPOSIT_TO_SUBACCOUNT, TYPE_URL_MSG_PLACE_ORDER, TYPE_URL_MSG_WITHDRAW_FROM_SUBACCOUNT, } from '../clients/constants';
6
6
  import LocalWallet from '../clients/modules/local-wallet';
7
7
  import { BECH32_PREFIX } from './constants';
8
8
  import { deriveHDKeyFromMnemonic } from './onboarding';
@@ -44,6 +44,22 @@ export const getAuthorizeNewTradingKeyArguments = ({ generatedWalletPubKey, }) =
44
44
  type: AuthenticatorType.MESSAGE_FILTER,
45
45
  config: wrapAndEncode64(TYPE_URL_BATCH_CANCEL),
46
46
  },
47
+ // Fund movements *within* the account: topping the subaccount up from the
48
+ // wallet, pulling the gas reserve back, moving margin between subaccounts.
49
+ // Safe only because SelfTransferFilter below pins both parties to the owner
50
+ // — on their own these three would let the key send funds to a stranger.
51
+ {
52
+ type: AuthenticatorType.MESSAGE_FILTER,
53
+ config: wrapAndEncode64(TYPE_URL_MSG_DEPOSIT_TO_SUBACCOUNT),
54
+ },
55
+ {
56
+ type: AuthenticatorType.MESSAGE_FILTER,
57
+ config: wrapAndEncode64(TYPE_URL_MSG_WITHDRAW_FROM_SUBACCOUNT),
58
+ },
59
+ {
60
+ type: AuthenticatorType.MESSAGE_FILTER,
61
+ config: wrapAndEncode64(TYPE_URL_MSG_CREATE_TRANSFER),
62
+ },
47
63
  ];
48
64
  const anyOfMessageFilterConfigB64 = wrapAndEncode64(JSON.stringify(messageFilterSubAuth));
49
65
  const subAuth = [
@@ -61,6 +77,13 @@ export const getAuthorizeNewTradingKeyArguments = ({ generatedWalletPubKey, }) =
61
77
  type: AuthenticatorType.SUBACCOUNT_FILTER,
62
78
  config: wrapAndEncode64('0'),
63
79
  },
80
+ // Money may move inside the account and nowhere else. SubaccountFilter above
81
+ // only inspects the three clob messages, so without this the transfer
82
+ // messages would be unconstrained.
83
+ {
84
+ type: AuthenticatorType.SELF_TRANSFER_FILTER,
85
+ config: '',
86
+ },
64
87
  ];
65
88
  const jsonString = JSON.stringify(subAuth);
66
89
  const encodedData = new TextEncoder().encode(jsonString);
@@ -74,8 +97,8 @@ const isTruthy = (n) => Boolean(n);
74
97
  // just parses out keys that match the format created in getAuthorizeNewTradingKeyArguments
75
98
  export const getAuthorizedTradingKeysMetadata = (authorizedKeys) => {
76
99
  return authorizedKeys
77
- .map(({ config, id, type }) => {
78
- var _a;
100
+ .map(({ config, id, type, name, expiresAt }) => {
101
+ var _a, _b;
79
102
  if (type !== AuthenticatorType.ALL_OF) {
80
103
  return null;
81
104
  }
@@ -83,7 +106,20 @@ export const getAuthorizedTradingKeysMetadata = (authorizedKeys) => {
83
106
  if (parsedConfig == null) {
84
107
  return null;
85
108
  }
109
+ // Two ways a key can be authorized. A public key is the original form;
110
+ // an address is the agent form, where the key is recovered from each
111
+ // signature instead of being stored (see EthAddressSignatureVerification).
86
112
  const publicKey = (_a = parsedConfig.find((t) => t.type === AuthenticatorType.SIGNATURE_VERIFICATION)) === null || _a === void 0 ? void 0 : _a.config;
113
+ const agentAddress = (_b = parsedConfig.find((t) => t.type === AuthenticatorType.ETH_ADDRESS_SIGNATURE_VERIFICATION)) === null || _b === void 0 ? void 0 : _b.config;
114
+ if (typeof agentAddress === 'string') {
115
+ return {
116
+ id: id.toString(),
117
+ publicKey: '',
118
+ address: toBech32(BECH32_PREFIX, fromBase64(agentAddress)),
119
+ name: name !== null && name !== void 0 ? name : '',
120
+ expiresAt: expiresAt == null ? 0 : Number(expiresAt.toString()),
121
+ };
122
+ }
87
123
  if (publicKey == null || typeof publicKey !== 'string') {
88
124
  return null;
89
125
  }
@@ -92,8 +128,10 @@ export const getAuthorizedTradingKeysMetadata = (authorizedKeys) => {
92
128
  id: id.toString(),
93
129
  publicKey,
94
130
  address,
131
+ name: name !== null && name !== void 0 ? name : '',
132
+ expiresAt: expiresAt == null ? 0 : Number(expiresAt.toString()),
95
133
  };
96
134
  })
97
135
  .filter(isTruthy);
98
136
  };
99
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhZGluZy1rZXktdXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbGliL3RyYWRpbmcta2V5LXV0aWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUN6RSxPQUFPLEVBQUUsOEJBQThCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUN4RSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDaEQsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBRTFELE9BQU8sRUFFTCxpQkFBaUIsRUFDakIscUJBQXFCLEVBQ3JCLHlCQUF5QixFQUN6Qix3QkFBd0IsR0FDekIsTUFBTSxzQkFBc0IsQ0FBQztBQUU5QixPQUFPLFdBQVcsTUFBTSxpQ0FBaUMsQ0FBQztBQUMxRCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQzVDLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUV2RCxNQUFNLENBQUMsTUFBTSwwQkFBMEIsR0FBRyxLQUFLLElBRTdDLEVBQUU7SUFDRixNQUFNLFFBQVEsR0FBRyxnQkFBZ0IsQ0FBQyxRQUFRLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFDakQsTUFBTSxFQUFFLFVBQVUsRUFBRSxhQUFhLEVBQUUsR0FBRyx1QkFBdUIsQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUN4RSxNQUFNLE1BQU0sR0FBRyxNQUFNLFdBQVcsQ0FBQyxZQUFZLENBQUMsUUFBUSxFQUFFLGFBQWEsQ0FBQyxDQUFDO0lBRXZFLE1BQU0sYUFBYSxHQUFHLGFBQWEsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssS0FBSyxDQUFDLGFBQWEsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztJQUN0RixNQUFNLFNBQVMsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDO0lBQ2hDLE1BQU0sT0FBTyxHQUFHLE1BQU0sQ0FBQyxPQUFPLENBQUM7SUFFL0IsSUFBSSxhQUFhLElBQUksSUFBSSxJQUFJLFNBQVMsSUFBSSxJQUFJLElBQUksT0FBTyxJQUFJLElBQUksRUFBRSxDQUFDO1FBQ2xFLE9BQU8sU0FBUyxDQUFDO0lBQ25CLENBQUM7SUFFRCxPQUFPO1FBQ0wsbUJBQW1CO1FBQ25CLFFBQVE7UUFDUixvQ0FBb0M7UUFDcEMsYUFBYTtRQUNiLGtCQUFrQjtRQUNsQixTQUFTLEVBQUUsU0FBUyxDQUFDLEtBQUs7UUFDMUIsb0RBQW9EO1FBQ3BELE9BQU87S0FDUixDQUFDO0FBQ0osQ0FBQyxDQUFDO0FBRUYsbUZBQW1GO0FBQ25GLHVFQUF1RTtBQUN2RSxNQUFNLENBQUMsTUFBTSxrQ0FBa0MsR0FBRyxDQUFDLEVBQ2pELHFCQUFxQixHQUd0QixFQUFpRCxFQUFFO0lBQ2xELE1BQU0sZUFBZSxHQUFHLENBQUMsQ0FBUyxFQUFVLEVBQUUsQ0FBQyxRQUFRLENBQUMsSUFBSSxXQUFXLEVBQUUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUVyRixNQUFNLG9CQUFvQixHQUFHO1FBQzNCO1lBQ0UsSUFBSSxFQUFFLGlCQUFpQixDQUFDLGNBQWM7WUFDdEMsTUFBTSxFQUFFLGVBQWUsQ0FBQyx3QkFBd0IsQ0FBQztTQUNsRDtRQUNEO1lBQ0UsSUFBSSxFQUFFLGlCQUFpQixDQUFDLGNBQWM7WUFDdEMsTUFBTSxFQUFFLGVBQWUsQ0FBQyx5QkFBeUIsQ0FBQztTQUNuRDtRQUNEO1lBQ0UsSUFBSSxFQUFFLGlCQUFpQixDQUFDLGNBQWM7WUFDdEMsTUFBTSxFQUFFLGVBQWUsQ0FBQyxxQkFBcUIsQ0FBQztTQUMvQztLQUNGLENBQUM7SUFFRixNQUFNLDJCQUEyQixHQUFHLGVBQWUsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLG9CQUFvQixDQUFDLENBQUMsQ0FBQztJQUUxRixNQUFNLE9BQU8sR0FBRztRQUNkO1lBQ0UsSUFBSSxFQUFFLGlCQUFpQixDQUFDLHNCQUFzQjtZQUM5QyxNQUFNLEVBQUUscUJBQXFCO1NBQzlCO1FBQ0Q7WUFDRSxJQUFJLEVBQUUsaUJBQWlCLENBQUMsTUFBTTtZQUM5QixNQUFNLEVBQUUsMkJBQTJCO1NBQ3BDO1FBQ0Qsc0hBQXNIO1FBQ3RILDZEQUE2RDtRQUM3RDtZQUNFLElBQUksRUFBRSxpQkFBaUIsQ0FBQyxpQkFBaUI7WUFDekMsTUFBTSxFQUFFLGVBQWUsQ0FBQyxHQUFHLENBQUM7U0FDN0I7S0FDRixDQUFDO0lBRUYsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUMzQyxNQUFNLFdBQVcsR0FBRyxJQUFJLFdBQVcsRUFBRSxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUN6RCxNQUFNLFlBQVksR0FBRyxpQkFBaUIsQ0FBQyxNQUFNLENBQUM7SUFFOUMsT0FBTztRQUNMLElBQUksRUFBRSxZQUFZO1FBQ2xCLElBQUksRUFBRSxXQUFXO0tBQ2xCLENBQUM7QUFDSixDQUFDLENBQUM7QUFJRixNQUFNLFFBQVEsR0FBRyxDQUFJLENBQW9DLEVBQVUsRUFBRSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUVqRiwyRkFBMkY7QUFDM0YsTUFBTSxDQUFDLE1BQU0sZ0NBQWdDLEdBQUcsQ0FDOUMsY0FBc0YsRUFDM0IsRUFBRTtJQUM3RCxPQUFPLGNBQWM7U0FDbEIsR0FBRyxDQUFDLENBQUMsRUFBRSxNQUFNLEVBQUUsRUFBRSxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUU7O1FBQzVCLElBQUksSUFBSSxLQUFLLGlCQUFpQixDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQ3RDLE9BQU8sSUFBSSxDQUFDO1FBQ2QsQ0FBQztRQUNELE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxXQUFXLEVBQUUsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBRW5ELENBQUM7UUFDZCxJQUFJLFlBQVksSUFBSSxJQUFJLEVBQUUsQ0FBQztZQUN6QixPQUFPLElBQUksQ0FBQztRQUNkLENBQUM7UUFFRCxNQUFNLFNBQVMsR0FBRyxNQUFBLFlBQVksQ0FBQyxJQUFJLENBQ2pDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxLQUFLLGlCQUFpQixDQUFDLHNCQUFzQixDQUMzRCwwQ0FBRSxNQUFNLENBQUM7UUFDVixJQUFJLFNBQVMsSUFBSSxJQUFJLElBQUksT0FBTyxTQUFTLEtBQUssUUFBUSxFQUFFLENBQUM7WUFDdkQsT0FBTyxJQUFJLENBQUM7UUFDZCxDQUFDO1FBRUQsTUFBTSxPQUFPLEdBQUcsUUFBUSxDQUN0QixhQUFhLEVBQ2IsOEJBQThCLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQ3RELENBQUM7UUFDRixPQUFPO1lBQ0wsRUFBRSxFQUFFLEVBQUUsQ0FBQyxRQUFRLEVBQUU7WUFDakIsU0FBUztZQUNULE9BQU87U0FDUixDQUFDO0lBQ0osQ0FBQyxDQUFDO1NBQ0QsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0FBQ3RCLENBQUMsQ0FBQyJ9
137
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhZGluZy1rZXktdXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbGliL3RyYWRpbmcta2V5LXV0aWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUN6RSxPQUFPLEVBQUUsOEJBQThCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUN4RSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDaEQsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBRTFELE9BQU8sRUFFTCxpQkFBaUIsRUFDakIscUJBQXFCLEVBQ3JCLHlCQUF5QixFQUN6Qiw0QkFBNEIsRUFDNUIsa0NBQWtDLEVBQ2xDLHdCQUF3QixFQUN4QixxQ0FBcUMsR0FDdEMsTUFBTSxzQkFBc0IsQ0FBQztBQUc5QixPQUFPLFdBQVcsTUFBTSxpQ0FBaUMsQ0FBQztBQUMxRCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQzVDLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUV2RCxNQUFNLENBQUMsTUFBTSwwQkFBMEIsR0FBRyxLQUFLLElBRTdDLEVBQUU7SUFDRixNQUFNLFFBQVEsR0FBRyxnQkFBZ0IsQ0FBQyxRQUFRLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFDakQsTUFBTSxFQUFFLFVBQVUsRUFBRSxhQUFhLEVBQUUsR0FBRyx1QkFBdUIsQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUN4RSxNQUFNLE1BQU0sR0FBRyxNQUFNLFdBQVcsQ0FBQyxZQUFZLENBQUMsUUFBUSxFQUFFLGFBQWEsQ0FBQyxDQUFDO0lBRXZFLE1BQU0sYUFBYSxHQUFHLGFBQWEsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssS0FBSyxDQUFDLGFBQWEsQ0FB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