Skip to content
Open
Show file tree
Hide file tree
Changes from 8 commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
19 changes: 12 additions & 7 deletions package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

4 changes: 2 additions & 2 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -71,7 +71,7 @@
},
"dependencies": {
"@hookform/resolvers": "5.4.0",
"@joinmarket-webui/joinmarket-api-ts": "0.3.0",
"@joinmarket-webui/joinmarket-ng-api-ts": "1.0.0",
"@noble/hashes": "2.2.0",
"@radix-ui/react-accordion": "1.2.14",
"@radix-ui/react-avatar": "1.2.0",
Expand Down Expand Up @@ -159,7 +159,7 @@
},
"overrides": {
"storybook": "$storybook",
"@joinmarket-webui/joinmarket-api-ts": {
"@joinmarket-webui/joinmarket-ng-api-ts": {
"@tanstack/react-query": "$@tanstack/react-query"
}
},
Expand Down
4 changes: 2 additions & 2 deletions src/App.test.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -82,11 +82,11 @@ vi.mock('@tanstack/react-query', () => ({
useMutation: () => ({ mutateAsync }),
}))

vi.mock('@joinmarket-webui/joinmarket-api-ts/@tanstack/react-query', () => ({
vi.mock('@joinmarket-webui/joinmarket-ng-api-ts/@tanstack/react-query', () => ({
lockwalletOptions: () => ({ queryKey: ['lock'] }),
}))

vi.mock('@joinmarket-webui/joinmarket-api-ts/jm', () => ({
vi.mock('@joinmarket-webui/joinmarket-ng-api-ts/jm', () => ({
token: vi.fn().mockResolvedValue({ data: { token: 't', refresh_token: 'r' } }),
}))

Expand Down
6 changes: 3 additions & 3 deletions src/App.tsx
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import { lazy, Suspense, useEffect, useMemo, useRef, useState } from 'react'
import type { PropsWithChildren } from 'react'
import { lockwalletOptions } from '@joinmarket-webui/joinmarket-api-ts/@tanstack/react-query'
import { token } from '@joinmarket-webui/joinmarket-api-ts/jm'
import { lockwalletOptions } from '@joinmarket-webui/joinmarket-ng-api-ts/@tanstack/react-query'
import { token } from '@joinmarket-webui/joinmarket-ng-api-ts/jm'
import { QueryClientProvider, useMutation, useQuery } from '@tanstack/react-query'
import type { TFunction } from 'i18next'
import { ThemeProvider } from 'next-themes'
Expand Down Expand Up @@ -306,7 +306,7 @@ function RefreshApiToken() {
clearAuthAndQueryCache()

if (isDevMode) {
const message = response.error?.message || response.error?.error_description || 'Unknown error.'
const message = getErrorReason(response.error, 'Unknown error.')
toast.error(`[DEV] Error while renewing auth token: ${message}`, {
id: 'token-renew-error',
})
Expand Down
7 changes: 4 additions & 3 deletions src/components/MainWalletPage.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@ import {
useWalletBalanceSummary,
type Jar as JarObject,
} from '@/context/JamWalletInfoContext'
import { getErrorReason } from '@/lib/errorReason'
import type { WalletFileName } from '@/lib/utils'
import { cn, shortenStringMiddle, walletDisplayName } from '@/lib/utils'
import { Balance } from './ui/jam/Balance'
Expand Down Expand Up @@ -88,19 +89,19 @@ export default function MainWalletPage({ walletFileName }: MainWalletPageProps)
</div>
</div>

{error && (
{error ? (
<Alert variant="destructive" className="mb-4 max-w-xl">
<AlertDescription>
{t('global.errors.error_loading_wallet_failed', {
reason: error.message || t('global.errors.reason_unknown'),
reason: getErrorReason(error, t('global.errors.reason_unknown')),
})}
<Button variant="outline" size="sm" onClick={() => void refetchWalletData()}>
<RefreshCwIcon className={cn({ 'motion-safe:animate-spin': isFetching })} />
{t('global.retry')}
</Button>
</AlertDescription>
</Alert>
)}
) : null}

<div className="light:text-black mt-8 mb-4 flex w-full flex-col gap-8 text-white" data-tour-id="wallet-jars">
<div className="text-muted-foreground hover:text-foreground">
Expand Down
4 changes: 2 additions & 2 deletions src/components/create/CreateStepWalletDetails.tsx
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import type { ComponentProps } from 'react'
import type { SessionResponse } from '@joinmarket-webui/joinmarket-api-ts/jm'
import type { SessionResponse } from '@joinmarket-webui/joinmarket-ng-api-ts/jm'
import { Link } from 'react-router-dom'
import { Button } from '@/components/ui/button'
import { routes } from '@/constants/routes'
Expand All @@ -14,7 +14,7 @@ type CreateStepWalletDetailsProps = ComponentProps<typeof CreateWalletForm> & {
export const CreateStepWalletDetails = ({ sessionInfo, ...createFormProps }: CreateStepWalletDetailsProps) => {
return (
<div className="space-y-2">
{sessionInfo?.session === true ? (
{sessionInfo?.session === true && sessionInfo.wallet_name ? (
<OtherWalletActiveAlert linkTarget={'login'} walletFileName={sessionInfo.wallet_name as WalletFileName} />
) : (
<CreateWalletForm {...createFormProps} />
Expand Down
4 changes: 2 additions & 2 deletions src/components/create/CreateWalletPage.test.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -21,14 +21,14 @@ const mocks = vi.hoisted(() => ({
type QueryOptions = { queryKey?: readonly unknown[] }
type MutationOptions = { mutationFn: (input: unknown) => Promise<unknown> }

vi.mock('@joinmarket-webui/joinmarket-api-ts/@tanstack/react-query', () => ({
vi.mock('@joinmarket-webui/joinmarket-ng-api-ts/@tanstack/react-query', () => ({
createwalletMutation: vi.fn(() => ({ mutationFn: mocks.createWallet })),
listwalletsOptions: vi.fn(() => ({ queryKey: ['wallets'], queryFn: vi.fn() })),
sessionOptions: vi.fn(() => ({ queryKey: ['session'], queryFn: vi.fn() })),
unlockwalletMutation: vi.fn(() => ({ mutationFn: mocks.unlockWallet })),
}))

vi.mock('@joinmarket-webui/joinmarket-api-ts/jm', () => ({
vi.mock('@joinmarket-webui/joinmarket-ng-api-ts/jm', () => ({
lockwallet: mocks.lockWallet,
}))

Expand Down
4 changes: 2 additions & 2 deletions src/components/create/CreateWalletPage.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,8 @@ import {
listwalletsOptions,
sessionOptions,
unlockwalletMutation,
} from '@joinmarket-webui/joinmarket-api-ts/@tanstack/react-query'
import { lockwallet } from '@joinmarket-webui/joinmarket-api-ts/jm'
} from '@joinmarket-webui/joinmarket-ng-api-ts/@tanstack/react-query'
import { lockwallet } from '@joinmarket-webui/joinmarket-ng-api-ts/jm'
import { useMutation, useQuery } from '@tanstack/react-query'
import { CircleCheckBigIcon, ShieldCheckIcon, WalletIcon, type LucideIcon } from 'lucide-react'
import { useTranslation } from 'react-i18next'
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -141,7 +141,7 @@ describe('CreateFidelityBondDialogSteps', () => {
it('renders success step', () => {
const wizard = getBaseWizard()
wizard.step = 'success'
wizard.txResult = { txinfo: { txid: '1234abcd' } }
wizard.txResult = { txinfo: { txid: '1234abcd', hex: '' } }
render(<CreateFidelityBondDialogSteps wizard={wizard} />)

expect(screen.getByText('earn.fidelity_bond.create_fidelity_bond.success_text')).toBeInTheDocument()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ const mocks = vi.hoisted(() => ({
},
}))

vi.mock('@joinmarket-webui/joinmarket-api-ts/@tanstack/react-query', () => ({
vi.mock('@joinmarket-webui/joinmarket-ng-api-ts/@tanstack/react-query', () => ({
directsendMutation: vi.fn(() => ({ mutationKey: ['directsend'] })),
freezeMutation: vi.fn(() => ({ mutationKey: ['freeze'] })),
gettimelockaddressOptions: vi.fn(() => ({ queryKey: ['timelock-address'] })),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,8 @@ import {
directsendMutation,
freezeMutation,
gettimelockaddressOptions,
} from '@joinmarket-webui/joinmarket-api-ts/@tanstack/react-query'
import type { DirectSendResponse, ErrorMessage } from '@joinmarket-webui/joinmarket-api-ts/jm'
} from '@joinmarket-webui/joinmarket-ng-api-ts/@tanstack/react-query'
import type { DirectSendResponse } from '@joinmarket-webui/joinmarket-ng-api-ts/jm'
import { useMutation, useQuery } from '@tanstack/react-query'
import { useForm, useWatch } from 'react-hook-form'
import { useTranslation } from 'react-i18next'
Expand Down Expand Up @@ -173,23 +173,23 @@ export function useCreateFidelityBondWizard(

const freezeUtxo = useMutation({
...freezeMutation({ client }),
onError: (error: ErrorMessage) => {
onError: (error) => {
const reason = getErrorReason(error, t('global.errors.reason_unknown'))
setError(`${t('earn.fidelity_bond.error_freezing_utxos')} ${reason}`)
},
})

const unfreezeUtxo = useMutation({
...freezeMutation({ client }),
onError: (error: ErrorMessage) => {
onError: (error) => {
const reason = getErrorReason(error, t('global.errors.reason_unknown'))
setError(`${t('earn.fidelity_bond.error_unfreezing_utxos')} ${reason}`)
},
})

const directSend = useMutation({
...directsendMutation({ client }),
onError: (error: ErrorMessage) => {
onError: (error) => {
const reason = getErrorReason(error, t('global.errors.reason_unknown'))
setError(`${t('earn.fidelity_bond.error_creating_fidelity_bond')} ${reason}`)
},
Expand Down
2 changes: 1 addition & 1 deletion src/components/earn/EarnPage.test.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,7 @@ const mocks = vi.hoisted(() => ({
},
}))

vi.mock('@joinmarket-webui/joinmarket-api-ts/@tanstack/react-query', () => ({
vi.mock('@joinmarket-webui/joinmarket-ng-api-ts/@tanstack/react-query', () => ({
startmakerMutation: vi.fn(() => ({ mutationFn: mocks.startMaker })),
stopmakerOptions: vi.fn(() => ({ queryKey: ['stopmaker'], queryFn: vi.fn() })),
}))
Expand Down
8 changes: 4 additions & 4 deletions src/components/earn/EarnPage.tsx
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import { useEffect, useMemo, useState } from 'react'
import { startmakerMutation, stopmakerOptions } from '@joinmarket-webui/joinmarket-api-ts/@tanstack/react-query'
import type { ErrorMessage, StartMakerRequest } from '@joinmarket-webui/joinmarket-api-ts/jm'
import { startmakerMutation, stopmakerOptions } from '@joinmarket-webui/joinmarket-ng-api-ts/@tanstack/react-query'
import type { StartMakerRequest } from '@joinmarket-webui/joinmarket-ng-api-ts/jm'
import { useMutation, useQuery } from '@tanstack/react-query'
import { AlertTriangleIcon, FileTextIcon, HourglassIcon, RefreshCwIcon, ShuffleIcon, UnlockIcon } from 'lucide-react'
import type { SubmitHandler } from 'react-hook-form'
Expand Down Expand Up @@ -150,7 +150,7 @@ export const EarnPage = ({ walletFileName }: EarnPageProps) => {
onMutate: () => {
toast.info(t('earn.alert_stopping'), { id: 'earn.alert_stopping' })
},
onError: (error: ErrorMessage) => {
onError: (error: unknown) => {
const reason = getErrorReason(error, t('global.errors.reason_unknown'))
// TODO: i18n
toast.error(`Error while stopping the earn process. Reason: ${reason}`)
Expand All @@ -163,7 +163,7 @@ export const EarnPage = ({ walletFileName }: EarnPageProps) => {
onMutate: () => {
toast.info(t('earn.alert_starting'), { id: 'earn.alert_starting' })
},
onError: (error: ErrorMessage) => {
onError: (error) => {
console.error('StartMaker error:', error)
const reason = getErrorReason(error, t('global.errors.reason_unknown'))
toast.error(t('earn.alert_start_failed', { reason }))
Expand Down
2 changes: 1 addition & 1 deletion src/components/earn/MoveToJarDialog.test.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@ vi.mock('@tanstack/react-query', () => ({
useMutation: () => ({ mutateAsync: h.mutateAsync, isPending: h.isPending }),
}))

vi.mock('@joinmarket-webui/joinmarket-api-ts/@tanstack/react-query', () => ({
vi.mock('@joinmarket-webui/joinmarket-ng-api-ts/@tanstack/react-query', () => ({
directsendMutation: vi.fn(() => ({})),
freezeMutation: vi.fn(() => ({})),
getaddressOptions: vi.fn(() => ({ queryKey: ['mock'], queryFn: vi.fn() })),
Expand Down
10 changes: 5 additions & 5 deletions src/components/earn/MoveToJarDialog.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,8 @@ import {
directsendMutation,
freezeMutation,
getaddressOptions,
} from '@joinmarket-webui/joinmarket-api-ts/@tanstack/react-query'
import type { DirectSendResponse, ErrorMessage } from '@joinmarket-webui/joinmarket-api-ts/jm'
} from '@joinmarket-webui/joinmarket-ng-api-ts/@tanstack/react-query'
import type { DirectSendResponse } from '@joinmarket-webui/joinmarket-ng-api-ts/jm'
import { useMutation, useQuery } from '@tanstack/react-query'
import {
AlertTriangleIcon,
Expand Down Expand Up @@ -97,23 +97,23 @@ export function MoveToJarDialog({ open, onOpenChange, walletFileName, utxo }: Mo

const freezeUtxo = useMutation({
...freezeMutation({ client }),
onError: (error: ErrorMessage) => {
onError: (error) => {
const reason = getErrorReason(error, t('global.errors.reason_unknown'))
setError(`${t('earn.fidelity_bond.move.error_freezing_utxos')} ${reason}`)
},
})

const unfreezeUtxo = useMutation({
...freezeMutation({ client }),
onError: (error: ErrorMessage) => {
onError: (error) => {
const reason = getErrorReason(error, t('global.errors.reason_unknown'))
setError(`${t('earn.fidelity_bond.move.error_unfreezing_fidelity_bond')} ${reason}`)
},
})

const directSend = useMutation({
...directsendMutation({ client }),
onError: (error: ErrorMessage) => {
onError: (error) => {
const reason = getErrorReason(error, t('global.errors.reason_unknown'))
setError(`${t('earn.fidelity_bond.move.error_spending_fidelity_bond')} ${reason}`)
},
Expand Down
4 changes: 2 additions & 2 deletions src/components/earn/OfferCard.test.tsx
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import type { SessionResponse } from '@joinmarket-webui/joinmarket-api-ts/jm'
import type { SessionResponse } from '@joinmarket-webui/joinmarket-ng-api-ts/jm'
import { render, screen } from '@testing-library/react'
import { describe, expect, it, vi } from 'vitest'
import { OfferCard } from './OfferCard'
Expand Down Expand Up @@ -64,7 +64,7 @@ describe('OfferCard', () => {
})

it('renders without txfee', () => {
const offer = { ...baseOffer, ordertype: 'sw0abso', txfee: undefined }
const offer = { ...baseOffer, ordertype: 'sw0abso', txfee: undefined } as unknown as Offer
render(<OfferCard value={offer} nickname="JMBot" />)

expect(screen.queryByText('earn.current.text_txfee')).not.toBeInTheDocument()
Expand Down
14 changes: 8 additions & 6 deletions src/components/earn/OfferCard.tsx
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import type { PropsWithChildren } from 'react'
import type { SessionResponse } from '@joinmarket-webui/joinmarket-api-ts/jm'
import type { SessionResponse } from '@joinmarket-webui/joinmarket-ng-api-ts/jm'
import type { TFunction } from 'i18next'
import { FingerprintIcon, HandCoinsIcon, Maximize2Icon, Minimize2Icon } from 'lucide-react'
import { useTranslation } from 'react-i18next'
Expand All @@ -19,13 +19,13 @@ const OfferTypeBadge = ({ value }: { value: Offer }) => {
}

const renderOfferText = (value: Offer, t: TFunction<'translation', undefined>) => {
if (isAbsoluteOffer(value?.ordertype || '')) {
if (isAbsoluteOffer(String(value?.ordertype || ''))) {
return t('earn.current.text_offer_type_absolute')
}
if (isRelativeOffer(value?.ordertype || '')) {
if (isRelativeOffer(String(value?.ordertype || ''))) {
return t('earn.current.text_offer_type_relative')
}
return value?.ordertype
return String(value?.ordertype || '')
}

interface OfferCardProps {
Expand Down Expand Up @@ -67,8 +67,10 @@ export function OfferCard({ className, value, nickname, children }: PropsWithChi
<div className="flex flex-col">
<Label className="font-semibold">{t('earn.current.text_cjfee')}</Label>
<span className="text-sm">
{isRelativeOffer(value?.ordertype || '') ? (
<span className="select-all">{factorToPercentage(Number.parseFloat(value?.cjfee || '') || 0)}%</span>
{isRelativeOffer(String(value?.ordertype || '')) ? (
<span className="select-all">
{factorToPercentage(Number.parseFloat(String(value?.cjfee || '')) || 0)}%
</span>
) : (
<Balance valueString={String(value?.cjfee || '0')} />
)}
Expand Down
2 changes: 1 addition & 1 deletion src/components/earn/RenewBondDialog.test.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ vi.mock('@tanstack/react-query', () => ({
useMutation: () => ({ mutateAsync: h.mutateAsync, isPending: h.isPending }),
}))

vi.mock('@joinmarket-webui/joinmarket-api-ts/@tanstack/react-query', () => ({
vi.mock('@joinmarket-webui/joinmarket-ng-api-ts/@tanstack/react-query', () => ({
directsendMutation: vi.fn(() => ({})),
freezeMutation: vi.fn(() => ({})),
gettimelockaddressOptions: vi.fn(() => ({ queryKey: ['mock'], queryFn: vi.fn() })),
Expand Down
10 changes: 5 additions & 5 deletions src/components/earn/RenewBondDialog.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,8 @@ import {
directsendMutation,
freezeMutation,
gettimelockaddressOptions,
} from '@joinmarket-webui/joinmarket-api-ts/@tanstack/react-query'
import type { DirectSendResponse, ErrorMessage } from '@joinmarket-webui/joinmarket-api-ts/jm'
} from '@joinmarket-webui/joinmarket-ng-api-ts/@tanstack/react-query'
import type { DirectSendResponse } from '@joinmarket-webui/joinmarket-ng-api-ts/jm'
import { useMutation, useQuery } from '@tanstack/react-query'
import {
AlertTriangleIcon,
Expand Down Expand Up @@ -117,23 +117,23 @@ export function RenewBondDialog({ open, onOpenChange, walletFileName, utxo }: Re

const freezeUtxo = useMutation({
...freezeMutation({ client }),
onError: (error: ErrorMessage) => {
onError: (error) => {
const reason = getErrorReason(error, t('global.errors.reason_unknown'))
setError(`${t('earn.fidelity_bond.error_freezing_utxos')} ${reason}`)
},
})

const unfreezeUtxo = useMutation({
...freezeMutation({ client }),
onError: (error: ErrorMessage) => {
onError: (error) => {
const reason = getErrorReason(error, t('global.errors.reason_unknown'))
setError(`${t('earn.fidelity_bond.error_unfreezing_utxos')} ${reason}`)
},
})

const directSend = useMutation({
...directsendMutation({ client }),
onError: (error: ErrorMessage) => {
onError: (error) => {
const reason = getErrorReason(error, t('global.errors.reason_unknown'))
setError(`${t('earn.fidelity_bond.renew.error_renewing_fidelity_bond')} ${reason}`)
},
Expand Down
Loading