tapimo 0.12.0 → 0.13.0
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 +5561 -5026
- package/dist/App.d.ts.map +1 -1
- package/dist/App.js +38 -3
- package/dist/App.js.map +1 -1
- package/dist/Scope.d.ts +2 -0
- package/dist/Scope.d.ts.map +1 -1
- package/dist/Scope.js +17 -0
- package/dist/Scope.js.map +1 -1
- package/dist/admin/App.d.ts +123 -74
- package/dist/admin/App.d.ts.map +1 -1
- package/dist/admin/apps/api-keys.d.ts +80 -0
- package/dist/admin/apps/api-keys.d.ts.map +1 -1
- package/dist/admin/apps/api-keys.js +54 -0
- package/dist/admin/apps/api-keys.js.map +1 -1
- package/dist/admin/apps/earn-vaults.d.ts +15 -15
- package/dist/admin/apps/earn-vaults.js +1 -1
- package/dist/admin/apps/verified-tokens.d.ts +81 -81
- package/dist/admin/ui.generated.d.ts +1 -1
- package/dist/admin/ui.generated.d.ts.map +1 -1
- package/dist/admin/ui.generated.js +151 -151
- package/dist/admin/ui.generated.js.map +1 -1
- package/dist/apps/Zones.d.ts +16 -16
- package/dist/apps/Zones.js +4 -4
- package/dist/apps/data/App.js +18 -18
- package/dist/apps/data/App.js.map +1 -1
- package/dist/apps/data/ZoneSelection.d.ts +8 -8
- package/dist/apps/data/ZoneSelection.d.ts.map +1 -1
- package/dist/apps/data/ZoneSelection.js +1 -1
- package/dist/apps/data/ZoneSelection.js.map +1 -1
- package/dist/apps/data/routes/activities.d.ts +588 -584
- package/dist/apps/data/routes/activities.d.ts.map +1 -1
- package/dist/apps/data/routes/activities.js +1561 -1239
- package/dist/apps/data/routes/activities.js.map +1 -1
- package/dist/apps/data/routes/balances.d.ts +26 -26
- package/dist/apps/data/routes/balances.d.ts.map +1 -1
- package/dist/apps/data/routes/balances.js +43 -16
- package/dist/apps/data/routes/balances.js.map +1 -1
- package/dist/apps/data/routes/blocks.d.ts +44 -44
- package/dist/apps/data/routes/blocks.d.ts.map +1 -1
- package/dist/apps/data/routes/blocks.js +21 -11
- package/dist/apps/data/routes/blocks.js.map +1 -1
- package/dist/apps/data/routes/coingecko.d.ts +3 -3
- package/dist/apps/data/routes/earn.d.ts +18 -18
- package/dist/apps/data/routes/earn.js +13 -13
- package/dist/apps/data/routes/exchanges.d.ts +145 -145
- package/dist/apps/data/routes/fee-amm.d.ts +2 -2
- package/dist/apps/data/routes/receipts.d.ts +155 -55
- package/dist/apps/data/routes/receipts.d.ts.map +1 -1
- package/dist/apps/data/routes/receipts.js +28 -10
- package/dist/apps/data/routes/receipts.js.map +1 -1
- package/dist/apps/data/routes/tokenlist.d.ts +13 -13
- package/dist/apps/data/routes/tokens.d.ts +98 -98
- package/dist/apps/data/routes/tokens.d.ts.map +1 -1
- package/dist/apps/data/routes/tokens.js +51 -20
- package/dist/apps/data/routes/tokens.js.map +1 -1
- package/dist/apps/data/routes/transactions.d.ts +7 -2
- package/dist/apps/data/routes/transactions.d.ts.map +1 -1
- package/dist/apps/data/routes/transactions.js +37 -17
- package/dist/apps/data/routes/transactions.js.map +1 -1
- package/dist/apps/data/routes/transfers.d.ts +1 -1
- package/dist/apps/data/routes/transfers.d.ts.map +1 -1
- package/dist/apps/data/routes/transfers.js +18 -12
- package/dist/apps/data/routes/transfers.js.map +1 -1
- package/dist/apps/data/routes/valuation.d.ts +1 -1
- package/dist/apps/data/routes/valuation.d.ts.map +1 -1
- package/dist/apps/data/routes/valuation.js +12 -7
- package/dist/apps/data/routes/valuation.js.map +1 -1
- package/dist/apps/data/routes/verified-tokens.d.ts +3 -3
- package/dist/apps/data/routes/webhooks.d.ts +11 -11
- package/dist/apps/data/routes/zones.d.ts +14 -14
- package/dist/apps/data/routes/zones.js +1 -1
- package/dist/apps/funding/App.d.ts +11 -0
- package/dist/apps/funding/App.d.ts.map +1 -1
- package/dist/apps/funding/routes/deposit-addresses.d.ts.map +1 -1
- package/dist/apps/funding/routes/deposit-addresses.js +16 -11
- package/dist/apps/funding/routes/deposit-addresses.js.map +1 -1
- package/dist/apps/funding/routes/transfers.d.ts +60 -48
- package/dist/apps/funding/routes/transfers.d.ts.map +1 -1
- package/dist/apps/funding/routes/transfers.js +27 -19
- package/dist/apps/funding/routes/transfers.js.map +1 -1
- package/dist/apps/management/App.d.ts +4487 -3963
- package/dist/apps/management/App.d.ts.map +1 -1
- package/dist/apps/management/routes/api-keys.d.ts +710 -159
- package/dist/apps/management/routes/api-keys.d.ts.map +1 -1
- package/dist/apps/management/routes/api-keys.js +236 -4
- package/dist/apps/management/routes/api-keys.js.map +1 -1
- package/dist/apps/management/routes/faucet.d.ts +6 -6
- package/dist/apps/management/routes/invite-links.d.ts +42 -42
- package/dist/apps/management/routes/members.d.ts +30 -30
- package/dist/apps/management/routes/projects.d.ts +40 -40
- package/dist/apps/management/routes/usage.d.ts +24 -24
- package/dist/apps/management/routes/verified-token-requests.d.ts +1 -1
- package/dist/apps/management/routes/webhooks.d.ts +55 -55
- package/dist/db/Db.d.ts.map +1 -1
- package/dist/db/Db.js +12 -1
- package/dist/db/Db.js.map +1 -1
- package/dist/db/Schema.d.ts +3 -2
- package/dist/db/Schema.d.ts.map +1 -1
- package/dist/db/Schema.js +5 -2
- package/dist/db/Schema.js.map +1 -1
- package/dist/db/tables/fundingCatalog.d.ts +4 -2
- package/dist/db/tables/fundingCatalog.d.ts.map +1 -1
- package/dist/db/tables/fundingCatalog.js +5 -1
- package/dist/db/tables/fundingCatalog.js.map +1 -1
- package/dist/handlers/internal/utils.d.ts.map +1 -1
- package/dist/handlers/internal/utils.js +9 -0
- package/dist/handlers/internal/utils.js.map +1 -1
- package/dist/internal/Auth.d.ts +3 -1
- package/dist/internal/Auth.d.ts.map +1 -1
- package/dist/internal/Auth.js +6 -3
- package/dist/internal/Auth.js.map +1 -1
- package/dist/internal/EarnVaults.d.ts +3 -3
- package/dist/internal/EarnVaults.js +3 -3
- package/dist/internal/Fetch.d.ts +23 -0
- package/dist/internal/Fetch.d.ts.map +1 -0
- package/dist/internal/Fetch.js +26 -0
- package/dist/internal/Fetch.js.map +1 -0
- package/dist/internal/Log.d.ts +3 -1
- package/dist/internal/Log.d.ts.map +1 -1
- package/dist/internal/Log.js +16 -3
- package/dist/internal/Log.js.map +1 -1
- package/dist/internal/OpenApi.d.ts +5 -3
- package/dist/internal/OpenApi.d.ts.map +1 -1
- package/dist/internal/OpenApi.js +13 -3
- package/dist/internal/OpenApi.js.map +1 -1
- package/dist/internal/Response.d.ts +1 -1
- package/dist/internal/Response.d.ts.map +1 -1
- package/dist/internal/Schema.d.ts +6 -3
- package/dist/internal/Schema.d.ts.map +1 -1
- package/dist/internal/Schema.js +8 -2
- package/dist/internal/Schema.js.map +1 -1
- package/dist/internal/Store.d.ts +16 -3
- package/dist/internal/Store.d.ts.map +1 -1
- package/dist/internal/Store.js +82 -16
- package/dist/internal/Store.js.map +1 -1
- package/dist/internal/Tidx.d.ts.map +1 -1
- package/dist/internal/Tidx.js +7 -2
- package/dist/internal/Tidx.js.map +1 -1
- package/dist/internal/Timeout.d.ts +36 -0
- package/dist/internal/Timeout.d.ts.map +1 -0
- package/dist/internal/Timeout.js +37 -0
- package/dist/internal/Timeout.js.map +1 -0
- package/dist/internal/Timing.d.ts +9 -0
- package/dist/internal/Timing.d.ts.map +1 -1
- package/dist/internal/Timing.js +7 -0
- package/dist/internal/Timing.js.map +1 -1
- package/dist/internal/WebhookDestination.d.ts.map +1 -1
- package/dist/internal/WebhookDestination.js +3 -0
- package/dist/internal/WebhookDestination.js.map +1 -1
- package/dist/internal/funding/Action.d.ts +9 -0
- package/dist/internal/funding/Action.d.ts.map +1 -1
- package/dist/internal/funding/Action.js +16 -8
- package/dist/internal/funding/Action.js.map +1 -1
- package/dist/internal/funding/Catalog.d.ts +9 -2
- package/dist/internal/funding/Catalog.d.ts.map +1 -1
- package/dist/internal/funding/Catalog.js +19 -8
- package/dist/internal/funding/Catalog.js.map +1 -1
- package/dist/internal/funding/Provider.d.ts +68 -13
- package/dist/internal/funding/Provider.d.ts.map +1 -1
- package/dist/internal/funding/Provider.js +29 -8
- package/dist/internal/funding/Provider.js.map +1 -1
- package/dist/internal/funding/Transfer.d.ts +13 -12
- package/dist/internal/funding/Transfer.d.ts.map +1 -1
- package/dist/internal/funding/Transfer.js +23 -21
- package/dist/internal/funding/Transfer.js.map +1 -1
- package/dist/internal/funding/providers/stargate.d.ts +28 -9
- package/dist/internal/funding/providers/stargate.d.ts.map +1 -1
- package/dist/internal/funding/providers/stargate.js +251 -117
- package/dist/internal/funding/providers/stargate.js.map +1 -1
- package/dist/internal/index.d.ts +1 -0
- package/dist/internal/index.d.ts.map +1 -1
- package/dist/internal/index.js +1 -0
- package/dist/internal/index.js.map +1 -1
- package/package.json +2 -2
- package/src/App.test.ts +100 -0
- package/src/App.ts +42 -3
- package/src/Client.test-d.ts +46 -0
- package/src/Scope.test.ts +20 -0
- package/src/Scope.ts +16 -0
- package/src/admin/apps/api-keys.test.ts +75 -0
- package/src/admin/apps/api-keys.ts +64 -0
- package/src/admin/apps/earn-vaults.test.ts +1 -1
- package/src/admin/apps/earn-vaults.ts +1 -1
- package/src/admin/ui/src/lib/api-keys.ts +19 -0
- package/src/admin/ui/src/routes/api-keys.tsx +89 -2
- package/src/admin/ui.generated.ts +189 -151
- package/src/apps/Zones.test.ts +4 -4
- package/src/apps/Zones.ts +4 -4
- package/src/apps/composition.test.ts +1 -1
- package/src/apps/data/App.test.ts +41 -0
- package/src/apps/data/App.ts +18 -18
- package/src/apps/data/ZoneSelection.test.ts +2 -2
- package/src/apps/data/ZoneSelection.ts +8 -8
- package/src/apps/data/routes/activities.test.ts +1526 -12
- package/src/apps/data/routes/activities.ts +1774 -1356
- package/src/apps/data/routes/balances.ts +133 -97
- package/src/apps/data/routes/blocks.test.ts +533 -0
- package/src/apps/data/routes/blocks.ts +35 -16
- package/src/apps/data/routes/earn.test.ts +4 -2
- package/src/apps/data/routes/earn.ts +13 -13
- package/src/apps/data/routes/earn.zone-access.test.ts +6 -6
- package/src/apps/data/routes/receipts.ts +47 -16
- package/src/apps/data/routes/tokens.test.ts +578 -0
- package/src/apps/data/routes/tokens.ts +283 -225
- package/src/apps/data/routes/transactions.ts +68 -29
- package/src/apps/data/routes/transfers.test.ts +421 -0
- package/src/apps/data/routes/transfers.ts +45 -27
- package/src/apps/data/routes/valuation.ts +94 -78
- package/src/apps/data/routes/zones.test.ts +2 -2
- package/src/apps/data/routes/zones.ts +1 -1
- package/src/apps/funding/routes/deposit-addresses.test.ts +25 -3
- package/src/apps/funding/routes/deposit-addresses.ts +17 -12
- package/src/apps/funding/routes/quotes.test.ts +5 -9
- package/src/apps/funding/routes/transfers.test.ts +395 -8
- package/src/apps/funding/routes/transfers.ts +76 -59
- package/src/apps/management/routes/api-keys.test.ts +220 -0
- package/src/apps/management/routes/api-keys.ts +280 -3
- package/src/db/Db.ts +13 -1
- package/src/db/Schema.ts +5 -2
- package/src/db/tables/earnVaults.test.ts +9 -9
- package/src/db/tables/fundingCatalog.test.ts +16 -2
- package/src/db/tables/fundingCatalog.ts +9 -3
- package/src/handlers/internal/utils.test.ts +53 -0
- package/src/handlers/internal/utils.ts +15 -0
- package/src/internal/Auth.ts +12 -4
- package/src/internal/EarnVaults.capabilities.test.ts +2 -2
- package/src/internal/EarnVaults.test.ts +1 -1
- package/src/internal/EarnVaults.ts +3 -3
- package/src/internal/Fetch.test.ts +46 -0
- package/src/internal/Fetch.ts +56 -0
- package/src/internal/Log.test.ts +21 -0
- package/src/internal/Log.ts +20 -5
- package/src/internal/OpenApi.ts +14 -4
- package/src/internal/Response.ts +1 -1
- package/src/internal/Schema.test.ts +2 -0
- package/src/internal/Schema.ts +12 -2
- package/src/internal/Store.test.ts +178 -0
- package/src/internal/Store.ts +104 -18
- package/src/internal/Tidx.test.ts +2 -1
- package/src/internal/Tidx.ts +7 -2
- package/src/internal/Timeout.test.ts +35 -0
- package/src/internal/Timeout.ts +73 -0
- package/src/internal/Timing.ts +16 -0
- package/src/internal/WebhookDestination.ts +3 -0
- package/src/internal/funding/Action.test.ts +41 -1
- package/src/internal/funding/Action.ts +69 -41
- package/src/internal/funding/Catalog.test.ts +34 -0
- package/src/internal/funding/Catalog.ts +28 -11
- package/src/internal/funding/Provider.test.ts +73 -0
- package/src/internal/funding/Provider.ts +82 -28
- package/src/internal/funding/Transfer.ts +133 -110
- package/src/internal/funding/providers/index.test.ts +4 -167
- package/src/internal/funding/providers/relay.test.ts +2 -2
- package/src/internal/funding/providers/stargate.test.ts +163 -0
- package/src/internal/funding/providers/stargate.ts +359 -134
- package/src/internal/index.test.ts +1 -0
- package/src/internal/index.ts +1 -0
package/src/apps/Zones.test.ts
CHANGED
|
@@ -5,11 +5,11 @@ describe('chains', () => {
|
|
|
5
5
|
expect(Zones.chains).toMatchObject([
|
|
6
6
|
{
|
|
7
7
|
contracts: {
|
|
8
|
-
messenger: { address: '
|
|
9
|
-
portal: { address: '
|
|
10
|
-
verifier: { address: '
|
|
8
|
+
messenger: { address: '0x5A4d000000000000000000000000000000000000' },
|
|
9
|
+
portal: { address: '0x5Ad0000000000000000000000000000000000003' },
|
|
10
|
+
verifier: { address: '0x5a56000000000000000000000000000000000000' },
|
|
11
11
|
},
|
|
12
|
-
id:
|
|
12
|
+
id: 1_424_310_003,
|
|
13
13
|
name: 'zone-moderato-internal',
|
|
14
14
|
rpcUrls: {
|
|
15
15
|
default: { http: ['https://zone-internal-rpc.testnet.tempo.xyz'] },
|
package/src/apps/Zones.ts
CHANGED
|
@@ -6,11 +6,11 @@ export const zoneModeratoInternal = defineChain({
|
|
|
6
6
|
...tempoTestnet,
|
|
7
7
|
contracts: {
|
|
8
8
|
...tempoTestnet.contracts,
|
|
9
|
-
messenger: { address: '
|
|
10
|
-
portal: { address: '
|
|
11
|
-
verifier: { address: '
|
|
9
|
+
messenger: { address: '0x5A4d000000000000000000000000000000000000' },
|
|
10
|
+
portal: { address: '0x5Ad0000000000000000000000000000000000003' },
|
|
11
|
+
verifier: { address: '0x5a56000000000000000000000000000000000000' },
|
|
12
12
|
},
|
|
13
|
-
id:
|
|
13
|
+
id: 1_424_310_003,
|
|
14
14
|
name: 'zone-moderato-internal',
|
|
15
15
|
rpcUrls: {
|
|
16
16
|
default: { http: ['https://zone-internal-rpc.testnet.tempo.xyz'] },
|
|
@@ -183,11 +183,20 @@ describe('MPP session management', () => {
|
|
|
183
183
|
})
|
|
184
184
|
|
|
185
185
|
describe('zone chain gate', () => {
|
|
186
|
+
const legacyModerato = 1_424_310_001
|
|
187
|
+
const moderato = 1_424_310_003
|
|
186
188
|
/** A consumer-supplied zone chain id (the API never derives these). */
|
|
187
189
|
const zone = 421_700_001
|
|
188
190
|
/** A second zone, isolating per-zone grants. */
|
|
189
191
|
const zoneB = 4_217_000_002
|
|
190
192
|
|
|
193
|
+
const legacyModeratoReader = {
|
|
194
|
+
id: 'key_legacy_moderato',
|
|
195
|
+
orgId: 'org_test',
|
|
196
|
+
scopes: ['data:read', 'indexer:query', `zone:${legacyModerato}:read`],
|
|
197
|
+
token: 'secret_legacy_moderato',
|
|
198
|
+
} satisfies TestApp.kvStore.Key
|
|
199
|
+
|
|
191
200
|
function zoneOptions(chainId: number) {
|
|
192
201
|
return TestApp.zone({
|
|
193
202
|
chainId,
|
|
@@ -292,6 +301,38 @@ describe('zone chain gate', () => {
|
|
|
292
301
|
expect(response.status).toBe(200)
|
|
293
302
|
})
|
|
294
303
|
|
|
304
|
+
test('the legacy Moderato id and read scope route to current upstreams', async () => {
|
|
305
|
+
const fetch = vi
|
|
306
|
+
.spyOn(globalThis, 'fetch')
|
|
307
|
+
.mockResolvedValueOnce(Response.json({ id: 1, jsonrpc: '2.0', result: '0x54e89ac3' }))
|
|
308
|
+
.mockResolvedValueOnce(Response.json({ columns: [], ok: true, row_count: 0, rows: [] }))
|
|
309
|
+
try {
|
|
310
|
+
const app = TestApp.create({
|
|
311
|
+
auth: { keys: [legacyModeratoReader] },
|
|
312
|
+
rpc: { url: (chainId) => `https://${chainId}.rpc.test` },
|
|
313
|
+
tidx: { baseUrl: (chainId) => `https://${chainId}.tidx.test` },
|
|
314
|
+
zones: true,
|
|
315
|
+
})
|
|
316
|
+
const rpc = await app.request(`/rpc/${legacyModerato}`, {
|
|
317
|
+
body: JSON.stringify({ id: 1, jsonrpc: '2.0', method: 'eth_chainId' }),
|
|
318
|
+
headers: as(legacyModeratoReader).headers,
|
|
319
|
+
method: 'POST',
|
|
320
|
+
})
|
|
321
|
+
const tidx = await app.request(
|
|
322
|
+
`/v1/indexer/query?chainId=${legacyModerato}&sql=select%201`,
|
|
323
|
+
as(legacyModeratoReader),
|
|
324
|
+
)
|
|
325
|
+
const tidxUpstream = new URL((fetch.mock.calls[1]![0] as Request).url)
|
|
326
|
+
|
|
327
|
+
expect([rpc.status, tidx.status]).toEqual([200, 200])
|
|
328
|
+
expect((fetch.mock.calls[0]![0] as Request).url).toBe(`https://${moderato}.rpc.test/`)
|
|
329
|
+
expect(tidxUpstream.origin).toBe(`https://${moderato}.tidx.test`)
|
|
330
|
+
expect(tidxUpstream.searchParams.get('chainId')).toBe(String(moderato))
|
|
331
|
+
} finally {
|
|
332
|
+
fetch.mockRestore()
|
|
333
|
+
}
|
|
334
|
+
})
|
|
335
|
+
|
|
295
336
|
test('a Zone write scope reads Zone data', async () => {
|
|
296
337
|
const response = await zoneApp().request(`/v1/tokenlist?chainId=${zone}`, as(zoneWriter))
|
|
297
338
|
expect(response.status).toBe(200)
|
package/src/apps/data/App.ts
CHANGED
|
@@ -130,6 +130,21 @@ export function data(options: data.Options = {}) {
|
|
|
130
130
|
const rpc_config = c.get('rpc')
|
|
131
131
|
const tidx_config = c.get('tidx')
|
|
132
132
|
const zones = c.get('zones')
|
|
133
|
+
// Raw passthroughs and RPC-only reads need only RPC; composed data routes
|
|
134
|
+
// require both upstreams to avoid falling through to unrelated defaults.
|
|
135
|
+
const narrowedChainIds = new Set(
|
|
136
|
+
[...supportedChainIds].filter((chainId) => {
|
|
137
|
+
const context = { chainId, principal, zone: zones.get(chainId) }
|
|
138
|
+
const hasRpc = Viem.resolveRpc(rpc_config, context).url !== undefined
|
|
139
|
+
const hasTidx = Tidx.resolve(tidx_config, context).baseUrl !== undefined
|
|
140
|
+
if (selection.rpc || selection.rpcOnly) return hasRpc
|
|
141
|
+
if (selection.indexer) return hasTidx
|
|
142
|
+
return hasRpc && hasTidx
|
|
143
|
+
}),
|
|
144
|
+
)
|
|
145
|
+
c.set('supportedChainIds', narrowedChainIds)
|
|
146
|
+
if (!narrowedChainIds.has(selection.chainId))
|
|
147
|
+
return Response.unsupportedChainId(c, selection.chainId, narrowedChainIds)
|
|
133
148
|
if (selection.inferredZones) {
|
|
134
149
|
if (principal?.type !== 'api_key')
|
|
135
150
|
return Response.error(c, {
|
|
@@ -150,25 +165,10 @@ export function data(options: data.Options = {}) {
|
|
|
150
165
|
message: 'The API key has no readable configured Zones.',
|
|
151
166
|
status: 403,
|
|
152
167
|
})
|
|
153
|
-
c.set('supportedChainIds', new Set(zoneChainIds))
|
|
168
|
+
c.set('supportedChainIds', new Set([selection.chainId, ...zoneChainIds]))
|
|
154
169
|
c.set('zoneChainIds', zoneChainIds)
|
|
155
170
|
return next()
|
|
156
171
|
}
|
|
157
|
-
// Raw passthroughs and RPC-only reads need only RPC; composed data routes
|
|
158
|
-
// require both upstreams to avoid falling through to unrelated defaults.
|
|
159
|
-
const narrowedChainIds = new Set(
|
|
160
|
-
[...supportedChainIds].filter((chainId) => {
|
|
161
|
-
const context = { chainId, principal, zone: zones.get(chainId) }
|
|
162
|
-
const hasRpc = Viem.resolveRpc(rpc_config, context).url !== undefined
|
|
163
|
-
const hasTidx = Tidx.resolve(tidx_config, context).baseUrl !== undefined
|
|
164
|
-
if (selection.rpc || selection.rpcOnly) return hasRpc
|
|
165
|
-
if (selection.indexer) return hasTidx
|
|
166
|
-
return hasRpc && hasTidx
|
|
167
|
-
}),
|
|
168
|
-
)
|
|
169
|
-
c.set('supportedChainIds', narrowedChainIds)
|
|
170
|
-
if (!narrowedChainIds.has(selection.chainId))
|
|
171
|
-
return Response.unsupportedChainId(c, selection.chainId, narrowedChainIds)
|
|
172
172
|
c.set('chainId', selection.chainId)
|
|
173
173
|
return next()
|
|
174
174
|
})
|
|
@@ -201,8 +201,8 @@ export function data(options: data.Options = {}) {
|
|
|
201
201
|
return Response.error(c, {
|
|
202
202
|
code: 'api_key_forbidden',
|
|
203
203
|
message: selection.rpc
|
|
204
|
-
? `Chain
|
|
205
|
-
: `Chain
|
|
204
|
+
? `Chain ID ${chainId} is a Zone. Use an API key granting \`zone:${chainId}:read\` or \`zone:${chainId}:write\`, or pass a Zone token via \`X-Authorization-Token\`.`
|
|
205
|
+
: `Chain ID ${chainId} is a Zone. Use an API key granting \`zone:${chainId}:read\` or \`zone:${chainId}:write\`.`,
|
|
206
206
|
status: 403,
|
|
207
207
|
})
|
|
208
208
|
|
|
@@ -138,7 +138,7 @@ describe('readableChainIds', () => {
|
|
|
138
138
|
})
|
|
139
139
|
|
|
140
140
|
describe('uniqueMatch', () => {
|
|
141
|
-
test('selects one match after every
|
|
141
|
+
test('selects one match after every chain completes', () => {
|
|
142
142
|
expect(
|
|
143
143
|
ZoneSelection.uniqueMatch([
|
|
144
144
|
{ chainId: 1, value: null },
|
|
@@ -159,7 +159,7 @@ describe('uniqueMatch', () => {
|
|
|
159
159
|
).toStrictEqual({ kind: 'ambiguous' })
|
|
160
160
|
})
|
|
161
161
|
|
|
162
|
-
test('fails the selection when any
|
|
162
|
+
test('fails the selection when any chain lookup fails', () => {
|
|
163
163
|
const cause = new Error('unavailable')
|
|
164
164
|
expect(
|
|
165
165
|
ZoneSelection.uniqueMatch([
|
|
@@ -48,7 +48,7 @@ export declare namespace readableChainIds {
|
|
|
48
48
|
}
|
|
49
49
|
}
|
|
50
50
|
|
|
51
|
-
/** Resolves receipt probes without treating partial upstream results as complete. */
|
|
51
|
+
/** Resolves chain receipt probes without treating partial upstream results as complete. */
|
|
52
52
|
export function uniqueMatch<const value>(
|
|
53
53
|
probes: readonly uniqueMatch.Probe<value>[],
|
|
54
54
|
): uniqueMatch.Result<value> {
|
|
@@ -66,25 +66,25 @@ export function uniqueMatch<const value>(
|
|
|
66
66
|
}
|
|
67
67
|
|
|
68
68
|
export declare namespace uniqueMatch {
|
|
69
|
-
/** One completed
|
|
69
|
+
/** One completed chain lookup. */
|
|
70
70
|
type Probe<value> =
|
|
71
71
|
| {
|
|
72
|
-
/**
|
|
72
|
+
/** Chain that completed the lookup. */
|
|
73
73
|
chainId: number
|
|
74
|
-
/** Matching value, or null when the
|
|
74
|
+
/** Matching value, or null when the chain did not contain the resource. */
|
|
75
75
|
value: value | null
|
|
76
76
|
}
|
|
77
77
|
| {
|
|
78
|
-
/** Upstream failure from this
|
|
78
|
+
/** Upstream failure from this chain. */
|
|
79
79
|
cause: unknown
|
|
80
|
-
/**
|
|
80
|
+
/** Chain that failed the lookup. */
|
|
81
81
|
chainId: number
|
|
82
82
|
}
|
|
83
83
|
|
|
84
|
-
/** Unique-match decision across every requested
|
|
84
|
+
/** Unique-match decision across every requested chain. */
|
|
85
85
|
type Result<value> =
|
|
86
86
|
| {
|
|
87
|
-
/**
|
|
87
|
+
/** Chain containing the unique match. */
|
|
88
88
|
chainId: number
|
|
89
89
|
/** Unique match result. */
|
|
90
90
|
kind: 'selected'
|