Repository navigation
Expand file tree
/
Copy pathgetConnections.ts
More file actions
63 lines (54 loc) · 2.48 KB
/
Copy pathgetConnections.ts
File metadata and controls
63 lines (54 loc) · 2.48 KB
Edit and raw actions
OlderNewer
1
import * as z from 'zod';
2
3
import { connectionService, connectionTagsSchema } from '@nangohq/shared';
4
import { metrics, zodErrorToHTTP } from '@nangohq/utils';
5
6
import { connectionSimpleToPublicApi } from '../../formatters/connection.js';
7
import { asyncWrapperWithEnvironment } from '../../utils/asyncWrapper.js';
8
import { bodySchema } from '../connect/postSessions.js';
9
10
import type { GetPublicConnections } from '@nangohq/types';
11
12
const validationQuery = z
13
.object({
14
connectionId: z.string().min(1).max(255).optional(),
15
search: z.string().min(1).max(255).optional(),
16
endUserId: bodySchema.shape.end_user.shape.id.optional(),
17
integrationId: z.string().min(1).optional(),
18
endUserOrganizationId: bodySchema.shape.end_user.shape.id.optional(),
19
tags: connectionTagsSchema.optional(),
20
limit: z.coerce.number().min(1).max(2000).optional(),
21
page: z.coerce.number().min(0).optional()
22
})
23
.strict();
24
25
export const getPublicConnections = asyncWrapperWithEnvironment<GetPublicConnections>(async (req, res) => {
26
const queryParamValues = validationQuery.safeParse(req.query);
27
if (!queryParamValues.success) {
28
res.status(400).send({
29
error: { code: 'invalid_query_params', errors: zodErrorToHTTP(queryParamValues.error) }
30
});
31
return;
32
}
33
34
const { account, environment } = res.locals;
35
const queryParam = queryParamValues.data;
36
37
if (queryParam.search) {
38
metrics.increment(metrics.Types.CONNECTIONS_SEARCH_PARAM_USED, 1, { accountId: account.id });
39
}
40
41
const connections = await connectionService.listConnections({
42
environmentId: environment.id,
43
connectionId: queryParam.connectionId,
44
search: queryParam.search,
45
endUserId: queryParam.endUserId,
46
integrationIds: queryParam.integrationId ? queryParam.integrationId.split(',').map((id) => id.trim()) : undefined,
47
endUserOrganizationId: queryParam.endUserOrganizationId,
48
tags: queryParam.tags,
49
page: queryParam.page,
50
limit: queryParam.limit || 10_000 // 10_000 to avoid breaking changes. TODO: set to more reasonable default like 1000 in the future
51
});
52
53
res.status(200).send({
54
connections: connections.map((data) => {
55
return connectionSimpleToPublicApi({
56
data: data.connection,
57
activeLog: data.active_logs,
58
provider: data.provider,
59
endUser: data.end_user
60
});
61
})
62
});
63
});

