tapimo 0.5.0 → 0.5.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/App.d.ts +4854 -4829
- package/dist/App.d.ts.map +1 -1
- package/dist/App.js +20 -2
- package/dist/App.js.map +1 -1
- package/dist/Assets.js +3 -3
- package/dist/Assets.js.map +1 -1
- package/dist/Scope.d.ts.map +1 -1
- package/dist/Scope.js +1 -2
- package/dist/Scope.js.map +1 -1
- package/dist/Webhooks.d.ts +1 -1
- package/dist/Webhooks.d.ts.map +1 -1
- package/dist/Webhooks.js +5 -10
- package/dist/Webhooks.js.map +1 -1
- package/dist/admin/App.d.ts +6 -34
- package/dist/admin/App.d.ts.map +1 -1
- package/dist/admin/apps/api-keys.d.ts +3 -3
- package/dist/admin/apps/api-keys.d.ts.map +1 -1
- package/dist/admin/apps/api-keys.js +4 -1
- package/dist/admin/apps/api-keys.js.map +1 -1
- package/dist/admin/apps/scopes.d.ts +6 -34
- package/dist/admin/apps/scopes.d.ts.map +1 -1
- package/dist/admin/apps/scopes.js +2 -2
- package/dist/admin/apps/scopes.js.map +1 -1
- package/dist/admin/apps/verified-tokens.d.ts +2 -2
- package/dist/admin/ui.generated.d.ts +1 -1
- package/dist/admin/ui.generated.js +33 -33
- package/dist/admin/ui.generated.js.map +1 -1
- package/dist/apps/data/App.d.ts +1398 -1405
- package/dist/apps/data/App.d.ts.map +1 -1
- package/dist/apps/data/App.js +25 -38
- package/dist/apps/data/App.js.map +1 -1
- package/dist/apps/data/FundingQuoteProviders.d.ts +108 -3
- package/dist/apps/data/FundingQuoteProviders.d.ts.map +1 -1
- package/dist/apps/data/FundingQuoteProviders.js +409 -2
- package/dist/apps/data/FundingQuoteProviders.js.map +1 -1
- package/dist/apps/data/routes/activities.d.ts +245 -245
- package/dist/apps/data/routes/blocks.d.ts +123 -123
- package/dist/apps/data/routes/funding.d.ts +236 -146
- package/dist/apps/data/routes/funding.d.ts.map +1 -1
- package/dist/apps/data/routes/funding.js +23 -12
- package/dist/apps/data/routes/funding.js.map +1 -1
- package/dist/apps/data/routes/indexer.d.ts.map +1 -1
- package/dist/apps/data/routes/indexer.js +9 -2
- package/dist/apps/data/routes/indexer.js.map +1 -1
- package/dist/apps/data/routes/rpc.d.ts +31 -31
- package/dist/apps/data/routes/tokenlist.d.ts +36 -36
- package/dist/apps/data/routes/transactions.d.ts +281 -281
- package/dist/apps/data/routes/transfers.d.ts +66 -73
- package/dist/apps/data/routes/transfers.d.ts.map +1 -1
- package/dist/apps/data/routes/transfers.js +21 -27
- package/dist/apps/data/routes/transfers.js.map +1 -1
- package/dist/apps/data/routes/verified-tokens.d.ts +86 -86
- package/dist/apps/data/routes/webhooks.d.ts +35 -35
- package/dist/apps/data/routes/webhooks.d.ts.map +1 -1
- package/dist/apps/data/routes/webhooks.js +176 -42
- package/dist/apps/data/routes/webhooks.js.map +1 -1
- package/dist/apps/management/App.d.ts +520 -504
- package/dist/apps/management/App.d.ts.map +1 -1
- package/dist/apps/management/Billing.d.ts.map +1 -1
- package/dist/apps/management/Billing.js +5 -4
- package/dist/apps/management/Billing.js.map +1 -1
- package/dist/apps/management/routes/api-keys.d.ts +120 -120
- package/dist/apps/management/routes/billing.d.ts +211 -211
- package/dist/apps/management/routes/billing.d.ts.map +1 -1
- package/dist/apps/management/routes/billing.js +1 -1
- package/dist/apps/management/routes/billing.js.map +1 -1
- package/dist/apps/management/routes/invitations.d.ts +72 -72
- package/dist/apps/management/routes/invite-links.d.ts +159 -159
- package/dist/apps/management/routes/me.d.ts +17 -17
- package/dist/apps/management/routes/members.d.ts +80 -80
- package/dist/apps/management/routes/orgs.d.ts +59 -43
- package/dist/apps/management/routes/orgs.d.ts.map +1 -1
- package/dist/apps/management/routes/orgs.js +18 -1
- package/dist/apps/management/routes/orgs.js.map +1 -1
- package/dist/apps/management/routes/projects.d.ts +109 -109
- package/dist/apps/management/routes/scopes.d.ts +11 -11
- package/dist/apps/management/routes/usage.d.ts +79 -79
- package/dist/apps/mcp.js +2 -2
- package/dist/apps/mcp.js.map +1 -1
- package/dist/apps/relay/App.d.ts +2 -2
- package/dist/apps/relay/App.js +2 -2
- package/dist/apps/relay/Sponsorships.d.ts +3 -0
- package/dist/apps/relay/Sponsorships.d.ts.map +1 -1
- package/dist/apps/relay/Sponsorships.js +15 -1
- package/dist/apps/relay/Sponsorships.js.map +1 -1
- package/dist/db/Db.d.ts.map +1 -1
- package/dist/db/Db.js +4 -0
- package/dist/db/Db.js.map +1 -1
- package/dist/db/Schema.js +1 -1
- package/dist/db/Schema.js.map +1 -1
- package/dist/db/tables/organizations.d.ts +6 -0
- package/dist/db/tables/organizations.d.ts.map +1 -1
- package/dist/db/tables/organizations.js +26 -0
- package/dist/db/tables/organizations.js.map +1 -1
- package/dist/db/tables/requestUsage.d.ts +2 -11
- package/dist/db/tables/requestUsage.d.ts.map +1 -1
- package/dist/db/tables/requestUsage.js +1 -20
- package/dist/db/tables/requestUsage.js.map +1 -1
- package/dist/db/tables/sponsoredTransactions.d.ts +2 -1
- package/dist/db/tables/sponsoredTransactions.d.ts.map +1 -1
- package/dist/db/tables/sponsoredTransactions.js +52 -10
- package/dist/db/tables/sponsoredTransactions.js.map +1 -1
- package/dist/internal/Auth.d.ts +4 -0
- package/dist/internal/Auth.d.ts.map +1 -1
- package/dist/internal/Auth.js +15 -8
- package/dist/internal/Auth.js.map +1 -1
- package/dist/internal/Cache.d.ts.map +1 -1
- package/dist/internal/Cache.js +9 -1
- package/dist/internal/Cache.js.map +1 -1
- package/dist/internal/EdgeCache.d.ts.map +1 -1
- package/dist/internal/EdgeCache.js +12 -3
- package/dist/internal/EdgeCache.js.map +1 -1
- package/dist/internal/FundingQuotes.d.ts +176 -56
- package/dist/internal/FundingQuotes.d.ts.map +1 -1
- package/dist/internal/FundingQuotes.js +100 -5
- package/dist/internal/FundingQuotes.js.map +1 -1
- package/dist/internal/Log.d.ts +18 -12
- package/dist/internal/Log.d.ts.map +1 -1
- package/dist/internal/Log.js +2 -0
- package/dist/internal/Log.js.map +1 -1
- package/dist/internal/RateLimit.d.ts +2 -0
- package/dist/internal/RateLimit.d.ts.map +1 -1
- package/dist/internal/RateLimit.js +4 -4
- package/dist/internal/RateLimit.js.map +1 -1
- package/dist/internal/Tidx.d.ts +9 -3
- package/dist/internal/Tidx.d.ts.map +1 -1
- package/dist/internal/Tidx.js +13 -7
- package/dist/internal/Tidx.js.map +1 -1
- package/dist/internal/Viem.d.ts +14 -1
- package/dist/internal/Viem.d.ts.map +1 -1
- package/dist/internal/Viem.js +19 -1
- package/dist/internal/Viem.js.map +1 -1
- package/package.json +7 -2
- package/src/ApiKeys.test.ts +2 -0
- package/src/App.test.ts +15 -4
- package/src/App.ts +31 -5
- package/src/Assets.ts +3 -3
- package/src/Client.test-d.ts +30 -3
- package/src/Scope.ts +4 -2
- package/src/Webhooks.ts +5 -10
- package/src/admin/apps/api-keys.test.ts +27 -0
- package/src/admin/apps/api-keys.ts +8 -1
- package/src/admin/apps/scopes.test.ts +7 -2
- package/src/admin/apps/scopes.ts +2 -2
- package/src/admin/ui/src/components/Dialog.tsx +8 -2
- package/src/admin/ui/src/lib/scopes.test.ts +19 -0
- package/src/admin/ui/src/lib/scopes.ts +12 -0
- package/src/admin/ui/src/routes/api-keys.tsx +128 -27
- package/src/admin/ui.generated.ts +33 -33
- package/src/apps/composition.test.ts +77 -0
- package/src/apps/data/App.ts +25 -45
- package/src/apps/data/FundingQuoteProviders.test.ts +615 -5
- package/src/apps/data/FundingQuoteProviders.ts +570 -4
- package/src/apps/data/routes/funding.test.ts +181 -7
- package/src/apps/data/routes/funding.ts +27 -12
- package/src/apps/data/routes/indexer.test.ts +82 -20
- package/src/apps/data/routes/indexer.ts +8 -2
- package/src/apps/data/routes/tokens.test.ts +54 -0
- package/src/apps/data/routes/transfers.test.ts +73 -1
- package/src/apps/data/routes/transfers.ts +24 -30
- package/src/apps/data/routes/webhooks.test.ts +203 -0
- package/src/apps/data/routes/webhooks.ts +191 -54
- package/src/apps/management/Billing.test.ts +52 -3
- package/src/apps/management/Billing.ts +5 -4
- package/src/apps/management/routes/billing.ts +6 -1
- package/src/apps/management/routes/orgs.ts +19 -1
- package/src/apps/mcp.test.ts +18 -0
- package/src/apps/mcp.ts +2 -2
- package/src/apps/relay/App.test.ts +6 -5
- package/src/apps/relay/App.ts +2 -2
- package/src/apps/relay/Sponsorships.test.ts +2 -2
- package/src/apps/relay/Sponsorships.ts +24 -1
- package/src/db/Db.test.ts +5 -5
- package/src/db/Db.ts +4 -0
- package/src/db/Schema.ts +1 -1
- package/src/db/tables/billingSettings.test.ts +2 -2
- package/src/db/tables/organizations.test.ts +32 -2
- package/src/db/tables/organizations.ts +28 -0
- package/src/db/tables/requestUsage.ts +3 -23
- package/src/db/tables/sponsoredTransactions.test.ts +60 -2
- package/src/db/tables/sponsoredTransactions.ts +67 -21
- package/src/db/tables/stripeCustomers.test.ts +2 -2
- package/src/internal/Auth.test.ts +63 -10
- package/src/internal/Auth.ts +21 -9
- package/src/internal/Cache.test.ts +19 -0
- package/src/internal/Cache.ts +13 -1
- package/src/internal/EdgeCache.test.ts +40 -0
- package/src/internal/EdgeCache.ts +11 -3
- package/src/internal/FundingQuotes.test.ts +130 -3
- package/src/internal/FundingQuotes.ts +113 -6
- package/src/internal/Log.ts +21 -14
- package/src/internal/RateLimit.test.ts +12 -0
- package/src/internal/RateLimit.ts +4 -4
- package/src/internal/Tidx.test.ts +48 -0
- package/src/internal/Tidx.ts +21 -7
- package/src/internal/Viem.test.ts +46 -0
- package/src/internal/Viem.ts +34 -1
|
@@ -25,6 +25,46 @@ async function paths(app: { request: (path: string) => Promise<Response> | Respo
|
|
|
25
25
|
return Object.keys((await document(app)).paths)
|
|
26
26
|
}
|
|
27
27
|
|
|
28
|
+
describe('App.create()', () => {
|
|
29
|
+
test('publishes shared chain context without data routes', async () => {
|
|
30
|
+
const rpc = { url: () => 'https://rpc.example' }
|
|
31
|
+
const group = new Hono<App.Environment>().get('/context', (c) => {
|
|
32
|
+
const client = c.get('getClient')()
|
|
33
|
+
return c.json({
|
|
34
|
+
chainId: c.get('chainId'),
|
|
35
|
+
clientChainId: client.chain.id,
|
|
36
|
+
memoized: client === c.get('getClient')(),
|
|
37
|
+
rpc: c.get('rpc') === rpc,
|
|
38
|
+
supportedChainIds: [...c.get('supportedChainIds')].sort((a, b) => a - b),
|
|
39
|
+
})
|
|
40
|
+
})
|
|
41
|
+
const app = App.create({
|
|
42
|
+
auth: false,
|
|
43
|
+
db: TestApp.database(),
|
|
44
|
+
defaultChainId: 1337,
|
|
45
|
+
rpc,
|
|
46
|
+
supportedChainIds: [999],
|
|
47
|
+
}).route('/', group)
|
|
48
|
+
|
|
49
|
+
const response = await app.request('/context')
|
|
50
|
+
|
|
51
|
+
expect(await response.json()).toMatchInlineSnapshot(`
|
|
52
|
+
{
|
|
53
|
+
"chainId": 1337,
|
|
54
|
+
"clientChainId": 1337,
|
|
55
|
+
"memoized": true,
|
|
56
|
+
"rpc": true,
|
|
57
|
+
"supportedChainIds": [
|
|
58
|
+
999,
|
|
59
|
+
1337,
|
|
60
|
+
4217,
|
|
61
|
+
42431,
|
|
62
|
+
],
|
|
63
|
+
}
|
|
64
|
+
`)
|
|
65
|
+
})
|
|
66
|
+
})
|
|
67
|
+
|
|
28
68
|
describe('App.from()', () => {
|
|
29
69
|
test('contributes external route-group metadata', async () => {
|
|
30
70
|
const group = new Hono().get(
|
|
@@ -110,6 +150,43 @@ describe('data()', () => {
|
|
|
110
150
|
const orgs = await app.request('/v1/orgs')
|
|
111
151
|
expect(orgs.status).toBe(404)
|
|
112
152
|
})
|
|
153
|
+
|
|
154
|
+
test('inherits shared chain context', async () => {
|
|
155
|
+
const rpc = { url: () => 'https://rpc.example' }
|
|
156
|
+
const context = new Hono<App.Environment>().get('/context', (c) =>
|
|
157
|
+
c.json({
|
|
158
|
+
chainId: c.get('chainId'),
|
|
159
|
+
clientChainId: c.get('getClient')().chain.id,
|
|
160
|
+
rpc: c.get('rpc') === rpc,
|
|
161
|
+
supportedChainIds: [...c.get('supportedChainIds')].sort((a, b) => a - b),
|
|
162
|
+
}),
|
|
163
|
+
)
|
|
164
|
+
const app = App.create({
|
|
165
|
+
auth: false,
|
|
166
|
+
db: TestApp.database(),
|
|
167
|
+
defaultChainId: 333,
|
|
168
|
+
rpc,
|
|
169
|
+
supportedChainIds: [444],
|
|
170
|
+
})
|
|
171
|
+
.route('/', data())
|
|
172
|
+
.route('/', context)
|
|
173
|
+
|
|
174
|
+
const response = await app.request('/context')
|
|
175
|
+
|
|
176
|
+
expect(await response.json()).toMatchInlineSnapshot(`
|
|
177
|
+
{
|
|
178
|
+
"chainId": 333,
|
|
179
|
+
"clientChainId": 333,
|
|
180
|
+
"rpc": true,
|
|
181
|
+
"supportedChainIds": [
|
|
182
|
+
333,
|
|
183
|
+
444,
|
|
184
|
+
4217,
|
|
185
|
+
42431,
|
|
186
|
+
],
|
|
187
|
+
}
|
|
188
|
+
`)
|
|
189
|
+
})
|
|
113
190
|
})
|
|
114
191
|
|
|
115
192
|
describe('relay()', () => {
|
package/src/apps/data/App.ts
CHANGED
|
@@ -33,59 +33,36 @@ import { verifiedTokens } from './routes/verified-tokens.js'
|
|
|
33
33
|
import { schema as webhookSchema, webhooks } from './routes/webhooks.js'
|
|
34
34
|
|
|
35
35
|
/**
|
|
36
|
-
* The chain-data route group
|
|
37
|
-
*
|
|
38
|
-
* configuration and publishes the chain clients on request context.
|
|
36
|
+
* The chain-data route group extends app context with TIDX, assets, zones,
|
|
37
|
+
* verified tokens, and webhooks, and exposes indexed and RPC-backed reads.
|
|
39
38
|
*
|
|
40
39
|
* ```ts
|
|
41
40
|
* App.create(options).route('/', data())
|
|
42
41
|
* ```
|
|
43
42
|
*/
|
|
44
43
|
export function data(options: data.Options = {}) {
|
|
45
|
-
const { assets,
|
|
44
|
+
const { assets, tidx } = options
|
|
46
45
|
|
|
47
46
|
// Zone endpoints are explicit trust boundaries; the API never derives them.
|
|
48
47
|
const zones = new Map((options.zones ?? []).map((zone) => [zone.chainId, zone]))
|
|
49
48
|
const dataRouteHandlers = new Set<unknown>()
|
|
50
49
|
|
|
51
|
-
|
|
52
|
-
// `defaultChainId` and any explicit `supportedChainIds`). Published on context
|
|
53
|
-
// so handlers with a path `chainId` can guard it too.
|
|
54
|
-
const supportedChainIds = new Set<number>([
|
|
55
|
-
...Object.keys(Viem.url).map(Number),
|
|
56
|
-
...Object.keys(Tidx.url).map(Number),
|
|
57
|
-
defaultChainId,
|
|
58
|
-
...(options.supportedChainIds ?? []),
|
|
59
|
-
...zones.keys(),
|
|
60
|
-
])
|
|
61
|
-
|
|
62
|
-
// Memoize one viem client per resolved upstream (stateless HTTP transports).
|
|
63
|
-
// Keying on the resolved output (`url`+`basicAuth`+`chainId`), not the
|
|
64
|
-
// principal, bounds cardinality by the number of distinct upstreams.
|
|
65
|
-
const clients = new Map<string, ReturnType<typeof Viem.getClient>>()
|
|
66
|
-
const getClient = (chainId = defaultChainId, principal: Auth.Principal | null = null) => {
|
|
67
|
-
const { url, basicAuth } = Viem.resolve(rpc_option, { chainId, principal })
|
|
68
|
-
const cacheKey = `${url}|${basicAuth ?? ''}|${chainId}`
|
|
69
|
-
const existing = clients.get(cacheKey)
|
|
70
|
-
if (existing) return existing
|
|
71
|
-
const client = Viem.getClient({ chainId, principal, rpc: rpc_option })
|
|
72
|
-
clients.set(cacheKey, client)
|
|
73
|
-
return client
|
|
74
|
-
}
|
|
75
|
-
|
|
76
|
-
// Memoize TIDX clients per resolved upstream.
|
|
77
|
-
const getTidx = Tidx.createGetClient({ defaultChainId, tidx })
|
|
50
|
+
const getTidx = Tidx.createGetClient({ tidx })
|
|
78
51
|
|
|
79
52
|
const app = new Hono<App.Environment>()
|
|
80
53
|
// Publish the chain-data context vars for this group's handlers. Runs after
|
|
81
54
|
// `App.create`'s middleware, so `getClient`/`getTidx` can key on the
|
|
82
55
|
// resolved principal and `getAsset` can read `basePath` off context.
|
|
83
56
|
.use('*', async (c, next) => {
|
|
84
|
-
c.
|
|
57
|
+
const getClient = c.get('getClient')
|
|
58
|
+
const supportedChainIds = new Set<number>([
|
|
59
|
+
...c.get('supportedChainIds'),
|
|
60
|
+
...Object.keys(Tidx.url).map(Number),
|
|
61
|
+
...zones.keys(),
|
|
62
|
+
])
|
|
85
63
|
c.set('getAsset', createGetAsset({ assets, basePath: c.get('basePath'), origin: new URL(c.req.url).origin })) // prettier-ignore
|
|
86
|
-
c.set('getClient', (chainId) => getClient(chainId
|
|
87
|
-
c.set('getTidx', (chainId) => getTidx(chainId, Auth.getPrincipal(c)))
|
|
88
|
-
c.set('rpc', rpc_option)
|
|
64
|
+
c.set('getClient', (chainId) => getClient(chainId ?? c.get('chainId')))
|
|
65
|
+
c.set('getTidx', (chainId) => getTidx(chainId ?? c.get('chainId'), Auth.getPrincipal(c)))
|
|
89
66
|
c.set('supportedChainIds', supportedChainIds)
|
|
90
67
|
c.set('tidx', tidx)
|
|
91
68
|
c.set('verifiedTokens', options.verifiedTokens === false ? undefined : (options.verifiedTokens ?? {})) // prettier-ignore
|
|
@@ -95,6 +72,8 @@ export function data(options: data.Options = {}) {
|
|
|
95
72
|
})
|
|
96
73
|
// Resolve one chain for every data route before auth and handlers use it.
|
|
97
74
|
.use('*', async (c, next) => {
|
|
75
|
+
const defaultChainId = c.get('chainId')
|
|
76
|
+
const supportedChainIds = c.get('supportedChainIds')
|
|
98
77
|
const selection = resolveChainSelector({
|
|
99
78
|
c,
|
|
100
79
|
defaultChainId,
|
|
@@ -118,7 +97,7 @@ export function data(options: data.Options = {}) {
|
|
|
118
97
|
if (zones.size === 0) return next()
|
|
119
98
|
const selection = resolveChainSelector({
|
|
120
99
|
c,
|
|
121
|
-
defaultChainId,
|
|
100
|
+
defaultChainId: c.get('chainId'),
|
|
122
101
|
handlers: dataRouteHandlers,
|
|
123
102
|
})
|
|
124
103
|
if (!selection.matched) return next()
|
|
@@ -155,7 +134,7 @@ export function data(options: data.Options = {}) {
|
|
|
155
134
|
|
|
156
135
|
const selection = resolveChainSelector({
|
|
157
136
|
c,
|
|
158
|
-
defaultChainId,
|
|
137
|
+
defaultChainId: c.get('chainId'),
|
|
159
138
|
handlers: dataRouteHandlers,
|
|
160
139
|
})
|
|
161
140
|
if (!selection.matched || !Viem.isMainnet(c.get('chainId'))) return next()
|
|
@@ -197,7 +176,11 @@ export function data(options: data.Options = {}) {
|
|
|
197
176
|
.route('/', coingecko())
|
|
198
177
|
.route('/', blocksByTimestampCompat())
|
|
199
178
|
const edgeCacheEligible = (c: Context<App.Environment>) => {
|
|
200
|
-
const selection = resolveChainSelector({
|
|
179
|
+
const selection = resolveChainSelector({
|
|
180
|
+
c,
|
|
181
|
+
defaultChainId: c.get('chainId'),
|
|
182
|
+
handlers: dataRouteHandlers,
|
|
183
|
+
})
|
|
201
184
|
return (
|
|
202
185
|
selection.matched &&
|
|
203
186
|
!selection.conflict &&
|
|
@@ -210,7 +193,10 @@ export function data(options: data.Options = {}) {
|
|
|
210
193
|
dataRouteHandlers.add(route.handler)
|
|
211
194
|
if (zones.size > 0) EdgeCache.setEligibility(route.handler, edgeCacheEligible)
|
|
212
195
|
}
|
|
213
|
-
return Metadata.attach(app,
|
|
196
|
+
return Metadata.attach(app, {
|
|
197
|
+
...openapi,
|
|
198
|
+
supportedChainIds: [...Object.keys(Tidx.url).map(Number), ...zones.keys()],
|
|
199
|
+
})
|
|
214
200
|
}
|
|
215
201
|
|
|
216
202
|
export declare namespace data {
|
|
@@ -218,14 +204,8 @@ export declare namespace data {
|
|
|
218
204
|
type Options = {
|
|
219
205
|
/** Static API asset store for the current runtime (e.g. `Assets.cloudflareR2(...)`). Omit to skip static assets — token logo URIs go unresolved. */
|
|
220
206
|
assets?: Assets.Assets | undefined
|
|
221
|
-
/** Default Tempo chain id for requests that omit `chainId`. */
|
|
222
|
-
defaultChainId?: Viem.ChainId | undefined
|
|
223
207
|
/** Funding quote provider configuration. */
|
|
224
208
|
funding?: funding.Options | undefined
|
|
225
|
-
/** Tempo RPC options: a static config, or a per-request resolver that routes by request principal to a separate (e.g. public, no-auth) RPC. */
|
|
226
|
-
rpc?: Viem.getClient.Rpc | undefined
|
|
227
|
-
/** Extra chain ids this deployment serves, beyond the built-in public chains and `defaultChainId`. A `chainId` outside this set is rejected with a 400. */
|
|
228
|
-
supportedChainIds?: readonly number[] | undefined
|
|
229
209
|
/** TIDX query client options. */
|
|
230
210
|
tidx?: Tidx.getClient.Tidx | undefined
|
|
231
211
|
/** Verified-token feature configuration. Enabled by default (token rows live in `db`; empty until published); pass `false` to always serve an empty verified list. */
|