doc-detective 4.0.2-dev.9 → 4.1.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 (45) hide show
  1. package/dist/common/src/detectTests.d.ts.map +1 -1
  2. package/dist/common/src/detectTests.js +43 -12
  3. package/dist/common/src/detectTests.js.map +1 -1
  4. package/dist/common/src/fileTypes.d.ts.map +1 -1
  5. package/dist/common/src/fileTypes.js +10 -0
  6. package/dist/common/src/fileTypes.js.map +1 -1
  7. package/dist/common/src/schemas/schemas.json +868 -112
  8. package/dist/common/src/types/generated/checkLink_v3.d.ts +6 -0
  9. package/dist/common/src/types/generated/checkLink_v3.d.ts.map +1 -1
  10. package/dist/common/src/types/generated/config_v3.d.ts +6 -0
  11. package/dist/common/src/types/generated/config_v3.d.ts.map +1 -1
  12. package/dist/common/src/types/generated/goTo_v3.d.ts +6 -0
  13. package/dist/common/src/types/generated/goTo_v3.d.ts.map +1 -1
  14. package/dist/common/src/types/generated/resolvedTests_v3.d.ts +6 -0
  15. package/dist/common/src/types/generated/resolvedTests_v3.d.ts.map +1 -1
  16. package/dist/common/src/types/generated/screenshot_v3.d.ts +2 -2
  17. package/dist/common/src/types/generated/step_v3.d.ts +14 -2
  18. package/dist/common/src/types/generated/step_v3.d.ts.map +1 -1
  19. package/dist/common/src/types/generated/test_v3.d.ts +28 -4
  20. package/dist/common/src/types/generated/test_v3.d.ts.map +1 -1
  21. package/dist/core/config.d.ts.map +1 -1
  22. package/dist/core/config.js +10 -0
  23. package/dist/core/config.js.map +1 -1
  24. package/dist/core/integrations/heretto.d.ts.map +1 -1
  25. package/dist/core/integrations/heretto.js +6 -1
  26. package/dist/core/integrations/heretto.js.map +1 -1
  27. package/dist/core/tests/checkLink.d.ts.map +1 -1
  28. package/dist/core/tests/checkLink.js +17 -2
  29. package/dist/core/tests/checkLink.js.map +1 -1
  30. package/dist/core/tests/goTo.d.ts.map +1 -1
  31. package/dist/core/tests/goTo.js +17 -2
  32. package/dist/core/tests/goTo.js.map +1 -1
  33. package/dist/core/tests/loadCookie.d.ts.map +1 -1
  34. package/dist/core/tests/loadCookie.js +12 -2
  35. package/dist/core/tests/loadCookie.js.map +1 -1
  36. package/dist/core/tests/saveScreenshot.d.ts +15 -1
  37. package/dist/core/tests/saveScreenshot.d.ts.map +1 -1
  38. package/dist/core/tests/saveScreenshot.js +171 -50
  39. package/dist/core/tests/saveScreenshot.js.map +1 -1
  40. package/dist/core/utils.d.ts +9 -2
  41. package/dist/core/utils.d.ts.map +1 -1
  42. package/dist/core/utils.js +234 -14
  43. package/dist/core/utils.js.map +1 -1
  44. package/dist/index.cjs +1235 -181
  45. package/package.json +16 -2
package/dist/index.cjs CHANGED
@@ -83,6 +83,14 @@ var schemas_default = {
83
83
  "trim"
84
84
  ]
85
85
  },
86
+ params: {
87
+ description: "Query parameters to append to the resolved URL. Merged on top of `originParams` from config; step keys win on collision. If `url` already contains a colliding query key, the value here replaces it. Values support environment variable substitution via `$VAR` syntax. WARNING: values are embedded in the request URL and appear in test results, logs, and reports.",
88
+ type: "object",
89
+ additionalProperties: {
90
+ type: "string"
91
+ },
92
+ default: {}
93
+ },
86
94
  statusCodes: {
87
95
  description: "Accepted status codes. If the specified URL returns a code other than what is specified here, the action fails.",
88
96
  anyOf: [
@@ -166,6 +174,14 @@ var schemas_default = {
166
174
  "trim"
167
175
  ]
168
176
  },
177
+ params: {
178
+ description: "Query parameters to append to the resolved URL. Merged on top of `originParams` from config; step keys win on collision. If `url` already contains a colliding query key, the value here replaces it. Values support environment variable substitution via `$VAR` syntax. WARNING: values are embedded in the request URL and appear in test results, logs, and reports.",
179
+ type: "object",
180
+ additionalProperties: {
181
+ type: "string"
182
+ },
183
+ default: {}
184
+ },
169
185
  statusCodes: {
170
186
  description: "Accepted status codes. If the specified URL returns a code other than what is specified here, the action fails.",
171
187
  anyOf: [
@@ -228,6 +244,13 @@ var schemas_default = {
228
244
  statusCodes: [
229
245
  200
230
246
  ]
247
+ },
248
+ {
249
+ url: "/health",
250
+ origin: "https://my-app.com",
251
+ params: {
252
+ __clerk_testing_token: "$CLERK_TESTING_TOKEN"
253
+ }
231
254
  }
232
255
  ]
233
256
  },
@@ -573,6 +596,14 @@ var schemas_default = {
573
596
  description: "Default protocol and domain to use for relative URLs.",
574
597
  type: "string"
575
598
  },
599
+ originParams: {
600
+ description: "Query parameters to append to URLs resolved against `origin`. Values support environment variable substitution via `$VAR` syntax. Step-level `params` on `goTo` / `checkLink` are merged on top of these, with step keys winning on collision. WARNING: values are embedded in request URLs and appear verbatim in test results, logs, and reports \u2014 avoid putting long-lived secrets here.",
601
+ type: "object",
602
+ additionalProperties: {
603
+ type: "string"
604
+ },
605
+ default: {}
606
+ },
576
607
  beforeAny: {
577
608
  description: "Path(s) to test specifications to perform before those specified by `input`. Useful for setting up testing environments.",
578
609
  anyOf: [
@@ -1587,6 +1618,14 @@ var schemas_default = {
1587
1618
  "trim"
1588
1619
  ]
1589
1620
  },
1621
+ params: {
1622
+ description: "Query parameters to append to the resolved URL. Merged on top of `originParams` from config; step keys win on collision. If `url` already contains a colliding query key, the value here replaces it. Values support environment variable substitution via `$VAR` syntax. WARNING: values are embedded in the request URL and appear in test results, logs, and reports.",
1623
+ type: "object",
1624
+ additionalProperties: {
1625
+ type: "string"
1626
+ },
1627
+ default: {}
1628
+ },
1590
1629
  statusCodes: {
1591
1630
  description: "Accepted status codes. If the specified URL returns a code other than what is specified here, the action fails.",
1592
1631
  anyOf: [
@@ -1670,6 +1709,14 @@ var schemas_default = {
1670
1709
  "trim"
1671
1710
  ]
1672
1711
  },
1712
+ params: {
1713
+ description: "Query parameters to append to the resolved URL. Merged on top of `originParams` from config; step keys win on collision. If `url` already contains a colliding query key, the value here replaces it. Values support environment variable substitution via `$VAR` syntax. WARNING: values are embedded in the request URL and appear in test results, logs, and reports.",
1714
+ type: "object",
1715
+ additionalProperties: {
1716
+ type: "string"
1717
+ },
1718
+ default: {}
1719
+ },
1673
1720
  statusCodes: {
1674
1721
  description: "Accepted status codes. If the specified URL returns a code other than what is specified here, the action fails.",
1675
1722
  anyOf: [
@@ -1732,6 +1779,13 @@ var schemas_default = {
1732
1779
  statusCodes: [
1733
1780
  200
1734
1781
  ]
1782
+ },
1783
+ {
1784
+ url: "/health",
1785
+ origin: "https://my-app.com",
1786
+ params: {
1787
+ __clerk_testing_token: "$CLERK_TESTING_TOKEN"
1788
+ }
1735
1789
  }
1736
1790
  ]
1737
1791
  }
@@ -3672,6 +3726,14 @@ var schemas_default = {
3672
3726
  "trim"
3673
3727
  ]
3674
3728
  },
3729
+ params: {
3730
+ description: "Query parameters to append to the resolved URL. Merged on top of `originParams` from config; step keys win on collision. If `url` already contains a colliding query key, the value here replaces it. Values support environment variable substitution via `$VAR` syntax. WARNING: values are embedded in the request URL and appear in test results, logs, and reports.",
3731
+ type: "object",
3732
+ additionalProperties: {
3733
+ type: "string"
3734
+ },
3735
+ default: {}
3736
+ },
3675
3737
  timeout: {
3676
3738
  type: "integer",
3677
3739
  description: "Maximum time in milliseconds to wait for the page to be ready. If exceeded, the goTo action fails.",
@@ -3844,6 +3906,14 @@ var schemas_default = {
3844
3906
  "trim"
3845
3907
  ]
3846
3908
  },
3909
+ params: {
3910
+ description: "Query parameters to append to the resolved URL. Merged on top of `originParams` from config; step keys win on collision. If `url` already contains a colliding query key, the value here replaces it. Values support environment variable substitution via `$VAR` syntax. WARNING: values are embedded in the request URL and appear in test results, logs, and reports.",
3911
+ type: "object",
3912
+ additionalProperties: {
3913
+ type: "string"
3914
+ },
3915
+ default: {}
3916
+ },
3847
3917
  timeout: {
3848
3918
  type: "integer",
3849
3919
  description: "Maximum time in milliseconds to wait for the page to be ready. If exceeded, the goTo action fails.",
@@ -3993,6 +4063,13 @@ var schemas_default = {
3993
4063
  url: "/search",
3994
4064
  origin: "https://www.google.com"
3995
4065
  },
4066
+ {
4067
+ url: "/dashboard",
4068
+ origin: "https://my-app.com",
4069
+ params: {
4070
+ __clerk_testing_token: "$CLERK_TESTING_TOKEN"
4071
+ }
4072
+ },
3996
4073
  {
3997
4074
  url: "https://www.example.com",
3998
4075
  waitUntil: {
@@ -6258,9 +6335,9 @@ var schemas_default = {
6258
6335
  anyOf: [
6259
6336
  {
6260
6337
  title: "Screenshot (simple)",
6261
- description: "File path of the PNG file. Accepts absolute paths. If not specified, the file name is the ID of the step.",
6338
+ description: "File path of the PNG file. Accepts absolute paths. If not specified, the file name is the ID of the step. If an `http(s)` URL is supplied, the remote image is downloaded and used as a read-only reference for comparison; the new capture is written to a local run-specific folder instead of being uploaded back to the URL.",
6262
6339
  type: "string",
6263
- pattern: "([A-Za-z0-9_-]*\\.(png|PNG)$|\\$[A-Za-z0-9_]+)",
6340
+ pattern: "^(?:https?:\\/\\/.+\\.(?:png|PNG)(?:\\?.*)?|[A-Za-z]:[\\/\\\\].*\\.(?:png|PNG)|[\\/\\\\]?[A-Za-z0-9_.\\/\\\\-]*\\.(?:png|PNG)|\\$[A-Za-z0-9_]+)$",
6264
6341
  transform: [
6265
6342
  "trim"
6266
6343
  ]
@@ -6271,9 +6348,9 @@ var schemas_default = {
6271
6348
  properties: {
6272
6349
  path: {
6273
6350
  title: "Screenshot (simple)",
6274
- description: "File path of the PNG file. Accepts absolute paths. If not specified, the file name is the ID of the step.",
6351
+ description: "File path of the PNG file. Accepts absolute paths. If not specified, the file name is the ID of the step. If an `http(s)` URL is supplied, the remote image is downloaded and used as a read-only reference for comparison; the new capture is written to a local run-specific folder instead of being uploaded back to the URL.",
6275
6352
  type: "string",
6276
- pattern: "([A-Za-z0-9_-]*\\.(png|PNG)$|\\$[A-Za-z0-9_]+)",
6353
+ pattern: "^(?:https?:\\/\\/.+\\.(?:png|PNG)(?:\\?.*)?|[A-Za-z]:[\\/\\\\].*\\.(?:png|PNG)|[\\/\\\\]?[A-Za-z0-9_.\\/\\\\-]*\\.(?:png|PNG)|\\$[A-Za-z0-9_]+)$",
6277
6354
  transform: [
6278
6355
  "trim"
6279
6356
  ]
@@ -6504,9 +6581,9 @@ var schemas_default = {
6504
6581
  schemas: {
6505
6582
  path: {
6506
6583
  title: "Screenshot (simple)",
6507
- description: "File path of the PNG file. Accepts absolute paths. If not specified, the file name is the ID of the step.",
6584
+ description: "File path of the PNG file. Accepts absolute paths. If not specified, the file name is the ID of the step. If an `http(s)` URL is supplied, the remote image is downloaded and used as a read-only reference for comparison; the new capture is written to a local run-specific folder instead of being uploaded back to the URL.",
6508
6585
  type: "string",
6509
- pattern: "([A-Za-z0-9_-]*\\.(png|PNG)$|\\$[A-Za-z0-9_]+)",
6586
+ pattern: "^(?:https?:\\/\\/.+\\.(?:png|PNG)(?:\\?.*)?|[A-Za-z]:[\\/\\\\].*\\.(?:png|PNG)|[\\/\\\\]?[A-Za-z0-9_.\\/\\\\-]*\\.(?:png|PNG)|\\$[A-Za-z0-9_]+)$",
6510
6587
  transform: [
6511
6588
  "trim"
6512
6589
  ]
@@ -6517,9 +6594,9 @@ var schemas_default = {
6517
6594
  properties: {
6518
6595
  path: {
6519
6596
  title: "Screenshot (simple)",
6520
- description: "File path of the PNG file. Accepts absolute paths. If not specified, the file name is the ID of the step.",
6597
+ description: "File path of the PNG file. Accepts absolute paths. If not specified, the file name is the ID of the step. If an `http(s)` URL is supplied, the remote image is downloaded and used as a read-only reference for comparison; the new capture is written to a local run-specific folder instead of being uploaded back to the URL.",
6521
6598
  type: "string",
6522
- pattern: "([A-Za-z0-9_-]*\\.(png|PNG)$|\\$[A-Za-z0-9_]+)",
6599
+ pattern: "^(?:https?:\\/\\/.+\\.(?:png|PNG)(?:\\?.*)?|[A-Za-z]:[\\/\\\\].*\\.(?:png|PNG)|[\\/\\\\]?[A-Za-z0-9_.\\/\\\\-]*\\.(?:png|PNG)|\\$[A-Za-z0-9_]+)$",
6523
6600
  transform: [
6524
6601
  "trim"
6525
6602
  ]
@@ -6901,6 +6978,12 @@ var schemas_default = {
6901
6978
  "image.png",
6902
6979
  "static/images/image.png",
6903
6980
  "/User/manny/projects/doc-detective/static/images/image.png",
6981
+ "https://example.com/static/images/image.png",
6982
+ {
6983
+ path: "https://promptless-customer-doc-assets.s3.amazonaws.com/docs-images/request-changes-button-0c851bb3.png",
6984
+ maxVariation: 0.05,
6985
+ overwrite: "aboveVariation"
6986
+ },
6904
6987
  {
6905
6988
  path: "image.png",
6906
6989
  directory: "static/images",
@@ -10250,6 +10333,14 @@ var schemas_default = {
10250
10333
  "trim"
10251
10334
  ]
10252
10335
  },
10336
+ params: {
10337
+ description: "Query parameters to append to the resolved URL. Merged on top of `originParams` from config; step keys win on collision. If `url` already contains a colliding query key, the value here replaces it. Values support environment variable substitution via `$VAR` syntax. WARNING: values are embedded in the request URL and appear in test results, logs, and reports.",
10338
+ type: "object",
10339
+ additionalProperties: {
10340
+ type: "string"
10341
+ },
10342
+ default: {}
10343
+ },
10253
10344
  statusCodes: {
10254
10345
  description: "Accepted status codes. If the specified URL returns a code other than what is specified here, the action fails.",
10255
10346
  anyOf: [
@@ -10333,6 +10424,14 @@ var schemas_default = {
10333
10424
  "trim"
10334
10425
  ]
10335
10426
  },
10427
+ params: {
10428
+ description: "Query parameters to append to the resolved URL. Merged on top of `originParams` from config; step keys win on collision. If `url` already contains a colliding query key, the value here replaces it. Values support environment variable substitution via `$VAR` syntax. WARNING: values are embedded in the request URL and appear in test results, logs, and reports.",
10429
+ type: "object",
10430
+ additionalProperties: {
10431
+ type: "string"
10432
+ },
10433
+ default: {}
10434
+ },
10336
10435
  statusCodes: {
10337
10436
  description: "Accepted status codes. If the specified URL returns a code other than what is specified here, the action fails.",
10338
10437
  anyOf: [
@@ -10395,6 +10494,13 @@ var schemas_default = {
10395
10494
  statusCodes: [
10396
10495
  200
10397
10496
  ]
10497
+ },
10498
+ {
10499
+ url: "/health",
10500
+ origin: "https://my-app.com",
10501
+ params: {
10502
+ __clerk_testing_token: "$CLERK_TESTING_TOKEN"
10503
+ }
10398
10504
  }
10399
10505
  ]
10400
10506
  }
@@ -12335,6 +12441,14 @@ var schemas_default = {
12335
12441
  "trim"
12336
12442
  ]
12337
12443
  },
12444
+ params: {
12445
+ description: "Query parameters to append to the resolved URL. Merged on top of `originParams` from config; step keys win on collision. If `url` already contains a colliding query key, the value here replaces it. Values support environment variable substitution via `$VAR` syntax. WARNING: values are embedded in the request URL and appear in test results, logs, and reports.",
12446
+ type: "object",
12447
+ additionalProperties: {
12448
+ type: "string"
12449
+ },
12450
+ default: {}
12451
+ },
12338
12452
  timeout: {
12339
12453
  type: "integer",
12340
12454
  description: "Maximum time in milliseconds to wait for the page to be ready. If exceeded, the goTo action fails.",
@@ -12507,6 +12621,14 @@ var schemas_default = {
12507
12621
  "trim"
12508
12622
  ]
12509
12623
  },
12624
+ params: {
12625
+ description: "Query parameters to append to the resolved URL. Merged on top of `originParams` from config; step keys win on collision. If `url` already contains a colliding query key, the value here replaces it. Values support environment variable substitution via `$VAR` syntax. WARNING: values are embedded in the request URL and appear in test results, logs, and reports.",
12626
+ type: "object",
12627
+ additionalProperties: {
12628
+ type: "string"
12629
+ },
12630
+ default: {}
12631
+ },
12510
12632
  timeout: {
12511
12633
  type: "integer",
12512
12634
  description: "Maximum time in milliseconds to wait for the page to be ready. If exceeded, the goTo action fails.",
@@ -12656,6 +12778,13 @@ var schemas_default = {
12656
12778
  url: "/search",
12657
12779
  origin: "https://www.google.com"
12658
12780
  },
12781
+ {
12782
+ url: "/dashboard",
12783
+ origin: "https://my-app.com",
12784
+ params: {
12785
+ __clerk_testing_token: "$CLERK_TESTING_TOKEN"
12786
+ }
12787
+ },
12659
12788
  {
12660
12789
  url: "https://www.example.com",
12661
12790
  waitUntil: {
@@ -14921,9 +15050,9 @@ var schemas_default = {
14921
15050
  anyOf: [
14922
15051
  {
14923
15052
  title: "Screenshot (simple)",
14924
- description: "File path of the PNG file. Accepts absolute paths. If not specified, the file name is the ID of the step.",
15053
+ description: "File path of the PNG file. Accepts absolute paths. If not specified, the file name is the ID of the step. If an `http(s)` URL is supplied, the remote image is downloaded and used as a read-only reference for comparison; the new capture is written to a local run-specific folder instead of being uploaded back to the URL.",
14925
15054
  type: "string",
14926
- pattern: "([A-Za-z0-9_-]*\\.(png|PNG)$|\\$[A-Za-z0-9_]+)",
15055
+ pattern: "^(?:https?:\\/\\/.+\\.(?:png|PNG)(?:\\?.*)?|[A-Za-z]:[\\/\\\\].*\\.(?:png|PNG)|[\\/\\\\]?[A-Za-z0-9_.\\/\\\\-]*\\.(?:png|PNG)|\\$[A-Za-z0-9_]+)$",
14927
15056
  transform: [
14928
15057
  "trim"
14929
15058
  ]
@@ -14934,9 +15063,9 @@ var schemas_default = {
14934
15063
  properties: {
14935
15064
  path: {
14936
15065
  title: "Screenshot (simple)",
14937
- description: "File path of the PNG file. Accepts absolute paths. If not specified, the file name is the ID of the step.",
15066
+ description: "File path of the PNG file. Accepts absolute paths. If not specified, the file name is the ID of the step. If an `http(s)` URL is supplied, the remote image is downloaded and used as a read-only reference for comparison; the new capture is written to a local run-specific folder instead of being uploaded back to the URL.",
14938
15067
  type: "string",
14939
- pattern: "([A-Za-z0-9_-]*\\.(png|PNG)$|\\$[A-Za-z0-9_]+)",
15068
+ pattern: "^(?:https?:\\/\\/.+\\.(?:png|PNG)(?:\\?.*)?|[A-Za-z]:[\\/\\\\].*\\.(?:png|PNG)|[\\/\\\\]?[A-Za-z0-9_.\\/\\\\-]*\\.(?:png|PNG)|\\$[A-Za-z0-9_]+)$",
14940
15069
  transform: [
14941
15070
  "trim"
14942
15071
  ]
@@ -15167,9 +15296,9 @@ var schemas_default = {
15167
15296
  schemas: {
15168
15297
  path: {
15169
15298
  title: "Screenshot (simple)",
15170
- description: "File path of the PNG file. Accepts absolute paths. If not specified, the file name is the ID of the step.",
15299
+ description: "File path of the PNG file. Accepts absolute paths. If not specified, the file name is the ID of the step. If an `http(s)` URL is supplied, the remote image is downloaded and used as a read-only reference for comparison; the new capture is written to a local run-specific folder instead of being uploaded back to the URL.",
15171
15300
  type: "string",
15172
- pattern: "([A-Za-z0-9_-]*\\.(png|PNG)$|\\$[A-Za-z0-9_]+)",
15301
+ pattern: "^(?:https?:\\/\\/.+\\.(?:png|PNG)(?:\\?.*)?|[A-Za-z]:[\\/\\\\].*\\.(?:png|PNG)|[\\/\\\\]?[A-Za-z0-9_.\\/\\\\-]*\\.(?:png|PNG)|\\$[A-Za-z0-9_]+)$",
15173
15302
  transform: [
15174
15303
  "trim"
15175
15304
  ]
@@ -15180,9 +15309,9 @@ var schemas_default = {
15180
15309
  properties: {
15181
15310
  path: {
15182
15311
  title: "Screenshot (simple)",
15183
- description: "File path of the PNG file. Accepts absolute paths. If not specified, the file name is the ID of the step.",
15312
+ description: "File path of the PNG file. Accepts absolute paths. If not specified, the file name is the ID of the step. If an `http(s)` URL is supplied, the remote image is downloaded and used as a read-only reference for comparison; the new capture is written to a local run-specific folder instead of being uploaded back to the URL.",
15184
15313
  type: "string",
15185
- pattern: "([A-Za-z0-9_-]*\\.(png|PNG)$|\\$[A-Za-z0-9_]+)",
15314
+ pattern: "^(?:https?:\\/\\/.+\\.(?:png|PNG)(?:\\?.*)?|[A-Za-z]:[\\/\\\\].*\\.(?:png|PNG)|[\\/\\\\]?[A-Za-z0-9_.\\/\\\\-]*\\.(?:png|PNG)|\\$[A-Za-z0-9_]+)$",
15186
15315
  transform: [
15187
15316
  "trim"
15188
15317
  ]
@@ -15564,6 +15693,12 @@ var schemas_default = {
15564
15693
  "image.png",
15565
15694
  "static/images/image.png",
15566
15695
  "/User/manny/projects/doc-detective/static/images/image.png",
15696
+ "https://example.com/static/images/image.png",
15697
+ {
15698
+ path: "https://promptless-customer-doc-assets.s3.amazonaws.com/docs-images/request-changes-button-0c851bb3.png",
15699
+ maxVariation: 0.05,
15700
+ overwrite: "aboveVariation"
15701
+ },
15567
15702
  {
15568
15703
  path: "image.png",
15569
15704
  directory: "static/images",
@@ -17984,6 +18119,12 @@ var schemas_default = {
17984
18119
  "html"
17985
18120
  ]
17986
18121
  },
18122
+ {
18123
+ origin: "https://my-app.com",
18124
+ originParams: {
18125
+ __clerk_testing_token: "$CLERK_TESTING_TOKEN"
18126
+ }
18127
+ },
17987
18128
  {
17988
18129
  fileTypes: [
17989
18130
  {
@@ -20349,6 +20490,14 @@ var schemas_default = {
20349
20490
  "trim"
20350
20491
  ]
20351
20492
  },
20493
+ params: {
20494
+ description: "Query parameters to append to the resolved URL. Merged on top of `originParams` from config; step keys win on collision. If `url` already contains a colliding query key, the value here replaces it. Values support environment variable substitution via `$VAR` syntax. WARNING: values are embedded in the request URL and appear in test results, logs, and reports.",
20495
+ type: "object",
20496
+ additionalProperties: {
20497
+ type: "string"
20498
+ },
20499
+ default: {}
20500
+ },
20352
20501
  timeout: {
20353
20502
  type: "integer",
20354
20503
  description: "Maximum time in milliseconds to wait for the page to be ready. If exceeded, the goTo action fails.",
@@ -20521,6 +20670,14 @@ var schemas_default = {
20521
20670
  "trim"
20522
20671
  ]
20523
20672
  },
20673
+ params: {
20674
+ description: "Query parameters to append to the resolved URL. Merged on top of `originParams` from config; step keys win on collision. If `url` already contains a colliding query key, the value here replaces it. Values support environment variable substitution via `$VAR` syntax. WARNING: values are embedded in the request URL and appear in test results, logs, and reports.",
20675
+ type: "object",
20676
+ additionalProperties: {
20677
+ type: "string"
20678
+ },
20679
+ default: {}
20680
+ },
20524
20681
  timeout: {
20525
20682
  type: "integer",
20526
20683
  description: "Maximum time in milliseconds to wait for the page to be ready. If exceeded, the goTo action fails.",
@@ -20670,6 +20827,13 @@ var schemas_default = {
20670
20827
  url: "/search",
20671
20828
  origin: "https://www.google.com"
20672
20829
  },
20830
+ {
20831
+ url: "/dashboard",
20832
+ origin: "https://my-app.com",
20833
+ params: {
20834
+ __clerk_testing_token: "$CLERK_TESTING_TOKEN"
20835
+ }
20836
+ },
20673
20837
  {
20674
20838
  url: "https://www.example.com",
20675
20839
  waitUntil: {
@@ -22329,6 +22493,14 @@ var schemas_default = {
22329
22493
  description: "Default protocol and domain to use for relative URLs.",
22330
22494
  type: "string"
22331
22495
  },
22496
+ originParams: {
22497
+ description: "Query parameters to append to URLs resolved against `origin`. Values support environment variable substitution via `$VAR` syntax. Step-level `params` on `goTo` / `checkLink` are merged on top of these, with step keys winning on collision. WARNING: values are embedded in request URLs and appear verbatim in test results, logs, and reports \u2014 avoid putting long-lived secrets here.",
22498
+ type: "object",
22499
+ additionalProperties: {
22500
+ type: "string"
22501
+ },
22502
+ default: {}
22503
+ },
22332
22504
  beforeAny: {
22333
22505
  description: "Path(s) to test specifications to perform before those specified by `input`. Useful for setting up testing environments.",
22334
22506
  anyOf: [
@@ -23343,6 +23515,14 @@ var schemas_default = {
23343
23515
  "trim"
23344
23516
  ]
23345
23517
  },
23518
+ params: {
23519
+ description: "Query parameters to append to the resolved URL. Merged on top of `originParams` from config; step keys win on collision. If `url` already contains a colliding query key, the value here replaces it. Values support environment variable substitution via `$VAR` syntax. WARNING: values are embedded in the request URL and appear in test results, logs, and reports.",
23520
+ type: "object",
23521
+ additionalProperties: {
23522
+ type: "string"
23523
+ },
23524
+ default: {}
23525
+ },
23346
23526
  statusCodes: {
23347
23527
  description: "Accepted status codes. If the specified URL returns a code other than what is specified here, the action fails.",
23348
23528
  anyOf: [
@@ -23426,6 +23606,14 @@ var schemas_default = {
23426
23606
  "trim"
23427
23607
  ]
23428
23608
  },
23609
+ params: {
23610
+ description: "Query parameters to append to the resolved URL. Merged on top of `originParams` from config; step keys win on collision. If `url` already contains a colliding query key, the value here replaces it. Values support environment variable substitution via `$VAR` syntax. WARNING: values are embedded in the request URL and appear in test results, logs, and reports.",
23611
+ type: "object",
23612
+ additionalProperties: {
23613
+ type: "string"
23614
+ },
23615
+ default: {}
23616
+ },
23429
23617
  statusCodes: {
23430
23618
  description: "Accepted status codes. If the specified URL returns a code other than what is specified here, the action fails.",
23431
23619
  anyOf: [
@@ -23488,6 +23676,13 @@ var schemas_default = {
23488
23676
  statusCodes: [
23489
23677
  200
23490
23678
  ]
23679
+ },
23680
+ {
23681
+ url: "/health",
23682
+ origin: "https://my-app.com",
23683
+ params: {
23684
+ __clerk_testing_token: "$CLERK_TESTING_TOKEN"
23685
+ }
23491
23686
  }
23492
23687
  ]
23493
23688
  }
@@ -25428,6 +25623,14 @@ var schemas_default = {
25428
25623
  "trim"
25429
25624
  ]
25430
25625
  },
25626
+ params: {
25627
+ description: "Query parameters to append to the resolved URL. Merged on top of `originParams` from config; step keys win on collision. If `url` already contains a colliding query key, the value here replaces it. Values support environment variable substitution via `$VAR` syntax. WARNING: values are embedded in the request URL and appear in test results, logs, and reports.",
25628
+ type: "object",
25629
+ additionalProperties: {
25630
+ type: "string"
25631
+ },
25632
+ default: {}
25633
+ },
25431
25634
  timeout: {
25432
25635
  type: "integer",
25433
25636
  description: "Maximum time in milliseconds to wait for the page to be ready. If exceeded, the goTo action fails.",
@@ -25600,6 +25803,14 @@ var schemas_default = {
25600
25803
  "trim"
25601
25804
  ]
25602
25805
  },
25806
+ params: {
25807
+ description: "Query parameters to append to the resolved URL. Merged on top of `originParams` from config; step keys win on collision. If `url` already contains a colliding query key, the value here replaces it. Values support environment variable substitution via `$VAR` syntax. WARNING: values are embedded in the request URL and appear in test results, logs, and reports.",
25808
+ type: "object",
25809
+ additionalProperties: {
25810
+ type: "string"
25811
+ },
25812
+ default: {}
25813
+ },
25603
25814
  timeout: {
25604
25815
  type: "integer",
25605
25816
  description: "Maximum time in milliseconds to wait for the page to be ready. If exceeded, the goTo action fails.",
@@ -25749,6 +25960,13 @@ var schemas_default = {
25749
25960
  url: "/search",
25750
25961
  origin: "https://www.google.com"
25751
25962
  },
25963
+ {
25964
+ url: "/dashboard",
25965
+ origin: "https://my-app.com",
25966
+ params: {
25967
+ __clerk_testing_token: "$CLERK_TESTING_TOKEN"
25968
+ }
25969
+ },
25752
25970
  {
25753
25971
  url: "https://www.example.com",
25754
25972
  waitUntil: {
@@ -28014,9 +28232,9 @@ var schemas_default = {
28014
28232
  anyOf: [
28015
28233
  {
28016
28234
  title: "Screenshot (simple)",
28017
- description: "File path of the PNG file. Accepts absolute paths. If not specified, the file name is the ID of the step.",
28235
+ description: "File path of the PNG file. Accepts absolute paths. If not specified, the file name is the ID of the step. If an `http(s)` URL is supplied, the remote image is downloaded and used as a read-only reference for comparison; the new capture is written to a local run-specific folder instead of being uploaded back to the URL.",
28018
28236
  type: "string",
28019
- pattern: "([A-Za-z0-9_-]*\\.(png|PNG)$|\\$[A-Za-z0-9_]+)",
28237
+ pattern: "^(?:https?:\\/\\/.+\\.(?:png|PNG)(?:\\?.*)?|[A-Za-z]:[\\/\\\\].*\\.(?:png|PNG)|[\\/\\\\]?[A-Za-z0-9_.\\/\\\\-]*\\.(?:png|PNG)|\\$[A-Za-z0-9_]+)$",
28020
28238
  transform: [
28021
28239
  "trim"
28022
28240
  ]
@@ -28027,9 +28245,9 @@ var schemas_default = {
28027
28245
  properties: {
28028
28246
  path: {
28029
28247
  title: "Screenshot (simple)",
28030
- description: "File path of the PNG file. Accepts absolute paths. If not specified, the file name is the ID of the step.",
28248
+ description: "File path of the PNG file. Accepts absolute paths. If not specified, the file name is the ID of the step. If an `http(s)` URL is supplied, the remote image is downloaded and used as a read-only reference for comparison; the new capture is written to a local run-specific folder instead of being uploaded back to the URL.",
28031
28249
  type: "string",
28032
- pattern: "([A-Za-z0-9_-]*\\.(png|PNG)$|\\$[A-Za-z0-9_]+)",
28250
+ pattern: "^(?:https?:\\/\\/.+\\.(?:png|PNG)(?:\\?.*)?|[A-Za-z]:[\\/\\\\].*\\.(?:png|PNG)|[\\/\\\\]?[A-Za-z0-9_.\\/\\\\-]*\\.(?:png|PNG)|\\$[A-Za-z0-9_]+)$",
28033
28251
  transform: [
28034
28252
  "trim"
28035
28253
  ]
@@ -28260,9 +28478,9 @@ var schemas_default = {
28260
28478
  schemas: {
28261
28479
  path: {
28262
28480
  title: "Screenshot (simple)",
28263
- description: "File path of the PNG file. Accepts absolute paths. If not specified, the file name is the ID of the step.",
28481
+ description: "File path of the PNG file. Accepts absolute paths. If not specified, the file name is the ID of the step. If an `http(s)` URL is supplied, the remote image is downloaded and used as a read-only reference for comparison; the new capture is written to a local run-specific folder instead of being uploaded back to the URL.",
28264
28482
  type: "string",
28265
- pattern: "([A-Za-z0-9_-]*\\.(png|PNG)$|\\$[A-Za-z0-9_]+)",
28483
+ pattern: "^(?:https?:\\/\\/.+\\.(?:png|PNG)(?:\\?.*)?|[A-Za-z]:[\\/\\\\].*\\.(?:png|PNG)|[\\/\\\\]?[A-Za-z0-9_.\\/\\\\-]*\\.(?:png|PNG)|\\$[A-Za-z0-9_]+)$",
28266
28484
  transform: [
28267
28485
  "trim"
28268
28486
  ]
@@ -28273,9 +28491,9 @@ var schemas_default = {
28273
28491
  properties: {
28274
28492
  path: {
28275
28493
  title: "Screenshot (simple)",
28276
- description: "File path of the PNG file. Accepts absolute paths. If not specified, the file name is the ID of the step.",
28494
+ description: "File path of the PNG file. Accepts absolute paths. If not specified, the file name is the ID of the step. If an `http(s)` URL is supplied, the remote image is downloaded and used as a read-only reference for comparison; the new capture is written to a local run-specific folder instead of being uploaded back to the URL.",
28277
28495
  type: "string",
28278
- pattern: "([A-Za-z0-9_-]*\\.(png|PNG)$|\\$[A-Za-z0-9_]+)",
28496
+ pattern: "^(?:https?:\\/\\/.+\\.(?:png|PNG)(?:\\?.*)?|[A-Za-z]:[\\/\\\\].*\\.(?:png|PNG)|[\\/\\\\]?[A-Za-z0-9_.\\/\\\\-]*\\.(?:png|PNG)|\\$[A-Za-z0-9_]+)$",
28279
28497
  transform: [
28280
28498
  "trim"
28281
28499
  ]
@@ -28657,6 +28875,12 @@ var schemas_default = {
28657
28875
  "image.png",
28658
28876
  "static/images/image.png",
28659
28877
  "/User/manny/projects/doc-detective/static/images/image.png",
28878
+ "https://example.com/static/images/image.png",
28879
+ {
28880
+ path: "https://promptless-customer-doc-assets.s3.amazonaws.com/docs-images/request-changes-button-0c851bb3.png",
28881
+ maxVariation: 0.05,
28882
+ overwrite: "aboveVariation"
28883
+ },
28660
28884
  {
28661
28885
  path: "image.png",
28662
28886
  directory: "static/images",
@@ -32006,6 +32230,14 @@ var schemas_default = {
32006
32230
  "trim"
32007
32231
  ]
32008
32232
  },
32233
+ params: {
32234
+ description: "Query parameters to append to the resolved URL. Merged on top of `originParams` from config; step keys win on collision. If `url` already contains a colliding query key, the value here replaces it. Values support environment variable substitution via `$VAR` syntax. WARNING: values are embedded in the request URL and appear in test results, logs, and reports.",
32235
+ type: "object",
32236
+ additionalProperties: {
32237
+ type: "string"
32238
+ },
32239
+ default: {}
32240
+ },
32009
32241
  statusCodes: {
32010
32242
  description: "Accepted status codes. If the specified URL returns a code other than what is specified here, the action fails.",
32011
32243
  anyOf: [
@@ -32089,6 +32321,14 @@ var schemas_default = {
32089
32321
  "trim"
32090
32322
  ]
32091
32323
  },
32324
+ params: {
32325
+ description: "Query parameters to append to the resolved URL. Merged on top of `originParams` from config; step keys win on collision. If `url` already contains a colliding query key, the value here replaces it. Values support environment variable substitution via `$VAR` syntax. WARNING: values are embedded in the request URL and appear in test results, logs, and reports.",
32326
+ type: "object",
32327
+ additionalProperties: {
32328
+ type: "string"
32329
+ },
32330
+ default: {}
32331
+ },
32092
32332
  statusCodes: {
32093
32333
  description: "Accepted status codes. If the specified URL returns a code other than what is specified here, the action fails.",
32094
32334
  anyOf: [
@@ -32151,6 +32391,13 @@ var schemas_default = {
32151
32391
  statusCodes: [
32152
32392
  200
32153
32393
  ]
32394
+ },
32395
+ {
32396
+ url: "/health",
32397
+ origin: "https://my-app.com",
32398
+ params: {
32399
+ __clerk_testing_token: "$CLERK_TESTING_TOKEN"
32400
+ }
32154
32401
  }
32155
32402
  ]
32156
32403
  }
@@ -34091,6 +34338,14 @@ var schemas_default = {
34091
34338
  "trim"
34092
34339
  ]
34093
34340
  },
34341
+ params: {
34342
+ description: "Query parameters to append to the resolved URL. Merged on top of `originParams` from config; step keys win on collision. If `url` already contains a colliding query key, the value here replaces it. Values support environment variable substitution via `$VAR` syntax. WARNING: values are embedded in the request URL and appear in test results, logs, and reports.",
34343
+ type: "object",
34344
+ additionalProperties: {
34345
+ type: "string"
34346
+ },
34347
+ default: {}
34348
+ },
34094
34349
  timeout: {
34095
34350
  type: "integer",
34096
34351
  description: "Maximum time in milliseconds to wait for the page to be ready. If exceeded, the goTo action fails.",
@@ -34263,6 +34518,14 @@ var schemas_default = {
34263
34518
  "trim"
34264
34519
  ]
34265
34520
  },
34521
+ params: {
34522
+ description: "Query parameters to append to the resolved URL. Merged on top of `originParams` from config; step keys win on collision. If `url` already contains a colliding query key, the value here replaces it. Values support environment variable substitution via `$VAR` syntax. WARNING: values are embedded in the request URL and appear in test results, logs, and reports.",
34523
+ type: "object",
34524
+ additionalProperties: {
34525
+ type: "string"
34526
+ },
34527
+ default: {}
34528
+ },
34266
34529
  timeout: {
34267
34530
  type: "integer",
34268
34531
  description: "Maximum time in milliseconds to wait for the page to be ready. If exceeded, the goTo action fails.",
@@ -34412,6 +34675,13 @@ var schemas_default = {
34412
34675
  url: "/search",
34413
34676
  origin: "https://www.google.com"
34414
34677
  },
34678
+ {
34679
+ url: "/dashboard",
34680
+ origin: "https://my-app.com",
34681
+ params: {
34682
+ __clerk_testing_token: "$CLERK_TESTING_TOKEN"
34683
+ }
34684
+ },
34415
34685
  {
34416
34686
  url: "https://www.example.com",
34417
34687
  waitUntil: {
@@ -36677,9 +36947,9 @@ var schemas_default = {
36677
36947
  anyOf: [
36678
36948
  {
36679
36949
  title: "Screenshot (simple)",
36680
- description: "File path of the PNG file. Accepts absolute paths. If not specified, the file name is the ID of the step.",
36950
+ description: "File path of the PNG file. Accepts absolute paths. If not specified, the file name is the ID of the step. If an `http(s)` URL is supplied, the remote image is downloaded and used as a read-only reference for comparison; the new capture is written to a local run-specific folder instead of being uploaded back to the URL.",
36681
36951
  type: "string",
36682
- pattern: "([A-Za-z0-9_-]*\\.(png|PNG)$|\\$[A-Za-z0-9_]+)",
36952
+ pattern: "^(?:https?:\\/\\/.+\\.(?:png|PNG)(?:\\?.*)?|[A-Za-z]:[\\/\\\\].*\\.(?:png|PNG)|[\\/\\\\]?[A-Za-z0-9_.\\/\\\\-]*\\.(?:png|PNG)|\\$[A-Za-z0-9_]+)$",
36683
36953
  transform: [
36684
36954
  "trim"
36685
36955
  ]
@@ -36690,9 +36960,9 @@ var schemas_default = {
36690
36960
  properties: {
36691
36961
  path: {
36692
36962
  title: "Screenshot (simple)",
36693
- description: "File path of the PNG file. Accepts absolute paths. If not specified, the file name is the ID of the step.",
36963
+ description: "File path of the PNG file. Accepts absolute paths. If not specified, the file name is the ID of the step. If an `http(s)` URL is supplied, the remote image is downloaded and used as a read-only reference for comparison; the new capture is written to a local run-specific folder instead of being uploaded back to the URL.",
36694
36964
  type: "string",
36695
- pattern: "([A-Za-z0-9_-]*\\.(png|PNG)$|\\$[A-Za-z0-9_]+)",
36965
+ pattern: "^(?:https?:\\/\\/.+\\.(?:png|PNG)(?:\\?.*)?|[A-Za-z]:[\\/\\\\].*\\.(?:png|PNG)|[\\/\\\\]?[A-Za-z0-9_.\\/\\\\-]*\\.(?:png|PNG)|\\$[A-Za-z0-9_]+)$",
36696
36966
  transform: [
36697
36967
  "trim"
36698
36968
  ]
@@ -36923,9 +37193,9 @@ var schemas_default = {
36923
37193
  schemas: {
36924
37194
  path: {
36925
37195
  title: "Screenshot (simple)",
36926
- description: "File path of the PNG file. Accepts absolute paths. If not specified, the file name is the ID of the step.",
37196
+ description: "File path of the PNG file. Accepts absolute paths. If not specified, the file name is the ID of the step. If an `http(s)` URL is supplied, the remote image is downloaded and used as a read-only reference for comparison; the new capture is written to a local run-specific folder instead of being uploaded back to the URL.",
36927
37197
  type: "string",
36928
- pattern: "([A-Za-z0-9_-]*\\.(png|PNG)$|\\$[A-Za-z0-9_]+)",
37198
+ pattern: "^(?:https?:\\/\\/.+\\.(?:png|PNG)(?:\\?.*)?|[A-Za-z]:[\\/\\\\].*\\.(?:png|PNG)|[\\/\\\\]?[A-Za-z0-9_.\\/\\\\-]*\\.(?:png|PNG)|\\$[A-Za-z0-9_]+)$",
36929
37199
  transform: [
36930
37200
  "trim"
36931
37201
  ]
@@ -36936,9 +37206,9 @@ var schemas_default = {
36936
37206
  properties: {
36937
37207
  path: {
36938
37208
  title: "Screenshot (simple)",
36939
- description: "File path of the PNG file. Accepts absolute paths. If not specified, the file name is the ID of the step.",
37209
+ description: "File path of the PNG file. Accepts absolute paths. If not specified, the file name is the ID of the step. If an `http(s)` URL is supplied, the remote image is downloaded and used as a read-only reference for comparison; the new capture is written to a local run-specific folder instead of being uploaded back to the URL.",
36940
37210
  type: "string",
36941
- pattern: "([A-Za-z0-9_-]*\\.(png|PNG)$|\\$[A-Za-z0-9_]+)",
37211
+ pattern: "^(?:https?:\\/\\/.+\\.(?:png|PNG)(?:\\?.*)?|[A-Za-z]:[\\/\\\\].*\\.(?:png|PNG)|[\\/\\\\]?[A-Za-z0-9_.\\/\\\\-]*\\.(?:png|PNG)|\\$[A-Za-z0-9_]+)$",
36942
37212
  transform: [
36943
37213
  "trim"
36944
37214
  ]
@@ -37320,6 +37590,12 @@ var schemas_default = {
37320
37590
  "image.png",
37321
37591
  "static/images/image.png",
37322
37592
  "/User/manny/projects/doc-detective/static/images/image.png",
37593
+ "https://example.com/static/images/image.png",
37594
+ {
37595
+ path: "https://promptless-customer-doc-assets.s3.amazonaws.com/docs-images/request-changes-button-0c851bb3.png",
37596
+ maxVariation: 0.05,
37597
+ overwrite: "aboveVariation"
37598
+ },
37323
37599
  {
37324
37600
  path: "image.png",
37325
37601
  directory: "static/images",
@@ -39740,6 +40016,12 @@ var schemas_default = {
39740
40016
  "html"
39741
40017
  ]
39742
40018
  },
40019
+ {
40020
+ origin: "https://my-app.com",
40021
+ originParams: {
40022
+ __clerk_testing_token: "$CLERK_TESTING_TOKEN"
40023
+ }
40024
+ },
39743
40025
  {
39744
40026
  fileTypes: [
39745
40027
  {
@@ -41363,6 +41645,14 @@ var schemas_default = {
41363
41645
  "trim"
41364
41646
  ]
41365
41647
  },
41648
+ params: {
41649
+ description: "Query parameters to append to the resolved URL. Merged on top of `originParams` from config; step keys win on collision. If `url` already contains a colliding query key, the value here replaces it. Values support environment variable substitution via `$VAR` syntax. WARNING: values are embedded in the request URL and appear in test results, logs, and reports.",
41650
+ type: "object",
41651
+ additionalProperties: {
41652
+ type: "string"
41653
+ },
41654
+ default: {}
41655
+ },
41366
41656
  statusCodes: {
41367
41657
  description: "Accepted status codes. If the specified URL returns a code other than what is specified here, the action fails.",
41368
41658
  anyOf: [
@@ -41446,6 +41736,14 @@ var schemas_default = {
41446
41736
  "trim"
41447
41737
  ]
41448
41738
  },
41739
+ params: {
41740
+ description: "Query parameters to append to the resolved URL. Merged on top of `originParams` from config; step keys win on collision. If `url` already contains a colliding query key, the value here replaces it. Values support environment variable substitution via `$VAR` syntax. WARNING: values are embedded in the request URL and appear in test results, logs, and reports.",
41741
+ type: "object",
41742
+ additionalProperties: {
41743
+ type: "string"
41744
+ },
41745
+ default: {}
41746
+ },
41449
41747
  statusCodes: {
41450
41748
  description: "Accepted status codes. If the specified URL returns a code other than what is specified here, the action fails.",
41451
41749
  anyOf: [
@@ -41508,6 +41806,13 @@ var schemas_default = {
41508
41806
  statusCodes: [
41509
41807
  200
41510
41808
  ]
41809
+ },
41810
+ {
41811
+ url: "/health",
41812
+ origin: "https://my-app.com",
41813
+ params: {
41814
+ __clerk_testing_token: "$CLERK_TESTING_TOKEN"
41815
+ }
41511
41816
  }
41512
41817
  ]
41513
41818
  }
@@ -43448,6 +43753,14 @@ var schemas_default = {
43448
43753
  "trim"
43449
43754
  ]
43450
43755
  },
43756
+ params: {
43757
+ description: "Query parameters to append to the resolved URL. Merged on top of `originParams` from config; step keys win on collision. If `url` already contains a colliding query key, the value here replaces it. Values support environment variable substitution via `$VAR` syntax. WARNING: values are embedded in the request URL and appear in test results, logs, and reports.",
43758
+ type: "object",
43759
+ additionalProperties: {
43760
+ type: "string"
43761
+ },
43762
+ default: {}
43763
+ },
43451
43764
  timeout: {
43452
43765
  type: "integer",
43453
43766
  description: "Maximum time in milliseconds to wait for the page to be ready. If exceeded, the goTo action fails.",
@@ -43620,6 +43933,14 @@ var schemas_default = {
43620
43933
  "trim"
43621
43934
  ]
43622
43935
  },
43936
+ params: {
43937
+ description: "Query parameters to append to the resolved URL. Merged on top of `originParams` from config; step keys win on collision. If `url` already contains a colliding query key, the value here replaces it. Values support environment variable substitution via `$VAR` syntax. WARNING: values are embedded in the request URL and appear in test results, logs, and reports.",
43938
+ type: "object",
43939
+ additionalProperties: {
43940
+ type: "string"
43941
+ },
43942
+ default: {}
43943
+ },
43623
43944
  timeout: {
43624
43945
  type: "integer",
43625
43946
  description: "Maximum time in milliseconds to wait for the page to be ready. If exceeded, the goTo action fails.",
@@ -43769,6 +44090,13 @@ var schemas_default = {
43769
44090
  url: "/search",
43770
44091
  origin: "https://www.google.com"
43771
44092
  },
44093
+ {
44094
+ url: "/dashboard",
44095
+ origin: "https://my-app.com",
44096
+ params: {
44097
+ __clerk_testing_token: "$CLERK_TESTING_TOKEN"
44098
+ }
44099
+ },
43772
44100
  {
43773
44101
  url: "https://www.example.com",
43774
44102
  waitUntil: {
@@ -46034,9 +46362,9 @@ var schemas_default = {
46034
46362
  anyOf: [
46035
46363
  {
46036
46364
  title: "Screenshot (simple)",
46037
- description: "File path of the PNG file. Accepts absolute paths. If not specified, the file name is the ID of the step.",
46365
+ description: "File path of the PNG file. Accepts absolute paths. If not specified, the file name is the ID of the step. If an `http(s)` URL is supplied, the remote image is downloaded and used as a read-only reference for comparison; the new capture is written to a local run-specific folder instead of being uploaded back to the URL.",
46038
46366
  type: "string",
46039
- pattern: "([A-Za-z0-9_-]*\\.(png|PNG)$|\\$[A-Za-z0-9_]+)",
46367
+ pattern: "^(?:https?:\\/\\/.+\\.(?:png|PNG)(?:\\?.*)?|[A-Za-z]:[\\/\\\\].*\\.(?:png|PNG)|[\\/\\\\]?[A-Za-z0-9_.\\/\\\\-]*\\.(?:png|PNG)|\\$[A-Za-z0-9_]+)$",
46040
46368
  transform: [
46041
46369
  "trim"
46042
46370
  ]
@@ -46047,9 +46375,9 @@ var schemas_default = {
46047
46375
  properties: {
46048
46376
  path: {
46049
46377
  title: "Screenshot (simple)",
46050
- description: "File path of the PNG file. Accepts absolute paths. If not specified, the file name is the ID of the step.",
46378
+ description: "File path of the PNG file. Accepts absolute paths. If not specified, the file name is the ID of the step. If an `http(s)` URL is supplied, the remote image is downloaded and used as a read-only reference for comparison; the new capture is written to a local run-specific folder instead of being uploaded back to the URL.",
46051
46379
  type: "string",
46052
- pattern: "([A-Za-z0-9_-]*\\.(png|PNG)$|\\$[A-Za-z0-9_]+)",
46380
+ pattern: "^(?:https?:\\/\\/.+\\.(?:png|PNG)(?:\\?.*)?|[A-Za-z]:[\\/\\\\].*\\.(?:png|PNG)|[\\/\\\\]?[A-Za-z0-9_.\\/\\\\-]*\\.(?:png|PNG)|\\$[A-Za-z0-9_]+)$",
46053
46381
  transform: [
46054
46382
  "trim"
46055
46383
  ]
@@ -46280,9 +46608,9 @@ var schemas_default = {
46280
46608
  schemas: {
46281
46609
  path: {
46282
46610
  title: "Screenshot (simple)",
46283
- description: "File path of the PNG file. Accepts absolute paths. If not specified, the file name is the ID of the step.",
46611
+ description: "File path of the PNG file. Accepts absolute paths. If not specified, the file name is the ID of the step. If an `http(s)` URL is supplied, the remote image is downloaded and used as a read-only reference for comparison; the new capture is written to a local run-specific folder instead of being uploaded back to the URL.",
46284
46612
  type: "string",
46285
- pattern: "([A-Za-z0-9_-]*\\.(png|PNG)$|\\$[A-Za-z0-9_]+)",
46613
+ pattern: "^(?:https?:\\/\\/.+\\.(?:png|PNG)(?:\\?.*)?|[A-Za-z]:[\\/\\\\].*\\.(?:png|PNG)|[\\/\\\\]?[A-Za-z0-9_.\\/\\\\-]*\\.(?:png|PNG)|\\$[A-Za-z0-9_]+)$",
46286
46614
  transform: [
46287
46615
  "trim"
46288
46616
  ]
@@ -46293,9 +46621,9 @@ var schemas_default = {
46293
46621
  properties: {
46294
46622
  path: {
46295
46623
  title: "Screenshot (simple)",
46296
- description: "File path of the PNG file. Accepts absolute paths. If not specified, the file name is the ID of the step.",
46624
+ description: "File path of the PNG file. Accepts absolute paths. If not specified, the file name is the ID of the step. If an `http(s)` URL is supplied, the remote image is downloaded and used as a read-only reference for comparison; the new capture is written to a local run-specific folder instead of being uploaded back to the URL.",
46297
46625
  type: "string",
46298
- pattern: "([A-Za-z0-9_-]*\\.(png|PNG)$|\\$[A-Za-z0-9_]+)",
46626
+ pattern: "^(?:https?:\\/\\/.+\\.(?:png|PNG)(?:\\?.*)?|[A-Za-z]:[\\/\\\\].*\\.(?:png|PNG)|[\\/\\\\]?[A-Za-z0-9_.\\/\\\\-]*\\.(?:png|PNG)|\\$[A-Za-z0-9_]+)$",
46299
46627
  transform: [
46300
46628
  "trim"
46301
46629
  ]
@@ -46677,6 +47005,12 @@ var schemas_default = {
46677
47005
  "image.png",
46678
47006
  "static/images/image.png",
46679
47007
  "/User/manny/projects/doc-detective/static/images/image.png",
47008
+ "https://example.com/static/images/image.png",
47009
+ {
47010
+ path: "https://promptless-customer-doc-assets.s3.amazonaws.com/docs-images/request-changes-button-0c851bb3.png",
47011
+ maxVariation: 0.05,
47012
+ overwrite: "aboveVariation"
47013
+ },
46680
47014
  {
46681
47015
  path: "image.png",
46682
47016
  directory: "static/images",
@@ -49500,6 +49834,14 @@ var schemas_default = {
49500
49834
  "trim"
49501
49835
  ]
49502
49836
  },
49837
+ params: {
49838
+ description: "Query parameters to append to the resolved URL. Merged on top of `originParams` from config; step keys win on collision. If `url` already contains a colliding query key, the value here replaces it. Values support environment variable substitution via `$VAR` syntax. WARNING: values are embedded in the request URL and appear in test results, logs, and reports.",
49839
+ type: "object",
49840
+ additionalProperties: {
49841
+ type: "string"
49842
+ },
49843
+ default: {}
49844
+ },
49503
49845
  statusCodes: {
49504
49846
  description: "Accepted status codes. If the specified URL returns a code other than what is specified here, the action fails.",
49505
49847
  anyOf: [
@@ -49583,6 +49925,14 @@ var schemas_default = {
49583
49925
  "trim"
49584
49926
  ]
49585
49927
  },
49928
+ params: {
49929
+ description: "Query parameters to append to the resolved URL. Merged on top of `originParams` from config; step keys win on collision. If `url` already contains a colliding query key, the value here replaces it. Values support environment variable substitution via `$VAR` syntax. WARNING: values are embedded in the request URL and appear in test results, logs, and reports.",
49930
+ type: "object",
49931
+ additionalProperties: {
49932
+ type: "string"
49933
+ },
49934
+ default: {}
49935
+ },
49586
49936
  statusCodes: {
49587
49937
  description: "Accepted status codes. If the specified URL returns a code other than what is specified here, the action fails.",
49588
49938
  anyOf: [
@@ -49645,6 +49995,13 @@ var schemas_default = {
49645
49995
  statusCodes: [
49646
49996
  200
49647
49997
  ]
49998
+ },
49999
+ {
50000
+ url: "/health",
50001
+ origin: "https://my-app.com",
50002
+ params: {
50003
+ __clerk_testing_token: "$CLERK_TESTING_TOKEN"
50004
+ }
49648
50005
  }
49649
50006
  ]
49650
50007
  }
@@ -51585,6 +51942,14 @@ var schemas_default = {
51585
51942
  "trim"
51586
51943
  ]
51587
51944
  },
51945
+ params: {
51946
+ description: "Query parameters to append to the resolved URL. Merged on top of `originParams` from config; step keys win on collision. If `url` already contains a colliding query key, the value here replaces it. Values support environment variable substitution via `$VAR` syntax. WARNING: values are embedded in the request URL and appear in test results, logs, and reports.",
51947
+ type: "object",
51948
+ additionalProperties: {
51949
+ type: "string"
51950
+ },
51951
+ default: {}
51952
+ },
51588
51953
  timeout: {
51589
51954
  type: "integer",
51590
51955
  description: "Maximum time in milliseconds to wait for the page to be ready. If exceeded, the goTo action fails.",
@@ -51757,6 +52122,14 @@ var schemas_default = {
51757
52122
  "trim"
51758
52123
  ]
51759
52124
  },
52125
+ params: {
52126
+ description: "Query parameters to append to the resolved URL. Merged on top of `originParams` from config; step keys win on collision. If `url` already contains a colliding query key, the value here replaces it. Values support environment variable substitution via `$VAR` syntax. WARNING: values are embedded in the request URL and appear in test results, logs, and reports.",
52127
+ type: "object",
52128
+ additionalProperties: {
52129
+ type: "string"
52130
+ },
52131
+ default: {}
52132
+ },
51760
52133
  timeout: {
51761
52134
  type: "integer",
51762
52135
  description: "Maximum time in milliseconds to wait for the page to be ready. If exceeded, the goTo action fails.",
@@ -51906,6 +52279,13 @@ var schemas_default = {
51906
52279
  url: "/search",
51907
52280
  origin: "https://www.google.com"
51908
52281
  },
52282
+ {
52283
+ url: "/dashboard",
52284
+ origin: "https://my-app.com",
52285
+ params: {
52286
+ __clerk_testing_token: "$CLERK_TESTING_TOKEN"
52287
+ }
52288
+ },
51909
52289
  {
51910
52290
  url: "https://www.example.com",
51911
52291
  waitUntil: {
@@ -54171,9 +54551,9 @@ var schemas_default = {
54171
54551
  anyOf: [
54172
54552
  {
54173
54553
  title: "Screenshot (simple)",
54174
- description: "File path of the PNG file. Accepts absolute paths. If not specified, the file name is the ID of the step.",
54554
+ description: "File path of the PNG file. Accepts absolute paths. If not specified, the file name is the ID of the step. If an `http(s)` URL is supplied, the remote image is downloaded and used as a read-only reference for comparison; the new capture is written to a local run-specific folder instead of being uploaded back to the URL.",
54175
54555
  type: "string",
54176
- pattern: "([A-Za-z0-9_-]*\\.(png|PNG)$|\\$[A-Za-z0-9_]+)",
54556
+ pattern: "^(?:https?:\\/\\/.+\\.(?:png|PNG)(?:\\?.*)?|[A-Za-z]:[\\/\\\\].*\\.(?:png|PNG)|[\\/\\\\]?[A-Za-z0-9_.\\/\\\\-]*\\.(?:png|PNG)|\\$[A-Za-z0-9_]+)$",
54177
54557
  transform: [
54178
54558
  "trim"
54179
54559
  ]
@@ -54184,9 +54564,9 @@ var schemas_default = {
54184
54564
  properties: {
54185
54565
  path: {
54186
54566
  title: "Screenshot (simple)",
54187
- description: "File path of the PNG file. Accepts absolute paths. If not specified, the file name is the ID of the step.",
54567
+ description: "File path of the PNG file. Accepts absolute paths. If not specified, the file name is the ID of the step. If an `http(s)` URL is supplied, the remote image is downloaded and used as a read-only reference for comparison; the new capture is written to a local run-specific folder instead of being uploaded back to the URL.",
54188
54568
  type: "string",
54189
- pattern: "([A-Za-z0-9_-]*\\.(png|PNG)$|\\$[A-Za-z0-9_]+)",
54569
+ pattern: "^(?:https?:\\/\\/.+\\.(?:png|PNG)(?:\\?.*)?|[A-Za-z]:[\\/\\\\].*\\.(?:png|PNG)|[\\/\\\\]?[A-Za-z0-9_.\\/\\\\-]*\\.(?:png|PNG)|\\$[A-Za-z0-9_]+)$",
54190
54570
  transform: [
54191
54571
  "trim"
54192
54572
  ]
@@ -54417,9 +54797,9 @@ var schemas_default = {
54417
54797
  schemas: {
54418
54798
  path: {
54419
54799
  title: "Screenshot (simple)",
54420
- description: "File path of the PNG file. Accepts absolute paths. If not specified, the file name is the ID of the step.",
54800
+ description: "File path of the PNG file. Accepts absolute paths. If not specified, the file name is the ID of the step. If an `http(s)` URL is supplied, the remote image is downloaded and used as a read-only reference for comparison; the new capture is written to a local run-specific folder instead of being uploaded back to the URL.",
54421
54801
  type: "string",
54422
- pattern: "([A-Za-z0-9_-]*\\.(png|PNG)$|\\$[A-Za-z0-9_]+)",
54802
+ pattern: "^(?:https?:\\/\\/.+\\.(?:png|PNG)(?:\\?.*)?|[A-Za-z]:[\\/\\\\].*\\.(?:png|PNG)|[\\/\\\\]?[A-Za-z0-9_.\\/\\\\-]*\\.(?:png|PNG)|\\$[A-Za-z0-9_]+)$",
54423
54803
  transform: [
54424
54804
  "trim"
54425
54805
  ]
@@ -54430,9 +54810,9 @@ var schemas_default = {
54430
54810
  properties: {
54431
54811
  path: {
54432
54812
  title: "Screenshot (simple)",
54433
- description: "File path of the PNG file. Accepts absolute paths. If not specified, the file name is the ID of the step.",
54813
+ description: "File path of the PNG file. Accepts absolute paths. If not specified, the file name is the ID of the step. If an `http(s)` URL is supplied, the remote image is downloaded and used as a read-only reference for comparison; the new capture is written to a local run-specific folder instead of being uploaded back to the URL.",
54434
54814
  type: "string",
54435
- pattern: "([A-Za-z0-9_-]*\\.(png|PNG)$|\\$[A-Za-z0-9_]+)",
54815
+ pattern: "^(?:https?:\\/\\/.+\\.(?:png|PNG)(?:\\?.*)?|[A-Za-z]:[\\/\\\\].*\\.(?:png|PNG)|[\\/\\\\]?[A-Za-z0-9_.\\/\\\\-]*\\.(?:png|PNG)|\\$[A-Za-z0-9_]+)$",
54436
54816
  transform: [
54437
54817
  "trim"
54438
54818
  ]
@@ -54814,6 +55194,12 @@ var schemas_default = {
54814
55194
  "image.png",
54815
55195
  "static/images/image.png",
54816
55196
  "/User/manny/projects/doc-detective/static/images/image.png",
55197
+ "https://example.com/static/images/image.png",
55198
+ {
55199
+ path: "https://promptless-customer-doc-assets.s3.amazonaws.com/docs-images/request-changes-button-0c851bb3.png",
55200
+ maxVariation: 0.05,
55201
+ overwrite: "aboveVariation"
55202
+ },
54817
55203
  {
54818
55204
  path: "image.png",
54819
55205
  directory: "static/images",
@@ -59347,6 +59733,14 @@ var schemas_default = {
59347
59733
  "trim"
59348
59734
  ]
59349
59735
  },
59736
+ params: {
59737
+ description: "Query parameters to append to the resolved URL. Merged on top of `originParams` from config; step keys win on collision. If `url` already contains a colliding query key, the value here replaces it. Values support environment variable substitution via `$VAR` syntax. WARNING: values are embedded in the request URL and appear in test results, logs, and reports.",
59738
+ type: "object",
59739
+ additionalProperties: {
59740
+ type: "string"
59741
+ },
59742
+ default: {}
59743
+ },
59350
59744
  statusCodes: {
59351
59745
  description: "Accepted status codes. If the specified URL returns a code other than what is specified here, the action fails.",
59352
59746
  anyOf: [
@@ -59430,6 +59824,14 @@ var schemas_default = {
59430
59824
  "trim"
59431
59825
  ]
59432
59826
  },
59827
+ params: {
59828
+ description: "Query parameters to append to the resolved URL. Merged on top of `originParams` from config; step keys win on collision. If `url` already contains a colliding query key, the value here replaces it. Values support environment variable substitution via `$VAR` syntax. WARNING: values are embedded in the request URL and appear in test results, logs, and reports.",
59829
+ type: "object",
59830
+ additionalProperties: {
59831
+ type: "string"
59832
+ },
59833
+ default: {}
59834
+ },
59433
59835
  statusCodes: {
59434
59836
  description: "Accepted status codes. If the specified URL returns a code other than what is specified here, the action fails.",
59435
59837
  anyOf: [
@@ -59492,6 +59894,13 @@ var schemas_default = {
59492
59894
  statusCodes: [
59493
59895
  200
59494
59896
  ]
59897
+ },
59898
+ {
59899
+ url: "/health",
59900
+ origin: "https://my-app.com",
59901
+ params: {
59902
+ __clerk_testing_token: "$CLERK_TESTING_TOKEN"
59903
+ }
59495
59904
  }
59496
59905
  ]
59497
59906
  }
@@ -61432,6 +61841,14 @@ var schemas_default = {
61432
61841
  "trim"
61433
61842
  ]
61434
61843
  },
61844
+ params: {
61845
+ description: "Query parameters to append to the resolved URL. Merged on top of `originParams` from config; step keys win on collision. If `url` already contains a colliding query key, the value here replaces it. Values support environment variable substitution via `$VAR` syntax. WARNING: values are embedded in the request URL and appear in test results, logs, and reports.",
61846
+ type: "object",
61847
+ additionalProperties: {
61848
+ type: "string"
61849
+ },
61850
+ default: {}
61851
+ },
61435
61852
  timeout: {
61436
61853
  type: "integer",
61437
61854
  description: "Maximum time in milliseconds to wait for the page to be ready. If exceeded, the goTo action fails.",
@@ -61604,6 +62021,14 @@ var schemas_default = {
61604
62021
  "trim"
61605
62022
  ]
61606
62023
  },
62024
+ params: {
62025
+ description: "Query parameters to append to the resolved URL. Merged on top of `originParams` from config; step keys win on collision. If `url` already contains a colliding query key, the value here replaces it. Values support environment variable substitution via `$VAR` syntax. WARNING: values are embedded in the request URL and appear in test results, logs, and reports.",
62026
+ type: "object",
62027
+ additionalProperties: {
62028
+ type: "string"
62029
+ },
62030
+ default: {}
62031
+ },
61607
62032
  timeout: {
61608
62033
  type: "integer",
61609
62034
  description: "Maximum time in milliseconds to wait for the page to be ready. If exceeded, the goTo action fails.",
@@ -61753,6 +62178,13 @@ var schemas_default = {
61753
62178
  url: "/search",
61754
62179
  origin: "https://www.google.com"
61755
62180
  },
62181
+ {
62182
+ url: "/dashboard",
62183
+ origin: "https://my-app.com",
62184
+ params: {
62185
+ __clerk_testing_token: "$CLERK_TESTING_TOKEN"
62186
+ }
62187
+ },
61756
62188
  {
61757
62189
  url: "https://www.example.com",
61758
62190
  waitUntil: {
@@ -64018,9 +64450,9 @@ var schemas_default = {
64018
64450
  anyOf: [
64019
64451
  {
64020
64452
  title: "Screenshot (simple)",
64021
- description: "File path of the PNG file. Accepts absolute paths. If not specified, the file name is the ID of the step.",
64453
+ description: "File path of the PNG file. Accepts absolute paths. If not specified, the file name is the ID of the step. If an `http(s)` URL is supplied, the remote image is downloaded and used as a read-only reference for comparison; the new capture is written to a local run-specific folder instead of being uploaded back to the URL.",
64022
64454
  type: "string",
64023
- pattern: "([A-Za-z0-9_-]*\\.(png|PNG)$|\\$[A-Za-z0-9_]+)",
64455
+ pattern: "^(?:https?:\\/\\/.+\\.(?:png|PNG)(?:\\?.*)?|[A-Za-z]:[\\/\\\\].*\\.(?:png|PNG)|[\\/\\\\]?[A-Za-z0-9_.\\/\\\\-]*\\.(?:png|PNG)|\\$[A-Za-z0-9_]+)$",
64024
64456
  transform: [
64025
64457
  "trim"
64026
64458
  ]
@@ -64031,9 +64463,9 @@ var schemas_default = {
64031
64463
  properties: {
64032
64464
  path: {
64033
64465
  title: "Screenshot (simple)",
64034
- description: "File path of the PNG file. Accepts absolute paths. If not specified, the file name is the ID of the step.",
64466
+ description: "File path of the PNG file. Accepts absolute paths. If not specified, the file name is the ID of the step. If an `http(s)` URL is supplied, the remote image is downloaded and used as a read-only reference for comparison; the new capture is written to a local run-specific folder instead of being uploaded back to the URL.",
64035
64467
  type: "string",
64036
- pattern: "([A-Za-z0-9_-]*\\.(png|PNG)$|\\$[A-Za-z0-9_]+)",
64468
+ pattern: "^(?:https?:\\/\\/.+\\.(?:png|PNG)(?:\\?.*)?|[A-Za-z]:[\\/\\\\].*\\.(?:png|PNG)|[\\/\\\\]?[A-Za-z0-9_.\\/\\\\-]*\\.(?:png|PNG)|\\$[A-Za-z0-9_]+)$",
64037
64469
  transform: [
64038
64470
  "trim"
64039
64471
  ]
@@ -64264,9 +64696,9 @@ var schemas_default = {
64264
64696
  schemas: {
64265
64697
  path: {
64266
64698
  title: "Screenshot (simple)",
64267
- description: "File path of the PNG file. Accepts absolute paths. If not specified, the file name is the ID of the step.",
64699
+ description: "File path of the PNG file. Accepts absolute paths. If not specified, the file name is the ID of the step. If an `http(s)` URL is supplied, the remote image is downloaded and used as a read-only reference for comparison; the new capture is written to a local run-specific folder instead of being uploaded back to the URL.",
64268
64700
  type: "string",
64269
- pattern: "([A-Za-z0-9_-]*\\.(png|PNG)$|\\$[A-Za-z0-9_]+)",
64701
+ pattern: "^(?:https?:\\/\\/.+\\.(?:png|PNG)(?:\\?.*)?|[A-Za-z]:[\\/\\\\].*\\.(?:png|PNG)|[\\/\\\\]?[A-Za-z0-9_.\\/\\\\-]*\\.(?:png|PNG)|\\$[A-Za-z0-9_]+)$",
64270
64702
  transform: [
64271
64703
  "trim"
64272
64704
  ]
@@ -64277,9 +64709,9 @@ var schemas_default = {
64277
64709
  properties: {
64278
64710
  path: {
64279
64711
  title: "Screenshot (simple)",
64280
- description: "File path of the PNG file. Accepts absolute paths. If not specified, the file name is the ID of the step.",
64712
+ description: "File path of the PNG file. Accepts absolute paths. If not specified, the file name is the ID of the step. If an `http(s)` URL is supplied, the remote image is downloaded and used as a read-only reference for comparison; the new capture is written to a local run-specific folder instead of being uploaded back to the URL.",
64281
64713
  type: "string",
64282
- pattern: "([A-Za-z0-9_-]*\\.(png|PNG)$|\\$[A-Za-z0-9_]+)",
64714
+ pattern: "^(?:https?:\\/\\/.+\\.(?:png|PNG)(?:\\?.*)?|[A-Za-z]:[\\/\\\\].*\\.(?:png|PNG)|[\\/\\\\]?[A-Za-z0-9_.\\/\\\\-]*\\.(?:png|PNG)|\\$[A-Za-z0-9_]+)$",
64283
64715
  transform: [
64284
64716
  "trim"
64285
64717
  ]
@@ -64661,6 +65093,12 @@ var schemas_default = {
64661
65093
  "image.png",
64662
65094
  "static/images/image.png",
64663
65095
  "/User/manny/projects/doc-detective/static/images/image.png",
65096
+ "https://example.com/static/images/image.png",
65097
+ {
65098
+ path: "https://promptless-customer-doc-assets.s3.amazonaws.com/docs-images/request-changes-button-0c851bb3.png",
65099
+ maxVariation: 0.05,
65100
+ overwrite: "aboveVariation"
65101
+ },
64664
65102
  {
64665
65103
  path: "image.png",
64666
65104
  directory: "static/images",
@@ -67484,6 +67922,14 @@ var schemas_default = {
67484
67922
  "trim"
67485
67923
  ]
67486
67924
  },
67925
+ params: {
67926
+ description: "Query parameters to append to the resolved URL. Merged on top of `originParams` from config; step keys win on collision. If `url` already contains a colliding query key, the value here replaces it. Values support environment variable substitution via `$VAR` syntax. WARNING: values are embedded in the request URL and appear in test results, logs, and reports.",
67927
+ type: "object",
67928
+ additionalProperties: {
67929
+ type: "string"
67930
+ },
67931
+ default: {}
67932
+ },
67487
67933
  statusCodes: {
67488
67934
  description: "Accepted status codes. If the specified URL returns a code other than what is specified here, the action fails.",
67489
67935
  anyOf: [
@@ -67567,6 +68013,14 @@ var schemas_default = {
67567
68013
  "trim"
67568
68014
  ]
67569
68015
  },
68016
+ params: {
68017
+ description: "Query parameters to append to the resolved URL. Merged on top of `originParams` from config; step keys win on collision. If `url` already contains a colliding query key, the value here replaces it. Values support environment variable substitution via `$VAR` syntax. WARNING: values are embedded in the request URL and appear in test results, logs, and reports.",
68018
+ type: "object",
68019
+ additionalProperties: {
68020
+ type: "string"
68021
+ },
68022
+ default: {}
68023
+ },
67570
68024
  statusCodes: {
67571
68025
  description: "Accepted status codes. If the specified URL returns a code other than what is specified here, the action fails.",
67572
68026
  anyOf: [
@@ -67629,6 +68083,13 @@ var schemas_default = {
67629
68083
  statusCodes: [
67630
68084
  200
67631
68085
  ]
68086
+ },
68087
+ {
68088
+ url: "/health",
68089
+ origin: "https://my-app.com",
68090
+ params: {
68091
+ __clerk_testing_token: "$CLERK_TESTING_TOKEN"
68092
+ }
67632
68093
  }
67633
68094
  ]
67634
68095
  }
@@ -69569,6 +70030,14 @@ var schemas_default = {
69569
70030
  "trim"
69570
70031
  ]
69571
70032
  },
70033
+ params: {
70034
+ description: "Query parameters to append to the resolved URL. Merged on top of `originParams` from config; step keys win on collision. If `url` already contains a colliding query key, the value here replaces it. Values support environment variable substitution via `$VAR` syntax. WARNING: values are embedded in the request URL and appear in test results, logs, and reports.",
70035
+ type: "object",
70036
+ additionalProperties: {
70037
+ type: "string"
70038
+ },
70039
+ default: {}
70040
+ },
69572
70041
  timeout: {
69573
70042
  type: "integer",
69574
70043
  description: "Maximum time in milliseconds to wait for the page to be ready. If exceeded, the goTo action fails.",
@@ -69741,6 +70210,14 @@ var schemas_default = {
69741
70210
  "trim"
69742
70211
  ]
69743
70212
  },
70213
+ params: {
70214
+ description: "Query parameters to append to the resolved URL. Merged on top of `originParams` from config; step keys win on collision. If `url` already contains a colliding query key, the value here replaces it. Values support environment variable substitution via `$VAR` syntax. WARNING: values are embedded in the request URL and appear in test results, logs, and reports.",
70215
+ type: "object",
70216
+ additionalProperties: {
70217
+ type: "string"
70218
+ },
70219
+ default: {}
70220
+ },
69744
70221
  timeout: {
69745
70222
  type: "integer",
69746
70223
  description: "Maximum time in milliseconds to wait for the page to be ready. If exceeded, the goTo action fails.",
@@ -69890,6 +70367,13 @@ var schemas_default = {
69890
70367
  url: "/search",
69891
70368
  origin: "https://www.google.com"
69892
70369
  },
70370
+ {
70371
+ url: "/dashboard",
70372
+ origin: "https://my-app.com",
70373
+ params: {
70374
+ __clerk_testing_token: "$CLERK_TESTING_TOKEN"
70375
+ }
70376
+ },
69893
70377
  {
69894
70378
  url: "https://www.example.com",
69895
70379
  waitUntil: {
@@ -72155,9 +72639,9 @@ var schemas_default = {
72155
72639
  anyOf: [
72156
72640
  {
72157
72641
  title: "Screenshot (simple)",
72158
- description: "File path of the PNG file. Accepts absolute paths. If not specified, the file name is the ID of the step.",
72642
+ description: "File path of the PNG file. Accepts absolute paths. If not specified, the file name is the ID of the step. If an `http(s)` URL is supplied, the remote image is downloaded and used as a read-only reference for comparison; the new capture is written to a local run-specific folder instead of being uploaded back to the URL.",
72159
72643
  type: "string",
72160
- pattern: "([A-Za-z0-9_-]*\\.(png|PNG)$|\\$[A-Za-z0-9_]+)",
72644
+ pattern: "^(?:https?:\\/\\/.+\\.(?:png|PNG)(?:\\?.*)?|[A-Za-z]:[\\/\\\\].*\\.(?:png|PNG)|[\\/\\\\]?[A-Za-z0-9_.\\/\\\\-]*\\.(?:png|PNG)|\\$[A-Za-z0-9_]+)$",
72161
72645
  transform: [
72162
72646
  "trim"
72163
72647
  ]
@@ -72168,9 +72652,9 @@ var schemas_default = {
72168
72652
  properties: {
72169
72653
  path: {
72170
72654
  title: "Screenshot (simple)",
72171
- description: "File path of the PNG file. Accepts absolute paths. If not specified, the file name is the ID of the step.",
72655
+ description: "File path of the PNG file. Accepts absolute paths. If not specified, the file name is the ID of the step. If an `http(s)` URL is supplied, the remote image is downloaded and used as a read-only reference for comparison; the new capture is written to a local run-specific folder instead of being uploaded back to the URL.",
72172
72656
  type: "string",
72173
- pattern: "([A-Za-z0-9_-]*\\.(png|PNG)$|\\$[A-Za-z0-9_]+)",
72657
+ pattern: "^(?:https?:\\/\\/.+\\.(?:png|PNG)(?:\\?.*)?|[A-Za-z]:[\\/\\\\].*\\.(?:png|PNG)|[\\/\\\\]?[A-Za-z0-9_.\\/\\\\-]*\\.(?:png|PNG)|\\$[A-Za-z0-9_]+)$",
72174
72658
  transform: [
72175
72659
  "trim"
72176
72660
  ]
@@ -72401,9 +72885,9 @@ var schemas_default = {
72401
72885
  schemas: {
72402
72886
  path: {
72403
72887
  title: "Screenshot (simple)",
72404
- description: "File path of the PNG file. Accepts absolute paths. If not specified, the file name is the ID of the step.",
72888
+ description: "File path of the PNG file. Accepts absolute paths. If not specified, the file name is the ID of the step. If an `http(s)` URL is supplied, the remote image is downloaded and used as a read-only reference for comparison; the new capture is written to a local run-specific folder instead of being uploaded back to the URL.",
72405
72889
  type: "string",
72406
- pattern: "([A-Za-z0-9_-]*\\.(png|PNG)$|\\$[A-Za-z0-9_]+)",
72890
+ pattern: "^(?:https?:\\/\\/.+\\.(?:png|PNG)(?:\\?.*)?|[A-Za-z]:[\\/\\\\].*\\.(?:png|PNG)|[\\/\\\\]?[A-Za-z0-9_.\\/\\\\-]*\\.(?:png|PNG)|\\$[A-Za-z0-9_]+)$",
72407
72891
  transform: [
72408
72892
  "trim"
72409
72893
  ]
@@ -72414,9 +72898,9 @@ var schemas_default = {
72414
72898
  properties: {
72415
72899
  path: {
72416
72900
  title: "Screenshot (simple)",
72417
- description: "File path of the PNG file. Accepts absolute paths. If not specified, the file name is the ID of the step.",
72901
+ description: "File path of the PNG file. Accepts absolute paths. If not specified, the file name is the ID of the step. If an `http(s)` URL is supplied, the remote image is downloaded and used as a read-only reference for comparison; the new capture is written to a local run-specific folder instead of being uploaded back to the URL.",
72418
72902
  type: "string",
72419
- pattern: "([A-Za-z0-9_-]*\\.(png|PNG)$|\\$[A-Za-z0-9_]+)",
72903
+ pattern: "^(?:https?:\\/\\/.+\\.(?:png|PNG)(?:\\?.*)?|[A-Za-z]:[\\/\\\\].*\\.(?:png|PNG)|[\\/\\\\]?[A-Za-z0-9_.\\/\\\\-]*\\.(?:png|PNG)|\\$[A-Za-z0-9_]+)$",
72420
72904
  transform: [
72421
72905
  "trim"
72422
72906
  ]
@@ -72798,6 +73282,12 @@ var schemas_default = {
72798
73282
  "image.png",
72799
73283
  "static/images/image.png",
72800
73284
  "/User/manny/projects/doc-detective/static/images/image.png",
73285
+ "https://example.com/static/images/image.png",
73286
+ {
73287
+ path: "https://promptless-customer-doc-assets.s3.amazonaws.com/docs-images/request-changes-button-0c851bb3.png",
73288
+ maxVariation: 0.05,
73289
+ overwrite: "aboveVariation"
73290
+ },
72801
73291
  {
72802
73292
  path: "image.png",
72803
73293
  directory: "static/images",
@@ -76482,9 +76972,9 @@ var schemas_default = {
76482
76972
  anyOf: [
76483
76973
  {
76484
76974
  title: "Screenshot (simple)",
76485
- description: "File path of the PNG file. Accepts absolute paths. If not specified, the file name is the ID of the step.",
76975
+ description: "File path of the PNG file. Accepts absolute paths. If not specified, the file name is the ID of the step. If an `http(s)` URL is supplied, the remote image is downloaded and used as a read-only reference for comparison; the new capture is written to a local run-specific folder instead of being uploaded back to the URL.",
76486
76976
  type: "string",
76487
- pattern: "([A-Za-z0-9_-]*\\.(png|PNG)$|\\$[A-Za-z0-9_]+)",
76977
+ pattern: "^(?:https?:\\/\\/.+\\.(?:png|PNG)(?:\\?.*)?|[A-Za-z]:[\\/\\\\].*\\.(?:png|PNG)|[\\/\\\\]?[A-Za-z0-9_.\\/\\\\-]*\\.(?:png|PNG)|\\$[A-Za-z0-9_]+)$",
76488
76978
  transform: [
76489
76979
  "trim"
76490
76980
  ]
@@ -76495,9 +76985,9 @@ var schemas_default = {
76495
76985
  properties: {
76496
76986
  path: {
76497
76987
  title: "Screenshot (simple)",
76498
- description: "File path of the PNG file. Accepts absolute paths. If not specified, the file name is the ID of the step.",
76988
+ description: "File path of the PNG file. Accepts absolute paths. If not specified, the file name is the ID of the step. If an `http(s)` URL is supplied, the remote image is downloaded and used as a read-only reference for comparison; the new capture is written to a local run-specific folder instead of being uploaded back to the URL.",
76499
76989
  type: "string",
76500
- pattern: "([A-Za-z0-9_-]*\\.(png|PNG)$|\\$[A-Za-z0-9_]+)",
76990
+ pattern: "^(?:https?:\\/\\/.+\\.(?:png|PNG)(?:\\?.*)?|[A-Za-z]:[\\/\\\\].*\\.(?:png|PNG)|[\\/\\\\]?[A-Za-z0-9_.\\/\\\\-]*\\.(?:png|PNG)|\\$[A-Za-z0-9_]+)$",
76501
76991
  transform: [
76502
76992
  "trim"
76503
76993
  ]
@@ -76728,9 +77218,9 @@ var schemas_default = {
76728
77218
  schemas: {
76729
77219
  path: {
76730
77220
  title: "Screenshot (simple)",
76731
- description: "File path of the PNG file. Accepts absolute paths. If not specified, the file name is the ID of the step.",
77221
+ description: "File path of the PNG file. Accepts absolute paths. If not specified, the file name is the ID of the step. If an `http(s)` URL is supplied, the remote image is downloaded and used as a read-only reference for comparison; the new capture is written to a local run-specific folder instead of being uploaded back to the URL.",
76732
77222
  type: "string",
76733
- pattern: "([A-Za-z0-9_-]*\\.(png|PNG)$|\\$[A-Za-z0-9_]+)",
77223
+ pattern: "^(?:https?:\\/\\/.+\\.(?:png|PNG)(?:\\?.*)?|[A-Za-z]:[\\/\\\\].*\\.(?:png|PNG)|[\\/\\\\]?[A-Za-z0-9_.\\/\\\\-]*\\.(?:png|PNG)|\\$[A-Za-z0-9_]+)$",
76734
77224
  transform: [
76735
77225
  "trim"
76736
77226
  ]
@@ -76741,9 +77231,9 @@ var schemas_default = {
76741
77231
  properties: {
76742
77232
  path: {
76743
77233
  title: "Screenshot (simple)",
76744
- description: "File path of the PNG file. Accepts absolute paths. If not specified, the file name is the ID of the step.",
77234
+ description: "File path of the PNG file. Accepts absolute paths. If not specified, the file name is the ID of the step. If an `http(s)` URL is supplied, the remote image is downloaded and used as a read-only reference for comparison; the new capture is written to a local run-specific folder instead of being uploaded back to the URL.",
76745
77235
  type: "string",
76746
- pattern: "([A-Za-z0-9_-]*\\.(png|PNG)$|\\$[A-Za-z0-9_]+)",
77236
+ pattern: "^(?:https?:\\/\\/.+\\.(?:png|PNG)(?:\\?.*)?|[A-Za-z]:[\\/\\\\].*\\.(?:png|PNG)|[\\/\\\\]?[A-Za-z0-9_.\\/\\\\-]*\\.(?:png|PNG)|\\$[A-Za-z0-9_]+)$",
76747
77237
  transform: [
76748
77238
  "trim"
76749
77239
  ]
@@ -77125,6 +77615,12 @@ var schemas_default = {
77125
77615
  "image.png",
77126
77616
  "static/images/image.png",
77127
77617
  "/User/manny/projects/doc-detective/static/images/image.png",
77618
+ "https://example.com/static/images/image.png",
77619
+ {
77620
+ path: "https://promptless-customer-doc-assets.s3.amazonaws.com/docs-images/request-changes-button-0c851bb3.png",
77621
+ maxVariation: 0.05,
77622
+ overwrite: "aboveVariation"
77623
+ },
77128
77624
  {
77129
77625
  path: "image.png",
77130
77626
  directory: "static/images",
@@ -78713,6 +79209,14 @@ var schemas_default = {
78713
79209
  "trim"
78714
79210
  ]
78715
79211
  },
79212
+ params: {
79213
+ description: "Query parameters to append to the resolved URL. Merged on top of `originParams` from config; step keys win on collision. If `url` already contains a colliding query key, the value here replaces it. Values support environment variable substitution via `$VAR` syntax. WARNING: values are embedded in the request URL and appear in test results, logs, and reports.",
79214
+ type: "object",
79215
+ additionalProperties: {
79216
+ type: "string"
79217
+ },
79218
+ default: {}
79219
+ },
78716
79220
  statusCodes: {
78717
79221
  description: "Accepted status codes. If the specified URL returns a code other than what is specified here, the action fails.",
78718
79222
  anyOf: [
@@ -78796,6 +79300,14 @@ var schemas_default = {
78796
79300
  "trim"
78797
79301
  ]
78798
79302
  },
79303
+ params: {
79304
+ description: "Query parameters to append to the resolved URL. Merged on top of `originParams` from config; step keys win on collision. If `url` already contains a colliding query key, the value here replaces it. Values support environment variable substitution via `$VAR` syntax. WARNING: values are embedded in the request URL and appear in test results, logs, and reports.",
79305
+ type: "object",
79306
+ additionalProperties: {
79307
+ type: "string"
79308
+ },
79309
+ default: {}
79310
+ },
78799
79311
  statusCodes: {
78800
79312
  description: "Accepted status codes. If the specified URL returns a code other than what is specified here, the action fails.",
78801
79313
  anyOf: [
@@ -78858,6 +79370,13 @@ var schemas_default = {
78858
79370
  statusCodes: [
78859
79371
  200
78860
79372
  ]
79373
+ },
79374
+ {
79375
+ url: "/health",
79376
+ origin: "https://my-app.com",
79377
+ params: {
79378
+ __clerk_testing_token: "$CLERK_TESTING_TOKEN"
79379
+ }
78861
79380
  }
78862
79381
  ]
78863
79382
  }
@@ -80798,6 +81317,14 @@ var schemas_default = {
80798
81317
  "trim"
80799
81318
  ]
80800
81319
  },
81320
+ params: {
81321
+ description: "Query parameters to append to the resolved URL. Merged on top of `originParams` from config; step keys win on collision. If `url` already contains a colliding query key, the value here replaces it. Values support environment variable substitution via `$VAR` syntax. WARNING: values are embedded in the request URL and appear in test results, logs, and reports.",
81322
+ type: "object",
81323
+ additionalProperties: {
81324
+ type: "string"
81325
+ },
81326
+ default: {}
81327
+ },
80801
81328
  timeout: {
80802
81329
  type: "integer",
80803
81330
  description: "Maximum time in milliseconds to wait for the page to be ready. If exceeded, the goTo action fails.",
@@ -80970,6 +81497,14 @@ var schemas_default = {
80970
81497
  "trim"
80971
81498
  ]
80972
81499
  },
81500
+ params: {
81501
+ description: "Query parameters to append to the resolved URL. Merged on top of `originParams` from config; step keys win on collision. If `url` already contains a colliding query key, the value here replaces it. Values support environment variable substitution via `$VAR` syntax. WARNING: values are embedded in the request URL and appear in test results, logs, and reports.",
81502
+ type: "object",
81503
+ additionalProperties: {
81504
+ type: "string"
81505
+ },
81506
+ default: {}
81507
+ },
80973
81508
  timeout: {
80974
81509
  type: "integer",
80975
81510
  description: "Maximum time in milliseconds to wait for the page to be ready. If exceeded, the goTo action fails.",
@@ -81119,6 +81654,13 @@ var schemas_default = {
81119
81654
  url: "/search",
81120
81655
  origin: "https://www.google.com"
81121
81656
  },
81657
+ {
81658
+ url: "/dashboard",
81659
+ origin: "https://my-app.com",
81660
+ params: {
81661
+ __clerk_testing_token: "$CLERK_TESTING_TOKEN"
81662
+ }
81663
+ },
81122
81664
  {
81123
81665
  url: "https://www.example.com",
81124
81666
  waitUntil: {
@@ -83384,9 +83926,9 @@ var schemas_default = {
83384
83926
  anyOf: [
83385
83927
  {
83386
83928
  title: "Screenshot (simple)",
83387
- description: "File path of the PNG file. Accepts absolute paths. If not specified, the file name is the ID of the step.",
83929
+ description: "File path of the PNG file. Accepts absolute paths. If not specified, the file name is the ID of the step. If an `http(s)` URL is supplied, the remote image is downloaded and used as a read-only reference for comparison; the new capture is written to a local run-specific folder instead of being uploaded back to the URL.",
83388
83930
  type: "string",
83389
- pattern: "([A-Za-z0-9_-]*\\.(png|PNG)$|\\$[A-Za-z0-9_]+)",
83931
+ pattern: "^(?:https?:\\/\\/.+\\.(?:png|PNG)(?:\\?.*)?|[A-Za-z]:[\\/\\\\].*\\.(?:png|PNG)|[\\/\\\\]?[A-Za-z0-9_.\\/\\\\-]*\\.(?:png|PNG)|\\$[A-Za-z0-9_]+)$",
83390
83932
  transform: [
83391
83933
  "trim"
83392
83934
  ]
@@ -83397,9 +83939,9 @@ var schemas_default = {
83397
83939
  properties: {
83398
83940
  path: {
83399
83941
  title: "Screenshot (simple)",
83400
- description: "File path of the PNG file. Accepts absolute paths. If not specified, the file name is the ID of the step.",
83942
+ description: "File path of the PNG file. Accepts absolute paths. If not specified, the file name is the ID of the step. If an `http(s)` URL is supplied, the remote image is downloaded and used as a read-only reference for comparison; the new capture is written to a local run-specific folder instead of being uploaded back to the URL.",
83401
83943
  type: "string",
83402
- pattern: "([A-Za-z0-9_-]*\\.(png|PNG)$|\\$[A-Za-z0-9_]+)",
83944
+ pattern: "^(?:https?:\\/\\/.+\\.(?:png|PNG)(?:\\?.*)?|[A-Za-z]:[\\/\\\\].*\\.(?:png|PNG)|[\\/\\\\]?[A-Za-z0-9_.\\/\\\\-]*\\.(?:png|PNG)|\\$[A-Za-z0-9_]+)$",
83403
83945
  transform: [
83404
83946
  "trim"
83405
83947
  ]
@@ -83630,9 +84172,9 @@ var schemas_default = {
83630
84172
  schemas: {
83631
84173
  path: {
83632
84174
  title: "Screenshot (simple)",
83633
- description: "File path of the PNG file. Accepts absolute paths. If not specified, the file name is the ID of the step.",
84175
+ description: "File path of the PNG file. Accepts absolute paths. If not specified, the file name is the ID of the step. If an `http(s)` URL is supplied, the remote image is downloaded and used as a read-only reference for comparison; the new capture is written to a local run-specific folder instead of being uploaded back to the URL.",
83634
84176
  type: "string",
83635
- pattern: "([A-Za-z0-9_-]*\\.(png|PNG)$|\\$[A-Za-z0-9_]+)",
84177
+ pattern: "^(?:https?:\\/\\/.+\\.(?:png|PNG)(?:\\?.*)?|[A-Za-z]:[\\/\\\\].*\\.(?:png|PNG)|[\\/\\\\]?[A-Za-z0-9_.\\/\\\\-]*\\.(?:png|PNG)|\\$[A-Za-z0-9_]+)$",
83636
84178
  transform: [
83637
84179
  "trim"
83638
84180
  ]
@@ -83643,9 +84185,9 @@ var schemas_default = {
83643
84185
  properties: {
83644
84186
  path: {
83645
84187
  title: "Screenshot (simple)",
83646
- description: "File path of the PNG file. Accepts absolute paths. If not specified, the file name is the ID of the step.",
84188
+ description: "File path of the PNG file. Accepts absolute paths. If not specified, the file name is the ID of the step. If an `http(s)` URL is supplied, the remote image is downloaded and used as a read-only reference for comparison; the new capture is written to a local run-specific folder instead of being uploaded back to the URL.",
83647
84189
  type: "string",
83648
- pattern: "([A-Za-z0-9_-]*\\.(png|PNG)$|\\$[A-Za-z0-9_]+)",
84190
+ pattern: "^(?:https?:\\/\\/.+\\.(?:png|PNG)(?:\\?.*)?|[A-Za-z]:[\\/\\\\].*\\.(?:png|PNG)|[\\/\\\\]?[A-Za-z0-9_.\\/\\\\-]*\\.(?:png|PNG)|\\$[A-Za-z0-9_]+)$",
83649
84191
  transform: [
83650
84192
  "trim"
83651
84193
  ]
@@ -84027,6 +84569,12 @@ var schemas_default = {
84027
84569
  "image.png",
84028
84570
  "static/images/image.png",
84029
84571
  "/User/manny/projects/doc-detective/static/images/image.png",
84572
+ "https://example.com/static/images/image.png",
84573
+ {
84574
+ path: "https://promptless-customer-doc-assets.s3.amazonaws.com/docs-images/request-changes-button-0c851bb3.png",
84575
+ maxVariation: 0.05,
84576
+ overwrite: "aboveVariation"
84577
+ },
84030
84578
  {
84031
84579
  path: "image.png",
84032
84580
  directory: "static/images",
@@ -86850,6 +87398,14 @@ var schemas_default = {
86850
87398
  "trim"
86851
87399
  ]
86852
87400
  },
87401
+ params: {
87402
+ description: "Query parameters to append to the resolved URL. Merged on top of `originParams` from config; step keys win on collision. If `url` already contains a colliding query key, the value here replaces it. Values support environment variable substitution via `$VAR` syntax. WARNING: values are embedded in the request URL and appear in test results, logs, and reports.",
87403
+ type: "object",
87404
+ additionalProperties: {
87405
+ type: "string"
87406
+ },
87407
+ default: {}
87408
+ },
86853
87409
  statusCodes: {
86854
87410
  description: "Accepted status codes. If the specified URL returns a code other than what is specified here, the action fails.",
86855
87411
  anyOf: [
@@ -86933,6 +87489,14 @@ var schemas_default = {
86933
87489
  "trim"
86934
87490
  ]
86935
87491
  },
87492
+ params: {
87493
+ description: "Query parameters to append to the resolved URL. Merged on top of `originParams` from config; step keys win on collision. If `url` already contains a colliding query key, the value here replaces it. Values support environment variable substitution via `$VAR` syntax. WARNING: values are embedded in the request URL and appear in test results, logs, and reports.",
87494
+ type: "object",
87495
+ additionalProperties: {
87496
+ type: "string"
87497
+ },
87498
+ default: {}
87499
+ },
86936
87500
  statusCodes: {
86937
87501
  description: "Accepted status codes. If the specified URL returns a code other than what is specified here, the action fails.",
86938
87502
  anyOf: [
@@ -86995,6 +87559,13 @@ var schemas_default = {
86995
87559
  statusCodes: [
86996
87560
  200
86997
87561
  ]
87562
+ },
87563
+ {
87564
+ url: "/health",
87565
+ origin: "https://my-app.com",
87566
+ params: {
87567
+ __clerk_testing_token: "$CLERK_TESTING_TOKEN"
87568
+ }
86998
87569
  }
86999
87570
  ]
87000
87571
  }
@@ -88935,6 +89506,14 @@ var schemas_default = {
88935
89506
  "trim"
88936
89507
  ]
88937
89508
  },
89509
+ params: {
89510
+ description: "Query parameters to append to the resolved URL. Merged on top of `originParams` from config; step keys win on collision. If `url` already contains a colliding query key, the value here replaces it. Values support environment variable substitution via `$VAR` syntax. WARNING: values are embedded in the request URL and appear in test results, logs, and reports.",
89511
+ type: "object",
89512
+ additionalProperties: {
89513
+ type: "string"
89514
+ },
89515
+ default: {}
89516
+ },
88938
89517
  timeout: {
88939
89518
  type: "integer",
88940
89519
  description: "Maximum time in milliseconds to wait for the page to be ready. If exceeded, the goTo action fails.",
@@ -89107,6 +89686,14 @@ var schemas_default = {
89107
89686
  "trim"
89108
89687
  ]
89109
89688
  },
89689
+ params: {
89690
+ description: "Query parameters to append to the resolved URL. Merged on top of `originParams` from config; step keys win on collision. If `url` already contains a colliding query key, the value here replaces it. Values support environment variable substitution via `$VAR` syntax. WARNING: values are embedded in the request URL and appear in test results, logs, and reports.",
89691
+ type: "object",
89692
+ additionalProperties: {
89693
+ type: "string"
89694
+ },
89695
+ default: {}
89696
+ },
89110
89697
  timeout: {
89111
89698
  type: "integer",
89112
89699
  description: "Maximum time in milliseconds to wait for the page to be ready. If exceeded, the goTo action fails.",
@@ -89256,6 +89843,13 @@ var schemas_default = {
89256
89843
  url: "/search",
89257
89844
  origin: "https://www.google.com"
89258
89845
  },
89846
+ {
89847
+ url: "/dashboard",
89848
+ origin: "https://my-app.com",
89849
+ params: {
89850
+ __clerk_testing_token: "$CLERK_TESTING_TOKEN"
89851
+ }
89852
+ },
89259
89853
  {
89260
89854
  url: "https://www.example.com",
89261
89855
  waitUntil: {
@@ -91521,9 +92115,9 @@ var schemas_default = {
91521
92115
  anyOf: [
91522
92116
  {
91523
92117
  title: "Screenshot (simple)",
91524
- description: "File path of the PNG file. Accepts absolute paths. If not specified, the file name is the ID of the step.",
92118
+ description: "File path of the PNG file. Accepts absolute paths. If not specified, the file name is the ID of the step. If an `http(s)` URL is supplied, the remote image is downloaded and used as a read-only reference for comparison; the new capture is written to a local run-specific folder instead of being uploaded back to the URL.",
91525
92119
  type: "string",
91526
- pattern: "([A-Za-z0-9_-]*\\.(png|PNG)$|\\$[A-Za-z0-9_]+)",
92120
+ pattern: "^(?:https?:\\/\\/.+\\.(?:png|PNG)(?:\\?.*)?|[A-Za-z]:[\\/\\\\].*\\.(?:png|PNG)|[\\/\\\\]?[A-Za-z0-9_.\\/\\\\-]*\\.(?:png|PNG)|\\$[A-Za-z0-9_]+)$",
91527
92121
  transform: [
91528
92122
  "trim"
91529
92123
  ]
@@ -91534,9 +92128,9 @@ var schemas_default = {
91534
92128
  properties: {
91535
92129
  path: {
91536
92130
  title: "Screenshot (simple)",
91537
- description: "File path of the PNG file. Accepts absolute paths. If not specified, the file name is the ID of the step.",
92131
+ description: "File path of the PNG file. Accepts absolute paths. If not specified, the file name is the ID of the step. If an `http(s)` URL is supplied, the remote image is downloaded and used as a read-only reference for comparison; the new capture is written to a local run-specific folder instead of being uploaded back to the URL.",
91538
92132
  type: "string",
91539
- pattern: "([A-Za-z0-9_-]*\\.(png|PNG)$|\\$[A-Za-z0-9_]+)",
92133
+ pattern: "^(?:https?:\\/\\/.+\\.(?:png|PNG)(?:\\?.*)?|[A-Za-z]:[\\/\\\\].*\\.(?:png|PNG)|[\\/\\\\]?[A-Za-z0-9_.\\/\\\\-]*\\.(?:png|PNG)|\\$[A-Za-z0-9_]+)$",
91540
92134
  transform: [
91541
92135
  "trim"
91542
92136
  ]
@@ -91767,9 +92361,9 @@ var schemas_default = {
91767
92361
  schemas: {
91768
92362
  path: {
91769
92363
  title: "Screenshot (simple)",
91770
- description: "File path of the PNG file. Accepts absolute paths. If not specified, the file name is the ID of the step.",
92364
+ description: "File path of the PNG file. Accepts absolute paths. If not specified, the file name is the ID of the step. If an `http(s)` URL is supplied, the remote image is downloaded and used as a read-only reference for comparison; the new capture is written to a local run-specific folder instead of being uploaded back to the URL.",
91771
92365
  type: "string",
91772
- pattern: "([A-Za-z0-9_-]*\\.(png|PNG)$|\\$[A-Za-z0-9_]+)",
92366
+ pattern: "^(?:https?:\\/\\/.+\\.(?:png|PNG)(?:\\?.*)?|[A-Za-z]:[\\/\\\\].*\\.(?:png|PNG)|[\\/\\\\]?[A-Za-z0-9_.\\/\\\\-]*\\.(?:png|PNG)|\\$[A-Za-z0-9_]+)$",
91773
92367
  transform: [
91774
92368
  "trim"
91775
92369
  ]
@@ -91780,9 +92374,9 @@ var schemas_default = {
91780
92374
  properties: {
91781
92375
  path: {
91782
92376
  title: "Screenshot (simple)",
91783
- description: "File path of the PNG file. Accepts absolute paths. If not specified, the file name is the ID of the step.",
92377
+ description: "File path of the PNG file. Accepts absolute paths. If not specified, the file name is the ID of the step. If an `http(s)` URL is supplied, the remote image is downloaded and used as a read-only reference for comparison; the new capture is written to a local run-specific folder instead of being uploaded back to the URL.",
91784
92378
  type: "string",
91785
- pattern: "([A-Za-z0-9_-]*\\.(png|PNG)$|\\$[A-Za-z0-9_]+)",
92379
+ pattern: "^(?:https?:\\/\\/.+\\.(?:png|PNG)(?:\\?.*)?|[A-Za-z]:[\\/\\\\].*\\.(?:png|PNG)|[\\/\\\\]?[A-Za-z0-9_.\\/\\\\-]*\\.(?:png|PNG)|\\$[A-Za-z0-9_]+)$",
91786
92380
  transform: [
91787
92381
  "trim"
91788
92382
  ]
@@ -92164,6 +92758,12 @@ var schemas_default = {
92164
92758
  "image.png",
92165
92759
  "static/images/image.png",
92166
92760
  "/User/manny/projects/doc-detective/static/images/image.png",
92761
+ "https://example.com/static/images/image.png",
92762
+ {
92763
+ path: "https://promptless-customer-doc-assets.s3.amazonaws.com/docs-images/request-changes-button-0c851bb3.png",
92764
+ maxVariation: 0.05,
92765
+ overwrite: "aboveVariation"
92766
+ },
92167
92767
  {
92168
92768
  path: "image.png",
92169
92769
  directory: "static/images",
@@ -95267,6 +95867,14 @@ var schemas_default = {
95267
95867
  "trim"
95268
95868
  ]
95269
95869
  },
95870
+ params: {
95871
+ description: "Query parameters to append to the resolved URL. Merged on top of `originParams` from config; step keys win on collision. If `url` already contains a colliding query key, the value here replaces it. Values support environment variable substitution via `$VAR` syntax. WARNING: values are embedded in the request URL and appear in test results, logs, and reports.",
95872
+ type: "object",
95873
+ additionalProperties: {
95874
+ type: "string"
95875
+ },
95876
+ default: {}
95877
+ },
95270
95878
  statusCodes: {
95271
95879
  description: "Accepted status codes. If the specified URL returns a code other than what is specified here, the action fails.",
95272
95880
  anyOf: [
@@ -95350,6 +95958,14 @@ var schemas_default = {
95350
95958
  "trim"
95351
95959
  ]
95352
95960
  },
95961
+ params: {
95962
+ description: "Query parameters to append to the resolved URL. Merged on top of `originParams` from config; step keys win on collision. If `url` already contains a colliding query key, the value here replaces it. Values support environment variable substitution via `$VAR` syntax. WARNING: values are embedded in the request URL and appear in test results, logs, and reports.",
95963
+ type: "object",
95964
+ additionalProperties: {
95965
+ type: "string"
95966
+ },
95967
+ default: {}
95968
+ },
95353
95969
  statusCodes: {
95354
95970
  description: "Accepted status codes. If the specified URL returns a code other than what is specified here, the action fails.",
95355
95971
  anyOf: [
@@ -95412,6 +96028,13 @@ var schemas_default = {
95412
96028
  statusCodes: [
95413
96029
  200
95414
96030
  ]
96031
+ },
96032
+ {
96033
+ url: "/health",
96034
+ origin: "https://my-app.com",
96035
+ params: {
96036
+ __clerk_testing_token: "$CLERK_TESTING_TOKEN"
96037
+ }
95415
96038
  }
95416
96039
  ]
95417
96040
  }
@@ -97352,6 +97975,14 @@ var schemas_default = {
97352
97975
  "trim"
97353
97976
  ]
97354
97977
  },
97978
+ params: {
97979
+ description: "Query parameters to append to the resolved URL. Merged on top of `originParams` from config; step keys win on collision. If `url` already contains a colliding query key, the value here replaces it. Values support environment variable substitution via `$VAR` syntax. WARNING: values are embedded in the request URL and appear in test results, logs, and reports.",
97980
+ type: "object",
97981
+ additionalProperties: {
97982
+ type: "string"
97983
+ },
97984
+ default: {}
97985
+ },
97355
97986
  timeout: {
97356
97987
  type: "integer",
97357
97988
  description: "Maximum time in milliseconds to wait for the page to be ready. If exceeded, the goTo action fails.",
@@ -97524,6 +98155,14 @@ var schemas_default = {
97524
98155
  "trim"
97525
98156
  ]
97526
98157
  },
98158
+ params: {
98159
+ description: "Query parameters to append to the resolved URL. Merged on top of `originParams` from config; step keys win on collision. If `url` already contains a colliding query key, the value here replaces it. Values support environment variable substitution via `$VAR` syntax. WARNING: values are embedded in the request URL and appear in test results, logs, and reports.",
98160
+ type: "object",
98161
+ additionalProperties: {
98162
+ type: "string"
98163
+ },
98164
+ default: {}
98165
+ },
97527
98166
  timeout: {
97528
98167
  type: "integer",
97529
98168
  description: "Maximum time in milliseconds to wait for the page to be ready. If exceeded, the goTo action fails.",
@@ -97673,6 +98312,13 @@ var schemas_default = {
97673
98312
  url: "/search",
97674
98313
  origin: "https://www.google.com"
97675
98314
  },
98315
+ {
98316
+ url: "/dashboard",
98317
+ origin: "https://my-app.com",
98318
+ params: {
98319
+ __clerk_testing_token: "$CLERK_TESTING_TOKEN"
98320
+ }
98321
+ },
97676
98322
  {
97677
98323
  url: "https://www.example.com",
97678
98324
  waitUntil: {
@@ -99938,9 +100584,9 @@ var schemas_default = {
99938
100584
  anyOf: [
99939
100585
  {
99940
100586
  title: "Screenshot (simple)",
99941
- description: "File path of the PNG file. Accepts absolute paths. If not specified, the file name is the ID of the step.",
100587
+ description: "File path of the PNG file. Accepts absolute paths. If not specified, the file name is the ID of the step. If an `http(s)` URL is supplied, the remote image is downloaded and used as a read-only reference for comparison; the new capture is written to a local run-specific folder instead of being uploaded back to the URL.",
99942
100588
  type: "string",
99943
- pattern: "([A-Za-z0-9_-]*\\.(png|PNG)$|\\$[A-Za-z0-9_]+)",
100589
+ pattern: "^(?:https?:\\/\\/.+\\.(?:png|PNG)(?:\\?.*)?|[A-Za-z]:[\\/\\\\].*\\.(?:png|PNG)|[\\/\\\\]?[A-Za-z0-9_.\\/\\\\-]*\\.(?:png|PNG)|\\$[A-Za-z0-9_]+)$",
99944
100590
  transform: [
99945
100591
  "trim"
99946
100592
  ]
@@ -99951,9 +100597,9 @@ var schemas_default = {
99951
100597
  properties: {
99952
100598
  path: {
99953
100599
  title: "Screenshot (simple)",
99954
- description: "File path of the PNG file. Accepts absolute paths. If not specified, the file name is the ID of the step.",
100600
+ description: "File path of the PNG file. Accepts absolute paths. If not specified, the file name is the ID of the step. If an `http(s)` URL is supplied, the remote image is downloaded and used as a read-only reference for comparison; the new capture is written to a local run-specific folder instead of being uploaded back to the URL.",
99955
100601
  type: "string",
99956
- pattern: "([A-Za-z0-9_-]*\\.(png|PNG)$|\\$[A-Za-z0-9_]+)",
100602
+ pattern: "^(?:https?:\\/\\/.+\\.(?:png|PNG)(?:\\?.*)?|[A-Za-z]:[\\/\\\\].*\\.(?:png|PNG)|[\\/\\\\]?[A-Za-z0-9_.\\/\\\\-]*\\.(?:png|PNG)|\\$[A-Za-z0-9_]+)$",
99957
100603
  transform: [
99958
100604
  "trim"
99959
100605
  ]
@@ -100184,9 +100830,9 @@ var schemas_default = {
100184
100830
  schemas: {
100185
100831
  path: {
100186
100832
  title: "Screenshot (simple)",
100187
- description: "File path of the PNG file. Accepts absolute paths. If not specified, the file name is the ID of the step.",
100833
+ description: "File path of the PNG file. Accepts absolute paths. If not specified, the file name is the ID of the step. If an `http(s)` URL is supplied, the remote image is downloaded and used as a read-only reference for comparison; the new capture is written to a local run-specific folder instead of being uploaded back to the URL.",
100188
100834
  type: "string",
100189
- pattern: "([A-Za-z0-9_-]*\\.(png|PNG)$|\\$[A-Za-z0-9_]+)",
100835
+ pattern: "^(?:https?:\\/\\/.+\\.(?:png|PNG)(?:\\?.*)?|[A-Za-z]:[\\/\\\\].*\\.(?:png|PNG)|[\\/\\\\]?[A-Za-z0-9_.\\/\\\\-]*\\.(?:png|PNG)|\\$[A-Za-z0-9_]+)$",
100190
100836
  transform: [
100191
100837
  "trim"
100192
100838
  ]
@@ -100197,9 +100843,9 @@ var schemas_default = {
100197
100843
  properties: {
100198
100844
  path: {
100199
100845
  title: "Screenshot (simple)",
100200
- description: "File path of the PNG file. Accepts absolute paths. If not specified, the file name is the ID of the step.",
100846
+ description: "File path of the PNG file. Accepts absolute paths. If not specified, the file name is the ID of the step. If an `http(s)` URL is supplied, the remote image is downloaded and used as a read-only reference for comparison; the new capture is written to a local run-specific folder instead of being uploaded back to the URL.",
100201
100847
  type: "string",
100202
- pattern: "([A-Za-z0-9_-]*\\.(png|PNG)$|\\$[A-Za-z0-9_]+)",
100848
+ pattern: "^(?:https?:\\/\\/.+\\.(?:png|PNG)(?:\\?.*)?|[A-Za-z]:[\\/\\\\].*\\.(?:png|PNG)|[\\/\\\\]?[A-Za-z0-9_.\\/\\\\-]*\\.(?:png|PNG)|\\$[A-Za-z0-9_]+)$",
100203
100849
  transform: [
100204
100850
  "trim"
100205
100851
  ]
@@ -100581,6 +101227,12 @@ var schemas_default = {
100581
101227
  "image.png",
100582
101228
  "static/images/image.png",
100583
101229
  "/User/manny/projects/doc-detective/static/images/image.png",
101230
+ "https://example.com/static/images/image.png",
101231
+ {
101232
+ path: "https://promptless-customer-doc-assets.s3.amazonaws.com/docs-images/request-changes-button-0c851bb3.png",
101233
+ maxVariation: 0.05,
101234
+ overwrite: "aboveVariation"
101235
+ },
100584
101236
  {
100585
101237
  path: "image.png",
100586
101238
  directory: "static/images",
@@ -103757,6 +104409,14 @@ var schemas_default = {
103757
104409
  "trim"
103758
104410
  ]
103759
104411
  },
104412
+ params: {
104413
+ description: "Query parameters to append to the resolved URL. Merged on top of `originParams` from config; step keys win on collision. If `url` already contains a colliding query key, the value here replaces it. Values support environment variable substitution via `$VAR` syntax. WARNING: values are embedded in the request URL and appear in test results, logs, and reports.",
104414
+ type: "object",
104415
+ additionalProperties: {
104416
+ type: "string"
104417
+ },
104418
+ default: {}
104419
+ },
103760
104420
  statusCodes: {
103761
104421
  description: "Accepted status codes. If the specified URL returns a code other than what is specified here, the action fails.",
103762
104422
  anyOf: [
@@ -103840,6 +104500,14 @@ var schemas_default = {
103840
104500
  "trim"
103841
104501
  ]
103842
104502
  },
104503
+ params: {
104504
+ description: "Query parameters to append to the resolved URL. Merged on top of `originParams` from config; step keys win on collision. If `url` already contains a colliding query key, the value here replaces it. Values support environment variable substitution via `$VAR` syntax. WARNING: values are embedded in the request URL and appear in test results, logs, and reports.",
104505
+ type: "object",
104506
+ additionalProperties: {
104507
+ type: "string"
104508
+ },
104509
+ default: {}
104510
+ },
103843
104511
  statusCodes: {
103844
104512
  description: "Accepted status codes. If the specified URL returns a code other than what is specified here, the action fails.",
103845
104513
  anyOf: [
@@ -103902,6 +104570,13 @@ var schemas_default = {
103902
104570
  statusCodes: [
103903
104571
  200
103904
104572
  ]
104573
+ },
104574
+ {
104575
+ url: "/health",
104576
+ origin: "https://my-app.com",
104577
+ params: {
104578
+ __clerk_testing_token: "$CLERK_TESTING_TOKEN"
104579
+ }
103905
104580
  }
103906
104581
  ]
103907
104582
  }
@@ -105842,6 +106517,14 @@ var schemas_default = {
105842
106517
  "trim"
105843
106518
  ]
105844
106519
  },
106520
+ params: {
106521
+ description: "Query parameters to append to the resolved URL. Merged on top of `originParams` from config; step keys win on collision. If `url` already contains a colliding query key, the value here replaces it. Values support environment variable substitution via `$VAR` syntax. WARNING: values are embedded in the request URL and appear in test results, logs, and reports.",
106522
+ type: "object",
106523
+ additionalProperties: {
106524
+ type: "string"
106525
+ },
106526
+ default: {}
106527
+ },
105845
106528
  timeout: {
105846
106529
  type: "integer",
105847
106530
  description: "Maximum time in milliseconds to wait for the page to be ready. If exceeded, the goTo action fails.",
@@ -106014,6 +106697,14 @@ var schemas_default = {
106014
106697
  "trim"
106015
106698
  ]
106016
106699
  },
106700
+ params: {
106701
+ description: "Query parameters to append to the resolved URL. Merged on top of `originParams` from config; step keys win on collision. If `url` already contains a colliding query key, the value here replaces it. Values support environment variable substitution via `$VAR` syntax. WARNING: values are embedded in the request URL and appear in test results, logs, and reports.",
106702
+ type: "object",
106703
+ additionalProperties: {
106704
+ type: "string"
106705
+ },
106706
+ default: {}
106707
+ },
106017
106708
  timeout: {
106018
106709
  type: "integer",
106019
106710
  description: "Maximum time in milliseconds to wait for the page to be ready. If exceeded, the goTo action fails.",
@@ -106163,6 +106854,13 @@ var schemas_default = {
106163
106854
  url: "/search",
106164
106855
  origin: "https://www.google.com"
106165
106856
  },
106857
+ {
106858
+ url: "/dashboard",
106859
+ origin: "https://my-app.com",
106860
+ params: {
106861
+ __clerk_testing_token: "$CLERK_TESTING_TOKEN"
106862
+ }
106863
+ },
106166
106864
  {
106167
106865
  url: "https://www.example.com",
106168
106866
  waitUntil: {
@@ -108428,9 +109126,9 @@ var schemas_default = {
108428
109126
  anyOf: [
108429
109127
  {
108430
109128
  title: "Screenshot (simple)",
108431
- description: "File path of the PNG file. Accepts absolute paths. If not specified, the file name is the ID of the step.",
109129
+ description: "File path of the PNG file. Accepts absolute paths. If not specified, the file name is the ID of the step. If an `http(s)` URL is supplied, the remote image is downloaded and used as a read-only reference for comparison; the new capture is written to a local run-specific folder instead of being uploaded back to the URL.",
108432
109130
  type: "string",
108433
- pattern: "([A-Za-z0-9_-]*\\.(png|PNG)$|\\$[A-Za-z0-9_]+)",
109131
+ pattern: "^(?:https?:\\/\\/.+\\.(?:png|PNG)(?:\\?.*)?|[A-Za-z]:[\\/\\\\].*\\.(?:png|PNG)|[\\/\\\\]?[A-Za-z0-9_.\\/\\\\-]*\\.(?:png|PNG)|\\$[A-Za-z0-9_]+)$",
108434
109132
  transform: [
108435
109133
  "trim"
108436
109134
  ]
@@ -108441,9 +109139,9 @@ var schemas_default = {
108441
109139
  properties: {
108442
109140
  path: {
108443
109141
  title: "Screenshot (simple)",
108444
- description: "File path of the PNG file. Accepts absolute paths. If not specified, the file name is the ID of the step.",
109142
+ description: "File path of the PNG file. Accepts absolute paths. If not specified, the file name is the ID of the step. If an `http(s)` URL is supplied, the remote image is downloaded and used as a read-only reference for comparison; the new capture is written to a local run-specific folder instead of being uploaded back to the URL.",
108445
109143
  type: "string",
108446
- pattern: "([A-Za-z0-9_-]*\\.(png|PNG)$|\\$[A-Za-z0-9_]+)",
109144
+ pattern: "^(?:https?:\\/\\/.+\\.(?:png|PNG)(?:\\?.*)?|[A-Za-z]:[\\/\\\\].*\\.(?:png|PNG)|[\\/\\\\]?[A-Za-z0-9_.\\/\\\\-]*\\.(?:png|PNG)|\\$[A-Za-z0-9_]+)$",
108447
109145
  transform: [
108448
109146
  "trim"
108449
109147
  ]
@@ -108674,9 +109372,9 @@ var schemas_default = {
108674
109372
  schemas: {
108675
109373
  path: {
108676
109374
  title: "Screenshot (simple)",
108677
- description: "File path of the PNG file. Accepts absolute paths. If not specified, the file name is the ID of the step.",
109375
+ description: "File path of the PNG file. Accepts absolute paths. If not specified, the file name is the ID of the step. If an `http(s)` URL is supplied, the remote image is downloaded and used as a read-only reference for comparison; the new capture is written to a local run-specific folder instead of being uploaded back to the URL.",
108678
109376
  type: "string",
108679
- pattern: "([A-Za-z0-9_-]*\\.(png|PNG)$|\\$[A-Za-z0-9_]+)",
109377
+ pattern: "^(?:https?:\\/\\/.+\\.(?:png|PNG)(?:\\?.*)?|[A-Za-z]:[\\/\\\\].*\\.(?:png|PNG)|[\\/\\\\]?[A-Za-z0-9_.\\/\\\\-]*\\.(?:png|PNG)|\\$[A-Za-z0-9_]+)$",
108680
109378
  transform: [
108681
109379
  "trim"
108682
109380
  ]
@@ -108687,9 +109385,9 @@ var schemas_default = {
108687
109385
  properties: {
108688
109386
  path: {
108689
109387
  title: "Screenshot (simple)",
108690
- description: "File path of the PNG file. Accepts absolute paths. If not specified, the file name is the ID of the step.",
109388
+ description: "File path of the PNG file. Accepts absolute paths. If not specified, the file name is the ID of the step. If an `http(s)` URL is supplied, the remote image is downloaded and used as a read-only reference for comparison; the new capture is written to a local run-specific folder instead of being uploaded back to the URL.",
108691
109389
  type: "string",
108692
- pattern: "([A-Za-z0-9_-]*\\.(png|PNG)$|\\$[A-Za-z0-9_]+)",
109390
+ pattern: "^(?:https?:\\/\\/.+\\.(?:png|PNG)(?:\\?.*)?|[A-Za-z]:[\\/\\\\].*\\.(?:png|PNG)|[\\/\\\\]?[A-Za-z0-9_.\\/\\\\-]*\\.(?:png|PNG)|\\$[A-Za-z0-9_]+)$",
108693
109391
  transform: [
108694
109392
  "trim"
108695
109393
  ]
@@ -109071,6 +109769,12 @@ var schemas_default = {
109071
109769
  "image.png",
109072
109770
  "static/images/image.png",
109073
109771
  "/User/manny/projects/doc-detective/static/images/image.png",
109772
+ "https://example.com/static/images/image.png",
109773
+ {
109774
+ path: "https://promptless-customer-doc-assets.s3.amazonaws.com/docs-images/request-changes-button-0c851bb3.png",
109775
+ maxVariation: 0.05,
109776
+ overwrite: "aboveVariation"
109777
+ },
109074
109778
  {
109075
109779
  path: "image.png",
109076
109780
  directory: "static/images",
@@ -111894,6 +112598,14 @@ var schemas_default = {
111894
112598
  "trim"
111895
112599
  ]
111896
112600
  },
112601
+ params: {
112602
+ description: "Query parameters to append to the resolved URL. Merged on top of `originParams` from config; step keys win on collision. If `url` already contains a colliding query key, the value here replaces it. Values support environment variable substitution via `$VAR` syntax. WARNING: values are embedded in the request URL and appear in test results, logs, and reports.",
112603
+ type: "object",
112604
+ additionalProperties: {
112605
+ type: "string"
112606
+ },
112607
+ default: {}
112608
+ },
111897
112609
  statusCodes: {
111898
112610
  description: "Accepted status codes. If the specified URL returns a code other than what is specified here, the action fails.",
111899
112611
  anyOf: [
@@ -111977,6 +112689,14 @@ var schemas_default = {
111977
112689
  "trim"
111978
112690
  ]
111979
112691
  },
112692
+ params: {
112693
+ description: "Query parameters to append to the resolved URL. Merged on top of `originParams` from config; step keys win on collision. If `url` already contains a colliding query key, the value here replaces it. Values support environment variable substitution via `$VAR` syntax. WARNING: values are embedded in the request URL and appear in test results, logs, and reports.",
112694
+ type: "object",
112695
+ additionalProperties: {
112696
+ type: "string"
112697
+ },
112698
+ default: {}
112699
+ },
111980
112700
  statusCodes: {
111981
112701
  description: "Accepted status codes. If the specified URL returns a code other than what is specified here, the action fails.",
111982
112702
  anyOf: [
@@ -112039,6 +112759,13 @@ var schemas_default = {
112039
112759
  statusCodes: [
112040
112760
  200
112041
112761
  ]
112762
+ },
112763
+ {
112764
+ url: "/health",
112765
+ origin: "https://my-app.com",
112766
+ params: {
112767
+ __clerk_testing_token: "$CLERK_TESTING_TOKEN"
112768
+ }
112042
112769
  }
112043
112770
  ]
112044
112771
  }
@@ -113979,6 +114706,14 @@ var schemas_default = {
113979
114706
  "trim"
113980
114707
  ]
113981
114708
  },
114709
+ params: {
114710
+ description: "Query parameters to append to the resolved URL. Merged on top of `originParams` from config; step keys win on collision. If `url` already contains a colliding query key, the value here replaces it. Values support environment variable substitution via `$VAR` syntax. WARNING: values are embedded in the request URL and appear in test results, logs, and reports.",
114711
+ type: "object",
114712
+ additionalProperties: {
114713
+ type: "string"
114714
+ },
114715
+ default: {}
114716
+ },
113982
114717
  timeout: {
113983
114718
  type: "integer",
113984
114719
  description: "Maximum time in milliseconds to wait for the page to be ready. If exceeded, the goTo action fails.",
@@ -114151,6 +114886,14 @@ var schemas_default = {
114151
114886
  "trim"
114152
114887
  ]
114153
114888
  },
114889
+ params: {
114890
+ description: "Query parameters to append to the resolved URL. Merged on top of `originParams` from config; step keys win on collision. If `url` already contains a colliding query key, the value here replaces it. Values support environment variable substitution via `$VAR` syntax. WARNING: values are embedded in the request URL and appear in test results, logs, and reports.",
114891
+ type: "object",
114892
+ additionalProperties: {
114893
+ type: "string"
114894
+ },
114895
+ default: {}
114896
+ },
114154
114897
  timeout: {
114155
114898
  type: "integer",
114156
114899
  description: "Maximum time in milliseconds to wait for the page to be ready. If exceeded, the goTo action fails.",
@@ -114300,6 +115043,13 @@ var schemas_default = {
114300
115043
  url: "/search",
114301
115044
  origin: "https://www.google.com"
114302
115045
  },
115046
+ {
115047
+ url: "/dashboard",
115048
+ origin: "https://my-app.com",
115049
+ params: {
115050
+ __clerk_testing_token: "$CLERK_TESTING_TOKEN"
115051
+ }
115052
+ },
114303
115053
  {
114304
115054
  url: "https://www.example.com",
114305
115055
  waitUntil: {
@@ -116565,9 +117315,9 @@ var schemas_default = {
116565
117315
  anyOf: [
116566
117316
  {
116567
117317
  title: "Screenshot (simple)",
116568
- description: "File path of the PNG file. Accepts absolute paths. If not specified, the file name is the ID of the step.",
117318
+ description: "File path of the PNG file. Accepts absolute paths. If not specified, the file name is the ID of the step. If an `http(s)` URL is supplied, the remote image is downloaded and used as a read-only reference for comparison; the new capture is written to a local run-specific folder instead of being uploaded back to the URL.",
116569
117319
  type: "string",
116570
- pattern: "([A-Za-z0-9_-]*\\.(png|PNG)$|\\$[A-Za-z0-9_]+)",
117320
+ pattern: "^(?:https?:\\/\\/.+\\.(?:png|PNG)(?:\\?.*)?|[A-Za-z]:[\\/\\\\].*\\.(?:png|PNG)|[\\/\\\\]?[A-Za-z0-9_.\\/\\\\-]*\\.(?:png|PNG)|\\$[A-Za-z0-9_]+)$",
116571
117321
  transform: [
116572
117322
  "trim"
116573
117323
  ]
@@ -116578,9 +117328,9 @@ var schemas_default = {
116578
117328
  properties: {
116579
117329
  path: {
116580
117330
  title: "Screenshot (simple)",
116581
- description: "File path of the PNG file. Accepts absolute paths. If not specified, the file name is the ID of the step.",
117331
+ description: "File path of the PNG file. Accepts absolute paths. If not specified, the file name is the ID of the step. If an `http(s)` URL is supplied, the remote image is downloaded and used as a read-only reference for comparison; the new capture is written to a local run-specific folder instead of being uploaded back to the URL.",
116582
117332
  type: "string",
116583
- pattern: "([A-Za-z0-9_-]*\\.(png|PNG)$|\\$[A-Za-z0-9_]+)",
117333
+ pattern: "^(?:https?:\\/\\/.+\\.(?:png|PNG)(?:\\?.*)?|[A-Za-z]:[\\/\\\\].*\\.(?:png|PNG)|[\\/\\\\]?[A-Za-z0-9_.\\/\\\\-]*\\.(?:png|PNG)|\\$[A-Za-z0-9_]+)$",
116584
117334
  transform: [
116585
117335
  "trim"
116586
117336
  ]
@@ -116811,9 +117561,9 @@ var schemas_default = {
116811
117561
  schemas: {
116812
117562
  path: {
116813
117563
  title: "Screenshot (simple)",
116814
- description: "File path of the PNG file. Accepts absolute paths. If not specified, the file name is the ID of the step.",
117564
+ description: "File path of the PNG file. Accepts absolute paths. If not specified, the file name is the ID of the step. If an `http(s)` URL is supplied, the remote image is downloaded and used as a read-only reference for comparison; the new capture is written to a local run-specific folder instead of being uploaded back to the URL.",
116815
117565
  type: "string",
116816
- pattern: "([A-Za-z0-9_-]*\\.(png|PNG)$|\\$[A-Za-z0-9_]+)",
117566
+ pattern: "^(?:https?:\\/\\/.+\\.(?:png|PNG)(?:\\?.*)?|[A-Za-z]:[\\/\\\\].*\\.(?:png|PNG)|[\\/\\\\]?[A-Za-z0-9_.\\/\\\\-]*\\.(?:png|PNG)|\\$[A-Za-z0-9_]+)$",
116817
117567
  transform: [
116818
117568
  "trim"
116819
117569
  ]
@@ -116824,9 +117574,9 @@ var schemas_default = {
116824
117574
  properties: {
116825
117575
  path: {
116826
117576
  title: "Screenshot (simple)",
116827
- description: "File path of the PNG file. Accepts absolute paths. If not specified, the file name is the ID of the step.",
117577
+ description: "File path of the PNG file. Accepts absolute paths. If not specified, the file name is the ID of the step. If an `http(s)` URL is supplied, the remote image is downloaded and used as a read-only reference for comparison; the new capture is written to a local run-specific folder instead of being uploaded back to the URL.",
116828
117578
  type: "string",
116829
- pattern: "([A-Za-z0-9_-]*\\.(png|PNG)$|\\$[A-Za-z0-9_]+)",
117579
+ pattern: "^(?:https?:\\/\\/.+\\.(?:png|PNG)(?:\\?.*)?|[A-Za-z]:[\\/\\\\].*\\.(?:png|PNG)|[\\/\\\\]?[A-Za-z0-9_.\\/\\\\-]*\\.(?:png|PNG)|\\$[A-Za-z0-9_]+)$",
116830
117580
  transform: [
116831
117581
  "trim"
116832
117582
  ]
@@ -117208,6 +117958,12 @@ var schemas_default = {
117208
117958
  "image.png",
117209
117959
  "static/images/image.png",
117210
117960
  "/User/manny/projects/doc-detective/static/images/image.png",
117961
+ "https://example.com/static/images/image.png",
117962
+ {
117963
+ path: "https://promptless-customer-doc-assets.s3.amazonaws.com/docs-images/request-changes-button-0c851bb3.png",
117964
+ maxVariation: 0.05,
117965
+ overwrite: "aboveVariation"
117966
+ },
117211
117967
  {
117212
117968
  path: "image.png",
117213
117969
  directory: "static/images",
@@ -129219,6 +129975,8 @@ var import_node_fs = __toESM(require("node:fs"), 1);
129219
129975
  var import_node_os = __toESM(require("node:os"), 1);
129220
129976
  var import_node_path = __toESM(require("node:path"), 1);
129221
129977
  var import_node_crypto = __toESM(require("node:crypto"), 1);
129978
+ var import_promises = __toESM(require("node:dns/promises"), 1);
129979
+ var import_node_net = __toESM(require("node:net"), 1);
129222
129980
  var import_axios = __toESM(require("axios"), 1);
129223
129981
  var import_node_child_process = require("node:child_process");
129224
129982
  function isRelativeUrl(url) {
@@ -129229,6 +129987,36 @@ function isRelativeUrl(url) {
129229
129987
  return true;
129230
129988
  }
129231
129989
  }
129990
+ function appendQueryParams(url, params) {
129991
+ if (!params || typeof params !== "object" || Array.isArray(params))
129992
+ return url;
129993
+ const entries = Object.entries(params).filter(([, v]) => v !== void 0 && v !== null);
129994
+ if (entries.length === 0)
129995
+ return url;
129996
+ const hashIdx = url.indexOf("#");
129997
+ const fragment = hashIdx >= 0 ? url.slice(hashIdx) : "";
129998
+ const base = hashIdx >= 0 ? url.slice(0, hashIdx) : url;
129999
+ const queryIdx = base.indexOf("?");
130000
+ const pathAndAuthority = queryIdx >= 0 ? base.slice(0, queryIdx) : base;
130001
+ const existingQuery = queryIdx >= 0 ? base.slice(queryIdx + 1) : "";
130002
+ const newKeys = new Set(entries.map(([k]) => k));
130003
+ const preservedSegments = existingQuery ? existingQuery.split("&").filter((segment) => {
130004
+ if (!segment)
130005
+ return false;
130006
+ const eqIdx = segment.indexOf("=");
130007
+ const rawKey = eqIdx >= 0 ? segment.slice(0, eqIdx) : segment;
130008
+ let decodedKey;
130009
+ try {
130010
+ decodedKey = decodeURIComponent(rawKey);
130011
+ } catch {
130012
+ decodedKey = rawKey;
130013
+ }
130014
+ return !newKeys.has(decodedKey);
130015
+ }) : [];
130016
+ const newPairs = entries.map(([k, v]) => `${encodeURIComponent(k)}=${encodeURIComponent(String(v))}`);
130017
+ const query = [...preservedSegments, ...newPairs].join("&");
130018
+ return pathAndAuthority + (query ? "?" + query : "") + fragment;
130019
+ }
129232
130020
  function cleanTemp() {
129233
130021
  const tempDir = import_node_path.default.join(import_node_os.default.tmpdir(), "doc-detective");
129234
130022
  if (import_node_fs.default.existsSync(tempDir)) {
@@ -129243,23 +130031,146 @@ function cleanTemp() {
129243
130031
  });
129244
130032
  }
129245
130033
  }
129246
- async function fetchFile(fileURL) {
130034
+ var FETCH_BINARY_DEFAULTS = {
130035
+ responseType: "arraybuffer",
130036
+ timeout: 3e4,
130037
+ maxContentLength: 50 * 1024 * 1024,
130038
+ maxBodyLength: 50 * 1024 * 1024,
130039
+ maxRedirects: 5
130040
+ };
130041
+ function sanitizeFilesystemName(name, fallback) {
130042
+ if (!name || name === "." || name === "..")
130043
+ return fallback;
130044
+ const cleaned = name.replace(/[\x00-\x1f<>:"/\\|?*]/g, "_");
130045
+ if (!cleaned || /^\.+$/.test(cleaned))
130046
+ return fallback;
130047
+ return cleaned;
130048
+ }
130049
+ function safeFilenameFromUrl(fileURL, fallback) {
130050
+ let raw;
130051
+ try {
130052
+ raw = new URL(fileURL).pathname;
130053
+ } catch {
130054
+ raw = fileURL;
130055
+ }
130056
+ raw = raw.split("?")[0].split("#")[0];
130057
+ const base = import_node_path.default.basename(raw.replace(/\\/g, "/"));
130058
+ return sanitizeFilesystemName(base, fallback);
130059
+ }
130060
+ function redactUrlForOutput(value) {
130061
+ try {
130062
+ const url = new URL(value);
130063
+ url.search = "";
130064
+ url.hash = "";
130065
+ return url.toString();
130066
+ } catch {
130067
+ return value.split("?")[0].split("#")[0];
130068
+ }
130069
+ }
130070
+ function isPrivateOrLoopbackAddress(ip) {
130071
+ if (!ip)
130072
+ return false;
130073
+ if (import_node_net.default.isIPv4(ip)) {
130074
+ const [a, b] = ip.split(".").map(Number);
130075
+ if (a === 10)
130076
+ return true;
130077
+ if (a === 127)
130078
+ return true;
130079
+ if (a === 0)
130080
+ return true;
130081
+ if (a === 169 && b === 254)
130082
+ return true;
130083
+ if (a === 172 && b >= 16 && b <= 31)
130084
+ return true;
130085
+ if (a === 192 && b === 168)
130086
+ return true;
130087
+ if (a === 100 && b >= 64 && b <= 127)
130088
+ return true;
130089
+ return false;
130090
+ }
130091
+ if (import_node_net.default.isIPv6(ip)) {
130092
+ const normalized = ip.toLowerCase();
130093
+ if (normalized === "::1")
130094
+ return true;
130095
+ if (normalized === "::")
130096
+ return true;
130097
+ if (normalized.startsWith("fc") || normalized.startsWith("fd"))
130098
+ return true;
130099
+ if (normalized.startsWith("fe80:"))
130100
+ return true;
130101
+ if (normalized.startsWith("::ffff:")) {
130102
+ return isPrivateOrLoopbackAddress(normalized.replace("::ffff:", ""));
130103
+ }
130104
+ return false;
130105
+ }
130106
+ return false;
130107
+ }
130108
+ async function assertUrlHostIsPublic(fileURL) {
130109
+ if (process.env.DOC_DETECTIVE_ALLOW_LOCAL_URLS === "true")
130110
+ return;
130111
+ let parsed;
130112
+ try {
130113
+ parsed = new URL(fileURL);
130114
+ } catch {
130115
+ throw new Error(`Invalid URL: ${redactUrlForOutput(fileURL)}`);
130116
+ }
130117
+ if (parsed.protocol !== "http:" && parsed.protocol !== "https:") {
130118
+ throw new Error(`Unsupported URL scheme (${parsed.protocol}) for ${redactUrlForOutput(fileURL)}`);
130119
+ }
130120
+ const host = parsed.hostname.replace(/^\[|\]$/g, "");
130121
+ if (import_node_net.default.isIP(host)) {
130122
+ if (isPrivateOrLoopbackAddress(host)) {
130123
+ throw new Error(`Refusing to fetch private/loopback address (${host}). Set DOC_DETECTIVE_ALLOW_LOCAL_URLS=true to allow.`);
130124
+ }
130125
+ return;
130126
+ }
130127
+ const lower = host.toLowerCase();
130128
+ if (lower === "localhost" || lower.endsWith(".localhost")) {
130129
+ throw new Error(`Refusing to fetch localhost (${host}). Set DOC_DETECTIVE_ALLOW_LOCAL_URLS=true to allow.`);
130130
+ }
130131
+ let addresses;
129247
130132
  try {
129248
- const response = await import_axios.default.get(fileURL);
129249
- if (typeof response.data === "object") {
129250
- response.data = JSON.stringify(response.data, null, 2);
130133
+ addresses = await import_promises.default.lookup(host, { all: true });
130134
+ } catch (error) {
130135
+ throw new Error(`Couldn't resolve host ${host} for SSRF check: ${error.message}`);
130136
+ }
130137
+ for (const { address } of addresses) {
130138
+ if (isPrivateOrLoopbackAddress(address)) {
130139
+ throw new Error(`Host ${host} resolves to a private/loopback address (${address}); refusing to fetch. Set DOC_DETECTIVE_ALLOW_LOCAL_URLS=true to allow.`);
130140
+ }
130141
+ }
130142
+ }
130143
+ async function fetchFile(fileURL, opts = {}) {
130144
+ try {
130145
+ if (opts.binary) {
130146
+ await assertUrlHostIsPublic(fileURL);
130147
+ }
130148
+ const response = await import_axios.default.get(fileURL, opts.binary ? FETCH_BINARY_DEFAULTS : void 0);
130149
+ let data;
130150
+ if (opts.binary) {
130151
+ data = Buffer.from(response.data);
130152
+ } else if (typeof response.data === "object") {
130153
+ data = JSON.stringify(response.data, null, 2);
129251
130154
  } else {
129252
- response.data = response.data.toString();
130155
+ data = response.data.toString();
129253
130156
  }
129254
- const fileName = fileURL.split("/").pop() || "fetched_file";
129255
- const hash = import_node_crypto.default.createHash("md5").update(response.data).digest("hex");
130157
+ const fileName = safeFilenameFromUrl(fileURL, "fetched_file");
130158
+ const hash = import_node_crypto.default.createHash("md5").update(data).digest("hex");
129256
130159
  const ddTempDir = import_node_path.default.join(import_node_os.default.tmpdir(), "doc-detective");
129257
130160
  const filePath = import_node_path.default.join(ddTempDir, `${hash}_${fileName}`);
130161
+ const resolvedDir = import_node_path.default.resolve(ddTempDir);
130162
+ const resolvedFile = import_node_path.default.resolve(filePath);
130163
+ if (!resolvedFile.startsWith(resolvedDir + import_node_path.default.sep)) {
130164
+ return {
130165
+ result: "error",
130166
+ message: new Error(`Refusing to write outside temp dir: ${resolvedFile}`)
130167
+ };
130168
+ }
129258
130169
  if (!import_node_fs.default.existsSync(ddTempDir)) {
129259
130170
  import_node_fs.default.mkdirSync(ddTempDir, { recursive: true });
129260
130171
  }
129261
130172
  if (!import_node_fs.default.existsSync(filePath)) {
129262
- import_node_fs.default.writeFileSync(filePath, response.data);
130173
+ import_node_fs.default.writeFileSync(filePath, data);
129263
130174
  }
129264
130175
  return { result: "success", path: filePath };
129265
130176
  } catch (error) {
@@ -129336,6 +130247,18 @@ function replaceEnvs(stringOrObject) {
129336
130247
  }
129337
130248
  return stringOrObject;
129338
130249
  }
130250
+ function timestamp() {
130251
+ let timestamp2 = /* @__PURE__ */ new Date();
130252
+ return `${timestamp2.getFullYear()}${("0" + (timestamp2.getMonth() + 1)).slice(-2)}${("0" + timestamp2.getDate()).slice(-2)}-${("0" + timestamp2.getHours()).slice(-2)}${("0" + timestamp2.getMinutes()).slice(-2)}${("0" + timestamp2.getSeconds()).slice(-2)}`;
130253
+ }
130254
+ function getOrInitRunTimestamp(config) {
130255
+ if (!config)
130256
+ return timestamp();
130257
+ if (!config.__runTimestamp) {
130258
+ config.__runTimestamp = timestamp();
130259
+ }
130260
+ return config.__runTimestamp;
130261
+ }
129339
130262
  async function spawnCommand(cmd, args = [], options = {}) {
129340
130263
  const spawnOptions = {
129341
130264
  shell: true
@@ -129873,11 +130796,17 @@ var defaultFileTypes = {
129873
130796
  inlineStatements: {
129874
130797
  testStart: [
129875
130798
  "<\\?doc-detective\\s+test([\\s\\S]*?)\\?>",
129876
- "<!--\\s*test([\\s\\S]+?)-->"
130799
+ "<!--\\s*test([\\s\\S]+?)-->",
130800
+ `<data\\s+[^>]*?name=["']doc-detective["'][^>]*?value='test\\s+([^']+?)'[^>]*?(?:\\/\\s*>|>\\s*<\\/data>)`,
130801
+ `<data\\s+[^>]*?name=["']doc-detective["'][^>]*?value="test\\s+([^"]+?)"[^>]*?(?:\\/\\s*>|>\\s*<\\/data>)`,
130802
+ `<data\\s+[^>]*?value='test\\s+([^']+?)'[^>]*?name=["']doc-detective["'][^>]*?(?:\\/\\s*>|>\\s*<\\/data>)`,
130803
+ `<data\\s+[^>]*?value="test\\s+([^"]+?)"[^>]*?name=["']doc-detective["'][^>]*?(?:\\/\\s*>|>\\s*<\\/data>)`
129877
130804
  ],
129878
130805
  testEnd: [
129879
130806
  "<\\?doc-detective\\s+test\\s+end\\s*\\?>",
129880
- "<!--\\s*test end([\\s\\S]+?)-->"
130807
+ "<!--\\s*test end([\\s\\S]+?)-->",
130808
+ `<data\\s+[^>]*?name=["']doc-detective["'][^>]*?value=["']test end["'][^>]*?(?:\\/\\s*>|>\\s*<\\/data>)`,
130809
+ `<data\\s+[^>]*?value=["']test end["'][^>]*?name=["']doc-detective["'][^>]*?(?:\\/\\s*>|>\\s*<\\/data>)`
129881
130810
  ],
129882
130811
  ignoreStart: [
129883
130812
  "<\\?doc-detective\\s+test\\s+ignore\\s+start\\s*\\?>",
@@ -129890,7 +130819,11 @@ var defaultFileTypes = {
129890
130819
  step: [
129891
130820
  "<\\?doc-detective\\s+step\\s+([\\s\\S]*?)\\s*\\?>",
129892
130821
  "<!--\\s*step([\\s\\S]+?)-->",
129893
- '<data\\s+name="step"\\s*>([\\s\\S]*?)<\\/data>'
130822
+ '<data\\s+name="step"\\s*>([\\s\\S]*?)<\\/data>',
130823
+ `<data\\s+[^>]*?name=["']doc-detective["'][^>]*?value='step\\s+([^']+?)'[^>]*?(?:\\/\\s*>|>\\s*<\\/data>)`,
130824
+ `<data\\s+[^>]*?name=["']doc-detective["'][^>]*?value="step\\s+([^"]+?)"[^>]*?(?:\\/\\s*>|>\\s*<\\/data>)`,
130825
+ `<data\\s+[^>]*?value='step\\s+([^']+?)'[^>]*?name=["']doc-detective["'][^>]*?(?:\\/\\s*>|>\\s*<\\/data>)`,
130826
+ `<data\\s+[^>]*?value="step\\s+([^"]+?)"[^>]*?name=["']doc-detective["'][^>]*?(?:\\/\\s*>|>\\s*<\\/data>)`
129894
130827
  ]
129895
130828
  },
129896
130829
  markup: [
@@ -130353,11 +131286,17 @@ var defaultFileTypesBase = {
130353
131286
  inlineStatements: {
130354
131287
  testStart: [
130355
131288
  "<\\?doc-detective\\s+test([\\s\\S]*?)\\?>",
130356
- "<!--\\s*test([\\s\\S]+?)-->"
131289
+ "<!--\\s*test([\\s\\S]+?)-->",
131290
+ `<data\\s+[^>]*?name=["']doc-detective["'][^>]*?value='test\\s+([^']+?)'[^>]*?(?:\\/\\s*>|>\\s*<\\/data>)`,
131291
+ `<data\\s+[^>]*?name=["']doc-detective["'][^>]*?value="test\\s+([^"]+?)"[^>]*?(?:\\/\\s*>|>\\s*<\\/data>)`,
131292
+ `<data\\s+[^>]*?value='test\\s+([^']+?)'[^>]*?name=["']doc-detective["'][^>]*?(?:\\/\\s*>|>\\s*<\\/data>)`,
131293
+ `<data\\s+[^>]*?value="test\\s+([^"]+?)"[^>]*?name=["']doc-detective["'][^>]*?(?:\\/\\s*>|>\\s*<\\/data>)`
130357
131294
  ],
130358
131295
  testEnd: [
130359
131296
  "<\\?doc-detective\\s+test\\s+end\\s*\\?>",
130360
- "<!--\\s*test end([\\s\\S]+?)-->"
131297
+ "<!--\\s*test end([\\s\\S]+?)-->",
131298
+ `<data\\s+[^>]*?name=["']doc-detective["'][^>]*?value=["']test end["'][^>]*?(?:\\/\\s*>|>\\s*<\\/data>)`,
131299
+ `<data\\s+[^>]*?value=["']test end["'][^>]*?name=["']doc-detective["'][^>]*?(?:\\/\\s*>|>\\s*<\\/data>)`
130361
131300
  ],
130362
131301
  ignoreStart: [
130363
131302
  "<\\?doc-detective\\s+test\\s+ignore\\s+start\\s*\\?>",
@@ -130370,7 +131309,11 @@ var defaultFileTypesBase = {
130370
131309
  step: [
130371
131310
  "<\\?doc-detective\\s+step\\s+([\\s\\S]*?)\\s*\\?>",
130372
131311
  "<!--\\s*step([\\s\\S]+?)-->",
130373
- '<data\\s+name="step"\\s*>([\\s\\S]*?)<\\/data>'
131312
+ '<data\\s+name="step"\\s*>([\\s\\S]*?)<\\/data>',
131313
+ `<data\\s+[^>]*?name=["']doc-detective["'][^>]*?value='step\\s+([^']+?)'[^>]*?(?:\\/\\s*>|>\\s*<\\/data>)`,
131314
+ `<data\\s+[^>]*?name=["']doc-detective["'][^>]*?value="step\\s+([^"]+?)"[^>]*?(?:\\/\\s*>|>\\s*<\\/data>)`,
131315
+ `<data\\s+[^>]*?value='step\\s+([^']+?)'[^>]*?name=["']doc-detective["'][^>]*?(?:\\/\\s*>|>\\s*<\\/data>)`,
131316
+ `<data\\s+[^>]*?value="step\\s+([^"]+?)"[^>]*?name=["']doc-detective["'][^>]*?(?:\\/\\s*>|>\\s*<\\/data>)`
130374
131317
  ]
130375
131318
  },
130376
131319
  markup: [
@@ -130723,6 +131666,9 @@ function parseXmlAttributes({ stringifiedObject }) {
130723
131666
  }
130724
131667
  function parseObject({ stringifiedObject }) {
130725
131668
  if (typeof stringifiedObject === "string") {
131669
+ if (/&(?:#\d+|#x[0-9a-fA-F]+|amp|lt|gt|quot|apos);/.test(stringifiedObject)) {
131670
+ stringifiedObject = stringifiedObject.replace(/&#39;|&apos;/g, "'").replace(/&#34;|&quot;/g, '"').replace(/&lt;/g, "<").replace(/&gt;/g, ">").replace(/&amp;/g, "&");
131671
+ }
130726
131672
  const xmlAttrs = parseXmlAttributes({ stringifiedObject });
130727
131673
  if (xmlAttrs !== null) {
130728
131674
  return xmlAttrs;
@@ -130982,17 +131928,7 @@ async function parseContent({ config = {}, content, filePath = "", fileType }) {
130982
131928
  if (step.screenshot && config._herettoPathMapping) {
130983
131929
  const herettoIntegration = findHerettoIntegration(config, filePath);
130984
131930
  if (herettoIntegration) {
130985
- if (typeof step.screenshot === "string") {
130986
- step.screenshot = { path: step.screenshot };
130987
- } else if (typeof step.screenshot === "boolean") {
130988
- step.screenshot = {};
130989
- }
130990
- step.screenshot.sourceIntegration = {
130991
- type: "heretto",
130992
- integrationName: herettoIntegration,
130993
- filePath: step.screenshot.path || "",
130994
- contentPath: filePath
130995
- };
131931
+ attachHerettoScreenshotSourceIntegration(step, herettoIntegration, filePath);
130996
131932
  }
130997
131933
  }
130998
131934
  }
@@ -131058,6 +131994,12 @@ async function parseContent({ config = {}, content, filePath = "", fileType }) {
131058
131994
  endIndex: statement._endIndex
131059
131995
  };
131060
131996
  }
131997
+ if (step.screenshot && config._herettoPathMapping) {
131998
+ const herettoIntegration = findHerettoIntegration(config, filePath);
131999
+ if (herettoIntegration) {
132000
+ attachHerettoScreenshotSourceIntegration(step, herettoIntegration, filePath);
132001
+ }
132002
+ }
131061
132003
  const validation = validate({
131062
132004
  schemaKey: "step_v3",
131063
132005
  object: step,
@@ -131096,6 +132038,19 @@ async function parseContent({ config = {}, content, filePath = "", fileType }) {
131096
132038
  });
131097
132039
  return validatedTests;
131098
132040
  }
132041
+ function attachHerettoScreenshotSourceIntegration(step, integrationName, contentPath) {
132042
+ if (typeof step.screenshot === "string") {
132043
+ step.screenshot = { path: step.screenshot };
132044
+ } else if (step.screenshot === null || typeof step.screenshot !== "object" || Array.isArray(step.screenshot)) {
132045
+ step.screenshot = {};
132046
+ }
132047
+ step.screenshot.sourceIntegration = {
132048
+ type: "heretto",
132049
+ integrationName,
132050
+ filePath: step.screenshot.path || "",
132051
+ contentPath
132052
+ };
132053
+ }
131099
132054
  function findHerettoIntegration(config, filePath) {
131100
132055
  if (!config._herettoPathMapping)
131101
132056
  return null;
@@ -132229,7 +133184,10 @@ async function loadHerettoContent(herettoConfig, log3, config, deps) {
132229
133184
  if (herettoConfig.uploadOnChange) {
132230
133185
  log3(config, "debug", `Fetching resource dependencies for ditamap ${scenario.fileId}...`);
132231
133186
  const resourceDependencies = await getResourceDependenciesFn(restClient, scenario.fileId, log3, config);
132232
- herettoConfig.resourceDependencies = resourceDependencies;
133187
+ herettoConfig.resourceDependencies = {
133188
+ ...resourceDependencies,
133189
+ ...herettoConfig.resourceDependencies || {}
133190
+ };
132233
133191
  }
132234
133192
  log3(config, "debug", `Triggering publishing job for file ${scenario.fileId}...`);
132235
133193
  const job = await triggerPublishingJob(client, scenario.fileId, scenario.scenarioId);
@@ -133716,7 +134674,8 @@ async function goTo({ config, step, driver }) {
133716
134674
  if (typeof step.goTo === "string") {
133717
134675
  step.goTo = { url: step.goTo };
133718
134676
  }
133719
- if (isRelativeUrl(step.goTo.url)) {
134677
+ const relative = isRelativeUrl(step.goTo.url);
134678
+ if (relative) {
133720
134679
  if (!step.goTo.origin && !config.origin) {
133721
134680
  result.status = "FAIL";
133722
134681
  result.description = "Relative URL provided without origin. Specify an origin in either the step or the config.";
@@ -133728,6 +134687,10 @@ async function goTo({ config, step, driver }) {
133728
134687
  }
133729
134688
  step.goTo.url = step.goTo.origin + step.goTo.url;
133730
134689
  }
134690
+ if (relative) {
134691
+ step.goTo.url = appendQueryParams(step.goTo.url, config.originParams);
134692
+ }
134693
+ step.goTo.url = appendQueryParams(step.goTo.url, step.goTo.params);
133731
134694
  if (step.goTo.url && !step.goTo.url.includes("://"))
133732
134695
  step.goTo.url = "https://" + step.goTo.url;
133733
134696
  const isValidStep = validate({ schemaKey: "step_v3", object: step });
@@ -134296,7 +135259,8 @@ async function checkLink({ config, step }) {
134296
135259
  if (typeof step.checkLink === "string") {
134297
135260
  step.checkLink = { url: step.checkLink };
134298
135261
  }
134299
- if (isRelativeUrl(step.checkLink.url)) {
135262
+ const relative = isRelativeUrl(step.checkLink.url);
135263
+ if (relative) {
134300
135264
  if (!step.checkLink.origin && !config.origin) {
134301
135265
  result.status = "FAIL";
134302
135266
  result.description = "Relative URL provided without origin. Specify an origin in either the step or the config.";
@@ -134308,6 +135272,10 @@ async function checkLink({ config, step }) {
134308
135272
  }
134309
135273
  step.checkLink.url = step.checkLink.origin + step.checkLink.url;
134310
135274
  }
135275
+ if (relative) {
135276
+ step.checkLink.url = appendQueryParams(step.checkLink.url, config.originParams);
135277
+ }
135278
+ step.checkLink.url = appendQueryParams(step.checkLink.url, step.checkLink.params);
134311
135279
  if (step.checkLink.url && !step.checkLink.url.includes("://"))
134312
135280
  step.checkLink.url = "https://" + step.checkLink.url;
134313
135281
  const isValidStep = validate({ schemaKey: "step_v3", object: step });
@@ -134371,6 +135339,33 @@ async function getPixelmatch() {
134371
135339
  }
134372
135340
  return pixelmatch;
134373
135341
  }
135342
+ function clampCropRect(rect, imgW, imgH) {
135343
+ let { x, y, width, height } = rect;
135344
+ if (width > imgW) {
135345
+ x = 0;
135346
+ width = imgW;
135347
+ } else {
135348
+ if (x < 0)
135349
+ x = 0;
135350
+ if (x + width > imgW)
135351
+ x = imgW - width;
135352
+ }
135353
+ if (height > imgH) {
135354
+ y = 0;
135355
+ height = imgH;
135356
+ } else {
135357
+ if (y < 0)
135358
+ y = 0;
135359
+ if (y + height > imgH)
135360
+ y = imgH - height;
135361
+ }
135362
+ return { x, y, width, height };
135363
+ }
135364
+ function aspectRatiosMatch(a, b) {
135365
+ const ra = a.width / a.height;
135366
+ const rb = b.width / b.height;
135367
+ return Math.abs(ra - rb) / Math.max(ra, rb) <= 0.05;
135368
+ }
134374
135369
  async function saveScreenshot({ config, step, driver }) {
134375
135370
  let result = {
134376
135371
  status: "PASS",
@@ -134414,19 +135409,57 @@ async function saveScreenshot({ config, step, driver }) {
134414
135409
  };
134415
135410
  }
134416
135411
  let filePath = step.screenshot.path;
134417
- const dir = import_node_path8.default.dirname(step.screenshot.path);
134418
- if (!import_node_fs7.default.existsSync(dir)) {
134419
- import_node_fs7.default.mkdirSync(dir, { recursive: true });
134420
- }
134421
135412
  let existFilePath;
134422
- if (import_node_fs7.default.existsSync(filePath)) {
134423
- if (step.screenshot.overwrite == "false") {
134424
- result.status = "SKIPPED";
134425
- result.description = `File already exists: ${filePath}`;
135413
+ let dir;
135414
+ const isUrlPath = /^https?:\/\//i.test(filePath);
135415
+ const originalUrlPath = isUrlPath ? filePath : void 0;
135416
+ const redactedUrl = isUrlPath ? redactUrlForOutput(filePath) : void 0;
135417
+ if (isUrlPath) {
135418
+ const fetched = await fetchFile(originalUrlPath, { binary: true });
135419
+ if (fetched.result !== "success") {
135420
+ result.status = "FAIL";
135421
+ result.description = `Couldn't fetch remote reference image (${redactedUrl}): ${fetched.message}`;
134426
135422
  return result;
134427
- } else {
134428
- existFilePath = filePath;
134429
- filePath = import_node_path8.default.join(dir, `${step.stepId}_${Date.now()}.png`);
135423
+ }
135424
+ existFilePath = fetched.path;
135425
+ let urlPathname;
135426
+ try {
135427
+ urlPathname = new URL(originalUrlPath).pathname;
135428
+ } catch {
135429
+ urlPathname = originalUrlPath;
135430
+ }
135431
+ const rawBase = import_node_path8.default.basename(urlPathname.split("?")[0].split("#")[0].replace(/\\/g, "/"));
135432
+ const safeBase = sanitizeFilesystemName(rawBase, `${step.stepId}.png`);
135433
+ dir = import_node_path8.default.join(process.cwd(), "doc-detective-runs", getOrInitRunTimestamp(config));
135434
+ if (!import_node_fs7.default.existsSync(dir)) {
135435
+ import_node_fs7.default.mkdirSync(dir, { recursive: true });
135436
+ }
135437
+ const captureId = `${step.stepId || "screenshot"}_${Date.now()}`;
135438
+ filePath = import_node_path8.default.join(dir, `${captureId}_${safeBase}`);
135439
+ const resolvedDir = import_node_path8.default.resolve(dir);
135440
+ const resolvedFile = import_node_path8.default.resolve(filePath);
135441
+ if (!resolvedFile.startsWith(resolvedDir + import_node_path8.default.sep)) {
135442
+ result.status = "FAIL";
135443
+ result.description = `Refusing to write screenshot outside run folder: ${resolvedFile}`;
135444
+ return result;
135445
+ }
135446
+ if (step.screenshot.overwrite !== "false") {
135447
+ log(config, "debug", `Screenshot path is a URL (${redactedUrl}); overwrite is ignored, running comparison only.`);
135448
+ }
135449
+ } else {
135450
+ dir = import_node_path8.default.dirname(step.screenshot.path);
135451
+ if (!import_node_fs7.default.existsSync(dir)) {
135452
+ import_node_fs7.default.mkdirSync(dir, { recursive: true });
135453
+ }
135454
+ if (import_node_fs7.default.existsSync(filePath)) {
135455
+ if (step.screenshot.overwrite == "false") {
135456
+ result.status = "SKIPPED";
135457
+ result.description = `File already exists: ${filePath}`;
135458
+ return result;
135459
+ } else {
135460
+ existFilePath = filePath;
135461
+ filePath = import_node_path8.default.join(dir, `${step.stepId}_${Date.now()}.png`);
135462
+ }
134430
135463
  }
134431
135464
  }
134432
135465
  if (step.screenshot.crop) {
@@ -134553,20 +135586,11 @@ async function saveScreenshot({ config, step, driver }) {
134553
135586
  rect.width = Math.round(rect.width);
134554
135587
  rect.height = Math.round(rect.height);
134555
135588
  const imgMeta = await (0, import_sharp.default)(filePath).metadata();
134556
- if (rect.x < 0) {
134557
- rect.width += rect.x;
134558
- rect.x = 0;
134559
- }
134560
- if (rect.y < 0) {
134561
- rect.height += rect.y;
134562
- rect.y = 0;
134563
- }
134564
- if (rect.x + rect.width > imgMeta.width) {
134565
- rect.width = imgMeta.width - rect.x;
134566
- }
134567
- if (rect.y + rect.height > imgMeta.height) {
134568
- rect.height = imgMeta.height - rect.y;
134569
- }
135589
+ const clamped = clampCropRect(rect, imgMeta.width, imgMeta.height);
135590
+ rect.x = clamped.x;
135591
+ rect.y = clamped.y;
135592
+ rect.width = clamped.width;
135593
+ rect.height = clamped.height;
134570
135594
  log(config, "debug", { padded_rect: rect });
134571
135595
  const croppedPath = import_node_path8.default.join(dir, `cropped_${step.stepId || Date.now()}.png`);
134572
135596
  try {
@@ -134587,7 +135611,7 @@ async function saveScreenshot({ config, step, driver }) {
134587
135611
  }
134588
135612
  }
134589
135613
  if (existFilePath) {
134590
- if (step.screenshot.overwrite == "true") {
135614
+ if (step.screenshot.overwrite == "true" && !isUrlPath) {
134591
135615
  result.description += ` Overwrote existing file.`;
134592
135616
  import_node_fs7.default.renameSync(filePath, existFilePath);
134593
135617
  result.outputs.screenshotPath = existFilePath;
@@ -134599,12 +135623,23 @@ async function saveScreenshot({ config, step, driver }) {
134599
135623
  }
134600
135624
  let fractionalDiff;
134601
135625
  if (step.screenshot.maxVariation != null) {
134602
- const img1 = import_pngjs.PNG.sync.read(import_node_fs7.default.readFileSync(existFilePath));
134603
- const img2 = import_pngjs.PNG.sync.read(import_node_fs7.default.readFileSync(filePath));
134604
- if (Math.round(img1.width / img1.height * 100) / 100 !== Math.round(img2.width / img2.height * 100) / 100) {
135626
+ let img1;
135627
+ let img2;
135628
+ try {
135629
+ img1 = import_pngjs.PNG.sync.read(import_node_fs7.default.readFileSync(existFilePath));
135630
+ img2 = import_pngjs.PNG.sync.read(import_node_fs7.default.readFileSync(filePath));
135631
+ } catch (error) {
135632
+ result.status = "FAIL";
135633
+ result.description = isUrlPath ? `Couldn't decode PNG for comparison. The URL reference (${redactedUrl}) may not be a valid PNG. ${error}` : `Couldn't decode PNG for comparison. ${error}`;
135634
+ if (!isUrlPath && filePath !== existFilePath && import_node_fs7.default.existsSync(filePath)) {
135635
+ import_node_fs7.default.unlinkSync(filePath);
135636
+ }
135637
+ return result;
135638
+ }
135639
+ if (!aspectRatiosMatch(img1, img2)) {
134605
135640
  result.status = "FAIL";
134606
135641
  result.description = `Couldn't compare images. Images have different aspect ratios.`;
134607
- if (existFilePath && filePath !== existFilePath && import_node_fs7.default.existsSync(filePath)) {
135642
+ if (!isUrlPath && filePath !== existFilePath && import_node_fs7.default.existsSync(filePath)) {
134608
135643
  import_node_fs7.default.unlinkSync(filePath);
134609
135644
  }
134610
135645
  return result;
@@ -134635,25 +135670,35 @@ async function saveScreenshot({ config, step, driver }) {
134635
135670
  fractionalDiff
134636
135671
  });
134637
135672
  if (fractionalDiff > step.screenshot.maxVariation) {
134638
- if (step.screenshot.overwrite == "aboveVariation") {
135673
+ if (step.screenshot.overwrite == "aboveVariation" && !isUrlPath) {
134639
135674
  import_node_fs7.default.renameSync(filePath, existFilePath);
134640
135675
  }
134641
135676
  result.status = "WARNING";
134642
135677
  result.description += ` The difference between the existing screenshot and new screenshot (${fractionalDiff.toFixed(2)}) is greater than the max accepted variation (${step.screenshot.maxVariation}).`;
134643
- result.outputs.changed = true;
134644
- result.outputs.screenshotPath = existFilePath;
134645
- if (step.screenshot.sourceIntegration) {
134646
- result.outputs.sourceIntegration = step.screenshot.sourceIntegration;
135678
+ if (isUrlPath) {
135679
+ result.outputs.screenshotPath = filePath;
135680
+ result.outputs.referenceUrl = redactedUrl;
135681
+ } else {
135682
+ result.outputs.changed = true;
135683
+ result.outputs.screenshotPath = existFilePath;
135684
+ if (step.screenshot.sourceIntegration) {
135685
+ result.outputs.sourceIntegration = step.screenshot.sourceIntegration;
135686
+ }
134647
135687
  }
134648
135688
  return result;
134649
135689
  } else {
134650
135690
  result.description += ` Screenshots are within maximum accepted variation: ${fractionalDiff.toFixed(2)}.`;
134651
- result.outputs.screenshotPath = existFilePath;
134652
- if (step.screenshot.sourceIntegration) {
134653
- result.outputs.sourceIntegration = step.screenshot.sourceIntegration;
134654
- }
134655
- if (step.screenshot.overwrite != "true") {
134656
- import_node_fs7.default.unlinkSync(filePath);
135691
+ if (isUrlPath) {
135692
+ result.outputs.screenshotPath = filePath;
135693
+ result.outputs.referenceUrl = redactedUrl;
135694
+ } else {
135695
+ result.outputs.screenshotPath = existFilePath;
135696
+ if (step.screenshot.sourceIntegration) {
135697
+ result.outputs.sourceIntegration = step.screenshot.sourceIntegration;
135698
+ }
135699
+ if (step.screenshot.overwrite != "true") {
135700
+ import_node_fs7.default.unlinkSync(filePath);
135701
+ }
134657
135702
  }
134658
135703
  }
134659
135704
  }
@@ -135162,6 +136207,15 @@ async function loadCookie({ config, step, driver }) {
135162
136207
  const isHttps = currentUrl.startsWith("https://");
135163
136208
  let sameSite = targetCookie.sameSite || "Lax";
135164
136209
  let secure = targetCookie.secure || false;
136210
+ if (typeof sameSite === "string") {
136211
+ const lower = sameSite.toLowerCase();
136212
+ if (lower === "none")
136213
+ sameSite = "None";
136214
+ else if (lower === "strict")
136215
+ sameSite = "Strict";
136216
+ else
136217
+ sameSite = "Lax";
136218
+ }
135165
136219
  if (sameSite === "None") {
135166
136220
  if (isHttps) {
135167
136221
  secure = true;