diff --git a/.lycheeignore b/.lycheeignore index b69e5c08..7d766c79 100644 --- a/.lycheeignore +++ b/.lycheeignore @@ -5,5 +5,8 @@ getbaseurl # example domains used in unit tests www.example.com +# npmjs.com blocks automated link checkers with 403 +https://www.npmjs.com + # email used in unit tests test@rev.com diff --git a/package-lock.json b/package-lock.json index 5e59e35c..bed73174 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,11 +1,12 @@ { "name": "revai-node-sdk", - "version": "3.8.0", + "version": "3.9.0", "lockfileVersion": 2, "requires": true, "packages": { "": { - "version": "3.8.0", + "name": "revai-node-sdk", + "version": "3.9.0", "license": "MIT", "dependencies": { "axios": "^0.21.1", diff --git a/package.json b/package.json index 3f3e544c..748e47e5 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "revai-node-sdk", - "version": "3.8.6", + "version": "3.9.0", "description": "Rev AI makes speech applications easy to build!", "main": "src/index.js", "scripts": { diff --git a/src/api-client.ts b/src/api-client.ts index ff3a4c84..3f08cea1 100644 --- a/src/api-client.ts +++ b/src/api-client.ts @@ -118,8 +118,15 @@ export class RevAiApiClient { * @deprecated Use submitJob and provide a source config to the job options */ async submitJobUrl(mediaUrl: string, options?: RevAiJobOptions): Promise { + if (options?.source_config) { + throw new Error( + 'source_config is not compatible with submitJobUrl.' + + ' Remove source_config from options or use submitJob instead.' + ); + } + options = this.filterNullOptions({ - media_url: mediaUrl, + source_config: { url: mediaUrl }, ...(options || {}) }); diff --git a/test/integration/test/job-v3.test.js b/test/integration/test/job-v3.test.js new file mode 100644 index 00000000..a30ead2e --- /dev/null +++ b/test/integration/test/job-v3.test.js @@ -0,0 +1,14 @@ +const clientHelper = require('../src/client-helper'); + +test('Can submit url with machine_v3 transcriber', async () => { + const client = clientHelper.getAsyncClient(); + const options = { + metadata: 'Node sdk v3 submit url test', + transcriber: 'machine_v3' + }; + + const job = await client.submitJobUrl('https://www.rev.ai/FTC_Sample_1.mp3', options); + + expect(job.status).toBe('in_progress'); + expect(job.id).not.toBeNull(); +}, 30000); diff --git a/test/unit/api-client/api-client.submit.spec.ts b/test/unit/api-client/api-client.submit.spec.ts index 8736a5e1..4fcf46f0 100644 --- a/test/unit/api-client/api-client.submit.spec.ts +++ b/test/unit/api-client/api-client.submit.spec.ts @@ -47,7 +47,7 @@ describe('api-client job submission', () => { const job = await sut.submitJobUrl(mediaUrl); expect(mockMakeApiRequest).toBeCalledWith('post', '/jobs', - { 'Content-Type': 'application/json' }, 'json', { media_url: mediaUrl }); + { 'Content-Type': 'application/json' }, 'json', { source_config: { url: mediaUrl } }); expect(mockMakeApiRequest).toBeCalledTimes(1); expect(job).toEqual(jobDetails); }); @@ -56,7 +56,7 @@ describe('api-client job submission', () => { const job = await sut.submitJobUrl(mediaUrl, null); expect(mockMakeApiRequest).toBeCalledWith('post', '/jobs', - { 'Content-Type': 'application/json' }, 'json', { media_url: mediaUrl }); + { 'Content-Type': 'application/json' }, 'json', { source_config: { url: mediaUrl } }); expect(mockMakeApiRequest).toBeCalledTimes(1); expect(job).toEqual(jobDetails); }); @@ -65,7 +65,7 @@ describe('api-client job submission', () => { const job = await sut.submitJobUrl(mediaUrl, {}); expect(mockMakeApiRequest).toBeCalledWith('post', '/jobs', - { 'Content-Type': 'application/json' }, 'json', { media_url: mediaUrl }); + { 'Content-Type': 'application/json' }, 'json', { source_config: { url: mediaUrl } }); expect(mockMakeApiRequest).toBeCalledTimes(1); expect(job).toEqual(jobDetails); }); @@ -76,7 +76,7 @@ describe('api-client job submission', () => { const job = await sut.submitJobUrl(mediaUrl, options); expect(mockMakeApiRequest).toBeCalledWith('post', '/jobs', - { 'Content-Type': 'application/json' }, 'json', { media_url: mediaUrl }); + { 'Content-Type': 'application/json' }, 'json', { source_config: { url: mediaUrl } }); expect(mockMakeApiRequest).toBeCalledTimes(1); expect(job).toEqual(jobDetails); }); @@ -91,7 +91,6 @@ describe('api-client job submission', () => { speaker_channels_count: 1, speakers_count: 123, filter_profanity: true, - media_url: mediaUrl, remove_disfluencies: true, delete_after_seconds: 0, language: 'en', @@ -102,7 +101,8 @@ describe('api-client job submission', () => { const job = await sut.submitJobUrl(mediaUrl, options); expect(mockMakeApiRequest).toBeCalledWith('post', '/jobs', - { 'Content-Type': 'application/json' }, 'json', options); + { 'Content-Type': 'application/json' }, 'json', + { ...options, source_config: { url: mediaUrl } }); expect(mockMakeApiRequest).toBeCalledTimes(1); expect(job).toEqual(jobDetails); }); @@ -115,7 +115,7 @@ describe('api-client job submission', () => { const job = await sut.submitJobUrl(mediaUrl, options); expect(mockMakeApiRequest).toBeCalledWith('post', '/jobs', - { 'Content-Type': 'application/json' }, 'json', { ...options, media_url: mediaUrl }); + { 'Content-Type': 'application/json' }, 'json', { ...options, source_config: { url: mediaUrl } }); expect(mockMakeApiRequest).toBeCalledTimes(1); expect(job).toEqual(jobDetails); }); @@ -144,10 +144,32 @@ describe('api-client job submission', () => { const job = await sut.submitJobUrl(mediaUrl, options); expect(mockMakeApiRequest).toBeCalledWith('post', '/jobs', - { 'Content-Type': 'application/json' }, 'json', { ...options, media_url: mediaUrl }); + { 'Content-Type': 'application/json' }, 'json', { ...options, source_config: { url: mediaUrl } }); expect(mockMakeApiRequest).toBeCalledTimes(1); expect(job).toEqual(jobDetails); }); + + it('submit job with media url sends source_config instead of media_url', async () => { + const job = await sut.submitJobUrl(mediaUrl); + + expect(mockMakeApiRequest).toBeCalledWith('post', '/jobs', + { 'Content-Type': 'application/json' }, 'json', { source_config: { url: mediaUrl } }); + expect(mockMakeApiRequest).toBeCalledTimes(1); + expect(job).toEqual(jobDetails); + }); + + it('submit job with media url throws error when options contain source_config', async () => { + const options: RevAiJobOptions = { + source_config: { url: mediaUrl } + }; + + await expect(sut.submitJobUrl(mediaUrl, options)) + .rejects.toThrow( + 'source_config is not compatible with submitJobUrl.' + + ' Remove source_config from options' + ); + expect(mockMakeApiRequest).not.toBeCalled(); + }); }); describe('submitJob', () => {