From 38d6c6b6275c17e6039a5ac5c9e7724aeb80b5c9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rafael=20C=C3=A1rdenas?= Date: Tue, 28 Feb 2023 13:55:15 -0600 Subject: [PATCH] feat: /ordinals prefix --- src/api/init.ts | 3 ++- tests/cache.test.ts | 12 ++++++------ tests/inscriptions.test.ts | 34 +++++++++++++++++----------------- tests/sats.test.ts | 8 ++++---- util/openapi-generator.ts | 2 +- 5 files changed, 30 insertions(+), 29 deletions(-) diff --git a/src/api/init.ts b/src/api/init.ts index da64de05..3a3a7a89 100644 --- a/src/api/init.ts +++ b/src/api/init.ts @@ -50,7 +50,8 @@ export async function buildApiServer(args: { db: PgStore }) { fastify.decorate('db', args.db); await fastify.register(FastifyCors); - await fastify.register(Api); + await fastify.register(Api, { prefix: '/ordinals/v1' }); + await fastify.register(Api, { prefix: '/ordinals' }); return fastify; } diff --git a/tests/cache.test.ts b/tests/cache.test.ts index 952c22e7..d4395cd6 100644 --- a/tests/cache.test.ts +++ b/tests/cache.test.ts @@ -49,7 +49,7 @@ describe('ETag cache', () => { }); const response = await fastify.inject({ method: 'GET', - url: '/inscriptions/38c46a8bf7ec90bc7f6b797e7dc84baa97f4e5fd4286b92fe1b50176d03b18dci0', + url: '/ordinals/v1/inscriptions/38c46a8bf7ec90bc7f6b797e7dc84baa97f4e5fd4286b92fe1b50176d03b18dci0', }); expect(response.statusCode).toBe(200); expect(response.headers.etag).not.toBeUndefined(); @@ -58,7 +58,7 @@ describe('ETag cache', () => { // Cached response const cached = await fastify.inject({ method: 'GET', - url: '/inscriptions/38c46a8bf7ec90bc7f6b797e7dc84baa97f4e5fd4286b92fe1b50176d03b18dci0', + url: '/ordinals/v1/inscriptions/38c46a8bf7ec90bc7f6b797e7dc84baa97f4e5fd4286b92fe1b50176d03b18dci0', headers: { 'if-none-match': etag }, }); expect(cached.statusCode).toBe(304); @@ -67,7 +67,7 @@ describe('ETag cache', () => { await db.sql`UPDATE locations SET timestamp = NOW() WHERE true`; const cached2 = await fastify.inject({ method: 'GET', - url: '/inscriptions/38c46a8bf7ec90bc7f6b797e7dc84baa97f4e5fd4286b92fe1b50176d03b18dci0', + url: '/ordinals/v1/inscriptions/38c46a8bf7ec90bc7f6b797e7dc84baa97f4e5fd4286b92fe1b50176d03b18dci0', headers: { 'if-none-match': etag }, }); expect(cached2.statusCode).toBe(200); @@ -130,7 +130,7 @@ describe('ETag cache', () => { // ETag response const response = await fastify.inject({ method: 'GET', - url: '/inscriptions', + url: '/ordinals/v1/inscriptions', }); expect(response.statusCode).toBe(200); expect(response.headers.etag).not.toBeUndefined(); @@ -139,7 +139,7 @@ describe('ETag cache', () => { // Cached const cached = await fastify.inject({ method: 'GET', - url: '/inscriptions', + url: '/ordinals/v1/inscriptions', headers: { 'if-none-match': etag }, }); expect(cached.statusCode).toBe(304); @@ -148,7 +148,7 @@ describe('ETag cache', () => { await db.updateChainTipBlockHeight({ blockHeight: 5 }); const cached2 = await fastify.inject({ method: 'GET', - url: '/inscriptions', + url: '/ordinals/v1/inscriptions', headers: { 'if-none-match': etag }, }); expect(cached2.statusCode).toBe(200); diff --git a/tests/inscriptions.test.ts b/tests/inscriptions.test.ts index 4b61bc98..2552904f 100644 --- a/tests/inscriptions.test.ts +++ b/tests/inscriptions.test.ts @@ -49,7 +49,7 @@ describe('/inscriptions', () => { }); const response = await fastify.inject({ method: 'GET', - url: '/inscriptions/38c46a8bf7ec90bc7f6b797e7dc84baa97f4e5fd4286b92fe1b50176d03b18dci0', + url: '/ordinals/v1/inscriptions/38c46a8bf7ec90bc7f6b797e7dc84baa97f4e5fd4286b92fe1b50176d03b18dci0', }); expect(response.statusCode).toBe(200); expect(response.json()).toStrictEqual({ @@ -128,7 +128,7 @@ describe('/inscriptions', () => { const response1 = await fastify.inject({ method: 'GET', - url: '/inscriptions?mime_type=text/plain', + url: '/ordinals/v1/inscriptions?mime_type=text/plain', }); expect(response1.statusCode).toBe(200); const responseJson1 = response1.json(); @@ -155,7 +155,7 @@ describe('/inscriptions', () => { const response2 = await fastify.inject({ method: 'GET', - url: '/inscriptions?mime_type=image/png', + url: '/ordinals/v1/inscriptions?mime_type=image/png', }); expect(response2.statusCode).toBe(200); const responseJson2 = response2.json(); @@ -182,7 +182,7 @@ describe('/inscriptions', () => { const response3 = await fastify.inject({ method: 'GET', - url: '/inscriptions?mime_type=image/png&mime_type=text/plain', + url: '/ordinals/v1/inscriptions?mime_type=image/png&mime_type=text/plain', }); expect(response3.statusCode).toBe(200); const responseJson3 = response3.json(); @@ -247,7 +247,7 @@ describe('/inscriptions', () => { const response1 = await fastify.inject({ method: 'GET', - url: '/inscriptions?rarity=common', + url: '/ordinals/v1/inscriptions?rarity=common', }); expect(response1.statusCode).toBe(200); const responseJson1 = response1.json(); @@ -256,7 +256,7 @@ describe('/inscriptions', () => { const response2 = await fastify.inject({ method: 'GET', - url: '/inscriptions?rarity=epic', + url: '/ordinals/v1/inscriptions?rarity=epic', }); expect(response2.statusCode).toBe(200); const responseJson2 = response2.json(); @@ -320,7 +320,7 @@ describe('/inscriptions', () => { const response1 = await fastify.inject({ method: 'GET', - url: '/inscriptions?genesis_block=775617', + url: '/ordinals/v1/inscriptions?genesis_block=775617', }); expect(response1.statusCode).toBe(200); const responseJson1 = response1.json(); @@ -384,7 +384,7 @@ describe('/inscriptions', () => { const response1 = await fastify.inject({ method: 'GET', - url: '/inscriptions?genesis_block=000000000000000000039b3051705a16fcf310a70dee55742339e6da70181bf7', + url: '/ordinals/v1/inscriptions?genesis_block=000000000000000000039b3051705a16fcf310a70dee55742339e6da70181bf7', }); expect(response1.statusCode).toBe(200); const responseJson1 = response1.json(); @@ -450,7 +450,7 @@ describe('/inscriptions', () => { const response1 = await fastify.inject({ method: 'GET', - url: '/inscriptions?output=9f4a9b73b0713c5da01c0a47f97c6c001af9028d6bdd9e264dfacbc4e6790201:0', + url: '/ordinals/v1/inscriptions?output=9f4a9b73b0713c5da01c0a47f97c6c001af9028d6bdd9e264dfacbc4e6790201:0', }); expect(response1.statusCode).toBe(200); const responseJson1 = response1.json(); @@ -516,7 +516,7 @@ describe('/inscriptions', () => { const response1 = await fastify.inject({ method: 'GET', - url: '/inscriptions?address=bc1pscktlmn99gyzlvymvrezh6vwd0l4kg06tg5rvssw0czg8873gz5sdkteqj', + url: '/ordinals/v1/inscriptions?address=bc1pscktlmn99gyzlvymvrezh6vwd0l4kg06tg5rvssw0czg8873gz5sdkteqj', }); expect(response1.statusCode).toBe(200); const responseJson1 = response1.json(); @@ -608,7 +608,7 @@ describe('/inscriptions', () => { const response1 = await fastify.inject({ method: 'GET', - url: '/inscriptions?order_by=rarity&order=asc', + url: '/ordinals/v1/inscriptions?order_by=rarity&order=asc', }); expect(response1.statusCode).toBe(200); const responseJson1 = response1.json(); @@ -619,7 +619,7 @@ describe('/inscriptions', () => { const response2 = await fastify.inject({ method: 'GET', - url: '/inscriptions?order_by=rarity&order=desc', + url: '/ordinals/v1/inscriptions?order_by=rarity&order=desc', }); expect(response2.statusCode).toBe(200); const responseJson2 = response2.json(); @@ -711,7 +711,7 @@ describe('/inscriptions', () => { const response1 = await fastify.inject({ method: 'GET', - url: '/inscriptions?order_by=ordinal&order=asc', + url: '/ordinals/v1/inscriptions?order_by=ordinal&order=asc', }); expect(response1.statusCode).toBe(200); const responseJson1 = response1.json(); @@ -722,7 +722,7 @@ describe('/inscriptions', () => { const response2 = await fastify.inject({ method: 'GET', - url: '/inscriptions?order_by=ordinal&order=desc', + url: '/ordinals/v1/inscriptions?order_by=ordinal&order=desc', }); expect(response2.statusCode).toBe(200); const responseJson2 = response2.json(); @@ -814,7 +814,7 @@ describe('/inscriptions', () => { const response1 = await fastify.inject({ method: 'GET', - url: '/inscriptions?order_by=genesis_block_height&order=asc', + url: '/ordinals/v1/inscriptions?order_by=genesis_block_height&order=asc', }); expect(response1.statusCode).toBe(200); const responseJson1 = response1.json(); @@ -825,7 +825,7 @@ describe('/inscriptions', () => { const response2 = await fastify.inject({ method: 'GET', - url: '/inscriptions?order_by=genesis_block_height&order=desc', + url: '/ordinals/v1/inscriptions?order_by=genesis_block_height&order=desc', }); expect(response2.statusCode).toBe(200); const responseJson2 = response2.json(); @@ -838,7 +838,7 @@ describe('/inscriptions', () => { test('returns not found for invalid inscriptions', async () => { const response = await fastify.inject({ method: 'GET', - url: '/inscriptions/ff4503ab9048d6d0ff4e23def81b614d5270d341ce993992e93902ceb0d4ed79i0', + url: '/ordinals/v1/inscriptions/ff4503ab9048d6d0ff4e23def81b614d5270d341ce993992e93902ceb0d4ed79i0', }); expect(response.statusCode).toBe(404); }); diff --git a/tests/sats.test.ts b/tests/sats.test.ts index 6faf72be..5a06e59f 100644 --- a/tests/sats.test.ts +++ b/tests/sats.test.ts @@ -23,7 +23,7 @@ describe('/sats', () => { test('returns valid sat', async () => { const response = await fastify.inject({ method: 'GET', - url: '/sats/10080000000001', + url: '/ordinals/v1/sats/10080000000001', }); expect(response.statusCode).toBe(200); expect(response.json()).toStrictEqual({ @@ -69,7 +69,7 @@ describe('/sats', () => { }); const response = await fastify.inject({ method: 'GET', - url: '/sats/257418248345364', + url: '/ordinals/v1/sats/257418248345364', }); expect(response.statusCode).toBe(200); expect(response.json().inscription_id).toBe( @@ -80,13 +80,13 @@ describe('/sats', () => { test('returns not found on invalid sats', async () => { const response1 = await fastify.inject({ method: 'GET', - url: '/sats/2099999997690000', + url: '/ordinals/v1/sats/2099999997690000', }); expect(response1.statusCode).toBe(400); const response2 = await fastify.inject({ method: 'GET', - url: '/sats/-1', + url: '/ordinals/v1/sats/-1', }); expect(response2.statusCode).toBe(400); }); diff --git a/util/openapi-generator.ts b/util/openapi-generator.ts index e2355e5f..97f72bec 100644 --- a/util/openapi-generator.ts +++ b/util/openapi-generator.ts @@ -14,7 +14,7 @@ export const ApiGenerator: FastifyPluginAsync< TypeBoxTypeProvider > = async (fastify, options) => { await fastify.register(FastifySwagger, ApiSwaggerOptions); - await fastify.register(Api); + await fastify.register(Api, { prefix: '/ordinals/v1' }); if (!existsSync('./tmp')) { mkdirSync('./tmp'); }