@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.
- package/dist/cjs/cms/createAuthManager.cjs +2 -3
- package/dist/cjs/cms/createIntlayerCMS.cjs +2 -3
- package/dist/cjs/cms/index.cjs +2 -2
- package/dist/cjs/distantDictionary/fetchDistantDictionaries.cjs +3 -4
- package/dist/cjs/distantDictionary/fetchDistantDictionary.cjs +3 -4
- package/dist/cjs/distantDictionary/index.cjs +2 -2
- package/dist/cjs/fetcher.cjs +2 -3
- package/dist/cjs/getIntlayerAPI/ai.cjs +38 -43
- package/dist/cjs/getIntlayerAPI/ai.cjs.map +1 -1
- package/dist/cjs/getIntlayerAPI/analytics.cjs +32 -4
- package/dist/cjs/getIntlayerAPI/analytics.cjs.map +1 -1
- package/dist/cjs/getIntlayerAPI/asset.cjs +3 -4
- package/dist/cjs/getIntlayerAPI/audit.cjs +3 -4
- package/dist/cjs/getIntlayerAPI/bitbucket.cjs +3 -4
- package/dist/cjs/getIntlayerAPI/codeberg.cjs +3 -4
- package/dist/cjs/getIntlayerAPI/dictionary.cjs +3 -4
- package/dist/cjs/getIntlayerAPI/editor.cjs +3 -4
- package/dist/cjs/getIntlayerAPI/environment.cjs +3 -4
- package/dist/cjs/getIntlayerAPI/forge.cjs +2 -3
- package/dist/cjs/getIntlayerAPI/gitee.cjs +3 -4
- package/dist/cjs/getIntlayerAPI/github.cjs +3 -4
- package/dist/cjs/getIntlayerAPI/gitlab.cjs +3 -4
- package/dist/cjs/getIntlayerAPI/index.cjs +25 -26
- package/dist/cjs/getIntlayerAPI/newsletter.cjs +3 -4
- package/dist/cjs/getIntlayerAPI/oAuth.cjs +2 -3
- package/dist/cjs/getIntlayerAPI/organization.cjs +3 -4
- package/dist/cjs/getIntlayerAPI/project.cjs +3 -4
- package/dist/cjs/getIntlayerAPI/readServerSentEvents.cjs +70 -0
- package/dist/cjs/getIntlayerAPI/readServerSentEvents.cjs.map +1 -0
- package/dist/cjs/getIntlayerAPI/reviewer.cjs +3 -4
- package/dist/cjs/getIntlayerAPI/search.cjs +3 -4
- package/dist/cjs/getIntlayerAPI/showcaseProject.cjs +3 -4
- package/dist/cjs/getIntlayerAPI/status.cjs +3 -4
- package/dist/cjs/getIntlayerAPI/stripe.cjs +3 -4
- package/dist/cjs/getIntlayerAPI/tag.cjs +3 -4
- package/dist/cjs/getIntlayerAPI/translate.cjs +3 -4
- package/dist/cjs/getIntlayerAPI/user.cjs +3 -4
- package/dist/cjs/index.cjs +33 -33
- package/dist/cjs/proxy.cjs +26 -27
- package/dist/cjs/public/createPublicClient.cjs +1 -2
- package/dist/cjs/public/index.cjs +1 -1
- package/dist/cjs/resolveInternalBackendUrl.cjs +1 -2
- package/dist/esm/cms/createAuthManager.mjs +1 -2
- package/dist/esm/cms/createIntlayerCMS.mjs +1 -2
- package/dist/esm/distantDictionary/fetchDistantDictionaries.mjs +1 -2
- package/dist/esm/distantDictionary/fetchDistantDictionary.mjs +1 -2
- package/dist/esm/fetcher.mjs +1 -2
- package/dist/esm/getIntlayerAPI/ai.mjs +37 -42
- package/dist/esm/getIntlayerAPI/ai.mjs.map +1 -1
- package/dist/esm/getIntlayerAPI/analytics.mjs +31 -3
- package/dist/esm/getIntlayerAPI/analytics.mjs.map +1 -1
- package/dist/esm/getIntlayerAPI/asset.mjs +2 -3
- package/dist/esm/getIntlayerAPI/audit.mjs +2 -3
- package/dist/esm/getIntlayerAPI/bitbucket.mjs +2 -3
- package/dist/esm/getIntlayerAPI/codeberg.mjs +1 -2
- package/dist/esm/getIntlayerAPI/dictionary.mjs +2 -3
- package/dist/esm/getIntlayerAPI/editor.mjs +2 -3
- package/dist/esm/getIntlayerAPI/environment.mjs +2 -3
- package/dist/esm/getIntlayerAPI/forge.mjs +1 -2
- package/dist/esm/getIntlayerAPI/gitee.mjs +1 -2
- package/dist/esm/getIntlayerAPI/github.mjs +2 -3
- package/dist/esm/getIntlayerAPI/gitlab.mjs +2 -3
- package/dist/esm/getIntlayerAPI/index.mjs +2 -3
- package/dist/esm/getIntlayerAPI/newsletter.mjs +2 -3
- package/dist/esm/getIntlayerAPI/oAuth.mjs +1 -2
- package/dist/esm/getIntlayerAPI/organization.mjs +2 -3
- package/dist/esm/getIntlayerAPI/project.mjs +2 -3
- package/dist/esm/getIntlayerAPI/readServerSentEvents.mjs +68 -0
- package/dist/esm/getIntlayerAPI/readServerSentEvents.mjs.map +1 -0
- package/dist/esm/getIntlayerAPI/reviewer.mjs +2 -3
- package/dist/esm/getIntlayerAPI/search.mjs +2 -3
- package/dist/esm/getIntlayerAPI/showcaseProject.mjs +2 -3
- package/dist/esm/getIntlayerAPI/status.mjs +2 -3
- package/dist/esm/getIntlayerAPI/stripe.mjs +2 -3
- package/dist/esm/getIntlayerAPI/tag.mjs +2 -3
- package/dist/esm/getIntlayerAPI/translate.mjs +2 -3
- package/dist/esm/getIntlayerAPI/user.mjs +2 -3
- package/dist/esm/index.mjs +7 -7
- package/dist/esm/proxy.mjs +2 -3
- package/dist/esm/public/createPublicClient.mjs +1 -2
- package/dist/esm/resolveInternalBackendUrl.mjs +1 -2
- package/dist/types/cms/createAuthManager.d.ts +1 -2
- package/dist/types/cms/createAuthManager.d.ts.map +1 -1
- package/dist/types/cms/createIntlayerCMS.d.ts +0 -2
- package/dist/types/cms/createIntlayerCMS.d.ts.map +1 -1
- package/dist/types/distantDictionary/fetchDistantDictionaries.d.ts +1 -3
- package/dist/types/distantDictionary/fetchDistantDictionaries.d.ts.map +1 -1
- package/dist/types/distantDictionary/fetchDistantDictionary.d.ts +1 -3
- package/dist/types/distantDictionary/fetchDistantDictionary.d.ts.map +1 -1
- package/dist/types/fetcher.d.ts +0 -2
- package/dist/types/fetcher.d.ts.map +1 -1
- package/dist/types/getIntlayerAPI/ai.d.ts +9 -5
- package/dist/types/getIntlayerAPI/ai.d.ts.map +1 -1
- package/dist/types/getIntlayerAPI/analytics.d.ts +7 -5
- package/dist/types/getIntlayerAPI/analytics.d.ts.map +1 -1
- package/dist/types/getIntlayerAPI/asset.d.ts +2 -4
- package/dist/types/getIntlayerAPI/asset.d.ts.map +1 -1
- package/dist/types/getIntlayerAPI/audit.d.ts +2 -4
- package/dist/types/getIntlayerAPI/audit.d.ts.map +1 -1
- package/dist/types/getIntlayerAPI/bitbucket.d.ts +2 -4
- package/dist/types/getIntlayerAPI/bitbucket.d.ts.map +1 -1
- package/dist/types/getIntlayerAPI/codeberg.d.ts +42 -6
- package/dist/types/getIntlayerAPI/codeberg.d.ts.map +1 -1
- package/dist/types/getIntlayerAPI/dictionary.d.ts +3 -5
- package/dist/types/getIntlayerAPI/dictionary.d.ts.map +1 -1
- package/dist/types/getIntlayerAPI/editor.d.ts +2 -4
- package/dist/types/getIntlayerAPI/editor.d.ts.map +1 -1
- package/dist/types/getIntlayerAPI/environment.d.ts +2 -4
- package/dist/types/getIntlayerAPI/environment.d.ts.map +1 -1
- package/dist/types/getIntlayerAPI/forge.d.ts +21 -4
- package/dist/types/getIntlayerAPI/forge.d.ts.map +1 -1
- package/dist/types/getIntlayerAPI/gitee.d.ts +42 -6
- package/dist/types/getIntlayerAPI/gitee.d.ts.map +1 -1
- package/dist/types/getIntlayerAPI/github.d.ts +2 -4
- package/dist/types/getIntlayerAPI/github.d.ts.map +1 -1
- package/dist/types/getIntlayerAPI/gitlab.d.ts +2 -4
- package/dist/types/getIntlayerAPI/gitlab.d.ts.map +1 -1
- package/dist/types/getIntlayerAPI/index.d.ts +2 -3
- package/dist/types/getIntlayerAPI/index.d.ts.map +1 -1
- package/dist/types/getIntlayerAPI/newsletter.d.ts +2 -4
- package/dist/types/getIntlayerAPI/newsletter.d.ts.map +1 -1
- package/dist/types/getIntlayerAPI/oAuth.d.ts +0 -2
- package/dist/types/getIntlayerAPI/oAuth.d.ts.map +1 -1
- package/dist/types/getIntlayerAPI/organization.d.ts +2 -4
- package/dist/types/getIntlayerAPI/organization.d.ts.map +1 -1
- package/dist/types/getIntlayerAPI/project.d.ts +3 -5
- package/dist/types/getIntlayerAPI/project.d.ts.map +1 -1
- package/dist/types/getIntlayerAPI/readServerSentEvents.d.ts +18 -0
- package/dist/types/getIntlayerAPI/readServerSentEvents.d.ts.map +1 -0
- package/dist/types/getIntlayerAPI/reviewer.d.ts +2 -4
- package/dist/types/getIntlayerAPI/reviewer.d.ts.map +1 -1
- package/dist/types/getIntlayerAPI/search.d.ts +2 -4
- package/dist/types/getIntlayerAPI/search.d.ts.map +1 -1
- package/dist/types/getIntlayerAPI/showcaseProject.d.ts +2 -4
- package/dist/types/getIntlayerAPI/showcaseProject.d.ts.map +1 -1
- package/dist/types/getIntlayerAPI/status.d.ts +2 -4
- package/dist/types/getIntlayerAPI/status.d.ts.map +1 -1
- package/dist/types/getIntlayerAPI/stripe.d.ts +2 -4
- package/dist/types/getIntlayerAPI/stripe.d.ts.map +1 -1
- package/dist/types/getIntlayerAPI/tag.d.ts +2 -4
- package/dist/types/getIntlayerAPI/tag.d.ts.map +1 -1
- package/dist/types/getIntlayerAPI/translate.d.ts +2 -4
- package/dist/types/getIntlayerAPI/translate.d.ts.map +1 -1
- package/dist/types/getIntlayerAPI/user.d.ts +2 -4
- package/dist/types/getIntlayerAPI/user.d.ts.map +1 -1
- package/dist/types/index.d.ts +5 -5
- package/dist/types/proxy.d.ts +0 -2
- package/dist/types/proxy.d.ts.map +1 -1
- package/dist/types/public/createPublicClient.d.ts +1 -3
- package/dist/types/public/createPublicClient.d.ts.map +1 -1
- package/dist/types/resolveInternalBackendUrl.d.ts +0 -2
- package/dist/types/resolveInternalBackendUrl.d.ts.map +1 -1
- package/dist/types/types.d.ts +2 -2
- package/package.json +110 -110
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
|
|
2
|
-
const require_getIntlayerAPI_oAuth = require(
|
|
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
|
-
|
|
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(
|
|
2
|
+
const require_cms_createAuthManager = require("./createAuthManager.cjs");
|
|
3
3
|
let _intlayer_config_built = require("@intlayer/config/built");
|
|
4
4
|
|
|
5
|
-
|
|
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
|
package/dist/cjs/cms/index.cjs
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
|
|
2
|
-
const require_cms_createAuthManager = require(
|
|
3
|
-
const require_cms_createIntlayerCMS = require(
|
|
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(
|
|
3
|
-
const require_getIntlayerAPI_dictionary = require(
|
|
2
|
+
const require_cms_createIntlayerCMS = require("../cms/createIntlayerCMS.cjs");
|
|
3
|
+
const require_getIntlayerAPI_dictionary = require("../getIntlayerAPI/dictionary.cjs");
|
|
4
4
|
|
|
5
|
-
|
|
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(
|
|
3
|
-
const require_getIntlayerAPI_dictionary = require(
|
|
2
|
+
const require_cms_createIntlayerCMS = require("../cms/createIntlayerCMS.cjs");
|
|
3
|
+
const require_getIntlayerAPI_dictionary = require("../getIntlayerAPI/dictionary.cjs");
|
|
4
4
|
|
|
5
|
-
|
|
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(
|
|
3
|
-
const require_distantDictionary_fetchDistantDictionary = require(
|
|
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;
|
package/dist/cjs/fetcher.cjs
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
|
|
2
|
-
const require_resolveInternalBackendUrl = require(
|
|
2
|
+
const require_resolveInternalBackendUrl = require("./resolveInternalBackendUrl.cjs");
|
|
3
3
|
|
|
4
|
-
|
|
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
|
|
3
|
-
const
|
|
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
|
-
|
|
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
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
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
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
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":"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"}
|
|
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
|
|
3
|
-
const
|
|
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
|
-
|
|
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":";;;;;;;;;
|
|
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
|
|
3
|
-
const
|
|
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
|
-
|
|
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
|
|
3
|
-
const
|
|
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
|
-
|
|
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
|
|
3
|
-
const
|
|
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
|
-
|
|
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(
|
|
3
|
-
const require_getIntlayerAPI_forge = require(
|
|
2
|
+
const require_cms_createIntlayerCMS = require("../cms/createIntlayerCMS.cjs");
|
|
3
|
+
const require_getIntlayerAPI_forge = require("./forge.cjs");
|
|
4
4
|
|
|
5
|
-
|
|
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
|
|
3
|
-
const
|
|
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
|
-
|
|
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
|
|
3
|
-
const
|
|
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
|
-
|
|
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
|
|
3
|
-
const
|
|
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
|
-
|
|
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
|