diff --git a/package-lock.json b/package-lock.json index 33f4b47a..2d0d5747 100644 --- a/package-lock.json +++ b/package-lock.json @@ -11,7 +11,7 @@ "dependencies": { "@bitgo/abstract-cosmos": "11.2.20", "@bitgo/abstract-utxo": "9.15.0", - "@bitgo/sdk-api": "1.58.6", + "@bitgo/sdk-api": "^1.58.7", "@bitgo/sdk-coin-ada": "4.6.4", "@bitgo/sdk-coin-algo": "2.1.62", "@bitgo/sdk-coin-arbeth": "21.0.56", @@ -2496,11 +2496,11 @@ } }, "node_modules/@bitgo/sdk-api": { - "version": "1.58.6", - "resolved": "https://registry.npmjs.org/@bitgo/sdk-api/-/sdk-api-1.58.6.tgz", - "integrity": "sha512-tltdvfdlP4XP/FfKVJ9OBtOKy1qAyepSYiaD04tYxUcZKCt1ndcYTCsevjx9tOli4NMx0uvDBu+iK3cNPD7/sA==", + "version": "1.58.7", + "resolved": "https://registry.npmjs.org/@bitgo/sdk-api/-/sdk-api-1.58.7.tgz", + "integrity": "sha512-Oo+4JcVhcvOkeEO4Xt8jm6FiYTi2Rmlx1nHEkA/2CvyfPMY5CLBazhU79cxRvgwg+7ZrSMnrxko0Hh531XoTJQ==", "dependencies": { - "@bitgo/sdk-core": "^28.23.0", + "@bitgo/sdk-core": "^28.24.0", "@bitgo/sdk-hmac": "^1.1.0", "@bitgo/sjcl": "^1.0.1", "@bitgo/unspents": "^0.47.17", @@ -4668,15 +4668,15 @@ } }, "node_modules/@bitgo/sdk-core": { - "version": "28.23.0", - "resolved": "https://registry.npmjs.org/@bitgo/sdk-core/-/sdk-core-28.23.0.tgz", - "integrity": "sha512-wgAXv3HYGuAF/bwIg8CJhQpFrgEipEUPTIm2Lz1gboaAsg5+tMb8sBQpuWn3jPmUWoP+PWMIZ/hFFV4s6UovgQ==", + "version": "28.24.0", + "resolved": "https://registry.npmjs.org/@bitgo/sdk-core/-/sdk-core-28.24.0.tgz", + "integrity": "sha512-BA467J3Ca9iUIZBXCialZlMxkb1yawJRa5ClkDVJFRuUcQ+K/ZpPJB5KkUbd7PrlLnkbRRKlI5Z16DIxwmS9hA==", "dependencies": { "@bitgo/bls-dkg": "^1.3.1", "@bitgo/public-types": "4.9.2", "@bitgo/sdk-lib-mpc": "^10.1.0", "@bitgo/sjcl": "^1.0.1", - "@bitgo/statics": "^50.23.0", + "@bitgo/statics": "^50.24.0", "@bitgo/utxo-lib": "^11.2.1", "@noble/secp256k1": "1.6.3", "@stablelib/hex": "^1.0.0", @@ -4877,9 +4877,9 @@ "license": "(BSD-2-Clause OR GPL-2.0-only)" }, "node_modules/@bitgo/statics": { - "version": "50.23.0", - "resolved": "https://registry.npmjs.org/@bitgo/statics/-/statics-50.23.0.tgz", - "integrity": "sha512-SP7guK9TFhZy4/j/dLZ4YPjwkGO9Fhg1cHnqzJ2KzUmUFzUjJMEe/lgrO/uSRJ7ggEMLmG0CuzI6usCvYoO7cQ==" + "version": "50.24.0", + "resolved": "https://registry.npmjs.org/@bitgo/statics/-/statics-50.24.0.tgz", + "integrity": "sha512-Wcb5acZuZzLmxwK1luNwOoL/ZwDtXB3bXOLhV4bHcE/3sqHDa9VFebG0f1qEz2Q+2pfAC6GG3Wm9rHMyyem+ww==" }, "node_modules/@bitgo/unspents": { "version": "0.47.17", diff --git a/package.json b/package.json index 4cebed7a..429f1a2b 100644 --- a/package.json +++ b/package.json @@ -11,7 +11,7 @@ "dependencies": { "@bitgo/abstract-cosmos": "11.2.20", "@bitgo/abstract-utxo": "9.15.0", - "@bitgo/sdk-api": "1.58.6", + "@bitgo/sdk-api": "^1.58.7", "@bitgo/sdk-coin-ada": "4.6.4", "@bitgo/sdk-coin-algo": "2.1.62", "@bitgo/sdk-coin-arbeth": "21.0.56", diff --git a/src/containers/BuildUnsignedSweepCoin/BuildUnsignedSweepCoin.tsx b/src/containers/BuildUnsignedSweepCoin/BuildUnsignedSweepCoin.tsx index 8574ecd5..40d15ae4 100644 --- a/src/containers/BuildUnsignedSweepCoin/BuildUnsignedSweepCoin.tsx +++ b/src/containers/BuildUnsignedSweepCoin/BuildUnsignedSweepCoin.tsx @@ -39,6 +39,7 @@ import { buildUnsignedSweepCoins, tokenParentCoins } from '~/helpers/config'; import { HederaForm } from './HederaForm'; import { AlgorandForm } from '~/containers/BuildUnsignedSweepCoin/AlgorandForm'; import { RippleTokenForm } from '~/containers/BuildUnsignedSweepCoin/RippleTokenForm'; +import { CosmosForm } from './CosmosForm'; function Form() { const { env, coin } = useParams<'env' | 'coin'>(); @@ -1465,6 +1466,76 @@ function Form() { }} /> ); + case 'atom': + case 'tatom': + return ( + { + setAlert(undefined); + setSubmitting(true); + try { + await window.commands.setBitGoEnvironment(bitGoEnvironment, coin); + const chainData = await window.queries.getChain(coin); + const recoverData = await window.commands.recover(coin, { + ...values, + scan: Number(values.scan), + startingScanIndex: Number(values.startingScanIndex), + bitgoKey: values.bitgoKey.replace(/\s+/g, ''), + ignoreAddressTypes: [], + }); + assert( + isRecoveryTransaction(recoverData), + 'Recovery transaction not detected.' + ); + + const showSaveDialogData = await window.commands.showSaveDialog({ + filters: [ + { + name: 'Custom File Type', + extensions: ['json'], + }, + ], + defaultPath: `~/${chainData}-unsigned-sweep-${Date.now()}.json`, + }); + + if (!showSaveDialogData.filePath) { + throw new Error('No file path selected'); + } + + await window.commands.writeFile( + showSaveDialogData.filePath, + JSON.stringify(recoverData, null, 2), + { encoding: 'utf-8' } + ); + + await window.commands.writeFile( + showSaveDialogData.filePath, + JSON.stringify( + { + ...recoverData, + ...(await includePubsFor(coin, values)), + }, + null, + 2 + ), + { encoding: 'utf-8' } + ); + + navigate( + `/${bitGoEnvironment}/build-unsigned-sweep/${coin}/success` + ); + } catch (err) { + if (err instanceof Error) { + setAlert(err.message); + } else { + console.error(err); + } + setSubmitting(false); + } + }} + /> + ); default: throw new Error(`Unsupported coin: ${String(coin)}`); } diff --git a/src/containers/BuildUnsignedSweepCoin/CosmosForm.tsx b/src/containers/BuildUnsignedSweepCoin/CosmosForm.tsx new file mode 100644 index 00000000..21d14c7c --- /dev/null +++ b/src/containers/BuildUnsignedSweepCoin/CosmosForm.tsx @@ -0,0 +1,118 @@ +import { Form, FormikHelpers, FormikProvider, useFormik } from 'formik'; +import { Link } from 'react-router-dom'; +import * as Yup from 'yup'; +import { + Button, + FormikPasswordfield, + FormikSelectfield, + FormikTextarea, + FormikTextfield, +} from '~/components'; + +const validationSchema = Yup.object({ + backupKey: Yup.string().required(), + bitgoKey: Yup.string().required(), + recoveryDestination: Yup.string().required(), + scan: Yup.number().required(), + startingScanIndex: Yup.number().required(), + userKey: Yup.string().required(), +}).required(); + +export type CosmosFormProps = { + onSubmit: ( + values: CosmosFormValues, + formikHelpers: FormikHelpers + ) => void | Promise; +}; + +type CosmosFormValues = Yup.Asserts; + +export function CosmosForm({ onSubmit }: CosmosFormProps) { + const formik = useFormik({ + onSubmit, + initialValues: { + backupKey: '', + bitgoKey: '', + recoveryDestination: '', + scan: 20, + startingScanIndex: 0, + userKey: '', + }, + validationSchema, + }); + + return ( + +
+

+ Self-managed cold wallet details +

+ +
+ +
+
+ +
+
+ +
+ +
+ +
+
+ +
+
+ +
+ +
+ + +
+
+
+ ); +} diff --git a/src/helpers/config.ts b/src/helpers/config.ts index 3931a07b..bbab0115 100644 --- a/src/helpers/config.ts +++ b/src/helpers/config.ts @@ -684,6 +684,7 @@ export const buildUnsignedSweepCoins: Record< allCoinMetas.sol, allCoinMetas.solToken, allCoinMetas.ada, + allCoinMetas.atom, allCoinMetas.dot, allCoinMetas.hbar, allCoinMetas.algo, @@ -713,6 +714,7 @@ export const buildUnsignedSweepCoins: Record< allCoinMetas.tsol, allCoinMetas.tsolToken, allCoinMetas.tada, + allCoinMetas.tatom, allCoinMetas.tdot, allCoinMetas.thbar, allCoinMetas.talgo,