Skip to content
This repository has been archived by the owner on Aug 14, 2021. It is now read-only.

Commit

Permalink
feat: axios config (CORE-000) (#34)
Browse files Browse the repository at this point in the history
* feat: axios config

* chore: fix tests
  • Loading branch information
DecathectZero committed Feb 23, 2021
1 parent eafc4bf commit 2af076f
Show file tree
Hide file tree
Showing 3 changed files with 25 additions and 11 deletions.
8 changes: 4 additions & 4 deletions lib/Client/index.ts
Original file line number Diff line number Diff line change
@@ -1,12 +1,12 @@
import { State } from '@voiceflow/runtime';
import axios, { AxiosInstance } from 'axios';
import axios, { AxiosInstance, AxiosRequestConfig } from 'axios';
import _cloneDeep from 'lodash/cloneDeep';

import { RequestContext, ResponseContext } from '@/lib/types';

import { adaptResponseContext, extractAudioStep } from './adapters';

export type ClientConfig<S> = { variables?: Partial<S>; endpoint: string; versionID: string };
export type ClientConfig<S> = { variables?: Partial<S>; endpoint: string; versionID: string; axiosConfig?: AxiosRequestConfig };

export class Client<S extends Record<string, any> = Record<string, any>> {
private axios: AxiosInstance;
Expand All @@ -17,8 +17,8 @@ export class Client<S extends Record<string, any> = Record<string, any>> {

private initVariables: Partial<S> | undefined;

constructor({ variables, endpoint, versionID }: ClientConfig<S>) {
this.axios = axios.create({ baseURL: endpoint });
constructor({ variables, endpoint, versionID, axiosConfig }: ClientConfig<S>) {
this.axios = axios.create({ ...axiosConfig, baseURL: endpoint });

this.initVariables = variables;
this.versionID = versionID;
Expand Down
6 changes: 4 additions & 2 deletions lib/RuntimeClientFactory/index.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
import { State } from '@voiceflow/runtime';
import { AxiosRequestConfig } from 'axios';

import Client from '@/lib/Client';
import RuntimeClient from '@/lib/RuntimeClient';
Expand All @@ -12,6 +13,7 @@ export type FactoryConfig<S extends State['variables']> = {
endpoint?: string;
dataConfig?: DataConfig;
variables?: Partial<S>;
axiosConfig?: AxiosRequestConfig;
};

export class RuntimeClientFactory<S extends Record<string, any> = Record<string, any>> {
Expand All @@ -21,12 +23,12 @@ export class RuntimeClientFactory<S extends Record<string, any> = Record<string,

private defaultState: State;

constructor({ versionID, endpoint = DEFAULT_ENDPOINT, dataConfig, variables }: FactoryConfig<S>) {
constructor({ versionID, endpoint = DEFAULT_ENDPOINT, dataConfig, variables, axiosConfig }: FactoryConfig<S>) {
if (variables) {
validateVarMerge(variables);
}

this.client = new Client({ variables, endpoint, versionID });
this.client = new Client({ variables, endpoint, versionID, axiosConfig });
this.defaultState = { stack: [], storage: {}, variables: { ...variables } };

this.dataConfig = {
Expand Down
22 changes: 17 additions & 5 deletions tests/lib/RuntimeClientFactory/index.unit.ts
Original file line number Diff line number Diff line change
Expand Up @@ -32,19 +32,31 @@ describe('RuntimeClientFactory', () => {
it('constructor', () => {
const { client } = createRuntimeClientFactory();

expect(client.args).to.eql([[{ versionID: VERSION_ID, endpoint: DEFAULT_ENDPOINT, variables: undefined }]]);
expect(client.args).to.eql([[{ versionID: VERSION_ID, endpoint: DEFAULT_ENDPOINT, variables: undefined, axiosConfig: undefined }]]);
});

it('variables', () => {
const { client } = createRuntimeClientFactory({ variables: 'foo' as any });

expect(client.args).to.eql([[{ versionID: VERSION_ID, endpoint: DEFAULT_ENDPOINT, variables: 'foo' }]]);
expect(client.args).to.eql([[{ versionID: VERSION_ID, endpoint: DEFAULT_ENDPOINT, variables: 'foo', axiosConfig: undefined }]]);
});

it('optional', () => {
const { client } = createRuntimeClientFactory({ variables: 'foo' as any, versionID: 'bar', endpoint: 'x', dataConfig: 'y' as any });
it('axiosConfig', () => {
const { client } = createRuntimeClientFactory({ axiosConfig: 'foo' as any });

expect(client.args).to.eql([[{ versionID: VERSION_ID, endpoint: DEFAULT_ENDPOINT, variables: undefined, axiosConfig: 'foo' }]]);
});

expect(client.args).to.eql([[{ versionID: 'bar', endpoint: 'x', variables: 'foo' }]]);
it('optional', () => {
const { client } = createRuntimeClientFactory({
variables: 'foo' as any,
versionID: 'bar',
endpoint: 'x',
dataConfig: 'y' as any,
axiosConfig: 'bar' as any,
});

expect(client.args).to.eql([[{ versionID: 'bar', endpoint: 'x', variables: 'foo', axiosConfig: 'bar' }]]);
});

it('does not accept invalid variables', () => {
Expand Down

0 comments on commit 2af076f

Please sign in to comment.