diff --git a/.changeset/tired-socks-learn.md b/.changeset/tired-socks-learn.md new file mode 100644 index 00000000..3e8165c0 --- /dev/null +++ b/.changeset/tired-socks-learn.md @@ -0,0 +1,5 @@ +--- +"@stakekit/widget": patch +--- + +feat(ledger): parent account handling diff --git a/packages/widget/src/providers/ledger/ledger-connector.ts b/packages/widget/src/providers/ledger/ledger-connector.ts index b78de1dd..186f3366 100644 --- a/packages/widget/src/providers/ledger/ledger-connector.ts +++ b/packages/widget/src/providers/ledger/ledger-connector.ts @@ -72,17 +72,38 @@ const createLedgerLiveConnector = ({ await getLedgerCurrencies(walletApiClient) ).unsafeCoerce(); - const accounts = ( - await EitherAsync(() => walletApiClient.account.list()).mapLeft((e) => { - console.log(e); - return new Error("could not get accounts"); - }) + const allAccounts = ( + await EitherAsync(() => walletApiClient.account.list()) + .map((val) => ({ + accounts: val, + accountsMap: new Map( + val.map((v) => [v.id, v]) + ), + })) + .map((val) => + val.accounts.map((acc) => + acc.parentAccountId + ? Maybe.fromNullable(val.accountsMap.get(acc.parentAccountId)) + .map((parentAcc) => ({ + ...acc, + currency: parentAcc.currency, + })) + .orDefault(acc) + : acc + ) + ) + .mapLeft((e) => { + console.log(e); + return new Error("could not get accounts"); + }) ).unsafeCoerce(); + ledgerAccounts = allAccounts.filter((a) => !a.parentAccountId); + const filteredSupportedLedgerFamiliesWithCurrency = getFilteredSupportedLedgerFamiliesWithCurrency({ ledgerCurrencies, - accounts, + accounts: ledgerAccounts, enabledChainsMap, }); @@ -116,9 +137,7 @@ const createLedgerLiveConnector = ({ $filteredChains.next([...enabled, ...disabled]); $disabledChains.next(disabled); - ledgerAccounts = accounts; - - const accountsWithChain = accounts + const accountsWithChain = allAccounts .reduce( (acc, next) => { const family = ledgerCurrencies.get(next.currency); @@ -177,10 +196,10 @@ const createLedgerLiveConnector = ({ if (accId.startsWith("js:")) { const [, , , address] = accId.split(":"); - return { type: "address", address }; + return { type: "address", address } as const; } - return { type: "accountId", accountId: accId }; + return { type: "accountId", accountId: accId } as const; }) );