UNPKG

@chorus-one/ton

Version:

All-in-one tooling for building staking dApps on TON

36 lines (35 loc) 1.35 kB
import { TonClient as NativeTonClient, Cell } from '@ton/ton'; import axios from 'axios'; import { z } from 'zod'; const configParamCodec = z.object({ ok: z.boolean(), result: z.object({ '@type': z.string(), config: z.object({ '@type': z.string(), bytes: z.string() }), '@extra': z.string() }) }); export class TonClient extends NativeTonClient { async getConfigParam(config_id) { const url = new URL(this.parameters.endpoint); const base = url.pathname.split('/').slice(0, -1).join('/'); url.pathname = base + '/getConfigParam'; url.searchParams.set('config_id', config_id.toString()); const r = await axios.get(url.toString()); if (r.status !== 200) { throw Error('Unable to fetch config param, error: ' + r.status + ' ' + r.statusText); } const configParam = configParamCodec.safeParse(r.data); if (!configParam.success) { throw Error('Unable to parse config param, error: ' + JSON.stringify(configParam.error)); } const paramBytes = configParam.data?.result.config.bytes; if (paramBytes === undefined) { throw Error('Failed to get config param bytes'); } return Cell.fromBoc(Buffer.from(paramBytes, 'base64'))[0]; } }