@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,32 +1,32 @@
1
1
  Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
2
- const require_getIntlayerAPI_oAuth = require('./getIntlayerAPI/oAuth.cjs');
3
- const require_cms_createIntlayerCMS = require('./cms/createIntlayerCMS.cjs');
4
- const require_getIntlayerAPI_ai = require('./getIntlayerAPI/ai.cjs');
5
- const require_getIntlayerAPI_analytics = require('./getIntlayerAPI/analytics.cjs');
6
- const require_getIntlayerAPI_asset = require('./getIntlayerAPI/asset.cjs');
7
- const require_getIntlayerAPI_audit = require('./getIntlayerAPI/audit.cjs');
8
- const require_getIntlayerAPI_bitbucket = require('./getIntlayerAPI/bitbucket.cjs');
9
- const require_getIntlayerAPI_codeberg = require('./getIntlayerAPI/codeberg.cjs');
10
- const require_getIntlayerAPI_dictionary = require('./getIntlayerAPI/dictionary.cjs');
11
- const require_getIntlayerAPI_editor = require('./getIntlayerAPI/editor.cjs');
12
- const require_getIntlayerAPI_environment = require('./getIntlayerAPI/environment.cjs');
13
- const require_getIntlayerAPI_gitee = require('./getIntlayerAPI/gitee.cjs');
14
- const require_getIntlayerAPI_github = require('./getIntlayerAPI/github.cjs');
15
- const require_getIntlayerAPI_gitlab = require('./getIntlayerAPI/gitlab.cjs');
16
- const require_getIntlayerAPI_newsletter = require('./getIntlayerAPI/newsletter.cjs');
17
- const require_getIntlayerAPI_organization = require('./getIntlayerAPI/organization.cjs');
18
- const require_getIntlayerAPI_project = require('./getIntlayerAPI/project.cjs');
19
- const require_getIntlayerAPI_reviewer = require('./getIntlayerAPI/reviewer.cjs');
20
- const require_getIntlayerAPI_search = require('./getIntlayerAPI/search.cjs');
21
- const require_getIntlayerAPI_showcaseProject = require('./getIntlayerAPI/showcaseProject.cjs');
22
- const require_getIntlayerAPI_status = require('./getIntlayerAPI/status.cjs');
23
- const require_getIntlayerAPI_stripe = require('./getIntlayerAPI/stripe.cjs');
24
- const require_getIntlayerAPI_tag = require('./getIntlayerAPI/tag.cjs');
25
- const require_getIntlayerAPI_translate = require('./getIntlayerAPI/translate.cjs');
26
- const require_getIntlayerAPI_user = require('./getIntlayerAPI/user.cjs');
2
+ const require_cms_createIntlayerCMS = require("./cms/createIntlayerCMS.cjs");
3
+ const require_getIntlayerAPI_ai = require("./getIntlayerAPI/ai.cjs");
4
+ const require_getIntlayerAPI_analytics = require("./getIntlayerAPI/analytics.cjs");
5
+ const require_getIntlayerAPI_asset = require("./getIntlayerAPI/asset.cjs");
6
+ const require_getIntlayerAPI_audit = require("./getIntlayerAPI/audit.cjs");
7
+ const require_getIntlayerAPI_bitbucket = require("./getIntlayerAPI/bitbucket.cjs");
8
+ const require_getIntlayerAPI_codeberg = require("./getIntlayerAPI/codeberg.cjs");
9
+ const require_getIntlayerAPI_dictionary = require("./getIntlayerAPI/dictionary.cjs");
10
+ const require_getIntlayerAPI_editor = require("./getIntlayerAPI/editor.cjs");
11
+ const require_getIntlayerAPI_environment = require("./getIntlayerAPI/environment.cjs");
12
+ const require_getIntlayerAPI_gitee = require("./getIntlayerAPI/gitee.cjs");
13
+ const require_getIntlayerAPI_github = require("./getIntlayerAPI/github.cjs");
14
+ const require_getIntlayerAPI_gitlab = require("./getIntlayerAPI/gitlab.cjs");
15
+ const require_getIntlayerAPI_newsletter = require("./getIntlayerAPI/newsletter.cjs");
16
+ const require_getIntlayerAPI_oAuth = require("./getIntlayerAPI/oAuth.cjs");
17
+ const require_getIntlayerAPI_organization = require("./getIntlayerAPI/organization.cjs");
18
+ const require_getIntlayerAPI_project = require("./getIntlayerAPI/project.cjs");
19
+ const require_getIntlayerAPI_reviewer = require("./getIntlayerAPI/reviewer.cjs");
20
+ const require_getIntlayerAPI_search = require("./getIntlayerAPI/search.cjs");
21
+ const require_getIntlayerAPI_showcaseProject = require("./getIntlayerAPI/showcaseProject.cjs");
22
+ const require_getIntlayerAPI_status = require("./getIntlayerAPI/status.cjs");
23
+ const require_getIntlayerAPI_stripe = require("./getIntlayerAPI/stripe.cjs");
24
+ const require_getIntlayerAPI_tag = require("./getIntlayerAPI/tag.cjs");
25
+ const require_getIntlayerAPI_translate = require("./getIntlayerAPI/translate.cjs");
26
+ const require_getIntlayerAPI_user = require("./getIntlayerAPI/user.cjs");
27
27
  let _intlayer_config_built = require("@intlayer/config/built");
28
28
 
29
- //#region src/proxy.ts
29
+ // src/proxy.ts
30
30
  const sectionFactories = {
31
31
  asset: require_getIntlayerAPI_asset.getAssetAPI,
32
32
  organization: require_getIntlayerAPI_organization.getOrganizationAPI,
@@ -96,6 +96,5 @@ const getIntlayerAPIProxy = (baseAuthOptions = {}, intlayerConfig = { editor: _i
96
96
  });
97
97
  };
98
98
 
99
- //#endregion
100
99
  exports.getIntlayerAPIProxy = getIntlayerAPIProxy;
101
100
  //# sourceMappingURL=proxy.cjs.map
@@ -1,7 +1,7 @@
1
1
  Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
2
2
  let _intlayer_config_built = require("@intlayer/config/built");
3
3
 
4
- //#region src/public/createPublicClient.ts
4
+ // src/public/createPublicClient.ts
5
5
  /**
6
6
  * Browser-safe Intlayer client, authenticated without any confidential
7
7
  * credential.
@@ -138,6 +138,5 @@ const createPublicClient = ({ intlayerConfig } = {}) => {
138
138
  };
139
139
  };
140
140
 
141
- //#endregion
142
141
  exports.createPublicClient = createPublicClient;
143
142
  //# sourceMappingURL=createPublicClient.cjs.map
@@ -1,4 +1,4 @@
1
1
  Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
2
- const require_public_createPublicClient = require('./createPublicClient.cjs');
2
+ const require_public_createPublicClient = require("./createPublicClient.cjs");
3
3
 
4
4
  exports.createPublicClient = require_public_createPublicClient.createPublicClient;
@@ -1,7 +1,7 @@
1
1
  Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
2
2
  let _intlayer_config_built = require("@intlayer/config/built");
3
3
 
4
- //#region src/resolveInternalBackendUrl.ts
4
+ // src/resolveInternalBackendUrl.ts
5
5
  /**
6
6
  * Server-only override for the backend origin.
7
7
  *
@@ -45,7 +45,6 @@ const resolveInternalBackendUrl = (url, publicBackendUrl = _intlayer_config_buil
45
45
  }
46
46
  };
47
47
 
48
- //#endregion
49
48
  exports.BACKEND_INTERNAL_URL_ENVIRONMENT_VARIABLE = BACKEND_INTERNAL_URL_ENVIRONMENT_VARIABLE;
50
49
  exports.resolveInternalBackendUrl = resolveInternalBackendUrl;
51
50
  //# sourceMappingURL=resolveInternalBackendUrl.cjs.map
@@ -3,7 +3,7 @@ import { editor } from "@intlayer/config/built";
3
3
  import { getEditorClientSecret } from "@intlayer/config/secrets";
4
4
  import { defu } from "defu";
5
5
 
6
- //#region src/cms/createAuthManager.ts
6
+ // src/cms/createAuthManager.ts
7
7
  const ONE_MINUTE_MS = 6e4;
8
8
  /**
9
9
  * Process-wide token states, keyed by backend URL and credentials. Build
@@ -152,6 +152,5 @@ const createAuthManager = (intlayerConfig = { editor }, options = {}) => {
152
152
  };
153
153
  };
154
154
 
155
- //#endregion
156
155
  export { clearAccessTokenCache, createAuthManager };
157
156
  //# sourceMappingURL=createAuthManager.mjs.map
@@ -1,7 +1,7 @@
1
1
  import { createAuthManager } from "./createAuthManager.mjs";
2
2
  import { editor } from "@intlayer/config/built";
3
3
 
4
- //#region src/cms/createIntlayerCMS.ts
4
+ // src/cms/createIntlayerCMS.ts
5
5
  /**
6
6
  * Creates an Intlayer CMS authenticator handling authentication automatically
7
7
  * (OAuth2 `client_credentials`, or a CLI session token).
@@ -57,6 +57,5 @@ const createIntlayerCMS = (intlayerConfig = { editor }, options = {}) => createA
57
57
  */
58
58
  const createEndpoint = (factory, options) => (cms = createIntlayerCMS()) => cms.bindSection(factory, options);
59
59
 
60
- //#endregion
61
60
  export { createEndpoint, createIntlayerCMS };
62
61
  //# sourceMappingURL=createIntlayerCMS.mjs.map
@@ -1,7 +1,7 @@
1
1
  import { createIntlayerCMS } from "../cms/createIntlayerCMS.mjs";
2
2
  import { dictionaryEndpoint } from "../getIntlayerAPI/dictionary.mjs";
3
3
 
4
- //#region src/distantDictionary/fetchDistantDictionaries.ts
4
+ // src/distantDictionary/fetchDistantDictionaries.ts
5
5
  /**
6
6
  * Fetch distant dictionary
7
7
  */
@@ -16,6 +16,5 @@ const fetchDistantDictionaries = async (intlayerConfig) => {
16
16
  }
17
17
  };
18
18
 
19
- //#endregion
20
19
  export { fetchDistantDictionaries };
21
20
  //# sourceMappingURL=fetchDistantDictionaries.mjs.map
@@ -1,7 +1,7 @@
1
1
  import { createIntlayerCMS } from "../cms/createIntlayerCMS.mjs";
2
2
  import { dictionaryEndpoint } from "../getIntlayerAPI/dictionary.mjs";
3
3
 
4
- //#region src/distantDictionary/fetchDistantDictionary.ts
4
+ // src/distantDictionary/fetchDistantDictionary.ts
5
5
  /**
6
6
  * Fetch distant dictionary
7
7
  */
@@ -18,6 +18,5 @@ const fetchDistantDictionary = async (dictionaryKey, intlayerConfig) => {
18
18
  }
19
19
  };
20
20
 
21
- //#endregion
22
21
  export { fetchDistantDictionary };
23
22
  //# sourceMappingURL=fetchDistantDictionary.mjs.map
@@ -1,6 +1,6 @@
1
1
  import { resolveInternalBackendUrl } from "./resolveInternalBackendUrl.mjs";
2
2
 
3
- //#region src/fetcher.ts
3
+ // src/fetcher.ts
4
4
  /**
5
5
  * Error thrown when the backend answers with a non-ok response.
6
6
  *
@@ -144,6 +144,5 @@ const fetcher = async (url, ...options) => {
144
144
  return await response.json();
145
145
  };
146
146
 
147
- //#endregion
148
147
  export { FetcherError, fetcher, fetcherOptions };
149
148
  //# sourceMappingURL=fetcher.mjs.map
@@ -1,10 +1,11 @@
1
- import { fetcher } from "../fetcher.mjs";
2
1
  import { createEndpoint } from "../cms/createIntlayerCMS.mjs";
2
+ import { fetcher } from "../fetcher.mjs";
3
+ import { readServerSentEvents } from "./readServerSentEvents.mjs";
3
4
  import { editor } from "@intlayer/config/built";
4
5
  import { buildRouteURL } from "@intlayer/backend-contract/defineRoute";
5
6
  import { BACKEND_URL } from "@intlayer/config/defaultValues";
6
7
 
7
- //#region src/getIntlayerAPI/ai.ts
8
+ // src/getIntlayerAPI/ai.ts
8
9
  /** Prefix of the routes, checked against the backend contract. */
9
10
  const aiGroup = { prefix: "/api/ai" };
10
11
  /**
@@ -55,6 +56,14 @@ const aiEndpoints = {
55
56
  getAIStats: {
56
57
  method: "GET",
57
58
  path: "/stats"
59
+ },
60
+ getAICredits: {
61
+ method: "GET",
62
+ path: "/credits"
63
+ },
64
+ getAICreditUsage: {
65
+ method: "GET",
66
+ path: "/credits/usage"
58
67
  }
59
68
  };
60
69
  const getAiAPI = (authAPIOptions = {}, intlayerConfig) => {
@@ -134,7 +143,7 @@ const getAiAPI = (authAPIOptions = {}, intlayerConfig) => {
134
143
  */
135
144
  const askDocQuestion = async (body, otherOptions = {}) => {
136
145
  if (!body) return;
137
- const { onMessage, onDone, ...rest } = body;
146
+ const { onMessage, onReasoning, onDone, ...rest } = body;
138
147
  const abortController = new AbortController();
139
148
  try {
140
149
  const response = await fetch(buildRouteURL(backendURL, aiGroup, aiEndpoints.ask), {
@@ -166,24 +175,11 @@ const getAiAPI = (authAPIOptions = {}, intlayerConfig) => {
166
175
  }
167
176
  throw new Error(errorMessage);
168
177
  }
169
- const reader = response.body?.getReader();
170
- if (!reader) throw new Error("No reader available");
171
- const decoder = new TextDecoder();
172
- let buffer = "";
173
- while (true) {
174
- const { done, value } = await reader.read();
175
- if (done) break;
176
- buffer += decoder.decode(value, { stream: true });
177
- const lines = buffer.split("\n");
178
- buffer = lines.pop() ?? "";
179
- for (const line of lines) if (line.startsWith("data: ")) try {
180
- const data = JSON.parse(line.slice(6));
181
- if (data.chunk) onMessage?.(data.chunk);
182
- if (data.done && data.response) onDone?.(data.response);
183
- } catch (e) {
184
- console.error("Failed to parse SSE data:", e);
185
- }
186
- }
178
+ await readServerSentEvents(response, (data) => {
179
+ if (data.reasoning) onReasoning?.(data.reasoning);
180
+ if (data.chunk) onMessage?.(data.chunk);
181
+ if (data.done && data.response) onDone?.(data.response);
182
+ });
187
183
  } catch (error) {
188
184
  console.error("Error in askDocQuestion:", error);
189
185
  throw error;
@@ -223,25 +219,11 @@ const getAiAPI = (authAPIOptions = {}, intlayerConfig) => {
223
219
  }
224
220
  throw new Error(errorMessage);
225
221
  }
226
- const reader = response.body?.getReader();
227
- if (!reader) throw new Error("No reader available");
228
- const decoder = new TextDecoder();
229
- let buffer = "";
230
- while (true) {
231
- const { done, value } = await reader.read();
232
- if (done) break;
233
- buffer += decoder.decode(value, { stream: true });
234
- const lines = buffer.split("\n");
235
- buffer = lines.pop() ?? "";
236
- for (const line of lines) if (line.startsWith("data: ")) try {
237
- const data = JSON.parse(line.slice(6));
238
- if (data.chunk) onMessage?.(data.chunk);
239
- if (data.action) onAction?.(data.action);
240
- if (data.done && data.response) onDone?.(data.response);
241
- } catch (e) {
242
- console.error("Failed to parse SSE data:", e);
243
- }
244
- }
222
+ await readServerSentEvents(response, (data) => {
223
+ if (data.chunk) onMessage?.(data.chunk);
224
+ if (data.action) onAction?.(data.action);
225
+ if (data.done && data.response) onDone?.(data.response);
226
+ });
245
227
  } catch (error) {
246
228
  console.error("Error in chat:", error);
247
229
  throw error;
@@ -263,6 +245,18 @@ const getAiAPI = (authAPIOptions = {}, intlayerConfig) => {
263
245
  * project.
264
246
  */
265
247
  const getAIStats = async (otherOptions = {}) => await fetcher(buildRouteURL(backendURL, aiGroup, aiEndpoints.getAIStats), authAPIOptions, otherOptions, { method: aiEndpoints.getAIStats.method });
248
+ /**
249
+ * Retrieves the AI credit balance of the selected organization for the
250
+ * current monthly period.
251
+ */
252
+ const getAICredits = async (otherOptions = {}) => await fetcher(buildRouteURL(backendURL, aiGroup, aiEndpoints.getAICredits), authAPIOptions, otherOptions, { method: aiEndpoints.getAICredits.method });
253
+ /**
254
+ * Retrieves the day-by-day AI credit usage of the selected organization.
255
+ */
256
+ const getAICreditUsage = async (params, otherOptions = {}) => await fetcher(buildRouteURL(backendURL, aiGroup, aiEndpoints.getAICreditUsage), authAPIOptions, otherOptions, {
257
+ method: aiEndpoints.getAICreditUsage.method,
258
+ params
259
+ });
266
260
  return {
267
261
  customQuery,
268
262
  translateJSON,
@@ -274,7 +268,9 @@ const getAiAPI = (authAPIOptions = {}, intlayerConfig) => {
274
268
  chat,
275
269
  autocomplete,
276
270
  getDiscussions,
277
- getAIStats
271
+ getAIStats,
272
+ getAICredits,
273
+ getAICreditUsage
278
274
  };
279
275
  };
280
276
  /**
@@ -285,6 +281,5 @@ const getAiAPI = (authAPIOptions = {}, intlayerConfig) => {
285
281
  */
286
282
  const aiEndpoint = createEndpoint(getAiAPI);
287
283
 
288
- //#endregion
289
284
  export { aiEndpoint, getAiAPI };
290
285
  //# sourceMappingURL=ai.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"ai.mjs","names":[],"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":"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"}
1
+ {"version":3,"file":"ai.mjs","names":[],"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,10 +1,10 @@
1
- import { fetcher } from "../fetcher.mjs";
2
1
  import { createEndpoint } from "../cms/createIntlayerCMS.mjs";
2
+ import { fetcher } from "../fetcher.mjs";
3
3
  import { editor } from "@intlayer/config/built";
4
4
  import { buildRouteURL } from "@intlayer/backend-contract/defineRoute";
5
5
  import { BACKEND_URL } from "@intlayer/config/defaultValues";
6
6
 
7
- //#region src/getIntlayerAPI/analytics.ts
7
+ // src/getIntlayerAPI/analytics.ts
8
8
  /** Prefix of the routes, checked against the backend contract. */
9
9
  const analyticsGroup = { prefix: "/api/analytics" };
10
10
  /**
@@ -24,6 +24,14 @@ const analyticsEndpoints = {
24
24
  method: "GET",
25
25
  path: "/audience"
26
26
  },
27
+ getPageFlow: {
28
+ method: "GET",
29
+ path: "/page-flow"
30
+ },
31
+ getLiveVisitorFlow: {
32
+ method: "GET",
33
+ path: "/audience/live/visitors/:visitorId"
34
+ },
27
35
  getContentStats: {
28
36
  method: "GET",
29
37
  path: "/content-stats"
@@ -77,6 +85,25 @@ const getAnalyticsAPI = (authAPIOptions = {}, intlayerConfig) => {
77
85
  */
78
86
  const getExperimentResults = async (experimentKey, otherOptions = {}) => await fetcher(buildRouteURL(backendURL, analyticsGroup, analyticsEndpoints.getExperimentResults, { experimentKey }), authAPIOptions, otherOptions, { method: analyticsEndpoints.getExperimentResults.method });
79
87
  /**
88
+ * Averaged page-to-page navigation flow from a starting page.
89
+ * @param range - Rolling window of the report.
90
+ * @param startUrl - Starting page pathname (default `/`).
91
+ * @returns The flow steps and the links between them.
92
+ */
93
+ const getPageFlow = async (range, startUrl, otherOptions = {}) => await fetcher(buildRouteURL(backendURL, analyticsGroup, analyticsEndpoints.getPageFlow), authAPIOptions, otherOptions, {
94
+ method: analyticsEndpoints.getPageFlow.method,
95
+ params: {
96
+ range,
97
+ startUrl
98
+ }
99
+ });
100
+ /**
101
+ * Page journey of a visitor active in the last 30 minutes.
102
+ * @param visitorId - The visitor id from the `live` audience report.
103
+ * @returns The visitor and its steps (`visitor: null` once it went quiet).
104
+ */
105
+ const getLiveVisitorFlow = async (visitorId, otherOptions = {}) => await fetcher(buildRouteURL(backendURL, analyticsGroup, analyticsEndpoints.getLiveVisitorFlow, { visitorId }), authAPIOptions, otherOptions, { method: analyticsEndpoints.getLiveVisitorFlow.method });
106
+ /**
80
107
  * Page metadata (title and meta description) for a given url.
81
108
  * @param url - The page url to inspect.
82
109
  * @returns Title and description of the page.
@@ -89,6 +116,8 @@ const getAnalyticsAPI = (authAPIOptions = {}, intlayerConfig) => {
89
116
  sendEvents,
90
117
  getOverview,
91
118
  getAudience,
119
+ getLiveVisitorFlow,
120
+ getPageFlow,
92
121
  getContentStats,
93
122
  getExperimentResults,
94
123
  getPageMetadata
@@ -102,6 +131,5 @@ const getAnalyticsAPI = (authAPIOptions = {}, intlayerConfig) => {
102
131
  */
103
132
  const analyticsEndpoint = createEndpoint(getAnalyticsAPI);
104
133
 
105
- //#endregion
106
134
  export { analyticsEndpoint, getAnalyticsAPI };
107
135
  //# sourceMappingURL=analytics.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"analytics.mjs","names":[],"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,cAAc,OAAO,cAAc;;;;;;;CAQ7D,MAAM,aAAa,OACjB,MACA,eAA+B,CAAC,MAEhC,MAAM,QACJ,cACE,YACA,gBACA,mBAAmB,qBACrB,GACA,gBACA,cACA;EACE,QAAQ,mBAAmB,sBAAsB;EACjD;CACF,CACF;;;;;CAMF,MAAM,cAAc,OAAO,eAA+B,CAAC,MACzD,MAAM,QACJ,cACE,YACA,gBACA,mBAAmB,oBACrB,GACA,gBACA,cACA,EAAE,QAAQ,mBAAmB,qBAAqB,OAAO,CAC3D;;;;;;;;CASF,MAAM,cAAc,OAClB,QAAgC,IAChC,eAA+B,CAAC,MAEhC,MAAM,QACJ,cACE,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,MAAM,QACJ,cACE,YACA,gBACA,mBAAmB,eACrB,GACA,gBACA,cACA,EAAE,QAAQ,mBAAmB,gBAAgB,OAAO,CACtD;;;;;;CAOF,MAAM,uBAAuB,OAC3B,eACA,eAA+B,CAAC,MAEhC,MAAM,QACJ,cACE,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,MAAM,QACJ,cACE,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,oBAAoB,eAAe,eAAe"}
1
+ {"version":3,"file":"analytics.mjs","names":[],"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,cAAc,OAAO,cAAc;;;;;;;CAQ7D,MAAM,aAAa,OACjB,MACA,eAA+B,CAAC,MAEhC,MAAM,QACJ,cACE,YACA,gBACA,mBAAmB,qBACrB,GACA,gBACA,cACA;EACE,QAAQ,mBAAmB,sBAAsB;EACjD;CACF,CACF;;;;;CAMF,MAAM,cAAc,OAAO,eAA+B,CAAC,MACzD,MAAM,QACJ,cACE,YACA,gBACA,mBAAmB,oBACrB,GACA,gBACA,cACA,EAAE,QAAQ,mBAAmB,qBAAqB,OAAO,CAC3D;;;;;;;;CASF,MAAM,cAAc,OAClB,QAAgC,IAChC,eAA+B,CAAC,MAEhC,MAAM,QACJ,cACE,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,MAAM,QACJ,cACE,YACA,gBACA,mBAAmB,eACrB,GACA,gBACA,cACA,EAAE,QAAQ,mBAAmB,gBAAgB,OAAO,CACtD;;;;;;CAOF,MAAM,uBAAuB,OAC3B,eACA,eAA+B,CAAC,MAEhC,MAAM,QACJ,cACE,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,MAAM,QACJ,cAAc,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,MAAM,QACJ,cACE,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,MAAM,QACJ,cACE,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,oBAAoB,eAAe,eAAe"}
@@ -1,10 +1,10 @@
1
- import { fetcher } from "../fetcher.mjs";
2
1
  import { createEndpoint } from "../cms/createIntlayerCMS.mjs";
2
+ import { fetcher } from "../fetcher.mjs";
3
3
  import { editor } from "@intlayer/config/built";
4
4
  import { buildRouteURL } from "@intlayer/backend-contract/defineRoute";
5
5
  import { BACKEND_URL } from "@intlayer/config/defaultValues";
6
6
 
7
- //#region src/getIntlayerAPI/asset.ts
7
+ // src/getIntlayerAPI/asset.ts
8
8
  /** Prefix of the routes, checked against the backend contract. */
9
9
  const assetGroup = { prefix: "/api/assets" };
10
10
  /**
@@ -118,6 +118,5 @@ const getAssetAPI = (authAPIOptions = {}, intlayerConfig) => {
118
118
  */
119
119
  const assetEndpoint = createEndpoint(getAssetAPI);
120
120
 
121
- //#endregion
122
121
  export { assetEndpoint, getAssetAPI };
123
122
  //# sourceMappingURL=asset.mjs.map
@@ -1,10 +1,10 @@
1
- import { fetcher } from "../fetcher.mjs";
2
1
  import { createEndpoint } from "../cms/createIntlayerCMS.mjs";
2
+ import { fetcher } from "../fetcher.mjs";
3
3
  import { editor } from "@intlayer/config/built";
4
4
  import { buildRouteURL } from "@intlayer/backend-contract/defineRoute";
5
5
  import { BACKEND_URL } from "@intlayer/config/defaultValues";
6
6
 
7
- //#region src/getIntlayerAPI/audit.ts
7
+ // src/getIntlayerAPI/audit.ts
8
8
  /** Prefix of the routes, checked against the backend contract. */
9
9
  const scanGroup = { prefix: "/api/scan" };
10
10
  /**
@@ -176,6 +176,5 @@ const getAuditAPI = (authAPIOptions = {}, intlayerConfig) => {
176
176
  */
177
177
  const auditEndpoint = createEndpoint(getAuditAPI);
178
178
 
179
- //#endregion
180
179
  export { auditEndpoint, getAuditAPI };
181
180
  //# sourceMappingURL=audit.mjs.map
@@ -1,10 +1,10 @@
1
- import { fetcher } from "../fetcher.mjs";
2
1
  import { createEndpoint } from "../cms/createIntlayerCMS.mjs";
2
+ import { fetcher } from "../fetcher.mjs";
3
3
  import { editor } from "@intlayer/config/built";
4
4
  import { buildRouteURL } from "@intlayer/backend-contract/defineRoute";
5
5
  import { BACKEND_URL } from "@intlayer/config/defaultValues";
6
6
 
7
- //#region src/getIntlayerAPI/bitbucket.ts
7
+ // src/getIntlayerAPI/bitbucket.ts
8
8
  /** Prefix of the routes, checked against the backend contract. */
9
9
  const bitbucketGroup = { prefix: "/api/bitbucket" };
10
10
  /**
@@ -103,6 +103,5 @@ const getBitbucketAPI = (authAPIOptions = {}, intlayerConfig) => {
103
103
  */
104
104
  const bitbucketEndpoint = createEndpoint(getBitbucketAPI);
105
105
 
106
- //#endregion
107
106
  export { bitbucketEndpoint, getBitbucketAPI };
108
107
  //# sourceMappingURL=bitbucket.mjs.map
@@ -1,7 +1,7 @@
1
1
  import { createEndpoint } from "../cms/createIntlayerCMS.mjs";
2
2
  import { createForgeAPI } from "./forge.mjs";
3
3
 
4
- //#region src/getIntlayerAPI/codeberg.ts
4
+ // src/getIntlayerAPI/codeberg.ts
5
5
  /** Prefix of the routes, checked against the backend contract. */
6
6
  const codebergGroup = { prefix: "/api/codeberg" };
7
7
  /** Codeberg (Forgejo) repositories of the linked account. */
@@ -14,6 +14,5 @@ const getCodebergAPI = createForgeAPI(codebergGroup);
14
14
  */
15
15
  const codebergEndpoint = createEndpoint(getCodebergAPI);
16
16
 
17
- //#endregion
18
17
  export { codebergEndpoint, getCodebergAPI };
19
18
  //# sourceMappingURL=codeberg.mjs.map
@@ -1,10 +1,10 @@
1
- import { fetcher } from "../fetcher.mjs";
2
1
  import { createEndpoint } from "../cms/createIntlayerCMS.mjs";
2
+ import { fetcher } from "../fetcher.mjs";
3
3
  import { editor } from "@intlayer/config/built";
4
4
  import { buildRouteURL } from "@intlayer/backend-contract/defineRoute";
5
5
  import { BACKEND_URL } from "@intlayer/config/defaultValues";
6
6
 
7
- //#region src/getIntlayerAPI/dictionary.ts
7
+ // src/getIntlayerAPI/dictionary.ts
8
8
  /** Prefix of the routes, checked against the backend contract. */
9
9
  const dictionaryGroup = { prefix: "/api/dictionary" };
10
10
  /**
@@ -133,6 +133,5 @@ const getDictionaryAPI = (authAPIOptions = {}, intlayerConfig) => {
133
133
  */
134
134
  const dictionaryEndpoint = createEndpoint(getDictionaryAPI);
135
135
 
136
- //#endregion
137
136
  export { dictionaryEndpoint, getDictionaryAPI };
138
137
  //# sourceMappingURL=dictionary.mjs.map