@ikatec/digisac-api-sdk 4.0.0 → 4.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/README.md +29 -2
- package/dist/apis/authHistory/AuthHistoryApi.cjs +3 -9
- package/dist/apis/authHistory/AuthHistoryApi.cjs.map +1 -1
- package/dist/apis/authHistory/AuthHistoryApi.d.ts +3 -4
- package/dist/apis/authHistory/AuthHistoryApi.d.ts.map +1 -1
- package/dist/apis/authHistory/AuthHistoryApi.mjs +3 -7
- package/dist/apis/authHistory/AuthHistoryApi.mjs.map +1 -1
- package/dist/apis/clientFeedback/ClientFeedbackApi.cjs +2 -5
- package/dist/apis/clientFeedback/ClientFeedbackApi.cjs.map +1 -1
- package/dist/apis/clientFeedback/ClientFeedbackApi.d.ts +2 -4
- package/dist/apis/clientFeedback/ClientFeedbackApi.d.ts.map +1 -1
- package/dist/apis/clientFeedback/ClientFeedbackApi.mjs +3 -5
- package/dist/apis/clientFeedback/ClientFeedbackApi.mjs.map +1 -1
- package/dist/apis/contacts/ContactsApi.cjs +2 -2
- package/dist/apis/contacts/ContactsApi.cjs.map +1 -1
- package/dist/apis/contacts/ContactsApi.mjs +2 -2
- package/dist/apis/contacts/ContactsApi.mjs.map +1 -1
- package/dist/apis/me/MeApi.cjs +2 -5
- package/dist/apis/me/MeApi.cjs.map +1 -1
- package/dist/apis/me/MeApi.d.ts +2 -4
- package/dist/apis/me/MeApi.d.ts.map +1 -1
- package/dist/apis/me/MeApi.mjs +3 -5
- package/dist/apis/me/MeApi.mjs.map +1 -1
- package/dist/apis/serviceAccessManagement/ServiceAccessManagementApi.cjs +3 -9
- package/dist/apis/serviceAccessManagement/ServiceAccessManagementApi.cjs.map +1 -1
- package/dist/apis/serviceAccessManagement/ServiceAccessManagementApi.d.ts +3 -4
- package/dist/apis/serviceAccessManagement/ServiceAccessManagementApi.d.ts.map +1 -1
- package/dist/apis/serviceAccessManagement/ServiceAccessManagementApi.mjs +3 -7
- package/dist/apis/serviceAccessManagement/ServiceAccessManagementApi.mjs.map +1 -1
- package/dist/apis/stickerUsers/StickerUsersApi.cjs +3 -9
- package/dist/apis/stickerUsers/StickerUsersApi.cjs.map +1 -1
- package/dist/apis/stickerUsers/StickerUsersApi.d.ts +3 -4
- package/dist/apis/stickerUsers/StickerUsersApi.d.ts.map +1 -1
- package/dist/apis/stickerUsers/StickerUsersApi.mjs +3 -7
- package/dist/apis/stickerUsers/StickerUsersApi.mjs.map +1 -1
- package/dist/apis/terms/TermsApi.cjs +3 -12
- package/dist/apis/terms/TermsApi.cjs.map +1 -1
- package/dist/apis/terms/TermsApi.d.ts +2 -4
- package/dist/apis/terms/TermsApi.d.ts.map +1 -1
- package/dist/apis/terms/TermsApi.mjs +3 -10
- package/dist/apis/terms/TermsApi.mjs.map +1 -1
- package/dist/apis/transcripts/TranscriptsApi.cjs +2 -5
- package/dist/apis/transcripts/TranscriptsApi.cjs.map +1 -1
- package/dist/apis/transcripts/TranscriptsApi.d.ts +2 -4
- package/dist/apis/transcripts/TranscriptsApi.d.ts.map +1 -1
- package/dist/apis/transcripts/TranscriptsApi.mjs +3 -5
- package/dist/apis/transcripts/TranscriptsApi.mjs.map +1 -1
- package/dist/core/ApiClient.d.ts +3 -0
- package/dist/core/ApiClient.d.ts.map +1 -1
- package/dist/core/ArchivableCrudApi.cjs +0 -2
- package/dist/core/ArchivableCrudApi.cjs.map +1 -1
- package/dist/core/ArchivableCrudApi.d.ts.map +1 -1
- package/dist/core/ArchivableCrudApi.mjs +0 -2
- package/dist/core/ArchivableCrudApi.mjs.map +1 -1
- package/dist/core/BaseApi.cjs +34 -0
- package/dist/core/BaseApi.cjs.map +1 -0
- package/dist/core/BaseApi.d.ts +20 -0
- package/dist/core/BaseApi.d.ts.map +1 -0
- package/dist/core/BaseApi.mjs +33 -0
- package/dist/core/BaseApi.mjs.map +1 -0
- package/dist/core/BaseApiClient.cjs +4 -1
- package/dist/core/BaseApiClient.cjs.map +1 -1
- package/dist/core/BaseApiClient.d.ts +7 -1
- package/dist/core/BaseApiClient.d.ts.map +1 -1
- package/dist/core/BaseApiClient.mjs +4 -1
- package/dist/core/BaseApiClient.mjs.map +1 -1
- package/dist/core/BaseCrudApi.cjs +6 -16
- package/dist/core/BaseCrudApi.cjs.map +1 -1
- package/dist/core/BaseCrudApi.d.ts +3 -2
- package/dist/core/BaseCrudApi.d.ts.map +1 -1
- package/dist/core/BaseCrudApi.mjs +6 -14
- package/dist/core/BaseCrudApi.mjs.map +1 -1
- package/dist/core/bindMethods.cjs +24 -0
- package/dist/core/bindMethods.cjs.map +1 -0
- package/dist/core/bindMethods.d.ts +7 -0
- package/dist/core/bindMethods.d.ts.map +1 -0
- package/dist/core/bindMethods.mjs +22 -0
- package/dist/core/bindMethods.mjs.map +1 -0
- package/dist/core/index.cjs +2 -0
- package/dist/core/index.d.ts +3 -0
- package/dist/core/index.d.ts.map +1 -1
- package/dist/core/index.mjs +2 -1
- package/dist/core/queryString.cjs +22 -0
- package/dist/core/queryString.cjs.map +1 -0
- package/dist/core/queryString.d.ts +14 -0
- package/dist/core/queryString.d.ts.map +1 -0
- package/dist/core/queryString.mjs +18 -0
- package/dist/core/queryString.mjs.map +1 -0
- package/dist/core/types.d.ts +2 -0
- package/dist/core/types.d.ts.map +1 -1
- package/dist/core/withQueryFormat.cjs +42 -0
- package/dist/core/withQueryFormat.cjs.map +1 -0
- package/dist/core/withQueryFormat.d.ts +10 -0
- package/dist/core/withQueryFormat.d.ts.map +1 -0
- package/dist/core/withQueryFormat.mjs +40 -0
- package/dist/core/withQueryFormat.mjs.map +1 -0
- package/dist/index.cjs +2 -0
- package/dist/index.mjs +2 -1
- package/package.json +1 -1
- package/src/apis/authHistory/AuthHistoryApi.test.ts +1 -1
- package/src/apis/authHistory/AuthHistoryApi.ts +10 -10
- package/src/apis/campaigns/CampaignsApi.test.ts +1 -1
- package/src/apis/clientFeedback/ClientFeedbackApi.ts +5 -7
- package/src/apis/contacts/ContactsApi.test.ts +1 -1
- package/src/apis/contacts/ContactsApi.ts +2 -2
- package/src/apis/me/MeApi.ts +2 -8
- package/src/apis/messages/MessagesApi.test.ts +2 -2
- package/src/apis/queryFormat.test.ts +198 -0
- package/src/apis/serviceAccessManagement/ServiceAccessManagementApi.test.ts +2 -2
- package/src/apis/serviceAccessManagement/ServiceAccessManagementApi.ts +10 -10
- package/src/apis/stickerUsers/StickerUsersApi.test.ts +1 -1
- package/src/apis/stickerUsers/StickerUsersApi.ts +7 -10
- package/src/apis/terms/TermsApi.ts +3 -12
- package/src/apis/transcripts/TranscriptsApi.ts +2 -7
- package/src/core/ApiClient.ts +4 -0
- package/src/core/ArchivableCrudApi.ts +0 -2
- package/src/core/BaseApi.test.ts +164 -0
- package/src/core/BaseApi.ts +32 -0
- package/src/core/BaseApiClient.test.ts +10 -0
- package/src/core/BaseApiClient.ts +9 -1
- package/src/core/BaseCrudApi.test-d.ts +9 -0
- package/src/core/BaseCrudApi.test.ts +131 -60
- package/src/core/BaseCrudApi.ts +14 -14
- package/src/core/bindMethods.ts +26 -0
- package/src/core/index.ts +3 -0
- package/src/core/queryString.test.ts +71 -0
- package/src/core/queryString.ts +30 -0
- package/src/core/types.ts +5 -0
- package/src/core/withQueryFormat.test.ts +136 -0
- package/src/core/withQueryFormat.ts +47 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BaseCrudApi.cjs","names":[],"sources":["../../src/core/BaseCrudApi.ts"],"sourcesContent":["import
|
|
1
|
+
{"version":3,"file":"BaseCrudApi.cjs","names":["BaseApi"],"sources":["../../src/core/BaseCrudApi.ts"],"sourcesContent":["import type { ApiClient } from './ApiClient'\nimport { BaseApi } from './BaseApi'\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>\n extends BaseApi\n implements CrudApi<TResponse, TCreate, TUpdate, TQuery>\n{\n public readonly basePath: string\n\n constructor(client: ApiClient, basePath: string) {\n super(client)\n this.basePath = basePath.replace(/\\/$/, '')\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 getMany(\n query?: TQuery,\n headers?: Record<string, string>,\n ): Promise<Paginated<TResponse> | TResponse[]> {\n const queryString = this.toQueryString(query)\n return this.client.get<Paginated<TResponse> | TResponse[]>(\n `${this.basePath}${queryString}`,\n headers,\n )\n }\n\n /**\n * Returns the first resource matching the query, or `null` when none match.\n * Convenience over `getMany` with `limit: 1`.\n * @permissions $resourceName.view\n */\n async getOne(query?: TQuery, headers?: Record<string, string>): Promise<TResponse | null> {\n const results = await this.getMany(\n { ...query, limit: 1, paginate: false } as TQuery & { paginate: false },\n headers,\n )\n // An empty response body resolves to `undefined`.\n return results?.[0] ?? null\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 return this.client.get<TResponse>(`${this.basePath}/${id}${this.toQueryString(query)}`, 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,cAMUA,6BAEV;CACE,AAAgB;CAEhB,YAAY,QAAmB,UAAkB;AAC/C,QAAM,OAAO;AACb,OAAK,WAAW,SAAS,QAAQ,OAAO,GAAG;;CAe7C,QACE,OACA,SAC6C;EAC7C,MAAM,cAAc,KAAK,cAAc,MAAM;AAC7C,SAAO,KAAK,OAAO,IACjB,GAAG,KAAK,WAAW,eACnB,QACD;;;;;;;CAQH,MAAM,OAAO,OAAgB,SAA6D;AAMxF,UALgB,MAAM,KAAK,QACzB;GAAE,GAAG;GAAO,OAAO;GAAG,UAAU;GAAO,EACvC,QACD,IAEgB,MAAM;;;;;;CAOzB,QACE,IACA,OACA,SACoB;AACpB,SAAO,KAAK,OAAO,IAAe,GAAG,KAAK,SAAS,GAAG,KAAK,KAAK,cAAc,MAAM,IAAI,QAAQ;;;;;;CAOlG,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"}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import type { ApiClient } from './ApiClient';
|
|
2
|
+
import { BaseApi } from './BaseApi';
|
|
2
3
|
import type { CrudApi, GetByIdQuery, ListQuery, Paginated } from './types';
|
|
3
4
|
export type { WhereClause, IncludeItem, ListQuery, GetByIdQuery, Paginated, HasGetMany, HasGetById, HasCreate, HasUpdateById, HasDeleteById, CrudApi, } from './types';
|
|
4
|
-
export declare class BaseCrudApi<TResponse, TCreate, TUpdate = TCreate, TQuery extends ListQuery<TResponse> = ListQuery<TResponse>> implements CrudApi<TResponse, TCreate, TUpdate, TQuery> {
|
|
5
|
-
readonly client: ApiClient;
|
|
5
|
+
export declare class BaseCrudApi<TResponse, TCreate, TUpdate = TCreate, TQuery extends ListQuery<TResponse> = ListQuery<TResponse>> extends BaseApi implements CrudApi<TResponse, TCreate, TUpdate, TQuery> {
|
|
6
6
|
readonly basePath: string;
|
|
7
7
|
constructor(client: ApiClient, basePath: string);
|
|
8
8
|
getMany(query: TQuery & {
|
|
@@ -11,6 +11,7 @@ export declare class BaseCrudApi<TResponse, TCreate, TUpdate = TCreate, TQuery e
|
|
|
11
11
|
getMany(query?: TQuery & {
|
|
12
12
|
paginate?: true;
|
|
13
13
|
}, headers?: Record<string, string>): Promise<Paginated<TResponse>>;
|
|
14
|
+
getMany(query?: TQuery, headers?: Record<string, string>): Promise<Paginated<TResponse> | TResponse[]>;
|
|
14
15
|
/**
|
|
15
16
|
* Returns the first resource matching the query, or `null` when none match.
|
|
16
17
|
* Convenience over `getMany` with `limit: 1`.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BaseCrudApi.d.ts","sourceRoot":"","sources":["../../src/core/BaseCrudApi.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"BaseCrudApi.d.ts","sourceRoot":"","sources":["../../src/core/BaseCrudApi.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAA;AAC5C,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AACnC,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,CAE1D,SAAQ,OACR,YAAW,OAAO,CAAC,SAAS,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,CAAC;IAEvD,SAAgB,QAAQ,EAAE,MAAM,CAAA;gBAEpB,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM;IAK/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;IAChC,OAAO,CACL,KAAK,CAAC,EAAE,MAAM,EACd,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAC/B,OAAO,CAAC,SAAS,CAAC,SAAS,CAAC,GAAG,SAAS,EAAE,CAAC;IAY9C;;;;OAIG;IACG,MAAM,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC;IASzF;;;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;IAIrB;;;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,21 +1,14 @@
|
|
|
1
|
-
import
|
|
1
|
+
import { BaseApi } from "./BaseApi.mjs";
|
|
2
2
|
|
|
3
3
|
//#region src/core/BaseCrudApi.ts
|
|
4
|
-
var BaseCrudApi = class {
|
|
5
|
-
client;
|
|
4
|
+
var BaseCrudApi = class extends BaseApi {
|
|
6
5
|
basePath;
|
|
7
6
|
constructor(client, basePath) {
|
|
8
|
-
|
|
7
|
+
super(client);
|
|
9
8
|
this.basePath = basePath.replace(/\/$/, "");
|
|
10
|
-
this.getMany = this.getMany.bind(this);
|
|
11
|
-
this.getOne = this.getOne.bind(this);
|
|
12
|
-
this.getById = this.getById.bind(this);
|
|
13
|
-
this.create = this.create.bind(this);
|
|
14
|
-
this.updateById = this.updateById.bind(this);
|
|
15
|
-
this.deleteById = this.deleteById.bind(this);
|
|
16
9
|
}
|
|
17
10
|
getMany(query, headers) {
|
|
18
|
-
const queryString =
|
|
11
|
+
const queryString = this.toQueryString(query);
|
|
19
12
|
return this.client.get(`${this.basePath}${queryString}`, headers);
|
|
20
13
|
}
|
|
21
14
|
/**
|
|
@@ -28,15 +21,14 @@ var BaseCrudApi = class {
|
|
|
28
21
|
...query,
|
|
29
22
|
limit: 1,
|
|
30
23
|
paginate: false
|
|
31
|
-
}, headers))[0] ?? null;
|
|
24
|
+
}, headers))?.[0] ?? null;
|
|
32
25
|
}
|
|
33
26
|
/**
|
|
34
27
|
* Returns a single resource by ID.
|
|
35
28
|
* @permissions $resourceName.view
|
|
36
29
|
*/
|
|
37
30
|
getById(id, query, headers) {
|
|
38
|
-
|
|
39
|
-
return this.client.get(`${this.basePath}/${id}${queryString}`, headers);
|
|
31
|
+
return this.client.get(`${this.basePath}/${id}${this.toQueryString(query)}`, headers);
|
|
40
32
|
}
|
|
41
33
|
/**
|
|
42
34
|
* Creates a new resource.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BaseCrudApi.mjs","names":[],"sources":["../../src/core/BaseCrudApi.ts"],"sourcesContent":["import
|
|
1
|
+
{"version":3,"file":"BaseCrudApi.mjs","names":[],"sources":["../../src/core/BaseCrudApi.ts"],"sourcesContent":["import type { ApiClient } from './ApiClient'\nimport { BaseApi } from './BaseApi'\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>\n extends BaseApi\n implements CrudApi<TResponse, TCreate, TUpdate, TQuery>\n{\n public readonly basePath: string\n\n constructor(client: ApiClient, basePath: string) {\n super(client)\n this.basePath = basePath.replace(/\\/$/, '')\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 getMany(\n query?: TQuery,\n headers?: Record<string, string>,\n ): Promise<Paginated<TResponse> | TResponse[]> {\n const queryString = this.toQueryString(query)\n return this.client.get<Paginated<TResponse> | TResponse[]>(\n `${this.basePath}${queryString}`,\n headers,\n )\n }\n\n /**\n * Returns the first resource matching the query, or `null` when none match.\n * Convenience over `getMany` with `limit: 1`.\n * @permissions $resourceName.view\n */\n async getOne(query?: TQuery, headers?: Record<string, string>): Promise<TResponse | null> {\n const results = await this.getMany(\n { ...query, limit: 1, paginate: false } as TQuery & { paginate: false },\n headers,\n )\n // An empty response body resolves to `undefined`.\n return results?.[0] ?? null\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 return this.client.get<TResponse>(`${this.basePath}/${id}${this.toQueryString(query)}`, 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,cAMU,QAEV;CACE,AAAgB;CAEhB,YAAY,QAAmB,UAAkB;AAC/C,QAAM,OAAO;AACb,OAAK,WAAW,SAAS,QAAQ,OAAO,GAAG;;CAe7C,QACE,OACA,SAC6C;EAC7C,MAAM,cAAc,KAAK,cAAc,MAAM;AAC7C,SAAO,KAAK,OAAO,IACjB,GAAG,KAAK,WAAW,eACnB,QACD;;;;;;;CAQH,MAAM,OAAO,OAAgB,SAA6D;AAMxF,UALgB,MAAM,KAAK,QACzB;GAAE,GAAG;GAAO,OAAO;GAAG,UAAU;GAAO,EACvC,QACD,IAEgB,MAAM;;;;;;CAOzB,QACE,IACA,OACA,SACoB;AACpB,SAAO,KAAK,OAAO,IAAe,GAAG,KAAK,SAAS,GAAG,KAAK,KAAK,cAAc,MAAM,IAAI,QAAQ;;;;;;CAOlG,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"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
|
|
2
|
+
|
|
3
|
+
//#region src/core/bindMethods.ts
|
|
4
|
+
/**
|
|
5
|
+
* Binds every method of `instance`'s class chain (up to `Object.prototype`) to `instance`, as own
|
|
6
|
+
* properties, so methods keep working when destructured (`const { getMany } = api`). The most
|
|
7
|
+
* derived implementation wins; getters, setters and `constructor` are skipped.
|
|
8
|
+
*/
|
|
9
|
+
function bindMethods(instance) {
|
|
10
|
+
const target = instance;
|
|
11
|
+
const bound = /* @__PURE__ */ new Set();
|
|
12
|
+
for (let prototype = Object.getPrototypeOf(instance); prototype && prototype !== Object.prototype; prototype = Object.getPrototypeOf(prototype)) for (const key of Reflect.ownKeys(prototype)) {
|
|
13
|
+
if (key === "constructor" || bound.has(key)) continue;
|
|
14
|
+
const { value } = Object.getOwnPropertyDescriptor(prototype, key);
|
|
15
|
+
if (typeof value === "function") {
|
|
16
|
+
target[key] = value.bind(instance);
|
|
17
|
+
bound.add(key);
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
//#endregion
|
|
23
|
+
exports.bindMethods = bindMethods;
|
|
24
|
+
//# sourceMappingURL=bindMethods.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bindMethods.cjs","names":[],"sources":["../../src/core/bindMethods.ts"],"sourcesContent":["/**\n * Binds every method of `instance`'s class chain (up to `Object.prototype`) to `instance`, as own\n * properties, so methods keep working when destructured (`const { getMany } = api`). The most\n * derived implementation wins; getters, setters and `constructor` are skipped.\n */\nexport function bindMethods(instance: object): void {\n const target = instance as Record<PropertyKey, unknown>\n const bound = new Set<PropertyKey>()\n\n for (\n let prototype: object | null = Object.getPrototypeOf(instance);\n prototype && prototype !== Object.prototype;\n prototype = Object.getPrototypeOf(prototype)\n ) {\n for (const key of Reflect.ownKeys(prototype)) {\n if (key === 'constructor' || bound.has(key)) {\n continue\n }\n const { value } = Object.getOwnPropertyDescriptor(prototype, key) as PropertyDescriptor\n if (typeof value === 'function') {\n target[key] = value.bind(instance)\n bound.add(key)\n }\n }\n }\n}\n"],"mappings":";;;;;;;;AAKA,SAAgB,YAAY,UAAwB;CAClD,MAAM,SAAS;CACf,MAAM,wBAAQ,IAAI,KAAkB;AAEpC,MACE,IAAI,YAA2B,OAAO,eAAe,SAAS,EAC9D,aAAa,cAAc,OAAO,WAClC,YAAY,OAAO,eAAe,UAAU,CAE5C,MAAK,MAAM,OAAO,QAAQ,QAAQ,UAAU,EAAE;AAC5C,MAAI,QAAQ,iBAAiB,MAAM,IAAI,IAAI,CACzC;EAEF,MAAM,EAAE,UAAU,OAAO,yBAAyB,WAAW,IAAI;AACjE,MAAI,OAAO,UAAU,YAAY;AAC/B,UAAO,OAAO,MAAM,KAAK,SAAS;AAClC,SAAM,IAAI,IAAI"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Binds every method of `instance`'s class chain (up to `Object.prototype`) to `instance`, as own
|
|
3
|
+
* properties, so methods keep working when destructured (`const { getMany } = api`). The most
|
|
4
|
+
* derived implementation wins; getters, setters and `constructor` are skipped.
|
|
5
|
+
*/
|
|
6
|
+
export declare function bindMethods(instance: object): void;
|
|
7
|
+
//# sourceMappingURL=bindMethods.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bindMethods.d.ts","sourceRoot":"","sources":["../../src/core/bindMethods.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,wBAAgB,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAoBlD"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
//#region src/core/bindMethods.ts
|
|
2
|
+
/**
|
|
3
|
+
* Binds every method of `instance`'s class chain (up to `Object.prototype`) to `instance`, as own
|
|
4
|
+
* properties, so methods keep working when destructured (`const { getMany } = api`). The most
|
|
5
|
+
* derived implementation wins; getters, setters and `constructor` are skipped.
|
|
6
|
+
*/
|
|
7
|
+
function bindMethods(instance) {
|
|
8
|
+
const target = instance;
|
|
9
|
+
const bound = /* @__PURE__ */ new Set();
|
|
10
|
+
for (let prototype = Object.getPrototypeOf(instance); prototype && prototype !== Object.prototype; prototype = Object.getPrototypeOf(prototype)) for (const key of Reflect.ownKeys(prototype)) {
|
|
11
|
+
if (key === "constructor" || bound.has(key)) continue;
|
|
12
|
+
const { value } = Object.getOwnPropertyDescriptor(prototype, key);
|
|
13
|
+
if (typeof value === "function") {
|
|
14
|
+
target[key] = value.bind(instance);
|
|
15
|
+
bound.add(key);
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
//#endregion
|
|
21
|
+
export { bindMethods };
|
|
22
|
+
//# sourceMappingURL=bindMethods.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bindMethods.mjs","names":[],"sources":["../../src/core/bindMethods.ts"],"sourcesContent":["/**\n * Binds every method of `instance`'s class chain (up to `Object.prototype`) to `instance`, as own\n * properties, so methods keep working when destructured (`const { getMany } = api`). The most\n * derived implementation wins; getters, setters and `constructor` are skipped.\n */\nexport function bindMethods(instance: object): void {\n const target = instance as Record<PropertyKey, unknown>\n const bound = new Set<PropertyKey>()\n\n for (\n let prototype: object | null = Object.getPrototypeOf(instance);\n prototype && prototype !== Object.prototype;\n prototype = Object.getPrototypeOf(prototype)\n ) {\n for (const key of Reflect.ownKeys(prototype)) {\n if (key === 'constructor' || bound.has(key)) {\n continue\n }\n const { value } = Object.getOwnPropertyDescriptor(prototype, key) as PropertyDescriptor\n if (typeof value === 'function') {\n target[key] = value.bind(instance)\n bound.add(key)\n }\n }\n }\n}\n"],"mappings":";;;;;;AAKA,SAAgB,YAAY,UAAwB;CAClD,MAAM,SAAS;CACf,MAAM,wBAAQ,IAAI,KAAkB;AAEpC,MACE,IAAI,YAA2B,OAAO,eAAe,SAAS,EAC9D,aAAa,cAAc,OAAO,WAClC,YAAY,OAAO,eAAe,UAAU,CAE5C,MAAK,MAAM,OAAO,QAAQ,QAAQ,UAAU,EAAE;AAC5C,MAAI,QAAQ,iBAAiB,MAAM,IAAI,IAAI,CACzC;EAEF,MAAM,EAAE,UAAU,OAAO,yBAAyB,WAAW,IAAI;AACjE,MAAI,OAAO,UAAU,YAAY;AAC/B,UAAO,OAAO,MAAM,KAAK,SAAS;AAClC,SAAM,IAAI,IAAI"}
|
package/dist/core/index.cjs
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
|
|
2
2
|
const require_core_errors = require('./errors.cjs');
|
|
3
3
|
const require_core_BaseApiClient = require('./BaseApiClient.cjs');
|
|
4
|
+
const require_core_BaseApi = require('./BaseApi.cjs');
|
|
4
5
|
const require_core_BaseCrudApi = require('./BaseCrudApi.cjs');
|
|
5
6
|
const require_core_ArchivableCrudApi = require('./ArchivableCrudApi.cjs');
|
|
6
7
|
|
|
@@ -9,6 +10,7 @@ exports.ApiError = require_core_errors.ApiError;
|
|
|
9
10
|
exports.ArchivableCrudApi = require_core_ArchivableCrudApi.ArchivableCrudApi;
|
|
10
11
|
exports.AuthenticationError = require_core_errors.AuthenticationError;
|
|
11
12
|
exports.BadRequestError = require_core_errors.BadRequestError;
|
|
13
|
+
exports.BaseApi = require_core_BaseApi.BaseApi;
|
|
12
14
|
exports.BaseApiClient = require_core_BaseApiClient.BaseApiClient;
|
|
13
15
|
exports.BaseCrudApi = require_core_BaseCrudApi.BaseCrudApi;
|
|
14
16
|
exports.ConflictError = require_core_errors.ConflictError;
|
package/dist/core/index.d.ts
CHANGED
|
@@ -1,7 +1,10 @@
|
|
|
1
1
|
export type { ApiClient, HttpMethod } from './ApiClient';
|
|
2
2
|
export { BaseApiClient } from './BaseApiClient';
|
|
3
|
+
export type { BaseApiClientOptions } from './BaseApiClient';
|
|
4
|
+
export type { QueryFormat } from './queryString';
|
|
3
5
|
export { DigisacError, ApiConnectionError, ApiError, BadRequestError, ValidationError, AuthenticationError, PaymentRequiredError, PermissionDeniedError, NotFoundError, ConflictError, UnprocessableEntityError, RateLimitError, InternalServerError, parseFieldErrors, } from './errors';
|
|
4
6
|
export type { FieldError, ErrorClassName, ApiErrorOptions } from './errors';
|
|
7
|
+
export { BaseApi } from './BaseApi';
|
|
5
8
|
export { BaseCrudApi } from './BaseCrudApi';
|
|
6
9
|
export { ArchivableCrudApi } from './ArchivableCrudApi';
|
|
7
10
|
export type { WhereClause, IncludeItem, ListQuery, GetByIdQuery, Paginated } from './types';
|
package/dist/core/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/core/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AACxD,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAA;AAC/C,OAAO,EACL,YAAY,EACZ,kBAAkB,EAClB,QAAQ,EACR,eAAe,EACf,eAAe,EACf,mBAAmB,EACnB,oBAAoB,EACpB,qBAAqB,EACrB,aAAa,EACb,aAAa,EACb,wBAAwB,EACxB,cAAc,EACd,mBAAmB,EACnB,gBAAgB,GACjB,MAAM,UAAU,CAAA;AACjB,YAAY,EAAE,UAAU,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,UAAU,CAAA;AAC3E,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAA;AAC3C,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAA;AACvD,YAAY,EAAE,WAAW,EAAE,WAAW,EAAE,SAAS,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,SAAS,CAAA"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/core/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AACxD,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAA;AAC/C,YAAY,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAA;AAC3D,YAAY,EAAE,WAAW,EAAE,MAAM,eAAe,CAAA;AAChD,OAAO,EACL,YAAY,EACZ,kBAAkB,EAClB,QAAQ,EACR,eAAe,EACf,eAAe,EACf,mBAAmB,EACnB,oBAAoB,EACpB,qBAAqB,EACrB,aAAa,EACb,aAAa,EACb,wBAAwB,EACxB,cAAc,EACd,mBAAmB,EACnB,gBAAgB,GACjB,MAAM,UAAU,CAAA;AACjB,YAAY,EAAE,UAAU,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,UAAU,CAAA;AAC3E,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AACnC,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAA;AAC3C,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAA;AACvD,YAAY,EAAE,WAAW,EAAE,WAAW,EAAE,SAAS,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,SAAS,CAAA"}
|
package/dist/core/index.mjs
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { ApiConnectionError, ApiError, AuthenticationError, BadRequestError, ConflictError, DigisacError, InternalServerError, NotFoundError, PaymentRequiredError, PermissionDeniedError, RateLimitError, UnprocessableEntityError, ValidationError, parseFieldErrors } from "./errors.mjs";
|
|
2
2
|
import { BaseApiClient } from "./BaseApiClient.mjs";
|
|
3
|
+
import { BaseApi } from "./BaseApi.mjs";
|
|
3
4
|
import { BaseCrudApi } from "./BaseCrudApi.mjs";
|
|
4
5
|
import { ArchivableCrudApi } from "./ArchivableCrudApi.mjs";
|
|
5
6
|
|
|
6
|
-
export { ApiConnectionError, ApiError, ArchivableCrudApi, AuthenticationError, BadRequestError, BaseApiClient, BaseCrudApi, ConflictError, DigisacError, InternalServerError, NotFoundError, PaymentRequiredError, PermissionDeniedError, RateLimitError, UnprocessableEntityError, ValidationError, parseFieldErrors };
|
|
7
|
+
export { ApiConnectionError, ApiError, ArchivableCrudApi, AuthenticationError, BadRequestError, BaseApi, BaseApiClient, BaseCrudApi, ConflictError, DigisacError, InternalServerError, NotFoundError, PaymentRequiredError, PermissionDeniedError, RateLimitError, UnprocessableEntityError, ValidationError, parseFieldErrors };
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
|
|
2
|
+
const require_chunk = require('../_chunks/chunk-Dk0Otj32.cjs');
|
|
3
|
+
let qs = require("qs");
|
|
4
|
+
qs = require_chunk.__toESM(qs);
|
|
5
|
+
|
|
6
|
+
//#region src/core/queryString.ts
|
|
7
|
+
const DEFAULT_QUERY_FORMAT = "json";
|
|
8
|
+
/** Serializes a query in `format`, or returns `''` when there is nothing to send. */
|
|
9
|
+
function toQueryString(query, format = DEFAULT_QUERY_FORMAT) {
|
|
10
|
+
if (!query) return "";
|
|
11
|
+
if (format === "qs") {
|
|
12
|
+
const queryString = qs.default.stringify(query);
|
|
13
|
+
return queryString ? `?${queryString}` : "";
|
|
14
|
+
}
|
|
15
|
+
const json = JSON.stringify(query);
|
|
16
|
+
return json === "{}" ? "" : `?query=${encodeURIComponent(json)}`;
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
//#endregion
|
|
20
|
+
exports.DEFAULT_QUERY_FORMAT = DEFAULT_QUERY_FORMAT;
|
|
21
|
+
exports.toQueryString = toQueryString;
|
|
22
|
+
//# sourceMappingURL=queryString.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"queryString.cjs","names":[],"sources":["../../src/core/queryString.ts"],"sourcesContent":["import qs from 'qs'\n\n/**\n * How list/get queries (`where`, `include`, `order`, ...) are put in the URL:\n *\n * - `'json'` — `?query=<JSON>`, merged into `req.query` by the backend `parseQuery` middleware.\n * Keeps `null`, booleans and numbers typed and has no nesting limit.\n * - `'qs'` — bracket notation (`?where[name]=x&page=2`). Readable, but the backend parses it with\n * `qs` defaults: `null` arrives as `''`, booleans/numbers as strings, and objects nested deeper\n * than 5 levels (e.g. an `include` inside an `include` with a `where`) are mangled.\n */\nexport type QueryFormat = 'json' | 'qs'\n\nexport const DEFAULT_QUERY_FORMAT: QueryFormat = 'json'\n\n/** Serializes a query in `format`, or returns `''` when there is nothing to send. */\nexport function toQueryString(\n query?: object | null,\n format: QueryFormat = DEFAULT_QUERY_FORMAT,\n): string {\n if (!query) {\n return ''\n }\n if (format === 'qs') {\n const queryString = qs.stringify(query)\n return queryString ? `?${queryString}` : ''\n }\n const json = JSON.stringify(query)\n return json === '{}' ? '' : `?query=${encodeURIComponent(json)}`\n}\n"],"mappings":";;;;;;AAaA,MAAa,uBAAoC;;AAGjD,SAAgB,cACd,OACA,SAAsB,sBACd;AACR,KAAI,CAAC,MACH,QAAO;AAET,KAAI,WAAW,MAAM;EACnB,MAAM,cAAc,WAAG,UAAU,MAAM;AACvC,SAAO,cAAc,IAAI,gBAAgB;;CAE3C,MAAM,OAAO,KAAK,UAAU,MAAM;AAClC,QAAO,SAAS,OAAO,KAAK,UAAU,mBAAmB,KAAK"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* How list/get queries (`where`, `include`, `order`, ...) are put in the URL:
|
|
3
|
+
*
|
|
4
|
+
* - `'json'` — `?query=<JSON>`, merged into `req.query` by the backend `parseQuery` middleware.
|
|
5
|
+
* Keeps `null`, booleans and numbers typed and has no nesting limit.
|
|
6
|
+
* - `'qs'` — bracket notation (`?where[name]=x&page=2`). Readable, but the backend parses it with
|
|
7
|
+
* `qs` defaults: `null` arrives as `''`, booleans/numbers as strings, and objects nested deeper
|
|
8
|
+
* than 5 levels (e.g. an `include` inside an `include` with a `where`) are mangled.
|
|
9
|
+
*/
|
|
10
|
+
export type QueryFormat = 'json' | 'qs';
|
|
11
|
+
export declare const DEFAULT_QUERY_FORMAT: QueryFormat;
|
|
12
|
+
/** Serializes a query in `format`, or returns `''` when there is nothing to send. */
|
|
13
|
+
export declare function toQueryString(query?: object | null, format?: QueryFormat): string;
|
|
14
|
+
//# sourceMappingURL=queryString.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"queryString.d.ts","sourceRoot":"","sources":["../../src/core/queryString.ts"],"names":[],"mappings":"AAEA;;;;;;;;GAQG;AACH,MAAM,MAAM,WAAW,GAAG,MAAM,GAAG,IAAI,CAAA;AAEvC,eAAO,MAAM,oBAAoB,EAAE,WAAoB,CAAA;AAEvD,qFAAqF;AACrF,wBAAgB,aAAa,CAC3B,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,EACrB,MAAM,GAAE,WAAkC,GACzC,MAAM,CAUR"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import qs from "qs";
|
|
2
|
+
|
|
3
|
+
//#region src/core/queryString.ts
|
|
4
|
+
const DEFAULT_QUERY_FORMAT = "json";
|
|
5
|
+
/** Serializes a query in `format`, or returns `''` when there is nothing to send. */
|
|
6
|
+
function toQueryString(query, format = DEFAULT_QUERY_FORMAT) {
|
|
7
|
+
if (!query) return "";
|
|
8
|
+
if (format === "qs") {
|
|
9
|
+
const queryString = qs.stringify(query);
|
|
10
|
+
return queryString ? `?${queryString}` : "";
|
|
11
|
+
}
|
|
12
|
+
const json = JSON.stringify(query);
|
|
13
|
+
return json === "{}" ? "" : `?query=${encodeURIComponent(json)}`;
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
//#endregion
|
|
17
|
+
export { DEFAULT_QUERY_FORMAT, toQueryString };
|
|
18
|
+
//# sourceMappingURL=queryString.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"queryString.mjs","names":[],"sources":["../../src/core/queryString.ts"],"sourcesContent":["import qs from 'qs'\n\n/**\n * How list/get queries (`where`, `include`, `order`, ...) are put in the URL:\n *\n * - `'json'` — `?query=<JSON>`, merged into `req.query` by the backend `parseQuery` middleware.\n * Keeps `null`, booleans and numbers typed and has no nesting limit.\n * - `'qs'` — bracket notation (`?where[name]=x&page=2`). Readable, but the backend parses it with\n * `qs` defaults: `null` arrives as `''`, booleans/numbers as strings, and objects nested deeper\n * than 5 levels (e.g. an `include` inside an `include` with a `where`) are mangled.\n */\nexport type QueryFormat = 'json' | 'qs'\n\nexport const DEFAULT_QUERY_FORMAT: QueryFormat = 'json'\n\n/** Serializes a query in `format`, or returns `''` when there is nothing to send. */\nexport function toQueryString(\n query?: object | null,\n format: QueryFormat = DEFAULT_QUERY_FORMAT,\n): string {\n if (!query) {\n return ''\n }\n if (format === 'qs') {\n const queryString = qs.stringify(query)\n return queryString ? `?${queryString}` : ''\n }\n const json = JSON.stringify(query)\n return json === '{}' ? '' : `?query=${encodeURIComponent(json)}`\n}\n"],"mappings":";;;AAaA,MAAa,uBAAoC;;AAGjD,SAAgB,cACd,OACA,SAAsB,sBACd;AACR,KAAI,CAAC,MACH,QAAO;AAET,KAAI,WAAW,MAAM;EACnB,MAAM,cAAc,GAAG,UAAU,MAAM;AACvC,SAAO,cAAc,IAAI,gBAAgB;;CAE3C,MAAM,OAAO,KAAK,UAAU,MAAM;AAClC,QAAO,SAAS,OAAO,KAAK,UAAU,mBAAmB,KAAK"}
|
package/dist/core/types.d.ts
CHANGED
|
@@ -91,6 +91,8 @@ export interface HasGetMany<TResponse, TQuery extends ListQuery<TResponse> = Lis
|
|
|
91
91
|
getMany(query?: TQuery & {
|
|
92
92
|
paginate?: true;
|
|
93
93
|
}, headers?: Record<string, string>): Promise<Paginated<TResponse>>;
|
|
94
|
+
/** When `paginate` is only known at runtime (e.g. a `boolean` variable). */
|
|
95
|
+
getMany(query?: TQuery, headers?: Record<string, string>): Promise<Paginated<TResponse> | TResponse[]>;
|
|
94
96
|
}
|
|
95
97
|
export type GetByIdQuery<T = Record<string, unknown>> = Pick<ListQuery<T>, 'include' | 'attributes'>;
|
|
96
98
|
export interface HasGetById<TResponse> {
|
package/dist/core/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/core/types.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/core/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
|
|
2
|
+
|
|
3
|
+
//#region src/core/withQueryFormat.ts
|
|
4
|
+
/**
|
|
5
|
+
* A view of `client` that serializes queries in `format`. Everything else — methods, base URL and
|
|
6
|
+
* the access token — is read from `client`, so `client.setAccessToken()` still applies to it.
|
|
7
|
+
*/
|
|
8
|
+
function overrideQueryFormat(client, format) {
|
|
9
|
+
return Object.create(client, { queryFormat: {
|
|
10
|
+
value: format,
|
|
11
|
+
enumerable: true,
|
|
12
|
+
configurable: true
|
|
13
|
+
} });
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Copy of `api` whose client serializes queries in `format`; `api` itself is untouched.
|
|
17
|
+
*
|
|
18
|
+
* The copy has the same prototype and fields as `api`, with `client` replaced. Methods the
|
|
19
|
+
* constructor bound to `api` (`this.getMany = this.getMany.bind(this)`) are bound again to the
|
|
20
|
+
* copy, so they use its client.
|
|
21
|
+
*/
|
|
22
|
+
function cloneWithQueryFormat(api, format) {
|
|
23
|
+
const source = api;
|
|
24
|
+
const prototype = Object.getPrototypeOf(api);
|
|
25
|
+
const copy = Object.create(prototype);
|
|
26
|
+
for (const key of Reflect.ownKeys(api)) Object.defineProperty(copy, key, Object.getOwnPropertyDescriptor(api, key));
|
|
27
|
+
Object.defineProperty(copy, "client", {
|
|
28
|
+
value: overrideQueryFormat(source.client, format),
|
|
29
|
+
enumerable: true,
|
|
30
|
+
configurable: true,
|
|
31
|
+
writable: false
|
|
32
|
+
});
|
|
33
|
+
for (const key of Reflect.ownKeys(api)) {
|
|
34
|
+
const method = prototype[key];
|
|
35
|
+
if (typeof copy[key] === "function" && typeof method === "function") copy[key] = method.bind(copy);
|
|
36
|
+
}
|
|
37
|
+
return copy;
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
//#endregion
|
|
41
|
+
exports.cloneWithQueryFormat = cloneWithQueryFormat;
|
|
42
|
+
//# sourceMappingURL=withQueryFormat.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"withQueryFormat.cjs","names":[],"sources":["../../src/core/withQueryFormat.ts"],"sourcesContent":["import type { ApiClient } from './ApiClient'\nimport type { QueryFormat } from './queryString'\n\n/**\n * A view of `client` that serializes queries in `format`. Everything else — methods, base URL and\n * the access token — is read from `client`, so `client.setAccessToken()` still applies to it.\n */\nfunction overrideQueryFormat<T extends ApiClient>(client: T, format: QueryFormat): T {\n return Object.create(client, {\n queryFormat: { value: format, enumerable: true, configurable: true },\n })\n}\n\n/**\n * Copy of `api` whose client serializes queries in `format`; `api` itself is untouched.\n *\n * The copy has the same prototype and fields as `api`, with `client` replaced. Methods the\n * constructor bound to `api` (`this.getMany = this.getMany.bind(this)`) are bound again to the\n * copy, so they use its client.\n */\nexport function cloneWithQueryFormat<T extends object>(api: T, format: QueryFormat): T {\n const source = api as T & { client: ApiClient }\n const prototype = Object.getPrototypeOf(api) as Record<PropertyKey, unknown>\n const copy = Object.create(prototype) as Record<PropertyKey, unknown>\n\n for (const key of Reflect.ownKeys(api)) {\n Object.defineProperty(\n copy,\n key,\n Object.getOwnPropertyDescriptor(api, key) as PropertyDescriptor,\n )\n }\n Object.defineProperty(copy, 'client', {\n value: overrideQueryFormat(source.client, format),\n enumerable: true,\n configurable: true,\n writable: false,\n })\n for (const key of Reflect.ownKeys(api)) {\n const method = prototype[key]\n if (typeof copy[key] === 'function' && typeof method === 'function') {\n copy[key] = method.bind(copy)\n }\n }\n\n return copy as T\n}\n"],"mappings":";;;;;;;AAOA,SAAS,oBAAyC,QAAW,QAAwB;AACnF,QAAO,OAAO,OAAO,QAAQ,EAC3B,aAAa;EAAE,OAAO;EAAQ,YAAY;EAAM,cAAc;EAAM,EACrE,CAAC;;;;;;;;;AAUJ,SAAgB,qBAAuC,KAAQ,QAAwB;CACrF,MAAM,SAAS;CACf,MAAM,YAAY,OAAO,eAAe,IAAI;CAC5C,MAAM,OAAO,OAAO,OAAO,UAAU;AAErC,MAAK,MAAM,OAAO,QAAQ,QAAQ,IAAI,CACpC,QAAO,eACL,MACA,KACA,OAAO,yBAAyB,KAAK,IAAI,CAC1C;AAEH,QAAO,eAAe,MAAM,UAAU;EACpC,OAAO,oBAAoB,OAAO,QAAQ,OAAO;EACjD,YAAY;EACZ,cAAc;EACd,UAAU;EACX,CAAC;AACF,MAAK,MAAM,OAAO,QAAQ,QAAQ,IAAI,EAAE;EACtC,MAAM,SAAS,UAAU;AACzB,MAAI,OAAO,KAAK,SAAS,cAAc,OAAO,WAAW,WACvD,MAAK,OAAO,OAAO,KAAK,KAAK;;AAIjC,QAAO"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { QueryFormat } from './queryString';
|
|
2
|
+
/**
|
|
3
|
+
* Copy of `api` whose client serializes queries in `format`; `api` itself is untouched.
|
|
4
|
+
*
|
|
5
|
+
* The copy has the same prototype and fields as `api`, with `client` replaced. Methods the
|
|
6
|
+
* constructor bound to `api` (`this.getMany = this.getMany.bind(this)`) are bound again to the
|
|
7
|
+
* copy, so they use its client.
|
|
8
|
+
*/
|
|
9
|
+
export declare function cloneWithQueryFormat<T extends object>(api: T, format: QueryFormat): T;
|
|
10
|
+
//# sourceMappingURL=withQueryFormat.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"withQueryFormat.d.ts","sourceRoot":"","sources":["../../src/core/withQueryFormat.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,eAAe,CAAA;AAYhD;;;;;;GAMG;AACH,wBAAgB,oBAAoB,CAAC,CAAC,SAAS,MAAM,EAAE,GAAG,EAAE,CAAC,EAAE,MAAM,EAAE,WAAW,GAAG,CAAC,CA0BrF"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
//#region src/core/withQueryFormat.ts
|
|
2
|
+
/**
|
|
3
|
+
* A view of `client` that serializes queries in `format`. Everything else — methods, base URL and
|
|
4
|
+
* the access token — is read from `client`, so `client.setAccessToken()` still applies to it.
|
|
5
|
+
*/
|
|
6
|
+
function overrideQueryFormat(client, format) {
|
|
7
|
+
return Object.create(client, { queryFormat: {
|
|
8
|
+
value: format,
|
|
9
|
+
enumerable: true,
|
|
10
|
+
configurable: true
|
|
11
|
+
} });
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Copy of `api` whose client serializes queries in `format`; `api` itself is untouched.
|
|
15
|
+
*
|
|
16
|
+
* The copy has the same prototype and fields as `api`, with `client` replaced. Methods the
|
|
17
|
+
* constructor bound to `api` (`this.getMany = this.getMany.bind(this)`) are bound again to the
|
|
18
|
+
* copy, so they use its client.
|
|
19
|
+
*/
|
|
20
|
+
function cloneWithQueryFormat(api, format) {
|
|
21
|
+
const source = api;
|
|
22
|
+
const prototype = Object.getPrototypeOf(api);
|
|
23
|
+
const copy = Object.create(prototype);
|
|
24
|
+
for (const key of Reflect.ownKeys(api)) Object.defineProperty(copy, key, Object.getOwnPropertyDescriptor(api, key));
|
|
25
|
+
Object.defineProperty(copy, "client", {
|
|
26
|
+
value: overrideQueryFormat(source.client, format),
|
|
27
|
+
enumerable: true,
|
|
28
|
+
configurable: true,
|
|
29
|
+
writable: false
|
|
30
|
+
});
|
|
31
|
+
for (const key of Reflect.ownKeys(api)) {
|
|
32
|
+
const method = prototype[key];
|
|
33
|
+
if (typeof copy[key] === "function" && typeof method === "function") copy[key] = method.bind(copy);
|
|
34
|
+
}
|
|
35
|
+
return copy;
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
//#endregion
|
|
39
|
+
export { cloneWithQueryFormat };
|
|
40
|
+
//# sourceMappingURL=withQueryFormat.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"withQueryFormat.mjs","names":[],"sources":["../../src/core/withQueryFormat.ts"],"sourcesContent":["import type { ApiClient } from './ApiClient'\nimport type { QueryFormat } from './queryString'\n\n/**\n * A view of `client` that serializes queries in `format`. Everything else — methods, base URL and\n * the access token — is read from `client`, so `client.setAccessToken()` still applies to it.\n */\nfunction overrideQueryFormat<T extends ApiClient>(client: T, format: QueryFormat): T {\n return Object.create(client, {\n queryFormat: { value: format, enumerable: true, configurable: true },\n })\n}\n\n/**\n * Copy of `api` whose client serializes queries in `format`; `api` itself is untouched.\n *\n * The copy has the same prototype and fields as `api`, with `client` replaced. Methods the\n * constructor bound to `api` (`this.getMany = this.getMany.bind(this)`) are bound again to the\n * copy, so they use its client.\n */\nexport function cloneWithQueryFormat<T extends object>(api: T, format: QueryFormat): T {\n const source = api as T & { client: ApiClient }\n const prototype = Object.getPrototypeOf(api) as Record<PropertyKey, unknown>\n const copy = Object.create(prototype) as Record<PropertyKey, unknown>\n\n for (const key of Reflect.ownKeys(api)) {\n Object.defineProperty(\n copy,\n key,\n Object.getOwnPropertyDescriptor(api, key) as PropertyDescriptor,\n )\n }\n Object.defineProperty(copy, 'client', {\n value: overrideQueryFormat(source.client, format),\n enumerable: true,\n configurable: true,\n writable: false,\n })\n for (const key of Reflect.ownKeys(api)) {\n const method = prototype[key]\n if (typeof copy[key] === 'function' && typeof method === 'function') {\n copy[key] = method.bind(copy)\n }\n }\n\n return copy as T\n}\n"],"mappings":";;;;;AAOA,SAAS,oBAAyC,QAAW,QAAwB;AACnF,QAAO,OAAO,OAAO,QAAQ,EAC3B,aAAa;EAAE,OAAO;EAAQ,YAAY;EAAM,cAAc;EAAM,EACrE,CAAC;;;;;;;;;AAUJ,SAAgB,qBAAuC,KAAQ,QAAwB;CACrF,MAAM,SAAS;CACf,MAAM,YAAY,OAAO,eAAe,IAAI;CAC5C,MAAM,OAAO,OAAO,OAAO,UAAU;AAErC,MAAK,MAAM,OAAO,QAAQ,QAAQ,IAAI,CACpC,QAAO,eACL,MACA,KACA,OAAO,yBAAyB,KAAK,IAAI,CAC1C;AAEH,QAAO,eAAe,MAAM,UAAU;EACpC,OAAO,oBAAoB,OAAO,QAAQ,OAAO;EACjD,YAAY;EACZ,cAAc;EACd,UAAU;EACX,CAAC;AACF,MAAK,MAAM,OAAO,QAAQ,QAAQ,IAAI,EAAE;EACtC,MAAM,SAAS,UAAU;AACzB,MAAI,OAAO,KAAK,SAAS,cAAc,OAAO,WAAW,WACvD,MAAK,OAAO,OAAO,KAAK,KAAK;;AAIjC,QAAO"}
|
package/dist/index.cjs
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
|
|
2
2
|
const require_core_errors = require('./core/errors.cjs');
|
|
3
3
|
const require_core_BaseApiClient = require('./core/BaseApiClient.cjs');
|
|
4
|
+
const require_core_BaseApi = require('./core/BaseApi.cjs');
|
|
4
5
|
const require_core_BaseCrudApi = require('./core/BaseCrudApi.cjs');
|
|
5
6
|
const require_core_ArchivableCrudApi = require('./core/ArchivableCrudApi.cjs');
|
|
6
7
|
require('./core/index.cjs');
|
|
@@ -10,6 +11,7 @@ exports.ApiError = require_core_errors.ApiError;
|
|
|
10
11
|
exports.ArchivableCrudApi = require_core_ArchivableCrudApi.ArchivableCrudApi;
|
|
11
12
|
exports.AuthenticationError = require_core_errors.AuthenticationError;
|
|
12
13
|
exports.BadRequestError = require_core_errors.BadRequestError;
|
|
14
|
+
exports.BaseApi = require_core_BaseApi.BaseApi;
|
|
13
15
|
exports.BaseApiClient = require_core_BaseApiClient.BaseApiClient;
|
|
14
16
|
exports.BaseCrudApi = require_core_BaseCrudApi.BaseCrudApi;
|
|
15
17
|
exports.ConflictError = require_core_errors.ConflictError;
|
package/dist/index.mjs
CHANGED
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import { ApiConnectionError, ApiError, AuthenticationError, BadRequestError, ConflictError, DigisacError, InternalServerError, NotFoundError, PaymentRequiredError, PermissionDeniedError, RateLimitError, UnprocessableEntityError, ValidationError, parseFieldErrors } from "./core/errors.mjs";
|
|
2
2
|
import { BaseApiClient } from "./core/BaseApiClient.mjs";
|
|
3
|
+
import { BaseApi } from "./core/BaseApi.mjs";
|
|
3
4
|
import { BaseCrudApi } from "./core/BaseCrudApi.mjs";
|
|
4
5
|
import { ArchivableCrudApi } from "./core/ArchivableCrudApi.mjs";
|
|
5
6
|
import "./core/index.mjs";
|
|
6
7
|
|
|
7
|
-
export { ApiConnectionError, ApiError, ArchivableCrudApi, AuthenticationError, BadRequestError, BaseApiClient, BaseCrudApi, ConflictError, DigisacError, InternalServerError, NotFoundError, PaymentRequiredError, PermissionDeniedError, RateLimitError, UnprocessableEntityError, ValidationError, parseFieldErrors };
|
|
8
|
+
export { ApiConnectionError, ApiError, ArchivableCrudApi, AuthenticationError, BadRequestError, BaseApi, BaseApiClient, BaseCrudApi, ConflictError, DigisacError, InternalServerError, NotFoundError, PaymentRequiredError, PermissionDeniedError, RateLimitError, UnprocessableEntityError, ValidationError, parseFieldErrors };
|
package/package.json
CHANGED
|
@@ -69,7 +69,7 @@ describe('AuthHistoryApi', () => {
|
|
|
69
69
|
await api.getMany({ page: 2, perPage: 5 })
|
|
70
70
|
const url = vi.mocked(client.get).mock.calls[0][0] as string
|
|
71
71
|
expect(url).toContain('/auth-history?')
|
|
72
|
-
expect(url).toContain('page
|
|
72
|
+
expect(decodeURIComponent(url)).toContain('"page":2')
|
|
73
73
|
})
|
|
74
74
|
|
|
75
75
|
it('forwards custom headers', async () => {
|
|
@@ -1,15 +1,11 @@
|
|
|
1
|
-
import
|
|
2
|
-
import type { ApiClient } from '../../core/ApiClient'
|
|
1
|
+
import { BaseApi } from '../../core/BaseApi'
|
|
3
2
|
import type { ListQuery, Paginated, HasGetMany, HasGetById } from '../../core/types'
|
|
4
3
|
import type { AuthHistory } from './types'
|
|
5
4
|
|
|
6
|
-
export class AuthHistoryApi
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
this.client = client
|
|
11
|
-
}
|
|
12
|
-
|
|
5
|
+
export class AuthHistoryApi
|
|
6
|
+
extends BaseApi
|
|
7
|
+
implements HasGetMany<AuthHistory>, HasGetById<AuthHistory>
|
|
8
|
+
{
|
|
13
9
|
/**
|
|
14
10
|
* Returns a paginated list of authentication events (auth, password_change, logout). Non-admin users can only see their own records.
|
|
15
11
|
* @permissions authHistory.view
|
|
@@ -22,11 +18,15 @@ export class AuthHistoryApi implements HasGetMany<AuthHistory>, HasGetById<AuthH
|
|
|
22
18
|
query?: ListQuery<AuthHistory> & { paginate?: true },
|
|
23
19
|
headers?: Record<string, string>,
|
|
24
20
|
): Promise<Paginated<AuthHistory>>
|
|
21
|
+
getMany(
|
|
22
|
+
query?: ListQuery<AuthHistory>,
|
|
23
|
+
headers?: Record<string, string>,
|
|
24
|
+
): Promise<Paginated<AuthHistory> | AuthHistory[]>
|
|
25
25
|
getMany(
|
|
26
26
|
query?: ListQuery<AuthHistory>,
|
|
27
27
|
headers?: Record<string, string>,
|
|
28
28
|
): Promise<Paginated<AuthHistory> | AuthHistory[]> {
|
|
29
|
-
const queryString =
|
|
29
|
+
const queryString = this.toQueryString(query)
|
|
30
30
|
return this.client.get<Paginated<AuthHistory> | AuthHistory[]>(
|
|
31
31
|
`/auth-history${queryString}`,
|
|
32
32
|
headers,
|
|
@@ -96,7 +96,7 @@ describe('CampaignsApi', () => {
|
|
|
96
96
|
await api.getMany({ page: 2, perPage: 5 })
|
|
97
97
|
const url = vi.mocked(client.get).mock.calls[0][0] as string
|
|
98
98
|
expect(url).toContain('/campaigns?')
|
|
99
|
-
expect(url).toContain('page
|
|
99
|
+
expect(decodeURIComponent(url)).toContain('"page":2')
|
|
100
100
|
})
|
|
101
101
|
|
|
102
102
|
it('forwards custom headers', async () => {
|
|
@@ -1,15 +1,13 @@
|
|
|
1
|
-
import
|
|
1
|
+
import { BaseApi } from '../../core/BaseApi'
|
|
2
2
|
import type { HasCreate } from '../../core/types'
|
|
3
3
|
import type { ClientFeedback, CreateClientFeedbackPayload } from './types'
|
|
4
4
|
|
|
5
|
-
export class ClientFeedbackApi
|
|
6
|
-
|
|
5
|
+
export class ClientFeedbackApi
|
|
6
|
+
extends BaseApi
|
|
7
|
+
implements HasCreate<ClientFeedback, CreateClientFeedbackPayload>
|
|
8
|
+
{
|
|
7
9
|
private readonly basePath = '/client-feedback'
|
|
8
10
|
|
|
9
|
-
constructor(client: ApiClient) {
|
|
10
|
-
this.client = client
|
|
11
|
-
}
|
|
12
|
-
|
|
13
11
|
/** Creates a client feedback record for a ticket (accountId, ticketId, and feedback text are required). */
|
|
14
12
|
create(
|
|
15
13
|
body: CreateClientFeedbackPayload,
|
|
@@ -103,7 +103,7 @@ describe('ContactsApi', () => {
|
|
|
103
103
|
await api.getMany({ page: 2, perPage: 5 })
|
|
104
104
|
const url = vi.mocked(client.get).mock.calls[0][0] as string
|
|
105
105
|
expect(url).toContain('/contacts?')
|
|
106
|
-
expect(url).toContain('page
|
|
106
|
+
expect(decodeURIComponent(url)).toContain('"page":2')
|
|
107
107
|
})
|
|
108
108
|
|
|
109
109
|
it('forwards custom headers', async () => {
|