@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
package/dist/cjs/proxy.cjs
CHANGED
|
@@ -1,32 +1,32 @@
|
|
|
1
1
|
Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
|
|
2
|
-
const
|
|
3
|
-
const
|
|
4
|
-
const
|
|
5
|
-
const
|
|
6
|
-
const
|
|
7
|
-
const
|
|
8
|
-
const
|
|
9
|
-
const
|
|
10
|
-
const
|
|
11
|
-
const
|
|
12
|
-
const
|
|
13
|
-
const
|
|
14
|
-
const
|
|
15
|
-
const
|
|
16
|
-
const
|
|
17
|
-
const require_getIntlayerAPI_organization = require(
|
|
18
|
-
const require_getIntlayerAPI_project = require(
|
|
19
|
-
const require_getIntlayerAPI_reviewer = require(
|
|
20
|
-
const require_getIntlayerAPI_search = require(
|
|
21
|
-
const require_getIntlayerAPI_showcaseProject = require(
|
|
22
|
-
const require_getIntlayerAPI_status = require(
|
|
23
|
-
const require_getIntlayerAPI_stripe = require(
|
|
24
|
-
const require_getIntlayerAPI_tag = require(
|
|
25
|
-
const require_getIntlayerAPI_translate = require(
|
|
26
|
-
const require_getIntlayerAPI_user = require(
|
|
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
|
-
|
|
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
|
-
|
|
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(
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
package/dist/esm/fetcher.mjs
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { resolveInternalBackendUrl } from "./resolveInternalBackendUrl.mjs";
|
|
2
2
|
|
|
3
|
-
|
|
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
|
-
|
|
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
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
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
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
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
|
-
|
|
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":";;;;;;;;
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|