From 563064413bcc2168f96cb87af4fd6ab51ed36e73 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rafael=20C=C3=A1rdenas?= Date: Tue, 18 Feb 2025 12:14:06 -0600 Subject: [PATCH] feat(api): add parent_refs field to inscription responses (#436) * fix: parent refs * parent refs array --- api/ordinals/src/api/schemas.ts | 26 +++++++------ api/ordinals/src/api/util/helpers.ts | 5 ++- api/ordinals/src/pg/pg-store.ts | 3 +- api/ordinals/src/pg/types.ts | 2 +- api/ordinals/tests/api/inscriptions.test.ts | 43 ++++++++++++++------- api/ordinals/tests/api/sats.test.ts | 6 ++- 6 files changed, 51 insertions(+), 34 deletions(-) diff --git a/api/ordinals/src/api/schemas.ts b/api/ordinals/src/api/schemas.ts index 76a9632..85249a2 100644 --- a/api/ordinals/src/api/schemas.ts +++ b/api/ordinals/src/api/schemas.ts @@ -316,19 +316,21 @@ export const InscriptionResponse = Type.Object( timestamp: Type.Integer({ examples: [1677733170000] }), curse_type: Nullable(Type.String({ examples: ['p2wsh'] })), recursive: Type.Boolean({ examples: [true] }), - recursion_refs: Nullable( - Type.Array( - Type.String({ - examples: [ - '1463d48e9248159084929294f64bda04487503d30ce7ab58365df1dc6fd58218i0', - '541076e29e1b63460412d3087b37130c9a14abd0beeb4e9b2b805d2072c84dedi0', - ], - }) - ) - ), - parent: Nullable( + recursion_refs: Type.Array( Type.String({ - examples: ['1463d48e9248159084929294f64bda04487503d30ce7ab58365df1dc6fd58218i0'], + examples: [ + '1463d48e9248159084929294f64bda04487503d30ce7ab58365df1dc6fd58218i0', + '541076e29e1b63460412d3087b37130c9a14abd0beeb4e9b2b805d2072c84dedi0', + ], + }) + ), + parent: Type.Null(), // Deprecated + parent_refs: Type.Array( + Type.String({ + examples: [ + '1463d48e9248159084929294f64bda04487503d30ce7ab58365df1dc6fd58218i0', + '541076e29e1b63460412d3087b37130c9a14abd0beeb4e9b2b805d2072c84dedi0', + ], }) ), delegate: Nullable( diff --git a/api/ordinals/src/api/util/helpers.ts b/api/ordinals/src/api/util/helpers.ts index 77e63fe..e10fae8 100644 --- a/api/ordinals/src/api/util/helpers.ts +++ b/api/ordinals/src/api/util/helpers.ts @@ -89,8 +89,9 @@ export function parseDbInscriptions( timestamp: parseTimestamp(i.timestamp), curse_type: i.curse_type, recursive: i.recursive, - recursion_refs: i.recursion_refs?.split(',') ?? null, - parent: i.parent, + recursion_refs: i.recursion_refs?.split(',') ?? [], + parent: null, + parent_refs: i.parent_refs?.split(',') ?? [], metadata: i.metadata ? JSON.parse(i.metadata) : null, delegate: i.delegate ?? null, meta_protocol: i.metaprotocol ?? null, diff --git a/api/ordinals/src/pg/pg-store.ts b/api/ordinals/src/pg/pg-store.ts index f2528c0..f6306f7 100644 --- a/api/ordinals/src/pg/pg-store.ts +++ b/api/ordinals/src/pg/pg-store.ts @@ -175,8 +175,7 @@ export class PgStore extends BasePgStore { SELECT ip.parent_inscription_id FROM inscription_parents AS ip WHERE ip.inscription_id = i.inscription_id - LIMIT 1 - ) AS parent, + ) AS parent_refs, i.metadata, s.rarity AS sat_rarity, s.coinbase_height AS sat_coinbase_height, diff --git a/api/ordinals/src/pg/types.ts b/api/ordinals/src/pg/types.ts index 5d0f8e5..5c98286 100644 --- a/api/ordinals/src/pg/types.ts +++ b/api/ordinals/src/pg/types.ts @@ -31,7 +31,7 @@ export type DbFullyLocatedInscriptionResult = { curse_type: string | null; recursive: boolean; recursion_refs: string | null; - parent: string | null; + parent_refs: string | null; metadata: string | null; input_index: number; pointer: number | null; diff --git a/api/ordinals/tests/api/inscriptions.test.ts b/api/ordinals/tests/api/inscriptions.test.ts index 4c4b24b..9b14746 100644 --- a/api/ordinals/tests/api/inscriptions.test.ts +++ b/api/ordinals/tests/api/inscriptions.test.ts @@ -94,8 +94,9 @@ describe('/inscriptions', () => { genesis_tx_id: '38c46a8bf7ec90bc7f6b797e7dc84baa97f4e5fd4286b92fe1b50176d03b18dc', curse_type: null, recursive: false, - recursion_refs: null, + recursion_refs: [], parent: null, + parent_refs: [], metadata: null, meta_protocol: null, delegate: null, @@ -200,6 +201,7 @@ describe('/inscriptions', () => { 'b4b27b9a15f928b95a8ce4b418946553b7b313a345254cd9b23d79489175fa5ai0', ], parent: null, + parent_refs: [], metadata: null, meta_protocol: null, delegate: null, @@ -299,9 +301,9 @@ describe('/inscriptions', () => { url: '/ordinals/v1/inscriptions/f351d86c6e6cae3c64e297e7463095732f216875bcc1f3c03f950a492bb25421i0', }); expect(response.statusCode).toBe(200); - expect(response.json().parent).toBe( - '9f4a9b73b0713c5da01c0a47f97c6c001af9028d6bdd9e264dfacbc4e6790201i0' - ); + expect(response.json().parent_refs).toStrictEqual([ + '9f4a9b73b0713c5da01c0a47f97c6c001af9028d6bdd9e264dfacbc4e6790201i0', + ]); }); test('shows inscription with metadata', async () => { @@ -404,8 +406,9 @@ describe('/inscriptions', () => { genesis_tx_id: '38c46a8bf7ec90bc7f6b797e7dc84baa97f4e5fd4286b92fe1b50176d03b18dc', curse_type: null, recursive: false, - recursion_refs: null, + recursion_refs: [], parent: null, + parent_refs: [], metadata: null, meta_protocol: null, delegate: null, @@ -487,8 +490,9 @@ describe('/inscriptions', () => { genesis_tx_id: '38c46a8bf7ec90bc7f6b797e7dc84baa97f4e5fd4286b92fe1b50176d03b18dc', curse_type: '88', recursive: false, - recursion_refs: null, + recursion_refs: [], parent: null, + parent_refs: [], metadata: null, meta_protocol: null, delegate: null, @@ -597,8 +601,9 @@ describe('/inscriptions', () => { genesis_tx_id: '38c46a8bf7ec90bc7f6b797e7dc84baa97f4e5fd4286b92fe1b50176d03b18dc', curse_type: null, recursive: false, - recursion_refs: null, + recursion_refs: [], parent: null, + parent_refs: [], metadata: null, meta_protocol: null, delegate: null, @@ -655,8 +660,9 @@ describe('/inscriptions', () => { genesis_tx_id: '38c46a8bf7ec90bc7f6b797e7dc84baa97f4e5fd4286b92fe1b50176d03b18dc', curse_type: null, recursive: false, - recursion_refs: null, + recursion_refs: [], parent: null, + parent_refs: [], metadata: null, meta_protocol: null, delegate: null, @@ -769,8 +775,9 @@ describe('/inscriptions', () => { genesis_tx_id: '38c46a8bf7ec90bc7f6b797e7dc84baa97f4e5fd4286b92fe1b50176d03b18dc', curse_type: null, recursive: false, - recursion_refs: null, + recursion_refs: [], parent: null, + parent_refs: [], metadata: null, meta_protocol: null, delegate: null, @@ -863,8 +870,9 @@ describe('/inscriptions', () => { genesis_tx_id: '38c46a8bf7ec90bc7f6b797e7dc84baa97f4e5fd4286b92fe1b50176d03b18dc', curse_type: '{"tag":66}', recursive: false, - recursion_refs: null, + recursion_refs: [], parent: null, + parent_refs: [], metadata: null, meta_protocol: null, delegate: null, @@ -921,8 +929,9 @@ describe('/inscriptions', () => { genesis_tx_id: '38c46a8bf7ec90bc7f6b797e7dc84baa97f4e5fd4286b92fe1b50176d03b18dc', curse_type: '{"tag":66}', recursive: false, - recursion_refs: null, + recursion_refs: [], parent: null, + parent_refs: [], metadata: null, meta_protocol: null, delegate: null, @@ -1666,8 +1675,9 @@ describe('/inscriptions', () => { genesis_tx_id: '38c46a8bf7ec90bc7f6b797e7dc84baa97f4e5fd4286b92fe1b50176d03b18dc', curse_type: null, recursive: false, - recursion_refs: null, + recursion_refs: [], parent: null, + parent_refs: [], metadata: null, meta_protocol: null, delegate: null, @@ -1697,8 +1707,9 @@ describe('/inscriptions', () => { genesis_tx_id: '9f4a9b73b0713c5da01c0a47f97c6c001af9028d6bdd9e264dfacbc4e6790201', curse_type: null, recursive: false, - recursion_refs: null, + recursion_refs: [], parent: null, + parent_refs: [], metadata: null, meta_protocol: null, delegate: null, @@ -1808,8 +1819,9 @@ describe('/inscriptions', () => { genesis_tx_id: '9f4a9b73b0713c5da01c0a47f97c6c001af9028d6bdd9e264dfacbc4e6790201', curse_type: null, recursive: false, - recursion_refs: null, + recursion_refs: [], parent: null, + parent_refs: [], metadata: null, meta_protocol: null, delegate: null, @@ -1849,8 +1861,9 @@ describe('/inscriptions', () => { genesis_tx_id: '38c46a8bf7ec90bc7f6b797e7dc84baa97f4e5fd4286b92fe1b50176d03b18dc', curse_type: null, recursive: false, - recursion_refs: null, + recursion_refs: [], parent: null, + parent_refs: [], metadata: null, meta_protocol: null, delegate: null, diff --git a/api/ordinals/tests/api/sats.test.ts b/api/ordinals/tests/api/sats.test.ts index ee96995..b36a14e 100644 --- a/api/ordinals/tests/api/sats.test.ts +++ b/api/ordinals/tests/api/sats.test.ts @@ -217,8 +217,9 @@ describe('/sats', () => { value: '10000', curse_type: 'p2wsh', recursive: false, - recursion_refs: null, + recursion_refs: [], parent: null, + parent_refs: [], metadata: null, meta_protocol: null, delegate: null, @@ -249,8 +250,9 @@ describe('/sats', () => { value: '10000', curse_type: 'p2wsh', recursive: false, - recursion_refs: null, + recursion_refs: [], parent: null, + parent_refs: [], metadata: null, meta_protocol: null, delegate: null,