From 0871afc79bf92699d8763a2b0df1e8ea3c095152 Mon Sep 17 00:00:00 2001 From: Tyler Hillery Date: Thu, 20 Nov 2025 17:55:49 -0600 Subject: [PATCH 1/2] fix: update prefix to include version before catalog name --- src/catalog/IcebergRestCatalog.ts | 5 ++++- src/catalog/namespaces.ts | 8 ++++---- src/catalog/tables.ts | 10 +++++----- 3 files changed, 13 insertions(+), 10 deletions(-) diff --git a/src/catalog/IcebergRestCatalog.ts b/src/catalog/IcebergRestCatalog.ts index 8536fb5..5ac4c95 100644 --- a/src/catalog/IcebergRestCatalog.ts +++ b/src/catalog/IcebergRestCatalog.ts @@ -80,7 +80,10 @@ export class IcebergRestCatalog { * @param options - Configuration options for the catalog client */ constructor(options: IcebergRestCatalogOptions) { - const prefix = options.catalogName ? `/${options.catalogName}` : '' + let prefix = 'v1' + if (options.catalogName) { + prefix += `/${options.catalogName}` + } this.client = createFetchClient({ baseUrl: options.baseUrl, diff --git a/src/catalog/namespaces.ts b/src/catalog/namespaces.ts index 5f1a08a..0ad07dc 100644 --- a/src/catalog/namespaces.ts +++ b/src/catalog/namespaces.ts @@ -23,7 +23,7 @@ export class NamespaceOperations { const response = await this.client.request({ method: 'GET', - path: `${this.prefix}/v1/namespaces`, + path: `${this.prefix}/namespaces`, query, }) @@ -41,7 +41,7 @@ export class NamespaceOperations { const response = await this.client.request({ method: 'POST', - path: `${this.prefix}/v1/namespaces`, + path: `${this.prefix}/namespaces`, body: request, }) @@ -51,14 +51,14 @@ export class NamespaceOperations { async dropNamespace(id: NamespaceIdentifier): Promise { await this.client.request({ method: 'DELETE', - path: `${this.prefix}/v1/namespaces/${namespaceToPath(id.namespace)}`, + path: `${this.prefix}/namespaces/${namespaceToPath(id.namespace)}`, }) } async loadNamespaceMetadata(id: NamespaceIdentifier): Promise { const response = await this.client.request({ method: 'GET', - path: `${this.prefix}/v1/namespaces/${namespaceToPath(id.namespace)}`, + path: `${this.prefix}/namespaces/${namespaceToPath(id.namespace)}`, }) return { diff --git a/src/catalog/tables.ts b/src/catalog/tables.ts index 6144a51..8977de4 100644 --- a/src/catalog/tables.ts +++ b/src/catalog/tables.ts @@ -23,7 +23,7 @@ export class TableOperations { async listTables(namespace: NamespaceIdentifier): Promise { const response = await this.client.request({ method: 'GET', - path: `${this.prefix}/v1/namespaces/${namespaceToPath(namespace.namespace)}/tables`, + path: `${this.prefix}/namespaces/${namespaceToPath(namespace.namespace)}/tables`, }) return response.data.identifiers @@ -40,7 +40,7 @@ export class TableOperations { const response = await this.client.request({ method: 'POST', - path: `${this.prefix}/v1/namespaces/${namespaceToPath(namespace.namespace)}/tables`, + path: `${this.prefix}/namespaces/${namespaceToPath(namespace.namespace)}/tables`, body: request, headers, }) @@ -51,7 +51,7 @@ export class TableOperations { async updateTable(id: TableIdentifier, request: UpdateTableRequest): Promise { const response = await this.client.request({ method: 'POST', - path: `${this.prefix}/v1/namespaces/${namespaceToPath(id.namespace)}/tables/${id.name}`, + path: `${this.prefix}/namespaces/${namespaceToPath(id.namespace)}/tables/${id.name}`, body: request, }) @@ -61,7 +61,7 @@ export class TableOperations { async dropTable(id: TableIdentifier): Promise { await this.client.request({ method: 'DELETE', - path: `${this.prefix}/v1/namespaces/${namespaceToPath(id.namespace)}/tables/${id.name}`, + path: `${this.prefix}/namespaces/${namespaceToPath(id.namespace)}/tables/${id.name}`, }) } @@ -73,7 +73,7 @@ export class TableOperations { const response = await this.client.request({ method: 'GET', - path: `${this.prefix}/v1/namespaces/${namespaceToPath(id.namespace)}/tables/${id.name}`, + path: `${this.prefix}/namespaces/${namespaceToPath(id.namespace)}/tables/${id.name}`, headers, }) From 6f2d34ccb5a0178abab14c05ce6488b26db18efe Mon Sep 17 00:00:00 2001 From: Tyler Hillery Date: Thu, 20 Nov 2025 18:43:34 -0600 Subject: [PATCH 2/2] fix: update tests to pass in prefix to table and namesapce ops --- test/catalog/namespaces.test.ts | 24 ++++++++++++------------ test/catalog/tables.test.ts | 32 ++++++++++++++++---------------- 2 files changed, 28 insertions(+), 28 deletions(-) diff --git a/test/catalog/namespaces.test.ts b/test/catalog/namespaces.test.ts index 1ddd8d9..9c8eeef 100644 --- a/test/catalog/namespaces.test.ts +++ b/test/catalog/namespaces.test.ts @@ -18,7 +18,7 @@ describe('NamespaceOperations', () => { }, }) - const ops = new NamespaceOperations(mockClient) + const ops = new NamespaceOperations(mockClient, "/v1") const result = await ops.listNamespaces() expect(result).toEqual([ @@ -46,7 +46,7 @@ describe('NamespaceOperations', () => { }, }) - const ops = new NamespaceOperations(mockClient) + const ops = new NamespaceOperations(mockClient, "/v1") const result = await ops.listNamespaces({ namespace: ['analytics'] }) expect(result).toEqual([ @@ -70,7 +70,7 @@ describe('NamespaceOperations', () => { }, }) - const ops = new NamespaceOperations(mockClient) + const ops = new NamespaceOperations(mockClient, "/v1") await ops.listNamespaces({ namespace: ['a', 'b'] }) expect(mockClient.request).toHaveBeenCalledWith({ @@ -88,12 +88,12 @@ describe('NamespaceOperations', () => { data: { namespaces: [] }, }) - const ops = new NamespaceOperations(mockClient, '/catalog1') + const ops = new NamespaceOperations(mockClient, '/v1/catalog1') await ops.listNamespaces() expect(mockClient.request).toHaveBeenCalledWith({ method: 'GET', - path: '/catalog1/v1/namespaces', + path: '/v1/catalog1/namespaces', query: undefined, }) }) @@ -110,7 +110,7 @@ describe('NamespaceOperations', () => { }, }) - const ops = new NamespaceOperations(mockClient) + const ops = new NamespaceOperations(mockClient, "/v1") const result = await ops.createNamespace({ namespace: ['analytics'] }) expect(result).toEqual({ namespace: ['analytics'] }) @@ -135,7 +135,7 @@ describe('NamespaceOperations', () => { }, }) - const ops = new NamespaceOperations(mockClient) + const ops = new NamespaceOperations(mockClient, "/v1") const result = await ops.createNamespace( { namespace: ['analytics'] }, { properties: { owner: 'team' } } @@ -163,7 +163,7 @@ describe('NamespaceOperations', () => { data: { namespace: ['analytics', 'prod'] }, }) - const ops = new NamespaceOperations(mockClient) + const ops = new NamespaceOperations(mockClient, "/v1") await ops.createNamespace({ namespace: ['analytics', 'prod'] }) expect(mockClient.request).toHaveBeenCalledWith({ @@ -186,7 +186,7 @@ describe('NamespaceOperations', () => { data: undefined, }) - const ops = new NamespaceOperations(mockClient) + const ops = new NamespaceOperations(mockClient, "/v1") await ops.dropNamespace({ namespace: ['analytics'] }) expect(mockClient.request).toHaveBeenCalledWith({ @@ -203,7 +203,7 @@ describe('NamespaceOperations', () => { data: undefined, }) - const ops = new NamespaceOperations(mockClient) + const ops = new NamespaceOperations(mockClient, "/v1") await ops.dropNamespace({ namespace: ['analytics', 'prod'] }) expect(mockClient.request).toHaveBeenCalledWith({ @@ -228,7 +228,7 @@ describe('NamespaceOperations', () => { }, }) - const ops = new NamespaceOperations(mockClient) + const ops = new NamespaceOperations(mockClient, "/v1") const result = await ops.loadNamespaceMetadata({ namespace: ['analytics'] }) expect(result).toEqual({ @@ -254,7 +254,7 @@ describe('NamespaceOperations', () => { }, }) - const ops = new NamespaceOperations(mockClient) + const ops = new NamespaceOperations(mockClient, "/v1") await ops.loadNamespaceMetadata({ namespace: ['analytics', 'prod'] }) expect(mockClient.request).toHaveBeenCalledWith({ diff --git a/test/catalog/tables.test.ts b/test/catalog/tables.test.ts index 2448f01..94b5181 100644 --- a/test/catalog/tables.test.ts +++ b/test/catalog/tables.test.ts @@ -51,7 +51,7 @@ describe('TableOperations', () => { }, }) - const ops = new TableOperations(mockClient) + const ops = new TableOperations(mockClient, '/v1') const result = await ops.listTables({ namespace: ['analytics'] }) expect(result).toEqual([ @@ -72,7 +72,7 @@ describe('TableOperations', () => { data: { identifiers: [] }, }) - const ops = new TableOperations(mockClient) + const ops = new TableOperations(mockClient, '/v1') await ops.listTables({ namespace: ['analytics', 'prod'] }) expect(mockClient.request).toHaveBeenCalledWith({ @@ -89,12 +89,12 @@ describe('TableOperations', () => { data: { identifiers: [] }, }) - const ops = new TableOperations(mockClient, '/catalog1') + const ops = new TableOperations(mockClient, '/v1/catalog1') await ops.listTables({ namespace: ['analytics'] }) expect(mockClient.request).toHaveBeenCalledWith({ method: 'GET', - path: '/catalog1/v1/namespaces/analytics/tables', + path: '/v1/catalog1/namespaces/analytics/tables', }) }) }) @@ -110,7 +110,7 @@ describe('TableOperations', () => { }, }) - const ops = new TableOperations(mockClient) + const ops = new TableOperations(mockClient, '/v1') const result = await ops.createTable( { namespace: ['analytics'] }, { @@ -150,7 +150,7 @@ describe('TableOperations', () => { data: { metadata: mockTableMetadata }, }) - const ops = new TableOperations(mockClient) + const ops = new TableOperations(mockClient, '/v1') await ops.createTable( { namespace: ['analytics'] }, { @@ -202,7 +202,7 @@ describe('TableOperations', () => { data: { metadata: mockTableMetadata }, }) - const ops = new TableOperations(mockClient) + const ops = new TableOperations(mockClient, '/v1') await ops.createTable( { namespace: ['analytics'] }, { @@ -244,7 +244,7 @@ describe('TableOperations', () => { }, }) - const ops = new TableOperations(mockClient) + const ops = new TableOperations(mockClient, '/v1') const result = await ops.loadTable({ namespace: ['analytics'], name: 'events' }) expect(result).toEqual(mockTableMetadata) @@ -263,7 +263,7 @@ describe('TableOperations', () => { data: { metadata: mockTableMetadata }, }) - const ops = new TableOperations(mockClient) + const ops = new TableOperations(mockClient, '/v1') await ops.loadTable({ namespace: ['analytics', 'prod'], name: 'events' }) expect(mockClient.request).toHaveBeenCalledWith({ @@ -283,7 +283,7 @@ describe('TableOperations', () => { data: { metadata: mockTableMetadata }, }) - const ops = new TableOperations(mockClient) + const ops = new TableOperations(mockClient, '/v1') const result = await ops.updateTable( { namespace: ['analytics'], name: 'events' }, { @@ -309,7 +309,7 @@ describe('TableOperations', () => { data: { metadata: mockTableMetadata }, }) - const ops = new TableOperations(mockClient) + const ops = new TableOperations(mockClient, '/v1') await ops.updateTable( { namespace: ['analytics'], name: 'events' }, { @@ -346,7 +346,7 @@ describe('TableOperations', () => { data: undefined, }) - const ops = new TableOperations(mockClient) + const ops = new TableOperations(mockClient, '/v1') await ops.dropTable({ namespace: ['analytics'], name: 'events' }) expect(mockClient.request).toHaveBeenCalledWith({ @@ -363,7 +363,7 @@ describe('TableOperations', () => { data: undefined, }) - const ops = new TableOperations(mockClient) + const ops = new TableOperations(mockClient, '/v1') await ops.dropTable({ namespace: ['analytics', 'prod'], name: 'events' }) expect(mockClient.request).toHaveBeenCalledWith({ @@ -382,7 +382,7 @@ describe('TableOperations', () => { data: { metadata: mockTableMetadata }, }) - const ops = new TableOperations(mockClient, '', 'vended-credentials') + const ops = new TableOperations(mockClient, '/v1', 'vended-credentials') await ops.createTable( { namespace: ['analytics'] }, { @@ -413,7 +413,7 @@ describe('TableOperations', () => { data: { metadata: mockTableMetadata }, }) - const ops = new TableOperations(mockClient, '', 'vended-credentials,remote-signing') + const ops = new TableOperations(mockClient, '/v1', 'vended-credentials,remote-signing') await ops.loadTable({ namespace: ['analytics'], name: 'events' }) expect(mockClient.request).toHaveBeenCalledWith({ @@ -433,7 +433,7 @@ describe('TableOperations', () => { data: { metadata: mockTableMetadata }, }) - const ops = new TableOperations(mockClient) + const ops = new TableOperations(mockClient, '/v1') await ops.createTable( { namespace: ['analytics'] }, {