@carlonicora/nextjs-jsonapi 6.22.0 → 6.24.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 (181) hide show
  1. package/dist/{BlockNoteEditor-2XSIQCEB.mjs → BlockNoteEditor-ENDOVTAW.mjs} +8 -8
  2. package/dist/{BlockNoteEditor-HW3TK7SM.js → BlockNoteEditor-MONT74RQ.js} +23 -23
  3. package/dist/{BlockNoteEditor-HW3TK7SM.js.map → BlockNoteEditor-MONT74RQ.js.map} +1 -1
  4. package/dist/{BlockNoteViewer-2UDFTXRS.mjs → BlockNoteViewer-2TJZ6JET.mjs} +6 -6
  5. package/dist/{BlockNoteViewer-4OHBRE4Q.js → BlockNoteViewer-K2HBF3IP.js} +7 -7
  6. package/dist/{BlockNoteViewer-4OHBRE4Q.js.map → BlockNoteViewer-K2HBF3IP.js.map} +1 -1
  7. package/dist/{JsonApiRequest-IKKHWCPB.mjs → JsonApiRequest-ADLBJ5RX.mjs} +2 -2
  8. package/dist/JsonApiRequest-KC6DOHKT.js +26 -0
  9. package/dist/{JsonApiRequest-G4J2WTSU.js.map → JsonApiRequest-KC6DOHKT.js.map} +1 -1
  10. package/dist/billing/index.js +495 -495
  11. package/dist/billing/index.mjs +7 -7
  12. package/dist/{chunk-N5ZE2Z6I.js → chunk-53SD4YRF.js} +5 -5
  13. package/dist/{chunk-N5ZE2Z6I.js.map → chunk-53SD4YRF.js.map} +1 -1
  14. package/dist/{chunk-4RA5PRXX.mjs → chunk-7OIWOPM5.mjs} +2 -2
  15. package/dist/{chunk-WCEYT3GG.js → chunk-A5M3MORY.js} +6 -3
  16. package/dist/chunk-A5M3MORY.js.map +1 -0
  17. package/dist/{chunk-FXRRQ7Q6.js → chunk-BDWV4KYR.js} +1224 -1221
  18. package/dist/chunk-BDWV4KYR.js.map +1 -0
  19. package/dist/{chunk-AUD6ZLBB.mjs → chunk-BE6UMM5X.mjs} +13 -8
  20. package/dist/chunk-BE6UMM5X.mjs.map +1 -0
  21. package/dist/{chunk-KV4N7DEG.js → chunk-BQ2WAG4K.js} +29 -24
  22. package/dist/chunk-BQ2WAG4K.js.map +1 -0
  23. package/dist/{chunk-OQQ7CZWT.js → chunk-GMMDXINC.js} +12 -12
  24. package/dist/{chunk-OQQ7CZWT.js.map → chunk-GMMDXINC.js.map} +1 -1
  25. package/dist/{chunk-ZB6OYIMB.js → chunk-HN7L6RRW.js} +1296 -1093
  26. package/dist/{chunk-DPXOPLQP.mjs.map → chunk-HN7L6RRW.js.map} +1 -1
  27. package/dist/{chunk-JSHLBRFV.mjs → chunk-N2BFT7KI.mjs} +2 -2
  28. package/dist/chunk-N2BFT7KI.mjs.map +1 -0
  29. package/dist/{chunk-EFQIMPCJ.mjs → chunk-OZADFYE7.mjs} +13 -10
  30. package/dist/chunk-OZADFYE7.mjs.map +1 -0
  31. package/dist/{chunk-YWLSIIE6.js → chunk-P7L6OFX5.js} +11 -11
  32. package/dist/{chunk-YWLSIIE6.js.map → chunk-P7L6OFX5.js.map} +1 -1
  33. package/dist/{chunk-GM4VZTWL.js → chunk-RCOKQ3R4.js} +14 -8
  34. package/dist/chunk-RCOKQ3R4.js.map +1 -0
  35. package/dist/{chunk-M3N7LPHX.mjs → chunk-S7SPAC6X.mjs} +6 -3
  36. package/dist/chunk-S7SPAC6X.mjs.map +1 -0
  37. package/dist/{chunk-54K2CZ2F.js → chunk-SO3YUCL6.js} +4 -4
  38. package/dist/{chunk-54K2CZ2F.js.map → chunk-SO3YUCL6.js.map} +1 -1
  39. package/dist/{chunk-DPXOPLQP.mjs → chunk-T6G2F2BK.mjs} +220 -17
  40. package/dist/chunk-T6G2F2BK.mjs.map +1 -0
  41. package/dist/{chunk-G2UIQSNJ.mjs → chunk-TMV7TL7O.mjs} +4 -4
  42. package/dist/{chunk-BD6ARGGI.js → chunk-TNTCLVUR.js} +15 -15
  43. package/dist/{chunk-BD6ARGGI.js.map → chunk-TNTCLVUR.js.map} +1 -1
  44. package/dist/{chunk-QIEF7HIL.mjs → chunk-VNUT2D27.mjs} +2 -2
  45. package/dist/{chunk-KTGKW72G.mjs → chunk-W4ML6D2X.mjs} +2 -2
  46. package/dist/{chunk-MQ7TXALH.mjs → chunk-YMCL3JXZ.mjs} +14 -8
  47. package/dist/chunk-YMCL3JXZ.mjs.map +1 -0
  48. package/dist/{chunk-QGVVF77L.js → chunk-YSE2Z4RB.js} +11 -11
  49. package/dist/{chunk-QGVVF77L.js.map → chunk-YSE2Z4RB.js.map} +1 -1
  50. package/dist/{chunk-A3RB47X4.mjs → chunk-YTDGYI62.mjs} +3 -3
  51. package/dist/client/JsonApiClient.d.ts +5 -0
  52. package/dist/client/JsonApiClient.d.ts.map +1 -1
  53. package/dist/client/index.js +8 -8
  54. package/dist/client/index.mjs +7 -7
  55. package/dist/client/request.d.ts +5 -0
  56. package/dist/client/request.d.ts.map +1 -1
  57. package/dist/components/forms/EditorSheet.d.ts +6 -1
  58. package/dist/components/forms/EditorSheet.d.ts.map +1 -1
  59. package/dist/components/index.js +8 -8
  60. package/dist/components/index.mjs +7 -7
  61. package/dist/contexts/index.js +8 -8
  62. package/dist/contexts/index.mjs +7 -7
  63. package/dist/core/abstracts/AbstractService.d.ts +5 -0
  64. package/dist/core/abstracts/AbstractService.d.ts.map +1 -1
  65. package/dist/core/abstracts/ClientAbstractService.d.ts +5 -0
  66. package/dist/core/abstracts/ClientAbstractService.d.ts.map +1 -1
  67. package/dist/core/index.d.ts +2 -0
  68. package/dist/core/index.d.ts.map +1 -1
  69. package/dist/core/index.js +24 -6
  70. package/dist/core/index.js.map +1 -1
  71. package/dist/core/index.mjs +23 -5
  72. package/dist/core/registry/ModuleRegistry.d.ts +3 -0
  73. package/dist/core/registry/ModuleRegistry.d.ts.map +1 -1
  74. package/dist/email-automations/index.js +121 -121
  75. package/dist/email-automations/index.mjs +7 -7
  76. package/dist/features/analytics/index.js +139 -139
  77. package/dist/features/analytics/index.mjs +7 -7
  78. package/dist/features/analytics/server.js +9 -9
  79. package/dist/features/analytics/server.mjs +7 -7
  80. package/dist/features/blog/index.js +154 -154
  81. package/dist/features/blog/index.mjs +7 -7
  82. package/dist/features/blog/server.js +27 -27
  83. package/dist/features/blog/server.mjs +6 -6
  84. package/dist/features/discord-connection/data/discord-connect-confirmation.d.ts +11 -0
  85. package/dist/features/discord-connection/data/discord-connect-confirmation.d.ts.map +1 -0
  86. package/dist/features/discord-connection/data/discord-connect-confirmation.interface.d.ts +14 -0
  87. package/dist/features/discord-connection/data/discord-connect-confirmation.interface.d.ts.map +1 -0
  88. package/dist/features/discord-connection/data/discord-connect-confirmation.service.d.ts +10 -0
  89. package/dist/features/discord-connection/data/discord-connect-confirmation.service.d.ts.map +1 -0
  90. package/dist/features/discord-connection/data/discord-connect-intent.d.ts +11 -0
  91. package/dist/features/discord-connection/data/discord-connect-intent.d.ts.map +1 -0
  92. package/dist/features/discord-connection/data/discord-connect-intent.interface.d.ts +15 -0
  93. package/dist/features/discord-connection/data/discord-connect-intent.interface.d.ts.map +1 -0
  94. package/dist/features/discord-connection/data/discord-connect-intent.service.d.ts +11 -0
  95. package/dist/features/discord-connection/data/discord-connect-intent.service.d.ts.map +1 -0
  96. package/dist/features/discord-connection/data/discord-connection.d.ts +14 -0
  97. package/dist/features/discord-connection/data/discord-connection.d.ts.map +1 -0
  98. package/dist/features/discord-connection/data/discord-connection.interface.d.ts +10 -0
  99. package/dist/features/discord-connection/data/discord-connection.interface.d.ts.map +1 -0
  100. package/dist/features/discord-connection/data/discord-connection.service.d.ts +12 -0
  101. package/dist/features/discord-connection/data/discord-connection.service.d.ts.map +1 -0
  102. package/dist/features/discord-connection/data/index.d.ts +10 -0
  103. package/dist/features/discord-connection/data/index.d.ts.map +1 -0
  104. package/dist/features/discord-connection/discord-connection.module.d.ts +5 -0
  105. package/dist/features/discord-connection/discord-connection.module.d.ts.map +1 -0
  106. package/dist/features/discord-connection/index.d.ts +3 -0
  107. package/dist/features/discord-connection/index.d.ts.map +1 -0
  108. package/dist/features/help/index.js +41 -41
  109. package/dist/features/help/index.mjs +7 -7
  110. package/dist/features/tokenusage/index.js +130 -130
  111. package/dist/features/tokenusage/index.mjs +7 -7
  112. package/dist/index.d.ts +1 -1
  113. package/dist/index.d.ts.map +1 -1
  114. package/dist/index.js +27 -7
  115. package/dist/index.js.map +1 -1
  116. package/dist/index.mjs +26 -6
  117. package/dist/local-transport-MJPOKPTU.js +15 -0
  118. package/dist/{local-transport-4YDJ6FQG.js.map → local-transport-MJPOKPTU.js.map} +1 -1
  119. package/dist/{local-transport-C7YTA4I7.mjs → local-transport-RVD4FZGA.mjs} +5 -5
  120. package/dist/offline/index.js +51 -51
  121. package/dist/offline/index.mjs +6 -6
  122. package/dist/{request-66FGJIHB.mjs → request-4AWGPIGH.mjs} +2 -2
  123. package/dist/{request-6W6UGKJV.js → request-H5FZBZA2.js} +3 -3
  124. package/dist/{request-6W6UGKJV.js.map → request-H5FZBZA2.js.map} +1 -1
  125. package/dist/server/index.js +8 -8
  126. package/dist/server/index.mjs +7 -7
  127. package/dist/unified/JsonApiRequest.d.ts +5 -0
  128. package/dist/unified/JsonApiRequest.d.ts.map +1 -1
  129. package/dist/write-through-7I3LA2WN.mjs +15 -0
  130. package/dist/write-through-HE2QSOVI.js +15 -0
  131. package/dist/{write-through-BAPS24GL.js.map → write-through-HE2QSOVI.js.map} +1 -1
  132. package/package.json +1 -1
  133. package/src/client/JsonApiClient.ts +10 -0
  134. package/src/client/__tests__/request.credentials.spec.ts +103 -0
  135. package/src/client/request.ts +9 -0
  136. package/src/components/forms/EditorSheet.tsx +8 -0
  137. package/src/components/forms/__tests__/EditorSheet.spec.tsx +30 -0
  138. package/src/core/abstracts/AbstractService.ts +10 -0
  139. package/src/core/abstracts/ClientAbstractService.ts +10 -0
  140. package/src/core/index.ts +3 -0
  141. package/src/core/registry/ModuleRegistry.ts +4 -0
  142. package/src/features/discord-connection/data/__tests__/DiscordConnection.spec.ts +114 -0
  143. package/src/features/discord-connection/data/discord-connect-confirmation.interface.ts +16 -0
  144. package/src/features/discord-connection/data/discord-connect-confirmation.service.ts +21 -0
  145. package/src/features/discord-connection/data/discord-connect-confirmation.ts +46 -0
  146. package/src/features/discord-connection/data/discord-connect-intent.interface.ts +16 -0
  147. package/src/features/discord-connection/data/discord-connect-intent.service.ts +20 -0
  148. package/src/features/discord-connection/data/discord-connect-intent.ts +42 -0
  149. package/src/features/discord-connection/data/discord-connection.interface.ts +10 -0
  150. package/src/features/discord-connection/data/discord-connection.service.ts +17 -0
  151. package/src/features/discord-connection/data/discord-connection.ts +41 -0
  152. package/src/features/discord-connection/data/index.ts +9 -0
  153. package/src/features/discord-connection/discord-connection.module.ts +28 -0
  154. package/src/features/discord-connection/index.ts +2 -0
  155. package/src/index.ts +1 -1
  156. package/src/unified/JsonApiRequest.ts +14 -0
  157. package/dist/JsonApiRequest-G4J2WTSU.js +0 -26
  158. package/dist/chunk-AUD6ZLBB.mjs.map +0 -1
  159. package/dist/chunk-EFQIMPCJ.mjs.map +0 -1
  160. package/dist/chunk-FXRRQ7Q6.js.map +0 -1
  161. package/dist/chunk-GM4VZTWL.js.map +0 -1
  162. package/dist/chunk-JSHLBRFV.mjs.map +0 -1
  163. package/dist/chunk-KV4N7DEG.js.map +0 -1
  164. package/dist/chunk-M3N7LPHX.mjs.map +0 -1
  165. package/dist/chunk-MQ7TXALH.mjs.map +0 -1
  166. package/dist/chunk-WCEYT3GG.js.map +0 -1
  167. package/dist/chunk-ZB6OYIMB.js.map +0 -1
  168. package/dist/local-transport-4YDJ6FQG.js +0 -15
  169. package/dist/write-through-BAPS24GL.js +0 -15
  170. package/dist/write-through-IWQKXYHE.mjs +0 -15
  171. /package/dist/{BlockNoteEditor-2XSIQCEB.mjs.map → BlockNoteEditor-ENDOVTAW.mjs.map} +0 -0
  172. /package/dist/{BlockNoteViewer-2UDFTXRS.mjs.map → BlockNoteViewer-2TJZ6JET.mjs.map} +0 -0
  173. /package/dist/{JsonApiRequest-IKKHWCPB.mjs.map → JsonApiRequest-ADLBJ5RX.mjs.map} +0 -0
  174. /package/dist/{chunk-4RA5PRXX.mjs.map → chunk-7OIWOPM5.mjs.map} +0 -0
  175. /package/dist/{chunk-G2UIQSNJ.mjs.map → chunk-TMV7TL7O.mjs.map} +0 -0
  176. /package/dist/{chunk-QIEF7HIL.mjs.map → chunk-VNUT2D27.mjs.map} +0 -0
  177. /package/dist/{chunk-KTGKW72G.mjs.map → chunk-W4ML6D2X.mjs.map} +0 -0
  178. /package/dist/{chunk-A3RB47X4.mjs.map → chunk-YTDGYI62.mjs.map} +0 -0
  179. /package/dist/{local-transport-C7YTA4I7.mjs.map → local-transport-RVD4FZGA.mjs.map} +0 -0
  180. /package/dist/{request-66FGJIHB.mjs.map → request-4AWGPIGH.mjs.map} +0 -0
  181. /package/dist/{write-through-IWQKXYHE.mjs.map → write-through-7I3LA2WN.mjs.map} +0 -0
@@ -0,0 +1,42 @@
1
+ import { AbstractApiData, JsonApiHydratedDataInterface, Modules } from "../../../core";
2
+ import { DiscordConnectIntentInput, DiscordConnectIntentInterface } from "./discord-connect-intent.interface";
3
+
4
+ export class DiscordConnectIntent extends AbstractApiData implements DiscordConnectIntentInterface {
5
+ private _returnPath?: string;
6
+ private _authorizeUrl?: string;
7
+
8
+ get returnPath(): string {
9
+ return this._returnPath ?? "/";
10
+ }
11
+
12
+ get authorizeUrl(): string | undefined {
13
+ return this._authorizeUrl;
14
+ }
15
+
16
+ rehydrate(data: JsonApiHydratedDataInterface): this {
17
+ super.rehydrate(data);
18
+
19
+ const attributes = data.jsonApi.attributes ?? {};
20
+
21
+ this._returnPath = attributes.returnPath;
22
+ this._authorizeUrl = attributes.authorizeUrl ?? undefined;
23
+
24
+ return this;
25
+ }
26
+
27
+ createJsonApi(data: DiscordConnectIntentInput) {
28
+ const response: any = {
29
+ data: {
30
+ type: Modules.DiscordConnectIntent.name,
31
+ id: data.id,
32
+ attributes: {
33
+ returnPath: data.returnPath,
34
+ },
35
+ relationships: {},
36
+ },
37
+ included: [],
38
+ };
39
+
40
+ return response;
41
+ }
42
+ }
@@ -0,0 +1,10 @@
1
+ import { ApiDataInterface } from "../../../core";
2
+
3
+ /**
4
+ * Whether the signed-in user has a Discord account attached. Not a stored entity:
5
+ * the API builds it for one user; its id is that user's id.
6
+ */
7
+ export interface DiscordConnectionInterface extends ApiDataInterface {
8
+ get connected(): boolean;
9
+ get discordName(): string | undefined;
10
+ }
@@ -0,0 +1,17 @@
1
+ import { AbstractService, EndpointCreator, HttpMethod, Modules } from "../../../core";
2
+ import { DiscordConnectionInterface } from "./discord-connection.interface";
3
+
4
+ export class DiscordConnectionService extends AbstractService {
5
+ /**
6
+ * GET whether the user has Discord attached. `params.id` must be the signed-in
7
+ * user's id; any other id answers 404.
8
+ */
9
+ static async findById(params: { id: string }): Promise<DiscordConnectionInterface> {
10
+ return this.callApi<DiscordConnectionInterface>({
11
+ type: Modules.DiscordConnection,
12
+ method: HttpMethod.GET,
13
+ endpoint: new EndpointCreator({ endpoint: Modules.DiscordConnection, id: params.id }).generate(),
14
+ suppressGlobalError: true,
15
+ });
16
+ }
17
+ }
@@ -0,0 +1,41 @@
1
+ import { AbstractApiData, JsonApiHydratedDataInterface, Modules } from "../../../core";
2
+ import { DiscordConnectionInterface } from "./discord-connection.interface";
3
+
4
+ export class DiscordConnection extends AbstractApiData implements DiscordConnectionInterface {
5
+ private _connected: boolean = false;
6
+ private _discordName?: string;
7
+
8
+ get connected(): boolean {
9
+ return this._connected;
10
+ }
11
+
12
+ get discordName(): string | undefined {
13
+ return this._discordName;
14
+ }
15
+
16
+ rehydrate(data: JsonApiHydratedDataInterface): this {
17
+ super.rehydrate(data);
18
+
19
+ const attributes = data.jsonApi.attributes ?? {};
20
+
21
+ this._connected = attributes.connected === true;
22
+ this._discordName = attributes.discordName ?? undefined;
23
+
24
+ return this;
25
+ }
26
+
27
+ /** Read-only resource: the body only identifies the user. */
28
+ createJsonApi(data: { id: string }) {
29
+ const response: any = {
30
+ data: {
31
+ type: Modules.DiscordConnection.name,
32
+ id: data.id,
33
+ attributes: {},
34
+ relationships: {},
35
+ },
36
+ included: [],
37
+ };
38
+
39
+ return response;
40
+ }
41
+ }
@@ -0,0 +1,9 @@
1
+ export * from "./discord-connection.interface";
2
+ export * from "./discord-connection";
3
+ export * from "./discord-connection.service";
4
+ export * from "./discord-connect-intent.interface";
5
+ export * from "./discord-connect-intent";
6
+ export * from "./discord-connect-intent.service";
7
+ export * from "./discord-connect-confirmation.interface";
8
+ export * from "./discord-connect-confirmation";
9
+ export * from "./discord-connect-confirmation.service";
@@ -0,0 +1,28 @@
1
+ import { ModuleFactory } from "../../permissions";
2
+ import { DiscordConnectConfirmation } from "./data/discord-connect-confirmation";
3
+ import { DiscordConnectIntent } from "./data/discord-connect-intent";
4
+ import { DiscordConnection } from "./data/discord-connection";
5
+
6
+ // Bootstrapper key: `DiscordConnection: DiscordConnectionModule(moduleFactory)`.
7
+ export const DiscordConnectionModule = (factory: ModuleFactory) =>
8
+ factory({
9
+ name: "discord-connections",
10
+ pageUrl: "/settings",
11
+ model: DiscordConnection,
12
+ });
13
+
14
+ // Bootstrapper key: `DiscordConnectIntent: DiscordConnectIntentModule(moduleFactory)`.
15
+ export const DiscordConnectIntentModule = (factory: ModuleFactory) =>
16
+ factory({
17
+ name: "discord-connect-intents",
18
+ pageUrl: "/settings",
19
+ model: DiscordConnectIntent,
20
+ });
21
+
22
+ // Bootstrapper key: `DiscordConnectConfirmation: DiscordConnectConfirmationModule(moduleFactory)`.
23
+ export const DiscordConnectConfirmationModule = (factory: ModuleFactory) =>
24
+ factory({
25
+ name: "discord-connect-confirmations",
26
+ pageUrl: "/settings",
27
+ model: DiscordConnectConfirmation,
28
+ });
@@ -0,0 +1,2 @@
1
+ export * from "./discord-connection.module";
2
+ export * from "./data";
package/src/index.ts CHANGED
@@ -23,7 +23,7 @@ export { configureI18n } from "./i18n";
23
23
  export type { I18nConfig } from "./i18n";
24
24
 
25
25
  // Login configuration (multi-provider auth)
26
- export { configureLogin } from "./login";
26
+ export { configureLogin, isDiscordAuthEnabled } from "./login";
27
27
  export type { LoginConfig } from "./login";
28
28
 
29
29
  // Roles configuration
@@ -17,6 +17,7 @@ type DirectFetchFn = (params: {
17
17
  companyId?: string;
18
18
  language: string;
19
19
  additionalHeaders?: Record<string, string>;
20
+ credentials?: RequestCredentials;
20
21
  }) => Promise<ApiData>;
21
22
 
22
23
  type ServerRequestFn = (params: {
@@ -95,6 +96,8 @@ async function makeRequest(params: {
95
96
  companyId?: string;
96
97
  language: string;
97
98
  additionalHeaders?: Record<string, string>;
99
+ /** Client-side only: forwarded to the browser `fetch`. Ignored on the server. */
100
+ credentials?: RequestCredentials;
98
101
  }): Promise<ApiData> {
99
102
  if (typeof window !== "undefined") {
100
103
  // Client-side: use direct fetch
@@ -111,6 +114,7 @@ async function makeRequest(params: {
111
114
  companyId: params.companyId,
112
115
  language: params.language,
113
116
  additionalHeaders: params.additionalHeaders,
117
+ credentials: params.credentials,
114
118
  });
115
119
  } else {
116
120
  // Server-side: use server request with caching
@@ -188,6 +192,7 @@ export async function JsonApiGet(params: {
188
192
  language: string;
189
193
  token?: string;
190
194
  baseUrl?: string;
195
+ credentials?: RequestCredentials;
191
196
  }): Promise<ApiResponseInterface> {
192
197
  runBootstrapper();
193
198
  // A cached server GET never sends the token, so it must not read the cookie either:
@@ -203,6 +208,7 @@ export async function JsonApiGet(params: {
203
208
  companyId: params.companyId,
204
209
  language: params.language,
205
210
  additionalHeaders: _staticConfig?.additionalHeaders,
211
+ credentials: params.credentials,
206
212
  });
207
213
 
208
214
  return translateResponse({
@@ -233,6 +239,7 @@ export async function JsonApiPost(params: {
233
239
  responseType?: ApiRequestDataTypeInterface;
234
240
  token?: string;
235
241
  baseUrl?: string;
242
+ credentials?: RequestCredentials;
236
243
  }): Promise<ApiResponseInterface> {
237
244
  runBootstrapper();
238
245
  const token = params.token ?? (await getToken());
@@ -253,6 +260,7 @@ export async function JsonApiPost(params: {
253
260
  companyId: params.companyId,
254
261
  language: params.language,
255
262
  additionalHeaders: _staticConfig?.additionalHeaders,
263
+ credentials: params.credentials,
256
264
  });
257
265
 
258
266
  return translateResponse({
@@ -273,6 +281,7 @@ export async function JsonApiPut(params: {
273
281
  responseType?: ApiRequestDataTypeInterface;
274
282
  token?: string;
275
283
  baseUrl?: string;
284
+ credentials?: RequestCredentials;
276
285
  }): Promise<ApiResponseInterface> {
277
286
  runBootstrapper();
278
287
  const token = params.token ?? (await getToken());
@@ -293,6 +302,7 @@ export async function JsonApiPut(params: {
293
302
  companyId: params.companyId,
294
303
  language: params.language,
295
304
  additionalHeaders: _staticConfig?.additionalHeaders,
305
+ credentials: params.credentials,
296
306
  });
297
307
 
298
308
  return translateResponse({
@@ -314,6 +324,7 @@ export async function JsonApiPatch(params: {
314
324
  language: string;
315
325
  token?: string;
316
326
  baseUrl?: string;
327
+ credentials?: RequestCredentials;
317
328
  }): Promise<ApiResponseInterface> {
318
329
  runBootstrapper();
319
330
  const token = params.token ?? (await getToken());
@@ -334,6 +345,7 @@ export async function JsonApiPatch(params: {
334
345
  companyId: params.companyId,
335
346
  language: params.language,
336
347
  additionalHeaders: _staticConfig?.additionalHeaders,
348
+ credentials: params.credentials,
337
349
  });
338
350
 
339
351
  return translateResponse({
@@ -352,6 +364,7 @@ export async function JsonApiDelete(params: {
352
364
  responseType?: ApiRequestDataTypeInterface;
353
365
  token?: string;
354
366
  baseUrl?: string;
367
+ credentials?: RequestCredentials;
355
368
  }): Promise<ApiResponseInterface> {
356
369
  runBootstrapper();
357
370
  const token = params.token ?? (await getToken());
@@ -363,6 +376,7 @@ export async function JsonApiDelete(params: {
363
376
  companyId: params.companyId,
364
377
  language: params.language,
365
378
  additionalHeaders: _staticConfig?.additionalHeaders,
379
+ credentials: params.credentials,
366
380
  });
367
381
 
368
382
  return translateResponse({
@@ -1,26 +0,0 @@
1
- "use strict";Object.defineProperty(exports, "__esModule", {value: true});
2
-
3
-
4
-
5
-
6
-
7
-
8
-
9
-
10
-
11
-
12
- var _chunkGM4VZTWLjs = require('./chunk-GM4VZTWL.js');
13
- require('./chunk-7QVYU63E.js');
14
-
15
-
16
-
17
-
18
-
19
-
20
-
21
-
22
-
23
-
24
-
25
- exports.JsonApiDelete = _chunkGM4VZTWLjs.JsonApiDelete; exports.JsonApiGet = _chunkGM4VZTWLjs.JsonApiGet; exports.JsonApiPatch = _chunkGM4VZTWLjs.JsonApiPatch; exports.JsonApiPost = _chunkGM4VZTWLjs.JsonApiPost; exports.JsonApiPut = _chunkGM4VZTWLjs.JsonApiPut; exports.buildUrl = _chunkGM4VZTWLjs.buildUrl; exports.configureJsonApi = _chunkGM4VZTWLjs.configureJsonApi; exports.getApiUrl = _chunkGM4VZTWLjs.getApiUrl; exports.getAppUrl = _chunkGM4VZTWLjs.getAppUrl; exports.getTrackablePages = _chunkGM4VZTWLjs.getTrackablePages;
26
- //# sourceMappingURL=JsonApiRequest-G4J2WTSU.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/features/user/data/user.storage.ts","../src/client/JsonApiClient.ts"],"sourcesContent":["/**\n * localStorage key backing the `CurrentUserProvider` atom.\n *\n * Owned by this library, not by the apps that consume it: `<Logout />` clears\n * it on every sign-out. Kept in its own module so both the provider that writes\n * it and the component that clears it can reference the same constant without\n * importing each other.\n */\nexport const CURRENT_USER_STORAGE_KEY = \"user\";\n","\"use client\";\n\nimport { ENV } from \"../core/env\";\nimport { JsonApiDataFactory } from \"../core/factories/JsonApiDataFactory\";\nimport { ApiRequestDataTypeInterface } from \"../core/interfaces/ApiRequestDataTypeInterface\";\nimport { ApiResponseInterface } from \"../core/interfaces/ApiResponseInterface\";\nimport { setBootstrapper } from \"../core/registry/bootstrapStore\";\nimport { translateResponse } from \"../core/utils/translateResponse\";\nimport { ModuleWithPermissions } from \"../permissions/types\";\nimport { directFetch } from \"./request\";\nimport { getClientToken } from \"./token\";\n\n// Config storage for client contexts\nlet _clientConfig: {\n apiUrl: string;\n appUrl?: string;\n trackablePages?: ModuleWithPermissions[];\n bootstrapper?: () => void;\n additionalHeaders?: Record<string, string>;\n} | null = null;\n\n/**\n * Configure the JSON:API client for browser contexts.\n * Call this in your client-side initialization or use JsonApiProvider.\n */\nexport function configureClientJsonApi(config: {\n apiUrl: string;\n appUrl?: string;\n trackablePages?: ModuleWithPermissions[];\n bootstrapper?: () => void;\n additionalHeaders?: Record<string, string>;\n}): void {\n _clientConfig = config;\n if (config.bootstrapper) {\n setBootstrapper(config.bootstrapper);\n config.bootstrapper();\n }\n}\n\nexport function getClientApiUrl(): string {\n if (_clientConfig?.apiUrl) {\n return _clientConfig.apiUrl;\n }\n const envUrl = ENV.API_URL;\n if (!envUrl) {\n throw new Error(\n \"API URL not configured. Use configureClientJsonApi() or set NEXT_PUBLIC_API_URL environment variable.\",\n );\n }\n return envUrl;\n}\n\nexport function getClientAppUrl(): string {\n if (_clientConfig?.appUrl) {\n return _clientConfig.appUrl;\n }\n const envUrl = ENV.APP_URL;\n if (!envUrl) {\n throw new Error(\n \"App URL not configured. Use configureClientJsonApi({ appUrl }) or set NEXT_PUBLIC_ADDRESS environment variable.\",\n );\n }\n return envUrl.trim().replace(/\\/+$/, \"\");\n}\n\nexport function getClientTrackablePages(): ModuleWithPermissions[] {\n return _clientConfig?.trackablePages ?? [];\n}\n\nfunction runClientBootstrapper(): void {\n if (_clientConfig?.bootstrapper) {\n _clientConfig.bootstrapper();\n }\n}\n\n/**\n * Resolve the final request URL for an endpoint (client-side variant of `buildUrl`\n * in `unified/JsonApiRequest.ts` — kept in lockstep with it).\n *\n * - `endpoint` starting with \"http\" is always passed through unchanged (existing behaviour).\n * - Otherwise, an explicit `baseUrl` (per-call override) takes precedence over the global\n * `getClientApiUrl()` resolution. Omitting `baseUrl` preserves today's behaviour exactly.\n */\nexport function buildClientUrl(endpoint: string, baseUrl?: string): string {\n if (endpoint.startsWith(\"http\")) return endpoint;\n const apiUrl = baseUrl ?? getClientApiUrl();\n return `${apiUrl}${endpoint}`;\n}\n\nexport async function ClientJsonApiGet(params: {\n classKey: ApiRequestDataTypeInterface;\n endpoint: string;\n companyId?: string;\n language: string;\n baseUrl?: string;\n}): Promise<ApiResponseInterface> {\n runClientBootstrapper();\n const token = await getClientToken();\n\n const apiResponse = await directFetch({\n method: \"GET\",\n url: buildClientUrl(params.endpoint, params.baseUrl),\n token,\n companyId: params.companyId,\n language: params.language,\n additionalHeaders: _clientConfig?.additionalHeaders,\n });\n\n return translateResponse({\n classKey: params.classKey,\n apiResponse,\n companyId: params.companyId,\n language: params.language,\n paginationHandler: async (endpoint: string) =>\n ClientJsonApiGet({\n classKey: params.classKey,\n endpoint,\n companyId: params.companyId,\n language: params.language,\n baseUrl: params.baseUrl,\n }),\n });\n}\n\nexport async function ClientJsonApiPost(params: {\n classKey: ApiRequestDataTypeInterface;\n endpoint: string;\n companyId?: string;\n body?: any;\n overridesJsonApiCreation?: boolean;\n files?: { [key: string]: File | Blob } | File | Blob;\n language: string;\n responseType?: ApiRequestDataTypeInterface;\n baseUrl?: string;\n}): Promise<ApiResponseInterface> {\n runClientBootstrapper();\n const token = await getClientToken();\n\n let body = params.body;\n if (!body) {\n body = {};\n } else if (params.overridesJsonApiCreation !== true) {\n body = JsonApiDataFactory.create(params.classKey, body);\n }\n\n const apiResponse = await directFetch({\n method: \"POST\",\n url: buildClientUrl(params.endpoint, params.baseUrl),\n token,\n body,\n files: params.files,\n companyId: params.companyId,\n language: params.language,\n additionalHeaders: _clientConfig?.additionalHeaders,\n });\n\n return translateResponse({\n classKey: params.responseType ?? params.classKey,\n apiResponse,\n companyId: params.companyId,\n language: params.language,\n });\n}\n\nexport async function ClientJsonApiPut(params: {\n classKey: ApiRequestDataTypeInterface;\n endpoint: string;\n companyId?: string;\n body?: any;\n files?: { [key: string]: File | Blob } | File | Blob;\n language: string;\n responseType?: ApiRequestDataTypeInterface;\n baseUrl?: string;\n}): Promise<ApiResponseInterface> {\n runClientBootstrapper();\n const token = await getClientToken();\n\n let body = params.body;\n if (!body) {\n body = {};\n } else {\n body = JsonApiDataFactory.create(params.classKey, body);\n }\n\n const apiResponse = await directFetch({\n method: \"PUT\",\n url: buildClientUrl(params.endpoint, params.baseUrl),\n token,\n body,\n files: params.files,\n companyId: params.companyId,\n language: params.language,\n additionalHeaders: _clientConfig?.additionalHeaders,\n });\n\n return translateResponse({\n classKey: params.responseType ?? params.classKey,\n apiResponse,\n companyId: params.companyId,\n language: params.language,\n });\n}\n\nexport async function ClientJsonApiPatch(params: {\n classKey: ApiRequestDataTypeInterface;\n endpoint: string;\n companyId?: string;\n body?: any;\n files?: { [key: string]: File | Blob } | File | Blob;\n overridesJsonApiCreation?: boolean;\n responseType?: ApiRequestDataTypeInterface;\n language: string;\n baseUrl?: string;\n}): Promise<ApiResponseInterface> {\n runClientBootstrapper();\n const token = await getClientToken();\n\n let body = params.body;\n if (!body) {\n body = {};\n } else if (params.overridesJsonApiCreation !== true) {\n body = JsonApiDataFactory.create(params.classKey, body);\n }\n\n const apiResponse = await directFetch({\n method: \"PATCH\",\n url: buildClientUrl(params.endpoint, params.baseUrl),\n token,\n body,\n files: params.files,\n companyId: params.companyId,\n language: params.language,\n additionalHeaders: _clientConfig?.additionalHeaders,\n });\n\n return translateResponse({\n classKey: params.responseType ?? params.classKey,\n apiResponse,\n companyId: params.companyId,\n language: params.language,\n });\n}\n\nexport async function ClientJsonApiDelete(params: {\n classKey: ApiRequestDataTypeInterface;\n endpoint: string;\n companyId?: string;\n language: string;\n responseType?: ApiRequestDataTypeInterface;\n baseUrl?: string;\n}): Promise<ApiResponseInterface> {\n runClientBootstrapper();\n const token = await getClientToken();\n\n const apiResponse = await directFetch({\n method: \"DELETE\",\n url: buildClientUrl(params.endpoint, params.baseUrl),\n token,\n companyId: params.companyId,\n language: params.language,\n additionalHeaders: _clientConfig?.additionalHeaders,\n });\n\n return translateResponse({\n classKey: params.responseType ?? params.classKey,\n apiResponse,\n companyId: params.companyId,\n language: params.language,\n });\n}\n"],"mappings":"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","names":[]}