@ikatec/digisac-api-sdk 3.1.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 +71 -9
- 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 +29 -57
- package/dist/core/BaseApiClient.cjs.map +1 -1
- package/dist/core/BaseApiClient.d.ts +8 -11
- package/dist/core/BaseApiClient.d.ts.map +1 -1
- package/dist/core/BaseApiClient.mjs +31 -57
- 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/errors.cjs +192 -0
- package/dist/core/errors.cjs.map +1 -0
- package/dist/core/errors.d.ts +117 -0
- package/dist/core/errors.d.ts.map +1 -0
- package/dist/core/errors.mjs +177 -0
- package/dist/core/errors.mjs.map +1 -0
- package/dist/core/index.cjs +18 -2
- package/dist/core/index.d.ts +6 -2
- package/dist/core/index.d.ts.map +1 -1
- package/dist/core/index.mjs +4 -2
- 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 +18 -2
- package/dist/index.mjs +4 -2
- 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 +193 -22
- package/src/core/BaseApiClient.ts +44 -85
- package/src/core/BaseCrudApi.test-d.ts +57 -0
- package/src/core/BaseCrudApi.test.ts +252 -31
- package/src/core/BaseCrudApi.ts +14 -14
- package/src/core/bindMethods.ts +26 -0
- package/src/core/errors.test-d.ts +14 -0
- package/src/core/errors.test.ts +389 -0
- package/src/core/errors.ts +284 -0
- package/src/core/index.ts +21 -2
- 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
|
@@ -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,10 +1,26 @@
|
|
|
1
1
|
Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
|
|
2
|
+
const require_core_errors = require('./core/errors.cjs');
|
|
2
3
|
const require_core_BaseApiClient = require('./core/BaseApiClient.cjs');
|
|
4
|
+
const require_core_BaseApi = require('./core/BaseApi.cjs');
|
|
3
5
|
const require_core_BaseCrudApi = require('./core/BaseCrudApi.cjs');
|
|
4
6
|
const require_core_ArchivableCrudApi = require('./core/ArchivableCrudApi.cjs');
|
|
5
7
|
require('./core/index.cjs');
|
|
6
8
|
|
|
7
|
-
exports.
|
|
9
|
+
exports.ApiConnectionError = require_core_errors.ApiConnectionError;
|
|
10
|
+
exports.ApiError = require_core_errors.ApiError;
|
|
8
11
|
exports.ArchivableCrudApi = require_core_ArchivableCrudApi.ArchivableCrudApi;
|
|
12
|
+
exports.AuthenticationError = require_core_errors.AuthenticationError;
|
|
13
|
+
exports.BadRequestError = require_core_errors.BadRequestError;
|
|
14
|
+
exports.BaseApi = require_core_BaseApi.BaseApi;
|
|
9
15
|
exports.BaseApiClient = require_core_BaseApiClient.BaseApiClient;
|
|
10
|
-
exports.BaseCrudApi = require_core_BaseCrudApi.BaseCrudApi;
|
|
16
|
+
exports.BaseCrudApi = require_core_BaseCrudApi.BaseCrudApi;
|
|
17
|
+
exports.ConflictError = require_core_errors.ConflictError;
|
|
18
|
+
exports.DigisacError = require_core_errors.DigisacError;
|
|
19
|
+
exports.InternalServerError = require_core_errors.InternalServerError;
|
|
20
|
+
exports.NotFoundError = require_core_errors.NotFoundError;
|
|
21
|
+
exports.PaymentRequiredError = require_core_errors.PaymentRequiredError;
|
|
22
|
+
exports.PermissionDeniedError = require_core_errors.PermissionDeniedError;
|
|
23
|
+
exports.RateLimitError = require_core_errors.RateLimitError;
|
|
24
|
+
exports.UnprocessableEntityError = require_core_errors.UnprocessableEntityError;
|
|
25
|
+
exports.ValidationError = require_core_errors.ValidationError;
|
|
26
|
+
exports.parseFieldErrors = require_core_errors.parseFieldErrors;
|
package/dist/index.mjs
CHANGED
|
@@ -1,6 +1,8 @@
|
|
|
1
|
-
import { ApiError,
|
|
1
|
+
import { ApiConnectionError, ApiError, AuthenticationError, BadRequestError, ConflictError, DigisacError, InternalServerError, NotFoundError, PaymentRequiredError, PermissionDeniedError, RateLimitError, UnprocessableEntityError, ValidationError, parseFieldErrors } from "./core/errors.mjs";
|
|
2
|
+
import { BaseApiClient } from "./core/BaseApiClient.mjs";
|
|
3
|
+
import { BaseApi } from "./core/BaseApi.mjs";
|
|
2
4
|
import { BaseCrudApi } from "./core/BaseCrudApi.mjs";
|
|
3
5
|
import { ArchivableCrudApi } from "./core/ArchivableCrudApi.mjs";
|
|
4
6
|
import "./core/index.mjs";
|
|
5
7
|
|
|
6
|
-
export { ApiError, ArchivableCrudApi, BaseApiClient, BaseCrudApi };
|
|
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 () => {
|
|
@@ -35,7 +35,7 @@ export class ContactsApi extends BaseCrudApi<Contact, CreateContactPayload, Upda
|
|
|
35
35
|
* @permissions contacts.view
|
|
36
36
|
*/
|
|
37
37
|
count(query?: CountContactsQuery, headers?: Record<string, string>): Promise<{ count: number }> {
|
|
38
|
-
const queryString =
|
|
38
|
+
const queryString = this.toQueryString(query)
|
|
39
39
|
return this.client.get<{ count: number }>(`${this.basePath}/count${queryString}`, headers)
|
|
40
40
|
}
|
|
41
41
|
|
|
@@ -62,7 +62,7 @@ export class ContactsApi extends BaseCrudApi<Contact, CreateContactPayload, Upda
|
|
|
62
62
|
query?: ListQuery<Contact>,
|
|
63
63
|
headers?: Record<string, string>,
|
|
64
64
|
): Promise<Paginated<Contact>> {
|
|
65
|
-
const queryString =
|
|
65
|
+
const queryString = this.toQueryString(query)
|
|
66
66
|
return this.client.get<Paginated<Contact>>(`${this.basePath}/forward${queryString}`, headers)
|
|
67
67
|
}
|
|
68
68
|
|
package/src/apis/me/MeApi.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import
|
|
1
|
+
import { BaseApi } from '../../core/BaseApi'
|
|
2
2
|
import type { Account } from '../accounts/types'
|
|
3
3
|
import type { User } from '../users/types'
|
|
4
4
|
import type {
|
|
@@ -10,13 +10,7 @@ import type {
|
|
|
10
10
|
UpdateMeStatusPayload,
|
|
11
11
|
} from './types'
|
|
12
12
|
|
|
13
|
-
export class MeApi {
|
|
14
|
-
protected readonly client: ApiClient
|
|
15
|
-
|
|
16
|
-
constructor(client: ApiClient) {
|
|
17
|
-
this.client = client
|
|
18
|
-
}
|
|
19
|
-
|
|
13
|
+
export class MeApi extends BaseApi {
|
|
20
14
|
/**
|
|
21
15
|
* Returns the currently authenticated user, including their roles, departments, and timetable.
|
|
22
16
|
* @permissions users.view
|
|
@@ -87,8 +87,8 @@ describe('MessagesApi', () => {
|
|
|
87
87
|
await api.getMany({ page: 2, perPage: 5 })
|
|
88
88
|
const url = vi.mocked(client.get).mock.calls[0][0] as string
|
|
89
89
|
expect(url).toContain('/messages?')
|
|
90
|
-
expect(url).toContain('page
|
|
91
|
-
expect(url).toContain('perPage
|
|
90
|
+
expect(decodeURIComponent(url)).toContain('"page":2')
|
|
91
|
+
expect(decodeURIComponent(url)).toContain('"perPage":5')
|
|
92
92
|
})
|
|
93
93
|
|
|
94
94
|
it('forwards custom headers', async () => {
|
|
@@ -0,0 +1,198 @@
|
|
|
1
|
+
import { afterEach, describe, expect, it, vi } from 'vitest'
|
|
2
|
+
import qs from 'qs'
|
|
3
|
+
import type { ApiClient } from '../core/ApiClient'
|
|
4
|
+
import { BaseApiClient } from '../core/BaseApiClient'
|
|
5
|
+
import type { QueryFormat } from '../core/queryString'
|
|
6
|
+
import { AuthHistoryApi } from './authHistory/AuthHistoryApi'
|
|
7
|
+
import { ContactsApi } from './contacts/ContactsApi'
|
|
8
|
+
import { ServiceAccessManagementApi } from './serviceAccessManagement/ServiceAccessManagementApi'
|
|
9
|
+
import { StickerUsersApi } from './stickerUsers/StickerUsersApi'
|
|
10
|
+
import { TermsApi } from './terms/TermsApi'
|
|
11
|
+
|
|
12
|
+
/**
|
|
13
|
+
* Every method that sends a list/get query must serialize it in the client's `queryFormat` and
|
|
14
|
+
* honor `withQueryFormat`. A method listed here that ignored the format would fail below.
|
|
15
|
+
*/
|
|
16
|
+
|
|
17
|
+
function createMockClient(queryFormat?: QueryFormat): ApiClient {
|
|
18
|
+
return {
|
|
19
|
+
...(queryFormat && { queryFormat }),
|
|
20
|
+
setAccessToken: vi.fn().mockReturnThis(),
|
|
21
|
+
request: vi.fn(),
|
|
22
|
+
get: vi.fn().mockResolvedValue([]),
|
|
23
|
+
post: vi.fn(),
|
|
24
|
+
put: vi.fn(),
|
|
25
|
+
patch: vi.fn(),
|
|
26
|
+
delete: vi.fn(),
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
const listQuery = { where: { name: 'x' }, page: 2, perPage: 5 }
|
|
31
|
+
const getQuery = { attributes: ['id'] }
|
|
32
|
+
|
|
33
|
+
type Case = {
|
|
34
|
+
name: string
|
|
35
|
+
path: string
|
|
36
|
+
query: object
|
|
37
|
+
/** Calls the method on the API built from `client`, optionally through `withQueryFormat`. */
|
|
38
|
+
call: (client: ApiClient, override?: QueryFormat) => Promise<unknown>
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
const cases: Case[] = [
|
|
42
|
+
{
|
|
43
|
+
name: 'ContactsApi.getMany (BaseCrudApi)',
|
|
44
|
+
path: '/contacts',
|
|
45
|
+
query: listQuery,
|
|
46
|
+
call: (client, f) => {
|
|
47
|
+
const api = new ContactsApi(client)
|
|
48
|
+
return (f ? api.withQueryFormat(f) : api).getMany(listQuery)
|
|
49
|
+
},
|
|
50
|
+
},
|
|
51
|
+
{
|
|
52
|
+
name: 'ContactsApi.getById (BaseCrudApi)',
|
|
53
|
+
path: '/contacts/c1',
|
|
54
|
+
query: getQuery,
|
|
55
|
+
call: (client, f) => {
|
|
56
|
+
const api = new ContactsApi(client)
|
|
57
|
+
return (f ? api.withQueryFormat(f) : api).getById('c1', { attributes: ['id'] })
|
|
58
|
+
},
|
|
59
|
+
},
|
|
60
|
+
{
|
|
61
|
+
name: 'ContactsApi.count',
|
|
62
|
+
path: '/contacts/count',
|
|
63
|
+
query: listQuery,
|
|
64
|
+
call: (client, f) => {
|
|
65
|
+
const api = new ContactsApi(client)
|
|
66
|
+
return (f ? api.withQueryFormat(f) : api).count(listQuery)
|
|
67
|
+
},
|
|
68
|
+
},
|
|
69
|
+
{
|
|
70
|
+
name: 'ContactsApi.forward',
|
|
71
|
+
path: '/contacts/forward',
|
|
72
|
+
query: listQuery,
|
|
73
|
+
call: (client, f) => {
|
|
74
|
+
const api = new ContactsApi(client)
|
|
75
|
+
return (f ? api.withQueryFormat(f) : api).forward(listQuery)
|
|
76
|
+
},
|
|
77
|
+
},
|
|
78
|
+
{
|
|
79
|
+
name: 'AuthHistoryApi.getMany',
|
|
80
|
+
path: '/auth-history',
|
|
81
|
+
query: { page: 2, perPage: 5 },
|
|
82
|
+
call: (client, f) => {
|
|
83
|
+
const api = new AuthHistoryApi(client)
|
|
84
|
+
return (f ? api.withQueryFormat(f) : api).getMany({ page: 2, perPage: 5 })
|
|
85
|
+
},
|
|
86
|
+
},
|
|
87
|
+
{
|
|
88
|
+
name: 'ServiceAccessManagementApi.getMany',
|
|
89
|
+
path: '/service-access-management',
|
|
90
|
+
query: { page: 2, perPage: 5 },
|
|
91
|
+
call: (client, f) => {
|
|
92
|
+
const api = new ServiceAccessManagementApi(client)
|
|
93
|
+
return (f ? api.withQueryFormat(f) : api).getMany({ page: 2, perPage: 5 })
|
|
94
|
+
},
|
|
95
|
+
},
|
|
96
|
+
{
|
|
97
|
+
name: 'StickerUsersApi.getMany',
|
|
98
|
+
path: '/sticker-users',
|
|
99
|
+
query: { page: 2, perPage: 5 },
|
|
100
|
+
call: (client, f) => {
|
|
101
|
+
const api = new StickerUsersApi(client)
|
|
102
|
+
return (f ? api.withQueryFormat(f) : api).getMany({ page: 2, perPage: 5 })
|
|
103
|
+
},
|
|
104
|
+
},
|
|
105
|
+
{
|
|
106
|
+
name: 'TermsApi.getById',
|
|
107
|
+
path: '/terms/t1',
|
|
108
|
+
query: getQuery,
|
|
109
|
+
call: (client, f) => {
|
|
110
|
+
const api = new TermsApi(client)
|
|
111
|
+
return (f ? api.withQueryFormat(f) : api).getById('t1', { attributes: ['id'] })
|
|
112
|
+
},
|
|
113
|
+
},
|
|
114
|
+
]
|
|
115
|
+
|
|
116
|
+
const jsonUrl = (path: string, query: object) =>
|
|
117
|
+
`${path}?query=${encodeURIComponent(JSON.stringify(query))}`
|
|
118
|
+
const qsUrl = (path: string, query: object) => `${path}?${qs.stringify(query)}`
|
|
119
|
+
const calledUrl = (client: ApiClient) => vi.mocked(client.get).mock.calls.at(0)?.at(0)
|
|
120
|
+
|
|
121
|
+
describe.each(cases)('$name', ({ path, query, call }) => {
|
|
122
|
+
it("sends JSON with the default client format ('json')", async () => {
|
|
123
|
+
const client = createMockClient()
|
|
124
|
+
await call(client)
|
|
125
|
+
expect(calledUrl(client)).toBe(jsonUrl(path, query))
|
|
126
|
+
})
|
|
127
|
+
|
|
128
|
+
it("sends bracket notation with a 'qs' client", async () => {
|
|
129
|
+
const client = createMockClient('qs')
|
|
130
|
+
await call(client)
|
|
131
|
+
expect(calledUrl(client)).toBe(qsUrl(path, query))
|
|
132
|
+
})
|
|
133
|
+
|
|
134
|
+
it("withQueryFormat('qs') overrides a 'json' client", async () => {
|
|
135
|
+
const client = createMockClient()
|
|
136
|
+
await call(client, 'qs')
|
|
137
|
+
expect(calledUrl(client)).toBe(qsUrl(path, query))
|
|
138
|
+
})
|
|
139
|
+
|
|
140
|
+
it("withQueryFormat('json') overrides a 'qs' client", async () => {
|
|
141
|
+
const client = createMockClient('qs')
|
|
142
|
+
await call(client, 'json')
|
|
143
|
+
expect(calledUrl(client)).toBe(jsonUrl(path, query))
|
|
144
|
+
})
|
|
145
|
+
})
|
|
146
|
+
|
|
147
|
+
describe('query format through BaseApiClient', () => {
|
|
148
|
+
afterEach(() => {
|
|
149
|
+
vi.restoreAllMocks()
|
|
150
|
+
})
|
|
151
|
+
|
|
152
|
+
const mockFetch = () =>
|
|
153
|
+
vi
|
|
154
|
+
.spyOn(globalThis, 'fetch')
|
|
155
|
+
.mockImplementation(
|
|
156
|
+
async () =>
|
|
157
|
+
new Response('[]', { status: 200, headers: { 'Content-Type': 'application/json' } }),
|
|
158
|
+
)
|
|
159
|
+
|
|
160
|
+
it('builds the full ?query=<JSON> URL by default, keeping null typed', async () => {
|
|
161
|
+
const fetchSpy = mockFetch()
|
|
162
|
+
const contacts = new ContactsApi(new BaseApiClient('https://api.example.com/'))
|
|
163
|
+
|
|
164
|
+
await contacts.getMany({ where: { name: null }, paginate: false })
|
|
165
|
+
|
|
166
|
+
const query = '{"where":{"name":null},"paginate":false}'
|
|
167
|
+
expect(fetchSpy.mock.calls[0]?.[0]).toBe(
|
|
168
|
+
`https://api.example.com/contacts?query=${encodeURIComponent(query)}`,
|
|
169
|
+
)
|
|
170
|
+
})
|
|
171
|
+
|
|
172
|
+
it("builds the bracket URL with queryFormat 'qs'", async () => {
|
|
173
|
+
const fetchSpy = mockFetch()
|
|
174
|
+
const client = new BaseApiClient('https://api.example.com', undefined, { queryFormat: 'qs' })
|
|
175
|
+
|
|
176
|
+
await new ContactsApi(client).getMany({ where: { name: 'x' }, paginate: false })
|
|
177
|
+
|
|
178
|
+
expect(decodeURIComponent(fetchSpy.mock.calls[0]?.[0] as string)).toBe(
|
|
179
|
+
'https://api.example.com/contacts?where[name]=x&paginate=false',
|
|
180
|
+
)
|
|
181
|
+
})
|
|
182
|
+
|
|
183
|
+
it("setAccessToken on a copy's client only affects the copy", async () => {
|
|
184
|
+
const fetchSpy = mockFetch()
|
|
185
|
+
const client = new BaseApiClient('https://api.example.com', 'original')
|
|
186
|
+
const contacts = new ContactsApi(client)
|
|
187
|
+
const copy = contacts.withQueryFormat('qs')
|
|
188
|
+
|
|
189
|
+
copy.client.setAccessToken('copy-only')
|
|
190
|
+
await contacts.getMany({ paginate: false })
|
|
191
|
+
await copy.getMany({ paginate: false })
|
|
192
|
+
|
|
193
|
+
const authorization = (call: number) =>
|
|
194
|
+
(fetchSpy.mock.calls[call]?.[1]?.headers as Record<string, string>).Authorization
|
|
195
|
+
expect(authorization(0)).toBe('Bearer original')
|
|
196
|
+
expect(authorization(1)).toBe('Bearer copy-only')
|
|
197
|
+
})
|
|
198
|
+
})
|
|
@@ -63,7 +63,7 @@ describe('ServiceAccessManagementApi', () => {
|
|
|
63
63
|
await api.getMany({ page: 2, perPage: 5 })
|
|
64
64
|
const url = vi.mocked(client.get).mock.calls[0][0] as string
|
|
65
65
|
expect(url).toContain('/service-access-management?')
|
|
66
|
-
expect(url).toContain('page
|
|
66
|
+
expect(decodeURIComponent(url)).toContain('"page":2')
|
|
67
67
|
})
|
|
68
68
|
|
|
69
69
|
it('forwards custom headers', async () => {
|
|
@@ -77,7 +77,7 @@ describe('ServiceAccessManagementApi', () => {
|
|
|
77
77
|
vi.mocked(client.get).mockResolvedValue([record])
|
|
78
78
|
const result = await api.getMany({ paginate: false })
|
|
79
79
|
const url = vi.mocked(client.get).mock.calls[0][0] as string
|
|
80
|
-
expect(url).toContain('paginate
|
|
80
|
+
expect(decodeURIComponent(url)).toContain('"paginate":false')
|
|
81
81
|
expect(result).toEqual([record])
|
|
82
82
|
})
|
|
83
83
|
|
|
@@ -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 } from '../../core/types'
|
|
4
3
|
import type { ServiceAccessManagement } from './types'
|
|
5
4
|
|
|
6
|
-
export class ServiceAccessManagementApi
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
this.client = client
|
|
11
|
-
}
|
|
12
|
-
|
|
5
|
+
export class ServiceAccessManagementApi
|
|
6
|
+
extends BaseApi
|
|
7
|
+
implements HasGetMany<ServiceAccessManagement>
|
|
8
|
+
{
|
|
13
9
|
/** Returns a paginated list of which users have access to which services. */
|
|
14
10
|
getMany(
|
|
15
11
|
query: ListQuery<ServiceAccessManagement> & { paginate: false },
|
|
@@ -19,11 +15,15 @@ export class ServiceAccessManagementApi implements HasGetMany<ServiceAccessManag
|
|
|
19
15
|
query?: ListQuery<ServiceAccessManagement> & { paginate?: true },
|
|
20
16
|
headers?: Record<string, string>,
|
|
21
17
|
): Promise<Paginated<ServiceAccessManagement>>
|
|
18
|
+
getMany(
|
|
19
|
+
query?: ListQuery<ServiceAccessManagement>,
|
|
20
|
+
headers?: Record<string, string>,
|
|
21
|
+
): Promise<Paginated<ServiceAccessManagement> | ServiceAccessManagement[]>
|
|
22
22
|
getMany(
|
|
23
23
|
query?: ListQuery<ServiceAccessManagement>,
|
|
24
24
|
headers?: Record<string, string>,
|
|
25
25
|
): Promise<Paginated<ServiceAccessManagement> | ServiceAccessManagement[]> {
|
|
26
|
-
const queryString =
|
|
26
|
+
const queryString = this.toQueryString(query)
|
|
27
27
|
return this.client.get<Paginated<ServiceAccessManagement> | ServiceAccessManagement[]>(
|
|
28
28
|
`/service-access-management${queryString}`,
|
|
29
29
|
headers,
|
|
@@ -66,7 +66,7 @@ describe('StickerUsersApi', () => {
|
|
|
66
66
|
await api.getMany({ page: 2, perPage: 5 })
|
|
67
67
|
const url = vi.mocked(client.get).mock.calls[0][0] as string
|
|
68
68
|
expect(url).toContain('/sticker-users?')
|
|
69
|
-
expect(url).toContain('page
|
|
69
|
+
expect(decodeURIComponent(url)).toContain('"page":2')
|
|
70
70
|
})
|
|
71
71
|
|
|
72
72
|
it('forwards custom headers', async () => {
|