donobu 2.7.0 → 2.9.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 (127) hide show
  1. package/dist/assets/generated/parameter-schemas.json +32 -0
  2. package/dist/assets/generated/version +1 -1
  3. package/dist/bindings/FocusPage.d.ts.map +1 -1
  4. package/dist/bindings/FocusPage.js.map +1 -1
  5. package/dist/bindings/PageInteractionTracker.d.ts +1 -1
  6. package/dist/bindings/PageInteractionTracker.d.ts.map +1 -1
  7. package/dist/bindings/PageInteractionTracker.js +1 -1
  8. package/dist/bindings/PageInteractionTracker.js.map +1 -1
  9. package/dist/bindings/ToggleDonobuAnnotations.d.ts +18 -0
  10. package/dist/bindings/ToggleDonobuAnnotations.d.ts.map +1 -0
  11. package/dist/bindings/ToggleDonobuAnnotations.js +29 -0
  12. package/dist/bindings/ToggleDonobuAnnotations.js.map +1 -0
  13. package/dist/clients/GoogleGptClient.d.ts.map +1 -1
  14. package/dist/clients/GoogleGptClient.js +34 -32
  15. package/dist/clients/GoogleGptClient.js.map +1 -1
  16. package/dist/envVars.d.ts +5 -5
  17. package/dist/envVars.d.ts.map +1 -1
  18. package/dist/envVars.js +5 -5
  19. package/dist/envVars.js.map +1 -1
  20. package/dist/esm/assets/generated/parameter-schemas.json +32 -0
  21. package/dist/esm/assets/generated/version +1 -1
  22. package/dist/esm/bindings/FocusPage.d.ts.map +1 -1
  23. package/dist/esm/bindings/FocusPage.js.map +1 -1
  24. package/dist/esm/bindings/PageInteractionTracker.d.ts +1 -1
  25. package/dist/esm/bindings/PageInteractionTracker.d.ts.map +1 -1
  26. package/dist/esm/bindings/PageInteractionTracker.js +1 -1
  27. package/dist/esm/bindings/PageInteractionTracker.js.map +1 -1
  28. package/dist/esm/bindings/ToggleDonobuAnnotations.d.ts +18 -0
  29. package/dist/esm/bindings/ToggleDonobuAnnotations.d.ts.map +1 -0
  30. package/dist/esm/bindings/ToggleDonobuAnnotations.js +29 -0
  31. package/dist/esm/bindings/ToggleDonobuAnnotations.js.map +1 -0
  32. package/dist/esm/clients/GoogleGptClient.d.ts.map +1 -1
  33. package/dist/esm/clients/GoogleGptClient.js +34 -32
  34. package/dist/esm/clients/GoogleGptClient.js.map +1 -1
  35. package/dist/esm/envVars.d.ts +5 -5
  36. package/dist/esm/envVars.d.ts.map +1 -1
  37. package/dist/esm/envVars.js +5 -5
  38. package/dist/esm/envVars.js.map +1 -1
  39. package/dist/esm/main.d.ts.map +1 -1
  40. package/dist/esm/main.js +1 -9
  41. package/dist/esm/main.js.map +1 -1
  42. package/dist/esm/managers/CodeGenerator.d.ts.map +1 -1
  43. package/dist/esm/managers/CodeGenerator.js +19 -4
  44. package/dist/esm/managers/CodeGenerator.js.map +1 -1
  45. package/dist/esm/managers/DonobuFlow.d.ts +10 -1
  46. package/dist/esm/managers/DonobuFlow.d.ts.map +1 -1
  47. package/dist/esm/managers/DonobuFlow.js +78 -8
  48. package/dist/esm/managers/DonobuFlow.js.map +1 -1
  49. package/dist/esm/managers/DonobuFlowsManager.d.ts +1 -1
  50. package/dist/esm/managers/DonobuFlowsManager.d.ts.map +1 -1
  51. package/dist/esm/managers/DonobuFlowsManager.js +14 -5
  52. package/dist/esm/managers/DonobuFlowsManager.js.map +1 -1
  53. package/dist/esm/managers/TestFileUpdater.d.ts +56 -0
  54. package/dist/esm/managers/TestFileUpdater.d.ts.map +1 -0
  55. package/dist/esm/managers/TestFileUpdater.js +224 -0
  56. package/dist/esm/managers/TestFileUpdater.js.map +1 -0
  57. package/dist/esm/models/BrowserFramework.d.ts +8 -0
  58. package/dist/esm/models/BrowserFramework.d.ts.map +1 -1
  59. package/dist/esm/models/BrowserFramework.js +118 -17
  60. package/dist/esm/models/BrowserFramework.js.map +1 -1
  61. package/dist/esm/models/BrowserStorageState.d.ts +4 -0
  62. package/dist/esm/models/BrowserStorageState.d.ts.map +1 -1
  63. package/dist/esm/playwrightTestExtensions.d.ts +1 -1
  64. package/dist/esm/playwrightTestExtensions.d.ts.map +1 -1
  65. package/dist/esm/playwrightTestExtensions.js +171 -27
  66. package/dist/esm/playwrightTestExtensions.js.map +1 -1
  67. package/dist/esm/tools/DetectBrokenLinksTool.d.ts.map +1 -1
  68. package/dist/esm/tools/DetectBrokenLinksTool.js +34 -18
  69. package/dist/esm/tools/DetectBrokenLinksTool.js.map +1 -1
  70. package/dist/esm/tools/GoToWebpageTool.d.ts.map +1 -1
  71. package/dist/esm/tools/GoToWebpageTool.js +5 -1
  72. package/dist/esm/tools/GoToWebpageTool.js.map +1 -1
  73. package/dist/esm/utils/JsonUtils.d.ts.map +1 -1
  74. package/dist/esm/utils/JsonUtils.js +70 -10
  75. package/dist/esm/utils/JsonUtils.js.map +1 -1
  76. package/dist/esm/utils/MiscUtils.d.ts +10 -0
  77. package/dist/esm/utils/MiscUtils.d.ts.map +1 -1
  78. package/dist/esm/utils/MiscUtils.js +54 -0
  79. package/dist/esm/utils/MiscUtils.js.map +1 -1
  80. package/dist/esm/utils/PlaywrightUtils.d.ts.map +1 -1
  81. package/dist/esm/utils/PlaywrightUtils.js +1 -4
  82. package/dist/esm/utils/PlaywrightUtils.js.map +1 -1
  83. package/dist/main.d.ts.map +1 -1
  84. package/dist/main.js +1 -9
  85. package/dist/main.js.map +1 -1
  86. package/dist/managers/CodeGenerator.d.ts.map +1 -1
  87. package/dist/managers/CodeGenerator.js +19 -4
  88. package/dist/managers/CodeGenerator.js.map +1 -1
  89. package/dist/managers/DonobuFlow.d.ts +10 -1
  90. package/dist/managers/DonobuFlow.d.ts.map +1 -1
  91. package/dist/managers/DonobuFlow.js +78 -8
  92. package/dist/managers/DonobuFlow.js.map +1 -1
  93. package/dist/managers/DonobuFlowsManager.d.ts +1 -1
  94. package/dist/managers/DonobuFlowsManager.d.ts.map +1 -1
  95. package/dist/managers/DonobuFlowsManager.js +14 -5
  96. package/dist/managers/DonobuFlowsManager.js.map +1 -1
  97. package/dist/managers/TestFileUpdater.d.ts +56 -0
  98. package/dist/managers/TestFileUpdater.d.ts.map +1 -0
  99. package/dist/managers/TestFileUpdater.js +224 -0
  100. package/dist/managers/TestFileUpdater.js.map +1 -0
  101. package/dist/models/BrowserFramework.d.ts +8 -0
  102. package/dist/models/BrowserFramework.d.ts.map +1 -1
  103. package/dist/models/BrowserFramework.js +118 -17
  104. package/dist/models/BrowserFramework.js.map +1 -1
  105. package/dist/models/BrowserStorageState.d.ts +4 -0
  106. package/dist/models/BrowserStorageState.d.ts.map +1 -1
  107. package/dist/playwrightTestExtensions.d.ts +1 -1
  108. package/dist/playwrightTestExtensions.d.ts.map +1 -1
  109. package/dist/playwrightTestExtensions.js +171 -27
  110. package/dist/playwrightTestExtensions.js.map +1 -1
  111. package/dist/tools/DetectBrokenLinksTool.d.ts.map +1 -1
  112. package/dist/tools/DetectBrokenLinksTool.js +34 -18
  113. package/dist/tools/DetectBrokenLinksTool.js.map +1 -1
  114. package/dist/tools/GoToWebpageTool.d.ts.map +1 -1
  115. package/dist/tools/GoToWebpageTool.js +5 -1
  116. package/dist/tools/GoToWebpageTool.js.map +1 -1
  117. package/dist/utils/JsonUtils.d.ts.map +1 -1
  118. package/dist/utils/JsonUtils.js +70 -10
  119. package/dist/utils/JsonUtils.js.map +1 -1
  120. package/dist/utils/MiscUtils.d.ts +10 -0
  121. package/dist/utils/MiscUtils.d.ts.map +1 -1
  122. package/dist/utils/MiscUtils.js +54 -0
  123. package/dist/utils/MiscUtils.js.map +1 -1
  124. package/dist/utils/PlaywrightUtils.d.ts.map +1 -1
  125. package/dist/utils/PlaywrightUtils.js +1 -4
  126. package/dist/utils/PlaywrightUtils.js.map +1 -1
  127. package/package.json +2 -4
@@ -1 +1 @@
1
- {"version":3,"file":"BrowserFramework.d.ts","sourceRoot":"","sources":["../../../src/models/BrowserFramework.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,OAAO,EACP,cAAc,EAGf,MAAM,YAAY,CAAC;AAKpB,OAAO,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AACxD,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAE5D,OAAO,EAA0B,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAIxE,qBAAa,gBAAgB;aAUT,aAAa,EAAE,aAAa;aAC5B,OAAO,EAAE,OAAO;aAChB,cAAc,EAAE,cAAc;IAC9C,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAC;IAZnC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,mBAAmB,CAAsB;IAQjE,OAAO;IAOP;;;OAGG;IACU,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAuCnC;;;;;;;OAOG;WACW,mBAAmB,IAAI,GAAG,CAAC,MAAM,EAAE,aAAa,CAAC;WAY3C,MAAM,CACxB,aAAa,EAAE,aAAa,EAC5B,SAAS,EAAE,MAAM,EACjB,YAAY,CAAC,EAAE,mBAAmB,GACjC,OAAO,CAAC,gBAAgB,CAAC;IA2C5B;;;;OAIG;mBACkB,gBAAgB;IA6BrC;;;OAGG;mBACkB,SAAS;IAiF9B;;;;;;;;;OASG;mBACkB,cAAc;IA2BnC;;;;OAIG;mBACkB,2BAA2B;IAsChD,OAAO,CAAC,MAAM,CAAC,kBAAkB;CAYlC"}
1
+ {"version":3,"file":"BrowserFramework.d.ts","sourceRoot":"","sources":["../../../src/models/BrowserFramework.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,OAAO,EACP,cAAc,EAGf,MAAM,YAAY,CAAC;AAIpB,OAAO,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AACxD,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAE5D,OAAO,EAA0B,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAIxE,qBAAa,gBAAgB;aAIT,aAAa,EAAE,aAAa;aAC5B,OAAO,EAAE,OAAO;aAChB,cAAc,EAAE,cAAc;IAC9C,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAC;IANnC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,mBAAmB,CAAsB;IAEjE,OAAO;IAOP;;;OAGG;IACU,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IA2CnC;;;;;;;OAOG;WACW,mBAAmB,IAAI,GAAG,CAAC,MAAM,EAAE,aAAa,CAAC;WAY3C,MAAM,CACxB,aAAa,EAAE,aAAa,EAC5B,SAAS,EAAE,MAAM,EACjB,YAAY,CAAC,EAAE,mBAAmB,GACjC,OAAO,CAAC,gBAAgB,CAAC;IA6D5B;;;;;OAKG;IACU,sBAAsB,IAAI,OAAO,CAAC,mBAAmB,CAAC;IA6EnE;;;;OAIG;mBACkB,gBAAgB;IA6BrC;;;OAGG;mBACkB,SAAS;IAiF9B;;;;;;;;;OASG;mBACkB,cAAc;IA2BnC;;;;OAIG;mBACkB,2BAA2B;IAsChD,OAAO,CAAC,MAAM,CAAC,kBAAkB;mBAaZ,oCAAoC;CA0C1D"}
@@ -4,8 +4,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
6
  exports.BrowserFramework = void 0;
7
- const playwright_extra_1 = require("playwright-extra");
8
- const puppeteer_extra_plugin_stealth_1 = __importDefault(require("puppeteer-extra-plugin-stealth"));
7
+ const playwright_1 = require("playwright");
9
8
  const JsonUtils_1 = require("../utils/JsonUtils");
10
9
  const InvalidParamValueException_1 = require("../exceptions/InvalidParamValueException");
11
10
  const path_1 = __importDefault(require("path"));
@@ -37,6 +36,10 @@ class BrowserFramework {
37
36
  }
38
37
  if (this.browserConfig.using.type === 'browserBase' &&
39
38
  this.browserBaseData) {
39
+ const body = {
40
+ projectId: this.browserBaseData.projectId,
41
+ status: 'REQUEST_RELEASE',
42
+ };
40
43
  const password = process.env[envVars_1.ENV_VAR_NAMES.BROWSERBASE_API_KEY] ?? '';
41
44
  const options = {
42
45
  method: 'POST',
@@ -44,7 +47,7 @@ class BrowserFramework {
44
47
  'X-BB-API-Key': password,
45
48
  'Content-Type': 'application/json',
46
49
  },
47
- body: `{"projectId":"${this.browserBaseData.projectId}","status":"REQUEST_RELEASE"}`,
50
+ body: JSON.stringify(body),
48
51
  };
49
52
  try {
50
53
  await fetch(`https://api.browserbase.com/v1/sessions/${this.browserBaseData.id}`, options);
@@ -72,24 +75,97 @@ class BrowserFramework {
72
75
  }
73
76
  static async create(browserConfig, outputDir, storageState) {
74
77
  const type = browserConfig.using.type;
78
+ let browserFramework;
75
79
  switch (type) {
76
80
  case 'device': {
77
81
  const { browser, browserContext } = await BrowserFramework.forDevice(browserConfig.using.deviceName ??
78
82
  BrowserFramework.DEFAULT_DEVICE_NAME, browserConfig.using.headless ?? false, outputDir, storageState);
79
- return new BrowserFramework(browserConfig, browser, browserContext);
83
+ browserFramework = new BrowserFramework(browserConfig, browser, browserContext);
84
+ break;
80
85
  }
81
86
  case 'remoteInstance': {
82
87
  const { browser, browserContext } = await BrowserFramework.forRemoteBrowser(browserConfig.using.url, outputDir, storageState);
83
- return new BrowserFramework(browserConfig, browser, browserContext);
88
+ browserFramework = new BrowserFramework(browserConfig, browser, browserContext);
89
+ break;
84
90
  }
85
91
  case 'browserBase': {
86
92
  const { browser, browserContext, browserBaseData } = await BrowserFramework.forBrowserBase(browserConfig.using.sessionArgs, outputDir, storageState);
87
- return new BrowserFramework(browserConfig, browser, browserContext, browserBaseData);
93
+ browserFramework = new BrowserFramework(browserConfig, browser, browserContext, browserBaseData);
94
+ break;
88
95
  }
89
96
  default: {
90
97
  throw new InvalidParamValueException_1.InvalidParamValueException('type', type);
91
98
  }
92
99
  }
100
+ await BrowserFramework.attachSessionStorageToBrowserContext(browserFramework.browserContext, storageState);
101
+ return browserFramework;
102
+ }
103
+ /**
104
+ * Gets the browser storage state including cookies, localStorage, and sessionStorage.
105
+ *
106
+ * @param browserContext The browser context to extract storage state from.
107
+ * @returns A promise that resolves to the complete browser storage state.
108
+ */
109
+ async getBrowserStorageState() {
110
+ let result;
111
+ try {
112
+ // First get the standard storage state (cookies and localStorage)
113
+ result = await this.browserContext.storageState({
114
+ indexedDB: true,
115
+ });
116
+ }
117
+ catch (error) {
118
+ Logger_1.appLogger.warn('Failed to get storage state with indexedDB, falling back to cookies only', error);
119
+ result = await this.browserContext.storageState({
120
+ indexedDB: false,
121
+ });
122
+ }
123
+ // Get all pages in the context
124
+ const pages = this.browserContext.pages();
125
+ // Process each page to collect sessionStorage data
126
+ for (const page of pages) {
127
+ try {
128
+ // Get the origin for the current page
129
+ const pageOrigin = new URL(page.url()).origin;
130
+ // Find if we already have an entry for this origin
131
+ let originEntry = result.origins.find((entry) => entry.origin === pageOrigin);
132
+ // If not, create a new entry
133
+ if (!originEntry) {
134
+ originEntry = {
135
+ origin: pageOrigin,
136
+ localStorage: [],
137
+ sessionStorage: [],
138
+ };
139
+ result.origins.push(originEntry);
140
+ }
141
+ else if (!('sessionStorage' in originEntry)) {
142
+ // If the entry exists but doesn't have sessionStorage yet, add the property
143
+ originEntry.sessionStorage = [];
144
+ }
145
+ // Extract sessionStorage from the page
146
+ const sessionStorageItems = await page.evaluate(() => {
147
+ const items = [];
148
+ for (let i = 0; i < sessionStorage.length; i++) {
149
+ const name = sessionStorage.key(i);
150
+ if (name) {
151
+ items.push({
152
+ name,
153
+ value: sessionStorage.getItem(name) || '',
154
+ });
155
+ }
156
+ }
157
+ return items;
158
+ });
159
+ // Add sessionStorage items to the origin entry
160
+ originEntry.sessionStorage = sessionStorageItems;
161
+ }
162
+ catch (error) {
163
+ Logger_1.appLogger.warn(`Failed to extract sessionStorage for page: ${page.url()}`, error);
164
+ // Skip pages that might have navigation errors or are about:blank.
165
+ continue;
166
+ }
167
+ }
168
+ return result;
93
169
  }
94
170
  /**
95
171
  * Connects to an existing Chromium browser using the Chrome DevTools Protocol (CDP) at the given
@@ -99,7 +175,7 @@ class BrowserFramework {
99
175
  static async forRemoteBrowser(remoteBrowserInstanceUrl, outputDir, storageState) {
100
176
  const expandedUrl = this.expandEnvVariables(remoteBrowserInstanceUrl);
101
177
  try {
102
- const browser = await playwright_extra_1.chromium.connectOverCDP(expandedUrl);
178
+ const browser = await playwright_1.chromium.connectOverCDP(expandedUrl);
103
179
  const contextOptions = {
104
180
  recordVideo: { dir: outputDir },
105
181
  };
@@ -158,20 +234,20 @@ class BrowserFramework {
158
234
  let browser;
159
235
  switch (device.defaultBrowserType.toLowerCase()) {
160
236
  case 'firefox':
161
- browser = await playwright_extra_1.firefox.launch(launchOptions);
237
+ browser = await playwright_1.firefox.launch(launchOptions);
162
238
  break;
163
239
  case 'chromium':
164
- browser = await playwright_extra_1.chromium.launch(launchOptions);
240
+ browser = await playwright_1.chromium.launch(launchOptions);
165
241
  break;
166
242
  case 'chrome':
167
- browser = await playwright_extra_1.chromium.launch({
243
+ browser = await playwright_1.chromium.launch({
168
244
  ...launchOptions,
169
245
  channel: 'chrome',
170
246
  });
171
247
  break;
172
248
  case 'webkit':
173
249
  case 'ios':
174
- browser = await playwright_extra_1.webkit.launch(launchOptions);
250
+ browser = await playwright_1.webkit.launch(launchOptions);
175
251
  break;
176
252
  default:
177
253
  throw new InvalidParamValueException_1.InvalidParamValueException('browserType', device.defaultBrowserType);
@@ -197,7 +273,7 @@ class BrowserFramework {
197
273
  */
198
274
  static async forBrowserBase(sessionArgs, outputDir, storageState) {
199
275
  const browserBaseData = await BrowserFramework.establishBrowserBaseSession(sessionArgs);
200
- const browser = await playwright_extra_1.chromium.connectOverCDP(browserBaseData.connectUrl);
276
+ const browser = await playwright_1.chromium.connectOverCDP(browserBaseData.connectUrl);
201
277
  const contextOptions = {
202
278
  recordVideo: { dir: outputDir },
203
279
  };
@@ -245,12 +321,37 @@ class BrowserFramework {
245
321
  return envVarValue;
246
322
  });
247
323
  }
324
+ static async attachSessionStorageToBrowserContext(browserContext, storageState) {
325
+ // Add init script to restore sessionStorage if storage state is provided
326
+ if (storageState && storageState.origins) {
327
+ // Transform the storage state to map origins to their sessionStorage
328
+ const sessionStorageByOrigin = {};
329
+ for (const origin of storageState.origins) {
330
+ if (origin.sessionStorage && origin.sessionStorage.length > 0) {
331
+ // Create a key-value map for this origin's sessionStorage
332
+ const sessionStorageMap = {};
333
+ for (const item of origin.sessionStorage) {
334
+ sessionStorageMap[item.name] = item.value;
335
+ }
336
+ sessionStorageByOrigin[origin.origin] = sessionStorageMap;
337
+ }
338
+ }
339
+ // Add the init script to restore sessionStorage based on the page's origin
340
+ await browserContext.addInitScript((storageData) => {
341
+ // Get current origin
342
+ const currentOrigin = window.location.origin;
343
+ // Check if we have sessionStorage data for this origin
344
+ if (storageData[currentOrigin]) {
345
+ // Restore the sessionStorage items
346
+ for (const [key, value] of Object.entries(storageData[currentOrigin])) {
347
+ window.sessionStorage.setItem(key, value);
348
+ }
349
+ console.log(`Restored ${Object.keys(storageData[currentOrigin]).length} sessionStorage items for ${currentOrigin}`);
350
+ }
351
+ }, sessionStorageByOrigin);
352
+ }
353
+ }
248
354
  }
249
355
  exports.BrowserFramework = BrowserFramework;
250
356
  BrowserFramework.DEFAULT_DEVICE_NAME = 'Desktop Chromium';
251
- (() => {
252
- playwright_extra_1.firefox.use((0, puppeteer_extra_plugin_stealth_1.default)());
253
- playwright_extra_1.chromium.use((0, puppeteer_extra_plugin_stealth_1.default)());
254
- playwright_extra_1.webkit.use((0, puppeteer_extra_plugin_stealth_1.default)());
255
- })();
256
357
  //# sourceMappingURL=BrowserFramework.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"BrowserFramework.js","sourceRoot":"","sources":["../../../src/models/BrowserFramework.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"BrowserFramework.js","sourceRoot":"","sources":["../../../src/models/BrowserFramework.ts"],"names":[],"mappings":";;;;;;AAMA,2CAAuD;AACvD,kDAA+C;AAC/C,yFAAsF;AAGtF,gDAAwB;AAExB,wCAA2C;AAC3C,4CAA4C;AAE5C,MAAa,gBAAgB;IAG3B,YACkB,aAA4B,EAC5B,OAAgB,EAChB,cAA8B,EAC7B,eAAqB;QAHtB,kBAAa,GAAb,aAAa,CAAe;QAC5B,YAAO,GAAP,OAAO,CAAS;QAChB,mBAAc,GAAd,cAAc,CAAgB;QAC7B,oBAAe,GAAf,eAAe,CAAM;IACrC,CAAC;IAEJ;;;OAGG;IACI,KAAK,CAAC,KAAK;QAChB,IAAI,CAAC;YACH,MAAM,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE,CAAC;QACpC,CAAC;QAAC,OAAO,MAAM,EAAE,CAAC;YAChB,6EAA6E;QAC/E,CAAC;QAED,IAAI,CAAC;YACH,MAAM,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;QAC7B,CAAC;QAAC,OAAO,MAAM,EAAE,CAAC;YAChB,qEAAqE;QACvE,CAAC;QAED,IACE,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,IAAI,KAAK,aAAa;YAC/C,IAAI,CAAC,eAAe,EACpB,CAAC;YACD,MAAM,IAAI,GAAG;gBACX,SAAS,EAAE,IAAI,CAAC,eAAe,CAAC,SAAS;gBACzC,MAAM,EAAE,iBAAiB;aAC1B,CAAC;YACF,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,uBAAa,CAAC,mBAAmB,CAAC,IAAI,EAAE,CAAC;YACtE,MAAM,OAAO,GAAG;gBACd,MAAM,EAAE,MAAM;gBACd,OAAO,EAAE;oBACP,cAAc,EAAE,QAAQ;oBACxB,cAAc,EAAE,kBAAkB;iBACnC;gBACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;aAC3B,CAAC;YAEF,IAAI,CAAC;gBACH,MAAM,KAAK,CACT,2CAA2C,IAAI,CAAC,eAAe,CAAC,EAAE,EAAE,EACpE,OAAO,CACR,CAAC;YACJ,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,4DAA4D;gBAC5D,kBAAS,CAAC,IAAI,CAAC,uCAAuC,EAAE,KAAK,CAAC,CAAC;YACjE,CAAC;QACH,CAAC;IACH,CAAC;IAED;;;;;;;OAOG;IACI,MAAM,CAAC,mBAAmB;QAC/B,MAAM,UAAU,GAAG,qBAAS,CAAC,kBAAkB,CAC7C,cAAI,CAAC,IAAI,CAAC,cAAc,CAAC,CACO,CAAC;QAEnC,IAAI,CAAC,UAAU,EAAE,CAAC;YAChB,MAAM,IAAI,KAAK,CAAC,sCAAsC,CAAC,CAAC;QAC1D,CAAC;QAED,OAAO,IAAI,GAAG,CAAwB,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC;IACpE,CAAC;IAEM,MAAM,CAAC,KAAK,CAAC,MAAM,CACxB,aAA4B,EAC5B,SAAiB,EACjB,YAAkC;QAElC,MAAM,IAAI,GAAG,aAAa,CAAC,KAAK,CAAC,IAAI,CAAC;QACtC,IAAI,gBAAkC,CAAC;QAEvC,QAAQ,IAAI,EAAE,CAAC;YACb,KAAK,QAAQ,CAAC,CAAC,CAAC;gBACd,MAAM,EAAE,OAAO,EAAE,cAAc,EAAE,GAAG,MAAM,gBAAgB,CAAC,SAAS,CAClE,aAAa,CAAC,KAAK,CAAC,UAAU;oBAC5B,gBAAgB,CAAC,mBAAmB,EACtC,aAAa,CAAC,KAAK,CAAC,QAAQ,IAAI,KAAK,EACrC,SAAS,EACT,YAAY,CACb,CAAC;gBACF,gBAAgB,GAAG,IAAI,gBAAgB,CACrC,aAAa,EACb,OAAO,EACP,cAAc,CACf,CAAC;gBACF,MAAM;YACR,CAAC;YACD,KAAK,gBAAgB,CAAC,CAAC,CAAC;gBACtB,MAAM,EAAE,OAAO,EAAE,cAAc,EAAE,GAC/B,MAAM,gBAAgB,CAAC,gBAAgB,CACrC,aAAa,CAAC,KAAK,CAAC,GAAG,EACvB,SAAS,EACT,YAAY,CACb,CAAC;gBACJ,gBAAgB,GAAG,IAAI,gBAAgB,CACrC,aAAa,EACb,OAAO,EACP,cAAc,CACf,CAAC;gBACF,MAAM;YACR,CAAC;YACD,KAAK,aAAa,CAAC,CAAC,CAAC;gBACnB,MAAM,EAAE,OAAO,EAAE,cAAc,EAAE,eAAe,EAAE,GAChD,MAAM,gBAAgB,CAAC,cAAc,CACnC,aAAa,CAAC,KAAK,CAAC,WAAW,EAC/B,SAAS,EACT,YAAY,CACb,CAAC;gBACJ,gBAAgB,GAAG,IAAI,gBAAgB,CACrC,aAAa,EACb,OAAO,EACP,cAAc,EACd,eAAe,CAChB,CAAC;gBACF,MAAM;YACR,CAAC;YACD,OAAO,CAAC,CAAC,CAAC;gBACR,MAAM,IAAI,uDAA0B,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;YACrD,CAAC;QACH,CAAC;QAED,MAAM,gBAAgB,CAAC,oCAAoC,CACzD,gBAAgB,CAAC,cAAc,EAC/B,YAAY,CACb,CAAC;QACF,OAAO,gBAAgB,CAAC;IAC1B,CAAC;IAED;;;;;OAKG;IACI,KAAK,CAAC,sBAAsB;QACjC,IAAI,MAA2B,CAAC;QAEhC,IAAI,CAAC;YACH,kEAAkE;YAClE,MAAM,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,YAAY,CAAC;gBAC9C,SAAS,EAAE,IAAI;aAChB,CAAC,CAAC;QACL,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,kBAAS,CAAC,IAAI,CACZ,0EAA0E,EAC1E,KAAK,CACN,CAAC;YACF,MAAM,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,YAAY,CAAC;gBAC9C,SAAS,EAAE,KAAK;aACjB,CAAC,CAAC;QACL,CAAC;QAED,+BAA+B;QAC/B,MAAM,KAAK,GAAG,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE,CAAC;QAE1C,mDAAmD;QACnD,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,IAAI,CAAC;gBACH,sCAAsC;gBACtC,MAAM,UAAU,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,MAAM,CAAC;gBAE9C,mDAAmD;gBACnD,IAAI,WAAW,GAAG,MAAM,CAAC,OAAO,CAAC,IAAI,CACnC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,MAAM,KAAK,UAAU,CACvC,CAAC;gBAEF,6BAA6B;gBAC7B,IAAI,CAAC,WAAW,EAAE,CAAC;oBACjB,WAAW,GAAG;wBACZ,MAAM,EAAE,UAAU;wBAClB,YAAY,EAAE,EAAE;wBAChB,cAAc,EAAE,EAAE;qBACnB,CAAC;oBACF,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;gBACnC,CAAC;qBAAM,IAAI,CAAC,CAAC,gBAAgB,IAAI,WAAW,CAAC,EAAE,CAAC;oBAC9C,4EAA4E;oBAC3E,WAAmB,CAAC,cAAc,GAAG,EAAE,CAAC;gBAC3C,CAAC;gBAED,uCAAuC;gBACvC,MAAM,mBAAmB,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,GAAG,EAAE;oBACnD,MAAM,KAAK,GAAG,EAAE,CAAC;oBAEjB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,cAAc,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;wBAC/C,MAAM,IAAI,GAAG,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;wBAEnC,IAAI,IAAI,EAAE,CAAC;4BACT,KAAK,CAAC,IAAI,CAAC;gCACT,IAAI;gCACJ,KAAK,EAAE,cAAc,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE;6BAC1C,CAAC,CAAC;wBACL,CAAC;oBACH,CAAC;oBACD,OAAO,KAAK,CAAC;gBACf,CAAC,CAAC,CAAC;gBAEH,+CAA+C;gBAC9C,WAAmB,CAAC,cAAc,GAAG,mBAAmB,CAAC;YAC5D,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,kBAAS,CAAC,IAAI,CACZ,8CAA8C,IAAI,CAAC,GAAG,EAAE,EAAE,EAC1D,KAAK,CACN,CAAC;gBACF,mEAAmE;gBACnE,SAAS;YACX,CAAC;QACH,CAAC;QAED,OAAO,MAAM,CAAC;IAChB,CAAC;IAED;;;;OAIG;IACK,MAAM,CAAC,KAAK,CAAC,gBAAgB,CACnC,wBAAgC,EAChC,SAAiB,EACjB,YAAkC;QAElC,MAAM,WAAW,GAAG,IAAI,CAAC,kBAAkB,CAAC,wBAAwB,CAAC,CAAC;QAEtE,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,MAAM,qBAAQ,CAAC,cAAc,CAAC,WAAW,CAAC,CAAC;YAC3D,MAAM,cAAc,GAA0B;gBAC5C,WAAW,EAAE,EAAE,GAAG,EAAE,SAAS,EAAE;aAChC,CAAC;YAEF,IAAI,YAAY,EAAE,CAAC;gBACjB,cAAc,CAAC,YAAY,GAAG,YAAY,CAAC;YAC7C,CAAC;YAED,OAAO;gBACL,OAAO,EAAE,OAAO;gBAChB,cAAc,EAAE,MAAM,OAAO,CAAC,UAAU,CAAC,cAAc,CAAC;aACzD,CAAC;QACJ,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,MAAM,IAAI,uDAA0B,CAClC,0BAA0B,EAC1B,wBAAwB,CACzB,CAAC;QACJ,CAAC;IACH,CAAC;IAED;;;OAGG;IACK,MAAM,CAAC,KAAK,CAAC,SAAS,CAC5B,UAAkB,EAClB,QAAiB,EACjB,SAAiB,EACjB,YAAkC;QAElC,MAAM,MAAM,GAAG,gBAAgB,CAAC,mBAAmB,EAAE,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;QAEtE,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,MAAM,IAAI,uDAA0B,CAAC,YAAY,EAAE,UAAU,CAAC,CAAC;QACjE,CAAC;QAED,MAAM,cAAc,GAA0B;YAC5C,SAAS,EAAE,MAAM,CAAC,SAAS;YAC3B,WAAW,EAAE;gBACX,GAAG,EAAE,SAAS;gBACd,IAAI,EAAE;oBACJ,KAAK,EAAE,MAAM,CAAC,QAAQ,EAAE,KAAK,IAAI,IAAI;oBACrC,MAAM,EAAE,MAAM,CAAC,QAAQ,EAAE,MAAM,IAAI,GAAG;iBACvC;aACF;YACD,QAAQ,EAAE;gBACR,KAAK,EAAE,MAAM,CAAC,QAAQ,EAAE,KAAK,IAAI,IAAI;gBACrC,MAAM,EAAE,MAAM,CAAC,QAAQ,EAAE,MAAM,IAAI,GAAG;aACvC;YACD,MAAM,EAAE;gBACN,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,KAAK,IAAI,MAAM,CAAC,QAAQ,EAAE,KAAK,IAAI,IAAI;gBAC7D,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,IAAI,MAAM,CAAC,QAAQ,EAAE,MAAM,IAAI,GAAG;aAChE;YACD,iBAAiB,EAAE,MAAM,CAAC,iBAAiB,IAAI,GAAG;YAClD,QAAQ,EAAE,MAAM,CAAC,QAAQ,IAAI,KAAK;YAClC,QAAQ,EAAE,MAAM,CAAC,QAAQ,IAAI,KAAK;SACnC,CAAC;QAEF,IAAI,YAAY,EAAE,CAAC;YACjB,cAAc,CAAC,YAAY,GAAG,YAAY,CAAC;QAC7C,CAAC;QAED,MAAM,aAAa,GAAkB;YACnC,QAAQ;YACR,IAAI,EAAE;gBACJ,6BAA6B;gBAC7B,+CAA+C;aAChD;SACF,CAAC;QAEF,IAAI,OAAgB,CAAC;QAErB,QAAQ,MAAM,CAAC,kBAAkB,CAAC,WAAW,EAAE,EAAE,CAAC;YAChD,KAAK,SAAS;gBACZ,OAAO,GAAG,MAAM,oBAAO,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC;gBAC9C,MAAM;YACR,KAAK,UAAU;gBACb,OAAO,GAAG,MAAM,qBAAQ,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC;gBAC/C,MAAM;YACR,KAAK,QAAQ;gBACX,OAAO,GAAG,MAAM,qBAAQ,CAAC,MAAM,CAAC;oBAC9B,GAAG,aAAa;oBAChB,OAAO,EAAE,QAAQ;iBAClB,CAAC,CAAC;gBACH,MAAM;YACR,KAAK,QAAQ,CAAC;YACd,KAAK,KAAK;gBACR,OAAO,GAAG,MAAM,mBAAM,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC;gBAC7C,MAAM;YACR;gBACE,MAAM,IAAI,uDAA0B,CAClC,aAAa,EACb,MAAM,CAAC,kBAAkB,CAC1B,CAAC;QACN,CAAC;QAED,IAAI,CAAC;YACH,MAAM,cAAc,GAAG,MAAM,OAAO,CAAC,UAAU,CAAC,cAAc,CAAC,CAAC;YAChE,OAAO,EAAE,OAAO,EAAE,cAAc,EAAE,CAAC;QACrC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,OAAO,CAAC,KAAK,EAAE,CAAC;YACtB,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC;IAED;;;;;;;;;OASG;IACK,MAAM,CAAC,KAAK,CAAC,cAAc,CACjC,WAAmC,EACnC,SAAiB,EACjB,YAAkC;QAMlC,MAAM,eAAe,GACnB,MAAM,gBAAgB,CAAC,2BAA2B,CAAC,WAAW,CAAC,CAAC;QAClE,MAAM,OAAO,GAAG,MAAM,qBAAQ,CAAC,cAAc,CAAC,eAAe,CAAC,UAAU,CAAC,CAAC;QAC1E,MAAM,cAAc,GAA0B;YAC5C,WAAW,EAAE,EAAE,GAAG,EAAE,SAAS,EAAE;SAChC,CAAC;QAEF,IAAI,YAAY,EAAE,CAAC;YACjB,cAAc,CAAC,YAAY,GAAG,YAAY,CAAC;QAC7C,CAAC;QAED,OAAO;YACL,OAAO,EAAE,OAAO;YAChB,cAAc,EAAE,MAAM,OAAO,CAAC,UAAU,CAAC,cAAc,CAAC;YACxD,eAAe,EAAE,eAAe;SACjC,CAAC;IACJ,CAAC;IAED;;;;OAIG;IACK,MAAM,CAAC,KAAK,CAAC,2BAA2B,CAC9C,WAAmC;QAEnC,MAAM,mBAAmB,GAAG;YAC1B,GAAG,WAAW;YACd,SAAS,EAAE,IAAI,CAAC,kBAAkB,CAAC,WAAW,CAAC,SAAS,CAAC;SAC1D,CAAC;QACF,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,uBAAa,CAAC,mBAAmB,CAAC,CAAC;QAEhE,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,MAAM,IAAI,uDAA0B,CAClC,uBAAa,CAAC,mBAAmB,EACjC,IAAI,CACL,CAAC;QACJ,CAAC;QAED,MAAM,OAAO,GAAG;YACd,MAAM,EAAE,MAAM;YACd,OAAO,EAAE,EAAE,cAAc,EAAE,QAAQ,EAAE,cAAc,EAAE,kBAAkB,EAAE;YACzE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,mBAAmB,CAAC;SAC1C,CAAC;QAEF,MAAM,eAAe,GAAG,MAAM,KAAK,CACjC,yCAAyC,EACzC,OAAO,CACR,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC;QAEtC,IAAI,eAAe,CAAC,KAAK,EAAE,CAAC;YAC1B,MAAM,IAAI,uDAA0B,CAClC,uBAAa,CAAC,mBAAmB,EACjC,YAAY,EACZ,GAAG,eAAe,CAAC,KAAK,KAAK,eAAe,CAAC,OAAO,EAAE,CACvD,CAAC;QACJ,CAAC;QAED,OAAO,eAAe,CAAC;IACzB,CAAC;IAEO,MAAM,CAAC,kBAAkB,CAAC,GAAW;QAC3C,MAAM,OAAO,GAAG,iBAAiB,CAAC;QAClC,OAAO,GAAG,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC,EAAE,UAAU,EAAE,EAAE;YAC5C,MAAM,WAAW,GAAG,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;YAE5C,IAAI,CAAC,WAAW,EAAE,CAAC;gBACjB,MAAM,IAAI,uDAA0B,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;YACzD,CAAC;YAED,OAAO,WAAW,CAAC;QACrB,CAAC,CAAC,CAAC;IACL,CAAC;IAEO,MAAM,CAAC,KAAK,CAAC,oCAAoC,CACvD,cAA8B,EAC9B,YAAkC;QAElC,yEAAyE;QACzE,IAAI,YAAY,IAAI,YAAY,CAAC,OAAO,EAAE,CAAC;YACzC,qEAAqE;YACrE,MAAM,sBAAsB,GAA2C,EAAE,CAAC;YAE1E,KAAK,MAAM,MAAM,IAAI,YAAY,CAAC,OAAO,EAAE,CAAC;gBAC1C,IAAI,MAAM,CAAC,cAAc,IAAI,MAAM,CAAC,cAAc,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oBAC9D,0DAA0D;oBAC1D,MAAM,iBAAiB,GAA2B,EAAE,CAAC;oBAErD,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,cAAc,EAAE,CAAC;wBACzC,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC;oBAC5C,CAAC;oBAED,sBAAsB,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,iBAAiB,CAAC;gBAC5D,CAAC;YACH,CAAC;YAED,2EAA2E;YAC3E,MAAM,cAAc,CAAC,aAAa,CAAC,CAAC,WAAW,EAAE,EAAE;gBACjD,qBAAqB;gBACrB,MAAM,aAAa,GAAG,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC;gBAE7C,uDAAuD;gBACvD,IAAI,WAAW,CAAC,aAAa,CAAC,EAAE,CAAC;oBAC/B,mCAAmC;oBACnC,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CACvC,WAAW,CAAC,aAAa,CAAC,CAC3B,EAAE,CAAC;wBACF,MAAM,CAAC,cAAc,CAAC,OAAO,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;oBAC5C,CAAC;oBACD,OAAO,CAAC,GAAG,CACT,YAAY,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,CAAC,CAAC,MAAM,6BAA6B,aAAa,EAAE,CACvG,CAAC;gBACJ,CAAC;YACH,CAAC,EAAE,sBAAsB,CAAC,CAAC;QAC7B,CAAC;IACH,CAAC;;AA9dH,4CA+dC;AA9dyB,oCAAmB,GAAG,kBAAkB,CAAC"}
@@ -21,6 +21,10 @@ export type BrowserStorageState = {
21
21
  readonly name: string;
22
22
  readonly value: string;
23
23
  }>;
24
+ readonly sessionStorage?: Array<{
25
+ readonly name: string;
26
+ readonly value: string;
27
+ }>;
24
28
  }>;
25
29
  };
26
30
  //# sourceMappingURL=BrowserStorageState.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"BrowserStorageState.d.ts","sourceRoot":"","sources":["../../../src/models/BrowserStorageState.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,MAAM,mBAAmB,GAAG;IAChC,QAAQ,CAAC,OAAO,EAAE,KAAK,CAAC;QACtB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;QAEtB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;QAEvB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;QAExB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;QAEtB;;WAEG;QACH,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;QAEzB,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;QAE3B,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;QAEzB,QAAQ,CAAC,QAAQ,EAAE,QAAQ,GAAG,KAAK,GAAG,MAAM,CAAC;KAC9C,CAAC,CAAC;IAEH,QAAQ,CAAC,OAAO,EAAE,KAAK,CAAC;QACtB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;QAExB,QAAQ,CAAC,YAAY,EAAE,KAAK,CAAC;YAC3B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;YAEtB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;SACxB,CAAC,CAAC;KACJ,CAAC,CAAC;CACJ,CAAC"}
1
+ {"version":3,"file":"BrowserStorageState.d.ts","sourceRoot":"","sources":["../../../src/models/BrowserStorageState.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,MAAM,mBAAmB,GAAG;IAChC,QAAQ,CAAC,OAAO,EAAE,KAAK,CAAC;QACtB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;QAEtB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;QAEvB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;QAExB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;QAEtB;;WAEG;QACH,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;QAEzB,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;QAE3B,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;QAEzB,QAAQ,CAAC,QAAQ,EAAE,QAAQ,GAAG,KAAK,GAAG,MAAM,CAAC;KAC9C,CAAC,CAAC;IAEH,QAAQ,CAAC,OAAO,EAAE,KAAK,CAAC;QACtB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;QAExB,QAAQ,CAAC,YAAY,EAAE,KAAK,CAAC;YAC3B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;YAEtB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;SACxB,CAAC,CAAC;QAEH,QAAQ,CAAC,cAAc,CAAC,EAAE,KAAK,CAAC;YAC9B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;YAEtB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;SACxB,CAAC,CAAC;KACJ,CAAC,CAAC;CACJ,CAAC"}
@@ -132,7 +132,7 @@ export declare function vercelAiClientFixture(model: LanguageModel): TestFixture
132
132
  * If the modelName is not specified, it will be defaulted according to the
133
133
  * DEFAULT_GPT_MODEL_FOR_PLATFORM mapping.
134
134
  */
135
- export declare function gptClient(modelName?: string): Promise<GptClient>;
135
+ export declare function createGptClient(modelName?: string): Promise<GptClient>;
136
136
  export declare function gptClientFixture(modelName?: string): TestFixture<GptClient, any>;
137
137
  export * from 'playwright/test';
138
138
  export declare const test: import("@playwright/test").TestType<import("@playwright/test").PlaywrightTestArgs & import("@playwright/test").PlaywrightTestOptions & {
@@ -1 +1 @@
1
- {"version":3,"file":"playwrightTestExtensions.d.ts","sourceRoot":"","sources":["../../src/playwrightTestExtensions.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"playwrightTestExtensions.d.ts","sourceRoot":"","sources":["../../src/playwrightTestExtensions.ts"],"names":[],"mappings":"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"}
@@ -27,7 +27,7 @@ exports.googleGeminiClientFixture = googleGeminiClientFixture;
27
27
  exports.openAiClient = openAiClient;
28
28
  exports.openAiClientFixture = openAiClientFixture;
29
29
  exports.vercelAiClientFixture = vercelAiClientFixture;
30
- exports.gptClient = gptClient;
30
+ exports.createGptClient = createGptClient;
31
31
  exports.gptClientFixture = gptClientFixture;
32
32
  /**
33
33
  * This code extends the Playwright Page object and test fixture with
@@ -43,15 +43,110 @@ const MiscUtils_1 = require("./utils/MiscUtils");
43
43
  const DonobuDeploymentEnvironment_1 = require("./models/DonobuDeploymentEnvironment");
44
44
  const GptClientFactory_1 = require("./clients/GptClientFactory");
45
45
  const VercelAiGptClient_1 = require("./clients/VercelAiGptClient");
46
+ const GoToWebpageTool_1 = require("./tools/GoToWebpageTool");
46
47
  const DonobuStack_1 = require("./managers/DonobuStack");
47
48
  const DonobuFlow_1 = require("./managers/DonobuFlow");
48
- const DEFAULT_FLOW_URL = 'https://example.com';
49
+ const Logger_1 = require("./utils/Logger");
50
+ const envVars_1 = require("./envVars");
51
+ const TestFileUpdater_1 = require("./managers/TestFileUpdater");
52
+ const PLACEHOLDER_FLOW_URL = 'https://example.com';
49
53
  const DEFAULT_GPT_MODEL_FOR_PLATFORM = {
50
54
  ANTHROPIC: 'claude-3-5-sonnet-latest',
51
55
  GOOGLE_GEMINI: 'gemini-2.0-flash',
52
56
  OPENAI: 'gpt-4o',
53
57
  };
54
58
  let donobuStack = undefined;
59
+ /**
60
+ * Self-heals a test that has failed by creating and running a new autonomous
61
+ * flow using the same objective of the failed test. If the new flow is
62
+ * successful, it uses the TestFileUpdater to update the specific failed test case
63
+ * in the original test file.
64
+ *
65
+ * @param testInfo The test information object that contains the failed test's
66
+ * annotations and other metadata.
67
+ * @param donobuFlowMetadata The metadata of the flow that is being self-healed.
68
+ */
69
+ async function selfHeal(testInfo, donobuFlowMetadata) {
70
+ if (!donobuStack) {
71
+ // If DonobuStack is not initialized, we cannot self-heal.
72
+ Logger_1.appLogger.warn('Will not self-heal due to the Donobu stack not being initialized.');
73
+ return;
74
+ }
75
+ else if (!donobuFlowMetadata || !donobuFlowMetadata.overallObjective) {
76
+ // We cannot self-heal without an flow metadata or objective.
77
+ Logger_1.appLogger.warn('Will not self-heal due to no test flow metadata and/or objective being provided.');
78
+ return;
79
+ }
80
+ let gptClient;
81
+ try {
82
+ gptClient = await createGptClient();
83
+ }
84
+ catch (error) {
85
+ // If we cannot create a GPT client, we cannot self-heal.
86
+ Logger_1.appLogger.warn('Will not self-heal due to no GPT client being configured:', error);
87
+ return;
88
+ }
89
+ try {
90
+ const selfHealTimeoutMs = 300000; // 5 minutes
91
+ testInfo.setTimeout(testInfo.timeout + selfHealTimeoutMs);
92
+ Logger_1.appLogger.info(`Extending the test timeout ${selfHealTimeoutMs}ms for self-healing...`);
93
+ Logger_1.appLogger.info('Attempting to self-heal by creating a new autonomous flow...');
94
+ const newFlow = await donobuStack.flowsManager.createFlow({
95
+ targetWebsite: donobuFlowMetadata.targetWebsite,
96
+ overallObjective: donobuFlowMetadata.overallObjective,
97
+ name: donobuFlowMetadata.name ?? undefined,
98
+ browser: donobuFlowMetadata.browser,
99
+ callbackUrl: undefined,
100
+ customTools: donobuFlowMetadata.customTools ?? undefined,
101
+ maxIterations: 15,
102
+ gptConfigNameOverride: undefined,
103
+ defaultToolTipDurationMilliseconds: undefined,
104
+ initialRunMode: 'AUTONOMOUS',
105
+ isControlPanelEnabled: false,
106
+ allowedTools: undefined,
107
+ toolCallsOnStart: undefined,
108
+ resultJsonSchema: undefined,
109
+ }, gptClient);
110
+ Logger_1.appLogger.info('Running the new autonomous flow...');
111
+ await newFlow.job;
112
+ if (newFlow.donobuFlow.metadata.state === 'SUCCESS') {
113
+ Logger_1.appLogger.info('Self-heal succeeded! The new autonomous flow completed successfully. Generating revised test...');
114
+ const newTestCode = await donobuStack.flowsManager.getFlowAsPlaywrightScript(newFlow.donobuFlow.metadata.id);
115
+ // Save the fixed test as an attachment
116
+ await testInfo.attach('fixed-test.ts', {
117
+ body: newTestCode,
118
+ contentType: 'application/typescript',
119
+ });
120
+ // Get the failed test file path
121
+ const testFilePath = testInfo.file;
122
+ if (testFilePath) {
123
+ try {
124
+ Logger_1.appLogger.info(`Updating test file: ${testFilePath}`);
125
+ const updateSuccess = await TestFileUpdater_1.TestFileUpdater.updateTestCase(testFilePath, testInfo.title, newTestCode);
126
+ if (updateSuccess) {
127
+ Logger_1.appLogger.info(`Successfully updated test file with fixed test code.`);
128
+ }
129
+ else {
130
+ Logger_1.appLogger.warn(`Test file update did not complete successfully.`);
131
+ }
132
+ }
133
+ catch (fileUpdateError) {
134
+ Logger_1.appLogger.error(`Error updating test file ${testFilePath}:`, fileUpdateError);
135
+ }
136
+ }
137
+ else {
138
+ Logger_1.appLogger.warn('Could not update test file: test file path is not available.');
139
+ }
140
+ }
141
+ else {
142
+ Logger_1.appLogger.error('Self-heal failed! The new autonomous flow did not complete successfully.');
143
+ }
144
+ }
145
+ catch (error) {
146
+ Logger_1.appLogger.error('Error creating new flow when attempting to self heal:', error);
147
+ return;
148
+ }
149
+ }
55
150
  async function getOrCreateDonobuStack() {
56
151
  if (!donobuStack) {
57
152
  donobuStack = await (0, DonobuStack_1.setupDonobuStack)(DonobuDeploymentEnvironment_1.DonobuDeploymentEnvironment.LOCAL, new RequestContextHolder_1.RequestContextHolder());
@@ -165,7 +260,7 @@ function vercelAiClientFixture(model) {
165
260
  * If the modelName is not specified, it will be defaulted according to the
166
261
  * DEFAULT_GPT_MODEL_FOR_PLATFORM mapping.
167
262
  */
168
- async function gptClient(modelName) {
263
+ async function createGptClient(modelName) {
169
264
  // Check which API keys are available
170
265
  const hasAnthropicKey = !!process.env.ANTHROPIC_API_KEY;
171
266
  const hasGoogleKey = !!process.env.GOOGLE_GENERATIVE_AI_API_KEY;
@@ -200,7 +295,7 @@ Alternatively, set a flow-runner agent via POST /api/agents/flow-runner or via t
200
295
  }
201
296
  function gptClientFixture(modelName) {
202
297
  return async ({}, use) => {
203
- const client = await gptClient(modelName);
298
+ const client = await createGptClient(modelName);
204
299
  await use(client);
205
300
  };
206
301
  }
@@ -227,9 +322,10 @@ exports.test = test_1.test.extend({
227
322
  await page
228
323
  .context()
229
324
  .addInitScript(PlaywrightUtils_1.PlaywrightUtils.smartSelectorGeneratorInitScript());
230
- let isInitialized = false;
325
+ let isTestRunInitialized = false;
326
+ let isTestRunFailed = false;
231
327
  async function maybeInitDonobu() {
232
- if (isInitialized) {
328
+ if (isTestRunInitialized) {
233
329
  return;
234
330
  }
235
331
  const donobuTestFlowMetadata = {
@@ -250,7 +346,7 @@ exports.test = test_1.test.extend({
250
346
  runMode: 'DETERMINISTIC',
251
347
  isControlPanelEnabled: false,
252
348
  callbackUrl: null,
253
- targetWebsite: DEFAULT_FLOW_URL,
349
+ targetWebsite: PLACEHOLDER_FLOW_URL,
254
350
  overallObjective: testInfo.annotations.find((v) => {
255
351
  return v.type === 'objective';
256
352
  })?.description ?? null,
@@ -269,7 +365,7 @@ exports.test = test_1.test.extend({
269
365
  const persistenceLayer = await donobu.flowsPersistenceFactory.createPersistenceLayer();
270
366
  await persistenceLayer.saveMetadata(donobuTestFlowMetadata);
271
367
  page._donobuFlowMetadata = donobuTestFlowMetadata;
272
- isInitialized = true;
368
+ isTestRunInitialized = true;
273
369
  }
274
370
  const originalGoto = page.goto;
275
371
  // Intercept 'page.goto' so that Donobu can later re-run it as a standard
@@ -282,7 +378,7 @@ exports.test = test_1.test.extend({
282
378
  const persistenceLayer = await donobu.flowsPersistenceFactory.createPersistenceLayer();
283
379
  // Update the target website to whatever the first place we are
284
380
  // navigating to is.
285
- if (page._donobuFlowMetadata.targetWebsite === DEFAULT_FLOW_URL) {
381
+ if (page._donobuFlowMetadata.targetWebsite === PLACEHOLDER_FLOW_URL) {
286
382
  page._donobuFlowMetadata = {
287
383
  ...page._donobuFlowMetadata,
288
384
  targetWebsite: url,
@@ -291,19 +387,24 @@ exports.test = test_1.test.extend({
291
387
  }
292
388
  try {
293
389
  const resp = await originalGoto.call(page, url, options);
390
+ await PlaywrightUtils_1.PlaywrightUtils.waitForPageStability(page);
391
+ const pageTitle = await page.title();
294
392
  const postCallImage = await PlaywrightUtils_1.PlaywrightUtils.takePngScreenshot(page);
295
393
  const postCallImageId = await persistenceLayer.savePngScreenShot(flowId, postCallImage);
296
394
  const completedAt = new Date().getTime();
297
395
  await persistenceLayer.saveToolCall(flowId, {
298
396
  id: MiscUtils_1.MiscUtils.createAdHocToolCallId(),
299
- toolName: 'goToWebpage',
397
+ toolName: GoToWebpageTool_1.GoToWebpageTool.NAME,
300
398
  parameters: {
301
399
  url: url,
302
400
  },
303
401
  outcome: {
304
402
  isSuccessful: true,
305
403
  forLlm: `Successfully navigated to ${url}`,
306
- metadata: null,
404
+ metadata: {
405
+ pageTitle: pageTitle,
406
+ resolvedUrl: page.url(),
407
+ },
307
408
  },
308
409
  postCallImageId: postCallImageId,
309
410
  page: url,
@@ -332,6 +433,8 @@ exports.test = test_1.test.extend({
332
433
  startedAt: startedAt,
333
434
  completedAt: completedAt,
334
435
  });
436
+ // Mark test as failed for later callback
437
+ isTestRunFailed = true;
335
438
  throw error;
336
439
  }
337
440
  };
@@ -353,14 +456,21 @@ exports.test = test_1.test.extend({
353
456
  metadata: page._donobuFlowMetadata,
354
457
  toolCallId: clonedParams.toolCallId ?? MiscUtils_1.MiscUtils.createAdHocToolCallId(),
355
458
  };
356
- return new ToolManager_1.ToolManager(ToolManager_1.ToolManager.ALL_TOOLS)
357
- .invokeTool(toolCallContext, toolName, clonedParams, false)
358
- .then(async (result) => {
459
+ try {
460
+ const result = await new ToolManager_1.ToolManager(ToolManager_1.ToolManager.ALL_TOOLS).invokeTool(toolCallContext, toolName, clonedParams, false);
359
461
  await persistenceLayer.saveMetadata(page._donobuFlowMetadata);
360
462
  await persistenceLayer.saveToolCall(page._donobuFlowMetadata.id, result);
361
- return result;
362
- })
363
- .then((result) => result.outcome);
463
+ // Check if tool execution was successful
464
+ if (!result.outcome.isSuccessful) {
465
+ throw new Error(`${toolName} execution failed: ${JSON.stringify(result, null, 2)}`);
466
+ }
467
+ return result.outcome;
468
+ }
469
+ catch (error) {
470
+ // Mark test as failed if an exception occurs during tool execution
471
+ isTestRunFailed = true;
472
+ throw error;
473
+ }
364
474
  };
365
475
  page.analyzePageText = async (params) => {
366
476
  return page.run('analyzePageText', params);
@@ -380,16 +490,23 @@ exports.test = test_1.test.extend({
380
490
  page.extract = async (params) => {
381
491
  await maybeInitDonobu();
382
492
  if (!gptClient) {
493
+ isTestRunFailed = true;
383
494
  throw Error('Cannot extract an object from page without a GPT client set up!');
384
495
  }
385
- const persistenceLayer = await donobu.flowsPersistenceFactory.createPersistenceLayer();
386
- const toolCallHistory = await persistenceLayer.getToolCalls(page._donobuFlowMetadata.id);
387
- const structuredOutputMessage = await (0, DonobuFlow_1.extractFromPage)(params.instruction ??
388
- 'Generate an object conforming to the given JSON-schema', params.schema, page, toolCallHistory, gptClient);
389
- page._donobuFlowMetadata.resultJsonSchema = params.schema;
390
- page._donobuFlowMetadata.result = structuredOutputMessage.output;
391
- await persistenceLayer.saveMetadata(page._donobuFlowMetadata);
392
- return structuredOutputMessage.output;
496
+ try {
497
+ const persistenceLayer = await donobu.flowsPersistenceFactory.createPersistenceLayer();
498
+ const toolCallHistory = await persistenceLayer.getToolCalls(page._donobuFlowMetadata.id);
499
+ const structuredOutputMessage = await (0, DonobuFlow_1.extractFromPage)(params.instruction ??
500
+ 'Generate an object conforming to the given JSON-schema', params.schema, page, toolCallHistory, gptClient);
501
+ page._donobuFlowMetadata.resultJsonSchema = params.schema;
502
+ page._donobuFlowMetadata.result = structuredOutputMessage.output;
503
+ await persistenceLayer.saveMetadata(page._donobuFlowMetadata);
504
+ return structuredOutputMessage.output;
505
+ }
506
+ catch (error) {
507
+ isTestRunFailed = true;
508
+ throw error;
509
+ }
393
510
  };
394
511
  page.hoverOverElement = async (params) => {
395
512
  return page.run('hover', params);
@@ -415,19 +532,46 @@ exports.test = test_1.test.extend({
415
532
  try {
416
533
  // Let Playwright continue and give tests the patched page.
417
534
  await use(page);
535
+ // Check if the test status is failed in the testInfo
536
+ // This catches failures that were marked by Playwright itself
537
+ if (testInfo.status === 'failed' || testInfo.status === 'timedOut') {
538
+ isTestRunFailed = true;
539
+ }
540
+ }
541
+ catch (error) {
542
+ // Mark test as failed if an uncaught exception occurs during the test
543
+ isTestRunFailed = true;
544
+ throw error;
418
545
  }
419
546
  finally {
420
547
  try {
421
548
  const persistenceLayer = await donobu.flowsPersistenceFactory.createPersistenceLayer();
422
549
  if (page._donobuFlowMetadata) {
423
- page._donobuFlowMetadata.state = 'SUCCESS';
550
+ // Update metadata with final status
551
+ page._donobuFlowMetadata.state = isTestRunFailed
552
+ ? 'FAILED'
553
+ : 'SUCCESS';
424
554
  page._donobuFlowMetadata.completedAt = new Date().getTime();
425
555
  await persistenceLayer.saveMetadata(page._donobuFlowMetadata);
556
+ await testInfo.attach('test-flow-metadata.json', {
557
+ body: JSON.stringify(page._donobuFlowMetadata, null, 2),
558
+ contentType: 'application/json',
559
+ });
426
560
  }
427
561
  }
428
562
  catch (error) {
429
563
  // Log but don't throw, to ensure cleanup continues.
430
- console.error('Error during test cleanup:', error);
564
+ Logger_1.appLogger.error('Error during test cleanup:', error);
565
+ }
566
+ const isSelfHealEnabledEnvVar = process.env[envVars_1.ENV_VAR_NAMES.SELF_HEAL_TESTS_ENABLED]?.trim();
567
+ if (isTestRunFailed &&
568
+ (isSelfHealEnabledEnvVar === 'true' || isSelfHealEnabledEnvVar === '1')) {
569
+ try {
570
+ await selfHeal(testInfo, page._donobuFlowMetadata);
571
+ }
572
+ catch (selfHealError) {
573
+ Logger_1.appLogger.error('Error when attempting to self heal:', selfHealError);
574
+ }
431
575
  }
432
576
  }
433
577
  },