import * as TestAdmin from '../../../test/Admin.js' import * as TestApp from '../../../test/App.js' import * as RoutesCatalog from '../../internal/routes/Catalog.js' import * as RoutesSupport from './routes-support.js' const catalog = { chains: [ { aliases: ['eth'], id: 'eip155:1', name: 'Ethereum', parentChainId: null, rpcUrls: ['https://ethereum.example'], slug: 'ethereum', }, { aliases: [], id: 'eip155:4217', name: 'Tempo', parentChainId: null, rpcUrls: ['https://tempo.example'], slug: 'tempo', }, ], chainTokens: [ { address: '0xA0B86991C6218B36C1D19D4A2E9EB0CE3606EB48', chainId: 'eip155:1', decimals: 6, name: null, standard: 'ERC-20', tokenId: 'usdc', }, { address: '0x20C000000000000000000000B9537D11C60E8B50', chainId: 'eip155:4217', decimals: 6, name: null, standard: 'TIP-20', tokenId: 'usdce', }, ], routes: [ { capabilities: { depositAddress: true }, destinationChainId: 'eip155:4217', destinationTokenId: 'usdce', providerId: 'relay', sourceChainId: 'eip155:1', sourceTokenId: 'usdc', }, { destinationChainId: 'eip155:4217', destinationTokenId: 'usdce', providerId: 'rhino', sourceChainId: 'eip155:1', sourceTokenId: 'usdc', }, { capabilities: { transfer: { modes: ['exactSource'] } }, destinationChainId: 'eip155:4217', destinationTokenId: 'usdce', providerId: 'stargate', sourceChainId: 'eip155:1', sourceTokenId: 'usdc', }, { capabilities: { transfer: { modes: ['exactSource'] } }, destinationChainId: 'eip155:1', destinationTokenId: 'usdc', providerId: 'stargate', sourceChainId: 'eip155:4217', sourceTokenId: 'usdce', }, ], tokens: [ { currency: 'USD', id: 'usdc', name: 'USD Coin', symbol: 'USDC' }, { currency: 'USD', id: 'usdce', name: 'Bridged USDC (Stargate)', symbol: 'USDC.e', }, ], } as const satisfies RoutesCatalog.publish.Input describe('GET /routes/support', () => { test('groups published capabilities and reports conditional subsidy eligibility', async () => { const { app, db } = TestAdmin.setup() const published = await RoutesCatalog.publish(db, catalog) const response = await app.request('/routes/support') const body = await TestApp.json(response, RoutesSupport.schema.getRoutesSupport.Response) expect(response.status).toBe(200) expect({ ...body, updatedAt: '' }).toMatchInlineSnapshot(` { "data": [ { "depositAddressProviders": [ "relay", ], "destinationChain": { "id": "eip155:4217", "name": "Tempo", "slug": "tempo", }, "destinationToken": { "id": "usdce", "name": "Bridged USDC (Stargate)", "symbol": "USDC.e", }, "id": "eip155:1/usdc-eip155:4217/usdce", "quoteProviders": [ "relay", "rhino", "stargate", ], "sourceChain": { "id": "eip155:1", "name": "Ethereum", "slug": "ethereum", }, "sourceToken": { "id": "usdc", "name": "USD Coin", "symbol": "USDC", }, "subsidies": { "depositAddress": true, "walletTransfer": false, }, "walletTransferProviders": [ { "modes": [ "exactSource", ], "providerId": "stargate", }, ], }, { "depositAddressProviders": [], "destinationChain": { "id": "eip155:1", "name": "Ethereum", "slug": "ethereum", }, "destinationToken": { "id": "usdc", "name": "USD Coin", "symbol": "USDC", }, "id": "eip155:4217/usdce-eip155:1/usdc", "quoteProviders": [ "stargate", ], "sourceChain": { "id": "eip155:4217", "name": "Tempo", "slug": "tempo", }, "sourceToken": { "id": "usdce", "name": "Bridged USDC (Stargate)", "symbol": "USDC.e", }, "subsidies": { "depositAddress": false, "walletTransfer": true, }, "walletTransferProviders": [ { "modes": [ "exactSource", ], "providerId": "stargate", }, ], }, ], "updatedAt": "", } `) expect(body.updatedAt).toBe(published.updatedAt) expect(response.headers.get('cache-control')).toBe('no-store') }) test('serves an empty catalog', async () => { const { app } = TestAdmin.setup() const response = await app.request('/routes/support') expect(await TestApp.json(response, RoutesSupport.schema.getRoutesSupport.Response)) .toMatchInlineSnapshot(` { "data": [], "updatedAt": "1970-01-01T00:00:00.000Z", } `) }) })