@intlayer/api 9.7.0 → 9.7.2

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 (154) hide show
  1. package/dist/cjs/cms/createAuthManager.cjs +2 -3
  2. package/dist/cjs/cms/createIntlayerCMS.cjs +2 -3
  3. package/dist/cjs/cms/index.cjs +2 -2
  4. package/dist/cjs/distantDictionary/fetchDistantDictionaries.cjs +3 -4
  5. package/dist/cjs/distantDictionary/fetchDistantDictionary.cjs +3 -4
  6. package/dist/cjs/distantDictionary/index.cjs +2 -2
  7. package/dist/cjs/fetcher.cjs +2 -3
  8. package/dist/cjs/getIntlayerAPI/ai.cjs +38 -43
  9. package/dist/cjs/getIntlayerAPI/ai.cjs.map +1 -1
  10. package/dist/cjs/getIntlayerAPI/analytics.cjs +32 -4
  11. package/dist/cjs/getIntlayerAPI/analytics.cjs.map +1 -1
  12. package/dist/cjs/getIntlayerAPI/asset.cjs +3 -4
  13. package/dist/cjs/getIntlayerAPI/audit.cjs +3 -4
  14. package/dist/cjs/getIntlayerAPI/bitbucket.cjs +3 -4
  15. package/dist/cjs/getIntlayerAPI/codeberg.cjs +3 -4
  16. package/dist/cjs/getIntlayerAPI/dictionary.cjs +3 -4
  17. package/dist/cjs/getIntlayerAPI/editor.cjs +3 -4
  18. package/dist/cjs/getIntlayerAPI/environment.cjs +3 -4
  19. package/dist/cjs/getIntlayerAPI/forge.cjs +2 -3
  20. package/dist/cjs/getIntlayerAPI/gitee.cjs +3 -4
  21. package/dist/cjs/getIntlayerAPI/github.cjs +3 -4
  22. package/dist/cjs/getIntlayerAPI/gitlab.cjs +3 -4
  23. package/dist/cjs/getIntlayerAPI/index.cjs +25 -26
  24. package/dist/cjs/getIntlayerAPI/newsletter.cjs +3 -4
  25. package/dist/cjs/getIntlayerAPI/oAuth.cjs +2 -3
  26. package/dist/cjs/getIntlayerAPI/organization.cjs +3 -4
  27. package/dist/cjs/getIntlayerAPI/project.cjs +3 -4
  28. package/dist/cjs/getIntlayerAPI/readServerSentEvents.cjs +70 -0
  29. package/dist/cjs/getIntlayerAPI/readServerSentEvents.cjs.map +1 -0
  30. package/dist/cjs/getIntlayerAPI/reviewer.cjs +3 -4
  31. package/dist/cjs/getIntlayerAPI/search.cjs +3 -4
  32. package/dist/cjs/getIntlayerAPI/showcaseProject.cjs +3 -4
  33. package/dist/cjs/getIntlayerAPI/status.cjs +3 -4
  34. package/dist/cjs/getIntlayerAPI/stripe.cjs +3 -4
  35. package/dist/cjs/getIntlayerAPI/tag.cjs +3 -4
  36. package/dist/cjs/getIntlayerAPI/translate.cjs +3 -4
  37. package/dist/cjs/getIntlayerAPI/user.cjs +3 -4
  38. package/dist/cjs/index.cjs +33 -33
  39. package/dist/cjs/proxy.cjs +26 -27
  40. package/dist/cjs/public/createPublicClient.cjs +1 -2
  41. package/dist/cjs/public/index.cjs +1 -1
  42. package/dist/cjs/resolveInternalBackendUrl.cjs +1 -2
  43. package/dist/esm/cms/createAuthManager.mjs +1 -2
  44. package/dist/esm/cms/createIntlayerCMS.mjs +1 -2
  45. package/dist/esm/distantDictionary/fetchDistantDictionaries.mjs +1 -2
  46. package/dist/esm/distantDictionary/fetchDistantDictionary.mjs +1 -2
  47. package/dist/esm/fetcher.mjs +1 -2
  48. package/dist/esm/getIntlayerAPI/ai.mjs +37 -42
  49. package/dist/esm/getIntlayerAPI/ai.mjs.map +1 -1
  50. package/dist/esm/getIntlayerAPI/analytics.mjs +31 -3
  51. package/dist/esm/getIntlayerAPI/analytics.mjs.map +1 -1
  52. package/dist/esm/getIntlayerAPI/asset.mjs +2 -3
  53. package/dist/esm/getIntlayerAPI/audit.mjs +2 -3
  54. package/dist/esm/getIntlayerAPI/bitbucket.mjs +2 -3
  55. package/dist/esm/getIntlayerAPI/codeberg.mjs +1 -2
  56. package/dist/esm/getIntlayerAPI/dictionary.mjs +2 -3
  57. package/dist/esm/getIntlayerAPI/editor.mjs +2 -3
  58. package/dist/esm/getIntlayerAPI/environment.mjs +2 -3
  59. package/dist/esm/getIntlayerAPI/forge.mjs +1 -2
  60. package/dist/esm/getIntlayerAPI/gitee.mjs +1 -2
  61. package/dist/esm/getIntlayerAPI/github.mjs +2 -3
  62. package/dist/esm/getIntlayerAPI/gitlab.mjs +2 -3
  63. package/dist/esm/getIntlayerAPI/index.mjs +2 -3
  64. package/dist/esm/getIntlayerAPI/newsletter.mjs +2 -3
  65. package/dist/esm/getIntlayerAPI/oAuth.mjs +1 -2
  66. package/dist/esm/getIntlayerAPI/organization.mjs +2 -3
  67. package/dist/esm/getIntlayerAPI/project.mjs +2 -3
  68. package/dist/esm/getIntlayerAPI/readServerSentEvents.mjs +68 -0
  69. package/dist/esm/getIntlayerAPI/readServerSentEvents.mjs.map +1 -0
  70. package/dist/esm/getIntlayerAPI/reviewer.mjs +2 -3
  71. package/dist/esm/getIntlayerAPI/search.mjs +2 -3
  72. package/dist/esm/getIntlayerAPI/showcaseProject.mjs +2 -3
  73. package/dist/esm/getIntlayerAPI/status.mjs +2 -3
  74. package/dist/esm/getIntlayerAPI/stripe.mjs +2 -3
  75. package/dist/esm/getIntlayerAPI/tag.mjs +2 -3
  76. package/dist/esm/getIntlayerAPI/translate.mjs +2 -3
  77. package/dist/esm/getIntlayerAPI/user.mjs +2 -3
  78. package/dist/esm/index.mjs +7 -7
  79. package/dist/esm/proxy.mjs +2 -3
  80. package/dist/esm/public/createPublicClient.mjs +1 -2
  81. package/dist/esm/resolveInternalBackendUrl.mjs +1 -2
  82. package/dist/types/cms/createAuthManager.d.ts +1 -2
  83. package/dist/types/cms/createAuthManager.d.ts.map +1 -1
  84. package/dist/types/cms/createIntlayerCMS.d.ts +0 -2
  85. package/dist/types/cms/createIntlayerCMS.d.ts.map +1 -1
  86. package/dist/types/distantDictionary/fetchDistantDictionaries.d.ts +1 -3
  87. package/dist/types/distantDictionary/fetchDistantDictionaries.d.ts.map +1 -1
  88. package/dist/types/distantDictionary/fetchDistantDictionary.d.ts +1 -3
  89. package/dist/types/distantDictionary/fetchDistantDictionary.d.ts.map +1 -1
  90. package/dist/types/fetcher.d.ts +0 -2
  91. package/dist/types/fetcher.d.ts.map +1 -1
  92. package/dist/types/getIntlayerAPI/ai.d.ts +9 -5
  93. package/dist/types/getIntlayerAPI/ai.d.ts.map +1 -1
  94. package/dist/types/getIntlayerAPI/analytics.d.ts +7 -5
  95. package/dist/types/getIntlayerAPI/analytics.d.ts.map +1 -1
  96. package/dist/types/getIntlayerAPI/asset.d.ts +2 -4
  97. package/dist/types/getIntlayerAPI/asset.d.ts.map +1 -1
  98. package/dist/types/getIntlayerAPI/audit.d.ts +2 -4
  99. package/dist/types/getIntlayerAPI/audit.d.ts.map +1 -1
  100. package/dist/types/getIntlayerAPI/bitbucket.d.ts +2 -4
  101. package/dist/types/getIntlayerAPI/bitbucket.d.ts.map +1 -1
  102. package/dist/types/getIntlayerAPI/codeberg.d.ts +42 -6
  103. package/dist/types/getIntlayerAPI/codeberg.d.ts.map +1 -1
  104. package/dist/types/getIntlayerAPI/dictionary.d.ts +3 -5
  105. package/dist/types/getIntlayerAPI/dictionary.d.ts.map +1 -1
  106. package/dist/types/getIntlayerAPI/editor.d.ts +2 -4
  107. package/dist/types/getIntlayerAPI/editor.d.ts.map +1 -1
  108. package/dist/types/getIntlayerAPI/environment.d.ts +2 -4
  109. package/dist/types/getIntlayerAPI/environment.d.ts.map +1 -1
  110. package/dist/types/getIntlayerAPI/forge.d.ts +21 -4
  111. package/dist/types/getIntlayerAPI/forge.d.ts.map +1 -1
  112. package/dist/types/getIntlayerAPI/gitee.d.ts +42 -6
  113. package/dist/types/getIntlayerAPI/gitee.d.ts.map +1 -1
  114. package/dist/types/getIntlayerAPI/github.d.ts +2 -4
  115. package/dist/types/getIntlayerAPI/github.d.ts.map +1 -1
  116. package/dist/types/getIntlayerAPI/gitlab.d.ts +2 -4
  117. package/dist/types/getIntlayerAPI/gitlab.d.ts.map +1 -1
  118. package/dist/types/getIntlayerAPI/index.d.ts +2 -3
  119. package/dist/types/getIntlayerAPI/index.d.ts.map +1 -1
  120. package/dist/types/getIntlayerAPI/newsletter.d.ts +2 -4
  121. package/dist/types/getIntlayerAPI/newsletter.d.ts.map +1 -1
  122. package/dist/types/getIntlayerAPI/oAuth.d.ts +0 -2
  123. package/dist/types/getIntlayerAPI/oAuth.d.ts.map +1 -1
  124. package/dist/types/getIntlayerAPI/organization.d.ts +2 -4
  125. package/dist/types/getIntlayerAPI/organization.d.ts.map +1 -1
  126. package/dist/types/getIntlayerAPI/project.d.ts +3 -5
  127. package/dist/types/getIntlayerAPI/project.d.ts.map +1 -1
  128. package/dist/types/getIntlayerAPI/readServerSentEvents.d.ts +18 -0
  129. package/dist/types/getIntlayerAPI/readServerSentEvents.d.ts.map +1 -0
  130. package/dist/types/getIntlayerAPI/reviewer.d.ts +2 -4
  131. package/dist/types/getIntlayerAPI/reviewer.d.ts.map +1 -1
  132. package/dist/types/getIntlayerAPI/search.d.ts +2 -4
  133. package/dist/types/getIntlayerAPI/search.d.ts.map +1 -1
  134. package/dist/types/getIntlayerAPI/showcaseProject.d.ts +2 -4
  135. package/dist/types/getIntlayerAPI/showcaseProject.d.ts.map +1 -1
  136. package/dist/types/getIntlayerAPI/status.d.ts +2 -4
  137. package/dist/types/getIntlayerAPI/status.d.ts.map +1 -1
  138. package/dist/types/getIntlayerAPI/stripe.d.ts +2 -4
  139. package/dist/types/getIntlayerAPI/stripe.d.ts.map +1 -1
  140. package/dist/types/getIntlayerAPI/tag.d.ts +2 -4
  141. package/dist/types/getIntlayerAPI/tag.d.ts.map +1 -1
  142. package/dist/types/getIntlayerAPI/translate.d.ts +2 -4
  143. package/dist/types/getIntlayerAPI/translate.d.ts.map +1 -1
  144. package/dist/types/getIntlayerAPI/user.d.ts +2 -4
  145. package/dist/types/getIntlayerAPI/user.d.ts.map +1 -1
  146. package/dist/types/index.d.ts +5 -5
  147. package/dist/types/proxy.d.ts +0 -2
  148. package/dist/types/proxy.d.ts.map +1 -1
  149. package/dist/types/public/createPublicClient.d.ts +1 -3
  150. package/dist/types/public/createPublicClient.d.ts.map +1 -1
  151. package/dist/types/resolveInternalBackendUrl.d.ts +0 -2
  152. package/dist/types/resolveInternalBackendUrl.d.ts.map +1 -1
  153. package/dist/types/types.d.ts +2 -2
  154. package/package.json +110 -110
@@ -1,10 +1,10 @@
1
1
  Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
2
- const require_getIntlayerAPI_oAuth = require('../getIntlayerAPI/oAuth.cjs');
2
+ const require_getIntlayerAPI_oAuth = require("../getIntlayerAPI/oAuth.cjs");
3
3
  let _intlayer_config_built = require("@intlayer/config/built");
4
4
  let _intlayer_config_secrets = require("@intlayer/config/secrets");
5
5
  let defu = require("defu");
6
6
 
7
- //#region src/cms/createAuthManager.ts
7
+ // src/cms/createAuthManager.ts
8
8
  const ONE_MINUTE_MS = 6e4;
9
9
  /**
10
10
  * Process-wide token states, keyed by backend URL and credentials. Build
@@ -153,7 +153,6 @@ const createAuthManager = (intlayerConfig = { editor: _intlayer_config_built.edi
153
153
  };
154
154
  };
155
155
 
156
- //#endregion
157
156
  exports.clearAccessTokenCache = clearAccessTokenCache;
158
157
  exports.createAuthManager = createAuthManager;
159
158
  //# sourceMappingURL=createAuthManager.cjs.map
@@ -1,8 +1,8 @@
1
1
  Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
2
- const require_cms_createAuthManager = require('./createAuthManager.cjs');
2
+ const require_cms_createAuthManager = require("./createAuthManager.cjs");
3
3
  let _intlayer_config_built = require("@intlayer/config/built");
4
4
 
5
- //#region src/cms/createIntlayerCMS.ts
5
+ // src/cms/createIntlayerCMS.ts
6
6
  /**
7
7
  * Creates an Intlayer CMS authenticator handling authentication automatically
8
8
  * (OAuth2 `client_credentials`, or a CLI session token).
@@ -58,7 +58,6 @@ const createIntlayerCMS = (intlayerConfig = { editor: _intlayer_config_built.edi
58
58
  */
59
59
  const createEndpoint = (factory, options) => (cms = createIntlayerCMS()) => cms.bindSection(factory, options);
60
60
 
61
- //#endregion
62
61
  exports.createEndpoint = createEndpoint;
63
62
  exports.createIntlayerCMS = createIntlayerCMS;
64
63
  //# sourceMappingURL=createIntlayerCMS.cjs.map
@@ -1,6 +1,6 @@
1
1
  Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
2
- const require_cms_createAuthManager = require('./createAuthManager.cjs');
3
- const require_cms_createIntlayerCMS = require('./createIntlayerCMS.cjs');
2
+ const require_cms_createAuthManager = require("./createAuthManager.cjs");
3
+ const require_cms_createIntlayerCMS = require("./createIntlayerCMS.cjs");
4
4
 
5
5
  exports.clearAccessTokenCache = require_cms_createAuthManager.clearAccessTokenCache;
6
6
  exports.createAuthManager = require_cms_createAuthManager.createAuthManager;
@@ -1,8 +1,8 @@
1
1
  Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
2
- const require_cms_createIntlayerCMS = require('../cms/createIntlayerCMS.cjs');
3
- const require_getIntlayerAPI_dictionary = require('../getIntlayerAPI/dictionary.cjs');
2
+ const require_cms_createIntlayerCMS = require("../cms/createIntlayerCMS.cjs");
3
+ const require_getIntlayerAPI_dictionary = require("../getIntlayerAPI/dictionary.cjs");
4
4
 
5
- //#region src/distantDictionary/fetchDistantDictionaries.ts
5
+ // src/distantDictionary/fetchDistantDictionaries.ts
6
6
  /**
7
7
  * Fetch distant dictionary
8
8
  */
@@ -17,6 +17,5 @@ const fetchDistantDictionaries = async (intlayerConfig) => {
17
17
  }
18
18
  };
19
19
 
20
- //#endregion
21
20
  exports.fetchDistantDictionaries = fetchDistantDictionaries;
22
21
  //# sourceMappingURL=fetchDistantDictionaries.cjs.map
@@ -1,8 +1,8 @@
1
1
  Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
2
- const require_cms_createIntlayerCMS = require('../cms/createIntlayerCMS.cjs');
3
- const require_getIntlayerAPI_dictionary = require('../getIntlayerAPI/dictionary.cjs');
2
+ const require_cms_createIntlayerCMS = require("../cms/createIntlayerCMS.cjs");
3
+ const require_getIntlayerAPI_dictionary = require("../getIntlayerAPI/dictionary.cjs");
4
4
 
5
- //#region src/distantDictionary/fetchDistantDictionary.ts
5
+ // src/distantDictionary/fetchDistantDictionary.ts
6
6
  /**
7
7
  * Fetch distant dictionary
8
8
  */
@@ -19,6 +19,5 @@ const fetchDistantDictionary = async (dictionaryKey, intlayerConfig) => {
19
19
  }
20
20
  };
21
21
 
22
- //#endregion
23
22
  exports.fetchDistantDictionary = fetchDistantDictionary;
24
23
  //# sourceMappingURL=fetchDistantDictionary.cjs.map
@@ -1,6 +1,6 @@
1
1
  Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
2
- const require_distantDictionary_fetchDistantDictionaries = require('./fetchDistantDictionaries.cjs');
3
- const require_distantDictionary_fetchDistantDictionary = require('./fetchDistantDictionary.cjs');
2
+ const require_distantDictionary_fetchDistantDictionaries = require("./fetchDistantDictionaries.cjs");
3
+ const require_distantDictionary_fetchDistantDictionary = require("./fetchDistantDictionary.cjs");
4
4
 
5
5
  exports.fetchDistantDictionaries = require_distantDictionary_fetchDistantDictionaries.fetchDistantDictionaries;
6
6
  exports.fetchDistantDictionary = require_distantDictionary_fetchDistantDictionary.fetchDistantDictionary;
@@ -1,7 +1,7 @@
1
1
  Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
2
- const require_resolveInternalBackendUrl = require('./resolveInternalBackendUrl.cjs');
2
+ const require_resolveInternalBackendUrl = require("./resolveInternalBackendUrl.cjs");
3
3
 
4
- //#region src/fetcher.ts
4
+ // src/fetcher.ts
5
5
  /**
6
6
  * Error thrown when the backend answers with a non-ok response.
7
7
  *
@@ -145,7 +145,6 @@ const fetcher = async (url, ...options) => {
145
145
  return await response.json();
146
146
  };
147
147
 
148
- //#endregion
149
148
  exports.FetcherError = FetcherError;
150
149
  exports.fetcher = fetcher;
151
150
  exports.fetcherOptions = fetcherOptions;
@@ -1,11 +1,12 @@
1
1
  Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
2
- const require_fetcher = require('../fetcher.cjs');
3
- const require_cms_createIntlayerCMS = require('../cms/createIntlayerCMS.cjs');
2
+ const require_cms_createIntlayerCMS = require("../cms/createIntlayerCMS.cjs");
3
+ const require_fetcher = require("../fetcher.cjs");
4
+ const require_getIntlayerAPI_readServerSentEvents = require("./readServerSentEvents.cjs");
4
5
  let _intlayer_config_built = require("@intlayer/config/built");
5
6
  let _intlayer_backend_contract_defineRoute = require("@intlayer/backend-contract/defineRoute");
6
7
  let _intlayer_config_defaultValues = require("@intlayer/config/defaultValues");
7
8
 
8
- //#region src/getIntlayerAPI/ai.ts
9
+ // src/getIntlayerAPI/ai.ts
9
10
  /** Prefix of the routes, checked against the backend contract. */
10
11
  const aiGroup = { prefix: "/api/ai" };
11
12
  /**
@@ -56,6 +57,14 @@ const aiEndpoints = {
56
57
  getAIStats: {
57
58
  method: "GET",
58
59
  path: "/stats"
60
+ },
61
+ getAICredits: {
62
+ method: "GET",
63
+ path: "/credits"
64
+ },
65
+ getAICreditUsage: {
66
+ method: "GET",
67
+ path: "/credits/usage"
59
68
  }
60
69
  };
61
70
  const getAiAPI = (authAPIOptions = {}, intlayerConfig) => {
@@ -135,7 +144,7 @@ const getAiAPI = (authAPIOptions = {}, intlayerConfig) => {
135
144
  */
136
145
  const askDocQuestion = async (body, otherOptions = {}) => {
137
146
  if (!body) return;
138
- const { onMessage, onDone, ...rest } = body;
147
+ const { onMessage, onReasoning, onDone, ...rest } = body;
139
148
  const abortController = new AbortController();
140
149
  try {
141
150
  const response = await fetch((0, _intlayer_backend_contract_defineRoute.buildRouteURL)(backendURL, aiGroup, aiEndpoints.ask), {
@@ -167,24 +176,11 @@ const getAiAPI = (authAPIOptions = {}, intlayerConfig) => {
167
176
  }
168
177
  throw new Error(errorMessage);
169
178
  }
170
- const reader = response.body?.getReader();
171
- if (!reader) throw new Error("No reader available");
172
- const decoder = new TextDecoder();
173
- let buffer = "";
174
- while (true) {
175
- const { done, value } = await reader.read();
176
- if (done) break;
177
- buffer += decoder.decode(value, { stream: true });
178
- const lines = buffer.split("\n");
179
- buffer = lines.pop() ?? "";
180
- for (const line of lines) if (line.startsWith("data: ")) try {
181
- const data = JSON.parse(line.slice(6));
182
- if (data.chunk) onMessage?.(data.chunk);
183
- if (data.done && data.response) onDone?.(data.response);
184
- } catch (e) {
185
- console.error("Failed to parse SSE data:", e);
186
- }
187
- }
179
+ await require_getIntlayerAPI_readServerSentEvents.readServerSentEvents(response, (data) => {
180
+ if (data.reasoning) onReasoning?.(data.reasoning);
181
+ if (data.chunk) onMessage?.(data.chunk);
182
+ if (data.done && data.response) onDone?.(data.response);
183
+ });
188
184
  } catch (error) {
189
185
  console.error("Error in askDocQuestion:", error);
190
186
  throw error;
@@ -224,25 +220,11 @@ const getAiAPI = (authAPIOptions = {}, intlayerConfig) => {
224
220
  }
225
221
  throw new Error(errorMessage);
226
222
  }
227
- const reader = response.body?.getReader();
228
- if (!reader) throw new Error("No reader available");
229
- const decoder = new TextDecoder();
230
- let buffer = "";
231
- while (true) {
232
- const { done, value } = await reader.read();
233
- if (done) break;
234
- buffer += decoder.decode(value, { stream: true });
235
- const lines = buffer.split("\n");
236
- buffer = lines.pop() ?? "";
237
- for (const line of lines) if (line.startsWith("data: ")) try {
238
- const data = JSON.parse(line.slice(6));
239
- if (data.chunk) onMessage?.(data.chunk);
240
- if (data.action) onAction?.(data.action);
241
- if (data.done && data.response) onDone?.(data.response);
242
- } catch (e) {
243
- console.error("Failed to parse SSE data:", e);
244
- }
245
- }
223
+ await require_getIntlayerAPI_readServerSentEvents.readServerSentEvents(response, (data) => {
224
+ if (data.chunk) onMessage?.(data.chunk);
225
+ if (data.action) onAction?.(data.action);
226
+ if (data.done && data.response) onDone?.(data.response);
227
+ });
246
228
  } catch (error) {
247
229
  console.error("Error in chat:", error);
248
230
  throw error;
@@ -264,6 +246,18 @@ const getAiAPI = (authAPIOptions = {}, intlayerConfig) => {
264
246
  * project.
265
247
  */
266
248
  const getAIStats = async (otherOptions = {}) => await require_fetcher.fetcher((0, _intlayer_backend_contract_defineRoute.buildRouteURL)(backendURL, aiGroup, aiEndpoints.getAIStats), authAPIOptions, otherOptions, { method: aiEndpoints.getAIStats.method });
249
+ /**
250
+ * Retrieves the AI credit balance of the selected organization for the
251
+ * current monthly period.
252
+ */
253
+ const getAICredits = async (otherOptions = {}) => await require_fetcher.fetcher((0, _intlayer_backend_contract_defineRoute.buildRouteURL)(backendURL, aiGroup, aiEndpoints.getAICredits), authAPIOptions, otherOptions, { method: aiEndpoints.getAICredits.method });
254
+ /**
255
+ * Retrieves the day-by-day AI credit usage of the selected organization.
256
+ */
257
+ const getAICreditUsage = async (params, otherOptions = {}) => await require_fetcher.fetcher((0, _intlayer_backend_contract_defineRoute.buildRouteURL)(backendURL, aiGroup, aiEndpoints.getAICreditUsage), authAPIOptions, otherOptions, {
258
+ method: aiEndpoints.getAICreditUsage.method,
259
+ params
260
+ });
267
261
  return {
268
262
  customQuery,
269
263
  translateJSON,
@@ -275,7 +269,9 @@ const getAiAPI = (authAPIOptions = {}, intlayerConfig) => {
275
269
  chat,
276
270
  autocomplete,
277
271
  getDiscussions,
278
- getAIStats
272
+ getAIStats,
273
+ getAICredits,
274
+ getAICreditUsage
279
275
  };
280
276
  };
281
277
  /**
@@ -286,7 +282,6 @@ const getAiAPI = (authAPIOptions = {}, intlayerConfig) => {
286
282
  */
287
283
  const aiEndpoint = require_cms_createIntlayerCMS.createEndpoint(getAiAPI);
288
284
 
289
- //#endregion
290
285
  exports.aiEndpoint = aiEndpoint;
291
286
  exports.getAiAPI = getAiAPI;
292
287
  //# sourceMappingURL=ai.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"ai.cjs","names":["editor","BACKEND_URL","fetcher","buildRouteURL","createEndpoint"],"sources":["../../../src/getIntlayerAPI/ai.ts"],"sourcesContent":["import type {\n AIOptions,\n AIRoutes,\n AskDocQuestionResult,\n AuditContentDeclarationBody,\n AuditContentDeclarationFieldBody,\n AuditContentDeclarationFieldResult,\n AuditContentDeclarationMetadataBody,\n AuditContentDeclarationMetadataResult,\n AuditContentDeclarationResult,\n AuditTagBody,\n AuditTagResult,\n AutocompleteResponse,\n aiContract,\n ChatCompletionRequestMessage,\n ChatResult,\n CustomQueryBody,\n CustomQueryResult,\n GetAIStatsResult,\n GetDiscussionsParams,\n GetDiscussionsResult,\n TranslateJSONBody,\n TranslateJSONResult,\n} from '@intlayer/backend-contract/ai';\nimport type { RouteEndpoints } from '@intlayer/backend-contract/defineRoute';\nimport { buildRouteURL } from '@intlayer/backend-contract/defineRoute';\nimport { editor } from '@intlayer/config/built';\nimport { BACKEND_URL } from '@intlayer/config/defaultValues';\nimport type { IntlayerConfig } from '@intlayer/types/config';\nimport { createEndpoint } from '../cms/createIntlayerCMS';\nimport { type FetcherOptions, fetcher } from '../fetcher';\n\nexport type AutocompleteBody = {\n text: string;\n aiOptions?: AIOptions;\n contextBefore?: string;\n currentLine?: string;\n contextAfter?: string;\n};\n\nexport type AskDocQuestionBody = {\n messages: ChatCompletionRequestMessage[];\n discussionId: string;\n onMessage?: (chunk: string) => void;\n onDone?: (response: AskDocQuestionResult) => void;\n};\n\nexport type ClientAction =\n | { type: 'navigate'; path: string }\n | { type: 'invalidate_queries' };\n\nexport type ChatBody = {\n messages: ChatCompletionRequestMessage[];\n discussionId: string;\n onMessage?: (chunk: string) => void;\n onDone?: (response: ChatResult) => void;\n onAction?: (action: ClientAction) => void;\n};\n\nexport type { AskDocQuestionResult, ChatResult };\n\n/** Prefix of the routes, checked against the backend contract. */\nconst aiGroup = {\n prefix: '/api/ai',\n} as const satisfies Pick<typeof aiContract, 'prefix'>;\n\n/**\n * Method and path of every route, checked against the backend contract at\n * compile time (the contract's zod schemas are never loaded).\n */\nconst aiEndpoints = {\n customQuery: { method: 'POST', path: '/' },\n translateJSON: { method: 'POST', path: '/translate/json' },\n auditContentDeclaration: { method: 'POST', path: '/audit/dictionary' },\n auditContentDeclarationField: {\n method: 'POST',\n path: '/audit/dictionary/field',\n },\n auditContentDeclarationMetadata: {\n method: 'POST',\n path: '/audit/dictionary/metadata',\n },\n auditTag: { method: 'POST', path: '/audit/tag' },\n ask: { method: 'POST', path: '/ask' },\n chat: { method: 'POST', path: '/chat' },\n autocomplete: { method: 'POST', path: '/autocomplete' },\n getDiscussions: { method: 'GET', path: '/discussions' },\n getAIStats: { method: 'GET', path: '/stats' },\n} as const satisfies RouteEndpoints<AIRoutes>;\n\nexport const getAiAPI = (\n authAPIOptions: FetcherOptions = {},\n intlayerConfig?: IntlayerConfig\n) => {\n const backendURL =\n intlayerConfig?.editor?.backendURL ?? editor.backendURL ?? BACKEND_URL;\n\n /**\n * Custom query\n * @param body - Custom query parameters.\n * @returns Custom query result.\n */\n const customQuery = async (\n body?: CustomQueryBody,\n otherOptions: FetcherOptions = {}\n ) =>\n await fetcher<CustomQueryResult>(\n buildRouteURL(backendURL, aiGroup, aiEndpoints.customQuery),\n authAPIOptions,\n otherOptions,\n {\n method: aiEndpoints.customQuery.method,\n body: body,\n }\n );\n\n /**\n * Translate a JSON\n * @param body - Audit file parameters.\n * @returns Audited file content.\n */\n const translateJSON = async (\n body?: TranslateJSONBody,\n otherOptions: FetcherOptions = {}\n ) =>\n await fetcher<TranslateJSONResult>(\n buildRouteURL(backendURL, aiGroup, aiEndpoints.translateJSON),\n authAPIOptions,\n otherOptions,\n {\n method: aiEndpoints.translateJSON.method,\n body: body,\n }\n );\n\n /**\n * Audits a content declaration file\n * @param body - Audit file parameters.\n * @returns Audited file content.\n */\n const auditContentDeclaration = async (\n body?: AuditContentDeclarationBody,\n otherOptions: FetcherOptions = {}\n ) =>\n await fetcher<AuditContentDeclarationResult>(\n buildRouteURL(backendURL, aiGroup, aiEndpoints.auditContentDeclaration),\n authAPIOptions,\n otherOptions,\n {\n method: aiEndpoints.auditContentDeclaration.method,\n body: body,\n }\n );\n\n /**\n * Audits a content declaration field\n * @param body - Audit file parameters.\n * @returns Audited file content.\n */\n const auditContentDeclarationField = async (\n body?: AuditContentDeclarationFieldBody,\n otherOptions: FetcherOptions = {}\n ) =>\n await fetcher<AuditContentDeclarationFieldResult>(\n buildRouteURL(\n backendURL,\n aiGroup,\n aiEndpoints.auditContentDeclarationField\n ),\n authAPIOptions,\n otherOptions,\n {\n method: aiEndpoints.auditContentDeclarationField.method,\n body: body,\n }\n );\n\n /**\n * Audits a content declaration file to retrieve title, description and tags\n * @param body - Audit file parameters.\n * @returns Audited file content.\n */\n const auditContentDeclarationMetadata = async (\n body?: AuditContentDeclarationMetadataBody,\n otherOptions: FetcherOptions = {}\n ) =>\n await fetcher<AuditContentDeclarationMetadataResult>(\n buildRouteURL(\n backendURL,\n aiGroup,\n aiEndpoints.auditContentDeclarationMetadata\n ),\n authAPIOptions,\n otherOptions,\n {\n method: aiEndpoints.auditContentDeclarationMetadata.method,\n body: body,\n }\n );\n\n /**\n * Audits a tag\n * @param body - Audit tag parameters.\n * @returns Audited tag content.\n */\n const auditTag = async (\n body?: AuditTagBody,\n otherOptions: FetcherOptions = {}\n ) =>\n await fetcher<AuditTagResult>(\n buildRouteURL(backendURL, aiGroup, aiEndpoints.auditTag),\n authAPIOptions,\n otherOptions,\n {\n method: aiEndpoints.auditTag.method,\n body: body,\n }\n );\n\n /**\n * Asks a question to the AI related to the documentation **and streams the\n * answer as Server‑Sent Events (SSE)**.\n *\n * The function **returns immediately** with a handle exposing:\n * - `promise` → resolves when the stream completes (or rejects on error)\n * - `abort()` → allows canceling the request on demand\n *\n * Usage example:\n * ```ts\n * const { promise, abort } = ai.askDocQuestion({\n * ...body,\n * onMessage: console.log,\n * onDone: (full) => console.log(\"✔\", full),\n * });\n * // later → abort();\n * await promise; // waits for completion if desired\n * ```\n */\n const askDocQuestion = async (\n body?: AskDocQuestionBody,\n otherOptions: FetcherOptions = {}\n ) => {\n if (!body) return;\n\n const { onMessage, onDone, ...rest } = body;\n const abortController = new AbortController();\n\n try {\n const response = await fetch(\n buildRouteURL(backendURL, aiGroup, aiEndpoints.ask),\n {\n method: aiEndpoints.ask.method,\n headers: {\n 'Content-Type': 'application/json',\n ...authAPIOptions.headers,\n ...otherOptions.headers,\n },\n body: JSON.stringify({\n ...rest,\n ...authAPIOptions.body,\n ...otherOptions.body,\n }),\n signal: abortController.signal,\n credentials: 'include',\n }\n );\n\n if (!response.ok) {\n // Align error handling with generic `fetcher` utility so that callers receive\n // meaningful messages (e.g. for 429 \"Too Many Requests\" responses).\n let errorMessage: string = 'An error occurred';\n\n try {\n // Attempt to parse JSON error payload produced by backend\n const errorData = await response.json();\n const errorObj = errorData.error ?? errorData;\n errorMessage = JSON.stringify(errorObj) ?? 'An error occurred';\n } catch {\n // Fallback to plain-text body or HTTP status text\n try {\n const errorText = await response.text();\n if (errorText) {\n errorMessage = errorText;\n }\n } catch {\n // ignore – we already have a default message\n }\n }\n\n throw new Error(errorMessage);\n }\n\n const reader = response.body?.getReader();\n if (!reader) {\n throw new Error('No reader available');\n }\n\n const decoder = new TextDecoder();\n let buffer = '';\n\n while (true) {\n const { done, value } = await reader.read();\n if (done) break;\n\n buffer += decoder.decode(value, { stream: true });\n const lines = buffer.split('\\n');\n buffer = lines.pop() ?? '';\n\n for (const line of lines) {\n if (line.startsWith('data: ')) {\n try {\n const data = JSON.parse(line.slice(6));\n if (data.chunk) {\n onMessage?.(data.chunk);\n }\n if (data.done && data.response) {\n onDone?.(data.response);\n }\n } catch (e) {\n console.error('Failed to parse SSE data:', e);\n }\n }\n }\n }\n } catch (error) {\n console.error('Error in askDocQuestion:', error);\n throw error;\n }\n };\n\n const chat = async (body?: ChatBody, otherOptions: FetcherOptions = {}) => {\n if (!body) return;\n\n const { onMessage, onDone, onAction, ...rest } = body;\n const abortController = new AbortController();\n\n try {\n const response = await fetch(\n buildRouteURL(backendURL, aiGroup, aiEndpoints.chat),\n {\n method: aiEndpoints.chat.method,\n headers: {\n 'Content-Type': 'application/json',\n ...authAPIOptions.headers,\n ...otherOptions.headers,\n },\n body: JSON.stringify({\n ...rest,\n ...authAPIOptions.body,\n ...otherOptions.body,\n }),\n signal: abortController.signal,\n credentials: 'include',\n }\n );\n\n if (!response.ok) {\n let errorMessage: string = 'An error occurred';\n\n try {\n const errorData = await response.json();\n const errorObj = errorData.error ?? errorData;\n errorMessage = JSON.stringify(errorObj) ?? 'An error occurred';\n } catch {\n try {\n const errorText = await response.text();\n if (errorText) {\n errorMessage = errorText;\n }\n } catch {\n // ignore\n }\n }\n\n throw new Error(errorMessage);\n }\n\n const reader = response.body?.getReader();\n if (!reader) {\n throw new Error('No reader available');\n }\n\n const decoder = new TextDecoder();\n let buffer = '';\n\n while (true) {\n const { done, value } = await reader.read();\n if (done) break;\n\n buffer += decoder.decode(value, { stream: true });\n const lines = buffer.split('\\n');\n buffer = lines.pop() ?? '';\n\n for (const line of lines) {\n if (line.startsWith('data: ')) {\n try {\n const data = JSON.parse(line.slice(6));\n if (data.chunk) {\n onMessage?.(data.chunk);\n }\n if (data.action) {\n onAction?.(data.action);\n }\n if (data.done && data.response) {\n onDone?.(data.response);\n }\n } catch (e) {\n console.error('Failed to parse SSE data:', e);\n }\n }\n }\n }\n } catch (error) {\n console.error('Error in chat:', error);\n throw error;\n }\n };\n\n const autocomplete = async (\n body?: AutocompleteBody,\n otherOptions: FetcherOptions = {}\n ) =>\n await fetcher<AutocompleteResponse>(\n buildRouteURL(backendURL, aiGroup, aiEndpoints.autocomplete),\n authAPIOptions,\n otherOptions,\n {\n method: aiEndpoints.autocomplete.method,\n body: body,\n }\n );\n\n /**\n * Retrieves discussions with filters and pagination. Only user or admin can access.\n */\n const getDiscussions = async (\n params?: GetDiscussionsParams,\n otherOptions: FetcherOptions = {}\n ) =>\n await fetcher<GetDiscussionsResult>(\n buildRouteURL(backendURL, aiGroup, aiEndpoints.getDiscussions),\n authAPIOptions,\n otherOptions,\n {\n method: aiEndpoints.getDiscussions.method,\n // @ts-ignore Number of parameter will be stringified by the fetcher\n params,\n }\n );\n\n /**\n * Retrieves aggregated AI token-usage statistics for the currently selected\n * project.\n */\n const getAIStats = async (otherOptions: FetcherOptions = {}) =>\n await fetcher<GetAIStatsResult>(\n buildRouteURL(backendURL, aiGroup, aiEndpoints.getAIStats),\n authAPIOptions,\n otherOptions,\n {\n method: aiEndpoints.getAIStats.method,\n }\n );\n\n return {\n customQuery,\n translateJSON,\n auditContentDeclaration,\n auditContentDeclarationField,\n auditContentDeclarationMetadata,\n auditTag,\n askDocQuestion,\n chat,\n autocomplete,\n getDiscussions,\n getAIStats,\n };\n};\n\n/**\n * Authenticated `ai` endpoint bound to an Intlayer CMS authenticator.\n *\n * Pass an authenticator created with `createIntlayerCMS`, or omit it to use\n * the build-time configuration (`@intlayer/config/built`).\n */\nexport const aiEndpoint = createEndpoint(getAiAPI);\n"],"mappings":";;;;;;;;;AA8DA,MAAM,UAAU,EACd,QAAQ,UACV;;;;;AAMA,MAAM,cAAc;CAClB,aAAa;EAAE,QAAQ;EAAQ,MAAM;CAAI;CACzC,eAAe;EAAE,QAAQ;EAAQ,MAAM;CAAkB;CACzD,yBAAyB;EAAE,QAAQ;EAAQ,MAAM;CAAoB;CACrE,8BAA8B;EAC5B,QAAQ;EACR,MAAM;CACR;CACA,iCAAiC;EAC/B,QAAQ;EACR,MAAM;CACR;CACA,UAAU;EAAE,QAAQ;EAAQ,MAAM;CAAa;CAC/C,KAAK;EAAE,QAAQ;EAAQ,MAAM;CAAO;CACpC,MAAM;EAAE,QAAQ;EAAQ,MAAM;CAAQ;CACtC,cAAc;EAAE,QAAQ;EAAQ,MAAM;CAAgB;CACtD,gBAAgB;EAAE,QAAQ;EAAO,MAAM;CAAe;CACtD,YAAY;EAAE,QAAQ;EAAO,MAAM;CAAS;AAC9C;AAEA,MAAa,YACX,iBAAiC,CAAC,GAClC,mBACG;CACH,MAAM,aACJ,gBAAgB,QAAQ,cAAcA,8BAAO,cAAcC;;;;;;CAO7D,MAAM,cAAc,OAClB,MACA,eAA+B,CAAC,MAEhC,MAAMC,4BACJC,sDAAc,YAAY,SAAS,YAAY,WAAW,GAC1D,gBACA,cACA;EACE,QAAQ,YAAY,YAAY;EAC1B;CACR,CACF;;;;;;CAOF,MAAM,gBAAgB,OACpB,MACA,eAA+B,CAAC,MAEhC,MAAMD,4BACJC,sDAAc,YAAY,SAAS,YAAY,aAAa,GAC5D,gBACA,cACA;EACE,QAAQ,YAAY,cAAc;EAC5B;CACR,CACF;;;;;;CAOF,MAAM,0BAA0B,OAC9B,MACA,eAA+B,CAAC,MAEhC,MAAMD,4BACJC,sDAAc,YAAY,SAAS,YAAY,uBAAuB,GACtE,gBACA,cACA;EACE,QAAQ,YAAY,wBAAwB;EACtC;CACR,CACF;;;;;;CAOF,MAAM,+BAA+B,OACnC,MACA,eAA+B,CAAC,MAEhC,MAAMD,4BACJC,sDACE,YACA,SACA,YAAY,4BACd,GACA,gBACA,cACA;EACE,QAAQ,YAAY,6BAA6B;EAC3C;CACR,CACF;;;;;;CAOF,MAAM,kCAAkC,OACtC,MACA,eAA+B,CAAC,MAEhC,MAAMD,4BACJC,sDACE,YACA,SACA,YAAY,+BACd,GACA,gBACA,cACA;EACE,QAAQ,YAAY,gCAAgC;EAC9C;CACR,CACF;;;;;;CAOF,MAAM,WAAW,OACf,MACA,eAA+B,CAAC,MAEhC,MAAMD,4BACJC,sDAAc,YAAY,SAAS,YAAY,QAAQ,GACvD,gBACA,cACA;EACE,QAAQ,YAAY,SAAS;EACvB;CACR,CACF;;;;;;;;;;;;;;;;;;;;CAqBF,MAAM,iBAAiB,OACrB,MACA,eAA+B,CAAC,MAC7B;EACH,IAAI,CAAC,MAAM;EAEX,MAAM,EAAE,WAAW,QAAQ,GAAG,SAAS;EACvC,MAAM,kBAAkB,IAAI,gBAAgB;EAE5C,IAAI;GACF,MAAM,WAAW,MAAM,UACrBA,sDAAc,YAAY,SAAS,YAAY,GAAG,GAClD;IACE,QAAQ,YAAY,IAAI;IACxB,SAAS;KACP,gBAAgB;KAChB,GAAG,eAAe;KAClB,GAAG,aAAa;IAClB;IACA,MAAM,KAAK,UAAU;KACnB,GAAG;KACH,GAAG,eAAe;KAClB,GAAG,aAAa;IAClB,CAAC;IACD,QAAQ,gBAAgB;IACxB,aAAa;GACf,CACF;GAEA,IAAI,CAAC,SAAS,IAAI;IAGhB,IAAI,eAAuB;IAE3B,IAAI;KAEF,MAAM,YAAY,MAAM,SAAS,KAAK;KACtC,MAAM,WAAW,UAAU,SAAS;KACpC,eAAe,KAAK,UAAU,QAAQ,KAAK;IAC7C,QAAQ;KAEN,IAAI;MACF,MAAM,YAAY,MAAM,SAAS,KAAK;MACtC,IAAI,WACF,eAAe;KAEnB,QAAQ,CAER;IACF;IAEA,MAAM,IAAI,MAAM,YAAY;GAC9B;GAEA,MAAM,SAAS,SAAS,MAAM,UAAU;GACxC,IAAI,CAAC,QACH,MAAM,IAAI,MAAM,qBAAqB;GAGvC,MAAM,UAAU,IAAI,YAAY;GAChC,IAAI,SAAS;GAEb,OAAO,MAAM;IACX,MAAM,EAAE,MAAM,UAAU,MAAM,OAAO,KAAK;IAC1C,IAAI,MAAM;IAEV,UAAU,QAAQ,OAAO,OAAO,EAAE,QAAQ,KAAK,CAAC;IAChD,MAAM,QAAQ,OAAO,MAAM,IAAI;IAC/B,SAAS,MAAM,IAAI,KAAK;IAExB,KAAK,MAAM,QAAQ,OACjB,IAAI,KAAK,WAAW,QAAQ,GAC1B,IAAI;KACF,MAAM,OAAO,KAAK,MAAM,KAAK,MAAM,CAAC,CAAC;KACrC,IAAI,KAAK,OACP,YAAY,KAAK,KAAK;KAExB,IAAI,KAAK,QAAQ,KAAK,UACpB,SAAS,KAAK,QAAQ;IAE1B,SAAS,GAAG;KACV,QAAQ,MAAM,6BAA6B,CAAC;IAC9C;GAGN;EACF,SAAS,OAAO;GACd,QAAQ,MAAM,4BAA4B,KAAK;GAC/C,MAAM;EACR;CACF;CAEA,MAAM,OAAO,OAAO,MAAiB,eAA+B,CAAC,MAAM;EACzE,IAAI,CAAC,MAAM;EAEX,MAAM,EAAE,WAAW,QAAQ,UAAU,GAAG,SAAS;EACjD,MAAM,kBAAkB,IAAI,gBAAgB;EAE5C,IAAI;GACF,MAAM,WAAW,MAAM,UACrBA,sDAAc,YAAY,SAAS,YAAY,IAAI,GACnD;IACE,QAAQ,YAAY,KAAK;IACzB,SAAS;KACP,gBAAgB;KAChB,GAAG,eAAe;KAClB,GAAG,aAAa;IAClB;IACA,MAAM,KAAK,UAAU;KACnB,GAAG;KACH,GAAG,eAAe;KAClB,GAAG,aAAa;IAClB,CAAC;IACD,QAAQ,gBAAgB;IACxB,aAAa;GACf,CACF;GAEA,IAAI,CAAC,SAAS,IAAI;IAChB,IAAI,eAAuB;IAE3B,IAAI;KACF,MAAM,YAAY,MAAM,SAAS,KAAK;KACtC,MAAM,WAAW,UAAU,SAAS;KACpC,eAAe,KAAK,UAAU,QAAQ,KAAK;IAC7C,QAAQ;KACN,IAAI;MACF,MAAM,YAAY,MAAM,SAAS,KAAK;MACtC,IAAI,WACF,eAAe;KAEnB,QAAQ,CAER;IACF;IAEA,MAAM,IAAI,MAAM,YAAY;GAC9B;GAEA,MAAM,SAAS,SAAS,MAAM,UAAU;GACxC,IAAI,CAAC,QACH,MAAM,IAAI,MAAM,qBAAqB;GAGvC,MAAM,UAAU,IAAI,YAAY;GAChC,IAAI,SAAS;GAEb,OAAO,MAAM;IACX,MAAM,EAAE,MAAM,UAAU,MAAM,OAAO,KAAK;IAC1C,IAAI,MAAM;IAEV,UAAU,QAAQ,OAAO,OAAO,EAAE,QAAQ,KAAK,CAAC;IAChD,MAAM,QAAQ,OAAO,MAAM,IAAI;IAC/B,SAAS,MAAM,IAAI,KAAK;IAExB,KAAK,MAAM,QAAQ,OACjB,IAAI,KAAK,WAAW,QAAQ,GAC1B,IAAI;KACF,MAAM,OAAO,KAAK,MAAM,KAAK,MAAM,CAAC,CAAC;KACrC,IAAI,KAAK,OACP,YAAY,KAAK,KAAK;KAExB,IAAI,KAAK,QACP,WAAW,KAAK,MAAM;KAExB,IAAI,KAAK,QAAQ,KAAK,UACpB,SAAS,KAAK,QAAQ;IAE1B,SAAS,GAAG;KACV,QAAQ,MAAM,6BAA6B,CAAC;IAC9C;GAGN;EACF,SAAS,OAAO;GACd,QAAQ,MAAM,kBAAkB,KAAK;GACrC,MAAM;EACR;CACF;CAEA,MAAM,eAAe,OACnB,MACA,eAA+B,CAAC,MAEhC,MAAMD,4BACJC,sDAAc,YAAY,SAAS,YAAY,YAAY,GAC3D,gBACA,cACA;EACE,QAAQ,YAAY,aAAa;EAC3B;CACR,CACF;;;;CAKF,MAAM,iBAAiB,OACrB,QACA,eAA+B,CAAC,MAEhC,MAAMD,4BACJC,sDAAc,YAAY,SAAS,YAAY,cAAc,GAC7D,gBACA,cACA;EACE,QAAQ,YAAY,eAAe;EAEnC;CACF,CACF;;;;;CAMF,MAAM,aAAa,OAAO,eAA+B,CAAC,MACxD,MAAMD,4BACJC,sDAAc,YAAY,SAAS,YAAY,UAAU,GACzD,gBACA,cACA,EACE,QAAQ,YAAY,WAAW,OACjC,CACF;CAEF,OAAO;EACL;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;CACF;AACF;;;;;;;AAQA,MAAa,aAAaC,6CAAe,QAAQ"}
1
+ {"version":3,"file":"ai.cjs","names":["editor","BACKEND_URL","fetcher","buildRouteURL","readServerSentEvents","createEndpoint"],"sources":["../../../src/getIntlayerAPI/ai.ts"],"sourcesContent":["import type {\n AIOptions,\n AIRoutes,\n AskDocQuestionResult,\n AuditContentDeclarationBody,\n AuditContentDeclarationFieldBody,\n AuditContentDeclarationFieldResult,\n AuditContentDeclarationMetadataBody,\n AuditContentDeclarationMetadataResult,\n AuditContentDeclarationResult,\n AuditTagBody,\n AuditTagResult,\n AutocompleteResponse,\n aiContract,\n ChatCompletionRequestMessage,\n ChatResult,\n CustomQueryBody,\n CustomQueryResult,\n GetAICreditsResult,\n GetAICreditUsageParams,\n GetAICreditUsageResult,\n GetAIStatsResult,\n GetDiscussionsParams,\n GetDiscussionsResult,\n TranslateJSONBody,\n TranslateJSONResult,\n} from '@intlayer/backend-contract/ai';\nimport type { RouteEndpoints } from '@intlayer/backend-contract/defineRoute';\nimport { buildRouteURL } from '@intlayer/backend-contract/defineRoute';\nimport { editor } from '@intlayer/config/built';\nimport { BACKEND_URL } from '@intlayer/config/defaultValues';\nimport type { IntlayerConfig } from '@intlayer/types/config';\nimport { createEndpoint } from '../cms/createIntlayerCMS';\nimport { type FetcherOptions, fetcher } from '../fetcher';\nimport { readServerSentEvents } from './readServerSentEvents';\n\nexport type AutocompleteBody = {\n text: string;\n aiOptions?: AIOptions;\n contextBefore?: string;\n currentLine?: string;\n contextAfter?: string;\n};\n\nexport type AskDocQuestionBody = {\n messages: ChatCompletionRequestMessage[];\n discussionId: string;\n onMessage?: (chunk: string) => void;\n /** Receives the summarized reasoning of the model as it streams. */\n onReasoning?: (chunk: string) => void;\n onDone?: (response: AskDocQuestionResult) => void;\n};\n\nexport type ClientAction =\n | { type: 'navigate'; path: string }\n | { type: 'invalidate_queries' };\n\nexport type ChatBody = {\n messages: ChatCompletionRequestMessage[];\n discussionId: string;\n onMessage?: (chunk: string) => void;\n onDone?: (response: ChatResult) => void;\n onAction?: (action: ClientAction) => void;\n};\n\n/** `data:` payload streamed by the `ask` endpoint. */\ntype AskDocQuestionStreamData = {\n chunk?: string;\n reasoning?: string;\n done?: boolean;\n response?: AskDocQuestionResult;\n};\n\n/** `data:` payload streamed by the `chat` endpoint. */\ntype ChatStreamData = {\n chunk?: string;\n action?: ClientAction;\n done?: boolean;\n response?: ChatResult;\n};\n\nexport type { AskDocQuestionResult, ChatResult };\n\n/** Prefix of the routes, checked against the backend contract. */\nconst aiGroup = {\n prefix: '/api/ai',\n} as const satisfies Pick<typeof aiContract, 'prefix'>;\n\n/**\n * Method and path of every route, checked against the backend contract at\n * compile time (the contract's zod schemas are never loaded).\n */\nconst aiEndpoints = {\n customQuery: { method: 'POST', path: '/' },\n translateJSON: { method: 'POST', path: '/translate/json' },\n auditContentDeclaration: { method: 'POST', path: '/audit/dictionary' },\n auditContentDeclarationField: {\n method: 'POST',\n path: '/audit/dictionary/field',\n },\n auditContentDeclarationMetadata: {\n method: 'POST',\n path: '/audit/dictionary/metadata',\n },\n auditTag: { method: 'POST', path: '/audit/tag' },\n ask: { method: 'POST', path: '/ask' },\n chat: { method: 'POST', path: '/chat' },\n autocomplete: { method: 'POST', path: '/autocomplete' },\n getDiscussions: { method: 'GET', path: '/discussions' },\n getAIStats: { method: 'GET', path: '/stats' },\n getAICredits: { method: 'GET', path: '/credits' },\n getAICreditUsage: { method: 'GET', path: '/credits/usage' },\n} as const satisfies RouteEndpoints<AIRoutes>;\n\nexport const getAiAPI = (\n authAPIOptions: FetcherOptions = {},\n intlayerConfig?: IntlayerConfig\n) => {\n const backendURL =\n intlayerConfig?.editor?.backendURL ?? editor.backendURL ?? BACKEND_URL;\n\n /**\n * Custom query\n * @param body - Custom query parameters.\n * @returns Custom query result.\n */\n const customQuery = async (\n body?: CustomQueryBody,\n otherOptions: FetcherOptions = {}\n ) =>\n await fetcher<CustomQueryResult>(\n buildRouteURL(backendURL, aiGroup, aiEndpoints.customQuery),\n authAPIOptions,\n otherOptions,\n {\n method: aiEndpoints.customQuery.method,\n body: body,\n }\n );\n\n /**\n * Translate a JSON\n * @param body - Audit file parameters.\n * @returns Audited file content.\n */\n const translateJSON = async (\n body?: TranslateJSONBody,\n otherOptions: FetcherOptions = {}\n ) =>\n await fetcher<TranslateJSONResult>(\n buildRouteURL(backendURL, aiGroup, aiEndpoints.translateJSON),\n authAPIOptions,\n otherOptions,\n {\n method: aiEndpoints.translateJSON.method,\n body: body,\n }\n );\n\n /**\n * Audits a content declaration file\n * @param body - Audit file parameters.\n * @returns Audited file content.\n */\n const auditContentDeclaration = async (\n body?: AuditContentDeclarationBody,\n otherOptions: FetcherOptions = {}\n ) =>\n await fetcher<AuditContentDeclarationResult>(\n buildRouteURL(backendURL, aiGroup, aiEndpoints.auditContentDeclaration),\n authAPIOptions,\n otherOptions,\n {\n method: aiEndpoints.auditContentDeclaration.method,\n body: body,\n }\n );\n\n /**\n * Audits a content declaration field\n * @param body - Audit file parameters.\n * @returns Audited file content.\n */\n const auditContentDeclarationField = async (\n body?: AuditContentDeclarationFieldBody,\n otherOptions: FetcherOptions = {}\n ) =>\n await fetcher<AuditContentDeclarationFieldResult>(\n buildRouteURL(\n backendURL,\n aiGroup,\n aiEndpoints.auditContentDeclarationField\n ),\n authAPIOptions,\n otherOptions,\n {\n method: aiEndpoints.auditContentDeclarationField.method,\n body: body,\n }\n );\n\n /**\n * Audits a content declaration file to retrieve title, description and tags\n * @param body - Audit file parameters.\n * @returns Audited file content.\n */\n const auditContentDeclarationMetadata = async (\n body?: AuditContentDeclarationMetadataBody,\n otherOptions: FetcherOptions = {}\n ) =>\n await fetcher<AuditContentDeclarationMetadataResult>(\n buildRouteURL(\n backendURL,\n aiGroup,\n aiEndpoints.auditContentDeclarationMetadata\n ),\n authAPIOptions,\n otherOptions,\n {\n method: aiEndpoints.auditContentDeclarationMetadata.method,\n body: body,\n }\n );\n\n /**\n * Audits a tag\n * @param body - Audit tag parameters.\n * @returns Audited tag content.\n */\n const auditTag = async (\n body?: AuditTagBody,\n otherOptions: FetcherOptions = {}\n ) =>\n await fetcher<AuditTagResult>(\n buildRouteURL(backendURL, aiGroup, aiEndpoints.auditTag),\n authAPIOptions,\n otherOptions,\n {\n method: aiEndpoints.auditTag.method,\n body: body,\n }\n );\n\n /**\n * Asks a question to the AI related to the documentation **and streams the\n * answer as Server‑Sent Events (SSE)**.\n *\n * The function **returns immediately** with a handle exposing:\n * - `promise` → resolves when the stream completes (or rejects on error)\n * - `abort()` → allows canceling the request on demand\n *\n * Usage example:\n * ```ts\n * const { promise, abort } = ai.askDocQuestion({\n * ...body,\n * onMessage: console.log,\n * onDone: (full) => console.log(\"✔\", full),\n * });\n * // later → abort();\n * await promise; // waits for completion if desired\n * ```\n */\n const askDocQuestion = async (\n body?: AskDocQuestionBody,\n otherOptions: FetcherOptions = {}\n ) => {\n if (!body) return;\n\n const { onMessage, onReasoning, onDone, ...rest } = body;\n const abortController = new AbortController();\n\n try {\n const response = await fetch(\n buildRouteURL(backendURL, aiGroup, aiEndpoints.ask),\n {\n method: aiEndpoints.ask.method,\n headers: {\n 'Content-Type': 'application/json',\n ...authAPIOptions.headers,\n ...otherOptions.headers,\n },\n body: JSON.stringify({\n ...rest,\n ...authAPIOptions.body,\n ...otherOptions.body,\n }),\n signal: abortController.signal,\n credentials: 'include',\n }\n );\n\n if (!response.ok) {\n // Align error handling with generic `fetcher` utility so that callers receive\n // meaningful messages (e.g. for 429 \"Too Many Requests\" responses).\n let errorMessage: string = 'An error occurred';\n\n try {\n // Attempt to parse JSON error payload produced by backend\n const errorData = await response.json();\n const errorObj = errorData.error ?? errorData;\n errorMessage = JSON.stringify(errorObj) ?? 'An error occurred';\n } catch {\n // Fallback to plain-text body or HTTP status text\n try {\n const errorText = await response.text();\n if (errorText) {\n errorMessage = errorText;\n }\n } catch {\n // ignore – we already have a default message\n }\n }\n\n throw new Error(errorMessage);\n }\n\n await readServerSentEvents<AskDocQuestionStreamData>(response, (data) => {\n if (data.reasoning) {\n onReasoning?.(data.reasoning);\n }\n if (data.chunk) {\n onMessage?.(data.chunk);\n }\n if (data.done && data.response) {\n onDone?.(data.response);\n }\n });\n } catch (error) {\n console.error('Error in askDocQuestion:', error);\n throw error;\n }\n };\n\n const chat = async (body?: ChatBody, otherOptions: FetcherOptions = {}) => {\n if (!body) return;\n\n const { onMessage, onDone, onAction, ...rest } = body;\n const abortController = new AbortController();\n\n try {\n const response = await fetch(\n buildRouteURL(backendURL, aiGroup, aiEndpoints.chat),\n {\n method: aiEndpoints.chat.method,\n headers: {\n 'Content-Type': 'application/json',\n ...authAPIOptions.headers,\n ...otherOptions.headers,\n },\n body: JSON.stringify({\n ...rest,\n ...authAPIOptions.body,\n ...otherOptions.body,\n }),\n signal: abortController.signal,\n credentials: 'include',\n }\n );\n\n if (!response.ok) {\n let errorMessage: string = 'An error occurred';\n\n try {\n const errorData = await response.json();\n const errorObj = errorData.error ?? errorData;\n errorMessage = JSON.stringify(errorObj) ?? 'An error occurred';\n } catch {\n try {\n const errorText = await response.text();\n if (errorText) {\n errorMessage = errorText;\n }\n } catch {\n // ignore\n }\n }\n\n throw new Error(errorMessage);\n }\n\n await readServerSentEvents<ChatStreamData>(response, (data) => {\n if (data.chunk) {\n onMessage?.(data.chunk);\n }\n if (data.action) {\n onAction?.(data.action);\n }\n if (data.done && data.response) {\n onDone?.(data.response);\n }\n });\n } catch (error) {\n console.error('Error in chat:', error);\n throw error;\n }\n };\n\n const autocomplete = async (\n body?: AutocompleteBody,\n otherOptions: FetcherOptions = {}\n ) =>\n await fetcher<AutocompleteResponse>(\n buildRouteURL(backendURL, aiGroup, aiEndpoints.autocomplete),\n authAPIOptions,\n otherOptions,\n {\n method: aiEndpoints.autocomplete.method,\n body: body,\n }\n );\n\n /**\n * Retrieves discussions with filters and pagination. Only user or admin can access.\n */\n const getDiscussions = async (\n params?: GetDiscussionsParams,\n otherOptions: FetcherOptions = {}\n ) =>\n await fetcher<GetDiscussionsResult>(\n buildRouteURL(backendURL, aiGroup, aiEndpoints.getDiscussions),\n authAPIOptions,\n otherOptions,\n {\n method: aiEndpoints.getDiscussions.method,\n // @ts-ignore Number of parameter will be stringified by the fetcher\n params,\n }\n );\n\n /**\n * Retrieves aggregated AI token-usage statistics for the currently selected\n * project.\n */\n const getAIStats = async (otherOptions: FetcherOptions = {}) =>\n await fetcher<GetAIStatsResult>(\n buildRouteURL(backendURL, aiGroup, aiEndpoints.getAIStats),\n authAPIOptions,\n otherOptions,\n {\n method: aiEndpoints.getAIStats.method,\n }\n );\n\n /**\n * Retrieves the AI credit balance of the selected organization for the\n * current monthly period.\n */\n const getAICredits = async (otherOptions: FetcherOptions = {}) =>\n await fetcher<GetAICreditsResult>(\n buildRouteURL(backendURL, aiGroup, aiEndpoints.getAICredits),\n authAPIOptions,\n otherOptions,\n {\n method: aiEndpoints.getAICredits.method,\n }\n );\n\n /**\n * Retrieves the day-by-day AI credit usage of the selected organization.\n */\n const getAICreditUsage = async (\n params?: GetAICreditUsageParams,\n otherOptions: FetcherOptions = {}\n ) =>\n await fetcher<GetAICreditUsageResult>(\n buildRouteURL(backendURL, aiGroup, aiEndpoints.getAICreditUsage),\n authAPIOptions,\n otherOptions,\n {\n method: aiEndpoints.getAICreditUsage.method,\n params,\n }\n );\n\n return {\n customQuery,\n translateJSON,\n auditContentDeclaration,\n auditContentDeclarationField,\n auditContentDeclarationMetadata,\n auditTag,\n askDocQuestion,\n chat,\n autocomplete,\n getDiscussions,\n getAIStats,\n getAICredits,\n getAICreditUsage,\n };\n};\n\n/**\n * Authenticated `ai` endpoint bound to an Intlayer CMS authenticator.\n *\n * Pass an authenticator created with `createIntlayerCMS`, or omit it to use\n * the build-time configuration (`@intlayer/config/built`).\n */\nexport const aiEndpoint = createEndpoint(getAiAPI);\n"],"mappings":"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"}
@@ -1,11 +1,11 @@
1
1
  Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
2
- const require_fetcher = require('../fetcher.cjs');
3
- const require_cms_createIntlayerCMS = require('../cms/createIntlayerCMS.cjs');
2
+ const require_cms_createIntlayerCMS = require("../cms/createIntlayerCMS.cjs");
3
+ const require_fetcher = require("../fetcher.cjs");
4
4
  let _intlayer_config_built = require("@intlayer/config/built");
5
5
  let _intlayer_backend_contract_defineRoute = require("@intlayer/backend-contract/defineRoute");
6
6
  let _intlayer_config_defaultValues = require("@intlayer/config/defaultValues");
7
7
 
8
- //#region src/getIntlayerAPI/analytics.ts
8
+ // src/getIntlayerAPI/analytics.ts
9
9
  /** Prefix of the routes, checked against the backend contract. */
10
10
  const analyticsGroup = { prefix: "/api/analytics" };
11
11
  /**
@@ -25,6 +25,14 @@ const analyticsEndpoints = {
25
25
  method: "GET",
26
26
  path: "/audience"
27
27
  },
28
+ getPageFlow: {
29
+ method: "GET",
30
+ path: "/page-flow"
31
+ },
32
+ getLiveVisitorFlow: {
33
+ method: "GET",
34
+ path: "/audience/live/visitors/:visitorId"
35
+ },
28
36
  getContentStats: {
29
37
  method: "GET",
30
38
  path: "/content-stats"
@@ -78,6 +86,25 @@ const getAnalyticsAPI = (authAPIOptions = {}, intlayerConfig) => {
78
86
  */
79
87
  const getExperimentResults = async (experimentKey, otherOptions = {}) => await require_fetcher.fetcher((0, _intlayer_backend_contract_defineRoute.buildRouteURL)(backendURL, analyticsGroup, analyticsEndpoints.getExperimentResults, { experimentKey }), authAPIOptions, otherOptions, { method: analyticsEndpoints.getExperimentResults.method });
80
88
  /**
89
+ * Averaged page-to-page navigation flow from a starting page.
90
+ * @param range - Rolling window of the report.
91
+ * @param startUrl - Starting page pathname (default `/`).
92
+ * @returns The flow steps and the links between them.
93
+ */
94
+ const getPageFlow = async (range, startUrl, otherOptions = {}) => await require_fetcher.fetcher((0, _intlayer_backend_contract_defineRoute.buildRouteURL)(backendURL, analyticsGroup, analyticsEndpoints.getPageFlow), authAPIOptions, otherOptions, {
95
+ method: analyticsEndpoints.getPageFlow.method,
96
+ params: {
97
+ range,
98
+ startUrl
99
+ }
100
+ });
101
+ /**
102
+ * Page journey of a visitor active in the last 30 minutes.
103
+ * @param visitorId - The visitor id from the `live` audience report.
104
+ * @returns The visitor and its steps (`visitor: null` once it went quiet).
105
+ */
106
+ const getLiveVisitorFlow = async (visitorId, otherOptions = {}) => await require_fetcher.fetcher((0, _intlayer_backend_contract_defineRoute.buildRouteURL)(backendURL, analyticsGroup, analyticsEndpoints.getLiveVisitorFlow, { visitorId }), authAPIOptions, otherOptions, { method: analyticsEndpoints.getLiveVisitorFlow.method });
107
+ /**
81
108
  * Page metadata (title and meta description) for a given url.
82
109
  * @param url - The page url to inspect.
83
110
  * @returns Title and description of the page.
@@ -90,6 +117,8 @@ const getAnalyticsAPI = (authAPIOptions = {}, intlayerConfig) => {
90
117
  sendEvents,
91
118
  getOverview,
92
119
  getAudience,
120
+ getLiveVisitorFlow,
121
+ getPageFlow,
93
122
  getContentStats,
94
123
  getExperimentResults,
95
124
  getPageMetadata
@@ -103,7 +132,6 @@ const getAnalyticsAPI = (authAPIOptions = {}, intlayerConfig) => {
103
132
  */
104
133
  const analyticsEndpoint = require_cms_createIntlayerCMS.createEndpoint(getAnalyticsAPI);
105
134
 
106
- //#endregion
107
135
  exports.analyticsEndpoint = analyticsEndpoint;
108
136
  exports.getAnalyticsAPI = getAnalyticsAPI;
109
137
  //# sourceMappingURL=analytics.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"analytics.cjs","names":["editor","BACKEND_URL","fetcher","buildRouteURL","createEndpoint"],"sources":["../../../src/getIntlayerAPI/analytics.ts"],"sourcesContent":["import type {\n AnalyticsRoutes,\n AudienceRange,\n analyticsContract,\n GetAnalyticsOverviewResult,\n GetAudienceResult,\n GetContentStatsResult,\n GetExperimentResultsResult,\n GetPageMetadataResult,\n IngestAnalyticsBody,\n IngestAnalyticsResult,\n} from '@intlayer/backend-contract/analytics';\nimport type { RouteEndpoints } from '@intlayer/backend-contract/defineRoute';\nimport { buildRouteURL } from '@intlayer/backend-contract/defineRoute';\nimport { editor } from '@intlayer/config/built';\nimport { BACKEND_URL } from '@intlayer/config/defaultValues';\nimport type { IntlayerConfig } from '@intlayer/types/config';\nimport { createEndpoint } from '../cms/createIntlayerCMS';\nimport { type FetcherOptions, fetcher } from '../fetcher';\n\n/** Prefix of the routes, checked against the backend contract. */\nconst analyticsGroup = {\n prefix: '/api/analytics',\n} as const satisfies Pick<typeof analyticsContract, 'prefix'>;\n\n/**\n * Method and path of every route, checked against the backend contract at\n * compile time (the contract's zod schemas are never loaded).\n */\nconst analyticsEndpoints = {\n ingestAnalyticsEvents: { method: 'POST', path: '/events' },\n getAnalyticsOverview: { method: 'GET', path: '/overview' },\n getAnalyticsAudience: { method: 'GET', path: '/audience' },\n getContentStats: { method: 'GET', path: '/content-stats' },\n getExperimentResults: { method: 'GET', path: '/experiments/:experimentKey' },\n getPageMetadata: { method: 'GET', path: '/page-metadata' },\n} as const satisfies RouteEndpoints<AnalyticsRoutes>;\n\nexport const getAnalyticsAPI = (\n authAPIOptions: FetcherOptions = {},\n intlayerConfig?: IntlayerConfig\n) => {\n const backendURL =\n intlayerConfig?.editor?.backendURL ?? editor.backendURL ?? BACKEND_URL;\n\n /**\n * Ingest a batch of analytics events. Public — attribution is by the\n * project's `clientId` in the body.\n * @param body - Session id, sdk version, and the collected events.\n * @returns The number of accepted events.\n */\n const sendEvents = async (\n body: IngestAnalyticsBody,\n otherOptions: FetcherOptions = {}\n ) =>\n await fetcher<IngestAnalyticsResult>(\n buildRouteURL(\n backendURL,\n analyticsGroup,\n analyticsEndpoints.ingestAnalyticsEvents\n ),\n authAPIOptions,\n otherOptions,\n {\n method: analyticsEndpoints.ingestAnalyticsEvents.method,\n body,\n }\n );\n\n /**\n * Page/locale totals for the authenticated project.\n * @returns Views grouped by url and locale.\n */\n const getOverview = async (otherOptions: FetcherOptions = {}) =>\n await fetcher<GetAnalyticsOverviewResult>(\n buildRouteURL(\n backendURL,\n analyticsGroup,\n analyticsEndpoints.getAnalyticsOverview\n ),\n authAPIOptions,\n otherOptions,\n { method: analyticsEndpoints.getAnalyticsOverview.method }\n );\n\n /**\n * Audience report: distinct visitors (today / 7d / window), page views, the\n * evolution series, and locale + country breakdowns.\n * @param range - Rolling window, either a named range (`1h`, `24h`, `7d`,\n * `30d`, `90d`, `6mo`, `1y`, `3y`) or a number of days (default 30).\n * @returns The audience statistics.\n */\n const getAudience = async (\n range: AudienceRange | number = 30,\n otherOptions: FetcherOptions = {}\n ) =>\n await fetcher<GetAudienceResult>(\n buildRouteURL(\n backendURL,\n analyticsGroup,\n analyticsEndpoints.getAnalyticsAudience\n ),\n authAPIOptions,\n otherOptions,\n {\n method: analyticsEndpoints.getAnalyticsAudience.method,\n params: typeof range === 'number' ? { days: String(range) } : { range },\n }\n );\n\n /**\n * Per-content exposure totals — \"which content is actually shown\".\n * @returns Exposures grouped by dictionary key, key path, and locale.\n */\n const getContentStats = async (otherOptions: FetcherOptions = {}) =>\n await fetcher<GetContentStatsResult>(\n buildRouteURL(\n backendURL,\n analyticsGroup,\n analyticsEndpoints.getContentStats\n ),\n authAPIOptions,\n otherOptions,\n { method: analyticsEndpoints.getContentStats.method }\n );\n\n /**\n * A/B experiment results with per-variant conversion rates and significance.\n * @param experimentKey - The experiment to evaluate.\n * @returns The experiment result set.\n */\n const getExperimentResults = async (\n experimentKey: string,\n otherOptions: FetcherOptions = {}\n ) =>\n await fetcher<GetExperimentResultsResult>(\n buildRouteURL(\n backendURL,\n analyticsGroup,\n analyticsEndpoints.getExperimentResults,\n { experimentKey }\n ),\n authAPIOptions,\n otherOptions,\n { method: analyticsEndpoints.getExperimentResults.method }\n );\n\n /**\n * Page metadata (title and meta description) for a given url.\n * @param url - The page url to inspect.\n * @returns Title and description of the page.\n */\n const getPageMetadata = async (\n url: string,\n otherOptions: FetcherOptions = {}\n ) =>\n await fetcher<GetPageMetadataResult>(\n buildRouteURL(\n backendURL,\n analyticsGroup,\n analyticsEndpoints.getPageMetadata\n ),\n authAPIOptions,\n otherOptions,\n {\n method: analyticsEndpoints.getPageMetadata.method,\n params: { url },\n }\n );\n\n return {\n sendEvents,\n getOverview,\n getAudience,\n getContentStats,\n getExperimentResults,\n getPageMetadata,\n };\n};\n\n/**\n * Authenticated `analytics` endpoint bound to an Intlayer CMS authenticator.\n *\n * Pass an authenticator created with `createIntlayerCMS`, or omit it to use\n * the build-time configuration (`@intlayer/config/built`).\n */\nexport const analyticsEndpoint = createEndpoint(getAnalyticsAPI);\n"],"mappings":";;;;;;;;;AAqBA,MAAM,iBAAiB,EACrB,QAAQ,iBACV;;;;;AAMA,MAAM,qBAAqB;CACzB,uBAAuB;EAAE,QAAQ;EAAQ,MAAM;CAAU;CACzD,sBAAsB;EAAE,QAAQ;EAAO,MAAM;CAAY;CACzD,sBAAsB;EAAE,QAAQ;EAAO,MAAM;CAAY;CACzD,iBAAiB;EAAE,QAAQ;EAAO,MAAM;CAAiB;CACzD,sBAAsB;EAAE,QAAQ;EAAO,MAAM;CAA8B;CAC3E,iBAAiB;EAAE,QAAQ;EAAO,MAAM;CAAiB;AAC3D;AAEA,MAAa,mBACX,iBAAiC,CAAC,GAClC,mBACG;CACH,MAAM,aACJ,gBAAgB,QAAQ,cAAcA,8BAAO,cAAcC;;;;;;;CAQ7D,MAAM,aAAa,OACjB,MACA,eAA+B,CAAC,MAEhC,MAAMC,4BACJC,sDACE,YACA,gBACA,mBAAmB,qBACrB,GACA,gBACA,cACA;EACE,QAAQ,mBAAmB,sBAAsB;EACjD;CACF,CACF;;;;;CAMF,MAAM,cAAc,OAAO,eAA+B,CAAC,MACzD,MAAMD,4BACJC,sDACE,YACA,gBACA,mBAAmB,oBACrB,GACA,gBACA,cACA,EAAE,QAAQ,mBAAmB,qBAAqB,OAAO,CAC3D;;;;;;;;CASF,MAAM,cAAc,OAClB,QAAgC,IAChC,eAA+B,CAAC,MAEhC,MAAMD,4BACJC,sDACE,YACA,gBACA,mBAAmB,oBACrB,GACA,gBACA,cACA;EACE,QAAQ,mBAAmB,qBAAqB;EAChD,QAAQ,OAAO,UAAU,WAAW,EAAE,MAAM,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM;CACxE,CACF;;;;;CAMF,MAAM,kBAAkB,OAAO,eAA+B,CAAC,MAC7D,MAAMD,4BACJC,sDACE,YACA,gBACA,mBAAmB,eACrB,GACA,gBACA,cACA,EAAE,QAAQ,mBAAmB,gBAAgB,OAAO,CACtD;;;;;;CAOF,MAAM,uBAAuB,OAC3B,eACA,eAA+B,CAAC,MAEhC,MAAMD,4BACJC,sDACE,YACA,gBACA,mBAAmB,sBACnB,EAAE,cAAc,CAClB,GACA,gBACA,cACA,EAAE,QAAQ,mBAAmB,qBAAqB,OAAO,CAC3D;;;;;;CAOF,MAAM,kBAAkB,OACtB,KACA,eAA+B,CAAC,MAEhC,MAAMD,4BACJC,sDACE,YACA,gBACA,mBAAmB,eACrB,GACA,gBACA,cACA;EACE,QAAQ,mBAAmB,gBAAgB;EAC3C,QAAQ,EAAE,IAAI;CAChB,CACF;CAEF,OAAO;EACL;EACA;EACA;EACA;EACA;EACA;CACF;AACF;;;;;;;AAQA,MAAa,oBAAoBC,6CAAe,eAAe"}
1
+ {"version":3,"file":"analytics.cjs","names":["editor","BACKEND_URL","fetcher","buildRouteURL","createEndpoint"],"sources":["../../../src/getIntlayerAPI/analytics.ts"],"sourcesContent":["import type {\n AnalyticsRoutes,\n AudienceRange,\n analyticsContract,\n GetAnalyticsOverviewResult,\n GetAudienceResult,\n GetContentStatsResult,\n GetExperimentResultsResult,\n GetLiveVisitorFlowResult,\n GetPageFlowResult,\n GetPageMetadataResult,\n IngestAnalyticsBody,\n IngestAnalyticsResult,\n} from '@intlayer/backend-contract/analytics';\nimport type { RouteEndpoints } from '@intlayer/backend-contract/defineRoute';\nimport { buildRouteURL } from '@intlayer/backend-contract/defineRoute';\nimport { editor } from '@intlayer/config/built';\nimport { BACKEND_URL } from '@intlayer/config/defaultValues';\nimport type { IntlayerConfig } from '@intlayer/types/config';\nimport { createEndpoint } from '../cms/createIntlayerCMS';\nimport { type FetcherOptions, fetcher } from '../fetcher';\n\n/** Prefix of the routes, checked against the backend contract. */\nconst analyticsGroup = {\n prefix: '/api/analytics',\n} as const satisfies Pick<typeof analyticsContract, 'prefix'>;\n\n/**\n * Method and path of every route, checked against the backend contract at\n * compile time (the contract's zod schemas are never loaded).\n */\nconst analyticsEndpoints = {\n ingestAnalyticsEvents: { method: 'POST', path: '/events' },\n getAnalyticsOverview: { method: 'GET', path: '/overview' },\n getAnalyticsAudience: { method: 'GET', path: '/audience' },\n getPageFlow: { method: 'GET', path: '/page-flow' },\n getLiveVisitorFlow: {\n method: 'GET',\n path: '/audience/live/visitors/:visitorId',\n },\n getContentStats: { method: 'GET', path: '/content-stats' },\n getExperimentResults: { method: 'GET', path: '/experiments/:experimentKey' },\n getPageMetadata: { method: 'GET', path: '/page-metadata' },\n} as const satisfies RouteEndpoints<AnalyticsRoutes>;\n\nexport const getAnalyticsAPI = (\n authAPIOptions: FetcherOptions = {},\n intlayerConfig?: IntlayerConfig\n) => {\n const backendURL =\n intlayerConfig?.editor?.backendURL ?? editor.backendURL ?? BACKEND_URL;\n\n /**\n * Ingest a batch of analytics events. Public — attribution is by the\n * project's `clientId` in the body.\n * @param body - Session id, sdk version, and the collected events.\n * @returns The number of accepted events.\n */\n const sendEvents = async (\n body: IngestAnalyticsBody,\n otherOptions: FetcherOptions = {}\n ) =>\n await fetcher<IngestAnalyticsResult>(\n buildRouteURL(\n backendURL,\n analyticsGroup,\n analyticsEndpoints.ingestAnalyticsEvents\n ),\n authAPIOptions,\n otherOptions,\n {\n method: analyticsEndpoints.ingestAnalyticsEvents.method,\n body,\n }\n );\n\n /**\n * Page/locale totals for the authenticated project.\n * @returns Views grouped by url and locale.\n */\n const getOverview = async (otherOptions: FetcherOptions = {}) =>\n await fetcher<GetAnalyticsOverviewResult>(\n buildRouteURL(\n backendURL,\n analyticsGroup,\n analyticsEndpoints.getAnalyticsOverview\n ),\n authAPIOptions,\n otherOptions,\n { method: analyticsEndpoints.getAnalyticsOverview.method }\n );\n\n /**\n * Audience report: distinct visitors (today / 7d / window), page views, the\n * evolution series, and locale + country breakdowns.\n * @param range - Rolling window, either a named range (`1h`, `24h`, `7d`,\n * `30d`, `90d`, `6mo`, `1y`, `3y`) or a number of days (default 30).\n * @returns The audience statistics.\n */\n const getAudience = async (\n range: AudienceRange | number = 30,\n otherOptions: FetcherOptions = {}\n ) =>\n await fetcher<GetAudienceResult>(\n buildRouteURL(\n backendURL,\n analyticsGroup,\n analyticsEndpoints.getAnalyticsAudience\n ),\n authAPIOptions,\n otherOptions,\n {\n method: analyticsEndpoints.getAnalyticsAudience.method,\n params: typeof range === 'number' ? { days: String(range) } : { range },\n }\n );\n\n /**\n * Per-content exposure totals — \"which content is actually shown\".\n * @returns Exposures grouped by dictionary key, key path, and locale.\n */\n const getContentStats = async (otherOptions: FetcherOptions = {}) =>\n await fetcher<GetContentStatsResult>(\n buildRouteURL(\n backendURL,\n analyticsGroup,\n analyticsEndpoints.getContentStats\n ),\n authAPIOptions,\n otherOptions,\n { method: analyticsEndpoints.getContentStats.method }\n );\n\n /**\n * A/B experiment results with per-variant conversion rates and significance.\n * @param experimentKey - The experiment to evaluate.\n * @returns The experiment result set.\n */\n const getExperimentResults = async (\n experimentKey: string,\n otherOptions: FetcherOptions = {}\n ) =>\n await fetcher<GetExperimentResultsResult>(\n buildRouteURL(\n backendURL,\n analyticsGroup,\n analyticsEndpoints.getExperimentResults,\n { experimentKey }\n ),\n authAPIOptions,\n otherOptions,\n { method: analyticsEndpoints.getExperimentResults.method }\n );\n\n /**\n * Averaged page-to-page navigation flow from a starting page.\n * @param range - Rolling window of the report.\n * @param startUrl - Starting page pathname (default `/`).\n * @returns The flow steps and the links between them.\n */\n const getPageFlow = async (\n range: AudienceRange,\n startUrl: string,\n otherOptions: FetcherOptions = {}\n ) =>\n await fetcher<GetPageFlowResult>(\n buildRouteURL(backendURL, analyticsGroup, analyticsEndpoints.getPageFlow),\n authAPIOptions,\n otherOptions,\n {\n method: analyticsEndpoints.getPageFlow.method,\n params: { range, startUrl },\n }\n );\n\n /**\n * Page journey of a visitor active in the last 30 minutes.\n * @param visitorId - The visitor id from the `live` audience report.\n * @returns The visitor and its steps (`visitor: null` once it went quiet).\n */\n const getLiveVisitorFlow = async (\n visitorId: string,\n otherOptions: FetcherOptions = {}\n ) =>\n await fetcher<GetLiveVisitorFlowResult>(\n buildRouteURL(\n backendURL,\n analyticsGroup,\n analyticsEndpoints.getLiveVisitorFlow,\n { visitorId }\n ),\n authAPIOptions,\n otherOptions,\n { method: analyticsEndpoints.getLiveVisitorFlow.method }\n );\n\n /**\n * Page metadata (title and meta description) for a given url.\n * @param url - The page url to inspect.\n * @returns Title and description of the page.\n */\n const getPageMetadata = async (\n url: string,\n otherOptions: FetcherOptions = {}\n ) =>\n await fetcher<GetPageMetadataResult>(\n buildRouteURL(\n backendURL,\n analyticsGroup,\n analyticsEndpoints.getPageMetadata\n ),\n authAPIOptions,\n otherOptions,\n {\n method: analyticsEndpoints.getPageMetadata.method,\n params: { url },\n }\n );\n\n return {\n sendEvents,\n getOverview,\n getAudience,\n getLiveVisitorFlow,\n getPageFlow,\n getContentStats,\n getExperimentResults,\n getPageMetadata,\n };\n};\n\n/**\n * Authenticated `analytics` endpoint bound to an Intlayer CMS authenticator.\n *\n * Pass an authenticator created with `createIntlayerCMS`, or omit it to use\n * the build-time configuration (`@intlayer/config/built`).\n */\nexport const analyticsEndpoint = createEndpoint(getAnalyticsAPI);\n"],"mappings":";;;;;;;;;AAuBA,MAAM,iBAAiB,EACrB,QAAQ,iBACV;;;;;AAMA,MAAM,qBAAqB;CACzB,uBAAuB;EAAE,QAAQ;EAAQ,MAAM;CAAU;CACzD,sBAAsB;EAAE,QAAQ;EAAO,MAAM;CAAY;CACzD,sBAAsB;EAAE,QAAQ;EAAO,MAAM;CAAY;CACzD,aAAa;EAAE,QAAQ;EAAO,MAAM;CAAa;CACjD,oBAAoB;EAClB,QAAQ;EACR,MAAM;CACR;CACA,iBAAiB;EAAE,QAAQ;EAAO,MAAM;CAAiB;CACzD,sBAAsB;EAAE,QAAQ;EAAO,MAAM;CAA8B;CAC3E,iBAAiB;EAAE,QAAQ;EAAO,MAAM;CAAiB;AAC3D;AAEA,MAAa,mBACX,iBAAiC,CAAC,GAClC,mBACG;CACH,MAAM,aACJ,gBAAgB,QAAQ,cAAcA,8BAAO,cAAcC;;;;;;;CAQ7D,MAAM,aAAa,OACjB,MACA,eAA+B,CAAC,MAEhC,MAAMC,4BACJC,sDACE,YACA,gBACA,mBAAmB,qBACrB,GACA,gBACA,cACA;EACE,QAAQ,mBAAmB,sBAAsB;EACjD;CACF,CACF;;;;;CAMF,MAAM,cAAc,OAAO,eAA+B,CAAC,MACzD,MAAMD,4BACJC,sDACE,YACA,gBACA,mBAAmB,oBACrB,GACA,gBACA,cACA,EAAE,QAAQ,mBAAmB,qBAAqB,OAAO,CAC3D;;;;;;;;CASF,MAAM,cAAc,OAClB,QAAgC,IAChC,eAA+B,CAAC,MAEhC,MAAMD,4BACJC,sDACE,YACA,gBACA,mBAAmB,oBACrB,GACA,gBACA,cACA;EACE,QAAQ,mBAAmB,qBAAqB;EAChD,QAAQ,OAAO,UAAU,WAAW,EAAE,MAAM,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM;CACxE,CACF;;;;;CAMF,MAAM,kBAAkB,OAAO,eAA+B,CAAC,MAC7D,MAAMD,4BACJC,sDACE,YACA,gBACA,mBAAmB,eACrB,GACA,gBACA,cACA,EAAE,QAAQ,mBAAmB,gBAAgB,OAAO,CACtD;;;;;;CAOF,MAAM,uBAAuB,OAC3B,eACA,eAA+B,CAAC,MAEhC,MAAMD,4BACJC,sDACE,YACA,gBACA,mBAAmB,sBACnB,EAAE,cAAc,CAClB,GACA,gBACA,cACA,EAAE,QAAQ,mBAAmB,qBAAqB,OAAO,CAC3D;;;;;;;CAQF,MAAM,cAAc,OAClB,OACA,UACA,eAA+B,CAAC,MAEhC,MAAMD,4BACJC,sDAAc,YAAY,gBAAgB,mBAAmB,WAAW,GACxE,gBACA,cACA;EACE,QAAQ,mBAAmB,YAAY;EACvC,QAAQ;GAAE;GAAO;EAAS;CAC5B,CACF;;;;;;CAOF,MAAM,qBAAqB,OACzB,WACA,eAA+B,CAAC,MAEhC,MAAMD,4BACJC,sDACE,YACA,gBACA,mBAAmB,oBACnB,EAAE,UAAU,CACd,GACA,gBACA,cACA,EAAE,QAAQ,mBAAmB,mBAAmB,OAAO,CACzD;;;;;;CAOF,MAAM,kBAAkB,OACtB,KACA,eAA+B,CAAC,MAEhC,MAAMD,4BACJC,sDACE,YACA,gBACA,mBAAmB,eACrB,GACA,gBACA,cACA;EACE,QAAQ,mBAAmB,gBAAgB;EAC3C,QAAQ,EAAE,IAAI;CAChB,CACF;CAEF,OAAO;EACL;EACA;EACA;EACA;EACA;EACA;EACA;EACA;CACF;AACF;;;;;;;AAQA,MAAa,oBAAoBC,6CAAe,eAAe"}
@@ -1,11 +1,11 @@
1
1
  Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
2
- const require_fetcher = require('../fetcher.cjs');
3
- const require_cms_createIntlayerCMS = require('../cms/createIntlayerCMS.cjs');
2
+ const require_cms_createIntlayerCMS = require("../cms/createIntlayerCMS.cjs");
3
+ const require_fetcher = require("../fetcher.cjs");
4
4
  let _intlayer_config_built = require("@intlayer/config/built");
5
5
  let _intlayer_backend_contract_defineRoute = require("@intlayer/backend-contract/defineRoute");
6
6
  let _intlayer_config_defaultValues = require("@intlayer/config/defaultValues");
7
7
 
8
- //#region src/getIntlayerAPI/asset.ts
8
+ // src/getIntlayerAPI/asset.ts
9
9
  /** Prefix of the routes, checked against the backend contract. */
10
10
  const assetGroup = { prefix: "/api/assets" };
11
11
  /**
@@ -119,7 +119,6 @@ const getAssetAPI = (authAPIOptions = {}, intlayerConfig) => {
119
119
  */
120
120
  const assetEndpoint = require_cms_createIntlayerCMS.createEndpoint(getAssetAPI);
121
121
 
122
- //#endregion
123
122
  exports.assetEndpoint = assetEndpoint;
124
123
  exports.getAssetAPI = getAssetAPI;
125
124
  //# sourceMappingURL=asset.cjs.map
@@ -1,11 +1,11 @@
1
1
  Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
2
- const require_fetcher = require('../fetcher.cjs');
3
- const require_cms_createIntlayerCMS = require('../cms/createIntlayerCMS.cjs');
2
+ const require_cms_createIntlayerCMS = require("../cms/createIntlayerCMS.cjs");
3
+ const require_fetcher = require("../fetcher.cjs");
4
4
  let _intlayer_config_built = require("@intlayer/config/built");
5
5
  let _intlayer_backend_contract_defineRoute = require("@intlayer/backend-contract/defineRoute");
6
6
  let _intlayer_config_defaultValues = require("@intlayer/config/defaultValues");
7
7
 
8
- //#region src/getIntlayerAPI/audit.ts
8
+ // src/getIntlayerAPI/audit.ts
9
9
  /** Prefix of the routes, checked against the backend contract. */
10
10
  const scanGroup = { prefix: "/api/scan" };
11
11
  /**
@@ -177,7 +177,6 @@ const getAuditAPI = (authAPIOptions = {}, intlayerConfig) => {
177
177
  */
178
178
  const auditEndpoint = require_cms_createIntlayerCMS.createEndpoint(getAuditAPI);
179
179
 
180
- //#endregion
181
180
  exports.auditEndpoint = auditEndpoint;
182
181
  exports.getAuditAPI = getAuditAPI;
183
182
  //# sourceMappingURL=audit.cjs.map
@@ -1,11 +1,11 @@
1
1
  Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
2
- const require_fetcher = require('../fetcher.cjs');
3
- const require_cms_createIntlayerCMS = require('../cms/createIntlayerCMS.cjs');
2
+ const require_cms_createIntlayerCMS = require("../cms/createIntlayerCMS.cjs");
3
+ const require_fetcher = require("../fetcher.cjs");
4
4
  let _intlayer_config_built = require("@intlayer/config/built");
5
5
  let _intlayer_backend_contract_defineRoute = require("@intlayer/backend-contract/defineRoute");
6
6
  let _intlayer_config_defaultValues = require("@intlayer/config/defaultValues");
7
7
 
8
- //#region src/getIntlayerAPI/bitbucket.ts
8
+ // src/getIntlayerAPI/bitbucket.ts
9
9
  /** Prefix of the routes, checked against the backend contract. */
10
10
  const bitbucketGroup = { prefix: "/api/bitbucket" };
11
11
  /**
@@ -104,7 +104,6 @@ const getBitbucketAPI = (authAPIOptions = {}, intlayerConfig) => {
104
104
  */
105
105
  const bitbucketEndpoint = require_cms_createIntlayerCMS.createEndpoint(getBitbucketAPI);
106
106
 
107
- //#endregion
108
107
  exports.bitbucketEndpoint = bitbucketEndpoint;
109
108
  exports.getBitbucketAPI = getBitbucketAPI;
110
109
  //# sourceMappingURL=bitbucket.cjs.map
@@ -1,8 +1,8 @@
1
1
  Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
2
- const require_cms_createIntlayerCMS = require('../cms/createIntlayerCMS.cjs');
3
- const require_getIntlayerAPI_forge = require('./forge.cjs');
2
+ const require_cms_createIntlayerCMS = require("../cms/createIntlayerCMS.cjs");
3
+ const require_getIntlayerAPI_forge = require("./forge.cjs");
4
4
 
5
- //#region src/getIntlayerAPI/codeberg.ts
5
+ // src/getIntlayerAPI/codeberg.ts
6
6
  /** Prefix of the routes, checked against the backend contract. */
7
7
  const codebergGroup = { prefix: "/api/codeberg" };
8
8
  /** Codeberg (Forgejo) repositories of the linked account. */
@@ -15,7 +15,6 @@ const getCodebergAPI = require_getIntlayerAPI_forge.createForgeAPI(codebergGroup
15
15
  */
16
16
  const codebergEndpoint = require_cms_createIntlayerCMS.createEndpoint(getCodebergAPI);
17
17
 
18
- //#endregion
19
18
  exports.codebergEndpoint = codebergEndpoint;
20
19
  exports.getCodebergAPI = getCodebergAPI;
21
20
  //# sourceMappingURL=codeberg.cjs.map
@@ -1,11 +1,11 @@
1
1
  Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
2
- const require_fetcher = require('../fetcher.cjs');
3
- const require_cms_createIntlayerCMS = require('../cms/createIntlayerCMS.cjs');
2
+ const require_cms_createIntlayerCMS = require("../cms/createIntlayerCMS.cjs");
3
+ const require_fetcher = require("../fetcher.cjs");
4
4
  let _intlayer_config_built = require("@intlayer/config/built");
5
5
  let _intlayer_backend_contract_defineRoute = require("@intlayer/backend-contract/defineRoute");
6
6
  let _intlayer_config_defaultValues = require("@intlayer/config/defaultValues");
7
7
 
8
- //#region src/getIntlayerAPI/dictionary.ts
8
+ // src/getIntlayerAPI/dictionary.ts
9
9
  /** Prefix of the routes, checked against the backend contract. */
10
10
  const dictionaryGroup = { prefix: "/api/dictionary" };
11
11
  /**
@@ -134,7 +134,6 @@ const getDictionaryAPI = (authAPIOptions = {}, intlayerConfig) => {
134
134
  */
135
135
  const dictionaryEndpoint = require_cms_createIntlayerCMS.createEndpoint(getDictionaryAPI);
136
136
 
137
- //#endregion
138
137
  exports.dictionaryEndpoint = dictionaryEndpoint;
139
138
  exports.getDictionaryAPI = getDictionaryAPI;
140
139
  //# sourceMappingURL=dictionary.cjs.map
@@ -1,9 +1,9 @@
1
1
  Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
2
- const require_fetcher = require('../fetcher.cjs');
3
- const require_cms_createIntlayerCMS = require('../cms/createIntlayerCMS.cjs');
2
+ const require_cms_createIntlayerCMS = require("../cms/createIntlayerCMS.cjs");
3
+ const require_fetcher = require("../fetcher.cjs");
4
4
  let _intlayer_config_built = require("@intlayer/config/built");
5
5
 
6
- //#region src/getIntlayerAPI/editor.ts
6
+ // src/getIntlayerAPI/editor.ts
7
7
  const getEditorAPI = (authAPIOptions = {}, intlayerConfig) => {
8
8
  const EDITOR_API_ROUTE = `${intlayerConfig?.editor?.editorURL ?? _intlayer_config_built.editor.editorURL}/api`;
9
9
  /**
@@ -40,7 +40,6 @@ const getEditorAPI = (authAPIOptions = {}, intlayerConfig) => {
40
40
  */
41
41
  const editorEndpoint = require_cms_createIntlayerCMS.createEndpoint(getEditorAPI);
42
42
 
43
- //#endregion
44
43
  exports.editorEndpoint = editorEndpoint;
45
44
  exports.getEditorAPI = getEditorAPI;
46
45
  //# sourceMappingURL=editor.cjs.map
@@ -1,11 +1,11 @@
1
1
  Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
2
- const require_fetcher = require('../fetcher.cjs');
3
- const require_cms_createIntlayerCMS = require('../cms/createIntlayerCMS.cjs');
2
+ const require_cms_createIntlayerCMS = require("../cms/createIntlayerCMS.cjs");
3
+ const require_fetcher = require("../fetcher.cjs");
4
4
  let _intlayer_config_built = require("@intlayer/config/built");
5
5
  let _intlayer_backend_contract_defineRoute = require("@intlayer/backend-contract/defineRoute");
6
6
  let _intlayer_config_defaultValues = require("@intlayer/config/defaultValues");
7
7
 
8
- //#region src/getIntlayerAPI/environment.ts
8
+ // src/getIntlayerAPI/environment.ts
9
9
  /** Prefix of the routes, checked against the backend contract. */
10
10
  const environmentGroup = { prefix: "/api/project/environment" };
11
11
  /**
@@ -72,7 +72,6 @@ const getEnvironmentAPI = (authAPIOptions = {}, intlayerConfig) => {
72
72
  */
73
73
  const environmentEndpoint = require_cms_createIntlayerCMS.createEndpoint(getEnvironmentAPI);
74
74
 
75
- //#endregion
76
75
  exports.environmentEndpoint = environmentEndpoint;
77
76
  exports.getEnvironmentAPI = getEnvironmentAPI;
78
77
  //# sourceMappingURL=environment.cjs.map