@intuned/browser-dev 2.2.3-unify-sdks.20

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 (195) hide show
  1. package/.babelrc +21 -0
  2. package/.eslintignore +10 -0
  3. package/.eslintrc.js +39 -0
  4. package/LICENSE +43 -0
  5. package/dist/ai-extractors/AnthropicClient/index.js +23 -0
  6. package/dist/ai-extractors/export.d.js +5 -0
  7. package/dist/ai-extractors/export.d.ts +422 -0
  8. package/dist/ai-extractors/extractStructuredData.js +79 -0
  9. package/dist/ai-extractors/extractionHelpers/extractStructuredDataUsingAi/constants.js +7 -0
  10. package/dist/ai-extractors/extractionHelpers/extractStructuredDataUsingAi/errors.js +42 -0
  11. package/dist/ai-extractors/extractionHelpers/extractStructuredDataUsingAi/extractStructuredDataUsingClaude.js +149 -0
  12. package/dist/ai-extractors/extractionHelpers/extractStructuredDataUsingAi/extractStructuredDataUsingGoogle.js +37 -0
  13. package/dist/ai-extractors/extractionHelpers/extractStructuredDataUsingAi/extractStructuredDataUsingOpenAi.js +144 -0
  14. package/dist/ai-extractors/extractionHelpers/extractStructuredDataUsingAi/extractStrucutredDataUsingAiInstance.js +123 -0
  15. package/dist/ai-extractors/extractionHelpers/extractStructuredDataUsingAi/index.js +55 -0
  16. package/dist/ai-extractors/extractionHelpers/extractStructuredDataUsingAi/isItemTableHeaderOrFooter.js +96 -0
  17. package/dist/ai-extractors/extractionHelpers/extractStructuredDataUsingAi/screenshotHelpers.js +55 -0
  18. package/dist/ai-extractors/extractionHelpers/extractStructuredDataUsingAi/types.js +5 -0
  19. package/dist/ai-extractors/extractionHelpers/extractStructuredDataUsingAi/utils.js +53 -0
  20. package/dist/ai-extractors/extractionHelpers/types.js +5 -0
  21. package/dist/ai-extractors/fileExtractors.js +176 -0
  22. package/dist/ai-extractors/index.js +31 -0
  23. package/dist/ai-extractors/jsonSchema.d.js +5 -0
  24. package/dist/ai-extractors/jsonSchema.d.ts +49 -0
  25. package/dist/ai-extractors/openAiClients/index.js +23 -0
  26. package/dist/ai-extractors/validators.js +239 -0
  27. package/dist/browser/ai/export.d.js +3 -0
  28. package/dist/browser/ai/export.d.ts +587 -0
  29. package/dist/browser/ai/extractMarkdown.js +15 -0
  30. package/dist/browser/ai/extractStructuredData.js +231 -0
  31. package/dist/browser/ai/extractStructuredDataUsingAi.js +140 -0
  32. package/dist/browser/ai/extractionHelpers/screenshotHelpers.js +55 -0
  33. package/dist/browser/ai/extractionHelpers/validateSchema.js +148 -0
  34. package/dist/browser/ai/index.d.ts +587 -0
  35. package/dist/browser/ai/index.js +19 -0
  36. package/dist/browser/ai/isPageLoaded.js +67 -0
  37. package/dist/browser/ai/prompt.js +39 -0
  38. package/dist/browser/ai/tests/testCheckAllTypesAreStrings.spec.js +143 -0
  39. package/dist/browser/ai/tests/testExtractStructuredData.spec.js +622 -0
  40. package/dist/browser/ai/tools/index.js +48 -0
  41. package/dist/browser/ai/types/errors.js +67 -0
  42. package/dist/browser/ai/types/models.js +45 -0
  43. package/dist/browser/ai/types/types.js +48 -0
  44. package/dist/browser/ai/validators.js +136 -0
  45. package/dist/common/Logger/index.js +60 -0
  46. package/dist/common/Logger/types.js +5 -0
  47. package/dist/common/SdkError.js +50 -0
  48. package/dist/common/aiModelsValidations.js +50 -0
  49. package/dist/common/browser_scripts.js +2596 -0
  50. package/dist/common/ensureBrowserScripts.js +17 -0
  51. package/dist/common/environmentVariables.js +16 -0
  52. package/dist/common/eventTracking/getAiTrackingHeaders.js +31 -0
  53. package/dist/common/eventTracking/getFileTrackingHeaders.js +23 -0
  54. package/dist/common/extendedTest.js +148 -0
  55. package/dist/common/extractionHelpers.js +19 -0
  56. package/dist/common/formatZodError.js +18 -0
  57. package/dist/common/fuzzySearch/fuzzySearch.test.js +250 -0
  58. package/dist/common/fuzzySearch/levenshtein-search.js +298 -0
  59. package/dist/common/fuzzySearch/utils.js +23 -0
  60. package/dist/common/getModelProvider.js +18 -0
  61. package/dist/common/getSimplifiedHtml.js +122 -0
  62. package/dist/common/hashObject.js +32 -0
  63. package/dist/common/html2markdown/convertElementToMarkdown.js +469 -0
  64. package/dist/common/html2markdown/index.js +19 -0
  65. package/dist/common/jwtTokenManager.js +18 -0
  66. package/dist/common/loadRuntime.js +16 -0
  67. package/dist/common/locatorHelpers.js +41 -0
  68. package/dist/common/matching/collectStrings.js +32 -0
  69. package/dist/common/matching/levenshtein.js +40 -0
  70. package/dist/common/matching/matching.js +317 -0
  71. package/dist/common/matching/types.js +1 -0
  72. package/dist/common/noEmpty.js +9 -0
  73. package/dist/common/saveSnapshotWithExamples.js +60 -0
  74. package/dist/common/tests/testEnsureBrowserScript.spec.js +31 -0
  75. package/dist/common/xpathMapping.js +107 -0
  76. package/dist/helpers/downloadFile.js +125 -0
  77. package/dist/helpers/export.d.js +1 -0
  78. package/dist/helpers/export.d.ts +1294 -0
  79. package/dist/helpers/extractMarkdown.js +35 -0
  80. package/dist/helpers/filterEmptyValues.js +54 -0
  81. package/dist/helpers/gotoUrl.js +93 -0
  82. package/dist/helpers/index.d.ts +1294 -0
  83. package/dist/helpers/index.js +115 -0
  84. package/dist/helpers/processDate.js +25 -0
  85. package/dist/helpers/resolveUrl.js +63 -0
  86. package/dist/helpers/sanitizeHtml.js +73 -0
  87. package/dist/helpers/saveFileToS3.js +46 -0
  88. package/dist/helpers/scrollToLoadContent.js +50 -0
  89. package/dist/helpers/tests/extendedTest.js +130 -0
  90. package/dist/helpers/tests/testDownloadFile.spec.js +197 -0
  91. package/dist/helpers/tests/testFilterEmptyValues.spec.js +151 -0
  92. package/dist/helpers/tests/testGoToUrl.spec.js +37 -0
  93. package/dist/helpers/tests/testIsPageLoaded.spec.js +285 -0
  94. package/dist/helpers/tests/testProcessDate.spec.js +13 -0
  95. package/dist/helpers/tests/testResolveUrl.spec.js +341 -0
  96. package/dist/helpers/tests/testSanitizeHtml.spec.js +330 -0
  97. package/dist/helpers/tests/testSimplifyHtml.spec.js +251 -0
  98. package/dist/helpers/tests/testValidateDataUsingSchema.spec.js +380 -0
  99. package/dist/helpers/tests/testWaitForDomSettled.spec.js +169 -0
  100. package/dist/helpers/tests/testWaitForNetworkIdle.spec.js +115 -0
  101. package/dist/helpers/types/Attachment.js +81 -0
  102. package/dist/helpers/types/CustomTypeRegistry.js +48 -0
  103. package/dist/helpers/types/RunEnvironment.js +18 -0
  104. package/dist/helpers/types/ValidationError.js +17 -0
  105. package/dist/helpers/types/index.js +51 -0
  106. package/dist/helpers/uploadFileToS3.js +153 -0
  107. package/dist/helpers/utils/getS3Client.js +21 -0
  108. package/dist/helpers/utils/index.js +73 -0
  109. package/dist/helpers/utils/isDownload.js +10 -0
  110. package/dist/helpers/utils/isGenerateCodeMode.js +9 -0
  111. package/dist/helpers/utils/isLocator.js +9 -0
  112. package/dist/helpers/utils/jwtTokenManager.js +18 -0
  113. package/dist/helpers/validateDataUsingSchema.js +119 -0
  114. package/dist/helpers/waitForDomSettled.js +182 -0
  115. package/dist/helpers/waitForNetworkIdle.js +191 -0
  116. package/dist/index.d.js +82 -0
  117. package/dist/index.d.ts +11 -0
  118. package/dist/index.js +84 -0
  119. package/dist/intunedServices/ApiGateway/aiApiGateway.js +87 -0
  120. package/dist/intunedServices/ApiGateway/factory.js +13 -0
  121. package/dist/intunedServices/ApiGateway/providers/Anthropic.js +26 -0
  122. package/dist/intunedServices/ApiGateway/providers/Gemini.js +29 -0
  123. package/dist/intunedServices/ApiGateway/providers/OpenAI.js +29 -0
  124. package/dist/intunedServices/ApiGateway/tests/testApiGateway.spec.js +221 -0
  125. package/dist/intunedServices/ApiGateway/types.js +11 -0
  126. package/dist/intunedServices/cache/cache.js +61 -0
  127. package/dist/intunedServices/cache/index.js +12 -0
  128. package/dist/intunedServices/cache/tests/testCache.spec.js +117 -0
  129. package/dist/optimized-extractors/common/buildExamplesPrompt.js +12 -0
  130. package/dist/optimized-extractors/common/buildImagesFromPage.js +55 -0
  131. package/dist/optimized-extractors/common/extractStructuredDataUsingClaude.js +149 -0
  132. package/dist/optimized-extractors/common/extractStructuredDataUsingGoogle.js +37 -0
  133. package/dist/optimized-extractors/common/extractStructuredDataUsingOpenAi.js +145 -0
  134. package/dist/optimized-extractors/common/extractStrucutredDataUsingAiInstance.js +122 -0
  135. package/dist/optimized-extractors/common/findTableHeaders.js +175 -0
  136. package/dist/optimized-extractors/common/index.js +55 -0
  137. package/dist/optimized-extractors/common/isTableHeaderOrFooter.js +97 -0
  138. package/dist/optimized-extractors/common/matching/matching.js +212 -0
  139. package/dist/optimized-extractors/common/matching/matching.test.js +655 -0
  140. package/dist/optimized-extractors/common/matching/types.js +18 -0
  141. package/dist/optimized-extractors/common/matching/utils.js +184 -0
  142. package/dist/optimized-extractors/common/utils.js +58 -0
  143. package/dist/optimized-extractors/export.d.js +5 -0
  144. package/dist/optimized-extractors/export.d.ts +397 -0
  145. package/dist/optimized-extractors/extractArray.js +120 -0
  146. package/dist/optimized-extractors/extractObject.js +104 -0
  147. package/dist/optimized-extractors/index.d.ts +397 -0
  148. package/dist/optimized-extractors/index.js +31 -0
  149. package/dist/optimized-extractors/listExtractionHelpers/__tests__/dynamicListExtractor.spec.js +312 -0
  150. package/dist/optimized-extractors/listExtractionHelpers/__tests__/findSetOfXpathsToCreateAnArrayExtractor.test.js +22 -0
  151. package/dist/optimized-extractors/listExtractionHelpers/__tests__/getContainerElement.test.js +21 -0
  152. package/dist/optimized-extractors/listExtractionHelpers/__tests__/partOfSameArrayXpath.test.js +42 -0
  153. package/dist/optimized-extractors/listExtractionHelpers/__tests__/verifyThatAllXpathsArePartOfSameArray.test.js +9 -0
  154. package/dist/optimized-extractors/listExtractionHelpers/dynamicListExtractor.js +152 -0
  155. package/dist/optimized-extractors/listExtractionHelpers/errors.js +46 -0
  156. package/dist/optimized-extractors/listExtractionHelpers/getListMatches.js +14 -0
  157. package/dist/optimized-extractors/listExtractionHelpers/runAiExtraction.js +240 -0
  158. package/dist/optimized-extractors/listExtractionHelpers/typesAndSchema.js +5 -0
  159. package/dist/optimized-extractors/listExtractionHelpers/utils/extractPropertiesUsingGPTFromArray.js +277 -0
  160. package/dist/optimized-extractors/listExtractionHelpers/utils/extractStructuredListUsingAi.js +44 -0
  161. package/dist/optimized-extractors/listExtractionHelpers/utils/getListContainerXpath.js +94 -0
  162. package/dist/optimized-extractors/listExtractionHelpers/utils/getRelativeContainerXpathSelector.js +20 -0
  163. package/dist/optimized-extractors/listExtractionHelpers/utils/getSimplifiedHtmlPerListItem.js +21 -0
  164. package/dist/optimized-extractors/listExtractionHelpers/utils/tablesUtils.js +48 -0
  165. package/dist/optimized-extractors/listExtractionHelpers/utils/validateOptions.js +52 -0
  166. package/dist/optimized-extractors/models/anthropicModel.js +23 -0
  167. package/dist/optimized-extractors/models/openaiModel.js +23 -0
  168. package/dist/optimized-extractors/objectExtractionHelpers/AIExtractors.js +73 -0
  169. package/dist/optimized-extractors/objectExtractionHelpers/__tests__/checksumUtils.test.js +103 -0
  170. package/dist/optimized-extractors/objectExtractionHelpers/__tests__/testObjectExtractorFromLocator.spec.js +107 -0
  171. package/dist/optimized-extractors/objectExtractionHelpers/__tests__/testObjectExtractorFromPage.spec.js +107 -0
  172. package/dist/optimized-extractors/objectExtractionHelpers/calculateObjectExampleHash.js +28 -0
  173. package/dist/optimized-extractors/objectExtractionHelpers/captureSnapshot.js +26 -0
  174. package/dist/optimized-extractors/objectExtractionHelpers/checksumUtils.js +32 -0
  175. package/dist/optimized-extractors/objectExtractionHelpers/constants.js +7 -0
  176. package/dist/optimized-extractors/objectExtractionHelpers/dynamicObjectExtractor.js +106 -0
  177. package/dist/optimized-extractors/objectExtractionHelpers/errors.js +42 -0
  178. package/dist/optimized-extractors/objectExtractionHelpers/findDomMatches.js +54 -0
  179. package/dist/optimized-extractors/objectExtractionHelpers/getSimplifiedHtml.js +122 -0
  180. package/dist/optimized-extractors/objectExtractionHelpers/typesAndSchemas.js +5 -0
  181. package/dist/optimized-extractors/objectExtractionHelpers/validateDynamicObjectExtractorOptions.js +52 -0
  182. package/dist/optimized-extractors/types/aiModelsValidation.js +45 -0
  183. package/dist/optimized-extractors/types/errors.js +42 -0
  184. package/dist/optimized-extractors/types/jsonSchema.d.js +5 -0
  185. package/dist/optimized-extractors/types/jsonSchema.d.ts +50 -0
  186. package/dist/optimized-extractors/types/types.js +5 -0
  187. package/dist/optimized-extractors/validators.js +152 -0
  188. package/dist/vite-env.d.js +1 -0
  189. package/dist/vite-env.d.ts +9 -0
  190. package/docs.md +14 -0
  191. package/how-to-run-tests.md +10 -0
  192. package/intuned-runtime-setup.md +13 -0
  193. package/package.json +124 -0
  194. package/tsconfig.eslint.json +5 -0
  195. package/tsconfig.json +26 -0
@@ -0,0 +1,73 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ Object.defineProperty(exports, "GatewayFactory", {
7
+ enumerable: true,
8
+ get: function () {
9
+ return _factory.GatewayFactory;
10
+ }
11
+ });
12
+ Object.defineProperty(exports, "compressStringSpaces", {
13
+ enumerable: true,
14
+ get: function () {
15
+ return _extractionHelpers.compressStringSpaces;
16
+ }
17
+ });
18
+ Object.defineProperty(exports, "ensureBrowserScripts", {
19
+ enumerable: true,
20
+ get: function () {
21
+ return _ensureBrowserScripts.ensureBrowserScripts;
22
+ }
23
+ });
24
+ Object.defineProperty(exports, "getS3Client", {
25
+ enumerable: true,
26
+ get: function () {
27
+ return _getS3Client.getS3Client;
28
+ }
29
+ });
30
+ Object.defineProperty(exports, "getSimplifiedHtml", {
31
+ enumerable: true,
32
+ get: function () {
33
+ return _getSimplifiedHtml.getSimplifiedHtml;
34
+ }
35
+ });
36
+ Object.defineProperty(exports, "isDownload", {
37
+ enumerable: true,
38
+ get: function () {
39
+ return _isDownload.isDownload;
40
+ }
41
+ });
42
+ Object.defineProperty(exports, "isGenerateCodeMode", {
43
+ enumerable: true,
44
+ get: function () {
45
+ return _isGenerateCodeMode.isGenerateCodeMode;
46
+ }
47
+ });
48
+ Object.defineProperty(exports, "isLocator", {
49
+ enumerable: true,
50
+ get: function () {
51
+ return _isLocator.isLocator;
52
+ }
53
+ });
54
+ Object.defineProperty(exports, "selectLocatorsUsingXpath", {
55
+ enumerable: true,
56
+ get: function () {
57
+ return _extractionHelpers.selectLocatorsUsingXpath;
58
+ }
59
+ });
60
+ Object.defineProperty(exports, "splitContainerIntoListLocators", {
61
+ enumerable: true,
62
+ get: function () {
63
+ return _extractionHelpers.splitContainerIntoListLocators;
64
+ }
65
+ });
66
+ var _isLocator = require("./isLocator");
67
+ var _isGenerateCodeMode = require("./isGenerateCodeMode");
68
+ var _factory = require("../../intunedServices/ApiGateway/factory");
69
+ var _getS3Client = require("./getS3Client");
70
+ var _isDownload = require("./isDownload");
71
+ var _ensureBrowserScripts = require("../../common/ensureBrowserScripts");
72
+ var _extractionHelpers = require("../../common/extractionHelpers");
73
+ var _getSimplifiedHtml = require("../../common/getSimplifiedHtml");
@@ -0,0 +1,10 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.isDownload = isDownload;
7
+ function isDownload(value) {
8
+ const anyValue = value;
9
+ return anyValue && typeof anyValue.delete === "function" && typeof anyValue.path === "function" && typeof anyValue.suggestedFilename === "function";
10
+ }
@@ -0,0 +1,9 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.isGenerateCodeMode = isGenerateCodeMode;
7
+ function isGenerateCodeMode() {
8
+ return process.env.MODE === "generate_code";
9
+ }
@@ -0,0 +1,9 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.isLocator = isLocator;
7
+ function isLocator(locator) {
8
+ return "count" in locator && typeof locator.count === "function";
9
+ }
@@ -0,0 +1,18 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ Object.defineProperty(exports, "backendFunctionsTokenManager", {
7
+ enumerable: true,
8
+ get: function () {
9
+ return _jwtTokenManager.backendFunctionsTokenManager;
10
+ }
11
+ });
12
+ Object.defineProperty(exports, "callBackendFunctionWithToken", {
13
+ enumerable: true,
14
+ get: function () {
15
+ return _jwtTokenManager.callBackendFunctionWithToken;
16
+ }
17
+ });
18
+ var _jwtTokenManager = require("@intuned/runtime/dist/common/jwtTokenManager");
@@ -0,0 +1,119 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.cleanData = cleanData;
7
+ exports.validateDataUsingSchema = void 0;
8
+ var _ajv = _interopRequireDefault(require("ajv"));
9
+ var _types = require("./types");
10
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
11
+ const ajv = new _ajv.default({
12
+ strict: false,
13
+ removeAdditional: false
14
+ });
15
+ ajv.addKeyword({
16
+ keyword: "x-custom-type",
17
+ schemaType: "string",
18
+ compile: () => () => true
19
+ });
20
+ const customTypeRegistry = new _types.CustomTypeRegistry();
21
+ function preprocessSchema(schema) {
22
+ if (typeof schema !== "object" || schema === null) {
23
+ return schema;
24
+ }
25
+ if (Array.isArray(schema)) {
26
+ return schema.map(item => preprocessSchema(item));
27
+ }
28
+ const processedSchema = {
29
+ ...schema
30
+ };
31
+ if (processedSchema.type && typeof processedSchema.type === "string") {
32
+ if (customTypeRegistry.isCustomType(processedSchema.type)) {
33
+ return {
34
+ type: "object",
35
+ additionalProperties: true,
36
+ "x-custom-type": processedSchema.type
37
+ };
38
+ }
39
+ }
40
+ for (const key in processedSchema) {
41
+ if (key === "properties" && typeof processedSchema[key] === "object") {
42
+ const newProperties = {};
43
+ for (const propKey in processedSchema[key]) {
44
+ newProperties[propKey] = preprocessSchema(processedSchema[key][propKey]);
45
+ }
46
+ processedSchema[key] = newProperties;
47
+ } else if (key === "items") {
48
+ processedSchema[key] = preprocessSchema(processedSchema[key]);
49
+ } else if (typeof processedSchema[key] === "object") {
50
+ processedSchema[key] = preprocessSchema(processedSchema[key]);
51
+ }
52
+ }
53
+ return processedSchema;
54
+ }
55
+ function validateCustomTypes(data, schema, path = "root") {
56
+ const errors = [];
57
+ if (typeof schema !== "object" || schema === null) {
58
+ return errors;
59
+ }
60
+ if (schema["x-custom-type"]) {
61
+ const customType = schema["x-custom-type"];
62
+ if (!customTypeRegistry.validate(customType, data)) {
63
+ errors.push(`${path} does not match custom type '${customType}'`);
64
+ }
65
+ return errors;
66
+ }
67
+ if (schema.type === "object" && schema.properties && typeof data === "object" && data !== null && !Array.isArray(data)) {
68
+ for (const [propKey, propSchema] of Object.entries(schema.properties)) {
69
+ if (Object.prototype.hasOwnProperty.call(data, propKey)) {
70
+ const propPath = path === "root" ? propKey : `${path}.${propKey}`;
71
+ errors.push(...validateCustomTypes(data[propKey], propSchema, propPath));
72
+ }
73
+ }
74
+ }
75
+ if (schema.type === "array" && schema.items && Array.isArray(data)) {
76
+ data.forEach((item, index) => {
77
+ const itemPath = `${path}[${index}]`;
78
+ errors.push(...validateCustomTypes(item, schema.items, itemPath));
79
+ });
80
+ }
81
+ return errors;
82
+ }
83
+ function cleanData(data) {
84
+ if (Array.isArray(data)) {
85
+ return data.map(item => cleanData(item));
86
+ } else if (data !== null && typeof data === "object") {
87
+ const cleaned = {};
88
+ for (const [key, value] of Object.entries(data)) {
89
+ if (value !== "" && value !== null && value !== undefined) {
90
+ cleaned[key] = cleanData(value);
91
+ }
92
+ }
93
+ return cleaned;
94
+ }
95
+ return data;
96
+ }
97
+ const validateDataUsingSchema = async input => {
98
+ const {
99
+ data,
100
+ schema
101
+ } = input;
102
+ const cleanedData = cleanData(data);
103
+ const processedSchema = preprocessSchema(schema);
104
+ const validate = ajv.compile(processedSchema);
105
+ const valid = validate(cleanedData);
106
+ const errors = [];
107
+ if (!valid) {
108
+ var _validate$errors;
109
+ const schemaErrors = ((_validate$errors = validate.errors) === null || _validate$errors === void 0 ? void 0 : _validate$errors.map(err => `${err.instancePath || "root"} ${err.message}`).filter(error => !error.includes("x-custom-type"))) || [];
110
+ errors.push(...schemaErrors);
111
+ }
112
+ const customTypeErrors = validateCustomTypes(cleanedData, processedSchema);
113
+ errors.push(...customTypeErrors);
114
+ if (errors.length > 0) {
115
+ const errorMessage = errors.join(", ") || "Unknown validation error";
116
+ throw new _types.ValidationError(`Data validation failed: ${errorMessage}`, data);
117
+ }
118
+ };
119
+ exports.validateDataUsingSchema = validateDataUsingSchema;
@@ -0,0 +1,182 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.waitForDomSettled = waitForDomSettled;
7
+ var _locatorHelpers = require("../common/locatorHelpers");
8
+ function waitForDomSettled(funcOrOptions) {
9
+ if (funcOrOptions && typeof funcOrOptions === "object" && "source" in funcOrOptions) {
10
+ const {
11
+ source,
12
+ func,
13
+ settleDuration = 0.5,
14
+ timeoutS = 30.0
15
+ } = funcOrOptions;
16
+ if (func && source) {
17
+ return waitForDomSettledCore({
18
+ source,
19
+ func,
20
+ settleDuration,
21
+ timeoutS
22
+ });
23
+ } else if (source) {
24
+ return waitForDomSettledOriginal({
25
+ source,
26
+ settleDuration,
27
+ timeoutS
28
+ });
29
+ }
30
+ }
31
+ if (funcOrOptions && typeof funcOrOptions === "function") {
32
+ const func = funcOrOptions;
33
+ const wrapper = async (...args) => {
34
+ let sourceObj = null;
35
+ for (const arg of args) {
36
+ if ((0, _locatorHelpers.isPage)(arg) || arg && typeof arg === "object" && "page" in arg) {
37
+ sourceObj = arg;
38
+ break;
39
+ }
40
+ }
41
+ if (!sourceObj) {
42
+ throw new Error("No Page or Locator object found in function arguments");
43
+ }
44
+ const funcWithArgs = async () => {
45
+ return await func(...args);
46
+ };
47
+ return await waitForDomSettledCore({
48
+ source: sourceObj,
49
+ func: funcWithArgs,
50
+ settleDuration: 0.5,
51
+ timeoutS: 30.0
52
+ });
53
+ };
54
+ return wrapper;
55
+ }
56
+ const options = funcOrOptions || {};
57
+ const {
58
+ settleDuration = 0.5,
59
+ timeoutS = 30.0
60
+ } = options;
61
+ return func => {
62
+ const wrapper = async (...args) => {
63
+ let sourceObj = null;
64
+ for (const arg of args) {
65
+ if ((0, _locatorHelpers.isPage)(arg) || arg && typeof arg === "object" && "page" in arg) {
66
+ sourceObj = arg;
67
+ break;
68
+ }
69
+ }
70
+ if (!sourceObj) {
71
+ throw new Error("No Page or Locator object found in function arguments");
72
+ }
73
+ const funcWithArgs = async () => {
74
+ return await func(...args);
75
+ };
76
+ return await waitForDomSettledCore({
77
+ source: sourceObj,
78
+ func: funcWithArgs,
79
+ settleDuration,
80
+ timeoutS
81
+ });
82
+ };
83
+ return wrapper;
84
+ };
85
+ }
86
+ async function waitForDomSettledCore(options) {
87
+ const {
88
+ source,
89
+ func,
90
+ settleDuration = 0.5,
91
+ timeoutS = 30.0
92
+ } = options;
93
+ console.debug(`Source object: ${source}`);
94
+ const result = await func();
95
+ await waitForDomSettledOriginal({
96
+ source,
97
+ settleDuration,
98
+ timeoutS
99
+ });
100
+ return result;
101
+ }
102
+ async function waitForDomSettledOriginal(options) {
103
+ const {
104
+ source,
105
+ settleDuration = 0.5,
106
+ timeoutS = 30.0
107
+ } = options;
108
+ const settleDurationMs = Math.floor(settleDuration * 1000);
109
+ const timeoutMs = Math.floor(timeoutS * 1000);
110
+ let pageObj;
111
+ let elementHandle;
112
+ if (!(0, _locatorHelpers.isPage)(source)) {
113
+ pageObj = source.page();
114
+ const handle = await source.elementHandle();
115
+ if (!handle) {
116
+ console.warn("Could not get element handle from locator");
117
+ return false;
118
+ }
119
+ elementHandle = handle;
120
+ } else if ((0, _locatorHelpers.isPage)(source)) {
121
+ pageObj = source;
122
+ elementHandle = await pageObj.evaluateHandle("document.documentElement");
123
+ } else {
124
+ throw new Error("Invalid state");
125
+ }
126
+ try {
127
+ const result = await pageObj.evaluate(({
128
+ target,
129
+ settleDurationMs,
130
+ timeoutMs
131
+ }) => {
132
+ return new Promise((resolve, reject) => {
133
+ if (!target) {
134
+ reject(new Error("Target element not found"));
135
+ return;
136
+ }
137
+ let mutationTimer;
138
+ let settled = false;
139
+ const observer = new MutationObserver(() => {
140
+ if (settled) return;
141
+ clearTimeout(mutationTimer);
142
+ mutationTimer = window.setTimeout(() => {
143
+ settled = true;
144
+ observer.disconnect();
145
+ clearTimeout(timeoutTimer);
146
+ resolve(true);
147
+ }, settleDurationMs);
148
+ });
149
+ const timeoutTimer = window.setTimeout(() => {
150
+ settled = true;
151
+ observer.disconnect();
152
+ clearTimeout(mutationTimer);
153
+ reject(new Error(`DOM timed out settling after ${timeoutMs} ms`));
154
+ }, timeoutMs);
155
+ observer.observe(target, {
156
+ childList: true,
157
+ subtree: true,
158
+ attributes: true,
159
+ characterData: true
160
+ });
161
+ mutationTimer = window.setTimeout(() => {
162
+ settled = true;
163
+ observer.disconnect();
164
+ clearTimeout(timeoutTimer);
165
+ resolve(true);
166
+ }, settleDurationMs);
167
+ });
168
+ }, {
169
+ target: elementHandle,
170
+ settleDurationMs,
171
+ timeoutMs
172
+ });
173
+ return result;
174
+ } catch (error) {
175
+ console.warn(`DOM settlement detection failed: ${error}`);
176
+ return false;
177
+ } finally {
178
+ if ((0, _locatorHelpers.isPage)(source) && elementHandle) {
179
+ await elementHandle.dispose();
180
+ }
181
+ }
182
+ }
@@ -0,0 +1,191 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.waitForNetworkIdle = waitForNetworkIdle;
7
+ var _locatorHelpers = require("../common/locatorHelpers");
8
+ function waitForNetworkIdle(funcOrOptions) {
9
+ if (funcOrOptions && typeof funcOrOptions === "object" && "page" in funcOrOptions) {
10
+ const {
11
+ page,
12
+ func,
13
+ timeoutInMs = 30000,
14
+ maxInflightRequests = 0
15
+ } = funcOrOptions;
16
+ if (!func) {
17
+ throw new Error("func parameter is required when page is provided");
18
+ }
19
+ if (!page) {
20
+ throw new Error("page parameter is required");
21
+ }
22
+ return waitForNetworkIdleCore({
23
+ page,
24
+ func,
25
+ timeoutInMs,
26
+ maxInflightRequests
27
+ });
28
+ }
29
+ if (funcOrOptions && typeof funcOrOptions === "function" && funcOrOptions.__self__ && funcOrOptions.__self__.page) {
30
+ const extractedPage = funcOrOptions.__self__.page;
31
+ if ((0, _locatorHelpers.isPage)(extractedPage)) {
32
+ return waitForNetworkIdleCore({
33
+ page: extractedPage,
34
+ func: funcOrOptions,
35
+ timeoutInMs: 30000,
36
+ maxInflightRequests: 0
37
+ });
38
+ }
39
+ }
40
+ if (funcOrOptions && typeof funcOrOptions === "function") {
41
+ const func = funcOrOptions;
42
+ const wrapper = async (...args) => {
43
+ let pageObj = null;
44
+ for (const arg of args) {
45
+ if ((0, _locatorHelpers.isPage)(arg)) {
46
+ pageObj = arg;
47
+ break;
48
+ }
49
+ }
50
+ if (!pageObj && args.length > 0 && typeof args[args.length - 1] === "object") {
51
+ const lastArg = args[args.length - 1];
52
+ if (lastArg && "page" in lastArg && (0, _locatorHelpers.isPage)(lastArg.page)) {
53
+ pageObj = lastArg.page;
54
+ }
55
+ }
56
+ if (!pageObj) {
57
+ console.error("No Page object found in function arguments");
58
+ throw new Error("No Page object found in function arguments");
59
+ }
60
+ const funcWithArgs = async () => {
61
+ return await func(...args);
62
+ };
63
+ return await waitForNetworkIdleCore({
64
+ page: pageObj,
65
+ func: funcWithArgs,
66
+ timeoutInMs: 30000,
67
+ maxInflightRequests: 0
68
+ });
69
+ };
70
+ return wrapper;
71
+ }
72
+ const options = funcOrOptions || {};
73
+ const {
74
+ timeoutInMs = 30000,
75
+ maxInflightRequests = 0
76
+ } = options;
77
+ return func => {
78
+ const wrapper = async (...args) => {
79
+ let pageObj = null;
80
+ for (const arg of args) {
81
+ if ((0, _locatorHelpers.isPage)(arg)) {
82
+ pageObj = arg;
83
+ break;
84
+ }
85
+ }
86
+ if (!pageObj && args.length > 0 && typeof args[args.length - 1] === "object") {
87
+ const lastArg = args[args.length - 1];
88
+ if (lastArg && "page" in lastArg && (0, _locatorHelpers.isPage)(lastArg.page)) {
89
+ pageObj = lastArg.page;
90
+ }
91
+ }
92
+ if (!pageObj) {
93
+ console.error("No Page object found in function arguments");
94
+ throw new Error("No Page object found in function arguments");
95
+ }
96
+ const funcWithArgs = async () => {
97
+ return await func(...args);
98
+ };
99
+ return await waitForNetworkIdleCore({
100
+ page: pageObj,
101
+ func: funcWithArgs,
102
+ timeoutInMs,
103
+ maxInflightRequests
104
+ });
105
+ };
106
+ return wrapper;
107
+ };
108
+ }
109
+ async function waitForNetworkIdleCore({
110
+ page,
111
+ func,
112
+ timeoutInMs = 30000,
113
+ maxInflightRequests = 0
114
+ }) {
115
+ console.debug(`Page object: ${page}`);
116
+ let networkSettledResolve = null;
117
+ let networkSettledPromise = new Promise(resolve => {
118
+ networkSettledResolve = resolve;
119
+ });
120
+ let isTimeout = false;
121
+ let requestCounter = 0;
122
+ let actionDone = false;
123
+ const pendingRequests = new Set();
124
+ const maybeSettle = async () => {
125
+ if (actionDone && requestCounter <= maxInflightRequests) {
126
+ var _networkSettledResolv;
127
+ (_networkSettledResolv = networkSettledResolve) === null || _networkSettledResolv === void 0 || _networkSettledResolv();
128
+ }
129
+ };
130
+ const onRequest = request => {
131
+ requestCounter++;
132
+ pendingRequests.add(request);
133
+ };
134
+ const onRequestDone = async request => {
135
+ await new Promise(resolve => setTimeout(resolve, 0));
136
+ if (pendingRequests.has(request)) {
137
+ requestCounter--;
138
+ pendingRequests.delete(request);
139
+ await maybeSettle();
140
+ }
141
+ };
142
+ const handleRequestFinished = async req => {
143
+ await onRequestDone(req);
144
+ };
145
+ const handleRequestFailed = async req => {
146
+ await onRequestDone(req);
147
+ };
148
+ page.on("request", onRequest);
149
+ page.on("requestfinished", handleRequestFinished);
150
+ page.on("requestfailed", handleRequestFailed);
151
+ const timeoutPromise = new Promise(resolve => {
152
+ setTimeout(() => {
153
+ var _networkSettledResolv2;
154
+ console.log("waiting for network to settle timed out");
155
+ isTimeout = true;
156
+ (_networkSettledResolv2 = networkSettledResolve) === null || _networkSettledResolv2 === void 0 || _networkSettledResolv2();
157
+ resolve();
158
+ }, timeoutInMs);
159
+ });
160
+ try {
161
+ const result = await func();
162
+ actionDone = true;
163
+ await new Promise(resolve => setTimeout(resolve, 500));
164
+ await maybeSettle();
165
+ console.log("-- Start waiting for network to settle... --");
166
+ let shouldContinue = true;
167
+ while (shouldContinue) {
168
+ console.log(`waiting for network to settle, ${requestCounter} requests pending`);
169
+ await Promise.race([networkSettledPromise, timeoutPromise]);
170
+ await new Promise(resolve => setTimeout(resolve, 500));
171
+ if (actionDone && requestCounter <= maxInflightRequests || isTimeout) {
172
+ if (isTimeout) {
173
+ console.log("Exiting due to timeout, network did not settle");
174
+ } else {
175
+ console.log("network settled, no pending requests");
176
+ }
177
+ shouldContinue = false;
178
+ } else {
179
+ networkSettledPromise = new Promise(resolve => {
180
+ networkSettledResolve = resolve;
181
+ });
182
+ }
183
+ }
184
+ console.log("-- Finished waiting for network to settle --");
185
+ return result;
186
+ } finally {
187
+ page.off("request", onRequest);
188
+ page.off("requestfinished", handleRequestFinished);
189
+ page.off("requestfailed", handleRequestFailed);
190
+ }
191
+ }
@@ -0,0 +1,82 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ Object.defineProperty(exports, "downloadFile", {
7
+ enumerable: true,
8
+ get: function () {
9
+ return _downloadFile.downloadFile;
10
+ }
11
+ });
12
+ Object.defineProperty(exports, "filterEmptyValues", {
13
+ enumerable: true,
14
+ get: function () {
15
+ return _filterEmptyValues.filterEmptyValues;
16
+ }
17
+ });
18
+ Object.defineProperty(exports, "goToUrl", {
19
+ enumerable: true,
20
+ get: function () {
21
+ return _gotoUrl.goToUrl;
22
+ }
23
+ });
24
+ Object.defineProperty(exports, "processDate", {
25
+ enumerable: true,
26
+ get: function () {
27
+ return _processDate.processDate;
28
+ }
29
+ });
30
+ Object.defineProperty(exports, "resolveUrl", {
31
+ enumerable: true,
32
+ get: function () {
33
+ return _resolveUrl.resolveUrl;
34
+ }
35
+ });
36
+ Object.defineProperty(exports, "sanitizeHtml", {
37
+ enumerable: true,
38
+ get: function () {
39
+ return _sanitizeHtml.sanitizeHtml;
40
+ }
41
+ });
42
+ Object.defineProperty(exports, "saveFileToS3", {
43
+ enumerable: true,
44
+ get: function () {
45
+ return _saveFileToS.saveFileToS3;
46
+ }
47
+ });
48
+ Object.defineProperty(exports, "uploadFileToS3", {
49
+ enumerable: true,
50
+ get: function () {
51
+ return _uploadFileToS.uploadFileToS3;
52
+ }
53
+ });
54
+ Object.defineProperty(exports, "validateDataUsingSchema", {
55
+ enumerable: true,
56
+ get: function () {
57
+ return _validateDataUsingSchema.validateDataUsingSchema;
58
+ }
59
+ });
60
+ Object.defineProperty(exports, "waitForDomSettled", {
61
+ enumerable: true,
62
+ get: function () {
63
+ return _waitForDomSettled.waitForDomSettled;
64
+ }
65
+ });
66
+ Object.defineProperty(exports, "waitForNetworkIdle", {
67
+ enumerable: true,
68
+ get: function () {
69
+ return _waitForNetworkIdle.waitForNetworkIdle;
70
+ }
71
+ });
72
+ var _sanitizeHtml = require("./helpers/sanitizeHtml");
73
+ var _downloadFile = require("./helpers/downloadFile");
74
+ var _saveFileToS = require("./helpers/saveFileToS3");
75
+ var _filterEmptyValues = require("./helpers/filterEmptyValues");
76
+ var _gotoUrl = require("./helpers/gotoUrl");
77
+ var _processDate = require("./helpers/processDate");
78
+ var _resolveUrl = require("./helpers/resolveUrl");
79
+ var _uploadFileToS = require("./helpers/uploadFileToS3");
80
+ var _validateDataUsingSchema = require("./helpers/validateDataUsingSchema");
81
+ var _waitForDomSettled = require("./helpers/waitForDomSettled");
82
+ var _waitForNetworkIdle = require("./helpers/waitForNetworkIdle");