@ikatec/digisac-api-sdk 4.0.0 → 4.2.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 +34 -4
- package/dist/apis/authHistory/AuthHistoryApi.cjs +11 -17
- package/dist/apis/authHistory/AuthHistoryApi.cjs.map +1 -1
- package/dist/apis/authHistory/AuthHistoryApi.d.ts +10 -18
- package/dist/apis/authHistory/AuthHistoryApi.d.ts.map +1 -1
- package/dist/apis/authHistory/AuthHistoryApi.mjs +11 -15
- package/dist/apis/authHistory/AuthHistoryApi.mjs.map +1 -1
- package/dist/apis/authHistory/types.d.ts +4 -3
- package/dist/apis/authHistory/types.d.ts.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/customFields/types.d.ts +21 -19
- package/dist/apis/customFields/types.d.ts.map +1 -1
- package/dist/apis/dashboard/DashboardApi.cjs +19 -0
- package/dist/apis/dashboard/DashboardApi.cjs.map +1 -0
- package/dist/apis/dashboard/DashboardApi.d.ts +12 -0
- package/dist/apis/dashboard/DashboardApi.d.ts.map +1 -0
- package/dist/apis/dashboard/DashboardApi.mjs +18 -0
- package/dist/apis/dashboard/DashboardApi.mjs.map +1 -0
- package/dist/apis/dashboard/index.cjs +4 -0
- package/dist/apis/dashboard/index.d.ts +3 -0
- package/dist/apis/dashboard/index.d.ts.map +1 -0
- package/dist/apis/dashboard/index.mjs +3 -0
- package/dist/apis/dashboard/types.cjs +0 -0
- package/dist/apis/dashboard/types.d.ts +53 -0
- package/dist/apis/dashboard/types.d.ts.map +1 -0
- package/dist/apis/dashboard/types.mjs +0 -0
- package/dist/apis/holiday/types.d.ts +34 -8
- package/dist/apis/holiday/types.d.ts.map +1 -1
- package/dist/apis/index.cjs +6 -0
- package/dist/apis/index.d.ts +2 -0
- package/dist/apis/index.d.ts.map +1 -1
- package/dist/apis/index.mjs +5 -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/now/NowApi.cjs +37 -0
- package/dist/apis/now/NowApi.cjs.map +1 -0
- package/dist/apis/now/NowApi.d.ts +26 -0
- package/dist/apis/now/NowApi.d.ts.map +1 -0
- package/dist/apis/now/NowApi.mjs +36 -0
- package/dist/apis/now/NowApi.mjs.map +1 -0
- package/dist/apis/now/index.cjs +4 -0
- package/dist/apis/now/index.d.ts +3 -0
- package/dist/apis/now/index.d.ts.map +1 -0
- package/dist/apis/now/index.mjs +3 -0
- package/dist/apis/now/types.cjs +0 -0
- package/dist/apis/now/types.d.ts +45 -0
- package/dist/apis/now/types.d.ts.map +1 -0
- package/dist/apis/now/types.mjs +0 -0
- package/dist/apis/people/types.d.ts +7 -2
- package/dist/apis/people/types.d.ts.map +1 -1
- package/dist/apis/permissions/PermissionsApi.cjs +6 -2
- package/dist/apis/permissions/PermissionsApi.cjs.map +1 -1
- package/dist/apis/permissions/PermissionsApi.d.ts +7 -3
- package/dist/apis/permissions/PermissionsApi.d.ts.map +1 -1
- package/dist/apis/permissions/PermissionsApi.mjs +6 -2
- package/dist/apis/permissions/PermissionsApi.mjs.map +1 -1
- package/dist/apis/permissions/types.d.ts +4 -14
- package/dist/apis/permissions/types.d.ts.map +1 -1
- package/dist/apis/personalAccessTokens/PersonalAccessTokensApi.cjs +5 -0
- package/dist/apis/personalAccessTokens/PersonalAccessTokensApi.cjs.map +1 -1
- package/dist/apis/personalAccessTokens/PersonalAccessTokensApi.d.ts +5 -0
- package/dist/apis/personalAccessTokens/PersonalAccessTokensApi.d.ts.map +1 -1
- package/dist/apis/personalAccessTokens/PersonalAccessTokensApi.mjs +5 -0
- package/dist/apis/personalAccessTokens/PersonalAccessTokensApi.mjs.map +1 -1
- package/dist/apis/personalAccessTokens/types.d.ts +23 -4
- package/dist/apis/personalAccessTokens/types.d.ts.map +1 -1
- package/dist/apis/roles/RolesApi.cjs.map +1 -1
- package/dist/apis/roles/RolesApi.d.ts +2 -2
- package/dist/apis/roles/RolesApi.d.ts.map +1 -1
- package/dist/apis/roles/RolesApi.mjs.map +1 -1
- package/dist/apis/roles/types.d.ts +27 -4
- package/dist/apis/roles/types.d.ts.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 +7 -13
- package/dist/apis/terms/TermsApi.cjs.map +1 -1
- package/dist/apis/terms/TermsApi.d.ts +6 -5
- package/dist/apis/terms/TermsApi.d.ts.map +1 -1
- package/dist/apis/terms/TermsApi.mjs +7 -11
- package/dist/apis/terms/TermsApi.mjs.map +1 -1
- package/dist/apis/timetable/types.d.ts +12 -7
- package/dist/apis/timetable/types.d.ts.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 +3 -40
- package/dist/core/BaseCrudApi.cjs.map +1 -1
- package/dist/core/BaseCrudApi.d.ts +4 -23
- package/dist/core/BaseCrudApi.d.ts.map +1 -1
- package/dist/core/BaseCrudApi.mjs +3 -38
- package/dist/core/BaseCrudApi.mjs.map +1 -1
- package/dist/core/BaseReadApi.cjs +44 -0
- package/dist/core/BaseReadApi.cjs.map +1 -0
- package/dist/core/BaseReadApi.d.ts +32 -0
- package/dist/core/BaseReadApi.d.ts.map +1 -0
- package/dist/core/BaseReadApi.mjs +43 -0
- package/dist/core/BaseReadApi.mjs.map +1 -0
- 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 +4 -0
- package/dist/core/index.d.ts +4 -0
- package/dist/core/index.d.ts.map +1 -1
- package/dist/core/index.mjs +3 -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 +4 -0
- package/dist/index.mjs +3 -1
- package/package.json +1 -1
- package/src/apis/authHistory/AuthHistoryApi.test.ts +11 -3
- package/src/apis/authHistory/AuthHistoryApi.ts +11 -37
- package/src/apis/authHistory/types.ts +4 -3
- 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/customFields/types.ts +21 -25
- package/src/apis/dashboard/DashboardApi.test.ts +82 -0
- package/src/apis/dashboard/DashboardApi.ts +18 -0
- package/src/apis/dashboard/index.ts +2 -0
- package/src/apis/dashboard/types.ts +53 -0
- package/src/apis/holiday/types.ts +36 -8
- package/src/apis/index.ts +2 -0
- package/src/apis/me/MeApi.ts +2 -8
- package/src/apis/messages/MessagesApi.test.ts +2 -2
- package/src/apis/now/NowApi.test.ts +125 -0
- package/src/apis/now/NowApi.ts +59 -0
- package/src/apis/now/index.ts +2 -0
- package/src/apis/now/types.ts +47 -0
- package/src/apis/payloads.test-d.ts +39 -0
- package/src/apis/payloads.test.ts +81 -0
- package/src/apis/people/types.ts +7 -2
- package/src/apis/permissions/PermissionsApi.test.ts +93 -0
- package/src/apis/permissions/PermissionsApi.ts +7 -7
- package/src/apis/permissions/types.ts +4 -16
- package/src/apis/personalAccessTokens/PersonalAccessTokensApi.ts +5 -0
- package/src/apis/personalAccessTokens/types.ts +25 -4
- package/src/apis/queryFormat.test.ts +273 -0
- package/src/apis/roles/RolesApi.ts +7 -2
- package/src/apis/roles/types.ts +27 -4
- 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 +7 -13
- package/src/apis/timetable/types.ts +13 -7
- 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 +7 -63
- package/src/core/BaseReadApi.ts +70 -0
- package/src/core/bindMethods.ts +26 -0
- package/src/core/index.ts +4 -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":"TermsApi.mjs","names":[],"sources":["../../../src/apis/terms/TermsApi.ts"],"sourcesContent":["import
|
|
1
|
+
{"version":3,"file":"TermsApi.mjs","names":[],"sources":["../../../src/apis/terms/TermsApi.ts"],"sourcesContent":["import { BaseApi } from '../../core/BaseApi'\nimport type { GetByIdQuery, HasGetById } from '../../core/types'\nimport type { Term } from './types'\n\n/**\n * Platform terms of use. Terms are published by Agnus (billing) and accepted by the account users,\n * so the `/terms` route has no create/list/update/delete — only the routes below.\n *\n * `GET /terms/:id/export-pdf` is not exposed: it answers a binary PDF, and `ApiClient` only\n * handles JSON/text bodies.\n */\nexport class TermsApi extends BaseApi implements HasGetById<Term> {\n public readonly basePath = '/terms'\n\n /**\n * Returns a single term by its ID, scoped to the current account. When it does not exist the\n * backend answers 200 with an empty body, which resolves to `undefined`.\n */\n getById(id: string, query?: GetByIdQuery<Term>, headers?: Record<string, string>): Promise<Term> {\n const queryString = this.toQueryString(query)\n return this.client.get<Term>(`${this.basePath}/${id}${queryString}`, headers)\n }\n\n /**\n * Returns the terms of the current account that were not agreed to yet (`agreementDate` null).\n * The backend answers a plain array (not paginated) and ignores query parameters.\n */\n getNotAgreed(headers?: Record<string, string>): Promise<Term[]> {\n return this.client.get<Term[]>(`${this.basePath}/terms-not-agreed`, headers)\n }\n\n /**\n * Agrees to the given terms on behalf of the authenticated user. IRREVERSIBLE: the acceptance is\n * registered on Agnus, the terms get `agreementDate`/`userId`, and the signed PDFs are e-mailed\n * to the user. Only terms of the current account are affected.\n *\n * The response is passed through from Agnus as-is, so it is not typed.\n */\n agree(termIds: string[], headers?: Record<string, string>): Promise<unknown> {\n return this.client.patch<unknown, { terms: string[] }>(\n `${this.basePath}/agree`,\n { terms: termIds },\n headers,\n )\n }\n}\n"],"mappings":";;;;;;;;;;AAWA,IAAa,WAAb,cAA8B,QAAoC;CAChE,AAAgB,WAAW;;;;;CAM3B,QAAQ,IAAY,OAA4B,SAAiD;EAC/F,MAAM,cAAc,KAAK,cAAc,MAAM;AAC7C,SAAO,KAAK,OAAO,IAAU,GAAG,KAAK,SAAS,GAAG,KAAK,eAAe,QAAQ;;;;;;CAO/E,aAAa,SAAmD;AAC9D,SAAO,KAAK,OAAO,IAAY,GAAG,KAAK,SAAS,oBAAoB,QAAQ;;;;;;;;;CAU9E,MAAM,SAAmB,SAAoD;AAC3E,SAAO,KAAK,OAAO,MACjB,GAAG,KAAK,SAAS,SACjB,EAAE,OAAO,SAAS,EAClB,QACD"}
|
|
@@ -1,8 +1,14 @@
|
|
|
1
|
+
export type TimetableWeekDay = 'sun' | 'mon' | 'tue' | 'wed' | 'thu' | 'fri' | 'sat';
|
|
2
|
+
/**
|
|
3
|
+
* A working period of the timetable. `start`/`end` are `HH:MM` and `end` must be later than
|
|
4
|
+
* `start`; the period applies to every day in `weekDays`.
|
|
5
|
+
*/
|
|
1
6
|
export type TimetableWorkSlot = {
|
|
2
|
-
|
|
7
|
+
/** `HH:MM` */
|
|
3
8
|
start: string;
|
|
9
|
+
/** `HH:MM`, later than `start`. */
|
|
4
10
|
end: string;
|
|
5
|
-
|
|
11
|
+
weekDays: TimetableWeekDay[];
|
|
6
12
|
};
|
|
7
13
|
export type Timetable = {
|
|
8
14
|
id: string;
|
|
@@ -14,13 +20,12 @@ export type Timetable = {
|
|
|
14
20
|
updatedAt: string;
|
|
15
21
|
};
|
|
16
22
|
export type CreateTimetablePayload = {
|
|
23
|
+
/** Must be unique in the account (409 otherwise, unless the account allows duplicate names). */
|
|
17
24
|
name: string;
|
|
25
|
+
/** Minutes before the end of the period to notify. Must be truthy: `0` answers 400 `required`. */
|
|
18
26
|
previousTimeToNotification: number;
|
|
19
27
|
workPlan: TimetableWorkSlot[];
|
|
20
28
|
};
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
previousTimeToNotification?: number;
|
|
24
|
-
workPlan?: TimetableWorkSlot[];
|
|
25
|
-
};
|
|
29
|
+
/** The backend requires the three fields on every update (400 `required` otherwise). */
|
|
30
|
+
export type UpdateTimetablePayload = CreateTimetablePayload;
|
|
26
31
|
//# sourceMappingURL=types.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/apis/timetable/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/apis/timetable/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,gBAAgB,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,CAAA;AAEpF;;;GAGG;AACH,MAAM,MAAM,iBAAiB,GAAG;IAC9B,cAAc;IACd,KAAK,EAAE,MAAM,CAAA;IACb,mCAAmC;IACnC,GAAG,EAAE,MAAM,CAAA;IACX,QAAQ,EAAE,gBAAgB,EAAE,CAAA;CAC7B,CAAA;AAED,MAAM,MAAM,SAAS,GAAG;IACtB,EAAE,EAAE,MAAM,CAAA;IACV,IAAI,EAAE,MAAM,CAAA;IACZ,0BAA0B,EAAE,MAAM,CAAA;IAClC,QAAQ,EAAE,iBAAiB,EAAE,CAAA;IAC7B,SAAS,EAAE,MAAM,CAAA;IACjB,SAAS,EAAE,MAAM,CAAA;IACjB,SAAS,EAAE,MAAM,CAAA;CAClB,CAAA;AAED,MAAM,MAAM,sBAAsB,GAAG;IACnC,gGAAgG;IAChG,IAAI,EAAE,MAAM,CAAA;IACZ,kGAAkG;IAClG,0BAA0B,EAAE,MAAM,CAAA;IAClC,QAAQ,EAAE,iBAAiB,EAAE,CAAA;CAC9B,CAAA;AAED,wFAAwF;AACxF,MAAM,MAAM,sBAAsB,GAAG,sBAAsB,CAAA"}
|
|
@@ -1,12 +1,9 @@
|
|
|
1
1
|
Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
|
|
2
|
+
const require_core_BaseApi = require('../../core/BaseApi.cjs');
|
|
2
3
|
|
|
3
4
|
//#region src/apis/transcripts/TranscriptsApi.ts
|
|
4
|
-
var TranscriptsApi = class {
|
|
5
|
-
client;
|
|
5
|
+
var TranscriptsApi = class extends require_core_BaseApi.BaseApi {
|
|
6
6
|
basePath = "/transcripts";
|
|
7
|
-
constructor(client) {
|
|
8
|
-
this.client = client;
|
|
9
|
-
}
|
|
10
7
|
/** Triggers audio transcription for a message by dispatching an async job, and marks it as transcribing. */
|
|
11
8
|
getById(id, headers) {
|
|
12
9
|
return this.client.get(`${this.basePath}/${id}`, headers);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TranscriptsApi.cjs","names":[],"sources":["../../../src/apis/transcripts/TranscriptsApi.ts"],"sourcesContent":["import
|
|
1
|
+
{"version":3,"file":"TranscriptsApi.cjs","names":["BaseApi"],"sources":["../../../src/apis/transcripts/TranscriptsApi.ts"],"sourcesContent":["import { BaseApi } from '../../core/BaseApi'\nimport type { HasGetById } from '../../core/types'\nimport type { TranscriptResponse } from './types'\n\nexport class TranscriptsApi extends BaseApi implements HasGetById<TranscriptResponse> {\n private readonly basePath = '/transcripts'\n\n /** Triggers audio transcription for a message by dispatching an async job, and marks it as transcribing. */\n getById(id: string, headers?: Record<string, string>): Promise<TranscriptResponse> {\n return this.client.get<TranscriptResponse>(`${this.basePath}/${id}`, headers)\n }\n}\n"],"mappings":";;;;AAIA,IAAa,iBAAb,cAAoCA,6BAAkD;CACpF,AAAiB,WAAW;;CAG5B,QAAQ,IAAY,SAA+D;AACjF,SAAO,KAAK,OAAO,IAAwB,GAAG,KAAK,SAAS,GAAG,MAAM,QAAQ"}
|
|
@@ -1,10 +1,8 @@
|
|
|
1
|
-
import
|
|
1
|
+
import { BaseApi } from '../../core/BaseApi';
|
|
2
2
|
import type { HasGetById } from '../../core/types';
|
|
3
3
|
import type { TranscriptResponse } from './types';
|
|
4
|
-
export declare class TranscriptsApi implements HasGetById<TranscriptResponse> {
|
|
5
|
-
private readonly client;
|
|
4
|
+
export declare class TranscriptsApi extends BaseApi implements HasGetById<TranscriptResponse> {
|
|
6
5
|
private readonly basePath;
|
|
7
|
-
constructor(client: ApiClient);
|
|
8
6
|
/** Triggers audio transcription for a message by dispatching an async job, and marks it as transcribing. */
|
|
9
7
|
getById(id: string, headers?: Record<string, string>): Promise<TranscriptResponse>;
|
|
10
8
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TranscriptsApi.d.ts","sourceRoot":"","sources":["../../../src/apis/transcripts/TranscriptsApi.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"TranscriptsApi.d.ts","sourceRoot":"","sources":["../../../src/apis/transcripts/TranscriptsApi.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAA;AAC5C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAA;AAClD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,SAAS,CAAA;AAEjD,qBAAa,cAAe,SAAQ,OAAQ,YAAW,UAAU,CAAC,kBAAkB,CAAC;IACnF,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAiB;IAE1C,4GAA4G;IAC5G,OAAO,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC,kBAAkB,CAAC;CAGnF"}
|
|
@@ -1,10 +1,8 @@
|
|
|
1
|
+
import { BaseApi } from "../../core/BaseApi.mjs";
|
|
2
|
+
|
|
1
3
|
//#region src/apis/transcripts/TranscriptsApi.ts
|
|
2
|
-
var TranscriptsApi = class {
|
|
3
|
-
client;
|
|
4
|
+
var TranscriptsApi = class extends BaseApi {
|
|
4
5
|
basePath = "/transcripts";
|
|
5
|
-
constructor(client) {
|
|
6
|
-
this.client = client;
|
|
7
|
-
}
|
|
8
6
|
/** Triggers audio transcription for a message by dispatching an async job, and marks it as transcribing. */
|
|
9
7
|
getById(id, headers) {
|
|
10
8
|
return this.client.get(`${this.basePath}/${id}`, headers);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TranscriptsApi.mjs","names":[],"sources":["../../../src/apis/transcripts/TranscriptsApi.ts"],"sourcesContent":["import
|
|
1
|
+
{"version":3,"file":"TranscriptsApi.mjs","names":[],"sources":["../../../src/apis/transcripts/TranscriptsApi.ts"],"sourcesContent":["import { BaseApi } from '../../core/BaseApi'\nimport type { HasGetById } from '../../core/types'\nimport type { TranscriptResponse } from './types'\n\nexport class TranscriptsApi extends BaseApi implements HasGetById<TranscriptResponse> {\n private readonly basePath = '/transcripts'\n\n /** Triggers audio transcription for a message by dispatching an async job, and marks it as transcribing. */\n getById(id: string, headers?: Record<string, string>): Promise<TranscriptResponse> {\n return this.client.get<TranscriptResponse>(`${this.basePath}/${id}`, headers)\n }\n}\n"],"mappings":";;;AAIA,IAAa,iBAAb,cAAoC,QAAkD;CACpF,AAAiB,WAAW;;CAG5B,QAAQ,IAAY,SAA+D;AACjF,SAAO,KAAK,OAAO,IAAwB,GAAG,KAAK,SAAS,GAAG,MAAM,QAAQ"}
|
package/dist/core/ApiClient.d.ts
CHANGED
|
@@ -1,5 +1,8 @@
|
|
|
1
|
+
import type { QueryFormat } from './queryString';
|
|
1
2
|
export type HttpMethod = 'GET' | 'POST' | 'PUT' | 'PATCH' | 'DELETE';
|
|
2
3
|
export interface ApiClient {
|
|
4
|
+
/** How list/get queries are serialized in the URL (defaults to `'json'` when absent). */
|
|
5
|
+
readonly queryFormat?: QueryFormat;
|
|
3
6
|
setAccessToken(accessToken: string): this;
|
|
4
7
|
request<TResponse = unknown, TBody = unknown>(method: HttpMethod, endpoint: string, body?: TBody, headers?: Record<string, string>): Promise<TResponse>;
|
|
5
8
|
get<TResponse = unknown>(endpoint: string, headers?: Record<string, string>): Promise<TResponse>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ApiClient.d.ts","sourceRoot":"","sources":["../../src/core/ApiClient.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,UAAU,GAAG,KAAK,GAAG,MAAM,GAAG,KAAK,GAAG,OAAO,GAAG,QAAQ,CAAA;AAEpE,MAAM,WAAW,SAAS;IACxB,cAAc,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI,CAAA;IACzC,OAAO,CAAC,SAAS,GAAG,OAAO,EAAE,KAAK,GAAG,OAAO,EAC1C,MAAM,EAAE,UAAU,EAClB,QAAQ,EAAE,MAAM,EAChB,IAAI,CAAC,EAAE,KAAK,EACZ,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAC/B,OAAO,CAAC,SAAS,CAAC,CAAA;IACrB,GAAG,CAAC,SAAS,GAAG,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC,SAAS,CAAC,CAAA;IAChG,IAAI,CAAC,SAAS,GAAG,OAAO,EAAE,KAAK,GAAG,OAAO,EACvC,QAAQ,EAAE,MAAM,EAChB,IAAI,CAAC,EAAE,KAAK,EACZ,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAC/B,OAAO,CAAC,SAAS,CAAC,CAAA;IACrB,GAAG,CAAC,SAAS,GAAG,OAAO,EAAE,KAAK,GAAG,OAAO,EACtC,QAAQ,EAAE,MAAM,EAChB,IAAI,CAAC,EAAE,KAAK,EACZ,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAC/B,OAAO,CAAC,SAAS,CAAC,CAAA;IACrB,KAAK,CAAC,SAAS,GAAG,OAAO,EAAE,KAAK,GAAG,OAAO,EACxC,QAAQ,EAAE,MAAM,EAChB,IAAI,CAAC,EAAE,KAAK,EACZ,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAC/B,OAAO,CAAC,SAAS,CAAC,CAAA;IACrB,MAAM,CAAC,SAAS,GAAG,OAAO,EACxB,QAAQ,EAAE,MAAM,EAChB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAC/B,OAAO,CAAC,SAAS,CAAC,CAAA;CACtB"}
|
|
1
|
+
{"version":3,"file":"ApiClient.d.ts","sourceRoot":"","sources":["../../src/core/ApiClient.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,eAAe,CAAA;AAEhD,MAAM,MAAM,UAAU,GAAG,KAAK,GAAG,MAAM,GAAG,KAAK,GAAG,OAAO,GAAG,QAAQ,CAAA;AAEpE,MAAM,WAAW,SAAS;IACxB,yFAAyF;IACzF,QAAQ,CAAC,WAAW,CAAC,EAAE,WAAW,CAAA;IAClC,cAAc,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI,CAAA;IACzC,OAAO,CAAC,SAAS,GAAG,OAAO,EAAE,KAAK,GAAG,OAAO,EAC1C,MAAM,EAAE,UAAU,EAClB,QAAQ,EAAE,MAAM,EAChB,IAAI,CAAC,EAAE,KAAK,EACZ,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAC/B,OAAO,CAAC,SAAS,CAAC,CAAA;IACrB,GAAG,CAAC,SAAS,GAAG,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC,SAAS,CAAC,CAAA;IAChG,IAAI,CAAC,SAAS,GAAG,OAAO,EAAE,KAAK,GAAG,OAAO,EACvC,QAAQ,EAAE,MAAM,EAChB,IAAI,CAAC,EAAE,KAAK,EACZ,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAC/B,OAAO,CAAC,SAAS,CAAC,CAAA;IACrB,GAAG,CAAC,SAAS,GAAG,OAAO,EAAE,KAAK,GAAG,OAAO,EACtC,QAAQ,EAAE,MAAM,EAChB,IAAI,CAAC,EAAE,KAAK,EACZ,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAC/B,OAAO,CAAC,SAAS,CAAC,CAAA;IACrB,KAAK,CAAC,SAAS,GAAG,OAAO,EAAE,KAAK,GAAG,OAAO,EACxC,QAAQ,EAAE,MAAM,EAChB,IAAI,CAAC,EAAE,KAAK,EACZ,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAC/B,OAAO,CAAC,SAAS,CAAC,CAAA;IACrB,MAAM,CAAC,SAAS,GAAG,OAAO,EACxB,QAAQ,EAAE,MAAM,EAChB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAC/B,OAAO,CAAC,SAAS,CAAC,CAAA;CACtB"}
|
|
@@ -15,8 +15,6 @@ const require_core_BaseCrudApi = require('./BaseCrudApi.cjs');
|
|
|
15
15
|
var ArchivableCrudApi = class extends require_core_BaseCrudApi.BaseCrudApi {
|
|
16
16
|
constructor(client, basePath) {
|
|
17
17
|
super(client, basePath);
|
|
18
|
-
this.archive = this.archive.bind(this);
|
|
19
|
-
this.unarchive = this.unarchive.bind(this);
|
|
20
18
|
}
|
|
21
19
|
/**
|
|
22
20
|
* Archives a resource (soft-delete) by setting `archivedAt` to the current time.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ArchivableCrudApi.cjs","names":["BaseCrudApi"],"sources":["../../src/core/ArchivableCrudApi.ts"],"sourcesContent":["import type { ApiClient } from './ApiClient'\nimport { BaseCrudApi } from './BaseCrudApi'\nimport type { ListQuery } from './types'\n\n/**\n * CRUD base for resources that support soft-delete via an `archivedAt` timestamp\n * (PUT `${basePath}/${id}` with `{ archivedAt }`). Adds `archive`/`unarchive` on\n * top of {@link BaseCrudApi}.\n *\n * Only extend this for resources whose archive write mechanism is `archivedAt`.\n * Resources that archive through a different field (e.g. cards use `isArchived`)\n * or a dedicated endpoint (e.g. ticket-topics POST `/archive`) must NOT use this\n * base and should implement `archive`/`unarchive` themselves.\n */\nexport class ArchivableCrudApi<\n TResponse,\n TCreate,\n TUpdate extends { archivedAt?: string | null } = TCreate & { archivedAt?: string | null },\n TQuery extends ListQuery<TResponse> = ListQuery<TResponse>,\n> extends BaseCrudApi<TResponse, TCreate, TUpdate, TQuery> {\n constructor(client: ApiClient, basePath: string) {\n super(client, basePath)\n
|
|
1
|
+
{"version":3,"file":"ArchivableCrudApi.cjs","names":["BaseCrudApi"],"sources":["../../src/core/ArchivableCrudApi.ts"],"sourcesContent":["import type { ApiClient } from './ApiClient'\nimport { BaseCrudApi } from './BaseCrudApi'\nimport type { ListQuery } from './types'\n\n/**\n * CRUD base for resources that support soft-delete via an `archivedAt` timestamp\n * (PUT `${basePath}/${id}` with `{ archivedAt }`). Adds `archive`/`unarchive` on\n * top of {@link BaseCrudApi}.\n *\n * Only extend this for resources whose archive write mechanism is `archivedAt`.\n * Resources that archive through a different field (e.g. cards use `isArchived`)\n * or a dedicated endpoint (e.g. ticket-topics POST `/archive`) must NOT use this\n * base and should implement `archive`/`unarchive` themselves.\n */\nexport class ArchivableCrudApi<\n TResponse,\n TCreate,\n TUpdate extends { archivedAt?: string | null } = TCreate & { archivedAt?: string | null },\n TQuery extends ListQuery<TResponse> = ListQuery<TResponse>,\n> extends BaseCrudApi<TResponse, TCreate, TUpdate, TQuery> {\n constructor(client: ApiClient, basePath: string) {\n super(client, basePath)\n }\n\n /**\n * Archives a resource (soft-delete) by setting `archivedAt` to the current time.\n * @permissions $resourceName.update\n */\n archive(id: string, headers?: Record<string, string>): Promise<TResponse> {\n return this.updateById(id, { archivedAt: new Date().toISOString() } as TUpdate, headers)\n }\n\n /**\n * Restores a previously archived resource by clearing `archivedAt`.\n * @permissions $resourceName.update\n */\n unarchive(id: string, headers?: Record<string, string>): Promise<TResponse> {\n return this.updateById(id, { archivedAt: null } as TUpdate, headers)\n }\n}\n"],"mappings":";;;;;;;;;;;;;;AAcA,IAAa,oBAAb,cAKUA,qCAAiD;CACzD,YAAY,QAAmB,UAAkB;AAC/C,QAAM,QAAQ,SAAS;;;;;;CAOzB,QAAQ,IAAY,SAAsD;AACxE,SAAO,KAAK,WAAW,IAAI,EAAE,6BAAY,IAAI,MAAM,EAAC,aAAa,EAAE,EAAa,QAAQ;;;;;;CAO1F,UAAU,IAAY,SAAsD;AAC1E,SAAO,KAAK,WAAW,IAAI,EAAE,YAAY,MAAM,EAAa,QAAQ"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ArchivableCrudApi.d.ts","sourceRoot":"","sources":["../../src/core/ArchivableCrudApi.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAA;AAC5C,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAA;AAC3C,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,SAAS,CAAA;AAExC;;;;;;;;;GASG;AACH,qBAAa,iBAAiB,CAC5B,SAAS,EACT,OAAO,EACP,OAAO,SAAS;IAAE,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,GAAG,OAAO,GAAG;IAAE,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,EACzF,MAAM,SAAS,SAAS,CAAC,SAAS,CAAC,GAAG,SAAS,CAAC,SAAS,CAAC,CAC1D,SAAQ,WAAW,CAAC,SAAS,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,CAAC;gBAC5C,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM;
|
|
1
|
+
{"version":3,"file":"ArchivableCrudApi.d.ts","sourceRoot":"","sources":["../../src/core/ArchivableCrudApi.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAA;AAC5C,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAA;AAC3C,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,SAAS,CAAA;AAExC;;;;;;;;;GASG;AACH,qBAAa,iBAAiB,CAC5B,SAAS,EACT,OAAO,EACP,OAAO,SAAS;IAAE,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,GAAG,OAAO,GAAG;IAAE,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,EACzF,MAAM,SAAS,SAAS,CAAC,SAAS,CAAC,GAAG,SAAS,CAAC,SAAS,CAAC,CAC1D,SAAQ,WAAW,CAAC,SAAS,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,CAAC;gBAC5C,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM;IAI/C;;;OAGG;IACH,OAAO,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC,SAAS,CAAC;IAIzE;;;OAGG;IACH,SAAS,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC,SAAS,CAAC;CAG5E"}
|
|
@@ -14,8 +14,6 @@ import { BaseCrudApi } from "./BaseCrudApi.mjs";
|
|
|
14
14
|
var ArchivableCrudApi = class extends BaseCrudApi {
|
|
15
15
|
constructor(client, basePath) {
|
|
16
16
|
super(client, basePath);
|
|
17
|
-
this.archive = this.archive.bind(this);
|
|
18
|
-
this.unarchive = this.unarchive.bind(this);
|
|
19
17
|
}
|
|
20
18
|
/**
|
|
21
19
|
* Archives a resource (soft-delete) by setting `archivedAt` to the current time.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ArchivableCrudApi.mjs","names":[],"sources":["../../src/core/ArchivableCrudApi.ts"],"sourcesContent":["import type { ApiClient } from './ApiClient'\nimport { BaseCrudApi } from './BaseCrudApi'\nimport type { ListQuery } from './types'\n\n/**\n * CRUD base for resources that support soft-delete via an `archivedAt` timestamp\n * (PUT `${basePath}/${id}` with `{ archivedAt }`). Adds `archive`/`unarchive` on\n * top of {@link BaseCrudApi}.\n *\n * Only extend this for resources whose archive write mechanism is `archivedAt`.\n * Resources that archive through a different field (e.g. cards use `isArchived`)\n * or a dedicated endpoint (e.g. ticket-topics POST `/archive`) must NOT use this\n * base and should implement `archive`/`unarchive` themselves.\n */\nexport class ArchivableCrudApi<\n TResponse,\n TCreate,\n TUpdate extends { archivedAt?: string | null } = TCreate & { archivedAt?: string | null },\n TQuery extends ListQuery<TResponse> = ListQuery<TResponse>,\n> extends BaseCrudApi<TResponse, TCreate, TUpdate, TQuery> {\n constructor(client: ApiClient, basePath: string) {\n super(client, basePath)\n
|
|
1
|
+
{"version":3,"file":"ArchivableCrudApi.mjs","names":[],"sources":["../../src/core/ArchivableCrudApi.ts"],"sourcesContent":["import type { ApiClient } from './ApiClient'\nimport { BaseCrudApi } from './BaseCrudApi'\nimport type { ListQuery } from './types'\n\n/**\n * CRUD base for resources that support soft-delete via an `archivedAt` timestamp\n * (PUT `${basePath}/${id}` with `{ archivedAt }`). Adds `archive`/`unarchive` on\n * top of {@link BaseCrudApi}.\n *\n * Only extend this for resources whose archive write mechanism is `archivedAt`.\n * Resources that archive through a different field (e.g. cards use `isArchived`)\n * or a dedicated endpoint (e.g. ticket-topics POST `/archive`) must NOT use this\n * base and should implement `archive`/`unarchive` themselves.\n */\nexport class ArchivableCrudApi<\n TResponse,\n TCreate,\n TUpdate extends { archivedAt?: string | null } = TCreate & { archivedAt?: string | null },\n TQuery extends ListQuery<TResponse> = ListQuery<TResponse>,\n> extends BaseCrudApi<TResponse, TCreate, TUpdate, TQuery> {\n constructor(client: ApiClient, basePath: string) {\n super(client, basePath)\n }\n\n /**\n * Archives a resource (soft-delete) by setting `archivedAt` to the current time.\n * @permissions $resourceName.update\n */\n archive(id: string, headers?: Record<string, string>): Promise<TResponse> {\n return this.updateById(id, { archivedAt: new Date().toISOString() } as TUpdate, headers)\n }\n\n /**\n * Restores a previously archived resource by clearing `archivedAt`.\n * @permissions $resourceName.update\n */\n unarchive(id: string, headers?: Record<string, string>): Promise<TResponse> {\n return this.updateById(id, { archivedAt: null } as TUpdate, headers)\n }\n}\n"],"mappings":";;;;;;;;;;;;;AAcA,IAAa,oBAAb,cAKU,YAAiD;CACzD,YAAY,QAAmB,UAAkB;AAC/C,QAAM,QAAQ,SAAS;;;;;;CAOzB,QAAQ,IAAY,SAAsD;AACxE,SAAO,KAAK,WAAW,IAAI,EAAE,6BAAY,IAAI,MAAM,EAAC,aAAa,EAAE,EAAa,QAAQ;;;;;;CAO1F,UAAU,IAAY,SAAsD;AAC1E,SAAO,KAAK,WAAW,IAAI,EAAE,YAAY,MAAM,EAAa,QAAQ"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
|
|
2
|
+
const require_core_queryString = require('./queryString.cjs');
|
|
3
|
+
const require_core_bindMethods = require('./bindMethods.cjs');
|
|
4
|
+
const require_core_withQueryFormat = require('./withQueryFormat.cjs');
|
|
5
|
+
|
|
6
|
+
//#region src/core/BaseApi.ts
|
|
7
|
+
/**
|
|
8
|
+
* Base of every API class: holds the client, binds the methods to the instance (so they can be
|
|
9
|
+
* destructured) and serializes queries in the client's `queryFormat`.
|
|
10
|
+
*/
|
|
11
|
+
var BaseApi = class {
|
|
12
|
+
client;
|
|
13
|
+
constructor(client) {
|
|
14
|
+
this.client = client;
|
|
15
|
+
require_core_bindMethods.bindMethods(this);
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Returns a copy of this API whose requests serialize queries in `format`, overriding the
|
|
19
|
+
* client's `queryFormat`. This instance is not changed.
|
|
20
|
+
*
|
|
21
|
+
* @example await contacts.withQueryFormat('qs').getMany({ where: { name: 'x' } })
|
|
22
|
+
*/
|
|
23
|
+
withQueryFormat(format) {
|
|
24
|
+
return require_core_withQueryFormat.cloneWithQueryFormat(this, format);
|
|
25
|
+
}
|
|
26
|
+
/** Serializes a list/get query in the client's `queryFormat` (`''` when there is nothing to send). */
|
|
27
|
+
toQueryString(query) {
|
|
28
|
+
return require_core_queryString.toQueryString(query, this.client.queryFormat);
|
|
29
|
+
}
|
|
30
|
+
};
|
|
31
|
+
|
|
32
|
+
//#endregion
|
|
33
|
+
exports.BaseApi = BaseApi;
|
|
34
|
+
//# sourceMappingURL=BaseApi.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"BaseApi.cjs","names":["cloneWithQueryFormat","toQueryString"],"sources":["../../src/core/BaseApi.ts"],"sourcesContent":["import type { ApiClient } from './ApiClient'\nimport { bindMethods } from './bindMethods'\nimport { toQueryString, type QueryFormat } from './queryString'\nimport { cloneWithQueryFormat } from './withQueryFormat'\n\n/**\n * Base of every API class: holds the client, binds the methods to the instance (so they can be\n * destructured) and serializes queries in the client's `queryFormat`.\n */\nexport class BaseApi {\n public readonly client: ApiClient\n\n constructor(client: ApiClient) {\n this.client = client\n bindMethods(this)\n }\n\n /**\n * Returns a copy of this API whose requests serialize queries in `format`, overriding the\n * client's `queryFormat`. This instance is not changed.\n *\n * @example await contacts.withQueryFormat('qs').getMany({ where: { name: 'x' } })\n */\n withQueryFormat(format: QueryFormat): this {\n return cloneWithQueryFormat(this, format)\n }\n\n /** Serializes a list/get query in the client's `queryFormat` (`''` when there is nothing to send). */\n protected toQueryString(query?: object | null): string {\n return toQueryString(query, this.client.queryFormat)\n }\n}\n"],"mappings":";;;;;;;;;;AASA,IAAa,UAAb,MAAqB;CACnB,AAAgB;CAEhB,YAAY,QAAmB;AAC7B,OAAK,SAAS;AACd,uCAAY,KAAK;;;;;;;;CASnB,gBAAgB,QAA2B;AACzC,SAAOA,kDAAqB,MAAM,OAAO;;;CAI3C,AAAU,cAAc,OAA+B;AACrD,SAAOC,uCAAc,OAAO,KAAK,OAAO,YAAY"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import type { ApiClient } from './ApiClient';
|
|
2
|
+
import { type QueryFormat } from './queryString';
|
|
3
|
+
/**
|
|
4
|
+
* Base of every API class: holds the client, binds the methods to the instance (so they can be
|
|
5
|
+
* destructured) and serializes queries in the client's `queryFormat`.
|
|
6
|
+
*/
|
|
7
|
+
export declare class BaseApi {
|
|
8
|
+
readonly client: ApiClient;
|
|
9
|
+
constructor(client: ApiClient);
|
|
10
|
+
/**
|
|
11
|
+
* Returns a copy of this API whose requests serialize queries in `format`, overriding the
|
|
12
|
+
* client's `queryFormat`. This instance is not changed.
|
|
13
|
+
*
|
|
14
|
+
* @example await contacts.withQueryFormat('qs').getMany({ where: { name: 'x' } })
|
|
15
|
+
*/
|
|
16
|
+
withQueryFormat(format: QueryFormat): this;
|
|
17
|
+
/** Serializes a list/get query in the client's `queryFormat` (`''` when there is nothing to send). */
|
|
18
|
+
protected toQueryString(query?: object | null): string;
|
|
19
|
+
}
|
|
20
|
+
//# sourceMappingURL=BaseApi.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"BaseApi.d.ts","sourceRoot":"","sources":["../../src/core/BaseApi.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAA;AAE5C,OAAO,EAAiB,KAAK,WAAW,EAAE,MAAM,eAAe,CAAA;AAG/D;;;GAGG;AACH,qBAAa,OAAO;IAClB,SAAgB,MAAM,EAAE,SAAS,CAAA;gBAErB,MAAM,EAAE,SAAS;IAK7B;;;;;OAKG;IACH,eAAe,CAAC,MAAM,EAAE,WAAW,GAAG,IAAI;IAI1C,sGAAsG;IACtG,SAAS,CAAC,aAAa,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,MAAM;CAGvD"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { toQueryString } from "./queryString.mjs";
|
|
2
|
+
import { bindMethods } from "./bindMethods.mjs";
|
|
3
|
+
import { cloneWithQueryFormat } from "./withQueryFormat.mjs";
|
|
4
|
+
|
|
5
|
+
//#region src/core/BaseApi.ts
|
|
6
|
+
/**
|
|
7
|
+
* Base of every API class: holds the client, binds the methods to the instance (so they can be
|
|
8
|
+
* destructured) and serializes queries in the client's `queryFormat`.
|
|
9
|
+
*/
|
|
10
|
+
var BaseApi = class {
|
|
11
|
+
client;
|
|
12
|
+
constructor(client) {
|
|
13
|
+
this.client = client;
|
|
14
|
+
bindMethods(this);
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Returns a copy of this API whose requests serialize queries in `format`, overriding the
|
|
18
|
+
* client's `queryFormat`. This instance is not changed.
|
|
19
|
+
*
|
|
20
|
+
* @example await contacts.withQueryFormat('qs').getMany({ where: { name: 'x' } })
|
|
21
|
+
*/
|
|
22
|
+
withQueryFormat(format) {
|
|
23
|
+
return cloneWithQueryFormat(this, format);
|
|
24
|
+
}
|
|
25
|
+
/** Serializes a list/get query in the client's `queryFormat` (`''` when there is nothing to send). */
|
|
26
|
+
toQueryString(query) {
|
|
27
|
+
return toQueryString(query, this.client.queryFormat);
|
|
28
|
+
}
|
|
29
|
+
};
|
|
30
|
+
|
|
31
|
+
//#endregion
|
|
32
|
+
export { BaseApi };
|
|
33
|
+
//# sourceMappingURL=BaseApi.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"BaseApi.mjs","names":[],"sources":["../../src/core/BaseApi.ts"],"sourcesContent":["import type { ApiClient } from './ApiClient'\nimport { bindMethods } from './bindMethods'\nimport { toQueryString, type QueryFormat } from './queryString'\nimport { cloneWithQueryFormat } from './withQueryFormat'\n\n/**\n * Base of every API class: holds the client, binds the methods to the instance (so they can be\n * destructured) and serializes queries in the client's `queryFormat`.\n */\nexport class BaseApi {\n public readonly client: ApiClient\n\n constructor(client: ApiClient) {\n this.client = client\n bindMethods(this)\n }\n\n /**\n * Returns a copy of this API whose requests serialize queries in `format`, overriding the\n * client's `queryFormat`. This instance is not changed.\n *\n * @example await contacts.withQueryFormat('qs').getMany({ where: { name: 'x' } })\n */\n withQueryFormat(format: QueryFormat): this {\n return cloneWithQueryFormat(this, format)\n }\n\n /** Serializes a list/get query in the client's `queryFormat` (`''` when there is nothing to send). */\n protected toQueryString(query?: object | null): string {\n return toQueryString(query, this.client.queryFormat)\n }\n}\n"],"mappings":";;;;;;;;;AASA,IAAa,UAAb,MAAqB;CACnB,AAAgB;CAEhB,YAAY,QAAmB;AAC7B,OAAK,SAAS;AACd,cAAY,KAAK;;;;;;;;CASnB,gBAAgB,QAA2B;AACzC,SAAO,qBAAqB,MAAM,OAAO;;;CAI3C,AAAU,cAAc,OAA+B;AACrD,SAAO,cAAc,OAAO,KAAK,OAAO,YAAY"}
|
|
@@ -1,13 +1,16 @@
|
|
|
1
1
|
Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
|
|
2
2
|
const require_core_errors = require('./errors.cjs');
|
|
3
|
+
const require_core_queryString = require('./queryString.cjs');
|
|
3
4
|
|
|
4
5
|
//#region src/core/BaseApiClient.ts
|
|
5
6
|
var BaseApiClient = class {
|
|
6
7
|
baseUrl;
|
|
7
8
|
accessToken = null;
|
|
8
|
-
|
|
9
|
+
queryFormat;
|
|
10
|
+
constructor(baseUrl, accessToken, options = {}) {
|
|
9
11
|
this.baseUrl = baseUrl.replace(/\/$/, "");
|
|
10
12
|
this.accessToken = accessToken || null;
|
|
13
|
+
this.queryFormat = options.queryFormat ?? require_core_queryString.DEFAULT_QUERY_FORMAT;
|
|
11
14
|
}
|
|
12
15
|
setAccessToken(accessToken) {
|
|
13
16
|
this.accessToken = accessToken;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BaseApiClient.cjs","names":["ApiConnectionError","ApiError"],"sources":["../../src/core/BaseApiClient.ts"],"sourcesContent":["import type { ApiClient, HttpMethod } from './ApiClient'\nimport { ApiConnectionError, ApiError } from './errors'\n\nexport class BaseApiClient implements ApiClient {\n protected readonly baseUrl: string\n protected accessToken: string | null = null\n\n constructor(baseUrl: string, accessToken?: string) {\n this.baseUrl = baseUrl.replace(/\\/$/, '')\n this.accessToken = accessToken || null\n }\n\n setAccessToken(accessToken: string): this {\n this.accessToken = accessToken\n return this\n }\n\n async request<TResponse = unknown, TBody = unknown>(\n method: HttpMethod,\n endpoint: string,\n body?: TBody,\n headers?: Record<string, string>,\n ): Promise<TResponse> {\n const url = `${this.baseUrl}/${endpoint.replace(/^\\//, '')}`\n const init: RequestInit = {\n method,\n headers: {\n 'Content-Type': 'application/json',\n ...(this.accessToken && { Authorization: `Bearer ${this.accessToken}` }),\n ...headers,\n },\n ...(body !== undefined && { body: JSON.stringify(body) }),\n }\n\n let response: Response\n try {\n response = await fetch(url, init)\n } catch (error) {\n const reason = error instanceof Error ? error.message : String(error)\n throw new ApiConnectionError(`Request to ${method} ${url} failed: ${reason}`, {\n cause: error,\n })\n }\n\n return this.handleResponse<TResponse>(response)\n }\n\n protected async handleResponse<TResponse>(response: Response): Promise<TResponse> {\n if (!response.ok) {\n throw ApiError.fromResponse(\n response.status,\n response.statusText,\n response.headers,\n await this.readErrorBody(response),\n )\n }\n\n // 204 No Content never has a body; short-circuit before reading the stream.\n if (response.status === 204) {\n return undefined as unknown as TResponse\n }\n\n // Read body as text once and treat an empty body as \"no content\" regardless of\n // Content-Type. Servers sometimes return 200 with Content-Type: application/json\n // and an empty body (e.g. POST endpoints whose framework keeps the default JSON\n // content-type even when nothing is written). `response.json()` would throw\n // \"Unexpected end of input\" in that case.\n const text = await response.text()\n if (!text) {\n return undefined as unknown as TResponse\n }\n\n const contentType = response.headers.get('Content-Type')\n const isJson = contentType?.includes('application/json') ?? false\n\n if (isJson) {\n return JSON.parse(text) as TResponse\n }\n\n try {\n return JSON.parse(text) as TResponse\n } catch {\n return text as unknown as TResponse\n }\n }\n\n /** Reads an error body: parsed JSON when possible, the raw text otherwise, `undefined` when empty. */\n protected async readErrorBody(response: Response): Promise<unknown> {\n let text: string\n try {\n text = await response.text()\n } catch {\n return undefined\n }\n if (!text) {\n return undefined\n }\n try {\n return JSON.parse(text)\n } catch {\n return text\n }\n }\n\n get<TResponse = unknown>(endpoint: string, headers?: Record<string, string>): Promise<TResponse> {\n return this.request<TResponse>('GET', endpoint, undefined, headers)\n }\n\n post<TResponse = unknown, TBody = unknown>(\n endpoint: string,\n body?: TBody,\n headers?: Record<string, string>,\n ): Promise<TResponse> {\n return this.request<TResponse, TBody>('POST', endpoint, body, headers)\n }\n\n put<TResponse = unknown, TBody = unknown>(\n endpoint: string,\n body?: TBody,\n headers?: Record<string, string>,\n ): Promise<TResponse> {\n return this.request<TResponse, TBody>('PUT', endpoint, body, headers)\n }\n\n patch<TResponse = unknown, TBody = unknown>(\n endpoint: string,\n body?: TBody,\n headers?: Record<string, string>,\n ): Promise<TResponse> {\n return this.request<TResponse, TBody>('PATCH', endpoint, body, headers)\n }\n\n delete<TResponse = unknown>(\n endpoint: string,\n headers?: Record<string, string>,\n ): Promise<TResponse> {\n return this.request<TResponse>('DELETE', endpoint, undefined, headers)\n }\n}\n"],"mappings":"
|
|
1
|
+
{"version":3,"file":"BaseApiClient.cjs","names":["DEFAULT_QUERY_FORMAT","ApiConnectionError","ApiError"],"sources":["../../src/core/BaseApiClient.ts"],"sourcesContent":["import type { ApiClient, HttpMethod } from './ApiClient'\nimport { ApiConnectionError, ApiError } from './errors'\nimport { DEFAULT_QUERY_FORMAT, type QueryFormat } from './queryString'\n\nexport interface BaseApiClientOptions {\n /** How list/get queries are serialized in the URL. Defaults to `'json'`. */\n queryFormat?: QueryFormat\n}\n\nexport class BaseApiClient implements ApiClient {\n protected readonly baseUrl: string\n protected accessToken: string | null = null\n public readonly queryFormat: QueryFormat\n\n constructor(baseUrl: string, accessToken?: string, options: BaseApiClientOptions = {}) {\n this.baseUrl = baseUrl.replace(/\\/$/, '')\n this.accessToken = accessToken || null\n this.queryFormat = options.queryFormat ?? DEFAULT_QUERY_FORMAT\n }\n\n setAccessToken(accessToken: string): this {\n this.accessToken = accessToken\n return this\n }\n\n async request<TResponse = unknown, TBody = unknown>(\n method: HttpMethod,\n endpoint: string,\n body?: TBody,\n headers?: Record<string, string>,\n ): Promise<TResponse> {\n const url = `${this.baseUrl}/${endpoint.replace(/^\\//, '')}`\n const init: RequestInit = {\n method,\n headers: {\n 'Content-Type': 'application/json',\n ...(this.accessToken && { Authorization: `Bearer ${this.accessToken}` }),\n ...headers,\n },\n ...(body !== undefined && { body: JSON.stringify(body) }),\n }\n\n let response: Response\n try {\n response = await fetch(url, init)\n } catch (error) {\n const reason = error instanceof Error ? error.message : String(error)\n throw new ApiConnectionError(`Request to ${method} ${url} failed: ${reason}`, {\n cause: error,\n })\n }\n\n return this.handleResponse<TResponse>(response)\n }\n\n protected async handleResponse<TResponse>(response: Response): Promise<TResponse> {\n if (!response.ok) {\n throw ApiError.fromResponse(\n response.status,\n response.statusText,\n response.headers,\n await this.readErrorBody(response),\n )\n }\n\n // 204 No Content never has a body; short-circuit before reading the stream.\n if (response.status === 204) {\n return undefined as unknown as TResponse\n }\n\n // Read body as text once and treat an empty body as \"no content\" regardless of\n // Content-Type. Servers sometimes return 200 with Content-Type: application/json\n // and an empty body (e.g. POST endpoints whose framework keeps the default JSON\n // content-type even when nothing is written). `response.json()` would throw\n // \"Unexpected end of input\" in that case.\n const text = await response.text()\n if (!text) {\n return undefined as unknown as TResponse\n }\n\n const contentType = response.headers.get('Content-Type')\n const isJson = contentType?.includes('application/json') ?? false\n\n if (isJson) {\n return JSON.parse(text) as TResponse\n }\n\n try {\n return JSON.parse(text) as TResponse\n } catch {\n return text as unknown as TResponse\n }\n }\n\n /** Reads an error body: parsed JSON when possible, the raw text otherwise, `undefined` when empty. */\n protected async readErrorBody(response: Response): Promise<unknown> {\n let text: string\n try {\n text = await response.text()\n } catch {\n return undefined\n }\n if (!text) {\n return undefined\n }\n try {\n return JSON.parse(text)\n } catch {\n return text\n }\n }\n\n get<TResponse = unknown>(endpoint: string, headers?: Record<string, string>): Promise<TResponse> {\n return this.request<TResponse>('GET', endpoint, undefined, headers)\n }\n\n post<TResponse = unknown, TBody = unknown>(\n endpoint: string,\n body?: TBody,\n headers?: Record<string, string>,\n ): Promise<TResponse> {\n return this.request<TResponse, TBody>('POST', endpoint, body, headers)\n }\n\n put<TResponse = unknown, TBody = unknown>(\n endpoint: string,\n body?: TBody,\n headers?: Record<string, string>,\n ): Promise<TResponse> {\n return this.request<TResponse, TBody>('PUT', endpoint, body, headers)\n }\n\n patch<TResponse = unknown, TBody = unknown>(\n endpoint: string,\n body?: TBody,\n headers?: Record<string, string>,\n ): Promise<TResponse> {\n return this.request<TResponse, TBody>('PATCH', endpoint, body, headers)\n }\n\n delete<TResponse = unknown>(\n endpoint: string,\n headers?: Record<string, string>,\n ): Promise<TResponse> {\n return this.request<TResponse>('DELETE', endpoint, undefined, headers)\n }\n}\n"],"mappings":";;;;;AASA,IAAa,gBAAb,MAAgD;CAC9C,AAAmB;CACnB,AAAU,cAA6B;CACvC,AAAgB;CAEhB,YAAY,SAAiB,aAAsB,UAAgC,EAAE,EAAE;AACrF,OAAK,UAAU,QAAQ,QAAQ,OAAO,GAAG;AACzC,OAAK,cAAc,eAAe;AAClC,OAAK,cAAc,QAAQ,eAAeA;;CAG5C,eAAe,aAA2B;AACxC,OAAK,cAAc;AACnB,SAAO;;CAGT,MAAM,QACJ,QACA,UACA,MACA,SACoB;EACpB,MAAM,MAAM,GAAG,KAAK,QAAQ,GAAG,SAAS,QAAQ,OAAO,GAAG;EAC1D,MAAM,OAAoB;GACxB;GACA,SAAS;IACP,gBAAgB;IAChB,GAAI,KAAK,eAAe,EAAE,eAAe,UAAU,KAAK,eAAe;IACvE,GAAG;IACJ;GACD,GAAI,SAAS,UAAa,EAAE,MAAM,KAAK,UAAU,KAAK,EAAE;GACzD;EAED,IAAI;AACJ,MAAI;AACF,cAAW,MAAM,MAAM,KAAK,KAAK;WAC1B,OAAO;AAEd,SAAM,IAAIC,uCAAmB,cAAc,OAAO,GAAG,IAAI,WAD1C,iBAAiB,QAAQ,MAAM,UAAU,OAAO,MAAM,IACS,EAC5E,OAAO,OACR,CAAC;;AAGJ,SAAO,KAAK,eAA0B,SAAS;;CAGjD,MAAgB,eAA0B,UAAwC;AAChF,MAAI,CAAC,SAAS,GACZ,OAAMC,6BAAS,aACb,SAAS,QACT,SAAS,YACT,SAAS,SACT,MAAM,KAAK,cAAc,SAAS,CACnC;AAIH,MAAI,SAAS,WAAW,IACtB;EAQF,MAAM,OAAO,MAAM,SAAS,MAAM;AAClC,MAAI,CAAC,KACH;AAMF,MAHoB,SAAS,QAAQ,IAAI,eAAe,EAC5B,SAAS,mBAAmB,IAAI,MAG1D,QAAO,KAAK,MAAM,KAAK;AAGzB,MAAI;AACF,UAAO,KAAK,MAAM,KAAK;UACjB;AACN,UAAO;;;;CAKX,MAAgB,cAAc,UAAsC;EAClE,IAAI;AACJ,MAAI;AACF,UAAO,MAAM,SAAS,MAAM;UACtB;AACN;;AAEF,MAAI,CAAC,KACH;AAEF,MAAI;AACF,UAAO,KAAK,MAAM,KAAK;UACjB;AACN,UAAO;;;CAIX,IAAyB,UAAkB,SAAsD;AAC/F,SAAO,KAAK,QAAmB,OAAO,UAAU,QAAW,QAAQ;;CAGrE,KACE,UACA,MACA,SACoB;AACpB,SAAO,KAAK,QAA0B,QAAQ,UAAU,MAAM,QAAQ;;CAGxE,IACE,UACA,MACA,SACoB;AACpB,SAAO,KAAK,QAA0B,OAAO,UAAU,MAAM,QAAQ;;CAGvE,MACE,UACA,MACA,SACoB;AACpB,SAAO,KAAK,QAA0B,SAAS,UAAU,MAAM,QAAQ;;CAGzE,OACE,UACA,SACoB;AACpB,SAAO,KAAK,QAAmB,UAAU,UAAU,QAAW,QAAQ"}
|
|
@@ -1,8 +1,14 @@
|
|
|
1
1
|
import type { ApiClient, HttpMethod } from './ApiClient';
|
|
2
|
+
import { type QueryFormat } from './queryString';
|
|
3
|
+
export interface BaseApiClientOptions {
|
|
4
|
+
/** How list/get queries are serialized in the URL. Defaults to `'json'`. */
|
|
5
|
+
queryFormat?: QueryFormat;
|
|
6
|
+
}
|
|
2
7
|
export declare class BaseApiClient implements ApiClient {
|
|
3
8
|
protected readonly baseUrl: string;
|
|
4
9
|
protected accessToken: string | null;
|
|
5
|
-
|
|
10
|
+
readonly queryFormat: QueryFormat;
|
|
11
|
+
constructor(baseUrl: string, accessToken?: string, options?: BaseApiClientOptions);
|
|
6
12
|
setAccessToken(accessToken: string): this;
|
|
7
13
|
request<TResponse = unknown, TBody = unknown>(method: HttpMethod, endpoint: string, body?: TBody, headers?: Record<string, string>): Promise<TResponse>;
|
|
8
14
|
protected handleResponse<TResponse>(response: Response): Promise<TResponse>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BaseApiClient.d.ts","sourceRoot":"","sources":["../../src/core/BaseApiClient.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;
|
|
1
|
+
{"version":3,"file":"BaseApiClient.d.ts","sourceRoot":"","sources":["../../src/core/BaseApiClient.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AAExD,OAAO,EAAwB,KAAK,WAAW,EAAE,MAAM,eAAe,CAAA;AAEtE,MAAM,WAAW,oBAAoB;IACnC,4EAA4E;IAC5E,WAAW,CAAC,EAAE,WAAW,CAAA;CAC1B;AAED,qBAAa,aAAc,YAAW,SAAS;IAC7C,SAAS,CAAC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;IAClC,SAAS,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI,CAAO;IAC3C,SAAgB,WAAW,EAAE,WAAW,CAAA;gBAE5B,OAAO,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,MAAM,EAAE,OAAO,GAAE,oBAAyB;IAMrF,cAAc,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI;IAKnC,OAAO,CAAC,SAAS,GAAG,OAAO,EAAE,KAAK,GAAG,OAAO,EAChD,MAAM,EAAE,UAAU,EAClB,QAAQ,EAAE,MAAM,EAChB,IAAI,CAAC,EAAE,KAAK,EACZ,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAC/B,OAAO,CAAC,SAAS,CAAC;cAyBL,cAAc,CAAC,SAAS,EAAE,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAAC,SAAS,CAAC;IAuCjF,sGAAsG;cACtF,aAAa,CAAC,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAAC,OAAO,CAAC;IAiBnE,GAAG,CAAC,SAAS,GAAG,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC,SAAS,CAAC;IAIhG,IAAI,CAAC,SAAS,GAAG,OAAO,EAAE,KAAK,GAAG,OAAO,EACvC,QAAQ,EAAE,MAAM,EAChB,IAAI,CAAC,EAAE,KAAK,EACZ,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAC/B,OAAO,CAAC,SAAS,CAAC;IAIrB,GAAG,CAAC,SAAS,GAAG,OAAO,EAAE,KAAK,GAAG,OAAO,EACtC,QAAQ,EAAE,MAAM,EAChB,IAAI,CAAC,EAAE,KAAK,EACZ,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAC/B,OAAO,CAAC,SAAS,CAAC;IAIrB,KAAK,CAAC,SAAS,GAAG,OAAO,EAAE,KAAK,GAAG,OAAO,EACxC,QAAQ,EAAE,MAAM,EAChB,IAAI,CAAC,EAAE,KAAK,EACZ,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAC/B,OAAO,CAAC,SAAS,CAAC;IAIrB,MAAM,CAAC,SAAS,GAAG,OAAO,EACxB,QAAQ,EAAE,MAAM,EAChB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAC/B,OAAO,CAAC,SAAS,CAAC;CAGtB"}
|
|
@@ -1,12 +1,15 @@
|
|
|
1
1
|
import { ApiConnectionError, ApiError } from "./errors.mjs";
|
|
2
|
+
import { DEFAULT_QUERY_FORMAT } from "./queryString.mjs";
|
|
2
3
|
|
|
3
4
|
//#region src/core/BaseApiClient.ts
|
|
4
5
|
var BaseApiClient = class {
|
|
5
6
|
baseUrl;
|
|
6
7
|
accessToken = null;
|
|
7
|
-
|
|
8
|
+
queryFormat;
|
|
9
|
+
constructor(baseUrl, accessToken, options = {}) {
|
|
8
10
|
this.baseUrl = baseUrl.replace(/\/$/, "");
|
|
9
11
|
this.accessToken = accessToken || null;
|
|
12
|
+
this.queryFormat = options.queryFormat ?? DEFAULT_QUERY_FORMAT;
|
|
10
13
|
}
|
|
11
14
|
setAccessToken(accessToken) {
|
|
12
15
|
this.accessToken = accessToken;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BaseApiClient.mjs","names":[],"sources":["../../src/core/BaseApiClient.ts"],"sourcesContent":["import type { ApiClient, HttpMethod } from './ApiClient'\nimport { ApiConnectionError, ApiError } from './errors'\n\nexport class BaseApiClient implements ApiClient {\n protected readonly baseUrl: string\n protected accessToken: string | null = null\n\n constructor(baseUrl: string, accessToken?: string) {\n this.baseUrl = baseUrl.replace(/\\/$/, '')\n this.accessToken = accessToken || null\n }\n\n setAccessToken(accessToken: string): this {\n this.accessToken = accessToken\n return this\n }\n\n async request<TResponse = unknown, TBody = unknown>(\n method: HttpMethod,\n endpoint: string,\n body?: TBody,\n headers?: Record<string, string>,\n ): Promise<TResponse> {\n const url = `${this.baseUrl}/${endpoint.replace(/^\\//, '')}`\n const init: RequestInit = {\n method,\n headers: {\n 'Content-Type': 'application/json',\n ...(this.accessToken && { Authorization: `Bearer ${this.accessToken}` }),\n ...headers,\n },\n ...(body !== undefined && { body: JSON.stringify(body) }),\n }\n\n let response: Response\n try {\n response = await fetch(url, init)\n } catch (error) {\n const reason = error instanceof Error ? error.message : String(error)\n throw new ApiConnectionError(`Request to ${method} ${url} failed: ${reason}`, {\n cause: error,\n })\n }\n\n return this.handleResponse<TResponse>(response)\n }\n\n protected async handleResponse<TResponse>(response: Response): Promise<TResponse> {\n if (!response.ok) {\n throw ApiError.fromResponse(\n response.status,\n response.statusText,\n response.headers,\n await this.readErrorBody(response),\n )\n }\n\n // 204 No Content never has a body; short-circuit before reading the stream.\n if (response.status === 204) {\n return undefined as unknown as TResponse\n }\n\n // Read body as text once and treat an empty body as \"no content\" regardless of\n // Content-Type. Servers sometimes return 200 with Content-Type: application/json\n // and an empty body (e.g. POST endpoints whose framework keeps the default JSON\n // content-type even when nothing is written). `response.json()` would throw\n // \"Unexpected end of input\" in that case.\n const text = await response.text()\n if (!text) {\n return undefined as unknown as TResponse\n }\n\n const contentType = response.headers.get('Content-Type')\n const isJson = contentType?.includes('application/json') ?? false\n\n if (isJson) {\n return JSON.parse(text) as TResponse\n }\n\n try {\n return JSON.parse(text) as TResponse\n } catch {\n return text as unknown as TResponse\n }\n }\n\n /** Reads an error body: parsed JSON when possible, the raw text otherwise, `undefined` when empty. */\n protected async readErrorBody(response: Response): Promise<unknown> {\n let text: string\n try {\n text = await response.text()\n } catch {\n return undefined\n }\n if (!text) {\n return undefined\n }\n try {\n return JSON.parse(text)\n } catch {\n return text\n }\n }\n\n get<TResponse = unknown>(endpoint: string, headers?: Record<string, string>): Promise<TResponse> {\n return this.request<TResponse>('GET', endpoint, undefined, headers)\n }\n\n post<TResponse = unknown, TBody = unknown>(\n endpoint: string,\n body?: TBody,\n headers?: Record<string, string>,\n ): Promise<TResponse> {\n return this.request<TResponse, TBody>('POST', endpoint, body, headers)\n }\n\n put<TResponse = unknown, TBody = unknown>(\n endpoint: string,\n body?: TBody,\n headers?: Record<string, string>,\n ): Promise<TResponse> {\n return this.request<TResponse, TBody>('PUT', endpoint, body, headers)\n }\n\n patch<TResponse = unknown, TBody = unknown>(\n endpoint: string,\n body?: TBody,\n headers?: Record<string, string>,\n ): Promise<TResponse> {\n return this.request<TResponse, TBody>('PATCH', endpoint, body, headers)\n }\n\n delete<TResponse = unknown>(\n endpoint: string,\n headers?: Record<string, string>,\n ): Promise<TResponse> {\n return this.request<TResponse>('DELETE', endpoint, undefined, headers)\n }\n}\n"],"mappings":"
|
|
1
|
+
{"version":3,"file":"BaseApiClient.mjs","names":[],"sources":["../../src/core/BaseApiClient.ts"],"sourcesContent":["import type { ApiClient, HttpMethod } from './ApiClient'\nimport { ApiConnectionError, ApiError } from './errors'\nimport { DEFAULT_QUERY_FORMAT, type QueryFormat } from './queryString'\n\nexport interface BaseApiClientOptions {\n /** How list/get queries are serialized in the URL. Defaults to `'json'`. */\n queryFormat?: QueryFormat\n}\n\nexport class BaseApiClient implements ApiClient {\n protected readonly baseUrl: string\n protected accessToken: string | null = null\n public readonly queryFormat: QueryFormat\n\n constructor(baseUrl: string, accessToken?: string, options: BaseApiClientOptions = {}) {\n this.baseUrl = baseUrl.replace(/\\/$/, '')\n this.accessToken = accessToken || null\n this.queryFormat = options.queryFormat ?? DEFAULT_QUERY_FORMAT\n }\n\n setAccessToken(accessToken: string): this {\n this.accessToken = accessToken\n return this\n }\n\n async request<TResponse = unknown, TBody = unknown>(\n method: HttpMethod,\n endpoint: string,\n body?: TBody,\n headers?: Record<string, string>,\n ): Promise<TResponse> {\n const url = `${this.baseUrl}/${endpoint.replace(/^\\//, '')}`\n const init: RequestInit = {\n method,\n headers: {\n 'Content-Type': 'application/json',\n ...(this.accessToken && { Authorization: `Bearer ${this.accessToken}` }),\n ...headers,\n },\n ...(body !== undefined && { body: JSON.stringify(body) }),\n }\n\n let response: Response\n try {\n response = await fetch(url, init)\n } catch (error) {\n const reason = error instanceof Error ? error.message : String(error)\n throw new ApiConnectionError(`Request to ${method} ${url} failed: ${reason}`, {\n cause: error,\n })\n }\n\n return this.handleResponse<TResponse>(response)\n }\n\n protected async handleResponse<TResponse>(response: Response): Promise<TResponse> {\n if (!response.ok) {\n throw ApiError.fromResponse(\n response.status,\n response.statusText,\n response.headers,\n await this.readErrorBody(response),\n )\n }\n\n // 204 No Content never has a body; short-circuit before reading the stream.\n if (response.status === 204) {\n return undefined as unknown as TResponse\n }\n\n // Read body as text once and treat an empty body as \"no content\" regardless of\n // Content-Type. Servers sometimes return 200 with Content-Type: application/json\n // and an empty body (e.g. POST endpoints whose framework keeps the default JSON\n // content-type even when nothing is written). `response.json()` would throw\n // \"Unexpected end of input\" in that case.\n const text = await response.text()\n if (!text) {\n return undefined as unknown as TResponse\n }\n\n const contentType = response.headers.get('Content-Type')\n const isJson = contentType?.includes('application/json') ?? false\n\n if (isJson) {\n return JSON.parse(text) as TResponse\n }\n\n try {\n return JSON.parse(text) as TResponse\n } catch {\n return text as unknown as TResponse\n }\n }\n\n /** Reads an error body: parsed JSON when possible, the raw text otherwise, `undefined` when empty. */\n protected async readErrorBody(response: Response): Promise<unknown> {\n let text: string\n try {\n text = await response.text()\n } catch {\n return undefined\n }\n if (!text) {\n return undefined\n }\n try {\n return JSON.parse(text)\n } catch {\n return text\n }\n }\n\n get<TResponse = unknown>(endpoint: string, headers?: Record<string, string>): Promise<TResponse> {\n return this.request<TResponse>('GET', endpoint, undefined, headers)\n }\n\n post<TResponse = unknown, TBody = unknown>(\n endpoint: string,\n body?: TBody,\n headers?: Record<string, string>,\n ): Promise<TResponse> {\n return this.request<TResponse, TBody>('POST', endpoint, body, headers)\n }\n\n put<TResponse = unknown, TBody = unknown>(\n endpoint: string,\n body?: TBody,\n headers?: Record<string, string>,\n ): Promise<TResponse> {\n return this.request<TResponse, TBody>('PUT', endpoint, body, headers)\n }\n\n patch<TResponse = unknown, TBody = unknown>(\n endpoint: string,\n body?: TBody,\n headers?: Record<string, string>,\n ): Promise<TResponse> {\n return this.request<TResponse, TBody>('PATCH', endpoint, body, headers)\n }\n\n delete<TResponse = unknown>(\n endpoint: string,\n headers?: Record<string, string>,\n ): Promise<TResponse> {\n return this.request<TResponse>('DELETE', endpoint, undefined, headers)\n }\n}\n"],"mappings":";;;;AASA,IAAa,gBAAb,MAAgD;CAC9C,AAAmB;CACnB,AAAU,cAA6B;CACvC,AAAgB;CAEhB,YAAY,SAAiB,aAAsB,UAAgC,EAAE,EAAE;AACrF,OAAK,UAAU,QAAQ,QAAQ,OAAO,GAAG;AACzC,OAAK,cAAc,eAAe;AAClC,OAAK,cAAc,QAAQ,eAAe;;CAG5C,eAAe,aAA2B;AACxC,OAAK,cAAc;AACnB,SAAO;;CAGT,MAAM,QACJ,QACA,UACA,MACA,SACoB;EACpB,MAAM,MAAM,GAAG,KAAK,QAAQ,GAAG,SAAS,QAAQ,OAAO,GAAG;EAC1D,MAAM,OAAoB;GACxB;GACA,SAAS;IACP,gBAAgB;IAChB,GAAI,KAAK,eAAe,EAAE,eAAe,UAAU,KAAK,eAAe;IACvE,GAAG;IACJ;GACD,GAAI,SAAS,UAAa,EAAE,MAAM,KAAK,UAAU,KAAK,EAAE;GACzD;EAED,IAAI;AACJ,MAAI;AACF,cAAW,MAAM,MAAM,KAAK,KAAK;WAC1B,OAAO;AAEd,SAAM,IAAI,mBAAmB,cAAc,OAAO,GAAG,IAAI,WAD1C,iBAAiB,QAAQ,MAAM,UAAU,OAAO,MAAM,IACS,EAC5E,OAAO,OACR,CAAC;;AAGJ,SAAO,KAAK,eAA0B,SAAS;;CAGjD,MAAgB,eAA0B,UAAwC;AAChF,MAAI,CAAC,SAAS,GACZ,OAAM,SAAS,aACb,SAAS,QACT,SAAS,YACT,SAAS,SACT,MAAM,KAAK,cAAc,SAAS,CACnC;AAIH,MAAI,SAAS,WAAW,IACtB;EAQF,MAAM,OAAO,MAAM,SAAS,MAAM;AAClC,MAAI,CAAC,KACH;AAMF,MAHoB,SAAS,QAAQ,IAAI,eAAe,EAC5B,SAAS,mBAAmB,IAAI,MAG1D,QAAO,KAAK,MAAM,KAAK;AAGzB,MAAI;AACF,UAAO,KAAK,MAAM,KAAK;UACjB;AACN,UAAO;;;;CAKX,MAAgB,cAAc,UAAsC;EAClE,IAAI;AACJ,MAAI;AACF,UAAO,MAAM,SAAS,MAAM;UACtB;AACN;;AAEF,MAAI,CAAC,KACH;AAEF,MAAI;AACF,UAAO,KAAK,MAAM,KAAK;UACjB;AACN,UAAO;;;CAIX,IAAyB,UAAkB,SAAsD;AAC/F,SAAO,KAAK,QAAmB,OAAO,UAAU,QAAW,QAAQ;;CAGrE,KACE,UACA,MACA,SACoB;AACpB,SAAO,KAAK,QAA0B,QAAQ,UAAU,MAAM,QAAQ;;CAGxE,IACE,UACA,MACA,SACoB;AACpB,SAAO,KAAK,QAA0B,OAAO,UAAU,MAAM,QAAQ;;CAGvE,MACE,UACA,MACA,SACoB;AACpB,SAAO,KAAK,QAA0B,SAAS,UAAU,MAAM,QAAQ;;CAGzE,OACE,UACA,SACoB;AACpB,SAAO,KAAK,QAAmB,UAAU,UAAU,QAAW,QAAQ"}
|
|
@@ -1,46 +1,9 @@
|
|
|
1
1
|
Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
|
|
2
|
-
const
|
|
3
|
-
let qs = require("qs");
|
|
4
|
-
qs = require_chunk.__toESM(qs);
|
|
2
|
+
const require_core_BaseReadApi = require('./BaseReadApi.cjs');
|
|
5
3
|
|
|
6
4
|
//#region src/core/BaseCrudApi.ts
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
basePath;
|
|
10
|
-
constructor(client, basePath) {
|
|
11
|
-
this.client = client;
|
|
12
|
-
this.basePath = basePath.replace(/\/$/, "");
|
|
13
|
-
this.getMany = this.getMany.bind(this);
|
|
14
|
-
this.getOne = this.getOne.bind(this);
|
|
15
|
-
this.getById = this.getById.bind(this);
|
|
16
|
-
this.create = this.create.bind(this);
|
|
17
|
-
this.updateById = this.updateById.bind(this);
|
|
18
|
-
this.deleteById = this.deleteById.bind(this);
|
|
19
|
-
}
|
|
20
|
-
getMany(query, headers) {
|
|
21
|
-
const queryString = query ? `?${qs.default.stringify(query)}` : "";
|
|
22
|
-
return this.client.get(`${this.basePath}${queryString}`, headers);
|
|
23
|
-
}
|
|
24
|
-
/**
|
|
25
|
-
* Returns the first resource matching the query, or `null` when none match.
|
|
26
|
-
* Convenience over `getMany` with `limit: 1`.
|
|
27
|
-
* @permissions $resourceName.view
|
|
28
|
-
*/
|
|
29
|
-
async getOne(query, headers) {
|
|
30
|
-
return (await this.getMany({
|
|
31
|
-
...query,
|
|
32
|
-
limit: 1,
|
|
33
|
-
paginate: false
|
|
34
|
-
}, headers))[0] ?? null;
|
|
35
|
-
}
|
|
36
|
-
/**
|
|
37
|
-
* Returns a single resource by ID.
|
|
38
|
-
* @permissions $resourceName.view
|
|
39
|
-
*/
|
|
40
|
-
getById(id, query, headers) {
|
|
41
|
-
const queryString = query ? `?${qs.default.stringify(query)}` : "";
|
|
42
|
-
return this.client.get(`${this.basePath}/${id}${queryString}`, headers);
|
|
43
|
-
}
|
|
5
|
+
/** Generic CRUD resource: the reads of `BaseReadApi` plus `create`, `updateById` and `deleteById`. */
|
|
6
|
+
var BaseCrudApi = class extends require_core_BaseReadApi.BaseReadApi {
|
|
44
7
|
/**
|
|
45
8
|
* Creates a new resource.
|
|
46
9
|
* @permissions $resourceName.create
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BaseCrudApi.cjs","names":[],"sources":["../../src/core/BaseCrudApi.ts"],"sourcesContent":["import
|
|
1
|
+
{"version":3,"file":"BaseCrudApi.cjs","names":["BaseReadApi"],"sources":["../../src/core/BaseCrudApi.ts"],"sourcesContent":["import { BaseReadApi } from './BaseReadApi'\nimport type { CrudApi, ListQuery } 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\n/** Generic CRUD resource: the reads of `BaseReadApi` plus `create`, `updateById` and `deleteById`. */\nexport class BaseCrudApi<\n TResponse,\n TCreate,\n TUpdate = TCreate,\n TQuery extends ListQuery<TResponse> = ListQuery<TResponse>,\n>\n extends BaseReadApi<TResponse, TQuery>\n implements CrudApi<TResponse, TCreate, TUpdate, TQuery>\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,qCAEV;;;;;CAKE,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,27 +1,8 @@
|
|
|
1
|
-
import
|
|
2
|
-
import type { CrudApi,
|
|
1
|
+
import { BaseReadApi } from './BaseReadApi';
|
|
2
|
+
import type { CrudApi, ListQuery } from './types';
|
|
3
3
|
export type { WhereClause, IncludeItem, ListQuery, GetByIdQuery, Paginated, HasGetMany, HasGetById, HasCreate, HasUpdateById, HasDeleteById, CrudApi, } from './types';
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
readonly basePath: string;
|
|
7
|
-
constructor(client: ApiClient, basePath: string);
|
|
8
|
-
getMany(query: TQuery & {
|
|
9
|
-
paginate: false;
|
|
10
|
-
}, headers?: Record<string, string>): Promise<TResponse[]>;
|
|
11
|
-
getMany(query?: TQuery & {
|
|
12
|
-
paginate?: true;
|
|
13
|
-
}, headers?: Record<string, string>): Promise<Paginated<TResponse>>;
|
|
14
|
-
/**
|
|
15
|
-
* Returns the first resource matching the query, or `null` when none match.
|
|
16
|
-
* Convenience over `getMany` with `limit: 1`.
|
|
17
|
-
* @permissions $resourceName.view
|
|
18
|
-
*/
|
|
19
|
-
getOne(query?: TQuery, headers?: Record<string, string>): Promise<TResponse | null>;
|
|
20
|
-
/**
|
|
21
|
-
* Returns a single resource by ID.
|
|
22
|
-
* @permissions $resourceName.view
|
|
23
|
-
*/
|
|
24
|
-
getById(id: string, query?: GetByIdQuery<TResponse>, headers?: Record<string, string>): Promise<TResponse>;
|
|
4
|
+
/** Generic CRUD resource: the reads of `BaseReadApi` plus `create`, `updateById` and `deleteById`. */
|
|
5
|
+
export declare class BaseCrudApi<TResponse, TCreate, TUpdate = TCreate, TQuery extends ListQuery<TResponse> = ListQuery<TResponse>> extends BaseReadApi<TResponse, TQuery> implements CrudApi<TResponse, TCreate, TUpdate, TQuery> {
|
|
25
6
|
/**
|
|
26
7
|
* Creates a new resource.
|
|
27
8
|
* @permissions $resourceName.create
|
|
@@ -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,EAAE,WAAW,EAAE,MAAM,eAAe,CAAA;AAC3C,OAAO,KAAK,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,SAAS,CAAA;AACjD,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,sGAAsG;AACtG,qBAAa,WAAW,CACtB,SAAS,EACT,OAAO,EACP,OAAO,GAAG,OAAO,EACjB,MAAM,SAAS,SAAS,CAAC,SAAS,CAAC,GAAG,SAAS,CAAC,SAAS,CAAC,CAE1D,SAAQ,WAAW,CAAC,SAAS,EAAE,MAAM,CACrC,YAAW,OAAO,CAAC,SAAS,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,CAAC;IAEvD;;;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,43 +1,8 @@
|
|
|
1
|
-
import
|
|
1
|
+
import { BaseReadApi } from "./BaseReadApi.mjs";
|
|
2
2
|
|
|
3
3
|
//#region src/core/BaseCrudApi.ts
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
basePath;
|
|
7
|
-
constructor(client, basePath) {
|
|
8
|
-
this.client = client;
|
|
9
|
-
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
|
-
}
|
|
17
|
-
getMany(query, headers) {
|
|
18
|
-
const queryString = query ? `?${qs.stringify(query)}` : "";
|
|
19
|
-
return this.client.get(`${this.basePath}${queryString}`, headers);
|
|
20
|
-
}
|
|
21
|
-
/**
|
|
22
|
-
* Returns the first resource matching the query, or `null` when none match.
|
|
23
|
-
* Convenience over `getMany` with `limit: 1`.
|
|
24
|
-
* @permissions $resourceName.view
|
|
25
|
-
*/
|
|
26
|
-
async getOne(query, headers) {
|
|
27
|
-
return (await this.getMany({
|
|
28
|
-
...query,
|
|
29
|
-
limit: 1,
|
|
30
|
-
paginate: false
|
|
31
|
-
}, headers))[0] ?? null;
|
|
32
|
-
}
|
|
33
|
-
/**
|
|
34
|
-
* Returns a single resource by ID.
|
|
35
|
-
* @permissions $resourceName.view
|
|
36
|
-
*/
|
|
37
|
-
getById(id, query, headers) {
|
|
38
|
-
const queryString = query ? `?${qs.stringify(query)}` : "";
|
|
39
|
-
return this.client.get(`${this.basePath}/${id}${queryString}`, headers);
|
|
40
|
-
}
|
|
4
|
+
/** Generic CRUD resource: the reads of `BaseReadApi` plus `create`, `updateById` and `deleteById`. */
|
|
5
|
+
var BaseCrudApi = class extends BaseReadApi {
|
|
41
6
|
/**
|
|
42
7
|
* Creates a new resource.
|
|
43
8
|
* @permissions $resourceName.create
|