diff --git a/packages/sdk/src/base/transport/axios-transport.ts b/packages/sdk/src/base/transport/axios-transport.ts index ca06942597..06d11397a8 100644 --- a/packages/sdk/src/base/transport/axios-transport.ts +++ b/packages/sdk/src/base/transport/axios-transport.ts @@ -35,63 +35,33 @@ export class AxiosTransport implements ITransport { } private async request( - method: 'get', + method: TransportMethods, path: string, + data?: any, options?: TransportOptions - ): Promise>; - private async request( - method: 'delete', - path: string, - options?: TransportOptions - ): Promise>; - private async request( - method: 'head', - path: string, - options?: TransportOptions - ): Promise>; - private async request( - method: 'options', - path: string, - options?: TransportOptions - ): Promise>; - private async request( - method: 'post', - path: string, - data?: D, - options?: TransportOptions - ): Promise>; - private async request( - method: 'put', - path: string, - data?: D, - options?: TransportOptions - ): Promise>; - private async request( - method: 'patch', - path: string, - data?: D, - options?: TransportOptions - ): Promise>; - private async request( - method: M, - path: string, - ...args: any ): Promise> { try { - const make = this.axios[method] as AxiosInstance[M]; - const response = await make>(path, ...args); - const { data, meta, errors } = response.data; + options = options || {}; + const response = await this.axios.request({ + method, + url: path, + data: data, + params: options.params, + headers: options.headers, + }); + + const responseData = response.data; const content = { raw: response.data as any, status: response.status, statusText: response.statusText, headers: response.headers, - data, - meta, - errors, + data: responseData.data, + meta: responseData.meta, + errors: responseData.errors, }; - if (errors) { + if (responseData.errors) { throw new TransportError(null, content); } @@ -114,19 +84,19 @@ export class AxiosTransport implements ITransport { } async get(path: string, options?: TransportOptions): Promise> { - return await this.request('get', path, options); - } - - async delete(path: string, options?: TransportOptions): Promise> { - return await this.request('delete', path, options); + return await this.request('get', path, undefined, options); } async head(path: string, options?: TransportOptions): Promise> { - return await this.request('head', path, options); + return await this.request('head', path, undefined, options); } async options(path: string, options?: TransportOptions): Promise> { - return await this.request('options', path, options); + return await this.request('options', path, undefined, options); + } + + async delete(path: string, data?: D, options?: TransportOptions): Promise> { + return await this.request('delete', path, data, options); } async put(path: string, data?: D, options?: TransportOptions): Promise> { diff --git a/packages/sdk/src/transport.ts b/packages/sdk/src/transport.ts index b89fd22352..ee2a919f0f 100644 --- a/packages/sdk/src/transport.ts +++ b/packages/sdk/src/transport.ts @@ -21,6 +21,7 @@ export type TransportMethods = 'get' | 'delete' | 'head' | 'options' | 'post' | export type TransportOptions = { params?: any; + headers?: any; }; export interface ITransport { diff --git a/packages/sdk/tests/base/transport/axios.test.ts b/packages/sdk/tests/base/transport/axios.test.ts index 5d368a339c..9f58cf5afb 100644 --- a/packages/sdk/tests/base/transport/axios.test.ts +++ b/packages/sdk/tests/base/transport/axios.test.ts @@ -115,7 +115,7 @@ describe('axios transport', function () { it('non axios errors are set in parent', async function () { const storage = new MemoryStorage(); const transport = new AxiosTransport(URL, storage); - const mock = jest.spyOn(transport.axios, 'get'); + const mock = jest.spyOn(transport.axios, 'request'); mock.mockImplementation(() => { throw new Error('this is not an axios error'); }); diff --git a/packages/sdk/tests/items.test.ts b/packages/sdk/tests/items.test.ts index fef68b167f..b6a2c2f6a0 100644 --- a/packages/sdk/tests/items.test.ts +++ b/packages/sdk/tests/items.test.ts @@ -281,7 +281,7 @@ describe('items', function () { }); test(`delete many item`, async (url, nock) => { - const scope = nock().delete('/items/posts').reply(204); + const scope = nock().delete('/items/posts', [1, 2]).reply(204); const sdk = new Directus(url); await sdk.items('posts').deleteMany([1, 2]);