@opens/gateways 1.0.0 → 1.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts","../src/customer-service/index.ts","../src/@common/client.ts"],"sourcesContent":["import { createClient, SDKGatewaysInterface, GatewayClientParams } from './@common/client';\nimport { SERVICE_GATEWAYS } from './@common/enums';\nclass SDK {\n client: SDKGatewaysInterface | null = null;\n\n configure(params: GatewayClientParams) {\n this.client = createClient(params);\n }\n}\nconst sdk = new SDK();\n\nexport const configure = (params: GatewayClientParams) => {\n sdk.configure(params);\n};\n\nexport const gateway = (service: SERVICE_GATEWAYS) => {\n if (!sdk.client)\n throw new Error(\n 'SDK not configured. Please call configure() with the appropriate parameters before using the SDK.',\n );\n\n switch (service) {\n case SERVICE_GATEWAYS.CUSTOMER_SERVICE:\n return sdk.client.customerService;\n default:\n throw new Error(`Unknown service gateway: ${service}`);\n }\n};\n","import type { AxiosInstance } from 'axios';\nimport type { CompanyResponse } from './contracts/company';\n\nexport class CustomerServiceGateway {\n constructor(\n private readonly httpClient: AxiosInstance,\n private readonly baseUrl: string,\n ) {}\n\n async getCompanyById(companyId: string): Promise<CompanyResponse> {\n const { data } = await this.httpClient.get<CompanyResponse>(`${this.baseUrl}/companies/search/${companyId}`);\n return data;\n }\n}\n\nexport type { CompanyResponse } from './contracts/company';\n","import { CustomerServiceGateway } from '../customer-service';\nimport { AxiosInstance } from 'axios';\n\nexport interface SDKGatewaysInterface {\n customerService: CustomerServiceGateway;\n}\n\nclass SDKGateways {\n customerService: CustomerServiceGateway;\n constructor(customerService: CustomerServiceGateway) {\n this.customerService = customerService;\n }\n}\n\nexport interface GatewayClientParams {\n axiosClient: AxiosInstance;\n apiToken: string;\n services: {\n customerService: {\n baseUrl: string;\n };\n };\n}\n\nexport function createClient(params: GatewayClientParams) {\n const httpClient = params.axiosClient;\n const customerService = new CustomerServiceGateway(httpClient, params.services.customerService.baseUrl);\n return new SDKGateways(customerService);\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACGO,IAAM,yBAAN,MAA6B;AAAA,EAClC,YACmB,YACA,SACjB;AAFiB;AACA;AAAA,EAChB;AAAA,EAFgB;AAAA,EACA;AAAA,EAGnB,MAAM,eAAe,WAA6C;AAChE,UAAM,EAAE,KAAK,IAAI,MAAM,KAAK,WAAW,IAAqB,GAAG,KAAK,OAAO,qBAAqB,SAAS,EAAE;AAC3G,WAAO;AAAA,EACT;AACF;;;ACNA,IAAM,cAAN,MAAkB;AAAA,EAChB;AAAA,EACA,YAAY,iBAAyC;AACnD,SAAK,kBAAkB;AAAA,EACzB;AACF;AAYO,SAAS,aAAa,QAA6B;AACxD,QAAM,aAAa,OAAO;AAC1B,QAAM,kBAAkB,IAAI,uBAAuB,YAAY,OAAO,SAAS,gBAAgB,OAAO;AACtG,SAAO,IAAI,YAAY,eAAe;AACxC;;;AF1BA,IAAM,MAAN,MAAU;AAAA,EACR,SAAsC;AAAA,EAEtC,UAAU,QAA6B;AACrC,SAAK,SAAS,aAAa,MAAM;AAAA,EACnC;AACF;AACA,IAAM,MAAM,IAAI,IAAI;AAEb,IAAM,YAAY,CAAC,WAAgC;AACxD,MAAI,UAAU,MAAM;AACtB;AAEO,IAAM,UAAU,CAAC,YAA8B;AACpD,MAAI,CAAC,IAAI;AACP,UAAM,IAAI;AAAA,MACR;AAAA,IACF;AAEF,UAAQ,SAAS;AAAA,IACf;AACE,aAAO,IAAI,OAAO;AAAA,IACpB;AACE,YAAM,IAAI,MAAM,4BAA4B,OAAO,EAAE;AAAA,EACzD;AACF;","names":[]}
1
+ {"version":3,"sources":["../src/index.ts","../src/customer-service/index.ts","../src/chat-config/index.ts","../src/campaigns/index.ts","../src/@common/client.ts","../src/@common/enums.ts"],"sourcesContent":["import { createClient, SDKGatewaysInterface, GatewayClientParams, GatewayMap } from './@common/client';\nimport { SERVICE_GATEWAYS } from './@common/enums';\n\nclass SDK {\n client: SDKGatewaysInterface | null = null;\n\n configure(params: GatewayClientParams) {\n this.client = createClient(params);\n }\n}\nconst sdk = new SDK();\n\n/**\n * Initializes the SDK with the required configuration parameters.\n * Must be called before using {@link gateway}.\n */\nexport const configure = (params: GatewayClientParams) => {\n sdk.configure(params);\n};\n\n/**\n * Returns the gateway instance for the specified service.\n *\n * @typeParam T - A service identifier key from {@link GatewayMap}.\n * @param service - The service identifier (e.g. `SERVICE_GATEWAYS.CUSTOMER_SERVICE`).\n * @returns The corresponding gateway instance with all its methods.\n * @throws {Error} If the SDK has not been configured via {@link configure}.\n * @throws {Error} If an unknown service identifier is provided.\n *\n * @example\n * ```ts\n * configure({ axiosClient, apiToken: '...', services: { customerService: { baseUrl: '...' } } });\n * const customer = gateway('customer-service');\n * const company = await customer.getCompanyById('123');\n * ```\n */\nexport function gateway<T extends keyof GatewayMap>(service: T): GatewayMap[T];\nexport function gateway(service: SERVICE_GATEWAYS) {\n if (!sdk.client)\n throw new Error(\n 'SDK not configured. Please call configure() with the appropriate parameters before using the SDK.',\n );\n\n switch (service) {\n case SERVICE_GATEWAYS.CUSTOMER_SERVICE:\n if (!sdk.client.customerService)\n throw new Error(`Service 'customer-service' is not configured. Provide its baseUrl in configure().`);\n return sdk.client.customerService;\n case SERVICE_GATEWAYS.CHAT_CONFIG:\n if (!sdk.client.chatConfig)\n throw new Error(`Service 'chat-config' is not configured. Provide its baseUrl in configure().`);\n return sdk.client.chatConfig;\n case SERVICE_GATEWAYS.CAMPAIGNS:\n if (!sdk.client.campaigns)\n throw new Error(`Service 'campaigns' is not configured. Provide its baseUrl in configure().`);\n return sdk.client.campaigns;\n default:\n throw new Error(`Unknown service gateway: ${service}`);\n }\n}\n\nexport * from './campaigns/contracts';\nexport * from './chat-config/contracts';\nexport * from './customer-service/contracts';\n","import type { AxiosInstance } from 'axios';\nimport type { CompanyResponse } from './contracts/company';\nimport type { WorkGroupListResponse, WorkGroupMembersResponse, WorkGroupResponse } from './contracts/work-group';\n\n/**\n * Gateway for interacting with the Customer Service API.\n */\nexport class CustomerServiceGateway {\n constructor(\n private readonly httpClient: AxiosInstance,\n private readonly baseUrl: string,\n ) {}\n\n /**\n * Retrieves a company by its unique identifier.\n * @param companyId - The unique identifier of the company.\n * @returns The company data wrapped in a {@link CompanyResponse}.\n */\n async getCompanyById(companyId: string): Promise<CompanyResponse> {\n const { data } = await this.httpClient.get<CompanyResponse>(`${this.baseUrl}/companies/search/${companyId}`);\n return data;\n }\n\n /**\n * Retrieves all work groups for a company.\n * @param companyId - The unique identifier of the company.\n * @returns The work groups for the given company.\n */\n async getWorkGroups(companyId: string): Promise<WorkGroupListResponse> {\n const { data } = await this.httpClient.get<WorkGroupListResponse>(\n `${this.baseUrl}/companies/work-groups`,\n { params: { company_id: companyId } },\n );\n return data;\n }\n\n /**\n * Retrieves a work group by its unique identifier.\n * @param workGroupId - The unique identifier of the work group.\n * @param companyId - The unique identifier of the company (optional, sent as query parameter).\n * @returns The work group data wrapped in a {@link WorkGroupResponse}.\n */\n async getWorkGroupById(workGroupId: string, companyId?: string): Promise<WorkGroupResponse> {\n const params = companyId ? { company_id: companyId } : undefined;\n const { data } = await this.httpClient.get<WorkGroupResponse>(\n `${this.baseUrl}/companies/work-groups/${workGroupId}`,\n { params },\n );\n return data;\n }\n\n /**\n * Retrieves the members of a work group by its identifier.\n * @param groupId - The unique identifier of the work group.\n * @param companyId - The unique identifier of the company (optional, sent as query parameter).\n * @param profile - Filter members by profile (optional).\n * @returns The members of the work group.\n */\n async getWorkGroupMembers(groupId: string, companyId?: string, profile?: string[]): Promise<WorkGroupMembersResponse> {\n const params: { company_id?: string; profile?: string[] } = {};\n if (companyId) params.company_id = companyId;\n if (profile) params.profile = profile;\n const { data } = await this.httpClient.get<WorkGroupMembersResponse>(\n `${this.baseUrl}/bonds/work-groups/${groupId}`,\n { params },\n );\n return data;\n }\n}\n\nexport type { CompanyResponse, CompanyData } from './contracts/company';\nexport type { WorkGroup, WorkGroupMember, WorkGroupMembersResponse, WorkGroupListResponse, WorkGroupResponse } from './contracts/work-group';","import type { AxiosInstance } from 'axios';\nimport type { ProviderListResponse } from './contracts/provider';\nimport type { ConfigListByProviderResponse, GetConfigsByProviderParams } from './contracts/config';\nimport { Queue } from './contracts/queues';\n\n/**\n * Gateway for interacting with the Chat Config API.\n */\nexport class ChatConfigGateway {\n constructor(\n private readonly httpClient: AxiosInstance,\n private readonly baseUrl: string,\n ) {}\n\n /**\n * Retrieves all available providers.\n * @returns The list of providers.\n */\n async getProviders(): Promise<ProviderListResponse> {\n const { data } = await this.httpClient.get<ProviderListResponse>(`${this.baseUrl}/providers`);\n return data;\n }\n\n /**\n * Retrieves configurations filtered by provider.\n * @param providerId - The unique identifier of the provider.\n * @param params - Optional query parameters for filtering configurations.\n * @returns The configurations for the given provider.\n */\n async getConfigsByProvider(\n providerId: string,\n params?: GetConfigsByProviderParams,\n ): Promise<ConfigListByProviderResponse> {\n const { data } = await this.httpClient.get<ConfigListByProviderResponse>(\n `${this.baseUrl}/config/provider/${providerId}`,\n { params },\n );\n return data;\n }\n\n /**\n * Retrieves a queue by its ID.\n * @param queueId - The unique identifier of the queue.\n * @returns The queue data.\n */\n async getQueueById(queueId: string): Promise<Queue> {\n const { data } = await this.httpClient.get<Queue>(`${this.baseUrl}/queue/${queueId}`);\n return data;\n }\n}\n\nexport type { Queue, QueueMember, DistributionType } from './contracts/queues';\nexport type { ProviderListResponse, Provider } from './contracts/provider';\nexport type {\n ConfigListByProviderResponse,\n Config,\n ConfigProvider,\n GetConfigsByProviderParams,\n} from './contracts/config';\n","import type { AxiosInstance } from 'axios';\nimport type {\n Campaign,\n CampaignPaginatedResponse,\n CampaignQueryParams,\n CreateCampaignRequest,\n PatchCampaignRequest,\n} from './contracts/campaign';\n\n/**\n * Gateway for interacting with the Campaigns API.\n */\nexport class CampaignsGateway {\n constructor(\n private readonly httpClient: AxiosInstance,\n private readonly baseUrl: string,\n ) {}\n\n /**\n * Retrieves a paginated list of campaigns.\n * @param query - Optional query parameters for filtering and pagination.\n * @returns The paginated campaigns response.\n */\n async find(query?: CampaignQueryParams): Promise<CampaignPaginatedResponse> {\n const { data } = await this.httpClient.get<CampaignPaginatedResponse>(`${this.baseUrl}/campaigns`, {\n params: query,\n });\n return data;\n }\n\n /**\n * Retrieves a campaign by its unique identifier.\n * @param id - The unique identifier of the campaign.\n * @returns The campaign data.\n */\n async get(id: string): Promise<Campaign> {\n const { data } = await this.httpClient.get<Campaign>(`${this.baseUrl}/campaigns/${id}`);\n return data;\n }\n\n /**\n * Creates a new campaign.\n * @param payload - The campaign data to create.\n * @returns The created campaign.\n */\n async create(payload: CreateCampaignRequest): Promise<Campaign> {\n const { data } = await this.httpClient.post<Campaign>(`${this.baseUrl}/campaigns`, payload);\n return data;\n }\n\n /**\n * Partially updates an existing campaign.\n * @param id - The unique identifier of the campaign.\n * @param payload - The fields to update.\n * @returns The updated campaign.\n */\n async patch(id: string, payload: PatchCampaignRequest): Promise<Campaign> {\n const { data } = await this.httpClient.patch<Campaign>(`${this.baseUrl}/campaigns/${id}`, payload);\n return data;\n }\n\n /**\n * Removes a campaign by its unique identifier.\n * @param id - The unique identifier of the campaign.\n * @returns The removed campaign.\n */\n async remove(id: string): Promise<Campaign> {\n const { data } = await this.httpClient.delete<Campaign>(`${this.baseUrl}/campaigns/${id}`);\n return data;\n }\n}\n\nexport type {\n Campaign,\n CampaignPaginatedResponse,\n CampaignQueryParams,\n CampaignStatus,\n CampaignProvider,\n WhatsAppPayload,\n WhatsAppTemplateComponent,\n CampaignContactFilter,\n CampaignSchedule,\n CreateCampaignRequest,\n PatchCampaignRequest,\n} from './contracts/campaign';","import { CustomerServiceGateway } from '../customer-service';\nimport { ChatConfigGateway } from '../chat-config';\nimport { CampaignsGateway } from '../campaigns';\nimport { AxiosInstance } from 'axios';\n\n/**\n * Maps service identifiers to their corresponding gateway types.\n * Used by the `gateway()` function to infer the correct return type\n * based on the service name passed as argument.\n *\n * When adding a new service, add an entry here with the service\n * identifier as the key and the gateway class as the value.\n */\nexport type GatewayMap = {\n 'customer-service': CustomerServiceGateway;\n 'chat-config': ChatConfigGateway;\n 'campaigns': CampaignsGateway;\n};\n\nexport interface SDKGatewaysInterface {\n customerService: CustomerServiceGateway | null;\n chatConfig: ChatConfigGateway | null;\n campaigns: CampaignsGateway | null;\n}\n\nclass SDKGateways {\n customerService: CustomerServiceGateway | null;\n chatConfig: ChatConfigGateway | null;\n campaigns: CampaignsGateway | null;\n constructor(customerService: CustomerServiceGateway | null, chatConfig: ChatConfigGateway | null, campaigns: CampaignsGateway | null) {\n this.customerService = customerService;\n this.chatConfig = chatConfig;\n this.campaigns = campaigns;\n }\n}\n\n/**\n * Parameters required to configure the SDK client.\n * Each service configuration is optional, only provide the services you need.\n */\nexport interface GatewayClientParams {\n /** An Axios instance used as the HTTP client for all gateway requests. */\n axiosClient: AxiosInstance;\n /** API token used for authentication across all services. */\n apiToken: string;\n /** Configuration for each service gateway. Only the services you configure will be available. */\n services: {\n customerService?: {\n baseUrl: string;\n };\n chatConfig?: {\n baseUrl: string;\n };\n campaigns?: {\n baseUrl: string;\n };\n };\n}\n\n/**\n * Creates an SDKGateways instance with all service gateways initialized\n * using the provided configuration parameters.\n * Services without configuration will be set to null and will throw\n * an error if accessed via `gateway()`.\n */\nexport function createClient(params: GatewayClientParams) {\n const httpClient = params.axiosClient;\n const customerService = params.services.customerService\n ? new CustomerServiceGateway(httpClient, params.services.customerService.baseUrl)\n : null;\n const chatConfig = params.services.chatConfig\n ? new ChatConfigGateway(httpClient, params.services.chatConfig.baseUrl)\n : null;\n const campaigns = params.services.campaigns\n ? new CampaignsGateway(httpClient, params.services.campaigns.baseUrl)\n : null;\n return new SDKGateways(customerService, chatConfig, campaigns);\n}\n","export const SERVICE_GATEWAYS = {\n CUSTOMER_SERVICE: 'customer-service',\n CHAT_CONFIG: 'chat-config',\n CAMPAIGNS: 'campaigns',\n} as const;\n\nexport type SERVICE_GATEWAYS = (typeof SERVICE_GATEWAYS)[keyof typeof SERVICE_GATEWAYS];\n"],"mappings":"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","names":[]}
package/dist/index.mjs CHANGED
@@ -6,25 +6,184 @@ var CustomerServiceGateway = class {
6
6
  }
7
7
  httpClient;
8
8
  baseUrl;
9
+ /**
10
+ * Retrieves a company by its unique identifier.
11
+ * @param companyId - The unique identifier of the company.
12
+ * @returns The company data wrapped in a {@link CompanyResponse}.
13
+ */
9
14
  async getCompanyById(companyId) {
10
15
  const { data } = await this.httpClient.get(`${this.baseUrl}/companies/search/${companyId}`);
11
16
  return data;
12
17
  }
18
+ /**
19
+ * Retrieves all work groups for a company.
20
+ * @param companyId - The unique identifier of the company.
21
+ * @returns The work groups for the given company.
22
+ */
23
+ async getWorkGroups(companyId) {
24
+ const { data } = await this.httpClient.get(
25
+ `${this.baseUrl}/companies/work-groups`,
26
+ { params: { company_id: companyId } }
27
+ );
28
+ return data;
29
+ }
30
+ /**
31
+ * Retrieves a work group by its unique identifier.
32
+ * @param workGroupId - The unique identifier of the work group.
33
+ * @param companyId - The unique identifier of the company (optional, sent as query parameter).
34
+ * @returns The work group data wrapped in a {@link WorkGroupResponse}.
35
+ */
36
+ async getWorkGroupById(workGroupId, companyId) {
37
+ const params = companyId ? { company_id: companyId } : void 0;
38
+ const { data } = await this.httpClient.get(
39
+ `${this.baseUrl}/companies/work-groups/${workGroupId}`,
40
+ { params }
41
+ );
42
+ return data;
43
+ }
44
+ /**
45
+ * Retrieves the members of a work group by its identifier.
46
+ * @param groupId - The unique identifier of the work group.
47
+ * @param companyId - The unique identifier of the company (optional, sent as query parameter).
48
+ * @param profile - Filter members by profile (optional).
49
+ * @returns The members of the work group.
50
+ */
51
+ async getWorkGroupMembers(groupId, companyId, profile) {
52
+ const params = {};
53
+ if (companyId) params.company_id = companyId;
54
+ if (profile) params.profile = profile;
55
+ const { data } = await this.httpClient.get(
56
+ `${this.baseUrl}/bonds/work-groups/${groupId}`,
57
+ { params }
58
+ );
59
+ return data;
60
+ }
61
+ };
62
+
63
+ // src/chat-config/index.ts
64
+ var ChatConfigGateway = class {
65
+ constructor(httpClient, baseUrl) {
66
+ this.httpClient = httpClient;
67
+ this.baseUrl = baseUrl;
68
+ }
69
+ httpClient;
70
+ baseUrl;
71
+ /**
72
+ * Retrieves all available providers.
73
+ * @returns The list of providers.
74
+ */
75
+ async getProviders() {
76
+ const { data } = await this.httpClient.get(`${this.baseUrl}/providers`);
77
+ return data;
78
+ }
79
+ /**
80
+ * Retrieves configurations filtered by provider.
81
+ * @param providerId - The unique identifier of the provider.
82
+ * @param params - Optional query parameters for filtering configurations.
83
+ * @returns The configurations for the given provider.
84
+ */
85
+ async getConfigsByProvider(providerId, params) {
86
+ const { data } = await this.httpClient.get(
87
+ `${this.baseUrl}/config/provider/${providerId}`,
88
+ { params }
89
+ );
90
+ return data;
91
+ }
92
+ /**
93
+ * Retrieves a queue by its ID.
94
+ * @param queueId - The unique identifier of the queue.
95
+ * @returns The queue data.
96
+ */
97
+ async getQueueById(queueId) {
98
+ const { data } = await this.httpClient.get(`${this.baseUrl}/queue/${queueId}`);
99
+ return data;
100
+ }
101
+ };
102
+
103
+ // src/campaigns/index.ts
104
+ var CampaignsGateway = class {
105
+ constructor(httpClient, baseUrl) {
106
+ this.httpClient = httpClient;
107
+ this.baseUrl = baseUrl;
108
+ }
109
+ httpClient;
110
+ baseUrl;
111
+ /**
112
+ * Retrieves a paginated list of campaigns.
113
+ * @param query - Optional query parameters for filtering and pagination.
114
+ * @returns The paginated campaigns response.
115
+ */
116
+ async find(query) {
117
+ const { data } = await this.httpClient.get(`${this.baseUrl}/campaigns`, {
118
+ params: query
119
+ });
120
+ return data;
121
+ }
122
+ /**
123
+ * Retrieves a campaign by its unique identifier.
124
+ * @param id - The unique identifier of the campaign.
125
+ * @returns The campaign data.
126
+ */
127
+ async get(id) {
128
+ const { data } = await this.httpClient.get(`${this.baseUrl}/campaigns/${id}`);
129
+ return data;
130
+ }
131
+ /**
132
+ * Creates a new campaign.
133
+ * @param payload - The campaign data to create.
134
+ * @returns The created campaign.
135
+ */
136
+ async create(payload) {
137
+ const { data } = await this.httpClient.post(`${this.baseUrl}/campaigns`, payload);
138
+ return data;
139
+ }
140
+ /**
141
+ * Partially updates an existing campaign.
142
+ * @param id - The unique identifier of the campaign.
143
+ * @param payload - The fields to update.
144
+ * @returns The updated campaign.
145
+ */
146
+ async patch(id, payload) {
147
+ const { data } = await this.httpClient.patch(`${this.baseUrl}/campaigns/${id}`, payload);
148
+ return data;
149
+ }
150
+ /**
151
+ * Removes a campaign by its unique identifier.
152
+ * @param id - The unique identifier of the campaign.
153
+ * @returns The removed campaign.
154
+ */
155
+ async remove(id) {
156
+ const { data } = await this.httpClient.delete(`${this.baseUrl}/campaigns/${id}`);
157
+ return data;
158
+ }
13
159
  };
14
160
 
15
161
  // src/@common/client.ts
16
162
  var SDKGateways = class {
17
163
  customerService;
18
- constructor(customerService) {
164
+ chatConfig;
165
+ campaigns;
166
+ constructor(customerService, chatConfig, campaigns) {
19
167
  this.customerService = customerService;
168
+ this.chatConfig = chatConfig;
169
+ this.campaigns = campaigns;
20
170
  }
21
171
  };
22
172
  function createClient(params) {
23
173
  const httpClient = params.axiosClient;
24
- const customerService = new CustomerServiceGateway(httpClient, params.services.customerService.baseUrl);
25
- return new SDKGateways(customerService);
174
+ const customerService = params.services.customerService ? new CustomerServiceGateway(httpClient, params.services.customerService.baseUrl) : null;
175
+ const chatConfig = params.services.chatConfig ? new ChatConfigGateway(httpClient, params.services.chatConfig.baseUrl) : null;
176
+ const campaigns = params.services.campaigns ? new CampaignsGateway(httpClient, params.services.campaigns.baseUrl) : null;
177
+ return new SDKGateways(customerService, chatConfig, campaigns);
26
178
  }
27
179
 
180
+ // src/@common/enums.ts
181
+ var SERVICE_GATEWAYS = {
182
+ CUSTOMER_SERVICE: "customer-service",
183
+ CHAT_CONFIG: "chat-config",
184
+ CAMPAIGNS: "campaigns"
185
+ };
186
+
28
187
  // src/index.ts
29
188
  var SDK = class {
30
189
  client = null;
@@ -36,18 +195,28 @@ var sdk = new SDK();
36
195
  var configure = (params) => {
37
196
  sdk.configure(params);
38
197
  };
39
- var gateway = (service) => {
198
+ function gateway(service) {
40
199
  if (!sdk.client)
41
200
  throw new Error(
42
201
  "SDK not configured. Please call configure() with the appropriate parameters before using the SDK."
43
202
  );
44
203
  switch (service) {
45
- case "customer-service" /* CUSTOMER_SERVICE */:
204
+ case SERVICE_GATEWAYS.CUSTOMER_SERVICE:
205
+ if (!sdk.client.customerService)
206
+ throw new Error(`Service 'customer-service' is not configured. Provide its baseUrl in configure().`);
46
207
  return sdk.client.customerService;
208
+ case SERVICE_GATEWAYS.CHAT_CONFIG:
209
+ if (!sdk.client.chatConfig)
210
+ throw new Error(`Service 'chat-config' is not configured. Provide its baseUrl in configure().`);
211
+ return sdk.client.chatConfig;
212
+ case SERVICE_GATEWAYS.CAMPAIGNS:
213
+ if (!sdk.client.campaigns)
214
+ throw new Error(`Service 'campaigns' is not configured. Provide its baseUrl in configure().`);
215
+ return sdk.client.campaigns;
47
216
  default:
48
217
  throw new Error(`Unknown service gateway: ${service}`);
49
218
  }
50
- };
219
+ }
51
220
  export {
52
221
  configure,
53
222
  gateway
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/customer-service/index.ts","../src/@common/client.ts","../src/index.ts"],"sourcesContent":["import type { AxiosInstance } from 'axios';\nimport type { CompanyResponse } from './contracts/company';\n\nexport class CustomerServiceGateway {\n constructor(\n private readonly httpClient: AxiosInstance,\n private readonly baseUrl: string,\n ) {}\n\n async getCompanyById(companyId: string): Promise<CompanyResponse> {\n const { data } = await this.httpClient.get<CompanyResponse>(`${this.baseUrl}/companies/search/${companyId}`);\n return data;\n }\n}\n\nexport type { CompanyResponse } from './contracts/company';\n","import { CustomerServiceGateway } from '../customer-service';\nimport { AxiosInstance } from 'axios';\n\nexport interface SDKGatewaysInterface {\n customerService: CustomerServiceGateway;\n}\n\nclass SDKGateways {\n customerService: CustomerServiceGateway;\n constructor(customerService: CustomerServiceGateway) {\n this.customerService = customerService;\n }\n}\n\nexport interface GatewayClientParams {\n axiosClient: AxiosInstance;\n apiToken: string;\n services: {\n customerService: {\n baseUrl: string;\n };\n };\n}\n\nexport function createClient(params: GatewayClientParams) {\n const httpClient = params.axiosClient;\n const customerService = new CustomerServiceGateway(httpClient, params.services.customerService.baseUrl);\n return new SDKGateways(customerService);\n}\n","import { createClient, SDKGatewaysInterface, GatewayClientParams } from './@common/client';\nimport { SERVICE_GATEWAYS } from './@common/enums';\nclass SDK {\n client: SDKGatewaysInterface | null = null;\n\n configure(params: GatewayClientParams) {\n this.client = createClient(params);\n }\n}\nconst sdk = new SDK();\n\nexport const configure = (params: GatewayClientParams) => {\n sdk.configure(params);\n};\n\nexport const gateway = (service: SERVICE_GATEWAYS) => {\n if (!sdk.client)\n throw new Error(\n 'SDK not configured. Please call configure() with the appropriate parameters before using the SDK.',\n );\n\n switch (service) {\n case SERVICE_GATEWAYS.CUSTOMER_SERVICE:\n return sdk.client.customerService;\n default:\n throw new Error(`Unknown service gateway: ${service}`);\n }\n};\n"],"mappings":";AAGO,IAAM,yBAAN,MAA6B;AAAA,EAClC,YACmB,YACA,SACjB;AAFiB;AACA;AAAA,EAChB;AAAA,EAFgB;AAAA,EACA;AAAA,EAGnB,MAAM,eAAe,WAA6C;AAChE,UAAM,EAAE,KAAK,IAAI,MAAM,KAAK,WAAW,IAAqB,GAAG,KAAK,OAAO,qBAAqB,SAAS,EAAE;AAC3G,WAAO;AAAA,EACT;AACF;;;ACNA,IAAM,cAAN,MAAkB;AAAA,EAChB;AAAA,EACA,YAAY,iBAAyC;AACnD,SAAK,kBAAkB;AAAA,EACzB;AACF;AAYO,SAAS,aAAa,QAA6B;AACxD,QAAM,aAAa,OAAO;AAC1B,QAAM,kBAAkB,IAAI,uBAAuB,YAAY,OAAO,SAAS,gBAAgB,OAAO;AACtG,SAAO,IAAI,YAAY,eAAe;AACxC;;;AC1BA,IAAM,MAAN,MAAU;AAAA,EACR,SAAsC;AAAA,EAEtC,UAAU,QAA6B;AACrC,SAAK,SAAS,aAAa,MAAM;AAAA,EACnC;AACF;AACA,IAAM,MAAM,IAAI,IAAI;AAEb,IAAM,YAAY,CAAC,WAAgC;AACxD,MAAI,UAAU,MAAM;AACtB;AAEO,IAAM,UAAU,CAAC,YAA8B;AACpD,MAAI,CAAC,IAAI;AACP,UAAM,IAAI;AAAA,MACR;AAAA,IACF;AAEF,UAAQ,SAAS;AAAA,IACf;AACE,aAAO,IAAI,OAAO;AAAA,IACpB;AACE,YAAM,IAAI,MAAM,4BAA4B,OAAO,EAAE;AAAA,EACzD;AACF;","names":[]}
1
+ {"version":3,"sources":["../src/customer-service/index.ts","../src/chat-config/index.ts","../src/campaigns/index.ts","../src/@common/client.ts","../src/@common/enums.ts","../src/index.ts"],"sourcesContent":["import type { AxiosInstance } from 'axios';\nimport type { CompanyResponse } from './contracts/company';\nimport type { WorkGroupListResponse, WorkGroupMembersResponse, WorkGroupResponse } from './contracts/work-group';\n\n/**\n * Gateway for interacting with the Customer Service API.\n */\nexport class CustomerServiceGateway {\n constructor(\n private readonly httpClient: AxiosInstance,\n private readonly baseUrl: string,\n ) {}\n\n /**\n * Retrieves a company by its unique identifier.\n * @param companyId - The unique identifier of the company.\n * @returns The company data wrapped in a {@link CompanyResponse}.\n */\n async getCompanyById(companyId: string): Promise<CompanyResponse> {\n const { data } = await this.httpClient.get<CompanyResponse>(`${this.baseUrl}/companies/search/${companyId}`);\n return data;\n }\n\n /**\n * Retrieves all work groups for a company.\n * @param companyId - The unique identifier of the company.\n * @returns The work groups for the given company.\n */\n async getWorkGroups(companyId: string): Promise<WorkGroupListResponse> {\n const { data } = await this.httpClient.get<WorkGroupListResponse>(\n `${this.baseUrl}/companies/work-groups`,\n { params: { company_id: companyId } },\n );\n return data;\n }\n\n /**\n * Retrieves a work group by its unique identifier.\n * @param workGroupId - The unique identifier of the work group.\n * @param companyId - The unique identifier of the company (optional, sent as query parameter).\n * @returns The work group data wrapped in a {@link WorkGroupResponse}.\n */\n async getWorkGroupById(workGroupId: string, companyId?: string): Promise<WorkGroupResponse> {\n const params = companyId ? { company_id: companyId } : undefined;\n const { data } = await this.httpClient.get<WorkGroupResponse>(\n `${this.baseUrl}/companies/work-groups/${workGroupId}`,\n { params },\n );\n return data;\n }\n\n /**\n * Retrieves the members of a work group by its identifier.\n * @param groupId - The unique identifier of the work group.\n * @param companyId - The unique identifier of the company (optional, sent as query parameter).\n * @param profile - Filter members by profile (optional).\n * @returns The members of the work group.\n */\n async getWorkGroupMembers(groupId: string, companyId?: string, profile?: string[]): Promise<WorkGroupMembersResponse> {\n const params: { company_id?: string; profile?: string[] } = {};\n if (companyId) params.company_id = companyId;\n if (profile) params.profile = profile;\n const { data } = await this.httpClient.get<WorkGroupMembersResponse>(\n `${this.baseUrl}/bonds/work-groups/${groupId}`,\n { params },\n );\n return data;\n }\n}\n\nexport type { CompanyResponse, CompanyData } from './contracts/company';\nexport type { WorkGroup, WorkGroupMember, WorkGroupMembersResponse, WorkGroupListResponse, WorkGroupResponse } from './contracts/work-group';","import type { AxiosInstance } from 'axios';\nimport type { ProviderListResponse } from './contracts/provider';\nimport type { ConfigListByProviderResponse, GetConfigsByProviderParams } from './contracts/config';\nimport { Queue } from './contracts/queues';\n\n/**\n * Gateway for interacting with the Chat Config API.\n */\nexport class ChatConfigGateway {\n constructor(\n private readonly httpClient: AxiosInstance,\n private readonly baseUrl: string,\n ) {}\n\n /**\n * Retrieves all available providers.\n * @returns The list of providers.\n */\n async getProviders(): Promise<ProviderListResponse> {\n const { data } = await this.httpClient.get<ProviderListResponse>(`${this.baseUrl}/providers`);\n return data;\n }\n\n /**\n * Retrieves configurations filtered by provider.\n * @param providerId - The unique identifier of the provider.\n * @param params - Optional query parameters for filtering configurations.\n * @returns The configurations for the given provider.\n */\n async getConfigsByProvider(\n providerId: string,\n params?: GetConfigsByProviderParams,\n ): Promise<ConfigListByProviderResponse> {\n const { data } = await this.httpClient.get<ConfigListByProviderResponse>(\n `${this.baseUrl}/config/provider/${providerId}`,\n { params },\n );\n return data;\n }\n\n /**\n * Retrieves a queue by its ID.\n * @param queueId - The unique identifier of the queue.\n * @returns The queue data.\n */\n async getQueueById(queueId: string): Promise<Queue> {\n const { data } = await this.httpClient.get<Queue>(`${this.baseUrl}/queue/${queueId}`);\n return data;\n }\n}\n\nexport type { Queue, QueueMember, DistributionType } from './contracts/queues';\nexport type { ProviderListResponse, Provider } from './contracts/provider';\nexport type {\n ConfigListByProviderResponse,\n Config,\n ConfigProvider,\n GetConfigsByProviderParams,\n} from './contracts/config';\n","import type { AxiosInstance } from 'axios';\nimport type {\n Campaign,\n CampaignPaginatedResponse,\n CampaignQueryParams,\n CreateCampaignRequest,\n PatchCampaignRequest,\n} from './contracts/campaign';\n\n/**\n * Gateway for interacting with the Campaigns API.\n */\nexport class CampaignsGateway {\n constructor(\n private readonly httpClient: AxiosInstance,\n private readonly baseUrl: string,\n ) {}\n\n /**\n * Retrieves a paginated list of campaigns.\n * @param query - Optional query parameters for filtering and pagination.\n * @returns The paginated campaigns response.\n */\n async find(query?: CampaignQueryParams): Promise<CampaignPaginatedResponse> {\n const { data } = await this.httpClient.get<CampaignPaginatedResponse>(`${this.baseUrl}/campaigns`, {\n params: query,\n });\n return data;\n }\n\n /**\n * Retrieves a campaign by its unique identifier.\n * @param id - The unique identifier of the campaign.\n * @returns The campaign data.\n */\n async get(id: string): Promise<Campaign> {\n const { data } = await this.httpClient.get<Campaign>(`${this.baseUrl}/campaigns/${id}`);\n return data;\n }\n\n /**\n * Creates a new campaign.\n * @param payload - The campaign data to create.\n * @returns The created campaign.\n */\n async create(payload: CreateCampaignRequest): Promise<Campaign> {\n const { data } = await this.httpClient.post<Campaign>(`${this.baseUrl}/campaigns`, payload);\n return data;\n }\n\n /**\n * Partially updates an existing campaign.\n * @param id - The unique identifier of the campaign.\n * @param payload - The fields to update.\n * @returns The updated campaign.\n */\n async patch(id: string, payload: PatchCampaignRequest): Promise<Campaign> {\n const { data } = await this.httpClient.patch<Campaign>(`${this.baseUrl}/campaigns/${id}`, payload);\n return data;\n }\n\n /**\n * Removes a campaign by its unique identifier.\n * @param id - The unique identifier of the campaign.\n * @returns The removed campaign.\n */\n async remove(id: string): Promise<Campaign> {\n const { data } = await this.httpClient.delete<Campaign>(`${this.baseUrl}/campaigns/${id}`);\n return data;\n }\n}\n\nexport type {\n Campaign,\n CampaignPaginatedResponse,\n CampaignQueryParams,\n CampaignStatus,\n CampaignProvider,\n WhatsAppPayload,\n WhatsAppTemplateComponent,\n CampaignContactFilter,\n CampaignSchedule,\n CreateCampaignRequest,\n PatchCampaignRequest,\n} from './contracts/campaign';","import { CustomerServiceGateway } from '../customer-service';\nimport { ChatConfigGateway } from '../chat-config';\nimport { CampaignsGateway } from '../campaigns';\nimport { AxiosInstance } from 'axios';\n\n/**\n * Maps service identifiers to their corresponding gateway types.\n * Used by the `gateway()` function to infer the correct return type\n * based on the service name passed as argument.\n *\n * When adding a new service, add an entry here with the service\n * identifier as the key and the gateway class as the value.\n */\nexport type GatewayMap = {\n 'customer-service': CustomerServiceGateway;\n 'chat-config': ChatConfigGateway;\n 'campaigns': CampaignsGateway;\n};\n\nexport interface SDKGatewaysInterface {\n customerService: CustomerServiceGateway | null;\n chatConfig: ChatConfigGateway | null;\n campaigns: CampaignsGateway | null;\n}\n\nclass SDKGateways {\n customerService: CustomerServiceGateway | null;\n chatConfig: ChatConfigGateway | null;\n campaigns: CampaignsGateway | null;\n constructor(customerService: CustomerServiceGateway | null, chatConfig: ChatConfigGateway | null, campaigns: CampaignsGateway | null) {\n this.customerService = customerService;\n this.chatConfig = chatConfig;\n this.campaigns = campaigns;\n }\n}\n\n/**\n * Parameters required to configure the SDK client.\n * Each service configuration is optional, only provide the services you need.\n */\nexport interface GatewayClientParams {\n /** An Axios instance used as the HTTP client for all gateway requests. */\n axiosClient: AxiosInstance;\n /** API token used for authentication across all services. */\n apiToken: string;\n /** Configuration for each service gateway. Only the services you configure will be available. */\n services: {\n customerService?: {\n baseUrl: string;\n };\n chatConfig?: {\n baseUrl: string;\n };\n campaigns?: {\n baseUrl: string;\n };\n };\n}\n\n/**\n * Creates an SDKGateways instance with all service gateways initialized\n * using the provided configuration parameters.\n * Services without configuration will be set to null and will throw\n * an error if accessed via `gateway()`.\n */\nexport function createClient(params: GatewayClientParams) {\n const httpClient = params.axiosClient;\n const customerService = params.services.customerService\n ? new CustomerServiceGateway(httpClient, params.services.customerService.baseUrl)\n : null;\n const chatConfig = params.services.chatConfig\n ? new ChatConfigGateway(httpClient, params.services.chatConfig.baseUrl)\n : null;\n const campaigns = params.services.campaigns\n ? new CampaignsGateway(httpClient, params.services.campaigns.baseUrl)\n : null;\n return new SDKGateways(customerService, chatConfig, campaigns);\n}\n","export const SERVICE_GATEWAYS = {\n CUSTOMER_SERVICE: 'customer-service',\n CHAT_CONFIG: 'chat-config',\n CAMPAIGNS: 'campaigns',\n} as const;\n\nexport type SERVICE_GATEWAYS = (typeof SERVICE_GATEWAYS)[keyof typeof SERVICE_GATEWAYS];\n","import { createClient, SDKGatewaysInterface, GatewayClientParams, GatewayMap } from './@common/client';\nimport { SERVICE_GATEWAYS } from './@common/enums';\n\nclass SDK {\n client: SDKGatewaysInterface | null = null;\n\n configure(params: GatewayClientParams) {\n this.client = createClient(params);\n }\n}\nconst sdk = new SDK();\n\n/**\n * Initializes the SDK with the required configuration parameters.\n * Must be called before using {@link gateway}.\n */\nexport const configure = (params: GatewayClientParams) => {\n sdk.configure(params);\n};\n\n/**\n * Returns the gateway instance for the specified service.\n *\n * @typeParam T - A service identifier key from {@link GatewayMap}.\n * @param service - The service identifier (e.g. `SERVICE_GATEWAYS.CUSTOMER_SERVICE`).\n * @returns The corresponding gateway instance with all its methods.\n * @throws {Error} If the SDK has not been configured via {@link configure}.\n * @throws {Error} If an unknown service identifier is provided.\n *\n * @example\n * ```ts\n * configure({ axiosClient, apiToken: '...', services: { customerService: { baseUrl: '...' } } });\n * const customer = gateway('customer-service');\n * const company = await customer.getCompanyById('123');\n * ```\n */\nexport function gateway<T extends keyof GatewayMap>(service: T): GatewayMap[T];\nexport function gateway(service: SERVICE_GATEWAYS) {\n if (!sdk.client)\n throw new Error(\n 'SDK not configured. Please call configure() with the appropriate parameters before using the SDK.',\n );\n\n switch (service) {\n case SERVICE_GATEWAYS.CUSTOMER_SERVICE:\n if (!sdk.client.customerService)\n throw new Error(`Service 'customer-service' is not configured. Provide its baseUrl in configure().`);\n return sdk.client.customerService;\n case SERVICE_GATEWAYS.CHAT_CONFIG:\n if (!sdk.client.chatConfig)\n throw new Error(`Service 'chat-config' is not configured. Provide its baseUrl in configure().`);\n return sdk.client.chatConfig;\n case SERVICE_GATEWAYS.CAMPAIGNS:\n if (!sdk.client.campaigns)\n throw new Error(`Service 'campaigns' is not configured. Provide its baseUrl in configure().`);\n return sdk.client.campaigns;\n default:\n throw new Error(`Unknown service gateway: ${service}`);\n }\n}\n\nexport * from './campaigns/contracts';\nexport * from './chat-config/contracts';\nexport * from './customer-service/contracts';\n"],"mappings":"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","names":[]}
package/package.json CHANGED
@@ -1,5 +1,5 @@
1
1
  {
2
- "version": "1.0.0",
2
+ "version": "1.1.0",
3
3
  "description": "A simple package to help with some common tasks",
4
4
  "name": "@opens/gateways",
5
5
  "private": false,