@ikatec/digisac-api-sdk 2.0.0 → 2.1.1
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/apis/campaigns/types.d.ts +22 -5
- package/dist/apis/campaigns/types.d.ts.map +1 -1
- package/dist/apis/whatsappBusinessTemplates/types.d.ts +20 -3
- package/dist/apis/whatsappBusinessTemplates/types.d.ts.map +1 -1
- package/dist/core/BaseCrudApi.cjs.map +1 -1
- package/dist/core/BaseCrudApi.d.ts +2 -2
- package/dist/core/BaseCrudApi.d.ts.map +1 -1
- package/dist/core/BaseCrudApi.mjs.map +1 -1
- package/package.json +1 -1
- package/src/apis/authHistory/AuthHistoryApi.test.ts +110 -0
- package/src/apis/campaigns/CampaignsApi.test.ts +344 -0
- package/src/apis/campaigns/types.ts +26 -5
- package/src/apis/clientFeedback/ClientFeedbackApi.test.ts +76 -0
- package/src/apis/contacts/ContactsApi.test.ts +364 -0
- package/src/apis/me/MeApi.test.ts +372 -0
- package/src/apis/messages/MessagesApi.test.ts +460 -0
- package/src/apis/serviceAccessManagement/ServiceAccessManagementApi.test.ts +89 -0
- package/src/apis/stickerUsers/StickerUsersApi.test.ts +84 -0
- package/src/apis/terms/TermsApi.test.ts +196 -0
- package/src/apis/transcripts/TranscriptsApi.test.ts +63 -0
- package/src/apis/whatsappBusinessTemplates/types.ts +24 -3
- package/src/core/BaseCrudApi.ts +2 -2
|
@@ -4,6 +4,7 @@ import type { Message } from '../messages';
|
|
|
4
4
|
import type { Service } from '../services';
|
|
5
5
|
import type { Tag } from '../tags';
|
|
6
6
|
import type { User } from '../users';
|
|
7
|
+
import type { WhatsappBusinessTemplate } from '../whatsappBusinessTemplates';
|
|
7
8
|
export type CampaignStatus = 'ready' | 'queued' | 'processing' | 'paused' | 'waiting_connection' | 'canceled' | 'done' | 'insufficient_credits' | 'hsm_limit_exceeded' | 'import_error' | 'error' | 'importing_contacts' | 'preventive_break';
|
|
8
9
|
export type CampaignConfig = {
|
|
9
10
|
/** Minimum interval in ms between sends. */
|
|
@@ -57,6 +58,22 @@ export type Campaign = {
|
|
|
57
58
|
importFile?: File | null;
|
|
58
59
|
};
|
|
59
60
|
export type CampaignRelationships = 'service' | 'defaultDepartment' | 'defaultUser' | 'createdBy' | 'sentBy' | 'tags' | 'messages' | 'importFile';
|
|
61
|
+
export type CampaignTemplateParameterItem = {
|
|
62
|
+
type: string;
|
|
63
|
+
text?: string;
|
|
64
|
+
};
|
|
65
|
+
export type CampaignTemplateParameter = {
|
|
66
|
+
type: string;
|
|
67
|
+
parameters: CampaignTemplateParameterItem[];
|
|
68
|
+
sub_type?: string;
|
|
69
|
+
index?: number;
|
|
70
|
+
};
|
|
71
|
+
export type CampaignFileTemplate = {
|
|
72
|
+
blob?: undefined;
|
|
73
|
+
base64Url?: string;
|
|
74
|
+
mimetype?: string;
|
|
75
|
+
name?: string;
|
|
76
|
+
};
|
|
60
77
|
export type CreateCampaignPayload = {
|
|
61
78
|
title: string;
|
|
62
79
|
serviceId: string;
|
|
@@ -74,15 +91,15 @@ export type CreateCampaignPayload = {
|
|
|
74
91
|
mustOpenTicket?: boolean;
|
|
75
92
|
defaultDepartmentId?: string | null;
|
|
76
93
|
defaultUserId?: string | null;
|
|
77
|
-
|
|
78
|
-
parameters?: unknown;
|
|
79
|
-
fileTemplate?: unknown;
|
|
80
|
-
contacts?: unknown[];
|
|
94
|
+
contacts?: Record<string, string>[];
|
|
81
95
|
useTags?: boolean;
|
|
82
|
-
marketingIntegration?: boolean;
|
|
83
96
|
fileId?: string;
|
|
84
97
|
nameField?: string;
|
|
85
98
|
numberField?: string;
|
|
99
|
+
hsm?: WhatsappBusinessTemplate;
|
|
100
|
+
parameters?: CampaignTemplateParameter[];
|
|
101
|
+
fileTemplate?: CampaignFileTemplate;
|
|
102
|
+
marketingIntegration?: boolean;
|
|
86
103
|
};
|
|
87
104
|
export type UpdateCampaignPayload = Partial<CreateCampaignPayload>;
|
|
88
105
|
export type CampaignStatsInfo = {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/apis/campaigns/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAA;AAChD,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,UAAU,CAAA;AACpC,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,aAAa,CAAA;AAC1C,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,aAAa,CAAA;AAC1C,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,SAAS,CAAA;AAClC,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,UAAU,CAAA;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/apis/campaigns/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,11 +1,28 @@
|
|
|
1
1
|
export type WhatsappBusinessTemplateMessageType = 'text_only' | 'interactive';
|
|
2
2
|
export type WhatsappBusinessTemplateLanguage = 'pt_BR' | 'es' | 'en';
|
|
3
3
|
export type WhatsappBusinessTemplateCategory = 'AUTHENTICATION' | 'MARKETING' | 'UTILITY';
|
|
4
|
+
export type WhatsappBusinessTemplateComponentType = 'HEADER' | 'BODY' | 'FOOTER' | 'BUTTONS';
|
|
5
|
+
export type WhatsappBusinessTemplateHeaderFormat = 'TEXT' | 'IMAGE' | 'VIDEO' | 'DOCUMENT';
|
|
6
|
+
export type WhatsappBusinessTemplateButton = {
|
|
7
|
+
type: string;
|
|
8
|
+
text: string;
|
|
9
|
+
url?: string;
|
|
10
|
+
params?: string[];
|
|
11
|
+
phone_number?: string;
|
|
12
|
+
};
|
|
13
|
+
export type WhatsappBusinessTemplateComponent = {
|
|
14
|
+
type: WhatsappBusinessTemplateComponentType;
|
|
15
|
+
format?: WhatsappBusinessTemplateHeaderFormat;
|
|
16
|
+
text?: string;
|
|
17
|
+
params?: string[];
|
|
18
|
+
buttons?: WhatsappBusinessTemplateButton[];
|
|
19
|
+
code_expiration_minutes?: number;
|
|
20
|
+
};
|
|
4
21
|
export type WhatsappBusinessTemplate = {
|
|
5
22
|
id: string;
|
|
6
23
|
internalName: string | null;
|
|
7
24
|
category: string;
|
|
8
|
-
components:
|
|
25
|
+
components: WhatsappBusinessTemplateComponent[];
|
|
9
26
|
language: string;
|
|
10
27
|
name: string;
|
|
11
28
|
namespace: string;
|
|
@@ -24,7 +41,7 @@ export type WhatsappBusinessTemplate = {
|
|
|
24
41
|
export type CreateWhatsappBusinessTemplatePayload = {
|
|
25
42
|
name: string;
|
|
26
43
|
internalName: string;
|
|
27
|
-
components:
|
|
44
|
+
components: WhatsappBusinessTemplateComponent[];
|
|
28
45
|
serviceId: string;
|
|
29
46
|
messageType: WhatsappBusinessTemplateMessageType;
|
|
30
47
|
language: WhatsappBusinessTemplateLanguage;
|
|
@@ -33,7 +50,7 @@ export type CreateWhatsappBusinessTemplatePayload = {
|
|
|
33
50
|
export type UpdateWhatsappBusinessTemplatePayload = {
|
|
34
51
|
name?: string;
|
|
35
52
|
internalName?: string;
|
|
36
|
-
components?:
|
|
53
|
+
components?: WhatsappBusinessTemplateComponent[];
|
|
37
54
|
serviceId?: string;
|
|
38
55
|
messageType?: WhatsappBusinessTemplateMessageType;
|
|
39
56
|
language?: WhatsappBusinessTemplateLanguage;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/apis/whatsappBusinessTemplates/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,mCAAmC,GAAG,WAAW,GAAG,aAAa,CAAA;AAE7E,MAAM,MAAM,gCAAgC,GAAG,OAAO,GAAG,IAAI,GAAG,IAAI,CAAA;AAEpE,MAAM,MAAM,gCAAgC,GAAG,gBAAgB,GAAG,WAAW,GAAG,SAAS,CAAA;AAEzF,MAAM,MAAM,
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/apis/whatsappBusinessTemplates/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,mCAAmC,GAAG,WAAW,GAAG,aAAa,CAAA;AAE7E,MAAM,MAAM,gCAAgC,GAAG,OAAO,GAAG,IAAI,GAAG,IAAI,CAAA;AAEpE,MAAM,MAAM,gCAAgC,GAAG,gBAAgB,GAAG,WAAW,GAAG,SAAS,CAAA;AAEzF,MAAM,MAAM,qCAAqC,GAAG,QAAQ,GAAG,MAAM,GAAG,QAAQ,GAAG,SAAS,CAAA;AAE5F,MAAM,MAAM,oCAAoC,GAAG,MAAM,GAAG,OAAO,GAAG,OAAO,GAAG,UAAU,CAAA;AAE1F,MAAM,MAAM,8BAA8B,GAAG;IAC3C,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,CAAA;IACZ,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,MAAM,CAAC,EAAE,MAAM,EAAE,CAAA;IACjB,YAAY,CAAC,EAAE,MAAM,CAAA;CACtB,CAAA;AAED,MAAM,MAAM,iCAAiC,GAAG;IAC9C,IAAI,EAAE,qCAAqC,CAAA;IAC3C,MAAM,CAAC,EAAE,oCAAoC,CAAA;IAC7C,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,MAAM,CAAC,EAAE,MAAM,EAAE,CAAA;IACjB,OAAO,CAAC,EAAE,8BAA8B,EAAE,CAAA;IAC1C,uBAAuB,CAAC,EAAE,MAAM,CAAA;CACjC,CAAA;AAED,MAAM,MAAM,wBAAwB,GAAG;IACrC,EAAE,EAAE,MAAM,CAAA;IACV,YAAY,EAAE,MAAM,GAAG,IAAI,CAAA;IAC3B,QAAQ,EAAE,MAAM,CAAA;IAChB,UAAU,EAAE,iCAAiC,EAAE,CAAA;IAC/C,QAAQ,EAAE,MAAM,CAAA;IAChB,IAAI,EAAE,MAAM,CAAA;IACZ,SAAS,EAAE,MAAM,CAAA;IACjB,cAAc,EAAE,MAAM,GAAG,IAAI,CAAA;IAC7B,MAAM,EAAE,MAAM,CAAA;IACd,WAAW,EAAE,MAAM,CAAA;IACnB,SAAS,EAAE,MAAM,CAAA;IACjB,SAAS,EAAE,MAAM,CAAA;IACjB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAA;IACxB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAA;IACtB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAA;IACzB,SAAS,EAAE,MAAM,CAAA;IACjB,SAAS,EAAE,MAAM,CAAA;IACjB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAA;CACzB,CAAA;AAED,MAAM,MAAM,qCAAqC,GAAG;IAClD,IAAI,EAAE,MAAM,CAAA;IACZ,YAAY,EAAE,MAAM,CAAA;IACpB,UAAU,EAAE,iCAAiC,EAAE,CAAA;IAC/C,SAAS,EAAE,MAAM,CAAA;IACjB,WAAW,EAAE,mCAAmC,CAAA;IAChD,QAAQ,EAAE,gCAAgC,CAAA;IAC1C,QAAQ,EAAE,gCAAgC,CAAA;CAC3C,CAAA;AAED,MAAM,MAAM,qCAAqC,GAAG;IAClD,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,UAAU,CAAC,EAAE,iCAAiC,EAAE,CAAA;IAChD,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,WAAW,CAAC,EAAE,mCAAmC,CAAA;IACjD,QAAQ,CAAC,EAAE,gCAAgC,CAAA;IAC3C,QAAQ,CAAC,EAAE,gCAAgC,CAAA;CAC5C,CAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BaseCrudApi.cjs","names":[],"sources":["../../src/core/BaseCrudApi.ts"],"sourcesContent":["import qs from 'qs'\nimport type { ApiClient } from './ApiClient'\nimport type { CrudApi, GetByIdQuery, ListQuery, Paginated } from './types'\nexport type {\n WhereClause,\n IncludeItem,\n ListQuery,\n GetByIdQuery,\n Paginated,\n HasGetMany,\n HasGetById,\n HasCreate,\n HasUpdateById,\n HasDeleteById,\n CrudApi,\n} from './types'\n\nexport class BaseCrudApi<\n TResponse,\n TCreate,\n TUpdate = TCreate,\n TQuery extends ListQuery<TResponse> = ListQuery<TResponse>,\n> implements CrudApi<TResponse, TCreate, TUpdate, TQuery> {\n
|
|
1
|
+
{"version":3,"file":"BaseCrudApi.cjs","names":[],"sources":["../../src/core/BaseCrudApi.ts"],"sourcesContent":["import qs from 'qs'\nimport type { ApiClient } from './ApiClient'\nimport type { CrudApi, GetByIdQuery, ListQuery, Paginated } from './types'\nexport type {\n WhereClause,\n IncludeItem,\n ListQuery,\n GetByIdQuery,\n Paginated,\n HasGetMany,\n HasGetById,\n HasCreate,\n HasUpdateById,\n HasDeleteById,\n CrudApi,\n} from './types'\n\nexport class BaseCrudApi<\n TResponse,\n TCreate,\n TUpdate = TCreate,\n TQuery extends ListQuery<TResponse> = ListQuery<TResponse>,\n> implements CrudApi<TResponse, TCreate, TUpdate, TQuery> {\n public readonly client: ApiClient\n public readonly basePath: string\n\n constructor(client: ApiClient, basePath: string) {\n this.client = client\n this.basePath = basePath.replace(/\\/$/, '')\n this.getMany = this.getMany.bind(this)\n this.getById = this.getById.bind(this)\n this.create = this.create.bind(this)\n this.updateById = this.updateById.bind(this)\n this.deleteById = this.deleteById.bind(this)\n }\n\n getMany(\n query: TQuery & { paginate: false },\n headers?: Record<string, string>,\n ): Promise<TResponse[]>\n getMany(\n query?: TQuery & { paginate?: true },\n headers?: Record<string, string>,\n ): Promise<Paginated<TResponse>>\n getMany(\n query?: TQuery,\n headers?: Record<string, string>,\n ): Promise<Paginated<TResponse> | TResponse[]> {\n const queryString = query ? `?${qs.stringify(query)}` : ''\n return this.client.get<Paginated<TResponse> | TResponse[]>(\n `${this.basePath}${queryString}`,\n headers,\n )\n }\n\n /**\n * Returns a single resource by ID.\n * @permissions $resourceName.view\n */\n getById(\n id: string,\n query?: GetByIdQuery<TResponse>,\n headers?: Record<string, string>,\n ): Promise<TResponse> {\n const queryString = query ? `?${qs.stringify(query)}` : ''\n return this.client.get<TResponse>(`${this.basePath}/${id}${queryString}`, headers)\n }\n\n /**\n * Creates a new resource.\n * @permissions $resourceName.create\n */\n create(body: TCreate, headers?: Record<string, string>): Promise<TResponse> {\n return this.client.post<TResponse, TCreate>(this.basePath, body, headers)\n }\n\n /**\n * Updates an existing resource by ID.\n * @permissions $resourceName.update\n */\n updateById(id: string, body: TUpdate, headers?: Record<string, string>): Promise<TResponse> {\n return this.client.put<TResponse, TUpdate>(`${this.basePath}/${id}`, body, headers)\n }\n\n /**\n * Deletes a resource by ID.\n * @permissions $resourceName.delete\n */\n deleteById(id: string, headers?: Record<string, string>): Promise<TResponse> {\n return this.client.delete<TResponse>(`${this.basePath}/${id}`, headers)\n }\n}\n"],"mappings":";;;;;;AAiBA,IAAa,cAAb,MAK0D;CACxD,AAAgB;CAChB,AAAgB;CAEhB,YAAY,QAAmB,UAAkB;AAC/C,OAAK,SAAS;AACd,OAAK,WAAW,SAAS,QAAQ,OAAO,GAAG;AAC3C,OAAK,UAAU,KAAK,QAAQ,KAAK,KAAK;AACtC,OAAK,UAAU,KAAK,QAAQ,KAAK,KAAK;AACtC,OAAK,SAAS,KAAK,OAAO,KAAK,KAAK;AACpC,OAAK,aAAa,KAAK,WAAW,KAAK,KAAK;AAC5C,OAAK,aAAa,KAAK,WAAW,KAAK,KAAK;;CAW9C,QACE,OACA,SAC6C;EAC7C,MAAM,cAAc,QAAQ,IAAI,WAAG,UAAU,MAAM,KAAK;AACxD,SAAO,KAAK,OAAO,IACjB,GAAG,KAAK,WAAW,eACnB,QACD;;;;;;CAOH,QACE,IACA,OACA,SACoB;EACpB,MAAM,cAAc,QAAQ,IAAI,WAAG,UAAU,MAAM,KAAK;AACxD,SAAO,KAAK,OAAO,IAAe,GAAG,KAAK,SAAS,GAAG,KAAK,eAAe,QAAQ;;;;;;CAOpF,OAAO,MAAe,SAAsD;AAC1E,SAAO,KAAK,OAAO,KAAyB,KAAK,UAAU,MAAM,QAAQ;;;;;;CAO3E,WAAW,IAAY,MAAe,SAAsD;AAC1F,SAAO,KAAK,OAAO,IAAwB,GAAG,KAAK,SAAS,GAAG,MAAM,MAAM,QAAQ;;;;;;CAOrF,WAAW,IAAY,SAAsD;AAC3E,SAAO,KAAK,OAAO,OAAkB,GAAG,KAAK,SAAS,GAAG,MAAM,QAAQ"}
|
|
@@ -2,8 +2,8 @@ import type { ApiClient } from './ApiClient';
|
|
|
2
2
|
import type { CrudApi, GetByIdQuery, ListQuery, Paginated } from './types';
|
|
3
3
|
export type { WhereClause, IncludeItem, ListQuery, GetByIdQuery, Paginated, HasGetMany, HasGetById, HasCreate, HasUpdateById, HasDeleteById, CrudApi, } from './types';
|
|
4
4
|
export declare class BaseCrudApi<TResponse, TCreate, TUpdate = TCreate, TQuery extends ListQuery<TResponse> = ListQuery<TResponse>> implements CrudApi<TResponse, TCreate, TUpdate, TQuery> {
|
|
5
|
-
|
|
6
|
-
|
|
5
|
+
readonly client: ApiClient;
|
|
6
|
+
readonly basePath: string;
|
|
7
7
|
constructor(client: ApiClient, basePath: string);
|
|
8
8
|
getMany(query: TQuery & {
|
|
9
9
|
paginate: false;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BaseCrudApi.d.ts","sourceRoot":"","sources":["../../src/core/BaseCrudApi.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAA;AAC5C,OAAO,KAAK,EAAE,OAAO,EAAE,YAAY,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,SAAS,CAAA;AAC1E,YAAY,EACV,WAAW,EACX,WAAW,EACX,SAAS,EACT,YAAY,EACZ,SAAS,EACT,UAAU,EACV,UAAU,EACV,SAAS,EACT,aAAa,EACb,aAAa,EACb,OAAO,GACR,MAAM,SAAS,CAAA;AAEhB,qBAAa,WAAW,CACtB,SAAS,EACT,OAAO,EACP,OAAO,GAAG,OAAO,EACjB,MAAM,SAAS,SAAS,CAAC,SAAS,CAAC,GAAG,SAAS,CAAC,SAAS,CAAC,CAC1D,YAAW,OAAO,CAAC,SAAS,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,CAAC;IACvD,
|
|
1
|
+
{"version":3,"file":"BaseCrudApi.d.ts","sourceRoot":"","sources":["../../src/core/BaseCrudApi.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAA;AAC5C,OAAO,KAAK,EAAE,OAAO,EAAE,YAAY,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,SAAS,CAAA;AAC1E,YAAY,EACV,WAAW,EACX,WAAW,EACX,SAAS,EACT,YAAY,EACZ,SAAS,EACT,UAAU,EACV,UAAU,EACV,SAAS,EACT,aAAa,EACb,aAAa,EACb,OAAO,GACR,MAAM,SAAS,CAAA;AAEhB,qBAAa,WAAW,CACtB,SAAS,EACT,OAAO,EACP,OAAO,GAAG,OAAO,EACjB,MAAM,SAAS,SAAS,CAAC,SAAS,CAAC,GAAG,SAAS,CAAC,SAAS,CAAC,CAC1D,YAAW,OAAO,CAAC,SAAS,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,CAAC;IACvD,SAAgB,MAAM,EAAE,SAAS,CAAA;IACjC,SAAgB,QAAQ,EAAE,MAAM,CAAA;gBAEpB,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM;IAU/C,OAAO,CACL,KAAK,EAAE,MAAM,GAAG;QAAE,QAAQ,EAAE,KAAK,CAAA;KAAE,EACnC,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAC/B,OAAO,CAAC,SAAS,EAAE,CAAC;IACvB,OAAO,CACL,KAAK,CAAC,EAAE,MAAM,GAAG;QAAE,QAAQ,CAAC,EAAE,IAAI,CAAA;KAAE,EACpC,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAC/B,OAAO,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;IAYhC;;;OAGG;IACH,OAAO,CACL,EAAE,EAAE,MAAM,EACV,KAAK,CAAC,EAAE,YAAY,CAAC,SAAS,CAAC,EAC/B,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAC/B,OAAO,CAAC,SAAS,CAAC;IAKrB;;;OAGG;IACH,MAAM,CAAC,IAAI,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC,SAAS,CAAC;IAI3E;;;OAGG;IACH,UAAU,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC,SAAS,CAAC;IAI3F;;;OAGG;IACH,UAAU,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC,SAAS,CAAC;CAG7E"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BaseCrudApi.mjs","names":[],"sources":["../../src/core/BaseCrudApi.ts"],"sourcesContent":["import qs from 'qs'\nimport type { ApiClient } from './ApiClient'\nimport type { CrudApi, GetByIdQuery, ListQuery, Paginated } from './types'\nexport type {\n WhereClause,\n IncludeItem,\n ListQuery,\n GetByIdQuery,\n Paginated,\n HasGetMany,\n HasGetById,\n HasCreate,\n HasUpdateById,\n HasDeleteById,\n CrudApi,\n} from './types'\n\nexport class BaseCrudApi<\n TResponse,\n TCreate,\n TUpdate = TCreate,\n TQuery extends ListQuery<TResponse> = ListQuery<TResponse>,\n> implements CrudApi<TResponse, TCreate, TUpdate, TQuery> {\n
|
|
1
|
+
{"version":3,"file":"BaseCrudApi.mjs","names":[],"sources":["../../src/core/BaseCrudApi.ts"],"sourcesContent":["import qs from 'qs'\nimport type { ApiClient } from './ApiClient'\nimport type { CrudApi, GetByIdQuery, ListQuery, Paginated } from './types'\nexport type {\n WhereClause,\n IncludeItem,\n ListQuery,\n GetByIdQuery,\n Paginated,\n HasGetMany,\n HasGetById,\n HasCreate,\n HasUpdateById,\n HasDeleteById,\n CrudApi,\n} from './types'\n\nexport class BaseCrudApi<\n TResponse,\n TCreate,\n TUpdate = TCreate,\n TQuery extends ListQuery<TResponse> = ListQuery<TResponse>,\n> implements CrudApi<TResponse, TCreate, TUpdate, TQuery> {\n public readonly client: ApiClient\n public readonly basePath: string\n\n constructor(client: ApiClient, basePath: string) {\n this.client = client\n this.basePath = basePath.replace(/\\/$/, '')\n this.getMany = this.getMany.bind(this)\n this.getById = this.getById.bind(this)\n this.create = this.create.bind(this)\n this.updateById = this.updateById.bind(this)\n this.deleteById = this.deleteById.bind(this)\n }\n\n getMany(\n query: TQuery & { paginate: false },\n headers?: Record<string, string>,\n ): Promise<TResponse[]>\n getMany(\n query?: TQuery & { paginate?: true },\n headers?: Record<string, string>,\n ): Promise<Paginated<TResponse>>\n getMany(\n query?: TQuery,\n headers?: Record<string, string>,\n ): Promise<Paginated<TResponse> | TResponse[]> {\n const queryString = query ? `?${qs.stringify(query)}` : ''\n return this.client.get<Paginated<TResponse> | TResponse[]>(\n `${this.basePath}${queryString}`,\n headers,\n )\n }\n\n /**\n * Returns a single resource by ID.\n * @permissions $resourceName.view\n */\n getById(\n id: string,\n query?: GetByIdQuery<TResponse>,\n headers?: Record<string, string>,\n ): Promise<TResponse> {\n const queryString = query ? `?${qs.stringify(query)}` : ''\n return this.client.get<TResponse>(`${this.basePath}/${id}${queryString}`, headers)\n }\n\n /**\n * Creates a new resource.\n * @permissions $resourceName.create\n */\n create(body: TCreate, headers?: Record<string, string>): Promise<TResponse> {\n return this.client.post<TResponse, TCreate>(this.basePath, body, headers)\n }\n\n /**\n * Updates an existing resource by ID.\n * @permissions $resourceName.update\n */\n updateById(id: string, body: TUpdate, headers?: Record<string, string>): Promise<TResponse> {\n return this.client.put<TResponse, TUpdate>(`${this.basePath}/${id}`, body, headers)\n }\n\n /**\n * Deletes a resource by ID.\n * @permissions $resourceName.delete\n */\n deleteById(id: string, headers?: Record<string, string>): Promise<TResponse> {\n return this.client.delete<TResponse>(`${this.basePath}/${id}`, headers)\n }\n}\n"],"mappings":";;;AAiBA,IAAa,cAAb,MAK0D;CACxD,AAAgB;CAChB,AAAgB;CAEhB,YAAY,QAAmB,UAAkB;AAC/C,OAAK,SAAS;AACd,OAAK,WAAW,SAAS,QAAQ,OAAO,GAAG;AAC3C,OAAK,UAAU,KAAK,QAAQ,KAAK,KAAK;AACtC,OAAK,UAAU,KAAK,QAAQ,KAAK,KAAK;AACtC,OAAK,SAAS,KAAK,OAAO,KAAK,KAAK;AACpC,OAAK,aAAa,KAAK,WAAW,KAAK,KAAK;AAC5C,OAAK,aAAa,KAAK,WAAW,KAAK,KAAK;;CAW9C,QACE,OACA,SAC6C;EAC7C,MAAM,cAAc,QAAQ,IAAI,GAAG,UAAU,MAAM,KAAK;AACxD,SAAO,KAAK,OAAO,IACjB,GAAG,KAAK,WAAW,eACnB,QACD;;;;;;CAOH,QACE,IACA,OACA,SACoB;EACpB,MAAM,cAAc,QAAQ,IAAI,GAAG,UAAU,MAAM,KAAK;AACxD,SAAO,KAAK,OAAO,IAAe,GAAG,KAAK,SAAS,GAAG,KAAK,eAAe,QAAQ;;;;;;CAOpF,OAAO,MAAe,SAAsD;AAC1E,SAAO,KAAK,OAAO,KAAyB,KAAK,UAAU,MAAM,QAAQ;;;;;;CAO3E,WAAW,IAAY,MAAe,SAAsD;AAC1F,SAAO,KAAK,OAAO,IAAwB,GAAG,KAAK,SAAS,GAAG,MAAM,MAAM,QAAQ;;;;;;CAOrF,WAAW,IAAY,SAAsD;AAC3E,SAAO,KAAK,OAAO,OAAkB,GAAG,KAAK,SAAS,GAAG,MAAM,QAAQ"}
|
package/package.json
CHANGED
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
import { beforeEach, describe, expect, it, vi } from 'vitest'
|
|
2
|
+
import { AuthHistoryApi } from './AuthHistoryApi'
|
|
3
|
+
import type { ApiClient } from '../../core/ApiClient'
|
|
4
|
+
import type { AuthHistory } from './types'
|
|
5
|
+
import type { Paginated } from '../../core/types'
|
|
6
|
+
|
|
7
|
+
// ── Mock client factory ──────────────────────────────────────────────
|
|
8
|
+
|
|
9
|
+
function createMockClient(): ApiClient {
|
|
10
|
+
return {
|
|
11
|
+
setAccessToken: vi.fn().mockReturnThis(),
|
|
12
|
+
request: vi.fn(),
|
|
13
|
+
get: vi.fn(),
|
|
14
|
+
post: vi.fn(),
|
|
15
|
+
put: vi.fn(),
|
|
16
|
+
patch: vi.fn(),
|
|
17
|
+
delete: vi.fn(),
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
// ── Fixtures ─────────────────────────────────────────────────────────
|
|
22
|
+
|
|
23
|
+
const entry: AuthHistory = {
|
|
24
|
+
id: 'ah-1',
|
|
25
|
+
event: 'auth',
|
|
26
|
+
userId: 'user-1',
|
|
27
|
+
accountId: 'acc-1',
|
|
28
|
+
branch: 'main',
|
|
29
|
+
originIP: '127.0.0.1',
|
|
30
|
+
originUA: 'Mozilla/5.0',
|
|
31
|
+
createdAt: '2024-01-01T00:00:00Z',
|
|
32
|
+
updatedAt: '2024-01-01T00:00:00Z',
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
const paginated: Paginated<AuthHistory> = {
|
|
36
|
+
data: [entry],
|
|
37
|
+
total: 1,
|
|
38
|
+
limit: 10,
|
|
39
|
+
skip: 0,
|
|
40
|
+
currentPage: 1,
|
|
41
|
+
lastPage: 1,
|
|
42
|
+
from: 1,
|
|
43
|
+
to: 1,
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
// ── Tests ────────────────────────────────────────────────────────────
|
|
47
|
+
|
|
48
|
+
describe('AuthHistoryApi', () => {
|
|
49
|
+
let client: ReturnType<typeof createMockClient>
|
|
50
|
+
let api: AuthHistoryApi
|
|
51
|
+
|
|
52
|
+
beforeEach(() => {
|
|
53
|
+
client = createMockClient()
|
|
54
|
+
api = new AuthHistoryApi(client)
|
|
55
|
+
})
|
|
56
|
+
|
|
57
|
+
// ── getMany ──────────────────────────────────────────────────────
|
|
58
|
+
|
|
59
|
+
describe('getMany', () => {
|
|
60
|
+
it('calls client.get with /auth-history when no query is provided', async () => {
|
|
61
|
+
vi.mocked(client.get).mockResolvedValue(paginated)
|
|
62
|
+
const result = await api.getMany()
|
|
63
|
+
expect(client.get).toHaveBeenCalledWith('/auth-history', undefined)
|
|
64
|
+
expect(result).toEqual(paginated)
|
|
65
|
+
})
|
|
66
|
+
|
|
67
|
+
it('serializes query parameters', async () => {
|
|
68
|
+
vi.mocked(client.get).mockResolvedValue(paginated)
|
|
69
|
+
await api.getMany({ page: 2, perPage: 5 })
|
|
70
|
+
const url = vi.mocked(client.get).mock.calls[0][0] as string
|
|
71
|
+
expect(url).toContain('/auth-history?')
|
|
72
|
+
expect(url).toContain('page=2')
|
|
73
|
+
})
|
|
74
|
+
|
|
75
|
+
it('forwards custom headers', async () => {
|
|
76
|
+
vi.mocked(client.get).mockResolvedValue(paginated)
|
|
77
|
+
const headers = { 'X-Custom': 'h' }
|
|
78
|
+
await api.getMany(undefined, headers)
|
|
79
|
+
expect(client.get).toHaveBeenCalledWith('/auth-history', headers)
|
|
80
|
+
})
|
|
81
|
+
|
|
82
|
+
it('propagates errors from client.get', async () => {
|
|
83
|
+
vi.mocked(client.get).mockRejectedValue(new Error('Forbidden'))
|
|
84
|
+
await expect(api.getMany()).rejects.toThrow('Forbidden')
|
|
85
|
+
})
|
|
86
|
+
})
|
|
87
|
+
|
|
88
|
+
// ── getById ──────────────────────────────────────────────────────
|
|
89
|
+
|
|
90
|
+
describe('getById', () => {
|
|
91
|
+
it('calls client.get with /auth-history/:id', async () => {
|
|
92
|
+
vi.mocked(client.get).mockResolvedValue(entry)
|
|
93
|
+
const result = await api.getById('ah-1')
|
|
94
|
+
expect(client.get).toHaveBeenCalledWith('/auth-history/ah-1', undefined)
|
|
95
|
+
expect(result).toEqual(entry)
|
|
96
|
+
})
|
|
97
|
+
|
|
98
|
+
it('forwards custom headers', async () => {
|
|
99
|
+
vi.mocked(client.get).mockResolvedValue(entry)
|
|
100
|
+
const headers = { 'X-Custom': 'h' }
|
|
101
|
+
await api.getById('ah-1', headers)
|
|
102
|
+
expect(client.get).toHaveBeenCalledWith('/auth-history/ah-1', headers)
|
|
103
|
+
})
|
|
104
|
+
|
|
105
|
+
it('propagates errors from client.get', async () => {
|
|
106
|
+
vi.mocked(client.get).mockRejectedValue(new Error('Not found'))
|
|
107
|
+
await expect(api.getById('missing')).rejects.toThrow('Not found')
|
|
108
|
+
})
|
|
109
|
+
})
|
|
110
|
+
})
|