import ApiClient from './ApiClient';
import { mapConnectorResponse } from './ConnectorClient';
import * as C from './types/Connection';
import * as P from './types/Paginated';
import urls from './urls';
export const mapConnectionResponse = (
c: C.ConnectionResponse,
): C.Connection => ({
name: c.name,
id: c.id,
connector: mapConnectorResponse(c.connector),
settings: c.settings,
});
export const mapCreateConnectionResponse = (
c: C.CreateConnectionResponse,
): C.CreateConnectionServer => ({
id: c.id,
name: c.name,
settings: c.settings,
});
export default class ConnectionClient {
async getConnections(
this: ApiClient,
params: C.GetConnectionsQuery = {},
): Promise
> {
const sortByMap = {
createdAt: 'created_at',
updatedAt: 'updated_at',
} as const;
const data = await this.requestProtected({
method: 'GET',
url: urls.connections({
page: params.page,
page_size: params.pageSize,
sort_by: params.sortBy && sortByMap[params.sortBy],
sort_direction: params.sortDirection,
}),
});
return {
total: data.total,
data: data.data.map(mapConnectionResponse),
};
}
async createConnection(
this: ApiClient,
params: C.CreateConnectionClient,
): Promise {
const data = await this.requestProtected<
C.CreateConnectionRequest,
C.CreateConnectionResponse
>({
method: 'POST',
url: urls.connections(),
body: {
name: params.name,
connector_id: params.connectorId,
settings: params.settings,
},
});
return mapCreateConnectionResponse(data);
}
async updateConnection(
this: ApiClient,
id: string,
params: C.UpdateConnection,
): Promise {
await this.requestProtected<
C.UpdateConnectionRequest,
C.UpdateConnectionResponse
>({
method: 'PATCH',
url: urls.connection(id),
body: {
name: params.name,
settings: params.settings,
},
});
}
async deleteConnection(this: ApiClient, id: string): Promise {
await this.requestProtected<
C.UpdateConnectionRequest,
C.CreateConnectionResponse
>({
method: 'DELETE',
url: urls.connection(id),
});
}
}