@intuned/browser-dev 0.1.4-dev.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (212) hide show
  1. package/.babelrc +21 -0
  2. package/.eslintignore +10 -0
  3. package/.eslintrc.js +39 -0
  4. package/BROWSER_SCRIPTS_SETUP.md +84 -0
  5. package/LICENSE +43 -0
  6. package/README.md +160 -0
  7. package/RELEASE.md +60 -0
  8. package/dist/ai/export.d.js +5 -0
  9. package/dist/ai/export.d.ts +641 -0
  10. package/dist/ai/extractStructuredData.js +320 -0
  11. package/dist/ai/extractStructuredDataUsingAi.js +142 -0
  12. package/dist/ai/extractionHelpers/screenshotHelpers.js +56 -0
  13. package/dist/ai/extractionHelpers/validateSchema.js +148 -0
  14. package/dist/ai/index.d.ts +641 -0
  15. package/dist/ai/index.js +19 -0
  16. package/dist/ai/isPageLoaded.js +80 -0
  17. package/dist/ai/prompt.js +39 -0
  18. package/dist/ai/tests/testCheckAllTypesAreStrings.spec.js +137 -0
  19. package/dist/ai/tests/testExtractFromContent.spec.js +372 -0
  20. package/dist/ai/tests/testExtractStructuredData.spec.js +646 -0
  21. package/dist/ai/tests/testIsPageLoaded.spec.js +277 -0
  22. package/dist/ai/tools/index.js +48 -0
  23. package/dist/ai/types/errors.js +67 -0
  24. package/dist/ai/types/models.js +45 -0
  25. package/dist/ai/types/types.js +48 -0
  26. package/dist/ai/validators.js +167 -0
  27. package/dist/common/Logger/index.js +60 -0
  28. package/dist/common/Logger/types.js +5 -0
  29. package/dist/common/SdkError.js +50 -0
  30. package/dist/common/aiModelsValidations.js +32 -0
  31. package/dist/common/ensureBrowserScripts.js +14 -0
  32. package/dist/common/extendedTest.js +157 -0
  33. package/dist/common/extractionHelpers.js +19 -0
  34. package/dist/common/formatZodError.js +18 -0
  35. package/dist/common/fuzzySearch/fuzzySearch.test.js +250 -0
  36. package/dist/common/fuzzySearch/levenshtein-search.js +298 -0
  37. package/dist/common/fuzzySearch/utils.js +23 -0
  38. package/dist/common/getModelProvider.js +18 -0
  39. package/dist/common/getSimplifiedHtml.js +122 -0
  40. package/dist/common/hashObject.js +32 -0
  41. package/dist/common/html2markdown/convertElementToMarkdown.js +469 -0
  42. package/dist/common/html2markdown/index.js +19 -0
  43. package/dist/common/jwtTokenManager.js +57 -0
  44. package/dist/common/loadRuntime.js +16 -0
  45. package/dist/common/locatorHelpers.js +41 -0
  46. package/dist/common/matching/collectStrings.js +32 -0
  47. package/dist/common/matching/levenshtein.js +40 -0
  48. package/dist/common/matching/matching.js +317 -0
  49. package/dist/common/matching/types.js +1 -0
  50. package/dist/common/noEmpty.js +9 -0
  51. package/dist/common/saveSnapshotWithExamples.js +60 -0
  52. package/dist/common/script.js +2602 -0
  53. package/dist/common/tests/testEnsureBrowserScript.spec.js +31 -0
  54. package/dist/common/xpathMapping.js +107 -0
  55. package/dist/helpers/clickUntilExhausted.js +85 -0
  56. package/dist/helpers/downloadFile.js +125 -0
  57. package/dist/helpers/export.d.js +5 -0
  58. package/dist/helpers/export.d.ts +1220 -0
  59. package/dist/helpers/extractMarkdown.js +35 -0
  60. package/dist/helpers/filterEmptyValues.js +54 -0
  61. package/dist/helpers/gotoUrl.js +98 -0
  62. package/dist/helpers/index.d.ts +1220 -0
  63. package/dist/helpers/index.js +122 -0
  64. package/dist/helpers/processDate.js +25 -0
  65. package/dist/helpers/resolveUrl.js +64 -0
  66. package/dist/helpers/sanitizeHtml.js +74 -0
  67. package/dist/helpers/saveFileToS3.js +50 -0
  68. package/dist/helpers/scrollToLoadContent.js +57 -0
  69. package/dist/helpers/tests/testClickUntilExhausted.spec.js +372 -0
  70. package/dist/helpers/tests/testDownloadFile.spec.js +206 -0
  71. package/dist/helpers/tests/testExtractMarkdown.spec.js +290 -0
  72. package/dist/helpers/tests/testFilterEmptyValues.spec.js +151 -0
  73. package/dist/helpers/tests/testGoToUrl.spec.js +37 -0
  74. package/dist/helpers/tests/testProcessDate.spec.js +13 -0
  75. package/dist/helpers/tests/testResolveUrl.spec.js +341 -0
  76. package/dist/helpers/tests/testSanitizeHtml.spec.js +330 -0
  77. package/dist/helpers/tests/testScrollToLoadContent.spec.js +163 -0
  78. package/dist/helpers/tests/testValidateDataUsingSchema.spec.js +342 -0
  79. package/dist/helpers/tests/testWithDomSettledWait.spec.js +164 -0
  80. package/dist/helpers/tests/testWithNetworkIdleWait.spec.js +114 -0
  81. package/dist/helpers/types/Attachment.js +115 -0
  82. package/dist/helpers/types/CustomTypeRegistry.js +48 -0
  83. package/dist/helpers/types/RunEnvironment.js +18 -0
  84. package/dist/helpers/types/ValidationError.js +17 -0
  85. package/dist/helpers/types/index.js +51 -0
  86. package/dist/helpers/uploadFileToS3.js +154 -0
  87. package/dist/helpers/utils/getS3Client.js +22 -0
  88. package/dist/helpers/utils/index.js +73 -0
  89. package/dist/helpers/utils/isDownload.js +10 -0
  90. package/dist/helpers/utils/isGenerateCodeMode.js +9 -0
  91. package/dist/helpers/utils/isLocator.js +9 -0
  92. package/dist/helpers/utils/jwtTokenManager.js +18 -0
  93. package/dist/helpers/validateDataUsingSchema.js +103 -0
  94. package/dist/helpers/waitForDomSettled.js +90 -0
  95. package/dist/helpers/withNetworkSettledWait.js +91 -0
  96. package/dist/index.d.js +16 -0
  97. package/dist/index.d.ts +10 -0
  98. package/dist/index.js +16 -0
  99. package/dist/intunedServices/ApiGateway/aiApiGateway.js +143 -0
  100. package/dist/intunedServices/ApiGateway/factory.js +16 -0
  101. package/dist/intunedServices/ApiGateway/providers/Anthropic.js +26 -0
  102. package/dist/intunedServices/ApiGateway/providers/Gemini.js +29 -0
  103. package/dist/intunedServices/ApiGateway/providers/OpenAI.js +29 -0
  104. package/dist/intunedServices/ApiGateway/tests/testApiGateway.spec.js +355 -0
  105. package/dist/intunedServices/ApiGateway/types.js +11 -0
  106. package/dist/intunedServices/cache/cache.js +61 -0
  107. package/dist/intunedServices/cache/index.js +12 -0
  108. package/dist/intunedServices/cache/tests/testCache.spec.js +117 -0
  109. package/dist/optimized-extractors/common/buildExamplesPrompt.js +12 -0
  110. package/dist/optimized-extractors/common/buildImagesFromPage.js +55 -0
  111. package/dist/optimized-extractors/common/extractStructuredDataUsingClaude.js +135 -0
  112. package/dist/optimized-extractors/common/extractStructuredDataUsingGoogle.js +37 -0
  113. package/dist/optimized-extractors/common/extractStructuredDataUsingOpenAi.js +132 -0
  114. package/dist/optimized-extractors/common/extractStrucutredDataUsingAiInstance.js +122 -0
  115. package/dist/optimized-extractors/common/findTableHeaders.js +162 -0
  116. package/dist/optimized-extractors/common/index.js +55 -0
  117. package/dist/optimized-extractors/common/isTableHeaderOrFooter.js +84 -0
  118. package/dist/optimized-extractors/common/matching/matching.js +212 -0
  119. package/dist/optimized-extractors/common/matching/matching.test.js +655 -0
  120. package/dist/optimized-extractors/common/matching/types.js +18 -0
  121. package/dist/optimized-extractors/common/matching/utils.js +184 -0
  122. package/dist/optimized-extractors/common/utils.js +58 -0
  123. package/dist/optimized-extractors/export.d.js +5 -0
  124. package/dist/optimized-extractors/export.d.ts +397 -0
  125. package/dist/optimized-extractors/extractArray.js +120 -0
  126. package/dist/optimized-extractors/extractObject.js +104 -0
  127. package/dist/optimized-extractors/index.d.ts +397 -0
  128. package/dist/optimized-extractors/index.js +31 -0
  129. package/dist/optimized-extractors/listExtractionHelpers/__tests__/dynamicListExtractor.spec.js +269 -0
  130. package/dist/optimized-extractors/listExtractionHelpers/__tests__/findSetOfXpathsToCreateAnArrayExtractor.test.js +22 -0
  131. package/dist/optimized-extractors/listExtractionHelpers/__tests__/getContainerElement.test.js +21 -0
  132. package/dist/optimized-extractors/listExtractionHelpers/__tests__/partOfSameArrayXpath.test.js +42 -0
  133. package/dist/optimized-extractors/listExtractionHelpers/__tests__/testArrayExtractorFromLocator.spec.js +146 -0
  134. package/dist/optimized-extractors/listExtractionHelpers/__tests__/testArrayExtractorFromPage.spec.js +130 -0
  135. package/dist/optimized-extractors/listExtractionHelpers/__tests__/verifyThatAllXpathsArePartOfSameArray.test.js +9 -0
  136. package/dist/optimized-extractors/listExtractionHelpers/dynamicListExtractor.js +160 -0
  137. package/dist/optimized-extractors/listExtractionHelpers/errors.js +46 -0
  138. package/dist/optimized-extractors/listExtractionHelpers/getListMatches.js +14 -0
  139. package/dist/optimized-extractors/listExtractionHelpers/runAiExtraction.js +243 -0
  140. package/dist/optimized-extractors/listExtractionHelpers/typesAndSchema.js +5 -0
  141. package/dist/optimized-extractors/listExtractionHelpers/utils/extractPropertiesUsingGPTFromArray.js +277 -0
  142. package/dist/optimized-extractors/listExtractionHelpers/utils/extractStructuredListUsingAi.js +44 -0
  143. package/dist/optimized-extractors/listExtractionHelpers/utils/getListContainerXpath.js +94 -0
  144. package/dist/optimized-extractors/listExtractionHelpers/utils/getRelativeContainerXpathSelector.js +20 -0
  145. package/dist/optimized-extractors/listExtractionHelpers/utils/getSimplifiedHtmlPerListItem.js +21 -0
  146. package/dist/optimized-extractors/listExtractionHelpers/utils/tablesUtils.js +48 -0
  147. package/dist/optimized-extractors/listExtractionHelpers/utils/validateOptions.js +52 -0
  148. package/dist/optimized-extractors/models/anthropicModel.js +23 -0
  149. package/dist/optimized-extractors/models/openaiModel.js +23 -0
  150. package/dist/optimized-extractors/objectExtractionHelpers/AIExtractors.js +73 -0
  151. package/dist/optimized-extractors/objectExtractionHelpers/__tests__/checksumUtils.test.js +103 -0
  152. package/dist/optimized-extractors/objectExtractionHelpers/__tests__/testObjectExtractorFromLocator.spec.js +107 -0
  153. package/dist/optimized-extractors/objectExtractionHelpers/__tests__/testObjectExtractorFromPage.spec.js +107 -0
  154. package/dist/optimized-extractors/objectExtractionHelpers/calculateObjectExampleHash.js +28 -0
  155. package/dist/optimized-extractors/objectExtractionHelpers/captureSnapshot.js +26 -0
  156. package/dist/optimized-extractors/objectExtractionHelpers/checksumUtils.js +32 -0
  157. package/dist/optimized-extractors/objectExtractionHelpers/constants.js +7 -0
  158. package/dist/optimized-extractors/objectExtractionHelpers/dynamicObjectExtractor.js +106 -0
  159. package/dist/optimized-extractors/objectExtractionHelpers/errors.js +42 -0
  160. package/dist/optimized-extractors/objectExtractionHelpers/findDomMatches.js +54 -0
  161. package/dist/optimized-extractors/objectExtractionHelpers/getSimplifiedHtml.js +122 -0
  162. package/dist/optimized-extractors/objectExtractionHelpers/typesAndSchemas.js +5 -0
  163. package/dist/optimized-extractors/objectExtractionHelpers/validateDynamicObjectExtractorOptions.js +52 -0
  164. package/dist/optimized-extractors/types/aiModelsValidation.js +45 -0
  165. package/dist/optimized-extractors/types/errors.js +42 -0
  166. package/dist/optimized-extractors/types/jsonSchema.d.js +5 -0
  167. package/dist/optimized-extractors/types/jsonSchema.d.ts +50 -0
  168. package/dist/optimized-extractors/types/types.js +5 -0
  169. package/dist/optimized-extractors/validators.js +152 -0
  170. package/dist/types/intuned-runtime.d.js +1 -0
  171. package/dist/types/intuned-runtime.d.ts +64 -0
  172. package/dist/vite-env.d.js +1 -0
  173. package/dist/vite-env.d.ts +9 -0
  174. package/generated-docs/ai/functions/extractStructuredData.mdx +255 -0
  175. package/generated-docs/ai/functions/isPageLoaded.mdx +88 -0
  176. package/generated-docs/ai/interfaces/ArraySchema.mdx +36 -0
  177. package/generated-docs/ai/interfaces/BasicSchema.mdx +14 -0
  178. package/generated-docs/ai/interfaces/BooleanSchema.mdx +28 -0
  179. package/generated-docs/ai/interfaces/ImageBufferContentItem.mdx +16 -0
  180. package/generated-docs/ai/interfaces/ImageUrlContentItem.mdx +16 -0
  181. package/generated-docs/ai/interfaces/NumberSchema.mdx +35 -0
  182. package/generated-docs/ai/interfaces/ObjectSchema.mdx +39 -0
  183. package/generated-docs/ai/interfaces/StringSchema.mdx +35 -0
  184. package/generated-docs/ai/interfaces/TextContentItem.mdx +14 -0
  185. package/generated-docs/ai/type-aliases/ContentItem.mdx +12 -0
  186. package/generated-docs/ai/type-aliases/JsonSchema.mdx +47 -0
  187. package/generated-docs/ai/type-aliases/SUPPORTED_MODELS.mdx +85 -0
  188. package/generated-docs/helpers/functions/downloadFile.mdx +99 -0
  189. package/generated-docs/helpers/functions/extractMarkdown.mdx +56 -0
  190. package/generated-docs/helpers/functions/filterEmptyValues.mdx +51 -0
  191. package/generated-docs/helpers/functions/goToUrl.mdx +124 -0
  192. package/generated-docs/helpers/functions/processDate.mdx +55 -0
  193. package/generated-docs/helpers/functions/resolveUrl.mdx +165 -0
  194. package/generated-docs/helpers/functions/sanitizeHtml.mdx +113 -0
  195. package/generated-docs/helpers/functions/saveFileToS3.mdx +127 -0
  196. package/generated-docs/helpers/functions/scrollToLoadContent.mdx +89 -0
  197. package/generated-docs/helpers/functions/uploadFileToS3.mdx +121 -0
  198. package/generated-docs/helpers/functions/validateDataUsingSchema.mdx +90 -0
  199. package/generated-docs/helpers/functions/waitForDomSettled.mdx +91 -0
  200. package/generated-docs/helpers/functions/withNetworkSettledWait.mdx +76 -0
  201. package/generated-docs/helpers/interfaces/Attachment.mdx +56 -0
  202. package/generated-docs/helpers/interfaces/S3Configs.mdx +52 -0
  203. package/generated-docs/helpers/interfaces/SanitizeHtmlOptions.mdx +22 -0
  204. package/generated-docs/helpers/type-aliases/AttachmentType.mdx +10 -0
  205. package/generated-docs/helpers/type-aliases/FileType.mdx +61 -0
  206. package/generated-docs/helpers/type-aliases/Trigger.mdx +62 -0
  207. package/how-to-generate-docs.md +61 -0
  208. package/how-to-run-tests.md +42 -0
  209. package/intuned-runtime-setup.md +13 -0
  210. package/package.json +124 -0
  211. package/tsconfig.eslint.json +5 -0
  212. package/tsconfig.json +26 -0
@@ -0,0 +1,90 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.waitForDomSettled = void 0;
7
+ var _locatorHelpers = require("../common/locatorHelpers");
8
+ var _Logger = require("../common/Logger");
9
+ const waitForDomSettled = async options => {
10
+ const {
11
+ source,
12
+ settleDurationMs = 500,
13
+ timeoutInMs = 30000
14
+ } = options;
15
+ const settleDurationMsFloored = Math.floor(settleDurationMs);
16
+ const timeoutMs = Math.floor(timeoutInMs);
17
+ let pageObj;
18
+ let elementHandle;
19
+ if (!(0, _locatorHelpers.isPage)(source)) {
20
+ pageObj = source.page();
21
+ const handle = await source.elementHandle();
22
+ if (!handle) {
23
+ _Logger.logger.warn("Could not get element handle from locator");
24
+ return false;
25
+ }
26
+ elementHandle = handle;
27
+ } else if ((0, _locatorHelpers.isPage)(source)) {
28
+ pageObj = source;
29
+ elementHandle = await pageObj.evaluateHandle("document.documentElement");
30
+ } else {
31
+ throw new Error("Invalid state");
32
+ }
33
+ try {
34
+ const result = await pageObj.evaluate(({
35
+ target,
36
+ settleDurationMsFloored,
37
+ timeoutMs
38
+ }) => {
39
+ return new Promise((resolve, reject) => {
40
+ if (!target) {
41
+ reject(new Error("Target element not found"));
42
+ return;
43
+ }
44
+ let mutationTimer;
45
+ let settled = false;
46
+ const observer = new MutationObserver(() => {
47
+ if (settled) return;
48
+ clearTimeout(mutationTimer);
49
+ mutationTimer = window.setTimeout(() => {
50
+ settled = true;
51
+ observer.disconnect();
52
+ clearTimeout(timeoutTimer);
53
+ resolve(true);
54
+ }, settleDurationMsFloored);
55
+ });
56
+ const timeoutTimer = window.setTimeout(() => {
57
+ settled = true;
58
+ observer.disconnect();
59
+ clearTimeout(mutationTimer);
60
+ reject(new Error(`DOM timed out settling after ${timeoutMs} ms`));
61
+ }, timeoutMs);
62
+ observer.observe(target, {
63
+ childList: true,
64
+ subtree: true,
65
+ attributes: true,
66
+ characterData: true
67
+ });
68
+ mutationTimer = window.setTimeout(() => {
69
+ settled = true;
70
+ observer.disconnect();
71
+ clearTimeout(timeoutTimer);
72
+ resolve(true);
73
+ }, settleDurationMsFloored);
74
+ });
75
+ }, {
76
+ target: elementHandle,
77
+ settleDurationMsFloored,
78
+ timeoutMs
79
+ });
80
+ return result;
81
+ } catch (error) {
82
+ _Logger.logger.warn(`DOM settlement detection failed: ${error}`);
83
+ return false;
84
+ } finally {
85
+ if ((0, _locatorHelpers.isPage)(source) && elementHandle) {
86
+ await elementHandle.dispose();
87
+ }
88
+ }
89
+ };
90
+ exports.waitForDomSettled = waitForDomSettled;
@@ -0,0 +1,91 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.withNetworkSettledWait = void 0;
7
+ var _Logger = require("../common/Logger");
8
+ const withNetworkSettledWait = async (callback, options) => {
9
+ const {
10
+ page,
11
+ timeoutInMs = 30000,
12
+ maxInflightRequests = 0
13
+ } = options || {};
14
+ _Logger.logger.debug(`Page object: ${page}`);
15
+ let networkSettledResolve = null;
16
+ let networkSettledPromise = new Promise(resolve => {
17
+ networkSettledResolve = resolve;
18
+ });
19
+ let isTimeout = false;
20
+ let requestCounter = 0;
21
+ let actionDone = false;
22
+ const pendingRequests = new Set();
23
+ const maybeSettle = async () => {
24
+ if (actionDone && requestCounter <= maxInflightRequests) {
25
+ var _networkSettledResolv;
26
+ (_networkSettledResolv = networkSettledResolve) === null || _networkSettledResolv === void 0 || _networkSettledResolv();
27
+ }
28
+ };
29
+ const onRequest = request => {
30
+ requestCounter++;
31
+ pendingRequests.add(request);
32
+ };
33
+ const onRequestDone = async request => {
34
+ await new Promise(resolve => setTimeout(resolve, 0));
35
+ if (pendingRequests.has(request)) {
36
+ requestCounter--;
37
+ pendingRequests.delete(request);
38
+ await maybeSettle();
39
+ }
40
+ };
41
+ const handleRequestFinished = async req => {
42
+ await onRequestDone(req);
43
+ };
44
+ const handleRequestFailed = async req => {
45
+ await onRequestDone(req);
46
+ };
47
+ page === null || page === void 0 || page.on("request", onRequest);
48
+ page === null || page === void 0 || page.on("requestfinished", handleRequestFinished);
49
+ page === null || page === void 0 || page.on("requestfailed", handleRequestFailed);
50
+ const timeoutPromise = new Promise(resolve => {
51
+ setTimeout(() => {
52
+ var _networkSettledResolv2;
53
+ _Logger.logger.info("waiting for network to settle timed out");
54
+ isTimeout = true;
55
+ (_networkSettledResolv2 = networkSettledResolve) === null || _networkSettledResolv2 === void 0 || _networkSettledResolv2();
56
+ resolve();
57
+ }, timeoutInMs);
58
+ });
59
+ try {
60
+ const result = await callback(page);
61
+ actionDone = true;
62
+ await new Promise(resolve => setTimeout(resolve, 500));
63
+ await maybeSettle();
64
+ _Logger.logger.info("-- Start waiting for network to settle... --");
65
+ let shouldContinue = true;
66
+ while (shouldContinue) {
67
+ _Logger.logger.info(`waiting for network to settle, ${requestCounter} requests pending`);
68
+ await Promise.race([networkSettledPromise, timeoutPromise]);
69
+ await new Promise(resolve => setTimeout(resolve, 500));
70
+ if (actionDone && requestCounter <= maxInflightRequests || isTimeout) {
71
+ if (isTimeout) {
72
+ _Logger.logger.info("Exiting due to timeout, network did not settle");
73
+ } else {
74
+ _Logger.logger.info("network settled, no pending requests");
75
+ }
76
+ shouldContinue = false;
77
+ } else {
78
+ networkSettledPromise = new Promise(resolve => {
79
+ networkSettledResolve = resolve;
80
+ });
81
+ }
82
+ }
83
+ _Logger.logger.info("-- Finished waiting for network to settle --");
84
+ return result;
85
+ } finally {
86
+ page === null || page === void 0 || page.off("request", onRequest);
87
+ page === null || page === void 0 || page.off("requestfinished", handleRequestFinished);
88
+ page === null || page === void 0 || page.off("requestfailed", handleRequestFailed);
89
+ }
90
+ };
91
+ exports.withNetworkSettledWait = withNetworkSettledWait;
@@ -0,0 +1,16 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ var _export = require("./helpers/export");
7
+ Object.keys(_export).forEach(function (key) {
8
+ if (key === "default" || key === "__esModule") return;
9
+ if (key in exports && exports[key] === _export[key]) return;
10
+ Object.defineProperty(exports, key, {
11
+ enumerable: true,
12
+ get: function () {
13
+ return _export[key];
14
+ }
15
+ });
16
+ });
@@ -0,0 +1,10 @@
1
+ export * from "./helpers/export";
2
+
3
+ export type {
4
+ Attachment,
5
+ Trigger,
6
+ S3Configs,
7
+ FileType,
8
+ AttachmentType,
9
+ SanitizeHtmlOptions,
10
+ } from "./helpers/export";
package/dist/index.js ADDED
@@ -0,0 +1,16 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ var _helpers = require("./helpers");
7
+ Object.keys(_helpers).forEach(function (key) {
8
+ if (key === "default" || key === "__esModule") return;
9
+ if (key in exports && exports[key] === _helpers[key]) return;
10
+ Object.defineProperty(exports, key, {
11
+ enumerable: true,
12
+ get: function () {
13
+ return _helpers[key];
14
+ }
15
+ });
16
+ });
@@ -0,0 +1,143 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.APIGateway = void 0;
7
+ var _getModelProvider = require("../../common/getModelProvider");
8
+ var _Anthropic = require("./providers/Anthropic");
9
+ var _OpenAI = require("./providers/OpenAI");
10
+ var _Gemini = require("./providers/Gemini");
11
+ var _dotenv = require("dotenv");
12
+ var _loadRuntime = require("../../common/loadRuntime");
13
+ (0, _dotenv.config)();
14
+ class APIGateway {
15
+ useGateway = false;
16
+ isInitialized = false;
17
+ constructor(options) {
18
+ this.model = options.model;
19
+ this.apiKey = options.apiKey;
20
+ }
21
+ async ensureInitialized() {
22
+ if (this.isInitialized) {
23
+ return;
24
+ }
25
+ const provider = this.detectProvider(this.model);
26
+ if (this.apiKey) {
27
+ this.useGateway = false;
28
+ this.isInitialized = true;
29
+ return;
30
+ }
31
+ const envApiKey = this.getApiKeyFromEnv(provider);
32
+ if (envApiKey) {
33
+ this.apiKey = envApiKey;
34
+ this.useGateway = false;
35
+ this.isInitialized = true;
36
+ return;
37
+ }
38
+ await this.validateIntunedContext();
39
+ this.config = this.getDefaultConfig();
40
+ this.validateGatewayConfig(this.config);
41
+ this.useGateway = true;
42
+ this.isInitialized = true;
43
+ }
44
+ getApiKeyFromEnv(provider) {
45
+ if (provider !== null && provider !== void 0 && provider.toLowerCase().includes("anthropic")) {
46
+ return process.env.ANTHROPIC_API_KEY;
47
+ } else if (provider !== null && provider !== void 0 && provider.toLowerCase().includes("openai")) {
48
+ return process.env.OPENAI_API_KEY;
49
+ } else if (provider !== null && provider !== void 0 && provider.toLowerCase().includes("google_vertexai")) {
50
+ return process.env.GOOGLE_API_KEY;
51
+ }
52
+ return undefined;
53
+ }
54
+ async validateIntunedContext() {
55
+ try {
56
+ const getExecutionContext = await (0, _loadRuntime.loadRuntime)();
57
+ const context = getExecutionContext();
58
+ if (!context) {
59
+ throw new Error("No API key provided and not running in Intuned context. " + "Please provide an API key or ensure @intuned/runtime is installed and you're running within an Intuned workflow.");
60
+ }
61
+ } catch (error) {
62
+ throw new Error("No API key provided and not running in Intuned context. " + "Please provide an API key or ensure @intuned/runtime is installed and you're running within an Intuned workflow. " + `Error: ${error instanceof Error ? error.message : String(error)}`);
63
+ }
64
+ }
65
+ validateGatewayConfig(config) {
66
+ const missingVars = [];
67
+ if (!config.functionsDomain) {
68
+ missingVars.push("FUNCTIONS_DOMAIN");
69
+ }
70
+ if (!config.workspaceId) {
71
+ missingVars.push("INTUNED_WORKSPACE_ID");
72
+ }
73
+ if (!config.integrationId) {
74
+ missingVars.push("INTUNED_PROJECT_ID");
75
+ }
76
+ if (missingVars.length > 0) {
77
+ throw new Error(`Gateway configuration is incomplete. Missing environment variables: ${missingVars.join(", ")}. ` + "These are required when running in Intuned context without an API key.");
78
+ }
79
+ }
80
+ getDefaultConfig() {
81
+ return {
82
+ functionsDomain: process.env.FUNCTIONS_DOMAIN,
83
+ workspaceId: process.env.INTUNED_WORKSPACE_ID,
84
+ integrationId: process.env.INTUNED_PROJECT_ID || process.env.INTUNED_INTEGRATION_ID || undefined
85
+ };
86
+ }
87
+ detectProvider(model) {
88
+ const modelLower = model.toLowerCase();
89
+ return (0, _getModelProvider.getModelProvider)(modelLower);
90
+ }
91
+ buildGatewayUrl(provider) {
92
+ var _this$config$function;
93
+ if (!this.config) {
94
+ throw new Error("Gateway configuration not initialized");
95
+ }
96
+ const baseDomain = (_this$config$function = this.config.functionsDomain) === null || _this$config$function === void 0 ? void 0 : _this$config$function.replace(/\/$/, "");
97
+ return `${baseDomain}/api/${this.config.workspaceId}/functions/${this.config.integrationId}/${provider === "anthropic" ? "anthropic/v1" : provider === "google_vertexai" ? "google_vertexai/v1beta" : provider}`;
98
+ }
99
+ getModelConfig(extraHeaders) {
100
+ const provider = this.detectProvider(this.model);
101
+ if (!this.useGateway && this.apiKey) {
102
+ return {
103
+ model: this.model,
104
+ apiKey: this.apiKey,
105
+ extraHeaders,
106
+ baseUrl: undefined
107
+ };
108
+ }
109
+ const baseUrl = this.buildGatewayUrl(provider);
110
+ return {
111
+ model: this.model,
112
+ apiKey: "--THIS_VALUE_WILL_BE_REPLACED_BY_INTUNED_BE--",
113
+ extraHeaders,
114
+ baseUrl
115
+ };
116
+ }
117
+ async createProviderInstance(extraHeaders) {
118
+ await this.ensureInitialized();
119
+ const config = this.getModelConfig(extraHeaders);
120
+ const provider = this.detectProvider(this.model);
121
+ const input = {
122
+ apiKey: config.apiKey,
123
+ headers: config.extraHeaders,
124
+ model: config.model,
125
+ baseUrl: config.baseUrl
126
+ };
127
+ const providerFactories = {
128
+ anthropic: () => (0, _Anthropic.createAnthropicInstance)(input),
129
+ openai: () => (0, _OpenAI.createOpenAIInstance)(input),
130
+ google_vertexai: () => (0, _Gemini.createGoogleInstance)(input)
131
+ };
132
+ const factory = providerFactories[provider];
133
+ if (!factory) {
134
+ throw new Error(`Unsupported provider: ${provider}`);
135
+ }
136
+ return factory();
137
+ }
138
+ async getModel(extraHeaders) {
139
+ const providerInstance = await this.createProviderInstance(extraHeaders);
140
+ return providerInstance.chat(this.model);
141
+ }
142
+ }
143
+ exports.APIGateway = APIGateway;
@@ -0,0 +1,16 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.GatewayFactory = void 0;
7
+ var _aiApiGateway = require("./aiApiGateway");
8
+ class GatewayFactory {
9
+ static createAIGateway(options) {
10
+ return new _aiApiGateway.APIGateway({
11
+ apiKey: options.apiKey,
12
+ model: options.model
13
+ });
14
+ }
15
+ }
16
+ exports.GatewayFactory = GatewayFactory;
@@ -0,0 +1,26 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.createAnthropicInstance = void 0;
7
+ var _anthropic = require("@ai-sdk/anthropic");
8
+ var _jwtTokenManager = require("../../../common/jwtTokenManager");
9
+ const createAnthropicInstance = input => {
10
+ const {
11
+ apiKey,
12
+ baseUrl
13
+ } = input;
14
+ if (apiKey && baseUrl === undefined) {
15
+ return (0, _anthropic.createAnthropic)({
16
+ apiKey
17
+ });
18
+ } else {
19
+ return (0, _anthropic.createAnthropic)({
20
+ apiKey: "--THI_VALUE_WILL_BE_REPLACED_BY_INTUNED_BE--",
21
+ baseURL: baseUrl,
22
+ fetch: _jwtTokenManager.backendFunctionsTokenManager.fetchWithToken.bind(_jwtTokenManager.backendFunctionsTokenManager)
23
+ });
24
+ }
25
+ };
26
+ exports.createAnthropicInstance = createAnthropicInstance;
@@ -0,0 +1,29 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.createGoogleInstance = void 0;
7
+ var _google = require("@ai-sdk/google");
8
+ var _jwtTokenManager = require("../../../common/jwtTokenManager");
9
+ const createGoogleInstance = input => {
10
+ const {
11
+ apiKey,
12
+ headers,
13
+ baseUrl
14
+ } = input;
15
+ if (apiKey && baseUrl === undefined) {
16
+ return (0, _google.createGoogleGenerativeAI)({
17
+ apiKey,
18
+ headers
19
+ });
20
+ } else {
21
+ return (0, _google.createGoogleGenerativeAI)({
22
+ apiKey: "--THI_VALUE_WILL_BE_REPLACED_BY_INTUNED_BE--",
23
+ headers,
24
+ baseURL: baseUrl,
25
+ fetch: _jwtTokenManager.backendFunctionsTokenManager.fetchWithToken.bind(_jwtTokenManager.backendFunctionsTokenManager)
26
+ });
27
+ }
28
+ };
29
+ exports.createGoogleInstance = createGoogleInstance;
@@ -0,0 +1,29 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.createOpenAIInstance = void 0;
7
+ var _openai = require("@ai-sdk/openai");
8
+ var _jwtTokenManager = require("../../../common/jwtTokenManager");
9
+ const createOpenAIInstance = input => {
10
+ const {
11
+ apiKey,
12
+ headers,
13
+ baseUrl
14
+ } = input;
15
+ if (apiKey && baseUrl === undefined) {
16
+ return (0, _openai.createOpenAI)({
17
+ apiKey,
18
+ headers
19
+ });
20
+ } else {
21
+ return (0, _openai.createOpenAI)({
22
+ apiKey: "--THI_VALUE_WILL_BE_REPLACED_BY_INTUNED_BE--",
23
+ headers,
24
+ baseURL: baseUrl,
25
+ fetch: _jwtTokenManager.backendFunctionsTokenManager.fetchWithToken.bind(_jwtTokenManager.backendFunctionsTokenManager)
26
+ });
27
+ }
28
+ };
29
+ exports.createOpenAIInstance = createOpenAIInstance;