@ikatec/digisac-api-sdk 4.0.0 → 4.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (130) hide show
  1. package/README.md +29 -2
  2. package/dist/apis/authHistory/AuthHistoryApi.cjs +3 -9
  3. package/dist/apis/authHistory/AuthHistoryApi.cjs.map +1 -1
  4. package/dist/apis/authHistory/AuthHistoryApi.d.ts +3 -4
  5. package/dist/apis/authHistory/AuthHistoryApi.d.ts.map +1 -1
  6. package/dist/apis/authHistory/AuthHistoryApi.mjs +3 -7
  7. package/dist/apis/authHistory/AuthHistoryApi.mjs.map +1 -1
  8. package/dist/apis/clientFeedback/ClientFeedbackApi.cjs +2 -5
  9. package/dist/apis/clientFeedback/ClientFeedbackApi.cjs.map +1 -1
  10. package/dist/apis/clientFeedback/ClientFeedbackApi.d.ts +2 -4
  11. package/dist/apis/clientFeedback/ClientFeedbackApi.d.ts.map +1 -1
  12. package/dist/apis/clientFeedback/ClientFeedbackApi.mjs +3 -5
  13. package/dist/apis/clientFeedback/ClientFeedbackApi.mjs.map +1 -1
  14. package/dist/apis/contacts/ContactsApi.cjs +2 -2
  15. package/dist/apis/contacts/ContactsApi.cjs.map +1 -1
  16. package/dist/apis/contacts/ContactsApi.mjs +2 -2
  17. package/dist/apis/contacts/ContactsApi.mjs.map +1 -1
  18. package/dist/apis/me/MeApi.cjs +2 -5
  19. package/dist/apis/me/MeApi.cjs.map +1 -1
  20. package/dist/apis/me/MeApi.d.ts +2 -4
  21. package/dist/apis/me/MeApi.d.ts.map +1 -1
  22. package/dist/apis/me/MeApi.mjs +3 -5
  23. package/dist/apis/me/MeApi.mjs.map +1 -1
  24. package/dist/apis/serviceAccessManagement/ServiceAccessManagementApi.cjs +3 -9
  25. package/dist/apis/serviceAccessManagement/ServiceAccessManagementApi.cjs.map +1 -1
  26. package/dist/apis/serviceAccessManagement/ServiceAccessManagementApi.d.ts +3 -4
  27. package/dist/apis/serviceAccessManagement/ServiceAccessManagementApi.d.ts.map +1 -1
  28. package/dist/apis/serviceAccessManagement/ServiceAccessManagementApi.mjs +3 -7
  29. package/dist/apis/serviceAccessManagement/ServiceAccessManagementApi.mjs.map +1 -1
  30. package/dist/apis/stickerUsers/StickerUsersApi.cjs +3 -9
  31. package/dist/apis/stickerUsers/StickerUsersApi.cjs.map +1 -1
  32. package/dist/apis/stickerUsers/StickerUsersApi.d.ts +3 -4
  33. package/dist/apis/stickerUsers/StickerUsersApi.d.ts.map +1 -1
  34. package/dist/apis/stickerUsers/StickerUsersApi.mjs +3 -7
  35. package/dist/apis/stickerUsers/StickerUsersApi.mjs.map +1 -1
  36. package/dist/apis/terms/TermsApi.cjs +3 -12
  37. package/dist/apis/terms/TermsApi.cjs.map +1 -1
  38. package/dist/apis/terms/TermsApi.d.ts +2 -4
  39. package/dist/apis/terms/TermsApi.d.ts.map +1 -1
  40. package/dist/apis/terms/TermsApi.mjs +3 -10
  41. package/dist/apis/terms/TermsApi.mjs.map +1 -1
  42. package/dist/apis/transcripts/TranscriptsApi.cjs +2 -5
  43. package/dist/apis/transcripts/TranscriptsApi.cjs.map +1 -1
  44. package/dist/apis/transcripts/TranscriptsApi.d.ts +2 -4
  45. package/dist/apis/transcripts/TranscriptsApi.d.ts.map +1 -1
  46. package/dist/apis/transcripts/TranscriptsApi.mjs +3 -5
  47. package/dist/apis/transcripts/TranscriptsApi.mjs.map +1 -1
  48. package/dist/core/ApiClient.d.ts +3 -0
  49. package/dist/core/ApiClient.d.ts.map +1 -1
  50. package/dist/core/ArchivableCrudApi.cjs +0 -2
  51. package/dist/core/ArchivableCrudApi.cjs.map +1 -1
  52. package/dist/core/ArchivableCrudApi.d.ts.map +1 -1
  53. package/dist/core/ArchivableCrudApi.mjs +0 -2
  54. package/dist/core/ArchivableCrudApi.mjs.map +1 -1
  55. package/dist/core/BaseApi.cjs +34 -0
  56. package/dist/core/BaseApi.cjs.map +1 -0
  57. package/dist/core/BaseApi.d.ts +20 -0
  58. package/dist/core/BaseApi.d.ts.map +1 -0
  59. package/dist/core/BaseApi.mjs +33 -0
  60. package/dist/core/BaseApi.mjs.map +1 -0
  61. package/dist/core/BaseApiClient.cjs +4 -1
  62. package/dist/core/BaseApiClient.cjs.map +1 -1
  63. package/dist/core/BaseApiClient.d.ts +7 -1
  64. package/dist/core/BaseApiClient.d.ts.map +1 -1
  65. package/dist/core/BaseApiClient.mjs +4 -1
  66. package/dist/core/BaseApiClient.mjs.map +1 -1
  67. package/dist/core/BaseCrudApi.cjs +6 -16
  68. package/dist/core/BaseCrudApi.cjs.map +1 -1
  69. package/dist/core/BaseCrudApi.d.ts +3 -2
  70. package/dist/core/BaseCrudApi.d.ts.map +1 -1
  71. package/dist/core/BaseCrudApi.mjs +6 -14
  72. package/dist/core/BaseCrudApi.mjs.map +1 -1
  73. package/dist/core/bindMethods.cjs +24 -0
  74. package/dist/core/bindMethods.cjs.map +1 -0
  75. package/dist/core/bindMethods.d.ts +7 -0
  76. package/dist/core/bindMethods.d.ts.map +1 -0
  77. package/dist/core/bindMethods.mjs +22 -0
  78. package/dist/core/bindMethods.mjs.map +1 -0
  79. package/dist/core/index.cjs +2 -0
  80. package/dist/core/index.d.ts +3 -0
  81. package/dist/core/index.d.ts.map +1 -1
  82. package/dist/core/index.mjs +2 -1
  83. package/dist/core/queryString.cjs +22 -0
  84. package/dist/core/queryString.cjs.map +1 -0
  85. package/dist/core/queryString.d.ts +14 -0
  86. package/dist/core/queryString.d.ts.map +1 -0
  87. package/dist/core/queryString.mjs +18 -0
  88. package/dist/core/queryString.mjs.map +1 -0
  89. package/dist/core/types.d.ts +2 -0
  90. package/dist/core/types.d.ts.map +1 -1
  91. package/dist/core/withQueryFormat.cjs +42 -0
  92. package/dist/core/withQueryFormat.cjs.map +1 -0
  93. package/dist/core/withQueryFormat.d.ts +10 -0
  94. package/dist/core/withQueryFormat.d.ts.map +1 -0
  95. package/dist/core/withQueryFormat.mjs +40 -0
  96. package/dist/core/withQueryFormat.mjs.map +1 -0
  97. package/dist/index.cjs +2 -0
  98. package/dist/index.mjs +2 -1
  99. package/package.json +1 -1
  100. package/src/apis/authHistory/AuthHistoryApi.test.ts +1 -1
  101. package/src/apis/authHistory/AuthHistoryApi.ts +10 -10
  102. package/src/apis/campaigns/CampaignsApi.test.ts +1 -1
  103. package/src/apis/clientFeedback/ClientFeedbackApi.ts +5 -7
  104. package/src/apis/contacts/ContactsApi.test.ts +1 -1
  105. package/src/apis/contacts/ContactsApi.ts +2 -2
  106. package/src/apis/me/MeApi.ts +2 -8
  107. package/src/apis/messages/MessagesApi.test.ts +2 -2
  108. package/src/apis/queryFormat.test.ts +198 -0
  109. package/src/apis/serviceAccessManagement/ServiceAccessManagementApi.test.ts +2 -2
  110. package/src/apis/serviceAccessManagement/ServiceAccessManagementApi.ts +10 -10
  111. package/src/apis/stickerUsers/StickerUsersApi.test.ts +1 -1
  112. package/src/apis/stickerUsers/StickerUsersApi.ts +7 -10
  113. package/src/apis/terms/TermsApi.ts +3 -12
  114. package/src/apis/transcripts/TranscriptsApi.ts +2 -7
  115. package/src/core/ApiClient.ts +4 -0
  116. package/src/core/ArchivableCrudApi.ts +0 -2
  117. package/src/core/BaseApi.test.ts +164 -0
  118. package/src/core/BaseApi.ts +32 -0
  119. package/src/core/BaseApiClient.test.ts +10 -0
  120. package/src/core/BaseApiClient.ts +9 -1
  121. package/src/core/BaseCrudApi.test-d.ts +9 -0
  122. package/src/core/BaseCrudApi.test.ts +131 -60
  123. package/src/core/BaseCrudApi.ts +14 -14
  124. package/src/core/bindMethods.ts +26 -0
  125. package/src/core/index.ts +3 -0
  126. package/src/core/queryString.test.ts +71 -0
  127. package/src/core/queryString.ts +30 -0
  128. package/src/core/types.ts +5 -0
  129. package/src/core/withQueryFormat.test.ts +136 -0
  130. package/src/core/withQueryFormat.ts +47 -0
@@ -1 +1 @@
1
- {"version":3,"file":"BaseCrudApi.cjs","names":[],"sources":["../../src/core/BaseCrudApi.ts"],"sourcesContent":["import qs from 'qs'\nimport type { ApiClient } from './ApiClient'\nimport type { CrudApi, GetByIdQuery, ListQuery, Paginated } from './types'\nexport type {\n WhereClause,\n IncludeItem,\n ListQuery,\n GetByIdQuery,\n Paginated,\n HasGetMany,\n HasGetById,\n HasCreate,\n HasUpdateById,\n HasDeleteById,\n CrudApi,\n} from './types'\n\nexport class BaseCrudApi<\n TResponse,\n TCreate,\n TUpdate = TCreate,\n TQuery extends ListQuery<TResponse> = ListQuery<TResponse>,\n> implements CrudApi<TResponse, TCreate, TUpdate, TQuery> {\n public readonly client: ApiClient\n public readonly basePath: string\n\n constructor(client: ApiClient, basePath: string) {\n this.client = client\n this.basePath = basePath.replace(/\\/$/, '')\n this.getMany = this.getMany.bind(this)\n this.getOne = this.getOne.bind(this)\n this.getById = this.getById.bind(this)\n this.create = this.create.bind(this)\n this.updateById = this.updateById.bind(this)\n this.deleteById = this.deleteById.bind(this)\n }\n\n getMany(\n query: TQuery & { paginate: false },\n headers?: Record<string, string>,\n ): Promise<TResponse[]>\n getMany(\n query?: TQuery & { paginate?: true },\n headers?: Record<string, string>,\n ): Promise<Paginated<TResponse>>\n getMany(\n query?: TQuery,\n headers?: Record<string, string>,\n ): Promise<Paginated<TResponse> | TResponse[]> {\n const queryString = query ? `?${qs.stringify(query)}` : ''\n return this.client.get<Paginated<TResponse> | TResponse[]>(\n `${this.basePath}${queryString}`,\n headers,\n )\n }\n\n /**\n * Returns the first resource matching the query, or `null` when none match.\n * Convenience over `getMany` with `limit: 1`.\n * @permissions $resourceName.view\n */\n async getOne(query?: TQuery, headers?: Record<string, string>): Promise<TResponse | null> {\n const results = await this.getMany(\n { ...query, limit: 1, paginate: false } as TQuery & { paginate: false },\n headers,\n )\n return results[0] ?? null\n }\n\n /**\n * Returns a single resource by ID.\n * @permissions $resourceName.view\n */\n getById(\n id: string,\n query?: GetByIdQuery<TResponse>,\n headers?: Record<string, string>,\n ): Promise<TResponse> {\n const queryString = query ? `?${qs.stringify(query)}` : ''\n return this.client.get<TResponse>(`${this.basePath}/${id}${queryString}`, headers)\n }\n\n /**\n * Creates a new resource.\n * @permissions $resourceName.create\n */\n create(body: TCreate, headers?: Record<string, string>): Promise<TResponse> {\n return this.client.post<TResponse, TCreate>(this.basePath, body, headers)\n }\n\n /**\n * Updates an existing resource by ID.\n * @permissions $resourceName.update\n */\n updateById(id: string, body: TUpdate, headers?: Record<string, string>): Promise<TResponse> {\n return this.client.put<TResponse, TUpdate>(`${this.basePath}/${id}`, body, headers)\n }\n\n /**\n * Deletes a resource by ID.\n * @permissions $resourceName.delete\n */\n deleteById(id: string, headers?: Record<string, string>): Promise<TResponse> {\n return this.client.delete<TResponse>(`${this.basePath}/${id}`, headers)\n }\n}\n"],"mappings":";;;;;;AAiBA,IAAa,cAAb,MAK0D;CACxD,AAAgB;CAChB,AAAgB;CAEhB,YAAY,QAAmB,UAAkB;AAC/C,OAAK,SAAS;AACd,OAAK,WAAW,SAAS,QAAQ,OAAO,GAAG;AAC3C,OAAK,UAAU,KAAK,QAAQ,KAAK,KAAK;AACtC,OAAK,SAAS,KAAK,OAAO,KAAK,KAAK;AACpC,OAAK,UAAU,KAAK,QAAQ,KAAK,KAAK;AACtC,OAAK,SAAS,KAAK,OAAO,KAAK,KAAK;AACpC,OAAK,aAAa,KAAK,WAAW,KAAK,KAAK;AAC5C,OAAK,aAAa,KAAK,WAAW,KAAK,KAAK;;CAW9C,QACE,OACA,SAC6C;EAC7C,MAAM,cAAc,QAAQ,IAAI,WAAG,UAAU,MAAM,KAAK;AACxD,SAAO,KAAK,OAAO,IACjB,GAAG,KAAK,WAAW,eACnB,QACD;;;;;;;CAQH,MAAM,OAAO,OAAgB,SAA6D;AAKxF,UAJgB,MAAM,KAAK,QACzB;GAAE,GAAG;GAAO,OAAO;GAAG,UAAU;GAAO,EACvC,QACD,EACc,MAAM;;;;;;CAOvB,QACE,IACA,OACA,SACoB;EACpB,MAAM,cAAc,QAAQ,IAAI,WAAG,UAAU,MAAM,KAAK;AACxD,SAAO,KAAK,OAAO,IAAe,GAAG,KAAK,SAAS,GAAG,KAAK,eAAe,QAAQ;;;;;;CAOpF,OAAO,MAAe,SAAsD;AAC1E,SAAO,KAAK,OAAO,KAAyB,KAAK,UAAU,MAAM,QAAQ;;;;;;CAO3E,WAAW,IAAY,MAAe,SAAsD;AAC1F,SAAO,KAAK,OAAO,IAAwB,GAAG,KAAK,SAAS,GAAG,MAAM,MAAM,QAAQ;;;;;;CAOrF,WAAW,IAAY,SAAsD;AAC3E,SAAO,KAAK,OAAO,OAAkB,GAAG,KAAK,SAAS,GAAG,MAAM,QAAQ"}
1
+ {"version":3,"file":"BaseCrudApi.cjs","names":["BaseApi"],"sources":["../../src/core/BaseCrudApi.ts"],"sourcesContent":["import type { ApiClient } from './ApiClient'\nimport { BaseApi } from './BaseApi'\nimport type { CrudApi, GetByIdQuery, ListQuery, Paginated } from './types'\nexport type {\n WhereClause,\n IncludeItem,\n ListQuery,\n GetByIdQuery,\n Paginated,\n HasGetMany,\n HasGetById,\n HasCreate,\n HasUpdateById,\n HasDeleteById,\n CrudApi,\n} from './types'\n\nexport class BaseCrudApi<\n TResponse,\n TCreate,\n TUpdate = TCreate,\n TQuery extends ListQuery<TResponse> = ListQuery<TResponse>,\n>\n extends BaseApi\n implements CrudApi<TResponse, TCreate, TUpdate, TQuery>\n{\n public readonly basePath: string\n\n constructor(client: ApiClient, basePath: string) {\n super(client)\n this.basePath = basePath.replace(/\\/$/, '')\n }\n\n getMany(\n query: TQuery & { paginate: false },\n headers?: Record<string, string>,\n ): Promise<TResponse[]>\n getMany(\n query?: TQuery & { paginate?: true },\n headers?: Record<string, string>,\n ): Promise<Paginated<TResponse>>\n getMany(\n query?: TQuery,\n headers?: Record<string, string>,\n ): Promise<Paginated<TResponse> | TResponse[]>\n getMany(\n query?: TQuery,\n headers?: Record<string, string>,\n ): Promise<Paginated<TResponse> | TResponse[]> {\n const queryString = this.toQueryString(query)\n return this.client.get<Paginated<TResponse> | TResponse[]>(\n `${this.basePath}${queryString}`,\n headers,\n )\n }\n\n /**\n * Returns the first resource matching the query, or `null` when none match.\n * Convenience over `getMany` with `limit: 1`.\n * @permissions $resourceName.view\n */\n async getOne(query?: TQuery, headers?: Record<string, string>): Promise<TResponse | null> {\n const results = await this.getMany(\n { ...query, limit: 1, paginate: false } as TQuery & { paginate: false },\n headers,\n )\n // An empty response body resolves to `undefined`.\n return results?.[0] ?? null\n }\n\n /**\n * Returns a single resource by ID.\n * @permissions $resourceName.view\n */\n getById(\n id: string,\n query?: GetByIdQuery<TResponse>,\n headers?: Record<string, string>,\n ): Promise<TResponse> {\n return this.client.get<TResponse>(`${this.basePath}/${id}${this.toQueryString(query)}`, headers)\n }\n\n /**\n * Creates a new resource.\n * @permissions $resourceName.create\n */\n create(body: TCreate, headers?: Record<string, string>): Promise<TResponse> {\n return this.client.post<TResponse, TCreate>(this.basePath, body, headers)\n }\n\n /**\n * Updates an existing resource by ID.\n * @permissions $resourceName.update\n */\n updateById(id: string, body: TUpdate, headers?: Record<string, string>): Promise<TResponse> {\n return this.client.put<TResponse, TUpdate>(`${this.basePath}/${id}`, body, headers)\n }\n\n /**\n * Deletes a resource by ID.\n * @permissions $resourceName.delete\n */\n deleteById(id: string, headers?: Record<string, string>): Promise<TResponse> {\n return this.client.delete<TResponse>(`${this.basePath}/${id}`, headers)\n }\n}\n"],"mappings":";;;;AAiBA,IAAa,cAAb,cAMUA,6BAEV;CACE,AAAgB;CAEhB,YAAY,QAAmB,UAAkB;AAC/C,QAAM,OAAO;AACb,OAAK,WAAW,SAAS,QAAQ,OAAO,GAAG;;CAe7C,QACE,OACA,SAC6C;EAC7C,MAAM,cAAc,KAAK,cAAc,MAAM;AAC7C,SAAO,KAAK,OAAO,IACjB,GAAG,KAAK,WAAW,eACnB,QACD;;;;;;;CAQH,MAAM,OAAO,OAAgB,SAA6D;AAMxF,UALgB,MAAM,KAAK,QACzB;GAAE,GAAG;GAAO,OAAO;GAAG,UAAU;GAAO,EACvC,QACD,IAEgB,MAAM;;;;;;CAOzB,QACE,IACA,OACA,SACoB;AACpB,SAAO,KAAK,OAAO,IAAe,GAAG,KAAK,SAAS,GAAG,KAAK,KAAK,cAAc,MAAM,IAAI,QAAQ;;;;;;CAOlG,OAAO,MAAe,SAAsD;AAC1E,SAAO,KAAK,OAAO,KAAyB,KAAK,UAAU,MAAM,QAAQ;;;;;;CAO3E,WAAW,IAAY,MAAe,SAAsD;AAC1F,SAAO,KAAK,OAAO,IAAwB,GAAG,KAAK,SAAS,GAAG,MAAM,MAAM,QAAQ;;;;;;CAOrF,WAAW,IAAY,SAAsD;AAC3E,SAAO,KAAK,OAAO,OAAkB,GAAG,KAAK,SAAS,GAAG,MAAM,QAAQ"}
@@ -1,8 +1,8 @@
1
1
  import type { ApiClient } from './ApiClient';
2
+ import { BaseApi } from './BaseApi';
2
3
  import type { CrudApi, GetByIdQuery, ListQuery, Paginated } from './types';
3
4
  export type { WhereClause, IncludeItem, ListQuery, GetByIdQuery, Paginated, HasGetMany, HasGetById, HasCreate, HasUpdateById, HasDeleteById, CrudApi, } from './types';
4
- export declare class BaseCrudApi<TResponse, TCreate, TUpdate = TCreate, TQuery extends ListQuery<TResponse> = ListQuery<TResponse>> implements CrudApi<TResponse, TCreate, TUpdate, TQuery> {
5
- readonly client: ApiClient;
5
+ export declare class BaseCrudApi<TResponse, TCreate, TUpdate = TCreate, TQuery extends ListQuery<TResponse> = ListQuery<TResponse>> extends BaseApi implements CrudApi<TResponse, TCreate, TUpdate, TQuery> {
6
6
  readonly basePath: string;
7
7
  constructor(client: ApiClient, basePath: string);
8
8
  getMany(query: TQuery & {
@@ -11,6 +11,7 @@ export declare class BaseCrudApi<TResponse, TCreate, TUpdate = TCreate, TQuery e
11
11
  getMany(query?: TQuery & {
12
12
  paginate?: true;
13
13
  }, headers?: Record<string, string>): Promise<Paginated<TResponse>>;
14
+ getMany(query?: TQuery, headers?: Record<string, string>): Promise<Paginated<TResponse> | TResponse[]>;
14
15
  /**
15
16
  * Returns the first resource matching the query, or `null` when none match.
16
17
  * Convenience over `getMany` with `limit: 1`.
@@ -1 +1 @@
1
- {"version":3,"file":"BaseCrudApi.d.ts","sourceRoot":"","sources":["../../src/core/BaseCrudApi.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAA;AAC5C,OAAO,KAAK,EAAE,OAAO,EAAE,YAAY,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,SAAS,CAAA;AAC1E,YAAY,EACV,WAAW,EACX,WAAW,EACX,SAAS,EACT,YAAY,EACZ,SAAS,EACT,UAAU,EACV,UAAU,EACV,SAAS,EACT,aAAa,EACb,aAAa,EACb,OAAO,GACR,MAAM,SAAS,CAAA;AAEhB,qBAAa,WAAW,CACtB,SAAS,EACT,OAAO,EACP,OAAO,GAAG,OAAO,EACjB,MAAM,SAAS,SAAS,CAAC,SAAS,CAAC,GAAG,SAAS,CAAC,SAAS,CAAC,CAC1D,YAAW,OAAO,CAAC,SAAS,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,CAAC;IACvD,SAAgB,MAAM,EAAE,SAAS,CAAA;IACjC,SAAgB,QAAQ,EAAE,MAAM,CAAA;gBAEpB,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM;IAW/C,OAAO,CACL,KAAK,EAAE,MAAM,GAAG;QAAE,QAAQ,EAAE,KAAK,CAAA;KAAE,EACnC,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAC/B,OAAO,CAAC,SAAS,EAAE,CAAC;IACvB,OAAO,CACL,KAAK,CAAC,EAAE,MAAM,GAAG;QAAE,QAAQ,CAAC,EAAE,IAAI,CAAA;KAAE,EACpC,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAC/B,OAAO,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;IAYhC;;;;OAIG;IACG,MAAM,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC;IAQzF;;;OAGG;IACH,OAAO,CACL,EAAE,EAAE,MAAM,EACV,KAAK,CAAC,EAAE,YAAY,CAAC,SAAS,CAAC,EAC/B,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAC/B,OAAO,CAAC,SAAS,CAAC;IAKrB;;;OAGG;IACH,MAAM,CAAC,IAAI,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC,SAAS,CAAC;IAI3E;;;OAGG;IACH,UAAU,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC,SAAS,CAAC;IAI3F;;;OAGG;IACH,UAAU,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC,SAAS,CAAC;CAG7E"}
1
+ {"version":3,"file":"BaseCrudApi.d.ts","sourceRoot":"","sources":["../../src/core/BaseCrudApi.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAA;AAC5C,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AACnC,OAAO,KAAK,EAAE,OAAO,EAAE,YAAY,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,SAAS,CAAA;AAC1E,YAAY,EACV,WAAW,EACX,WAAW,EACX,SAAS,EACT,YAAY,EACZ,SAAS,EACT,UAAU,EACV,UAAU,EACV,SAAS,EACT,aAAa,EACb,aAAa,EACb,OAAO,GACR,MAAM,SAAS,CAAA;AAEhB,qBAAa,WAAW,CACtB,SAAS,EACT,OAAO,EACP,OAAO,GAAG,OAAO,EACjB,MAAM,SAAS,SAAS,CAAC,SAAS,CAAC,GAAG,SAAS,CAAC,SAAS,CAAC,CAE1D,SAAQ,OACR,YAAW,OAAO,CAAC,SAAS,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,CAAC;IAEvD,SAAgB,QAAQ,EAAE,MAAM,CAAA;gBAEpB,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM;IAK/C,OAAO,CACL,KAAK,EAAE,MAAM,GAAG;QAAE,QAAQ,EAAE,KAAK,CAAA;KAAE,EACnC,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAC/B,OAAO,CAAC,SAAS,EAAE,CAAC;IACvB,OAAO,CACL,KAAK,CAAC,EAAE,MAAM,GAAG;QAAE,QAAQ,CAAC,EAAE,IAAI,CAAA;KAAE,EACpC,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAC/B,OAAO,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;IAChC,OAAO,CACL,KAAK,CAAC,EAAE,MAAM,EACd,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAC/B,OAAO,CAAC,SAAS,CAAC,SAAS,CAAC,GAAG,SAAS,EAAE,CAAC;IAY9C;;;;OAIG;IACG,MAAM,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC;IASzF;;;OAGG;IACH,OAAO,CACL,EAAE,EAAE,MAAM,EACV,KAAK,CAAC,EAAE,YAAY,CAAC,SAAS,CAAC,EAC/B,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAC/B,OAAO,CAAC,SAAS,CAAC;IAIrB;;;OAGG;IACH,MAAM,CAAC,IAAI,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC,SAAS,CAAC;IAI3E;;;OAGG;IACH,UAAU,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC,SAAS,CAAC;IAI3F;;;OAGG;IACH,UAAU,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC,SAAS,CAAC;CAG7E"}
@@ -1,21 +1,14 @@
1
- import qs from "qs";
1
+ import { BaseApi } from "./BaseApi.mjs";
2
2
 
3
3
  //#region src/core/BaseCrudApi.ts
4
- var BaseCrudApi = class {
5
- client;
4
+ var BaseCrudApi = class extends BaseApi {
6
5
  basePath;
7
6
  constructor(client, basePath) {
8
- this.client = client;
7
+ super(client);
9
8
  this.basePath = basePath.replace(/\/$/, "");
10
- this.getMany = this.getMany.bind(this);
11
- this.getOne = this.getOne.bind(this);
12
- this.getById = this.getById.bind(this);
13
- this.create = this.create.bind(this);
14
- this.updateById = this.updateById.bind(this);
15
- this.deleteById = this.deleteById.bind(this);
16
9
  }
17
10
  getMany(query, headers) {
18
- const queryString = query ? `?${qs.stringify(query)}` : "";
11
+ const queryString = this.toQueryString(query);
19
12
  return this.client.get(`${this.basePath}${queryString}`, headers);
20
13
  }
21
14
  /**
@@ -28,15 +21,14 @@ var BaseCrudApi = class {
28
21
  ...query,
29
22
  limit: 1,
30
23
  paginate: false
31
- }, headers))[0] ?? null;
24
+ }, headers))?.[0] ?? null;
32
25
  }
33
26
  /**
34
27
  * Returns a single resource by ID.
35
28
  * @permissions $resourceName.view
36
29
  */
37
30
  getById(id, query, headers) {
38
- const queryString = query ? `?${qs.stringify(query)}` : "";
39
- return this.client.get(`${this.basePath}/${id}${queryString}`, headers);
31
+ return this.client.get(`${this.basePath}/${id}${this.toQueryString(query)}`, headers);
40
32
  }
41
33
  /**
42
34
  * Creates a new resource.
@@ -1 +1 @@
1
- {"version":3,"file":"BaseCrudApi.mjs","names":[],"sources":["../../src/core/BaseCrudApi.ts"],"sourcesContent":["import qs from 'qs'\nimport type { ApiClient } from './ApiClient'\nimport type { CrudApi, GetByIdQuery, ListQuery, Paginated } from './types'\nexport type {\n WhereClause,\n IncludeItem,\n ListQuery,\n GetByIdQuery,\n Paginated,\n HasGetMany,\n HasGetById,\n HasCreate,\n HasUpdateById,\n HasDeleteById,\n CrudApi,\n} from './types'\n\nexport class BaseCrudApi<\n TResponse,\n TCreate,\n TUpdate = TCreate,\n TQuery extends ListQuery<TResponse> = ListQuery<TResponse>,\n> implements CrudApi<TResponse, TCreate, TUpdate, TQuery> {\n public readonly client: ApiClient\n public readonly basePath: string\n\n constructor(client: ApiClient, basePath: string) {\n this.client = client\n this.basePath = basePath.replace(/\\/$/, '')\n this.getMany = this.getMany.bind(this)\n this.getOne = this.getOne.bind(this)\n this.getById = this.getById.bind(this)\n this.create = this.create.bind(this)\n this.updateById = this.updateById.bind(this)\n this.deleteById = this.deleteById.bind(this)\n }\n\n getMany(\n query: TQuery & { paginate: false },\n headers?: Record<string, string>,\n ): Promise<TResponse[]>\n getMany(\n query?: TQuery & { paginate?: true },\n headers?: Record<string, string>,\n ): Promise<Paginated<TResponse>>\n getMany(\n query?: TQuery,\n headers?: Record<string, string>,\n ): Promise<Paginated<TResponse> | TResponse[]> {\n const queryString = query ? `?${qs.stringify(query)}` : ''\n return this.client.get<Paginated<TResponse> | TResponse[]>(\n `${this.basePath}${queryString}`,\n headers,\n )\n }\n\n /**\n * Returns the first resource matching the query, or `null` when none match.\n * Convenience over `getMany` with `limit: 1`.\n * @permissions $resourceName.view\n */\n async getOne(query?: TQuery, headers?: Record<string, string>): Promise<TResponse | null> {\n const results = await this.getMany(\n { ...query, limit: 1, paginate: false } as TQuery & { paginate: false },\n headers,\n )\n return results[0] ?? null\n }\n\n /**\n * Returns a single resource by ID.\n * @permissions $resourceName.view\n */\n getById(\n id: string,\n query?: GetByIdQuery<TResponse>,\n headers?: Record<string, string>,\n ): Promise<TResponse> {\n const queryString = query ? `?${qs.stringify(query)}` : ''\n return this.client.get<TResponse>(`${this.basePath}/${id}${queryString}`, headers)\n }\n\n /**\n * Creates a new resource.\n * @permissions $resourceName.create\n */\n create(body: TCreate, headers?: Record<string, string>): Promise<TResponse> {\n return this.client.post<TResponse, TCreate>(this.basePath, body, headers)\n }\n\n /**\n * Updates an existing resource by ID.\n * @permissions $resourceName.update\n */\n updateById(id: string, body: TUpdate, headers?: Record<string, string>): Promise<TResponse> {\n return this.client.put<TResponse, TUpdate>(`${this.basePath}/${id}`, body, headers)\n }\n\n /**\n * Deletes a resource by ID.\n * @permissions $resourceName.delete\n */\n deleteById(id: string, headers?: Record<string, string>): Promise<TResponse> {\n return this.client.delete<TResponse>(`${this.basePath}/${id}`, headers)\n }\n}\n"],"mappings":";;;AAiBA,IAAa,cAAb,MAK0D;CACxD,AAAgB;CAChB,AAAgB;CAEhB,YAAY,QAAmB,UAAkB;AAC/C,OAAK,SAAS;AACd,OAAK,WAAW,SAAS,QAAQ,OAAO,GAAG;AAC3C,OAAK,UAAU,KAAK,QAAQ,KAAK,KAAK;AACtC,OAAK,SAAS,KAAK,OAAO,KAAK,KAAK;AACpC,OAAK,UAAU,KAAK,QAAQ,KAAK,KAAK;AACtC,OAAK,SAAS,KAAK,OAAO,KAAK,KAAK;AACpC,OAAK,aAAa,KAAK,WAAW,KAAK,KAAK;AAC5C,OAAK,aAAa,KAAK,WAAW,KAAK,KAAK;;CAW9C,QACE,OACA,SAC6C;EAC7C,MAAM,cAAc,QAAQ,IAAI,GAAG,UAAU,MAAM,KAAK;AACxD,SAAO,KAAK,OAAO,IACjB,GAAG,KAAK,WAAW,eACnB,QACD;;;;;;;CAQH,MAAM,OAAO,OAAgB,SAA6D;AAKxF,UAJgB,MAAM,KAAK,QACzB;GAAE,GAAG;GAAO,OAAO;GAAG,UAAU;GAAO,EACvC,QACD,EACc,MAAM;;;;;;CAOvB,QACE,IACA,OACA,SACoB;EACpB,MAAM,cAAc,QAAQ,IAAI,GAAG,UAAU,MAAM,KAAK;AACxD,SAAO,KAAK,OAAO,IAAe,GAAG,KAAK,SAAS,GAAG,KAAK,eAAe,QAAQ;;;;;;CAOpF,OAAO,MAAe,SAAsD;AAC1E,SAAO,KAAK,OAAO,KAAyB,KAAK,UAAU,MAAM,QAAQ;;;;;;CAO3E,WAAW,IAAY,MAAe,SAAsD;AAC1F,SAAO,KAAK,OAAO,IAAwB,GAAG,KAAK,SAAS,GAAG,MAAM,MAAM,QAAQ;;;;;;CAOrF,WAAW,IAAY,SAAsD;AAC3E,SAAO,KAAK,OAAO,OAAkB,GAAG,KAAK,SAAS,GAAG,MAAM,QAAQ"}
1
+ {"version":3,"file":"BaseCrudApi.mjs","names":[],"sources":["../../src/core/BaseCrudApi.ts"],"sourcesContent":["import type { ApiClient } from './ApiClient'\nimport { BaseApi } from './BaseApi'\nimport type { CrudApi, GetByIdQuery, ListQuery, Paginated } from './types'\nexport type {\n WhereClause,\n IncludeItem,\n ListQuery,\n GetByIdQuery,\n Paginated,\n HasGetMany,\n HasGetById,\n HasCreate,\n HasUpdateById,\n HasDeleteById,\n CrudApi,\n} from './types'\n\nexport class BaseCrudApi<\n TResponse,\n TCreate,\n TUpdate = TCreate,\n TQuery extends ListQuery<TResponse> = ListQuery<TResponse>,\n>\n extends BaseApi\n implements CrudApi<TResponse, TCreate, TUpdate, TQuery>\n{\n public readonly basePath: string\n\n constructor(client: ApiClient, basePath: string) {\n super(client)\n this.basePath = basePath.replace(/\\/$/, '')\n }\n\n getMany(\n query: TQuery & { paginate: false },\n headers?: Record<string, string>,\n ): Promise<TResponse[]>\n getMany(\n query?: TQuery & { paginate?: true },\n headers?: Record<string, string>,\n ): Promise<Paginated<TResponse>>\n getMany(\n query?: TQuery,\n headers?: Record<string, string>,\n ): Promise<Paginated<TResponse> | TResponse[]>\n getMany(\n query?: TQuery,\n headers?: Record<string, string>,\n ): Promise<Paginated<TResponse> | TResponse[]> {\n const queryString = this.toQueryString(query)\n return this.client.get<Paginated<TResponse> | TResponse[]>(\n `${this.basePath}${queryString}`,\n headers,\n )\n }\n\n /**\n * Returns the first resource matching the query, or `null` when none match.\n * Convenience over `getMany` with `limit: 1`.\n * @permissions $resourceName.view\n */\n async getOne(query?: TQuery, headers?: Record<string, string>): Promise<TResponse | null> {\n const results = await this.getMany(\n { ...query, limit: 1, paginate: false } as TQuery & { paginate: false },\n headers,\n )\n // An empty response body resolves to `undefined`.\n return results?.[0] ?? null\n }\n\n /**\n * Returns a single resource by ID.\n * @permissions $resourceName.view\n */\n getById(\n id: string,\n query?: GetByIdQuery<TResponse>,\n headers?: Record<string, string>,\n ): Promise<TResponse> {\n return this.client.get<TResponse>(`${this.basePath}/${id}${this.toQueryString(query)}`, headers)\n }\n\n /**\n * Creates a new resource.\n * @permissions $resourceName.create\n */\n create(body: TCreate, headers?: Record<string, string>): Promise<TResponse> {\n return this.client.post<TResponse, TCreate>(this.basePath, body, headers)\n }\n\n /**\n * Updates an existing resource by ID.\n * @permissions $resourceName.update\n */\n updateById(id: string, body: TUpdate, headers?: Record<string, string>): Promise<TResponse> {\n return this.client.put<TResponse, TUpdate>(`${this.basePath}/${id}`, body, headers)\n }\n\n /**\n * Deletes a resource by ID.\n * @permissions $resourceName.delete\n */\n deleteById(id: string, headers?: Record<string, string>): Promise<TResponse> {\n return this.client.delete<TResponse>(`${this.basePath}/${id}`, headers)\n }\n}\n"],"mappings":";;;AAiBA,IAAa,cAAb,cAMU,QAEV;CACE,AAAgB;CAEhB,YAAY,QAAmB,UAAkB;AAC/C,QAAM,OAAO;AACb,OAAK,WAAW,SAAS,QAAQ,OAAO,GAAG;;CAe7C,QACE,OACA,SAC6C;EAC7C,MAAM,cAAc,KAAK,cAAc,MAAM;AAC7C,SAAO,KAAK,OAAO,IACjB,GAAG,KAAK,WAAW,eACnB,QACD;;;;;;;CAQH,MAAM,OAAO,OAAgB,SAA6D;AAMxF,UALgB,MAAM,KAAK,QACzB;GAAE,GAAG;GAAO,OAAO;GAAG,UAAU;GAAO,EACvC,QACD,IAEgB,MAAM;;;;;;CAOzB,QACE,IACA,OACA,SACoB;AACpB,SAAO,KAAK,OAAO,IAAe,GAAG,KAAK,SAAS,GAAG,KAAK,KAAK,cAAc,MAAM,IAAI,QAAQ;;;;;;CAOlG,OAAO,MAAe,SAAsD;AAC1E,SAAO,KAAK,OAAO,KAAyB,KAAK,UAAU,MAAM,QAAQ;;;;;;CAO3E,WAAW,IAAY,MAAe,SAAsD;AAC1F,SAAO,KAAK,OAAO,IAAwB,GAAG,KAAK,SAAS,GAAG,MAAM,MAAM,QAAQ;;;;;;CAOrF,WAAW,IAAY,SAAsD;AAC3E,SAAO,KAAK,OAAO,OAAkB,GAAG,KAAK,SAAS,GAAG,MAAM,QAAQ"}
@@ -0,0 +1,24 @@
1
+ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
2
+
3
+ //#region src/core/bindMethods.ts
4
+ /**
5
+ * Binds every method of `instance`'s class chain (up to `Object.prototype`) to `instance`, as own
6
+ * properties, so methods keep working when destructured (`const { getMany } = api`). The most
7
+ * derived implementation wins; getters, setters and `constructor` are skipped.
8
+ */
9
+ function bindMethods(instance) {
10
+ const target = instance;
11
+ const bound = /* @__PURE__ */ new Set();
12
+ for (let prototype = Object.getPrototypeOf(instance); prototype && prototype !== Object.prototype; prototype = Object.getPrototypeOf(prototype)) for (const key of Reflect.ownKeys(prototype)) {
13
+ if (key === "constructor" || bound.has(key)) continue;
14
+ const { value } = Object.getOwnPropertyDescriptor(prototype, key);
15
+ if (typeof value === "function") {
16
+ target[key] = value.bind(instance);
17
+ bound.add(key);
18
+ }
19
+ }
20
+ }
21
+
22
+ //#endregion
23
+ exports.bindMethods = bindMethods;
24
+ //# sourceMappingURL=bindMethods.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bindMethods.cjs","names":[],"sources":["../../src/core/bindMethods.ts"],"sourcesContent":["/**\n * Binds every method of `instance`'s class chain (up to `Object.prototype`) to `instance`, as own\n * properties, so methods keep working when destructured (`const { getMany } = api`). The most\n * derived implementation wins; getters, setters and `constructor` are skipped.\n */\nexport function bindMethods(instance: object): void {\n const target = instance as Record<PropertyKey, unknown>\n const bound = new Set<PropertyKey>()\n\n for (\n let prototype: object | null = Object.getPrototypeOf(instance);\n prototype && prototype !== Object.prototype;\n prototype = Object.getPrototypeOf(prototype)\n ) {\n for (const key of Reflect.ownKeys(prototype)) {\n if (key === 'constructor' || bound.has(key)) {\n continue\n }\n const { value } = Object.getOwnPropertyDescriptor(prototype, key) as PropertyDescriptor\n if (typeof value === 'function') {\n target[key] = value.bind(instance)\n bound.add(key)\n }\n }\n }\n}\n"],"mappings":";;;;;;;;AAKA,SAAgB,YAAY,UAAwB;CAClD,MAAM,SAAS;CACf,MAAM,wBAAQ,IAAI,KAAkB;AAEpC,MACE,IAAI,YAA2B,OAAO,eAAe,SAAS,EAC9D,aAAa,cAAc,OAAO,WAClC,YAAY,OAAO,eAAe,UAAU,CAE5C,MAAK,MAAM,OAAO,QAAQ,QAAQ,UAAU,EAAE;AAC5C,MAAI,QAAQ,iBAAiB,MAAM,IAAI,IAAI,CACzC;EAEF,MAAM,EAAE,UAAU,OAAO,yBAAyB,WAAW,IAAI;AACjE,MAAI,OAAO,UAAU,YAAY;AAC/B,UAAO,OAAO,MAAM,KAAK,SAAS;AAClC,SAAM,IAAI,IAAI"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Binds every method of `instance`'s class chain (up to `Object.prototype`) to `instance`, as own
3
+ * properties, so methods keep working when destructured (`const { getMany } = api`). The most
4
+ * derived implementation wins; getters, setters and `constructor` are skipped.
5
+ */
6
+ export declare function bindMethods(instance: object): void;
7
+ //# sourceMappingURL=bindMethods.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bindMethods.d.ts","sourceRoot":"","sources":["../../src/core/bindMethods.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,wBAAgB,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAoBlD"}
@@ -0,0 +1,22 @@
1
+ //#region src/core/bindMethods.ts
2
+ /**
3
+ * Binds every method of `instance`'s class chain (up to `Object.prototype`) to `instance`, as own
4
+ * properties, so methods keep working when destructured (`const { getMany } = api`). The most
5
+ * derived implementation wins; getters, setters and `constructor` are skipped.
6
+ */
7
+ function bindMethods(instance) {
8
+ const target = instance;
9
+ const bound = /* @__PURE__ */ new Set();
10
+ for (let prototype = Object.getPrototypeOf(instance); prototype && prototype !== Object.prototype; prototype = Object.getPrototypeOf(prototype)) for (const key of Reflect.ownKeys(prototype)) {
11
+ if (key === "constructor" || bound.has(key)) continue;
12
+ const { value } = Object.getOwnPropertyDescriptor(prototype, key);
13
+ if (typeof value === "function") {
14
+ target[key] = value.bind(instance);
15
+ bound.add(key);
16
+ }
17
+ }
18
+ }
19
+
20
+ //#endregion
21
+ export { bindMethods };
22
+ //# sourceMappingURL=bindMethods.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bindMethods.mjs","names":[],"sources":["../../src/core/bindMethods.ts"],"sourcesContent":["/**\n * Binds every method of `instance`'s class chain (up to `Object.prototype`) to `instance`, as own\n * properties, so methods keep working when destructured (`const { getMany } = api`). The most\n * derived implementation wins; getters, setters and `constructor` are skipped.\n */\nexport function bindMethods(instance: object): void {\n const target = instance as Record<PropertyKey, unknown>\n const bound = new Set<PropertyKey>()\n\n for (\n let prototype: object | null = Object.getPrototypeOf(instance);\n prototype && prototype !== Object.prototype;\n prototype = Object.getPrototypeOf(prototype)\n ) {\n for (const key of Reflect.ownKeys(prototype)) {\n if (key === 'constructor' || bound.has(key)) {\n continue\n }\n const { value } = Object.getOwnPropertyDescriptor(prototype, key) as PropertyDescriptor\n if (typeof value === 'function') {\n target[key] = value.bind(instance)\n bound.add(key)\n }\n }\n }\n}\n"],"mappings":";;;;;;AAKA,SAAgB,YAAY,UAAwB;CAClD,MAAM,SAAS;CACf,MAAM,wBAAQ,IAAI,KAAkB;AAEpC,MACE,IAAI,YAA2B,OAAO,eAAe,SAAS,EAC9D,aAAa,cAAc,OAAO,WAClC,YAAY,OAAO,eAAe,UAAU,CAE5C,MAAK,MAAM,OAAO,QAAQ,QAAQ,UAAU,EAAE;AAC5C,MAAI,QAAQ,iBAAiB,MAAM,IAAI,IAAI,CACzC;EAEF,MAAM,EAAE,UAAU,OAAO,yBAAyB,WAAW,IAAI;AACjE,MAAI,OAAO,UAAU,YAAY;AAC/B,UAAO,OAAO,MAAM,KAAK,SAAS;AAClC,SAAM,IAAI,IAAI"}
@@ -1,6 +1,7 @@
1
1
  Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
2
2
  const require_core_errors = require('./errors.cjs');
3
3
  const require_core_BaseApiClient = require('./BaseApiClient.cjs');
4
+ const require_core_BaseApi = require('./BaseApi.cjs');
4
5
  const require_core_BaseCrudApi = require('./BaseCrudApi.cjs');
5
6
  const require_core_ArchivableCrudApi = require('./ArchivableCrudApi.cjs');
6
7
 
@@ -9,6 +10,7 @@ exports.ApiError = require_core_errors.ApiError;
9
10
  exports.ArchivableCrudApi = require_core_ArchivableCrudApi.ArchivableCrudApi;
10
11
  exports.AuthenticationError = require_core_errors.AuthenticationError;
11
12
  exports.BadRequestError = require_core_errors.BadRequestError;
13
+ exports.BaseApi = require_core_BaseApi.BaseApi;
12
14
  exports.BaseApiClient = require_core_BaseApiClient.BaseApiClient;
13
15
  exports.BaseCrudApi = require_core_BaseCrudApi.BaseCrudApi;
14
16
  exports.ConflictError = require_core_errors.ConflictError;
@@ -1,7 +1,10 @@
1
1
  export type { ApiClient, HttpMethod } from './ApiClient';
2
2
  export { BaseApiClient } from './BaseApiClient';
3
+ export type { BaseApiClientOptions } from './BaseApiClient';
4
+ export type { QueryFormat } from './queryString';
3
5
  export { DigisacError, ApiConnectionError, ApiError, BadRequestError, ValidationError, AuthenticationError, PaymentRequiredError, PermissionDeniedError, NotFoundError, ConflictError, UnprocessableEntityError, RateLimitError, InternalServerError, parseFieldErrors, } from './errors';
4
6
  export type { FieldError, ErrorClassName, ApiErrorOptions } from './errors';
7
+ export { BaseApi } from './BaseApi';
5
8
  export { BaseCrudApi } from './BaseCrudApi';
6
9
  export { ArchivableCrudApi } from './ArchivableCrudApi';
7
10
  export type { WhereClause, IncludeItem, ListQuery, GetByIdQuery, Paginated } from './types';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/core/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AACxD,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAA;AAC/C,OAAO,EACL,YAAY,EACZ,kBAAkB,EAClB,QAAQ,EACR,eAAe,EACf,eAAe,EACf,mBAAmB,EACnB,oBAAoB,EACpB,qBAAqB,EACrB,aAAa,EACb,aAAa,EACb,wBAAwB,EACxB,cAAc,EACd,mBAAmB,EACnB,gBAAgB,GACjB,MAAM,UAAU,CAAA;AACjB,YAAY,EAAE,UAAU,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,UAAU,CAAA;AAC3E,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAA;AAC3C,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAA;AACvD,YAAY,EAAE,WAAW,EAAE,WAAW,EAAE,SAAS,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,SAAS,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/core/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AACxD,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAA;AAC/C,YAAY,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAA;AAC3D,YAAY,EAAE,WAAW,EAAE,MAAM,eAAe,CAAA;AAChD,OAAO,EACL,YAAY,EACZ,kBAAkB,EAClB,QAAQ,EACR,eAAe,EACf,eAAe,EACf,mBAAmB,EACnB,oBAAoB,EACpB,qBAAqB,EACrB,aAAa,EACb,aAAa,EACb,wBAAwB,EACxB,cAAc,EACd,mBAAmB,EACnB,gBAAgB,GACjB,MAAM,UAAU,CAAA;AACjB,YAAY,EAAE,UAAU,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,UAAU,CAAA;AAC3E,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AACnC,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAA;AAC3C,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAA;AACvD,YAAY,EAAE,WAAW,EAAE,WAAW,EAAE,SAAS,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,SAAS,CAAA"}
@@ -1,6 +1,7 @@
1
1
  import { ApiConnectionError, ApiError, AuthenticationError, BadRequestError, ConflictError, DigisacError, InternalServerError, NotFoundError, PaymentRequiredError, PermissionDeniedError, RateLimitError, UnprocessableEntityError, ValidationError, parseFieldErrors } from "./errors.mjs";
2
2
  import { BaseApiClient } from "./BaseApiClient.mjs";
3
+ import { BaseApi } from "./BaseApi.mjs";
3
4
  import { BaseCrudApi } from "./BaseCrudApi.mjs";
4
5
  import { ArchivableCrudApi } from "./ArchivableCrudApi.mjs";
5
6
 
6
- export { ApiConnectionError, ApiError, ArchivableCrudApi, AuthenticationError, BadRequestError, BaseApiClient, BaseCrudApi, ConflictError, DigisacError, InternalServerError, NotFoundError, PaymentRequiredError, PermissionDeniedError, RateLimitError, UnprocessableEntityError, ValidationError, parseFieldErrors };
7
+ export { ApiConnectionError, ApiError, ArchivableCrudApi, AuthenticationError, BadRequestError, BaseApi, BaseApiClient, BaseCrudApi, ConflictError, DigisacError, InternalServerError, NotFoundError, PaymentRequiredError, PermissionDeniedError, RateLimitError, UnprocessableEntityError, ValidationError, parseFieldErrors };
@@ -0,0 +1,22 @@
1
+ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
2
+ const require_chunk = require('../_chunks/chunk-Dk0Otj32.cjs');
3
+ let qs = require("qs");
4
+ qs = require_chunk.__toESM(qs);
5
+
6
+ //#region src/core/queryString.ts
7
+ const DEFAULT_QUERY_FORMAT = "json";
8
+ /** Serializes a query in `format`, or returns `''` when there is nothing to send. */
9
+ function toQueryString(query, format = DEFAULT_QUERY_FORMAT) {
10
+ if (!query) return "";
11
+ if (format === "qs") {
12
+ const queryString = qs.default.stringify(query);
13
+ return queryString ? `?${queryString}` : "";
14
+ }
15
+ const json = JSON.stringify(query);
16
+ return json === "{}" ? "" : `?query=${encodeURIComponent(json)}`;
17
+ }
18
+
19
+ //#endregion
20
+ exports.DEFAULT_QUERY_FORMAT = DEFAULT_QUERY_FORMAT;
21
+ exports.toQueryString = toQueryString;
22
+ //# sourceMappingURL=queryString.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"queryString.cjs","names":[],"sources":["../../src/core/queryString.ts"],"sourcesContent":["import qs from 'qs'\n\n/**\n * How list/get queries (`where`, `include`, `order`, ...) are put in the URL:\n *\n * - `'json'` — `?query=<JSON>`, merged into `req.query` by the backend `parseQuery` middleware.\n * Keeps `null`, booleans and numbers typed and has no nesting limit.\n * - `'qs'` — bracket notation (`?where[name]=x&page=2`). Readable, but the backend parses it with\n * `qs` defaults: `null` arrives as `''`, booleans/numbers as strings, and objects nested deeper\n * than 5 levels (e.g. an `include` inside an `include` with a `where`) are mangled.\n */\nexport type QueryFormat = 'json' | 'qs'\n\nexport const DEFAULT_QUERY_FORMAT: QueryFormat = 'json'\n\n/** Serializes a query in `format`, or returns `''` when there is nothing to send. */\nexport function toQueryString(\n query?: object | null,\n format: QueryFormat = DEFAULT_QUERY_FORMAT,\n): string {\n if (!query) {\n return ''\n }\n if (format === 'qs') {\n const queryString = qs.stringify(query)\n return queryString ? `?${queryString}` : ''\n }\n const json = JSON.stringify(query)\n return json === '{}' ? '' : `?query=${encodeURIComponent(json)}`\n}\n"],"mappings":";;;;;;AAaA,MAAa,uBAAoC;;AAGjD,SAAgB,cACd,OACA,SAAsB,sBACd;AACR,KAAI,CAAC,MACH,QAAO;AAET,KAAI,WAAW,MAAM;EACnB,MAAM,cAAc,WAAG,UAAU,MAAM;AACvC,SAAO,cAAc,IAAI,gBAAgB;;CAE3C,MAAM,OAAO,KAAK,UAAU,MAAM;AAClC,QAAO,SAAS,OAAO,KAAK,UAAU,mBAAmB,KAAK"}
@@ -0,0 +1,14 @@
1
+ /**
2
+ * How list/get queries (`where`, `include`, `order`, ...) are put in the URL:
3
+ *
4
+ * - `'json'` — `?query=<JSON>`, merged into `req.query` by the backend `parseQuery` middleware.
5
+ * Keeps `null`, booleans and numbers typed and has no nesting limit.
6
+ * - `'qs'` — bracket notation (`?where[name]=x&page=2`). Readable, but the backend parses it with
7
+ * `qs` defaults: `null` arrives as `''`, booleans/numbers as strings, and objects nested deeper
8
+ * than 5 levels (e.g. an `include` inside an `include` with a `where`) are mangled.
9
+ */
10
+ export type QueryFormat = 'json' | 'qs';
11
+ export declare const DEFAULT_QUERY_FORMAT: QueryFormat;
12
+ /** Serializes a query in `format`, or returns `''` when there is nothing to send. */
13
+ export declare function toQueryString(query?: object | null, format?: QueryFormat): string;
14
+ //# sourceMappingURL=queryString.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"queryString.d.ts","sourceRoot":"","sources":["../../src/core/queryString.ts"],"names":[],"mappings":"AAEA;;;;;;;;GAQG;AACH,MAAM,MAAM,WAAW,GAAG,MAAM,GAAG,IAAI,CAAA;AAEvC,eAAO,MAAM,oBAAoB,EAAE,WAAoB,CAAA;AAEvD,qFAAqF;AACrF,wBAAgB,aAAa,CAC3B,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,EACrB,MAAM,GAAE,WAAkC,GACzC,MAAM,CAUR"}
@@ -0,0 +1,18 @@
1
+ import qs from "qs";
2
+
3
+ //#region src/core/queryString.ts
4
+ const DEFAULT_QUERY_FORMAT = "json";
5
+ /** Serializes a query in `format`, or returns `''` when there is nothing to send. */
6
+ function toQueryString(query, format = DEFAULT_QUERY_FORMAT) {
7
+ if (!query) return "";
8
+ if (format === "qs") {
9
+ const queryString = qs.stringify(query);
10
+ return queryString ? `?${queryString}` : "";
11
+ }
12
+ const json = JSON.stringify(query);
13
+ return json === "{}" ? "" : `?query=${encodeURIComponent(json)}`;
14
+ }
15
+
16
+ //#endregion
17
+ export { DEFAULT_QUERY_FORMAT, toQueryString };
18
+ //# sourceMappingURL=queryString.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"queryString.mjs","names":[],"sources":["../../src/core/queryString.ts"],"sourcesContent":["import qs from 'qs'\n\n/**\n * How list/get queries (`where`, `include`, `order`, ...) are put in the URL:\n *\n * - `'json'` — `?query=<JSON>`, merged into `req.query` by the backend `parseQuery` middleware.\n * Keeps `null`, booleans and numbers typed and has no nesting limit.\n * - `'qs'` — bracket notation (`?where[name]=x&page=2`). Readable, but the backend parses it with\n * `qs` defaults: `null` arrives as `''`, booleans/numbers as strings, and objects nested deeper\n * than 5 levels (e.g. an `include` inside an `include` with a `where`) are mangled.\n */\nexport type QueryFormat = 'json' | 'qs'\n\nexport const DEFAULT_QUERY_FORMAT: QueryFormat = 'json'\n\n/** Serializes a query in `format`, or returns `''` when there is nothing to send. */\nexport function toQueryString(\n query?: object | null,\n format: QueryFormat = DEFAULT_QUERY_FORMAT,\n): string {\n if (!query) {\n return ''\n }\n if (format === 'qs') {\n const queryString = qs.stringify(query)\n return queryString ? `?${queryString}` : ''\n }\n const json = JSON.stringify(query)\n return json === '{}' ? '' : `?query=${encodeURIComponent(json)}`\n}\n"],"mappings":";;;AAaA,MAAa,uBAAoC;;AAGjD,SAAgB,cACd,OACA,SAAsB,sBACd;AACR,KAAI,CAAC,MACH,QAAO;AAET,KAAI,WAAW,MAAM;EACnB,MAAM,cAAc,GAAG,UAAU,MAAM;AACvC,SAAO,cAAc,IAAI,gBAAgB;;CAE3C,MAAM,OAAO,KAAK,UAAU,MAAM;AAClC,QAAO,SAAS,OAAO,KAAK,UAAU,mBAAmB,KAAK"}
@@ -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> {
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/core/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/core/types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,42 @@
1
+ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
2
+
3
+ //#region src/core/withQueryFormat.ts
4
+ /**
5
+ * A view of `client` that serializes queries in `format`. Everything else — methods, base URL and
6
+ * the access token — is read from `client`, so `client.setAccessToken()` still applies to it.
7
+ */
8
+ function overrideQueryFormat(client, format) {
9
+ return Object.create(client, { queryFormat: {
10
+ value: format,
11
+ enumerable: true,
12
+ configurable: true
13
+ } });
14
+ }
15
+ /**
16
+ * Copy of `api` whose client serializes queries in `format`; `api` itself is untouched.
17
+ *
18
+ * The copy has the same prototype and fields as `api`, with `client` replaced. Methods the
19
+ * constructor bound to `api` (`this.getMany = this.getMany.bind(this)`) are bound again to the
20
+ * copy, so they use its client.
21
+ */
22
+ function cloneWithQueryFormat(api, format) {
23
+ const source = api;
24
+ const prototype = Object.getPrototypeOf(api);
25
+ const copy = Object.create(prototype);
26
+ for (const key of Reflect.ownKeys(api)) Object.defineProperty(copy, key, Object.getOwnPropertyDescriptor(api, key));
27
+ Object.defineProperty(copy, "client", {
28
+ value: overrideQueryFormat(source.client, format),
29
+ enumerable: true,
30
+ configurable: true,
31
+ writable: false
32
+ });
33
+ for (const key of Reflect.ownKeys(api)) {
34
+ const method = prototype[key];
35
+ if (typeof copy[key] === "function" && typeof method === "function") copy[key] = method.bind(copy);
36
+ }
37
+ return copy;
38
+ }
39
+
40
+ //#endregion
41
+ exports.cloneWithQueryFormat = cloneWithQueryFormat;
42
+ //# sourceMappingURL=withQueryFormat.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"withQueryFormat.cjs","names":[],"sources":["../../src/core/withQueryFormat.ts"],"sourcesContent":["import type { ApiClient } from './ApiClient'\nimport type { QueryFormat } from './queryString'\n\n/**\n * A view of `client` that serializes queries in `format`. Everything else — methods, base URL and\n * the access token — is read from `client`, so `client.setAccessToken()` still applies to it.\n */\nfunction overrideQueryFormat<T extends ApiClient>(client: T, format: QueryFormat): T {\n return Object.create(client, {\n queryFormat: { value: format, enumerable: true, configurable: true },\n })\n}\n\n/**\n * Copy of `api` whose client serializes queries in `format`; `api` itself is untouched.\n *\n * The copy has the same prototype and fields as `api`, with `client` replaced. Methods the\n * constructor bound to `api` (`this.getMany = this.getMany.bind(this)`) are bound again to the\n * copy, so they use its client.\n */\nexport function cloneWithQueryFormat<T extends object>(api: T, format: QueryFormat): T {\n const source = api as T & { client: ApiClient }\n const prototype = Object.getPrototypeOf(api) as Record<PropertyKey, unknown>\n const copy = Object.create(prototype) as Record<PropertyKey, unknown>\n\n for (const key of Reflect.ownKeys(api)) {\n Object.defineProperty(\n copy,\n key,\n Object.getOwnPropertyDescriptor(api, key) as PropertyDescriptor,\n )\n }\n Object.defineProperty(copy, 'client', {\n value: overrideQueryFormat(source.client, format),\n enumerable: true,\n configurable: true,\n writable: false,\n })\n for (const key of Reflect.ownKeys(api)) {\n const method = prototype[key]\n if (typeof copy[key] === 'function' && typeof method === 'function') {\n copy[key] = method.bind(copy)\n }\n }\n\n return copy as T\n}\n"],"mappings":";;;;;;;AAOA,SAAS,oBAAyC,QAAW,QAAwB;AACnF,QAAO,OAAO,OAAO,QAAQ,EAC3B,aAAa;EAAE,OAAO;EAAQ,YAAY;EAAM,cAAc;EAAM,EACrE,CAAC;;;;;;;;;AAUJ,SAAgB,qBAAuC,KAAQ,QAAwB;CACrF,MAAM,SAAS;CACf,MAAM,YAAY,OAAO,eAAe,IAAI;CAC5C,MAAM,OAAO,OAAO,OAAO,UAAU;AAErC,MAAK,MAAM,OAAO,QAAQ,QAAQ,IAAI,CACpC,QAAO,eACL,MACA,KACA,OAAO,yBAAyB,KAAK,IAAI,CAC1C;AAEH,QAAO,eAAe,MAAM,UAAU;EACpC,OAAO,oBAAoB,OAAO,QAAQ,OAAO;EACjD,YAAY;EACZ,cAAc;EACd,UAAU;EACX,CAAC;AACF,MAAK,MAAM,OAAO,QAAQ,QAAQ,IAAI,EAAE;EACtC,MAAM,SAAS,UAAU;AACzB,MAAI,OAAO,KAAK,SAAS,cAAc,OAAO,WAAW,WACvD,MAAK,OAAO,OAAO,KAAK,KAAK;;AAIjC,QAAO"}
@@ -0,0 +1,10 @@
1
+ import type { QueryFormat } from './queryString';
2
+ /**
3
+ * Copy of `api` whose client serializes queries in `format`; `api` itself is untouched.
4
+ *
5
+ * The copy has the same prototype and fields as `api`, with `client` replaced. Methods the
6
+ * constructor bound to `api` (`this.getMany = this.getMany.bind(this)`) are bound again to the
7
+ * copy, so they use its client.
8
+ */
9
+ export declare function cloneWithQueryFormat<T extends object>(api: T, format: QueryFormat): T;
10
+ //# sourceMappingURL=withQueryFormat.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"withQueryFormat.d.ts","sourceRoot":"","sources":["../../src/core/withQueryFormat.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,eAAe,CAAA;AAYhD;;;;;;GAMG;AACH,wBAAgB,oBAAoB,CAAC,CAAC,SAAS,MAAM,EAAE,GAAG,EAAE,CAAC,EAAE,MAAM,EAAE,WAAW,GAAG,CAAC,CA0BrF"}
@@ -0,0 +1,40 @@
1
+ //#region src/core/withQueryFormat.ts
2
+ /**
3
+ * A view of `client` that serializes queries in `format`. Everything else — methods, base URL and
4
+ * the access token — is read from `client`, so `client.setAccessToken()` still applies to it.
5
+ */
6
+ function overrideQueryFormat(client, format) {
7
+ return Object.create(client, { queryFormat: {
8
+ value: format,
9
+ enumerable: true,
10
+ configurable: true
11
+ } });
12
+ }
13
+ /**
14
+ * Copy of `api` whose client serializes queries in `format`; `api` itself is untouched.
15
+ *
16
+ * The copy has the same prototype and fields as `api`, with `client` replaced. Methods the
17
+ * constructor bound to `api` (`this.getMany = this.getMany.bind(this)`) are bound again to the
18
+ * copy, so they use its client.
19
+ */
20
+ function cloneWithQueryFormat(api, format) {
21
+ const source = api;
22
+ const prototype = Object.getPrototypeOf(api);
23
+ const copy = Object.create(prototype);
24
+ for (const key of Reflect.ownKeys(api)) Object.defineProperty(copy, key, Object.getOwnPropertyDescriptor(api, key));
25
+ Object.defineProperty(copy, "client", {
26
+ value: overrideQueryFormat(source.client, format),
27
+ enumerable: true,
28
+ configurable: true,
29
+ writable: false
30
+ });
31
+ for (const key of Reflect.ownKeys(api)) {
32
+ const method = prototype[key];
33
+ if (typeof copy[key] === "function" && typeof method === "function") copy[key] = method.bind(copy);
34
+ }
35
+ return copy;
36
+ }
37
+
38
+ //#endregion
39
+ export { cloneWithQueryFormat };
40
+ //# sourceMappingURL=withQueryFormat.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"withQueryFormat.mjs","names":[],"sources":["../../src/core/withQueryFormat.ts"],"sourcesContent":["import type { ApiClient } from './ApiClient'\nimport type { QueryFormat } from './queryString'\n\n/**\n * A view of `client` that serializes queries in `format`. Everything else — methods, base URL and\n * the access token — is read from `client`, so `client.setAccessToken()` still applies to it.\n */\nfunction overrideQueryFormat<T extends ApiClient>(client: T, format: QueryFormat): T {\n return Object.create(client, {\n queryFormat: { value: format, enumerable: true, configurable: true },\n })\n}\n\n/**\n * Copy of `api` whose client serializes queries in `format`; `api` itself is untouched.\n *\n * The copy has the same prototype and fields as `api`, with `client` replaced. Methods the\n * constructor bound to `api` (`this.getMany = this.getMany.bind(this)`) are bound again to the\n * copy, so they use its client.\n */\nexport function cloneWithQueryFormat<T extends object>(api: T, format: QueryFormat): T {\n const source = api as T & { client: ApiClient }\n const prototype = Object.getPrototypeOf(api) as Record<PropertyKey, unknown>\n const copy = Object.create(prototype) as Record<PropertyKey, unknown>\n\n for (const key of Reflect.ownKeys(api)) {\n Object.defineProperty(\n copy,\n key,\n Object.getOwnPropertyDescriptor(api, key) as PropertyDescriptor,\n )\n }\n Object.defineProperty(copy, 'client', {\n value: overrideQueryFormat(source.client, format),\n enumerable: true,\n configurable: true,\n writable: false,\n })\n for (const key of Reflect.ownKeys(api)) {\n const method = prototype[key]\n if (typeof copy[key] === 'function' && typeof method === 'function') {\n copy[key] = method.bind(copy)\n }\n }\n\n return copy as T\n}\n"],"mappings":";;;;;AAOA,SAAS,oBAAyC,QAAW,QAAwB;AACnF,QAAO,OAAO,OAAO,QAAQ,EAC3B,aAAa;EAAE,OAAO;EAAQ,YAAY;EAAM,cAAc;EAAM,EACrE,CAAC;;;;;;;;;AAUJ,SAAgB,qBAAuC,KAAQ,QAAwB;CACrF,MAAM,SAAS;CACf,MAAM,YAAY,OAAO,eAAe,IAAI;CAC5C,MAAM,OAAO,OAAO,OAAO,UAAU;AAErC,MAAK,MAAM,OAAO,QAAQ,QAAQ,IAAI,CACpC,QAAO,eACL,MACA,KACA,OAAO,yBAAyB,KAAK,IAAI,CAC1C;AAEH,QAAO,eAAe,MAAM,UAAU;EACpC,OAAO,oBAAoB,OAAO,QAAQ,OAAO;EACjD,YAAY;EACZ,cAAc;EACd,UAAU;EACX,CAAC;AACF,MAAK,MAAM,OAAO,QAAQ,QAAQ,IAAI,EAAE;EACtC,MAAM,SAAS,UAAU;AACzB,MAAI,OAAO,KAAK,SAAS,cAAc,OAAO,WAAW,WACvD,MAAK,OAAO,OAAO,KAAK,KAAK;;AAIjC,QAAO"}
package/dist/index.cjs CHANGED
@@ -1,6 +1,7 @@
1
1
  Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
2
2
  const require_core_errors = require('./core/errors.cjs');
3
3
  const require_core_BaseApiClient = require('./core/BaseApiClient.cjs');
4
+ const require_core_BaseApi = require('./core/BaseApi.cjs');
4
5
  const require_core_BaseCrudApi = require('./core/BaseCrudApi.cjs');
5
6
  const require_core_ArchivableCrudApi = require('./core/ArchivableCrudApi.cjs');
6
7
  require('./core/index.cjs');
@@ -10,6 +11,7 @@ exports.ApiError = require_core_errors.ApiError;
10
11
  exports.ArchivableCrudApi = require_core_ArchivableCrudApi.ArchivableCrudApi;
11
12
  exports.AuthenticationError = require_core_errors.AuthenticationError;
12
13
  exports.BadRequestError = require_core_errors.BadRequestError;
14
+ exports.BaseApi = require_core_BaseApi.BaseApi;
13
15
  exports.BaseApiClient = require_core_BaseApiClient.BaseApiClient;
14
16
  exports.BaseCrudApi = require_core_BaseCrudApi.BaseCrudApi;
15
17
  exports.ConflictError = require_core_errors.ConflictError;
package/dist/index.mjs CHANGED
@@ -1,7 +1,8 @@
1
1
  import { ApiConnectionError, ApiError, AuthenticationError, BadRequestError, ConflictError, DigisacError, InternalServerError, NotFoundError, PaymentRequiredError, PermissionDeniedError, RateLimitError, UnprocessableEntityError, ValidationError, parseFieldErrors } from "./core/errors.mjs";
2
2
  import { BaseApiClient } from "./core/BaseApiClient.mjs";
3
+ import { BaseApi } from "./core/BaseApi.mjs";
3
4
  import { BaseCrudApi } from "./core/BaseCrudApi.mjs";
4
5
  import { ArchivableCrudApi } from "./core/ArchivableCrudApi.mjs";
5
6
  import "./core/index.mjs";
6
7
 
7
- export { ApiConnectionError, ApiError, ArchivableCrudApi, AuthenticationError, BadRequestError, BaseApiClient, BaseCrudApi, ConflictError, DigisacError, InternalServerError, NotFoundError, PaymentRequiredError, PermissionDeniedError, RateLimitError, UnprocessableEntityError, ValidationError, parseFieldErrors };
8
+ export { ApiConnectionError, ApiError, ArchivableCrudApi, AuthenticationError, BadRequestError, BaseApi, BaseApiClient, BaseCrudApi, ConflictError, DigisacError, InternalServerError, NotFoundError, PaymentRequiredError, PermissionDeniedError, RateLimitError, UnprocessableEntityError, ValidationError, parseFieldErrors };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ikatec/digisac-api-sdk",
3
- "version": "4.0.0",
3
+ "version": "4.1.0",
4
4
  "type": "module",
5
5
  "main": "./dist/index.cjs",
6
6
  "module": "./dist/index.mjs",
@@ -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=2')
72
+ expect(decodeURIComponent(url)).toContain('"page":2')
73
73
  })
74
74
 
75
75
  it('forwards custom headers', async () => {
@@ -1,15 +1,11 @@
1
- import qs from 'qs'
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 implements HasGetMany<AuthHistory>, HasGetById<AuthHistory> {
7
- private readonly client: ApiClient
8
-
9
- constructor(client: ApiClient) {
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 = query ? `?${qs.stringify(query)}` : ''
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=2')
99
+ expect(decodeURIComponent(url)).toContain('"page":2')
100
100
  })
101
101
 
102
102
  it('forwards custom headers', async () => {
@@ -1,15 +1,13 @@
1
- import type { ApiClient } from '../../core/ApiClient'
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 implements HasCreate<ClientFeedback, CreateClientFeedbackPayload> {
6
- private readonly client: ApiClient
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=2')
106
+ expect(decodeURIComponent(url)).toContain('"page":2')
107
107
  })
108
108
 
109
109
  it('forwards custom headers', async () => {