{t('more')}
diff --git a/packages/client/ui-settings-account/src/client/locales.ts b/packages/client/ui-settings-account/src/client/locales.ts
index 8127d6884f..06f4907d68 100644
--- a/packages/client/ui-settings-account/src/client/locales.ts
+++ b/packages/client/ui-settings-account/src/client/locales.ts
@@ -17,7 +17,7 @@ export const en = {
settingsSignedOutDescription: 'Sign in to DeepSeek Harness to get your dedicated API Key',
signInDescription: 'Use your DeepSeek account to get started.',
profileUnavailable: 'Account details are not available yet.',
- balance: 'Account balance', balanceUnavailable: 'View on Platform', balanceSignedOut: 'Sign in to view',
+ balance: 'Recharge balance', bonusBalance: 'Bonus balance', balanceUnavailable: 'View on Platform', balanceSignedOut: 'Sign in to view',
more: 'More', usage: 'View usage', topUp: 'Top up',
} as const
/** Account locale keys. */
@@ -41,6 +41,6 @@ export const zh: Record
= {
settingsSignedOutDescription: '登录 DeepSeek Harness 账号获取专属 API Key',
signInDescription: '登录 DeepSeek 账号以开始使用',
profileUnavailable: '账号资料暂不可用',
- balance: '账户余额', balanceUnavailable: '前往开放平台查看', balanceSignedOut: '登录后查看',
+ balance: '充值余额', bonusBalance: '赠金余额', balanceUnavailable: '前往开放平台查看', balanceSignedOut: '登录后查看',
more: '更多', usage: '查询用量', topUp: '充值',
}
diff --git a/packages/client/ui-settings-account/tests/account.client.spec.tsx b/packages/client/ui-settings-account/tests/account.client.spec.tsx
index 789dd37adf..b94120e659 100644
--- a/packages/client/ui-settings-account/tests/account.client.spec.tsx
+++ b/packages/client/ui-settings-account/tests/account.client.spec.tsx
@@ -77,7 +77,7 @@ it.each([en, zh])('opens settings and signs out from the sidebar account menu',
it.each([en, zh])('renders Platform profile and recharge wallet balances', async (copy) => {
mount({ status: 'credential-stored', attempt: null }, copy, {
profile: { status: 'ready', value: { id: null, name: 'Harness Mock (TEST ONLY)', contact: '138****0000' } },
- balance: { status: 'ready', value: [{ currency: 'CNY', balance: '1234.56000000' }, { currency: 'USD', balance: '0.00000100' }] },
+ balance: { status: 'ready', bonusWallets: [], value: [{ currency: 'CNY', balance: '1234.56000000' }, { currency: 'USD', balance: '0.00000100' }] },
})
expect(screen.getByText('Harness Mock (TEST ONLY)')).toBeTruthy()
expect(screen.getByText('138****0000')).toBeTruthy()
@@ -206,3 +206,24 @@ it('retries a changed avatar URL after an image fails', async () => {
view.rerender()
expect(view.container.querySelector('img')).toBeNull()
})
+
+it.each([en, zh])('renders positive bonus wallets separately from recharge balances', async (copy) => {
+ mount({ status: 'credential-stored', attempt: null }, copy, {
+ balance: { status: 'ready', value: [{ currency: 'CNY', balance: '209.00' }, { currency: 'USD', balance: '20.07' }],
+ bonusWallets: [{ currency: 'CNY', balance: '5.00' }, { currency: 'USD', balance: '0.000001' }] },
+ })
+ expect(screen.getByText(copy.balance).parentElement!.textContent).toBe(`${copy.balance}¥209.00$20.07`)
+ expect(screen.getByText(copy.bonusBalance).parentElement!.textContent).toBe(`${copy.bonusBalance}¥5.00<$0.01`)
+ await expect(`${screen.getByRole('region').textContent}\n`)
+ .toMatchFileSnapshot(`./expected/bonus-${copy === en ? 'en' : 'zh'}.txt`)
+})
+
+it.each([[], [{ currency: 'CNY' as const, balance: '0.00' }, { currency: 'USD' as const, balance: '-1.00' }]].map(bonusWallets => ({ bonusWallets })))(
+ 'hides bonus wallets without positive credit', ({ bonusWallets }) => {
+ mount({ status: 'credential-stored', attempt: null }, en, {
+ balance: { status: 'ready', value: [{ currency: 'CNY', balance: '0' }], bonusWallets },
+ })
+ expect(screen.queryByText(en.bonusBalance)).toBeNull()
+ expect(screen.getByText('¥0.00')).toBeTruthy()
+ },
+)
diff --git a/packages/client/ui-settings-account/tests/expected/account-en.txt b/packages/client/ui-settings-account/tests/expected/account-en.txt
index d20a43a216..8acce95a8f 100644
--- a/packages/client/ui-settings-account/tests/expected/account-en.txt
+++ b/packages/client/ui-settings-account/tests/expected/account-en.txt
@@ -1 +1 @@
-Signed in to DeepSeekLoading…Account balanceLoading…MoreView usageTop up
+Signed in to DeepSeekLoading…Recharge balanceLoading…MoreView usageTop up
diff --git a/packages/client/ui-settings-account/tests/expected/account-zh.txt b/packages/client/ui-settings-account/tests/expected/account-zh.txt
index ea110dedc7..a20ccaaab5 100644
--- a/packages/client/ui-settings-account/tests/expected/account-zh.txt
+++ b/packages/client/ui-settings-account/tests/expected/account-zh.txt
@@ -1 +1 @@
-已登录 DeepSeek加载中…账户余额加载中…更多查询用量充值
+已登录 DeepSeek加载中…充值余额加载中…更多查询用量充值
diff --git a/packages/client/ui-settings-account/tests/expected/bonus-en.txt b/packages/client/ui-settings-account/tests/expected/bonus-en.txt
new file mode 100644
index 0000000000..7c3df1c6b5
--- /dev/null
+++ b/packages/client/ui-settings-account/tests/expected/bonus-en.txt
@@ -0,0 +1 @@
+Signed in to DeepSeekLoading…Recharge balance¥209.00$20.07Bonus balance¥5.00<$0.01MoreView usageTop up
diff --git a/packages/client/ui-settings-account/tests/expected/bonus-zh.txt b/packages/client/ui-settings-account/tests/expected/bonus-zh.txt
new file mode 100644
index 0000000000..6567341483
--- /dev/null
+++ b/packages/client/ui-settings-account/tests/expected/bonus-zh.txt
@@ -0,0 +1 @@
+已登录 DeepSeek加载中…充值余额¥209.00$20.07赠金余额¥5.00<$0.01更多查询用量充值
diff --git a/packages/client/ui-settings-account/tests/expected/details-en.txt b/packages/client/ui-settings-account/tests/expected/details-en.txt
index a77a57d7bd..49b1614418 100644
--- a/packages/client/ui-settings-account/tests/expected/details-en.txt
+++ b/packages/client/ui-settings-account/tests/expected/details-en.txt
@@ -1 +1 @@
-Harness Mock (TEST ONLY)138****0000Account balance¥1,234.56<$0.01MoreView usageTop up
+Harness Mock (TEST ONLY)138****0000Recharge balance¥1,234.56<$0.01MoreView usageTop up
diff --git a/packages/client/ui-settings-account/tests/expected/details-zh.txt b/packages/client/ui-settings-account/tests/expected/details-zh.txt
index 6cc69582e1..53cf0e3ae6 100644
--- a/packages/client/ui-settings-account/tests/expected/details-zh.txt
+++ b/packages/client/ui-settings-account/tests/expected/details-zh.txt
@@ -1 +1 @@
-Harness Mock (TEST ONLY)138****0000账户余额¥1,234.56<$0.01更多查询用量充值
+Harness Mock (TEST ONLY)138****0000充值余额¥1,234.56<$0.01更多查询用量充值
diff --git a/packages/client/ui-settings-account/tests/expected/profile-before-balance.txt b/packages/client/ui-settings-account/tests/expected/profile-before-balance.txt
index d79039a9c9..f14314ddd5 100644
--- a/packages/client/ui-settings-account/tests/expected/profile-before-balance.txt
+++ b/packages/client/ui-settings-account/tests/expected/profile-before-balance.txt
@@ -1 +1 @@
-Ready User138****0000Account balanceLoading…MoreView usageTop up
+Ready User138****0000Recharge balanceLoading…MoreView usageTop up
diff --git a/packages/credentials/deepseek-account-platform/README.i18n.yaml b/packages/credentials/deepseek-account-platform/README.i18n.yaml
index ec671d274c..f850ceea36 100644
--- a/packages/credentials/deepseek-account-platform/README.i18n.yaml
+++ b/packages/credentials/deepseek-account-platform/README.i18n.yaml
@@ -2,5 +2,5 @@
# side as of the last confirmed-consistent state. Both languages carry equal authority;
# after editing either side, bring the other along and re-record with:
# pnpm run verify-translation-pairing --write packages/credentials/deepseek-account-platform/README.md
-README.md: 6a4ff41dbe19e754ce3926eaf5b72b37c595412f
-README.zh.md: c2ea4145498fd27e0c375cdb2fe157c53dd822df
+README.md: db337c7f999c1ce8055e3a427813189e84d53194
+README.zh.md: 510ee10be0d58dc8c4e6b4d78a8ce1f7a837e80a
diff --git a/packages/credentials/deepseek-account-platform/README.md b/packages/credentials/deepseek-account-platform/README.md
index 6a4ff41dbe..db337c7f99 100644
--- a/packages/credentials/deepseek-account-platform/README.md
+++ b/packages/credentials/deepseek-account-platform/README.md
@@ -28,7 +28,7 @@ Sign in through the system browser and keep the account credential in the existi
The profile projection maps `id_profile.picture` to `avatarUrl`, using null when no picture is configured.
-getProfile / getBalance sends the stored grant in the x-dsh-auth-token header to GET /auth-api/v0/users/current and GET /api/v0/users/get_user_summary on platformOrigin. The grant issuer must match that origin. Host projects only the account UID, profile name, avatar URL, phone or email exactly as masked by Platform, and normal_wallets currency/balance strings; response tokens and other fields are discarded. Bonus wallets remain separate from recharge balances. Credential changes and disposal invalidate in-flight queries.
+getProfile / getBalance sends the stored grant in the x-dsh-auth-token header to GET /auth-api/v0/users/current and GET /api/v0/users/get_user_summary on platformOrigin. The grant issuer must match that origin. Host projects only the account UID, profile name, avatar URL, phone or email exactly as masked by Platform, and normal_wallets / bonus_wallets currency/balance strings; response tokens and other fields are discarded. Bonus wallets remain separate from recharge balances. Credential changes and disposal invalidate in-flight queries.
Configure platformOrigin, allowLoopbackHttp, requestTimeoutMs, and attemptTimeoutMs in the plugin row. HTTP is accepted only for explicitly enabled loopback development. The provider registers /oauth/callback on the existing Host webServer before auth_init, validates state, exchanges an S256 PKCE code once, and commits a grant before redirecting to auth_exchange.biz_data.authorized_url. Browser destinations default to the configured platform origin and always require the fixed /dsh/authorize or /dsh/authorized path. The completion URL sets `client_type` to the initiating client (`web` or `desktop`) and preserves other Platform-supplied query parameters. Device identity is a separate random UUID record shared by processes using the same credential store; device_model reports OS and architecture.
diff --git a/packages/credentials/deepseek-account-platform/README.zh.md b/packages/credentials/deepseek-account-platform/README.zh.md
index c2ea414549..510ee10be0 100644
--- a/packages/credentials/deepseek-account-platform/README.zh.md
+++ b/packages/credentials/deepseek-account-platform/README.zh.md
@@ -28,7 +28,7 @@ getPlatformSession 仅在已存授权的 issuer 与 platformOrigin 一致时导
账号资料投影将 `id_profile.picture` 映射为 `avatarUrl`,没有配置头像时返回 null。
-getProfile / getBalance 将保存的授权 token 通过 x-dsh-auth-token 请求头,向 platformOrigin 上的 GET /auth-api/v0/users/current 和 GET /api/v0/users/get_user_summary 发起请求。授权签发来源必须与该来源一致。Host 只投影账号 UID、资料名称、头像 URL、由 Platform 脱敏的手机号或邮箱(原样保留),以及 normal_wallets 的币种和余额字符串,丢弃响应 token 与其他字段。赠送钱包不计入充值余额。凭证变化和销毁会使进行中的查询失效。
+getProfile / getBalance 将保存的授权 token 通过 x-dsh-auth-token 请求头,向 platformOrigin 上的 GET /auth-api/v0/users/current 和 GET /api/v0/users/get_user_summary 发起请求。授权签发来源必须与该来源一致。Host 只投影账号 UID、资料名称、头像 URL、由 Platform 脱敏的手机号或邮箱(原样保留),以及 normal_wallets / bonus_wallets 的币种和余额字符串,丢弃响应 token 与其他字段。赠送钱包不计入充值余额。凭证变化和销毁会使进行中的查询失效。
在插件行配置 platformOrigin、allowLoopbackHttp、requestTimeoutMs 和 attemptTimeoutMs。HTTP 仅用于显式启用的本机开发。提供者先在现有 Host webServer 注册 /oauth/callback,再调用 auth_init;校验 state、使用 S256 PKCE 授权码兑换一次,并在跳转 auth_exchange.biz_data.authorized_url 前提交授权记录。浏览器地址默认要求匹配配置的平台来源,并始终要求固定的 /dsh/authorize 或 /dsh/authorized 路径。完成页地址将 `client_type` 设为发起登录的客户端类型(`web` 或 `desktop`),并保留平台返回的其他查询参数。设备标识是独立的随机 UUID 记录,由使用同一凭证存储的进程共享;device_model 报告操作系统和架构。
diff --git a/packages/credentials/deepseek-account-platform/src/details.ts b/packages/credentials/deepseek-account-platform/src/details.ts
index d00aeabd57..d77606bd7b 100644
--- a/packages/credentials/deepseek-account-platform/src/details.ts
+++ b/packages/credentials/deepseek-account-platform/src/details.ts
@@ -1,4 +1,4 @@
-/** Platform Web profile and recharge-wallet queries projected for account UI consumers. */
+/** Platform Web profile and wallet queries projected for account UI consumers. */
import { z } from 'zod'
import type { AccountDetails, AccountProfile, AccountUserId } from '@deepseek-ai/dsh-deepseek-account/types'
import { PlatformAuthError, requestAccount } from './protocol.ts'
@@ -8,9 +8,10 @@ const user = z.object({
email: z.string(), mobile: z.string().optional(), mobile_number: z.string().optional(),
id_profile: z.object({ name: z.string().nullable(), picture: z.string().nullish() }).nullish(),
})
-const summary = z.object({ normal_wallets: z.array(z.object({
+const wallet = z.object({
currency: z.enum(['CNY', 'USD']), balance: z.string().regex(/^-?\d+(?:\.\d+)?$/),
-})) })
+})
+const summary = z.object({ normal_wallets: z.array(wallet), bonus_wallets: z.array(wallet) })
/** Project Platform user data without retaining credentials or unneeded fields.
* @param value - current or exchange user response.
@@ -35,13 +36,13 @@ const queries: { [K in keyof AccountDetails]: {
balance: { path: '/api/v0/users/get_user_summary', parse: (value) => {
const parsed = summary.safeParse(value)
if (!parsed.success) throw new PlatformAuthError('protocol')
- return { status: 'ready', value: parsed.data.normal_wallets }
+ return { status: 'ready', value: parsed.data.normal_wallets, bonusWallets: parsed.data.bonus_wallets }
} },
}
/**
* Read one Platform account field without waiting for the other query.
- * @param field - profile or recharge-wallet balance.
+ * @param field - profile or recharge and bonus wallet balances.
* @param origin - configured origin matching the stored grant issuer.
* @param token - stored authorization token; response tokens are discarded.
* @param signal - request and credential lifetime.
diff --git a/packages/credentials/deepseek-account-platform/tests/account.spec.ts b/packages/credentials/deepseek-account-platform/tests/account.spec.ts
index d4977d44e6..36980be92c 100644
--- a/packages/credentials/deepseek-account-platform/tests/account.spec.ts
+++ b/packages/credentials/deepseek-account-platform/tests/account.spec.ts
@@ -51,6 +51,7 @@ async function fixture(
let logoutHold = false
let logoutCount = 0
const logoutHeaders: Array = []
+ let bonusWallets: unknown = [{ currency: 'CNY', balance: '10.00' }]
let invalidSummary = false
const detailsStarted = Promise.withResolvers()
const detailRequests: Array<{ path: string; authorization: string | undefined }> = []
@@ -81,7 +82,7 @@ async function fixture(
id_profile: { name: 'Test Account', picture: null } }
: { normal_wallets: [{ currency: 'CNY', balance: invalidSummary ? 'not-a-decimal' : '123.45', token_estimation: '0' },
{ currency: 'USD', balance: '6.78', token_estimation: '0' }],
- bonus_wallets: [{ currency: 'CNY', balance: '10.00' }] }
+ bonus_wallets: bonusWallets }
res.setHeader('content-type', 'application/json')
res.end(JSON.stringify({ code: 0, data: {
biz_code: (profileFailed && req.url === '/auth-api/v0/users/current')
@@ -157,6 +158,7 @@ async function fixture(
redirect: () => { redirect = true },
hold: () => { hold = true },
initResponse: (value: Record) => { initOverride = value },
+ bonusWallets: (value: unknown) => { bonusWallets = value },
exchangeResponse: (value: Record) => { exchangeOverride = value },
fail: (value: number) => { businessCode = value },
init: () => init, count: () => count, callback: (state = init.state) => `${init.redirect_uri}?code=test&state=${state}` }
@@ -293,13 +295,13 @@ async function storeAccount(f: Awaited>) {
}))
}
-it('queries Platform Web endpoints with the stored grant and projects only masked profile and recharge balances', async () => {
+it('queries Platform Web endpoints with the stored grant and projects only masked profile and separate recharge and bonus balances', async () => {
const f = await fixture()
expect(await readDetails(f.account)).toBeNull()
await storeAccount(f)
expect(await readDetails(f.account)).toEqual({
profile: { status: 'ready', value: { id: 'test-user', name: 'Test Account', avatarUrl: null, contact: '138****5678' } },
- balance: { status: 'ready', value: [{ currency: 'CNY', balance: '123.45' }, { currency: 'USD', balance: '6.78' }] },
+ balance: { status: 'ready', bonusWallets: [{ currency: 'CNY', balance: '10.00' }], value: [{ currency: 'CNY', balance: '123.45' }, { currency: 'USD', balance: '6.78' }] },
})
expect(f.detailRequests).toEqual(expect.arrayContaining([
{ path: '/auth-api/v0/users/current', authorization: 'test-platform-grant' },
@@ -761,3 +763,19 @@ it('retains successful profile data on current failure only for the same credent
await f.account.signOut()
expect(await f.account.getProfile()).toBeNull()
})
+
+it.each([[], [{ currency: 'CNY', balance: '0.00' }]].map(wallets => ({ wallets })))('preserves empty or zero bonus wallets', async ({ wallets }) => {
+ const f = await fixture()
+ await storeAccount(f)
+ f.bonusWallets(wallets)
+ expect(await f.account.getBalance()).toMatchObject({ status: 'ready', bonusWallets: wallets })
+})
+
+it.each([undefined, [{ currency: 'EUR', balance: '1' }], [{ currency: 'CNY', balance: 'invalid' }]].map(wallets => ({ wallets })))(
+ 'rejects malformed bonus wallets without reporting zero credit', async ({ wallets }) => {
+ const f = await fixture()
+ await storeAccount(f)
+ f.bonusWallets(wallets)
+ expect(await f.account.getBalance()).toEqual({ status: 'failed' })
+ },
+)
diff --git a/packages/credentials/deepseek-account/README.i18n.yaml b/packages/credentials/deepseek-account/README.i18n.yaml
index b1aaa360c7..7d8ddfe1f3 100644
--- a/packages/credentials/deepseek-account/README.i18n.yaml
+++ b/packages/credentials/deepseek-account/README.i18n.yaml
@@ -2,5 +2,5 @@
# side as of the last confirmed-consistent state. Both languages carry equal authority;
# after editing either side, bring the other along and re-record with:
# pnpm run verify-translation-pairing --write packages/credentials/deepseek-account/README.md
-README.md: 396463e0207671faf70e8fcd5457b2c8431622fd
-README.zh.md: f7d8b93cfcbccd23b6fc6c6c72e72db624f58e78
+README.md: 72b42ee996b809992e48ea4c124f0793d756526a
+README.zh.md: b30813e24adc2afc9e8245b839432dd195093c63
diff --git a/packages/credentials/deepseek-account/README.md b/packages/credentials/deepseek-account/README.md
index 396463e020..72b42ee996 100644
--- a/packages/credentials/deepseek-account/README.md
+++ b/packages/credentials/deepseek-account/README.md
@@ -38,6 +38,8 @@ The service defines account operations without maintaining a second credential i
The [credentials subsystem](../../../docs/subsystems/credentials.md) owns storage APIs; the [architecture](../../../docs/architecture.md) explains application composition.
+A ready AccountDetails.balance keeps recharge wallets in value and bonus wallets in bonusWallets; both arrays preserve decimal strings and currency. Query failure supplies neither amount.
+
## Model Experience
diff --git a/packages/credentials/deepseek-account/README.zh.md b/packages/credentials/deepseek-account/README.zh.md
index f7d8b93cfc..b30813e24a 100644
--- a/packages/credentials/deepseek-account/README.zh.md
+++ b/packages/credentials/deepseek-account/README.zh.md
@@ -38,6 +38,8 @@ getPlatformSession 为原生 Platform 内嵌提供仅限 Host 的 origin/token
[凭证子系统](../../../docs/subsystems/credentials.zh.md)定义存储接口;[架构](../../../docs/architecture.zh.md)说明应用组合。
+AccountDetails.balance 就绪时,value 保存充值钱包,bonusWallets 保存赠送钱包;两个数组均保留十进制金额字符串和币种。查询失败不提供金额。
+
## 模型体验
diff --git a/packages/credentials/deepseek-account/src/index.ts b/packages/credentials/deepseek-account/src/index.ts
index 1770976506..cfd5c99718 100644
--- a/packages/credentials/deepseek-account/src/index.ts
+++ b/packages/credentials/deepseek-account/src/index.ts
@@ -34,7 +34,7 @@ export abstract class DeepSeekAccount extends Service {
*/
abstract getProfile(): Promise
/**
- * Query Platform recharge-wallet balances independently of profile data.
+ * Query Platform recharge and bonus wallet balances independently of profile data.
* @returns balance outcome, or null if signed out or the grant changed during the query.
*/
abstract getBalance(): Promise
diff --git a/packages/credentials/deepseek-account/src/types.ts b/packages/credentials/deepseek-account/src/types.ts
index 2639f8552a..f59c959567 100644
--- a/packages/credentials/deepseek-account/src/types.ts
+++ b/packages/credentials/deepseek-account/src/types.ts
@@ -35,7 +35,7 @@ export interface AccountProfile {
/** Profile image URL supplied by Platform, absent when no picture is configured. */
readonly avatarUrl?: string | null
}
-/** Platform recharge-wallet balance; decimal strings retain server precision. */
+/** Platform recharge or bonus wallet balance; decimal strings retain server precision. */
export interface AccountWallet {
readonly currency: 'CNY' | 'USD'
readonly balance: string
@@ -43,5 +43,5 @@ export interface AccountWallet {
/** Independent query outcomes allow profile and balance failures to render separately. */
export interface AccountDetails {
readonly profile: { readonly status: 'ready'; readonly value: AccountProfile } | { readonly status: 'failed' }
- readonly balance: { readonly status: 'ready'; readonly value: readonly AccountWallet[] } | { readonly status: 'failed' }
+ readonly balance: { readonly status: 'ready'; readonly value: readonly AccountWallet[]; readonly bonusWallets: readonly AccountWallet[] } | { readonly status: 'failed' }
}
diff --git a/packages/extensions/tool-cordis/src/api-catalog.ts b/packages/extensions/tool-cordis/src/api-catalog.ts
index 31a84a0f2b..8a54ce1401 100644
--- a/packages/extensions/tool-cordis/src/api-catalog.ts
+++ b/packages/extensions/tool-cordis/src/api-catalog.ts
@@ -877,7 +877,7 @@ export const SERVICE_API: readonly ServiceApiEntry[] = [
},
{
signature: 'abstract getBalance(): Promise',
- description: 'Query Platform recharge-wallet balances independently of profile data.',
+ description: 'Query Platform recharge and bonus wallet balances independently of profile data.',
parameters: [],
returns: 'balance outcome, or null if signed out or the grant changed during the query.',
},
@@ -4051,7 +4051,7 @@ export const EVENT_API: readonly EventApiEntry[] = [
export const TYPE_API: readonly TypeApiEntry[] = [
{
name: 'AccountDetails',
- declaration: 'export interface AccountDetails {\n readonly profile: {\n readonly status: \'ready\';\n readonly value: AccountProfile;\n } | {\n readonly status: \'failed\';\n };\n readonly balance: {\n readonly status: \'ready\';\n readonly value: readonly AccountWallet[];\n } | {\n readonly status: \'failed\';\n };\n}',
+ declaration: 'export interface AccountDetails {\n readonly profile: {\n readonly status: \'ready\';\n readonly value: AccountProfile;\n } | {\n readonly status: \'failed\';\n };\n readonly balance: {\n readonly status: \'ready\';\n readonly value: readonly AccountWallet[];\n readonly bonusWallets: readonly AccountWallet[];\n } | {\n readonly status: \'failed\';\n };\n}',
},
{
name: 'AccountLinks',