@azure/microsoft-playwright-testing 1.0.0-alpha.20250716.1 → 1.0.0-alpha.20250721.1

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 (170) hide show
  1. package/dist/browser/common/constants.js +100 -100
  2. package/dist/browser/common/constants.js.map +1 -1
  3. package/dist/browser/common/customerConfig.js +3 -0
  4. package/dist/browser/common/customerConfig.js.map +1 -1
  5. package/dist/browser/common/entraIdAccessToken.js +46 -43
  6. package/dist/browser/common/entraIdAccessToken.js.map +1 -1
  7. package/dist/browser/common/environmentVariables.js +8 -0
  8. package/dist/browser/common/environmentVariables.js.map +1 -1
  9. package/dist/browser/common/executor.js +1 -2
  10. package/dist/browser/common/executor.js.map +1 -1
  11. package/dist/browser/common/multimap.js +1 -0
  12. package/dist/browser/common/multimap.js.map +1 -1
  13. package/dist/browser/common/playwrightServiceConfig.js +34 -28
  14. package/dist/browser/common/playwrightServiceConfig.js.map +1 -1
  15. package/dist/browser/core/playwrightService.js +13 -8
  16. package/dist/browser/core/playwrightService.js.map +1 -1
  17. package/dist/browser/core/playwrightServiceEntra.js +36 -33
  18. package/dist/browser/core/playwrightServiceEntra.js.map +1 -1
  19. package/dist/browser/model/entraTokenDetails.js +4 -0
  20. package/dist/browser/model/entraTokenDetails.js.map +1 -1
  21. package/dist/browser/model/mptTokenDetails.js +8 -0
  22. package/dist/browser/model/mptTokenDetails.js.map +1 -1
  23. package/dist/browser/model/shard.js +10 -0
  24. package/dist/browser/model/shard.js.map +1 -1
  25. package/dist/browser/model/storageUri.js +4 -0
  26. package/dist/browser/model/storageUri.js.map +1 -1
  27. package/dist/browser/model/testResult.js +18 -0
  28. package/dist/browser/model/testResult.js.map +1 -1
  29. package/dist/browser/model/testRun.js +8 -3
  30. package/dist/browser/model/testRun.js.map +1 -1
  31. package/dist/browser/reporter/mptReporter.js +53 -47
  32. package/dist/browser/reporter/mptReporter.js.map +1 -1
  33. package/dist/browser/utils/cIInfoProvider.js +8 -9
  34. package/dist/browser/utils/cIInfoProvider.js.map +1 -1
  35. package/dist/browser/utils/packageManager.js +21 -27
  36. package/dist/browser/utils/packageManager.js.map +1 -1
  37. package/dist/browser/utils/reporterUtils.js +34 -31
  38. package/dist/browser/utils/reporterUtils.js.map +1 -1
  39. package/dist/browser/utils/serviceClient.js +7 -2
  40. package/dist/browser/utils/serviceClient.js.map +1 -1
  41. package/dist/browser/utils/utils.js +1 -1
  42. package/dist/browser/utils/utils.js.map +1 -1
  43. package/dist/commonjs/common/constants.js +101 -101
  44. package/dist/commonjs/common/constants.js.map +1 -1
  45. package/dist/commonjs/common/customerConfig.js +3 -0
  46. package/dist/commonjs/common/customerConfig.js.map +1 -1
  47. package/dist/commonjs/common/entraIdAccessToken.js +46 -43
  48. package/dist/commonjs/common/entraIdAccessToken.js.map +1 -1
  49. package/dist/commonjs/common/environmentVariables.js +8 -0
  50. package/dist/commonjs/common/environmentVariables.js.map +1 -1
  51. package/dist/commonjs/common/executor.js +1 -2
  52. package/dist/commonjs/common/executor.js.map +1 -1
  53. package/dist/commonjs/common/multimap.js +1 -0
  54. package/dist/commonjs/common/multimap.js.map +1 -1
  55. package/dist/commonjs/common/playwrightServiceConfig.js +34 -28
  56. package/dist/commonjs/common/playwrightServiceConfig.js.map +1 -1
  57. package/dist/commonjs/core/playwrightService.js +13 -8
  58. package/dist/commonjs/core/playwrightService.js.map +1 -1
  59. package/dist/commonjs/core/playwrightServiceEntra.js +36 -33
  60. package/dist/commonjs/core/playwrightServiceEntra.js.map +1 -1
  61. package/dist/commonjs/model/entraTokenDetails.js +4 -0
  62. package/dist/commonjs/model/entraTokenDetails.js.map +1 -1
  63. package/dist/commonjs/model/mptTokenDetails.js +8 -0
  64. package/dist/commonjs/model/mptTokenDetails.js.map +1 -1
  65. package/dist/commonjs/model/shard.js +10 -0
  66. package/dist/commonjs/model/shard.js.map +1 -1
  67. package/dist/commonjs/model/storageUri.js +4 -0
  68. package/dist/commonjs/model/storageUri.js.map +1 -1
  69. package/dist/commonjs/model/testResult.js +18 -0
  70. package/dist/commonjs/model/testResult.js.map +1 -1
  71. package/dist/commonjs/model/testRun.js +8 -3
  72. package/dist/commonjs/model/testRun.js.map +1 -1
  73. package/dist/commonjs/reporter/mptReporter.js +53 -47
  74. package/dist/commonjs/reporter/mptReporter.js.map +1 -1
  75. package/dist/commonjs/tsdoc-metadata.json +11 -11
  76. package/dist/commonjs/utils/cIInfoProvider.js +8 -9
  77. package/dist/commonjs/utils/cIInfoProvider.js.map +1 -1
  78. package/dist/commonjs/utils/packageManager.js +21 -27
  79. package/dist/commonjs/utils/packageManager.js.map +1 -1
  80. package/dist/commonjs/utils/reporterUtils.js +34 -31
  81. package/dist/commonjs/utils/reporterUtils.js.map +1 -1
  82. package/dist/commonjs/utils/serviceClient.js +7 -2
  83. package/dist/commonjs/utils/serviceClient.js.map +1 -1
  84. package/dist/commonjs/utils/utils.js +1 -1
  85. package/dist/commonjs/utils/utils.js.map +1 -1
  86. package/dist/esm/common/constants.js +100 -100
  87. package/dist/esm/common/constants.js.map +1 -1
  88. package/dist/esm/common/customerConfig.js +3 -0
  89. package/dist/esm/common/customerConfig.js.map +1 -1
  90. package/dist/esm/common/entraIdAccessToken.js +46 -43
  91. package/dist/esm/common/entraIdAccessToken.js.map +1 -1
  92. package/dist/esm/common/environmentVariables.js +8 -0
  93. package/dist/esm/common/environmentVariables.js.map +1 -1
  94. package/dist/esm/common/executor.js +1 -2
  95. package/dist/esm/common/executor.js.map +1 -1
  96. package/dist/esm/common/multimap.js +1 -0
  97. package/dist/esm/common/multimap.js.map +1 -1
  98. package/dist/esm/common/playwrightServiceConfig.js +34 -28
  99. package/dist/esm/common/playwrightServiceConfig.js.map +1 -1
  100. package/dist/esm/core/playwrightService.js +13 -8
  101. package/dist/esm/core/playwrightService.js.map +1 -1
  102. package/dist/esm/core/playwrightServiceEntra.js +36 -33
  103. package/dist/esm/core/playwrightServiceEntra.js.map +1 -1
  104. package/dist/esm/model/entraTokenDetails.js +4 -0
  105. package/dist/esm/model/entraTokenDetails.js.map +1 -1
  106. package/dist/esm/model/mptTokenDetails.js +8 -0
  107. package/dist/esm/model/mptTokenDetails.js.map +1 -1
  108. package/dist/esm/model/shard.js +10 -0
  109. package/dist/esm/model/shard.js.map +1 -1
  110. package/dist/esm/model/storageUri.js +4 -0
  111. package/dist/esm/model/storageUri.js.map +1 -1
  112. package/dist/esm/model/testResult.js +18 -0
  113. package/dist/esm/model/testResult.js.map +1 -1
  114. package/dist/esm/model/testRun.js +8 -3
  115. package/dist/esm/model/testRun.js.map +1 -1
  116. package/dist/esm/reporter/mptReporter.js +53 -47
  117. package/dist/esm/reporter/mptReporter.js.map +1 -1
  118. package/dist/esm/utils/cIInfoProvider.js +8 -9
  119. package/dist/esm/utils/cIInfoProvider.js.map +1 -1
  120. package/dist/esm/utils/packageManager.js +21 -27
  121. package/dist/esm/utils/packageManager.js.map +1 -1
  122. package/dist/esm/utils/reporterUtils.js +34 -31
  123. package/dist/esm/utils/reporterUtils.js.map +1 -1
  124. package/dist/esm/utils/serviceClient.js +7 -2
  125. package/dist/esm/utils/serviceClient.js.map +1 -1
  126. package/dist/esm/utils/utils.js +1 -1
  127. package/dist/esm/utils/utils.js.map +1 -1
  128. package/dist/react-native/common/constants.js +100 -100
  129. package/dist/react-native/common/constants.js.map +1 -1
  130. package/dist/react-native/common/customerConfig.js +3 -0
  131. package/dist/react-native/common/customerConfig.js.map +1 -1
  132. package/dist/react-native/common/entraIdAccessToken.js +46 -43
  133. package/dist/react-native/common/entraIdAccessToken.js.map +1 -1
  134. package/dist/react-native/common/environmentVariables.js +8 -0
  135. package/dist/react-native/common/environmentVariables.js.map +1 -1
  136. package/dist/react-native/common/executor.js +1 -2
  137. package/dist/react-native/common/executor.js.map +1 -1
  138. package/dist/react-native/common/multimap.js +1 -0
  139. package/dist/react-native/common/multimap.js.map +1 -1
  140. package/dist/react-native/common/playwrightServiceConfig.js +34 -28
  141. package/dist/react-native/common/playwrightServiceConfig.js.map +1 -1
  142. package/dist/react-native/core/playwrightService.js +13 -8
  143. package/dist/react-native/core/playwrightService.js.map +1 -1
  144. package/dist/react-native/core/playwrightServiceEntra.js +36 -33
  145. package/dist/react-native/core/playwrightServiceEntra.js.map +1 -1
  146. package/dist/react-native/model/entraTokenDetails.js +4 -0
  147. package/dist/react-native/model/entraTokenDetails.js.map +1 -1
  148. package/dist/react-native/model/mptTokenDetails.js +8 -0
  149. package/dist/react-native/model/mptTokenDetails.js.map +1 -1
  150. package/dist/react-native/model/shard.js +10 -0
  151. package/dist/react-native/model/shard.js.map +1 -1
  152. package/dist/react-native/model/storageUri.js +4 -0
  153. package/dist/react-native/model/storageUri.js.map +1 -1
  154. package/dist/react-native/model/testResult.js +18 -0
  155. package/dist/react-native/model/testResult.js.map +1 -1
  156. package/dist/react-native/model/testRun.js +8 -3
  157. package/dist/react-native/model/testRun.js.map +1 -1
  158. package/dist/react-native/reporter/mptReporter.js +53 -47
  159. package/dist/react-native/reporter/mptReporter.js.map +1 -1
  160. package/dist/react-native/utils/cIInfoProvider.js +8 -9
  161. package/dist/react-native/utils/cIInfoProvider.js.map +1 -1
  162. package/dist/react-native/utils/packageManager.js +21 -27
  163. package/dist/react-native/utils/packageManager.js.map +1 -1
  164. package/dist/react-native/utils/reporterUtils.js +34 -31
  165. package/dist/react-native/utils/reporterUtils.js.map +1 -1
  166. package/dist/react-native/utils/serviceClient.js +7 -2
  167. package/dist/react-native/utils/serviceClient.js.map +1 -1
  168. package/dist/react-native/utils/utils.js +1 -1
  169. package/dist/react-native/utils/utils.js.map +1 -1
  170. package/package.json +2 -2
@@ -3,35 +3,13 @@
3
3
  import { DefaultConnectOptionsConstants, InternalEnvironmentVariables } from "./constants.js";
4
4
  import { getAndSetRunId } from "../utils/utils.js";
5
5
  class PlaywrightServiceConfig {
6
+ serviceOs;
7
+ runId;
8
+ timeout;
9
+ slowMo;
10
+ exposeNetwork;
11
+ runName;
6
12
  constructor() {
7
- this.setOptions = (options) => {
8
- if (options === null || options === void 0 ? void 0 : options.exposeNetwork) {
9
- this.exposeNetwork = options.exposeNetwork;
10
- }
11
- if (!process.env[InternalEnvironmentVariables.MPT_SERVICE_RUN_ID]) {
12
- if (options === null || options === void 0 ? void 0 : options.runId) {
13
- this.runId = options.runId;
14
- process.env[InternalEnvironmentVariables.MPT_SERVICE_RUN_ID] = this.runId;
15
- }
16
- else {
17
- this.runId = getAndSetRunId();
18
- }
19
- }
20
- if (!process.env[InternalEnvironmentVariables.MPT_SERVICE_RUN_NAME] && (options === null || options === void 0 ? void 0 : options.runName)) {
21
- this.runName = options.runName;
22
- process.env[InternalEnvironmentVariables.MPT_SERVICE_RUN_NAME] = this.runName;
23
- }
24
- if (options === null || options === void 0 ? void 0 : options.os) {
25
- this.serviceOs = options.os;
26
- process.env[InternalEnvironmentVariables.MPT_SERVICE_OS] = this.serviceOs;
27
- }
28
- if (options === null || options === void 0 ? void 0 : options.slowMo) {
29
- this.slowMo = options.slowMo;
30
- }
31
- if (options === null || options === void 0 ? void 0 : options.timeout) {
32
- this.timeout = options.timeout;
33
- }
34
- };
35
13
  this.serviceOs = (process.env[InternalEnvironmentVariables.MPT_SERVICE_OS] ||
36
14
  DefaultConnectOptionsConstants.DEFAULT_SERVICE_OS);
37
15
  this.runName = process.env[InternalEnvironmentVariables.MPT_SERVICE_RUN_NAME] || "";
@@ -40,6 +18,34 @@ class PlaywrightServiceConfig {
40
18
  this.slowMo = DefaultConnectOptionsConstants.DEFAULT_SLOW_MO;
41
19
  this.exposeNetwork = DefaultConnectOptionsConstants.DEFAULT_EXPOSE_NETWORK;
42
20
  }
21
+ setOptions = (options) => {
22
+ if (options?.exposeNetwork) {
23
+ this.exposeNetwork = options.exposeNetwork;
24
+ }
25
+ if (!process.env[InternalEnvironmentVariables.MPT_SERVICE_RUN_ID]) {
26
+ if (options?.runId) {
27
+ this.runId = options.runId;
28
+ process.env[InternalEnvironmentVariables.MPT_SERVICE_RUN_ID] = this.runId;
29
+ }
30
+ else {
31
+ this.runId = getAndSetRunId();
32
+ }
33
+ }
34
+ if (!process.env[InternalEnvironmentVariables.MPT_SERVICE_RUN_NAME] && options?.runName) {
35
+ this.runName = options.runName;
36
+ process.env[InternalEnvironmentVariables.MPT_SERVICE_RUN_NAME] = this.runName;
37
+ }
38
+ if (options?.os) {
39
+ this.serviceOs = options.os;
40
+ process.env[InternalEnvironmentVariables.MPT_SERVICE_OS] = this.serviceOs;
41
+ }
42
+ if (options?.slowMo) {
43
+ this.slowMo = options.slowMo;
44
+ }
45
+ if (options?.timeout) {
46
+ this.timeout = options.timeout;
47
+ }
48
+ };
43
49
  }
44
50
  export { PlaywrightServiceConfig };
45
51
  //# sourceMappingURL=playwrightServiceConfig.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"playwrightServiceConfig.js","sourceRoot":"","sources":["../../../src/common/playwrightServiceConfig.ts"],"names":[],"mappings":"AAAA,uCAAuC;AACvC,kCAAkC;AAElC,OAAO,EAAE,8BAA8B,EAAE,4BAA4B,EAAE,MAAM,gBAAgB,CAAC;AAE9F,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAEnD,MAAM,uBAAuB;IAO3B;QAUA,eAAU,GAAG,CAAC,OAA4C,EAAQ,EAAE;YAClE,IAAI,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,aAAa,EAAE,CAAC;gBAC3B,IAAI,CAAC,aAAa,GAAG,OAAO,CAAC,aAAa,CAAC;YAC7C,CAAC;YACD,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,4BAA4B,CAAC,kBAAkB,CAAC,EAAE,CAAC;gBAClE,IAAI,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,KAAK,EAAE,CAAC;oBACnB,IAAI,CAAC,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC;oBAC3B,OAAO,CAAC,GAAG,CAAC,4BAA4B,CAAC,kBAAkB,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC;gBAC5E,CAAC;qBAAM,CAAC;oBACN,IAAI,CAAC,KAAK,GAAG,cAAc,EAAE,CAAC;gBAChC,CAAC;YACH,CAAC;YACD,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,4BAA4B,CAAC,oBAAoB,CAAC,KAAI,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,OAAO,CAAA,EAAE,CAAC;gBACxF,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;gBAC/B,OAAO,CAAC,GAAG,CAAC,4BAA4B,CAAC,oBAAoB,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC;YAChF,CAAC;YACD,IAAI,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,EAAE,EAAE,CAAC;gBAChB,IAAI,CAAC,SAAS,GAAG,OAAO,CAAC,EAAE,CAAC;gBAC5B,OAAO,CAAC,GAAG,CAAC,4BAA4B,CAAC,cAAc,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC;YAC5E,CAAC;YACD,IAAI,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,MAAM,EAAE,CAAC;gBACpB,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;YAC/B,CAAC;YACD,IAAI,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,OAAO,EAAE,CAAC;gBACrB,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;YACjC,CAAC;QACH,CAAC,CAAC;QAnCA,IAAI,CAAC,SAAS,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,4BAA4B,CAAC,cAAc,CAAC;YACxE,8BAA8B,CAAC,kBAAkB,CAAW,CAAC;QAC/D,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,4BAA4B,CAAC,oBAAoB,CAAC,IAAI,EAAE,CAAC;QACpF,IAAI,CAAC,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,4BAA4B,CAAC,kBAAkB,CAAC,IAAI,EAAE,CAAC;QAChF,IAAI,CAAC,OAAO,GAAG,8BAA8B,CAAC,eAAe,CAAC;QAC9D,IAAI,CAAC,MAAM,GAAG,8BAA8B,CAAC,eAAe,CAAC;QAC7D,IAAI,CAAC,aAAa,GAAG,8BAA8B,CAAC,sBAAsB,CAAC;IAC7E,CAAC;CA6BF;AAED,OAAO,EAAE,uBAAuB,EAAE,CAAC","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport { DefaultConnectOptionsConstants, InternalEnvironmentVariables } from \"./constants.js\";\nimport type { PlaywrightServiceAdditionalOptions, OsType } from \"./types.js\";\nimport { getAndSetRunId } from \"../utils/utils.js\";\n\nclass PlaywrightServiceConfig {\n public serviceOs: OsType;\n public runId: string;\n public timeout: number;\n public slowMo: number;\n public exposeNetwork: string;\n public runName: string;\n constructor() {\n this.serviceOs = (process.env[InternalEnvironmentVariables.MPT_SERVICE_OS] ||\n DefaultConnectOptionsConstants.DEFAULT_SERVICE_OS) as OsType;\n this.runName = process.env[InternalEnvironmentVariables.MPT_SERVICE_RUN_NAME] || \"\";\n this.runId = process.env[InternalEnvironmentVariables.MPT_SERVICE_RUN_ID] || \"\";\n this.timeout = DefaultConnectOptionsConstants.DEFAULT_TIMEOUT;\n this.slowMo = DefaultConnectOptionsConstants.DEFAULT_SLOW_MO;\n this.exposeNetwork = DefaultConnectOptionsConstants.DEFAULT_EXPOSE_NETWORK;\n }\n\n setOptions = (options?: PlaywrightServiceAdditionalOptions): void => {\n if (options?.exposeNetwork) {\n this.exposeNetwork = options.exposeNetwork;\n }\n if (!process.env[InternalEnvironmentVariables.MPT_SERVICE_RUN_ID]) {\n if (options?.runId) {\n this.runId = options.runId;\n process.env[InternalEnvironmentVariables.MPT_SERVICE_RUN_ID] = this.runId;\n } else {\n this.runId = getAndSetRunId();\n }\n }\n if (!process.env[InternalEnvironmentVariables.MPT_SERVICE_RUN_NAME] && options?.runName) {\n this.runName = options.runName;\n process.env[InternalEnvironmentVariables.MPT_SERVICE_RUN_NAME] = this.runName;\n }\n if (options?.os) {\n this.serviceOs = options.os;\n process.env[InternalEnvironmentVariables.MPT_SERVICE_OS] = this.serviceOs;\n }\n if (options?.slowMo) {\n this.slowMo = options.slowMo;\n }\n if (options?.timeout) {\n this.timeout = options.timeout;\n }\n };\n}\n\nexport { PlaywrightServiceConfig };\n"]}
1
+ {"version":3,"file":"playwrightServiceConfig.js","sourceRoot":"","sources":["../../../src/common/playwrightServiceConfig.ts"],"names":[],"mappings":"AAAA,uCAAuC;AACvC,kCAAkC;AAElC,OAAO,EAAE,8BAA8B,EAAE,4BAA4B,EAAE,MAAM,gBAAgB,CAAC;AAE9F,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAEnD,MAAM,uBAAuB;IACpB,SAAS,CAAS;IAClB,KAAK,CAAS;IACd,OAAO,CAAS;IAChB,MAAM,CAAS;IACf,aAAa,CAAS;IACtB,OAAO,CAAS;IACvB;QACE,IAAI,CAAC,SAAS,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,4BAA4B,CAAC,cAAc,CAAC;YACxE,8BAA8B,CAAC,kBAAkB,CAAW,CAAC;QAC/D,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,4BAA4B,CAAC,oBAAoB,CAAC,IAAI,EAAE,CAAC;QACpF,IAAI,CAAC,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,4BAA4B,CAAC,kBAAkB,CAAC,IAAI,EAAE,CAAC;QAChF,IAAI,CAAC,OAAO,GAAG,8BAA8B,CAAC,eAAe,CAAC;QAC9D,IAAI,CAAC,MAAM,GAAG,8BAA8B,CAAC,eAAe,CAAC;QAC7D,IAAI,CAAC,aAAa,GAAG,8BAA8B,CAAC,sBAAsB,CAAC;IAC7E,CAAC;IAED,UAAU,GAAG,CAAC,OAA4C,EAAQ,EAAE;QAClE,IAAI,OAAO,EAAE,aAAa,EAAE,CAAC;YAC3B,IAAI,CAAC,aAAa,GAAG,OAAO,CAAC,aAAa,CAAC;QAC7C,CAAC;QACD,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,4BAA4B,CAAC,kBAAkB,CAAC,EAAE,CAAC;YAClE,IAAI,OAAO,EAAE,KAAK,EAAE,CAAC;gBACnB,IAAI,CAAC,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC;gBAC3B,OAAO,CAAC,GAAG,CAAC,4BAA4B,CAAC,kBAAkB,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC;YAC5E,CAAC;iBAAM,CAAC;gBACN,IAAI,CAAC,KAAK,GAAG,cAAc,EAAE,CAAC;YAChC,CAAC;QACH,CAAC;QACD,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,4BAA4B,CAAC,oBAAoB,CAAC,IAAI,OAAO,EAAE,OAAO,EAAE,CAAC;YACxF,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;YAC/B,OAAO,CAAC,GAAG,CAAC,4BAA4B,CAAC,oBAAoB,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC;QAChF,CAAC;QACD,IAAI,OAAO,EAAE,EAAE,EAAE,CAAC;YAChB,IAAI,CAAC,SAAS,GAAG,OAAO,CAAC,EAAE,CAAC;YAC5B,OAAO,CAAC,GAAG,CAAC,4BAA4B,CAAC,cAAc,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC;QAC5E,CAAC;QACD,IAAI,OAAO,EAAE,MAAM,EAAE,CAAC;YACpB,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;QAC/B,CAAC;QACD,IAAI,OAAO,EAAE,OAAO,EAAE,CAAC;YACrB,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;QACjC,CAAC;IACH,CAAC,CAAC;CACH;AAED,OAAO,EAAE,uBAAuB,EAAE,CAAC","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport { DefaultConnectOptionsConstants, InternalEnvironmentVariables } from \"./constants.js\";\nimport type { PlaywrightServiceAdditionalOptions, OsType } from \"./types.js\";\nimport { getAndSetRunId } from \"../utils/utils.js\";\n\nclass PlaywrightServiceConfig {\n public serviceOs: OsType;\n public runId: string;\n public timeout: number;\n public slowMo: number;\n public exposeNetwork: string;\n public runName: string;\n constructor() {\n this.serviceOs = (process.env[InternalEnvironmentVariables.MPT_SERVICE_OS] ||\n DefaultConnectOptionsConstants.DEFAULT_SERVICE_OS) as OsType;\n this.runName = process.env[InternalEnvironmentVariables.MPT_SERVICE_RUN_NAME] || \"\";\n this.runId = process.env[InternalEnvironmentVariables.MPT_SERVICE_RUN_ID] || \"\";\n this.timeout = DefaultConnectOptionsConstants.DEFAULT_TIMEOUT;\n this.slowMo = DefaultConnectOptionsConstants.DEFAULT_SLOW_MO;\n this.exposeNetwork = DefaultConnectOptionsConstants.DEFAULT_EXPOSE_NETWORK;\n }\n\n setOptions = (options?: PlaywrightServiceAdditionalOptions): void => {\n if (options?.exposeNetwork) {\n this.exposeNetwork = options.exposeNetwork;\n }\n if (!process.env[InternalEnvironmentVariables.MPT_SERVICE_RUN_ID]) {\n if (options?.runId) {\n this.runId = options.runId;\n process.env[InternalEnvironmentVariables.MPT_SERVICE_RUN_ID] = this.runId;\n } else {\n this.runId = getAndSetRunId();\n }\n }\n if (!process.env[InternalEnvironmentVariables.MPT_SERVICE_RUN_NAME] && options?.runName) {\n this.runName = options.runName;\n process.env[InternalEnvironmentVariables.MPT_SERVICE_RUN_NAME] = this.runName;\n }\n if (options?.os) {\n this.serviceOs = options.os;\n process.env[InternalEnvironmentVariables.MPT_SERVICE_OS] = this.serviceOs;\n }\n if (options?.slowMo) {\n this.slowMo = options.slowMo;\n }\n if (options?.timeout) {\n this.timeout = options.timeout;\n }\n };\n}\n\nexport { PlaywrightServiceConfig };\n"]}
@@ -12,7 +12,7 @@ const performOneTimeOperation = (options) => {
12
12
  if (oneTimeOperationFlag)
13
13
  return;
14
14
  process.env[InternalEnvironmentVariables.ONE_TIME_OPERATION_FLAG] = "true";
15
- if ((options === null || options === void 0 ? void 0 : options.serviceAuthType) === ServiceAuth.ACCESS_TOKEN) {
15
+ if (options?.serviceAuthType === ServiceAuth.ACCESS_TOKEN) {
16
16
  warnIfAccessTokenCloseToExpiry();
17
17
  }
18
18
  };
@@ -51,7 +51,7 @@ const getServiceConfig = (config, options) => {
51
51
  validateServiceUrl();
52
52
  const playwrightVersionInfo = getVersionInfo(getPlaywrightVersion());
53
53
  const isMultipleGlobalFileSupported = playwrightVersionInfo.major >= 1 && playwrightVersionInfo.minor >= 49;
54
- if (options === null || options === void 0 ? void 0 : options.credential) {
54
+ if (options?.credential) {
55
55
  playwrightServiceEntra.entraIdAccessToken = options.credential;
56
56
  }
57
57
  // if global setup/teardown is string -
@@ -96,7 +96,7 @@ const getServiceConfig = (config, options) => {
96
96
  playwrightServiceConfig.setOptions(options);
97
97
  emitReportingUrl();
98
98
  const globalFunctions = {};
99
- if ((options === null || options === void 0 ? void 0 : options.serviceAuthType) === ServiceAuth.ACCESS_TOKEN) {
99
+ if (options?.serviceAuthType === ServiceAuth.ACCESS_TOKEN) {
100
100
  // mpt PAT requested and set by the customer, no need to setup entra lifecycle handlers
101
101
  validateMptPAT(exitWithFailureMessage);
102
102
  }
@@ -121,14 +121,17 @@ const getServiceConfig = (config, options) => {
121
121
  }
122
122
  }
123
123
  performOneTimeOperation(options);
124
- if ((options === null || options === void 0 ? void 0 : options.useCloudHostedBrowsers) === false) {
125
- return Object.assign({}, globalFunctions);
124
+ if (options?.useCloudHostedBrowsers === false) {
125
+ return {
126
+ ...globalFunctions,
127
+ };
126
128
  }
127
129
  if (!process.env[InternalEnvironmentVariables.MPT_CLOUD_HOSTED_BROWSER_USED]) {
128
130
  process.env[InternalEnvironmentVariables.MPT_CLOUD_HOSTED_BROWSER_USED] = "true";
129
131
  console.log("\nRunning tests using Microsoft Playwright Testing service.");
130
132
  }
131
- return Object.assign({ use: {
133
+ return {
134
+ use: {
132
135
  connectOptions: {
133
136
  wsEndpoint: getServiceWSEndpoint(playwrightServiceConfig.runId, playwrightServiceConfig.serviceOs),
134
137
  headers: {
@@ -139,7 +142,9 @@ const getServiceConfig = (config, options) => {
139
142
  exposeNetwork: playwrightServiceConfig.exposeNetwork,
140
143
  slowMo: playwrightServiceConfig.slowMo,
141
144
  },
142
- } }, globalFunctions);
145
+ },
146
+ ...globalFunctions,
147
+ };
143
148
  };
144
149
  /**
145
150
  * @public
@@ -172,7 +177,7 @@ const getServiceConfig = (config, options) => {
172
177
  const getConnectOptions = async (options) => {
173
178
  const playwrightServiceConfig = new PlaywrightServiceConfig();
174
179
  playwrightServiceConfig.setOptions(options);
175
- const token = await fetchOrValidateAccessToken(options === null || options === void 0 ? void 0 : options.credential);
180
+ const token = await fetchOrValidateAccessToken(options?.credential);
176
181
  return {
177
182
  wsEndpoint: getServiceWSEndpoint(playwrightServiceConfig.runId, playwrightServiceConfig.serviceOs),
178
183
  options: {
@@ -1 +1 @@
1
- {"version":3,"file":"playwrightService.js","sourceRoot":"","sources":["../../../src/core/playwrightService.ts"],"names":[],"mappings":"AAAA,uCAAuC;AACvC,kCAAkC;AAElC,OAAO,EAAE,4BAA4B,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AACnF,OAAO,cAAc,MAAM,6BAA6B,CAAC;AACzD,OAAO,EAAE,uBAAuB,EAAE,MAAM,sCAAsC,CAAC;AAC/E,OAAO,sBAAsB,MAAM,6BAA6B,CAAC;AAEjE,OAAO,EACL,gBAAgB,EAChB,0BAA0B,EAC1B,cAAc,EACd,oBAAoB,EACpB,cAAc,EACd,8BAA8B,EAC9B,yBAAyB,EACzB,kBAAkB,EAClB,sBAAsB,EACtB,iBAAiB,EACjB,oBAAoB,EACpB,cAAc,GACf,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,4BAA4B,EAAE,MAAM,uBAAuB,CAAC;AAErE,OAAO,EAAE,eAAe,EAAE,kBAAkB,EAAE,MAAM,6BAA6B,CAAC;AAElF,MAAM,uBAAuB,GAAG,CAAC,OAA4C,EAAQ,EAAE;IACrF,MAAM,oBAAoB,GACxB,OAAO,CAAC,GAAG,CAAC,4BAA4B,CAAC,uBAAuB,CAAC,KAAK,MAAM,CAAC;IAC/E,IAAI,oBAAoB;QAAE,OAAO;IACjC,OAAO,CAAC,GAAG,CAAC,4BAA4B,CAAC,uBAAuB,CAAC,GAAG,MAAM,CAAC;IAC3E,IAAI,CAAA,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,eAAe,MAAK,WAAW,CAAC,YAAY,EAAE,CAAC;QAC1D,8BAA8B,EAAE,CAAC;IACnC,CAAC;AACH,CAAC,CAAC;AACF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AACH,MAAM,gBAAgB,GAAG,CACvB,MAA4B,EAC5B,OAA4C,EACtB,EAAE;IACxB,yBAAyB,EAAE,CAAC;IAC5B,kBAAkB,EAAE,CAAC;IACrB,MAAM,qBAAqB,GAAG,cAAc,CAAC,oBAAoB,EAAE,CAAC,CAAC;IACrE,MAAM,6BAA6B,GACjC,qBAAqB,CAAC,KAAK,IAAI,CAAC,IAAI,qBAAqB,CAAC,KAAK,IAAI,EAAE,CAAC;IACxE,IAAI,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,UAAU,EAAE,CAAC;QACxB,sBAAsB,CAAC,kBAAkB,GAAG,OAAO,CAAC,UAAU,CAAC;IACjE,CAAC;IAED,uCAAuC;IACvC,+DAA+D;IAC/D,gGAAgG;IAEhG,sCAAsC;IACtC,2DAA2D;IAC3D,kGAAkG;IAClG,IAAI,MAAM,IAAI,MAAM,CAAC,WAAW,EAAE,CAAC;QACjC,IAAI,OAAO,MAAM,CAAC,WAAW,KAAK,QAAQ,EAAE,CAAC;YAC3C,IAAI,6BAA6B,EAAE,CAAC;gBAClC,cAAc,CAAC,WAAW,GAAG,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;YACpD,CAAC;iBAAM,CAAC;gBACN,cAAc,CAAC,WAAW,GAAG,MAAM,CAAC,WAAW,CAAC;YAClD,CAAC;QACH,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,6BAA6B,EAAE,CAAC;gBACnC,MAAM,IAAI,KAAK,CACb,4BAA4B,CAAC,4CAA4C,CAAC,OAAO,CAClF,CAAC;YACJ,CAAC;YACD,cAAc,CAAC,WAAW,GAAG,MAAM,CAAC,WAAW,CAAC;QAClD,CAAC;IACH,CAAC;IAED,IAAI,MAAM,IAAI,MAAM,CAAC,cAAc,EAAE,CAAC;QACpC,IAAI,OAAO,MAAM,CAAC,cAAc,KAAK,QAAQ,EAAE,CAAC;YAC9C,IAAI,6BAA6B,EAAE,CAAC;gBAClC,cAAc,CAAC,cAAc,GAAG,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC;YAC1D,CAAC;iBAAM,CAAC;gBACN,cAAc,CAAC,cAAc,GAAG,MAAM,CAAC,cAAc,CAAC;YACxD,CAAC;QACH,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,6BAA6B,EAAE,CAAC;gBACnC,MAAM,IAAI,KAAK,CACb,4BAA4B,CAAC,4CAA4C,CAAC,OAAO,CAClF,CAAC;YACJ,CAAC;YACD,cAAc,CAAC,cAAc,GAAG,MAAM,CAAC,cAAc,CAAC;QACxD,CAAC;IACH,CAAC;IAED,MAAM,uBAAuB,GAAG,IAAI,uBAAuB,EAAE,CAAC;IAC9D,uBAAuB,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;IAC5C,gBAAgB,EAAE,CAAC;IAEnB,MAAM,eAAe,GAAQ,EAAE,CAAC;IAEhC,IAAI,CAAA,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,eAAe,MAAK,WAAW,CAAC,YAAY,EAAE,CAAC;QAC1D,uFAAuF;QACvF,cAAc,CAAC,sBAAsB,CAAC,CAAC;IACzC,CAAC;SAAM,CAAC;QACN,qIAAqI;QACrI,IAAI,6BAA6B,EAAE,CAAC;YAClC,eAAe,CAAC,WAAW,GAAG,EAAc,CAAC;YAC7C,eAAe,CAAC,cAAc,GAAG,EAAc,CAAC;YAChD,IAAI,cAAc,CAAC,WAAW,EAAE,CAAC;gBAC/B,eAAe,CAAC,WAAW,CAAC,IAAI,CAAC,GAAI,cAAc,CAAC,WAAwB,CAAC,CAAC;YAChF,CAAC;YACD,IAAI,cAAc,CAAC,cAAc,EAAE,CAAC;gBAClC,eAAe,CAAC,cAAc,CAAC,IAAI,CAAC,GAAI,cAAc,CAAC,cAA2B,CAAC,CAAC;YACtF,CAAC;YACD,eAAe,CAAC,WAAW,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;YAClD,eAAe,CAAC,cAAc,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;QAC1D,CAAC;aAAM,CAAC;YACN,uIAAuI;YACvI,eAAe,CAAC,WAAW,GAAG,eAAe,CAAC;YAC9C,eAAe,CAAC,cAAc,GAAG,kBAAkB,CAAC;QACtD,CAAC;IACH,CAAC;IACD,uBAAuB,CAAC,OAAO,CAAC,CAAC;IACjC,IAAI,CAAA,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,sBAAsB,MAAK,KAAK,EAAE,CAAC;QAC9C,yBACK,eAAe,EAClB;IACJ,CAAC;IACD,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,4BAA4B,CAAC,6BAA6B,CAAC,EAAE,CAAC;QAC7E,OAAO,CAAC,GAAG,CAAC,4BAA4B,CAAC,6BAA6B,CAAC,GAAG,MAAM,CAAC;QACjF,OAAO,CAAC,GAAG,CAAC,6DAA6D,CAAC,CAAC;IAC7E,CAAC;IAED,uBACE,GAAG,EAAE;YACH,cAAc,EAAE;gBACd,UAAU,EAAE,oBAAoB,CAC9B,uBAAuB,CAAC,KAAK,EAC7B,uBAAuB,CAAC,SAAS,CAClC;gBACD,OAAO,EAAE;oBACP,aAAa,EAAE,UAAU,cAAc,EAAE,EAAE;oBAC3C,sBAAsB,EAAE,uCAAuC,iBAAiB,EAAE,EAAE;iBACrF;gBACD,OAAO,EAAE,uBAAuB,CAAC,OAAO;gBACxC,aAAa,EAAE,uBAAuB,CAAC,aAAa;gBACpD,MAAM,EAAE,uBAAuB,CAAC,MAAM;aACvC;SACF,IACE,eAAe,EAClB;AACJ,CAAC,CAAC;AAEF;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,MAAM,iBAAiB,GAAG,KAAK,EAC7B,OAAqE,EACrC,EAAE;IAClC,MAAM,uBAAuB,GAAG,IAAI,uBAAuB,EAAE,CAAC;IAC9D,uBAAuB,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;IAE5C,MAAM,KAAK,GAAG,MAAM,0BAA0B,CAAC,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,UAAU,CAAC,CAAC;IACpE,OAAO;QACL,UAAU,EAAE,oBAAoB,CAC9B,uBAAuB,CAAC,KAAK,EAC7B,uBAAuB,CAAC,SAAS,CAClC;QACD,OAAO,EAAE;YACP,OAAO,EAAE;gBACP,aAAa,EAAE,UAAU,KAAK,EAAE;gBAChC,sBAAsB,EAAE,uCAAuC,iBAAiB,EAAE,EAAE;aACrF;YACD,OAAO,EAAE,uBAAuB,CAAC,OAAO;YACxC,aAAa,EAAE,uBAAuB,CAAC,aAAa;YACpD,MAAM,EAAE,uBAAuB,CAAC,MAAM;SACvC;KACF,CAAC;AACJ,CAAC,CAAC;AAEF,OAAO,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,CAAC","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport { InternalEnvironmentVariables, ServiceAuth } from \"../common/constants.js\";\nimport customerConfig from \"../common/customerConfig.js\";\nimport { PlaywrightServiceConfig } from \"../common/playwrightServiceConfig.js\";\nimport playwrightServiceEntra from \"./playwrightServiceEntra.js\";\nimport type { PlaywrightServiceAdditionalOptions, BrowserConnectOptions } from \"../common/types.js\";\nimport {\n emitReportingUrl,\n fetchOrValidateAccessToken,\n getAccessToken,\n getServiceWSEndpoint,\n validateMptPAT,\n warnIfAccessTokenCloseToExpiry,\n validatePlaywrightVersion,\n validateServiceUrl,\n exitWithFailureMessage,\n getPackageVersion,\n getPlaywrightVersion,\n getVersionInfo,\n} from \"../utils/utils.js\";\nimport { ServiceErrorMessageConstants } from \"../common/messages.js\";\nimport type { PlaywrightTestConfig } from \"@playwright/test\";\nimport { globalSetupPath, globalTeardownPath } from \"./playwrightServiceUtils.js\";\n\nconst performOneTimeOperation = (options?: PlaywrightServiceAdditionalOptions): void => {\n const oneTimeOperationFlag =\n process.env[InternalEnvironmentVariables.ONE_TIME_OPERATION_FLAG] === \"true\";\n if (oneTimeOperationFlag) return;\n process.env[InternalEnvironmentVariables.ONE_TIME_OPERATION_FLAG] = \"true\";\n if (options?.serviceAuthType === ServiceAuth.ACCESS_TOKEN) {\n warnIfAccessTokenCloseToExpiry();\n }\n};\n/**\n * @public\n *\n * Generate playwright configuration integrated with Microsoft Playwright Testing.\n *\n * @param config - base playwright configuration\n * @param options - additional options for the service\n * @returns PlaywrightConfig\n *\n * @example\n * ```\n * import { defineConfig } from \"playwright/test\";\n * import { getServiceConfig } from \"@azure/microsoft-playwright-testing\";\n * import playwrightConfig from \"./playwright.config\";\n *\n * export default defineConfig(playwrightConfig, getServiceConfig(playwrightConfig));\n * ```\n *\n * @example\n * ```\n * import { defineConfig } from \"playwright/test\";\n * import { getServiceConfig, ServiceOS } from \"@azure/microsoft-playwright-testing\";\n * import playwrightConfig from \"./playwright.config\";\n *\n * export default defineConfig(playwrightConfig, getServiceConfig(playwrightConfig, {\n * runId: \"custom run id\",\n * os: ServiceOS.WINDOWS\n * }));\n * ```\n */\nconst getServiceConfig = (\n config: PlaywrightTestConfig,\n options?: PlaywrightServiceAdditionalOptions,\n): PlaywrightTestConfig => {\n validatePlaywrightVersion();\n validateServiceUrl();\n const playwrightVersionInfo = getVersionInfo(getPlaywrightVersion());\n const isMultipleGlobalFileSupported =\n playwrightVersionInfo.major >= 1 && playwrightVersionInfo.minor >= 49;\n if (options?.credential) {\n playwrightServiceEntra.entraIdAccessToken = options.credential;\n }\n\n // if global setup/teardown is string -\n // 1. if multiple global file is supported, convert it to array\n // 2. wrap playwright-service global setup/teardown with customer provided global setup/teardown\n\n // if global setup/teardown is array -\n // 1. if multiple global file is not supported, throw error\n // 2. append playwright-service global setup/teardown with customer provided global setup/teardown\n if (config && config.globalSetup) {\n if (typeof config.globalSetup === \"string\") {\n if (isMultipleGlobalFileSupported) {\n customerConfig.globalSetup = [config.globalSetup];\n } else {\n customerConfig.globalSetup = config.globalSetup;\n }\n } else {\n if (!isMultipleGlobalFileSupported) {\n throw new Error(\n ServiceErrorMessageConstants.MULTIPLE_SETUP_FILE_PLAYWRIGHT_VERSION_ERROR.message,\n );\n }\n customerConfig.globalSetup = config.globalSetup;\n }\n }\n\n if (config && config.globalTeardown) {\n if (typeof config.globalTeardown === \"string\") {\n if (isMultipleGlobalFileSupported) {\n customerConfig.globalTeardown = [config.globalTeardown];\n } else {\n customerConfig.globalTeardown = config.globalTeardown;\n }\n } else {\n if (!isMultipleGlobalFileSupported) {\n throw new Error(\n ServiceErrorMessageConstants.MULTIPLE_SETUP_FILE_PLAYWRIGHT_VERSION_ERROR.message,\n );\n }\n customerConfig.globalTeardown = config.globalTeardown;\n }\n }\n\n const playwrightServiceConfig = new PlaywrightServiceConfig();\n playwrightServiceConfig.setOptions(options);\n emitReportingUrl();\n\n const globalFunctions: any = {};\n\n if (options?.serviceAuthType === ServiceAuth.ACCESS_TOKEN) {\n // mpt PAT requested and set by the customer, no need to setup entra lifecycle handlers\n validateMptPAT(exitWithFailureMessage);\n } else {\n // If multiple global file is supported, append playwright-service global setup/teardown with customer provided global setup/teardown\n if (isMultipleGlobalFileSupported) {\n globalFunctions.globalSetup = [] as string[];\n globalFunctions.globalTeardown = [] as string[];\n if (customerConfig.globalSetup) {\n globalFunctions.globalSetup.push(...(customerConfig.globalSetup as string[]));\n }\n if (customerConfig.globalTeardown) {\n globalFunctions.globalTeardown.push(...(customerConfig.globalTeardown as string[]));\n }\n globalFunctions.globalSetup.push(globalSetupPath);\n globalFunctions.globalTeardown.push(globalTeardownPath);\n } else {\n // If multiple global file is not supported, wrap playwright-service global setup/teardown with customer provided global setup/teardown\n globalFunctions.globalSetup = globalSetupPath;\n globalFunctions.globalTeardown = globalTeardownPath;\n }\n }\n performOneTimeOperation(options);\n if (options?.useCloudHostedBrowsers === false) {\n return {\n ...globalFunctions,\n };\n }\n if (!process.env[InternalEnvironmentVariables.MPT_CLOUD_HOSTED_BROWSER_USED]) {\n process.env[InternalEnvironmentVariables.MPT_CLOUD_HOSTED_BROWSER_USED] = \"true\";\n console.log(\"\\nRunning tests using Microsoft Playwright Testing service.\");\n }\n\n return {\n use: {\n connectOptions: {\n wsEndpoint: getServiceWSEndpoint(\n playwrightServiceConfig.runId,\n playwrightServiceConfig.serviceOs,\n ),\n headers: {\n Authorization: `Bearer ${getAccessToken()}`,\n \"x-ms-package-version\": `@azure/microsoft-playwright-testing/${getPackageVersion()}`,\n },\n timeout: playwrightServiceConfig.timeout,\n exposeNetwork: playwrightServiceConfig.exposeNetwork,\n slowMo: playwrightServiceConfig.slowMo,\n },\n },\n ...globalFunctions,\n };\n};\n\n/**\n * @public\n *\n * Get connect options required to connect to Microsoft Playwright Testing's cloud hosted browsers.\n *\n * @param options - additional options for the service\n * @returns BrowserConnectOptions\n *\n * @example\n * ```\n * import playwright, { test, expect, BrowserType } from \"@playwright/test\";\n * import { getConnectOptions } from \"@azure/microsoft-playwright-testing\";\n *\n * test('has title', async ({ browserName }) => {\n * const { wsEndpoint, options } = await getConnectOptions();\n * const browser = await (playwright[browserName] as BrowserType).connect(wsEndpoint, options);\n * const context = await browser.newContext();\n * const page = await context.newPage();\n *\n * await page.goto('https://playwright.dev/');\n * await expect(page).toHaveTitle(/Playwright/);\n *\n * await page.close();\n * await context.close();\n * await browser.close();\n * });\n * ```\n */\nconst getConnectOptions = async (\n options?: Omit<PlaywrightServiceAdditionalOptions, \"serviceAuthType\">,\n): Promise<BrowserConnectOptions> => {\n const playwrightServiceConfig = new PlaywrightServiceConfig();\n playwrightServiceConfig.setOptions(options);\n\n const token = await fetchOrValidateAccessToken(options?.credential);\n return {\n wsEndpoint: getServiceWSEndpoint(\n playwrightServiceConfig.runId,\n playwrightServiceConfig.serviceOs,\n ),\n options: {\n headers: {\n Authorization: `Bearer ${token}`,\n \"x-ms-package-version\": `@azure/microsoft-playwright-testing/${getPackageVersion()}`,\n },\n timeout: playwrightServiceConfig.timeout,\n exposeNetwork: playwrightServiceConfig.exposeNetwork,\n slowMo: playwrightServiceConfig.slowMo,\n },\n };\n};\n\nexport { getServiceConfig, getConnectOptions };\n"]}
1
+ {"version":3,"file":"playwrightService.js","sourceRoot":"","sources":["../../../src/core/playwrightService.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport { InternalEnvironmentVariables, ServiceAuth } from \"../common/constants.js\";\nimport customerConfig from \"../common/customerConfig.js\";\nimport { PlaywrightServiceConfig } from \"../common/playwrightServiceConfig.js\";\nimport playwrightServiceEntra from \"./playwrightServiceEntra.js\";\nimport type { PlaywrightServiceAdditionalOptions, BrowserConnectOptions } from \"../common/types.js\";\nimport {\n emitReportingUrl,\n fetchOrValidateAccessToken,\n getAccessToken,\n getServiceWSEndpoint,\n validateMptPAT,\n warnIfAccessTokenCloseToExpiry,\n validatePlaywrightVersion,\n validateServiceUrl,\n exitWithFailureMessage,\n getPackageVersion,\n getPlaywrightVersion,\n getVersionInfo,\n} from \"../utils/utils.js\";\nimport { ServiceErrorMessageConstants } from \"../common/messages.js\";\nimport type { PlaywrightTestConfig } from \"@playwright/test\";\nimport { globalSetupPath, globalTeardownPath } from \"./playwrightServiceUtils.js\";\n\nconst performOneTimeOperation = (options?: PlaywrightServiceAdditionalOptions): void => {\n const oneTimeOperationFlag =\n process.env[InternalEnvironmentVariables.ONE_TIME_OPERATION_FLAG] === \"true\";\n if (oneTimeOperationFlag) return;\n process.env[InternalEnvironmentVariables.ONE_TIME_OPERATION_FLAG] = \"true\";\n if (options?.serviceAuthType === ServiceAuth.ACCESS_TOKEN) {\n warnIfAccessTokenCloseToExpiry();\n }\n};\n/**\n * @public\n *\n * Generate playwright configuration integrated with Microsoft Playwright Testing.\n *\n * @param config - base playwright configuration\n * @param options - additional options for the service\n * @returns PlaywrightConfig\n *\n * @example\n * ```\n * import { defineConfig } from \"playwright/test\";\n * import { getServiceConfig } from \"@azure/microsoft-playwright-testing\";\n * import playwrightConfig from \"./playwright.config\";\n *\n * export default defineConfig(playwrightConfig, getServiceConfig(playwrightConfig));\n * ```\n *\n * @example\n * ```\n * import { defineConfig } from \"playwright/test\";\n * import { getServiceConfig, ServiceOS } from \"@azure/microsoft-playwright-testing\";\n * import playwrightConfig from \"./playwright.config\";\n *\n * export default defineConfig(playwrightConfig, getServiceConfig(playwrightConfig, {\n * runId: \"custom run id\",\n * os: ServiceOS.WINDOWS\n * }));\n * ```\n */\nconst getServiceConfig = (\n config: PlaywrightTestConfig,\n options?: PlaywrightServiceAdditionalOptions,\n): PlaywrightTestConfig => {\n validatePlaywrightVersion();\n validateServiceUrl();\n const playwrightVersionInfo = getVersionInfo(getPlaywrightVersion());\n const isMultipleGlobalFileSupported =\n playwrightVersionInfo.major >= 1 && playwrightVersionInfo.minor >= 49;\n if (options?.credential) {\n playwrightServiceEntra.entraIdAccessToken = options.credential;\n }\n\n // if global setup/teardown is string -\n // 1. if multiple global file is supported, convert it to array\n // 2. wrap playwright-service global setup/teardown with customer provided global setup/teardown\n\n // if global setup/teardown is array -\n // 1. if multiple global file is not supported, throw error\n // 2. append playwright-service global setup/teardown with customer provided global setup/teardown\n if (config && config.globalSetup) {\n if (typeof config.globalSetup === \"string\") {\n if (isMultipleGlobalFileSupported) {\n customerConfig.globalSetup = [config.globalSetup];\n } else {\n customerConfig.globalSetup = config.globalSetup;\n }\n } else {\n if (!isMultipleGlobalFileSupported) {\n throw new Error(\n ServiceErrorMessageConstants.MULTIPLE_SETUP_FILE_PLAYWRIGHT_VERSION_ERROR.message,\n );\n }\n customerConfig.globalSetup = config.globalSetup;\n }\n }\n\n if (config && config.globalTeardown) {\n if (typeof config.globalTeardown === \"string\") {\n if (isMultipleGlobalFileSupported) {\n customerConfig.globalTeardown = [config.globalTeardown];\n } else {\n customerConfig.globalTeardown = config.globalTeardown;\n }\n } else {\n if (!isMultipleGlobalFileSupported) {\n throw new Error(\n ServiceErrorMessageConstants.MULTIPLE_SETUP_FILE_PLAYWRIGHT_VERSION_ERROR.message,\n );\n }\n customerConfig.globalTeardown = config.globalTeardown;\n }\n }\n\n const playwrightServiceConfig = new PlaywrightServiceConfig();\n playwrightServiceConfig.setOptions(options);\n emitReportingUrl();\n\n const globalFunctions: any = {};\n\n if (options?.serviceAuthType === ServiceAuth.ACCESS_TOKEN) {\n // mpt PAT requested and set by the customer, no need to setup entra lifecycle handlers\n validateMptPAT(exitWithFailureMessage);\n } else {\n // If multiple global file is supported, append playwright-service global setup/teardown with customer provided global setup/teardown\n if (isMultipleGlobalFileSupported) {\n globalFunctions.globalSetup = [] as string[];\n globalFunctions.globalTeardown = [] as string[];\n if (customerConfig.globalSetup) {\n globalFunctions.globalSetup.push(...(customerConfig.globalSetup as string[]));\n }\n if (customerConfig.globalTeardown) {\n globalFunctions.globalTeardown.push(...(customerConfig.globalTeardown as string[]));\n }\n globalFunctions.globalSetup.push(globalSetupPath);\n globalFunctions.globalTeardown.push(globalTeardownPath);\n } else {\n // If multiple global file is not supported, wrap playwright-service global setup/teardown with customer provided global setup/teardown\n globalFunctions.globalSetup = globalSetupPath;\n globalFunctions.globalTeardown = globalTeardownPath;\n }\n }\n performOneTimeOperation(options);\n if (options?.useCloudHostedBrowsers === false) {\n return {\n ...globalFunctions,\n };\n }\n if (!process.env[InternalEnvironmentVariables.MPT_CLOUD_HOSTED_BROWSER_USED]) {\n process.env[InternalEnvironmentVariables.MPT_CLOUD_HOSTED_BROWSER_USED] = \"true\";\n console.log(\"\\nRunning tests using Microsoft Playwright Testing service.\");\n }\n\n return {\n use: {\n connectOptions: {\n wsEndpoint: getServiceWSEndpoint(\n playwrightServiceConfig.runId,\n playwrightServiceConfig.serviceOs,\n ),\n headers: {\n Authorization: `Bearer ${getAccessToken()}`,\n \"x-ms-package-version\": `@azure/microsoft-playwright-testing/${getPackageVersion()}`,\n },\n timeout: playwrightServiceConfig.timeout,\n exposeNetwork: playwrightServiceConfig.exposeNetwork,\n slowMo: playwrightServiceConfig.slowMo,\n },\n },\n ...globalFunctions,\n };\n};\n\n/**\n * @public\n *\n * Get connect options required to connect to Microsoft Playwright Testing's cloud hosted browsers.\n *\n * @param options - additional options for the service\n * @returns BrowserConnectOptions\n *\n * @example\n * ```\n * import playwright, { test, expect, BrowserType } from \"@playwright/test\";\n * import { getConnectOptions } from \"@azure/microsoft-playwright-testing\";\n *\n * test('has title', async ({ browserName }) => {\n * const { wsEndpoint, options } = await getConnectOptions();\n * const browser = await (playwright[browserName] as BrowserType).connect(wsEndpoint, options);\n * const context = await browser.newContext();\n * const page = await context.newPage();\n *\n * await page.goto('https://playwright.dev/');\n * await expect(page).toHaveTitle(/Playwright/);\n *\n * await page.close();\n * await context.close();\n * await browser.close();\n * });\n * ```\n */\nconst getConnectOptions = async (\n options?: Omit<PlaywrightServiceAdditionalOptions, \"serviceAuthType\">,\n): Promise<BrowserConnectOptions> => {\n const playwrightServiceConfig = new PlaywrightServiceConfig();\n playwrightServiceConfig.setOptions(options);\n\n const token = await fetchOrValidateAccessToken(options?.credential);\n return {\n wsEndpoint: getServiceWSEndpoint(\n playwrightServiceConfig.runId,\n playwrightServiceConfig.serviceOs,\n ),\n options: {\n headers: {\n Authorization: `Bearer ${token}`,\n \"x-ms-package-version\": `@azure/microsoft-playwright-testing/${getPackageVersion()}`,\n },\n timeout: playwrightServiceConfig.timeout,\n exposeNetwork: playwrightServiceConfig.exposeNetwork,\n slowMo: playwrightServiceConfig.slowMo,\n },\n };\n};\n\nexport { getServiceConfig, getConnectOptions };\n"]}
@@ -4,46 +4,49 @@ import { EntraIdAccessTokenConstants } from "../common/constants.js";
4
4
  import { coreLogger } from "../common/logger.js";
5
5
  import { EntraIdAccessToken } from "../common/entraIdAccessToken.js";
6
6
  class PlaywrightServiceEntra {
7
+ _entraIdAccessTokenRotationInterval;
8
+ static instance;
9
+ _entraIdAccessToken;
10
+ static getInstance = () => {
11
+ if (!PlaywrightServiceEntra.instance) {
12
+ PlaywrightServiceEntra.instance = new PlaywrightServiceEntra();
13
+ }
14
+ return PlaywrightServiceEntra.instance;
15
+ };
7
16
  set entraIdAccessToken(credential) {
8
17
  this._entraIdAccessToken = new EntraIdAccessToken(credential);
9
18
  }
10
19
  constructor() {
11
- this.globalSetup = async () => {
12
- coreLogger.info("Entra id access token setup start");
13
- await this._entraIdAccessToken.fetchEntraIdAccessToken();
14
- this.entraIdGlobalSetupRotationHandler();
15
- };
16
- this.globalTeardown = () => {
17
- coreLogger.info("Entra id access token teardown start");
18
- if (this._entraIdAccessTokenRotationInterval) {
19
- clearInterval(this._entraIdAccessTokenRotationInterval);
20
- coreLogger.info("Entra id access token rotation interval cleared");
21
- }
22
- };
23
- this.entraIdGlobalSetupRotationHandler = () => {
24
- this._entraIdAccessTokenRotationInterval = setInterval(this.entraIdAccessTokenRotation, EntraIdAccessTokenConstants.ROTATION_INTERVAL_PERIOD_IN_MINUTES * 60 * 1000);
25
- coreLogger.info("Entra id access token rotation handler setup done");
26
- };
27
- this.entraIdAccessTokenRotation = async () => {
28
- coreLogger.info("Entra id access token rotation handler");
29
- try {
30
- if (this._entraIdAccessToken.doesEntraIdAccessTokenNeedRotation()) {
31
- await this._entraIdAccessToken.fetchEntraIdAccessToken();
32
- }
33
- }
34
- catch (err) {
35
- coreLogger.error(err); // log error and continue if it's an intermittent issue (optimistic approach)
36
- }
37
- };
38
20
  this._entraIdAccessToken = new EntraIdAccessToken();
39
21
  }
22
+ globalSetup = async () => {
23
+ coreLogger.info("Entra id access token setup start");
24
+ await this._entraIdAccessToken.fetchEntraIdAccessToken();
25
+ this.entraIdGlobalSetupRotationHandler();
26
+ };
27
+ globalTeardown = () => {
28
+ coreLogger.info("Entra id access token teardown start");
29
+ if (this._entraIdAccessTokenRotationInterval) {
30
+ clearInterval(this._entraIdAccessTokenRotationInterval);
31
+ coreLogger.info("Entra id access token rotation interval cleared");
32
+ }
33
+ };
34
+ entraIdGlobalSetupRotationHandler = () => {
35
+ this._entraIdAccessTokenRotationInterval = setInterval(this.entraIdAccessTokenRotation, EntraIdAccessTokenConstants.ROTATION_INTERVAL_PERIOD_IN_MINUTES * 60 * 1000);
36
+ coreLogger.info("Entra id access token rotation handler setup done");
37
+ };
38
+ entraIdAccessTokenRotation = async () => {
39
+ coreLogger.info("Entra id access token rotation handler");
40
+ try {
41
+ if (this._entraIdAccessToken.doesEntraIdAccessTokenNeedRotation()) {
42
+ await this._entraIdAccessToken.fetchEntraIdAccessToken();
43
+ }
44
+ }
45
+ catch (err) {
46
+ coreLogger.error(err); // log error and continue if it's an intermittent issue (optimistic approach)
47
+ }
48
+ };
40
49
  }
41
- PlaywrightServiceEntra.getInstance = () => {
42
- if (!PlaywrightServiceEntra.instance) {
43
- PlaywrightServiceEntra.instance = new PlaywrightServiceEntra();
44
- }
45
- return PlaywrightServiceEntra.instance;
46
- };
47
50
  const instance = PlaywrightServiceEntra.getInstance();
48
51
  export default instance;
49
52
  //# sourceMappingURL=playwrightServiceEntra.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"playwrightServiceEntra.js","sourceRoot":"","sources":["../../../src/core/playwrightServiceEntra.ts"],"names":[],"mappings":"AAAA,uCAAuC;AACvC,kCAAkC;AAElC,OAAO,EAAE,2BAA2B,EAAE,MAAM,wBAAwB,CAAC;AACrE,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AACjD,OAAO,EAAE,kBAAkB,EAAE,MAAM,iCAAiC,CAAC;AAGrE,MAAM,sBAAsB;IAY1B,IAAI,kBAAkB,CAAC,UAA2B;QAChD,IAAI,CAAC,mBAAmB,GAAG,IAAI,kBAAkB,CAAC,UAAU,CAAC,CAAC;IAChE,CAAC;IAED;QAIO,gBAAW,GAAG,KAAK,IAAmB,EAAE;YAC7C,UAAU,CAAC,IAAI,CAAC,mCAAmC,CAAC,CAAC;YACrD,MAAM,IAAI,CAAC,mBAAmB,CAAC,uBAAuB,EAAE,CAAC;YACzD,IAAI,CAAC,iCAAiC,EAAE,CAAC;QAC3C,CAAC,CAAC;QAEK,mBAAc,GAAG,GAAS,EAAE;YACjC,UAAU,CAAC,IAAI,CAAC,sCAAsC,CAAC,CAAC;YACxD,IAAI,IAAI,CAAC,mCAAmC,EAAE,CAAC;gBAC7C,aAAa,CAAC,IAAI,CAAC,mCAAmC,CAAC,CAAC;gBACxD,UAAU,CAAC,IAAI,CAAC,iDAAiD,CAAC,CAAC;YACrE,CAAC;QACH,CAAC,CAAC;QAEM,sCAAiC,GAAG,GAAS,EAAE;YACrD,IAAI,CAAC,mCAAmC,GAAG,WAAW,CACpD,IAAI,CAAC,0BAA0B,EAC/B,2BAA2B,CAAC,mCAAmC,GAAG,EAAE,GAAG,IAAI,CAC5E,CAAC;YACF,UAAU,CAAC,IAAI,CAAC,mDAAmD,CAAC,CAAC;QACvE,CAAC,CAAC;QAEM,+BAA0B,GAAG,KAAK,IAAmB,EAAE;YAC7D,UAAU,CAAC,IAAI,CAAC,wCAAwC,CAAC,CAAC;YAC1D,IAAI,CAAC;gBACH,IAAI,IAAI,CAAC,mBAAmB,CAAC,kCAAkC,EAAE,EAAE,CAAC;oBAClE,MAAM,IAAI,CAAC,mBAAmB,CAAC,uBAAuB,EAAE,CAAC;gBAC3D,CAAC;YACH,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,6EAA6E;YACtG,CAAC;QACH,CAAC,CAAC;QAlCA,IAAI,CAAC,mBAAmB,GAAG,IAAI,kBAAkB,EAAE,CAAC;IACtD,CAAC;;AAbM,kCAAW,GAAG,GAA2B,EAAE;IAChD,IAAI,CAAC,sBAAsB,CAAC,QAAQ,EAAE,CAAC;QACrC,sBAAsB,CAAC,QAAQ,GAAG,IAAI,sBAAsB,EAAE,CAAC;IACjE,CAAC;IACD,OAAO,sBAAsB,CAAC,QAAQ,CAAC;AACzC,CAAC,AALiB,CAKhB;AA4CJ,MAAM,QAAQ,GAAG,sBAAsB,CAAC,WAAW,EAAE,CAAC;AACtD,eAAe,QAAQ,CAAC","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport { EntraIdAccessTokenConstants } from \"../common/constants.js\";\nimport { coreLogger } from \"../common/logger.js\";\nimport { EntraIdAccessToken } from \"../common/entraIdAccessToken.js\";\nimport type { TokenCredential } from \"@azure/identity\";\n\nclass PlaywrightServiceEntra {\n private _entraIdAccessTokenRotationInterval?: NodeJS.Timeout;\n private static instance: PlaywrightServiceEntra;\n private _entraIdAccessToken: EntraIdAccessToken;\n\n static getInstance = (): PlaywrightServiceEntra => {\n if (!PlaywrightServiceEntra.instance) {\n PlaywrightServiceEntra.instance = new PlaywrightServiceEntra();\n }\n return PlaywrightServiceEntra.instance;\n };\n\n set entraIdAccessToken(credential: TokenCredential) {\n this._entraIdAccessToken = new EntraIdAccessToken(credential);\n }\n\n constructor() {\n this._entraIdAccessToken = new EntraIdAccessToken();\n }\n\n public globalSetup = async (): Promise<void> => {\n coreLogger.info(\"Entra id access token setup start\");\n await this._entraIdAccessToken.fetchEntraIdAccessToken();\n this.entraIdGlobalSetupRotationHandler();\n };\n\n public globalTeardown = (): void => {\n coreLogger.info(\"Entra id access token teardown start\");\n if (this._entraIdAccessTokenRotationInterval) {\n clearInterval(this._entraIdAccessTokenRotationInterval);\n coreLogger.info(\"Entra id access token rotation interval cleared\");\n }\n };\n\n private entraIdGlobalSetupRotationHandler = (): void => {\n this._entraIdAccessTokenRotationInterval = setInterval(\n this.entraIdAccessTokenRotation,\n EntraIdAccessTokenConstants.ROTATION_INTERVAL_PERIOD_IN_MINUTES * 60 * 1000,\n );\n coreLogger.info(\"Entra id access token rotation handler setup done\");\n };\n\n private entraIdAccessTokenRotation = async (): Promise<void> => {\n coreLogger.info(\"Entra id access token rotation handler\");\n try {\n if (this._entraIdAccessToken.doesEntraIdAccessTokenNeedRotation()) {\n await this._entraIdAccessToken.fetchEntraIdAccessToken();\n }\n } catch (err) {\n coreLogger.error(err); // log error and continue if it's an intermittent issue (optimistic approach)\n }\n };\n}\n\nconst instance = PlaywrightServiceEntra.getInstance();\nexport default instance;\n"]}
1
+ {"version":3,"file":"playwrightServiceEntra.js","sourceRoot":"","sources":["../../../src/core/playwrightServiceEntra.ts"],"names":[],"mappings":"AAAA,uCAAuC;AACvC,kCAAkC;AAElC,OAAO,EAAE,2BAA2B,EAAE,MAAM,wBAAwB,CAAC;AACrE,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AACjD,OAAO,EAAE,kBAAkB,EAAE,MAAM,iCAAiC,CAAC;AAGrE,MAAM,sBAAsB;IAClB,mCAAmC,CAAkB;IACrD,MAAM,CAAC,QAAQ,CAAyB;IACxC,mBAAmB,CAAqB;IAEhD,MAAM,CAAC,WAAW,GAAG,GAA2B,EAAE;QAChD,IAAI,CAAC,sBAAsB,CAAC,QAAQ,EAAE,CAAC;YACrC,sBAAsB,CAAC,QAAQ,GAAG,IAAI,sBAAsB,EAAE,CAAC;QACjE,CAAC;QACD,OAAO,sBAAsB,CAAC,QAAQ,CAAC;IACzC,CAAC,CAAC;IAEF,IAAI,kBAAkB,CAAC,UAA2B;QAChD,IAAI,CAAC,mBAAmB,GAAG,IAAI,kBAAkB,CAAC,UAAU,CAAC,CAAC;IAChE,CAAC;IAED;QACE,IAAI,CAAC,mBAAmB,GAAG,IAAI,kBAAkB,EAAE,CAAC;IACtD,CAAC;IAEM,WAAW,GAAG,KAAK,IAAmB,EAAE;QAC7C,UAAU,CAAC,IAAI,CAAC,mCAAmC,CAAC,CAAC;QACrD,MAAM,IAAI,CAAC,mBAAmB,CAAC,uBAAuB,EAAE,CAAC;QACzD,IAAI,CAAC,iCAAiC,EAAE,CAAC;IAC3C,CAAC,CAAC;IAEK,cAAc,GAAG,GAAS,EAAE;QACjC,UAAU,CAAC,IAAI,CAAC,sCAAsC,CAAC,CAAC;QACxD,IAAI,IAAI,CAAC,mCAAmC,EAAE,CAAC;YAC7C,aAAa,CAAC,IAAI,CAAC,mCAAmC,CAAC,CAAC;YACxD,UAAU,CAAC,IAAI,CAAC,iDAAiD,CAAC,CAAC;QACrE,CAAC;IACH,CAAC,CAAC;IAEM,iCAAiC,GAAG,GAAS,EAAE;QACrD,IAAI,CAAC,mCAAmC,GAAG,WAAW,CACpD,IAAI,CAAC,0BAA0B,EAC/B,2BAA2B,CAAC,mCAAmC,GAAG,EAAE,GAAG,IAAI,CAC5E,CAAC;QACF,UAAU,CAAC,IAAI,CAAC,mDAAmD,CAAC,CAAC;IACvE,CAAC,CAAC;IAEM,0BAA0B,GAAG,KAAK,IAAmB,EAAE;QAC7D,UAAU,CAAC,IAAI,CAAC,wCAAwC,CAAC,CAAC;QAC1D,IAAI,CAAC;YACH,IAAI,IAAI,CAAC,mBAAmB,CAAC,kCAAkC,EAAE,EAAE,CAAC;gBAClE,MAAM,IAAI,CAAC,mBAAmB,CAAC,uBAAuB,EAAE,CAAC;YAC3D,CAAC;QACH,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,6EAA6E;QACtG,CAAC;IACH,CAAC,CAAC;;AAGJ,MAAM,QAAQ,GAAG,sBAAsB,CAAC,WAAW,EAAE,CAAC;AACtD,eAAe,QAAQ,CAAC","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport { EntraIdAccessTokenConstants } from \"../common/constants.js\";\nimport { coreLogger } from \"../common/logger.js\";\nimport { EntraIdAccessToken } from \"../common/entraIdAccessToken.js\";\nimport type { TokenCredential } from \"@azure/identity\";\n\nclass PlaywrightServiceEntra {\n private _entraIdAccessTokenRotationInterval?: NodeJS.Timeout;\n private static instance: PlaywrightServiceEntra;\n private _entraIdAccessToken: EntraIdAccessToken;\n\n static getInstance = (): PlaywrightServiceEntra => {\n if (!PlaywrightServiceEntra.instance) {\n PlaywrightServiceEntra.instance = new PlaywrightServiceEntra();\n }\n return PlaywrightServiceEntra.instance;\n };\n\n set entraIdAccessToken(credential: TokenCredential) {\n this._entraIdAccessToken = new EntraIdAccessToken(credential);\n }\n\n constructor() {\n this._entraIdAccessToken = new EntraIdAccessToken();\n }\n\n public globalSetup = async (): Promise<void> => {\n coreLogger.info(\"Entra id access token setup start\");\n await this._entraIdAccessToken.fetchEntraIdAccessToken();\n this.entraIdGlobalSetupRotationHandler();\n };\n\n public globalTeardown = (): void => {\n coreLogger.info(\"Entra id access token teardown start\");\n if (this._entraIdAccessTokenRotationInterval) {\n clearInterval(this._entraIdAccessTokenRotationInterval);\n coreLogger.info(\"Entra id access token rotation interval cleared\");\n }\n };\n\n private entraIdGlobalSetupRotationHandler = (): void => {\n this._entraIdAccessTokenRotationInterval = setInterval(\n this.entraIdAccessTokenRotation,\n EntraIdAccessTokenConstants.ROTATION_INTERVAL_PERIOD_IN_MINUTES * 60 * 1000,\n );\n coreLogger.info(\"Entra id access token rotation handler setup done\");\n };\n\n private entraIdAccessTokenRotation = async (): Promise<void> => {\n coreLogger.info(\"Entra id access token rotation handler\");\n try {\n if (this._entraIdAccessToken.doesEntraIdAccessTokenNeedRotation()) {\n await this._entraIdAccessToken.fetchEntraIdAccessToken();\n }\n } catch (err) {\n coreLogger.error(err); // log error and continue if it's an intermittent issue (optimistic approach)\n }\n };\n}\n\nconst instance = PlaywrightServiceEntra.getInstance();\nexport default instance;\n"]}
@@ -1,5 +1,9 @@
1
1
  // Copyright (c) Microsoft Corporation.
2
2
  // Licensed under the MIT License.
3
3
  export class EntraTokenDetails {
4
+ // userId
5
+ oid;
6
+ // name
7
+ name;
4
8
  }
5
9
  //# sourceMappingURL=entraTokenDetails.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"entraTokenDetails.js","sourceRoot":"","sources":["../../../src/model/entraTokenDetails.ts"],"names":[],"mappings":"AAAA,uCAAuC;AACvC,kCAAkC;AAElC,MAAM,OAAO,iBAAiB;CAK7B","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nexport class EntraTokenDetails {\n // userId\n oid: string | undefined;\n // name\n name: string | undefined;\n}\n"]}
1
+ {"version":3,"file":"entraTokenDetails.js","sourceRoot":"","sources":["../../../src/model/entraTokenDetails.ts"],"names":[],"mappings":"AAAA,uCAAuC;AACvC,kCAAkC;AAElC,MAAM,OAAO,iBAAiB;IAC5B,SAAS;IACT,GAAG,CAAqB;IACxB,OAAO;IACP,IAAI,CAAqB;CAC1B","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nexport class EntraTokenDetails {\n // userId\n oid: string | undefined;\n // name\n name: string | undefined;\n}\n"]}
@@ -1,6 +1,14 @@
1
1
  // Copyright (c) Microsoft Corporation.
2
2
  // Licensed under the MIT License.
3
3
  export class MPTTokenDetails {
4
+ // accountId
5
+ aid;
6
+ // userId
7
+ oid;
8
+ // tokenId
9
+ id;
10
+ // userName
11
+ userName;
4
12
  }
5
13
  export var TokenType;
6
14
  (function (TokenType) {
@@ -1 +1 @@
1
- {"version":3,"file":"mptTokenDetails.js","sourceRoot":"","sources":["../../../src/model/mptTokenDetails.ts"],"names":[],"mappings":"AAAA,uCAAuC;AACvC,kCAAkC;AAElC,MAAM,OAAO,eAAe;CAS3B;AAED,MAAM,CAAN,IAAY,SAGX;AAHD,WAAY,SAAS;IACnB,uCAAG,CAAA;IACH,2CAAK,CAAA;AACP,CAAC,EAHW,SAAS,KAAT,SAAS,QAGpB","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nexport class MPTTokenDetails {\n // accountId\n aid: string | undefined;\n // userId\n oid: string | undefined;\n // tokenId\n id: string | undefined;\n // userName\n userName: string | undefined;\n}\n\nexport enum TokenType {\n MPT,\n ENTRA,\n}\n"]}
1
+ {"version":3,"file":"mptTokenDetails.js","sourceRoot":"","sources":["../../../src/model/mptTokenDetails.ts"],"names":[],"mappings":"AAAA,uCAAuC;AACvC,kCAAkC;AAElC,MAAM,OAAO,eAAe;IAC1B,YAAY;IACZ,GAAG,CAAqB;IACxB,SAAS;IACT,GAAG,CAAqB;IACxB,UAAU;IACV,EAAE,CAAqB;IACvB,WAAW;IACX,QAAQ,CAAqB;CAC9B;AAED,MAAM,CAAN,IAAY,SAGX;AAHD,WAAY,SAAS;IACnB,uCAAG,CAAA;IACH,2CAAK,CAAA;AACP,CAAC,EAHW,SAAS,KAAT,SAAS,QAGpB","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nexport class MPTTokenDetails {\n // accountId\n aid: string | undefined;\n // userId\n oid: string | undefined;\n // tokenId\n id: string | undefined;\n // userName\n userName: string | undefined;\n}\n\nexport enum TokenType {\n MPT,\n ENTRA,\n}\n"]}
@@ -1,8 +1,18 @@
1
1
  // Copyright (c) Microsoft Corporation.
2
2
  // Licensed under the MIT License.
3
3
  export class Shard {
4
+ shardId;
5
+ summary;
6
+ workers;
7
+ uploadCompleted;
4
8
  }
5
9
  export class TestRunSummary {
10
+ status;
11
+ startTime;
12
+ endTime;
13
+ totalTime;
14
+ errorMessages;
15
+ uploadMetadata;
6
16
  }
7
17
  export var TestResultStatus;
8
18
  (function (TestResultStatus) {
@@ -1 +1 @@
1
- {"version":3,"file":"shard.js","sourceRoot":"","sources":["../../../src/model/shard.ts"],"names":[],"mappings":"AAAA,uCAAuC;AACvC,kCAAkC;AAElC,MAAM,OAAO,KAAK;CAKjB;AAED,MAAM,OAAO,cAAc;CAO1B;AAWD,MAAM,CAAN,IAAY,gBAKX;AALD,WAAY,gBAAgB;IAC1B,qCAAiB,CAAA;IACjB,qCAAiB,CAAA;IACjB,yCAAqB,CAAA;IACrB,+CAA2B,CAAA;AAC7B,CAAC,EALW,gBAAgB,KAAhB,gBAAgB,QAK3B;AAED,MAAM,CAAN,IAAY,aAGX;AAHD,WAAY,aAAa;IACvB,oCAAmB,CAAA;IACnB,oDAAmC,CAAA;AACrC,CAAC,EAHW,aAAa,KAAb,aAAa,QAGxB","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nexport class Shard {\n shardId!: string;\n summary!: TestRunSummary;\n workers?: number;\n uploadCompleted!: boolean;\n}\n\nexport class TestRunSummary {\n status?: string;\n startTime!: string;\n endTime?: string;\n totalTime?: number;\n errorMessages?: string[];\n uploadMetadata?: UploadMetadata;\n}\n\nexport type TestRunResultsSummary = {\n numTotalTests?: number;\n numFailedTests?: number;\n numSkippedTests?: number;\n numPassedTests?: number;\n numFlakyTests?: number;\n status?: TestResultStatus;\n};\n\nexport enum TestResultStatus {\n PASSED = \"passed\",\n FAILED = \"failed\",\n TIMEDOUT = \"timedout\",\n INTERRUPTED = \"interrupted\",\n}\n\nexport enum TestRunStatus {\n RUNNING = \"RUNNING\",\n CLIENT_COMPLETE = \"CLIENT_COMPLETE\",\n}\n\nexport type UploadMetadata = {\n numTestResults: number;\n numTotalAttachments: number;\n sizeTotalAttachments: number;\n};\n\nexport type ShardInfo = {\n total: number;\n};\n"]}
1
+ {"version":3,"file":"shard.js","sourceRoot":"","sources":["../../../src/model/shard.ts"],"names":[],"mappings":"AAAA,uCAAuC;AACvC,kCAAkC;AAElC,MAAM,OAAO,KAAK;IAChB,OAAO,CAAU;IACjB,OAAO,CAAkB;IACzB,OAAO,CAAU;IACjB,eAAe,CAAW;CAC3B;AAED,MAAM,OAAO,cAAc;IACzB,MAAM,CAAU;IAChB,SAAS,CAAU;IACnB,OAAO,CAAU;IACjB,SAAS,CAAU;IACnB,aAAa,CAAY;IACzB,cAAc,CAAkB;CACjC;AAWD,MAAM,CAAN,IAAY,gBAKX;AALD,WAAY,gBAAgB;IAC1B,qCAAiB,CAAA;IACjB,qCAAiB,CAAA;IACjB,yCAAqB,CAAA;IACrB,+CAA2B,CAAA;AAC7B,CAAC,EALW,gBAAgB,KAAhB,gBAAgB,QAK3B;AAED,MAAM,CAAN,IAAY,aAGX;AAHD,WAAY,aAAa;IACvB,oCAAmB,CAAA;IACnB,oDAAmC,CAAA;AACrC,CAAC,EAHW,aAAa,KAAb,aAAa,QAGxB","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nexport class Shard {\n shardId!: string;\n summary!: TestRunSummary;\n workers?: number;\n uploadCompleted!: boolean;\n}\n\nexport class TestRunSummary {\n status?: string;\n startTime!: string;\n endTime?: string;\n totalTime?: number;\n errorMessages?: string[];\n uploadMetadata?: UploadMetadata;\n}\n\nexport type TestRunResultsSummary = {\n numTotalTests?: number;\n numFailedTests?: number;\n numSkippedTests?: number;\n numPassedTests?: number;\n numFlakyTests?: number;\n status?: TestResultStatus;\n};\n\nexport enum TestResultStatus {\n PASSED = \"passed\",\n FAILED = \"failed\",\n TIMEDOUT = \"timedout\",\n INTERRUPTED = \"interrupted\",\n}\n\nexport enum TestRunStatus {\n RUNNING = \"RUNNING\",\n CLIENT_COMPLETE = \"CLIENT_COMPLETE\",\n}\n\nexport type UploadMetadata = {\n numTestResults: number;\n numTotalAttachments: number;\n sizeTotalAttachments: number;\n};\n\nexport type ShardInfo = {\n total: number;\n};\n"]}
@@ -1,6 +1,10 @@
1
1
  // Copyright (c) Microsoft Corporation.
2
2
  // Licensed under the MIT License.
3
3
  export class StorageUri {
4
+ uri;
5
+ createdAt;
6
+ expiresAt;
7
+ accessLevel;
4
8
  constructor(uri, createdAt, expiresAt, accessLevel) {
5
9
  this.uri = uri;
6
10
  this.createdAt = createdAt;
@@ -1 +1 @@
1
- {"version":3,"file":"storageUri.js","sourceRoot":"","sources":["../../../src/model/storageUri.ts"],"names":[],"mappings":"AAAA,uCAAuC;AACvC,kCAAkC;AAElC,MAAM,OAAO,UAAU;IAKrB,YAAY,GAAW,EAAE,SAAiB,EAAE,SAAiB,EAAE,WAAwB;QACrF,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC;QACf,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;QAC3B,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;QAC3B,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;IACjC,CAAC;CACF;AAED,MAAM,CAAN,IAAY,WAKX;AALD,WAAY,WAAW;IACrB,6CAAI,CAAA;IACJ,+CAAK,CAAA;IACL,uDAAS,CAAA;IACT,yEAAkB,CAAA;AACpB,CAAC,EALW,WAAW,KAAX,WAAW,QAKtB","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nexport class StorageUri {\n uri: string;\n createdAt: string;\n expiresAt: string;\n accessLevel: AccessLevel;\n constructor(uri: string, createdAt: string, expiresAt: string, accessLevel: AccessLevel) {\n this.uri = uri;\n this.createdAt = createdAt;\n this.expiresAt = expiresAt;\n this.accessLevel = accessLevel;\n }\n}\n\nexport enum AccessLevel {\n Read,\n Write,\n ReadWrite,\n ReadAddCreateWrite,\n}\n"]}
1
+ {"version":3,"file":"storageUri.js","sourceRoot":"","sources":["../../../src/model/storageUri.ts"],"names":[],"mappings":"AAAA,uCAAuC;AACvC,kCAAkC;AAElC,MAAM,OAAO,UAAU;IACrB,GAAG,CAAS;IACZ,SAAS,CAAS;IAClB,SAAS,CAAS;IAClB,WAAW,CAAc;IACzB,YAAY,GAAW,EAAE,SAAiB,EAAE,SAAiB,EAAE,WAAwB;QACrF,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC;QACf,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;QAC3B,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;QAC3B,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;IACjC,CAAC;CACF;AAED,MAAM,CAAN,IAAY,WAKX;AALD,WAAY,WAAW;IACrB,6CAAI,CAAA;IACJ,+CAAK,CAAA;IACL,uDAAS,CAAA;IACT,yEAAkB,CAAA;AACpB,CAAC,EALW,WAAW,KAAX,WAAW,QAKtB","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nexport class StorageUri {\n uri: string;\n createdAt: string;\n expiresAt: string;\n accessLevel: AccessLevel;\n constructor(uri: string, createdAt: string, expiresAt: string, accessLevel: AccessLevel) {\n this.uri = uri;\n this.createdAt = createdAt;\n this.expiresAt = expiresAt;\n this.accessLevel = accessLevel;\n }\n}\n\nexport enum AccessLevel {\n Read,\n Write,\n ReadWrite,\n ReadAddCreateWrite,\n}\n"]}
@@ -1,5 +1,23 @@
1
1
  // Copyright (c) Microsoft Corporation.
2
2
  // Licensed under the MIT License.
3
3
  export class TestResult {
4
+ testId;
5
+ testExecutionId;
6
+ testCombinationId;
7
+ runId;
8
+ shardId;
9
+ accountId;
10
+ suiteId;
11
+ testTitle;
12
+ suiteTitle;
13
+ fileName;
14
+ lineNumber;
15
+ retry;
16
+ status;
17
+ tags;
18
+ annotations;
19
+ webTestConfig;
20
+ resultsSummary;
21
+ artifactsPath;
4
22
  }
5
23
  //# sourceMappingURL=testResult.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"testResult.js","sourceRoot":"","sources":["../../../src/model/testResult.ts"],"names":[],"mappings":"AAAA,uCAAuC;AACvC,kCAAkC;AAIlC,MAAM,OAAO,UAAU;CAmBtB","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport type { RawTestStep } from \"../common/types.js\";\n\nexport class TestResult {\n testId!: string;\n testExecutionId!: string;\n testCombinationId!: string;\n runId!: string;\n shardId!: string;\n accountId!: string;\n suiteId!: string;\n testTitle!: string;\n suiteTitle!: string;\n fileName!: string;\n lineNumber!: number;\n retry!: number;\n status!: string;\n tags!: string[];\n annotations!: string[];\n webTestConfig!: WebTestConfig;\n resultsSummary!: TestResultsSummary;\n artifactsPath!: string[];\n}\n\nexport type WebTestConfig = {\n jobName: string;\n projectName: string;\n browserType?: string;\n os: string;\n};\n\nexport type TestResultsSummary = {\n status: string;\n duration: number;\n startTime: string;\n attachmentsMetadata: string;\n};\n\nexport type RawTestResult = {\n steps?: RawTestStep[];\n errors?: string;\n stdErr?: string;\n stdOut?: string;\n};\n"]}
1
+ {"version":3,"file":"testResult.js","sourceRoot":"","sources":["../../../src/model/testResult.ts"],"names":[],"mappings":"AAAA,uCAAuC;AACvC,kCAAkC;AAIlC,MAAM,OAAO,UAAU;IACrB,MAAM,CAAU;IAChB,eAAe,CAAU;IACzB,iBAAiB,CAAU;IAC3B,KAAK,CAAU;IACf,OAAO,CAAU;IACjB,SAAS,CAAU;IACnB,OAAO,CAAU;IACjB,SAAS,CAAU;IACnB,UAAU,CAAU;IACpB,QAAQ,CAAU;IAClB,UAAU,CAAU;IACpB,KAAK,CAAU;IACf,MAAM,CAAU;IAChB,IAAI,CAAY;IAChB,WAAW,CAAY;IACvB,aAAa,CAAiB;IAC9B,cAAc,CAAsB;IACpC,aAAa,CAAY;CAC1B","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport type { RawTestStep } from \"../common/types.js\";\n\nexport class TestResult {\n testId!: string;\n testExecutionId!: string;\n testCombinationId!: string;\n runId!: string;\n shardId!: string;\n accountId!: string;\n suiteId!: string;\n testTitle!: string;\n suiteTitle!: string;\n fileName!: string;\n lineNumber!: number;\n retry!: number;\n status!: string;\n tags!: string[];\n annotations!: string[];\n webTestConfig!: WebTestConfig;\n resultsSummary!: TestResultsSummary;\n artifactsPath!: string[];\n}\n\nexport type WebTestConfig = {\n jobName: string;\n projectName: string;\n browserType?: string;\n os: string;\n};\n\nexport type TestResultsSummary = {\n status: string;\n duration: number;\n startTime: string;\n attachmentsMetadata: string;\n};\n\nexport type RawTestResult = {\n steps?: RawTestStep[];\n errors?: string;\n stdErr?: string;\n stdOut?: string;\n};\n"]}
@@ -1,8 +1,13 @@
1
1
  // Copyright (c) Microsoft Corporation.
2
2
  // Licensed under the MIT License.
3
3
  export class TestRun {
4
- constructor() {
5
- this.cloudReportingEnabled = "true"; // Default value set to 'true'
6
- }
4
+ testRunId;
5
+ displayName;
6
+ creatorId;
7
+ creatorName;
8
+ startTime;
9
+ ciConfig;
10
+ testRunConfig;
11
+ cloudReportingEnabled = "true"; // Default value set to 'true'
7
12
  }
8
13
  //# sourceMappingURL=testRun.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"testRun.js","sourceRoot":"","sources":["../../../src/model/testRun.ts"],"names":[],"mappings":"AAAA,uCAAuC;AACvC,kCAAkC;AAIlC,MAAM,OAAO,OAAO;IAApB;QAQE,0BAAqB,GAAW,MAAM,CAAC,CAAC,8BAA8B;IACxE,CAAC;CAAA","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport type { ShardInfo } from \"./shard.js\";\n\nexport class TestRun {\n testRunId!: string;\n displayName!: string;\n creatorId!: string;\n creatorName?: string;\n startTime!: string;\n ciConfig?: CIConfig;\n testRunConfig?: TestRunConfig;\n cloudReportingEnabled: string = \"true\"; // Default value set to 'true'\n}\n\nexport type CIConfig = {\n ciProviderName: string;\n branch: string;\n author: string;\n commitId: string;\n revisionUrl: string;\n};\n\nexport type TestRunConfig = {\n workers: number;\n pwVersion: string;\n timeout: number;\n shards: ShardInfo;\n retries?: number;\n repeatEach?: number;\n testFramework: TestFramework;\n testType: string;\n testSdkLanguage: string;\n reporterPackageVersion: string;\n};\n\nexport type TestFramework = {\n name: string;\n version: string;\n runnerName: string;\n};\n"]}
1
+ {"version":3,"file":"testRun.js","sourceRoot":"","sources":["../../../src/model/testRun.ts"],"names":[],"mappings":"AAAA,uCAAuC;AACvC,kCAAkC;AAIlC,MAAM,OAAO,OAAO;IAClB,SAAS,CAAU;IACnB,WAAW,CAAU;IACrB,SAAS,CAAU;IACnB,WAAW,CAAU;IACrB,SAAS,CAAU;IACnB,QAAQ,CAAY;IACpB,aAAa,CAAiB;IAC9B,qBAAqB,GAAW,MAAM,CAAC,CAAC,8BAA8B;CACvE","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport type { ShardInfo } from \"./shard.js\";\n\nexport class TestRun {\n testRunId!: string;\n displayName!: string;\n creatorId!: string;\n creatorName?: string;\n startTime!: string;\n ciConfig?: CIConfig;\n testRunConfig?: TestRunConfig;\n cloudReportingEnabled: string = \"true\"; // Default value set to 'true'\n}\n\nexport type CIConfig = {\n ciProviderName: string;\n branch: string;\n author: string;\n commitId: string;\n revisionUrl: string;\n};\n\nexport type TestRunConfig = {\n workers: number;\n pwVersion: string;\n timeout: number;\n shards: ShardInfo;\n retries?: number;\n repeatEach?: number;\n testFramework: TestFramework;\n testType: string;\n testSdkLanguage: string;\n reporterPackageVersion: string;\n};\n\nexport type TestFramework = {\n name: string;\n version: string;\n runnerName: string;\n};\n"]}
@@ -29,53 +29,37 @@ import { validateMptPAT, populateValuesFromServiceUrl } from "../utils/utils.js"
29
29
  * ```
30
30
  */
31
31
  class MPTReporter {
32
+ isTokenValid = true;
33
+ enableGitHubSummary = true;
34
+ isRegionValid = true;
35
+ shard;
36
+ isTestRunStartSuccess = false;
37
+ ciInfo = CIInfoProvider.getCIInfo();
38
+ serviceClient;
39
+ storageClient;
40
+ reporterUtils;
41
+ envVariables;
42
+ testRawResults = new MultiMap();
43
+ promiseOnBegin;
44
+ _testEndPromises = [];
45
+ testResultBatch = new Set();
46
+ errorMessages = [];
47
+ informationalMessages = [];
48
+ processedErrorMessageKeys = [];
49
+ sasUri;
50
+ uploadMetadata = {
51
+ numTestResults: 0,
52
+ numTotalAttachments: 0,
53
+ sizeTotalAttachments: 0,
54
+ };
55
+ numWorkers = -1;
56
+ testRunUrl = "";
57
+ enableResultPublish = true;
32
58
  constructor(config) {
33
- this.isTokenValid = true;
34
- this.enableGitHubSummary = true;
35
- this.isRegionValid = true;
36
- this.isTestRunStartSuccess = false;
37
- this.ciInfo = CIInfoProvider.getCIInfo();
38
- this.testRawResults = new MultiMap();
39
- this._testEndPromises = [];
40
- this.testResultBatch = new Set();
41
- this.errorMessages = [];
42
- this.informationalMessages = [];
43
- this.processedErrorMessageKeys = [];
44
- this.uploadMetadata = {
45
- numTestResults: 0,
46
- numTotalAttachments: 0,
47
- sizeTotalAttachments: 0,
48
- };
49
- this.numWorkers = -1;
50
- this.testRunUrl = "";
51
- this.enableResultPublish = true;
52
- this._addInformationalMessage = (message) => {
53
- this.informationalMessages.push(message);
54
- };
55
- this._addKeyToInformationMessage = (key) => {
56
- this.processedErrorMessageKeys.push(key);
57
- };
58
- this._isInformationMessagePresent = (key) => {
59
- return this.processedErrorMessageKeys.includes(key);
60
- };
61
- this._reporterFailureHandler = (error) => {
62
- if (!this._isInformationMessagePresent(error.key)) {
63
- this._addKeyToInformationMessage(error.key);
64
- this._addInformationalMessage(error.message);
65
- }
66
- this.isTokenValid = false;
67
- };
68
- this.renewSasUriIfNeeded = async () => {
69
- if (this.sasUri === undefined ||
70
- !ReporterUtils.isTimeGreaterThanCurrentPlus10Minutes(this.sasUri)) {
71
- this.sasUri = await this.serviceClient.createStorageUri();
72
- reporterLogger.info(`\nFetched SAS URI with validity: ${this.sasUri.expiresAt} and access: ${this.sasUri.accessLevel}.`);
73
- }
74
- };
75
- if ((config === null || config === void 0 ? void 0 : config.enableGitHubSummary) !== undefined) {
59
+ if (config?.enableGitHubSummary !== undefined) {
76
60
  this.enableGitHubSummary = config.enableGitHubSummary;
77
61
  }
78
- if ((config === null || config === void 0 ? void 0 : config.enableResultPublish) !== undefined) {
62
+ if (config?.enableResultPublish !== undefined) {
79
63
  this.enableResultPublish = config.enableResultPublish;
80
64
  }
81
65
  }
@@ -84,6 +68,22 @@ class MPTReporter {
84
68
  this.errorMessages.push(this.reporterUtils.redactAccessToken(errorMessage));
85
69
  }
86
70
  }
71
+ _addInformationalMessage = (message) => {
72
+ this.informationalMessages.push(message);
73
+ };
74
+ _addKeyToInformationMessage = (key) => {
75
+ this.processedErrorMessageKeys.push(key);
76
+ };
77
+ _isInformationMessagePresent = (key) => {
78
+ return this.processedErrorMessageKeys.includes(key);
79
+ };
80
+ _reporterFailureHandler = (error) => {
81
+ if (!this._isInformationMessagePresent(error.key)) {
82
+ this._addKeyToInformationMessage(error.key);
83
+ this._addInformationalMessage(error.message);
84
+ }
85
+ this.isTokenValid = false;
86
+ };
87
87
  /**
88
88
  * @public
89
89
  *
@@ -189,7 +189,7 @@ class MPTReporter {
189
189
  process.stdout.write(`\n`);
190
190
  try {
191
191
  const testRunResponse = await this.serviceClient.patchTestRun(this.ciInfo);
192
- reporterLogger.info(`\nTest run report successfully initialized: ${testRunResponse === null || testRunResponse === void 0 ? void 0 : testRunResponse.displayName}.`);
192
+ reporterLogger.info(`\nTest run report successfully initialized: ${testRunResponse?.displayName}.`);
193
193
  process.stdout.write(`Initializing reporting for this test run. You can view the results at: https://playwright.microsoft.com/workspaces/${encodeURIComponent(this.envVariables.accountId)}/runs/${encodeURIComponent(this.envVariables.runId)}\n`);
194
194
  const shardResponse = await this.serviceClient.postTestRunShardStart();
195
195
  this.shard = shardResponse;
@@ -261,8 +261,14 @@ class MPTReporter {
261
261
  reporterLogger.error(`\nError in uploading test run information: ${err.message}`);
262
262
  }
263
263
  }
264
+ renewSasUriIfNeeded = async () => {
265
+ if (this.sasUri === undefined ||
266
+ !ReporterUtils.isTimeGreaterThanCurrentPlus10Minutes(this.sasUri)) {
267
+ this.sasUri = await this.serviceClient.createStorageUri();
268
+ reporterLogger.info(`\nFetched SAS URI with validity: ${this.sasUri.expiresAt} and access: ${this.sasUri.accessLevel}.`);
269
+ }
270
+ };
264
271
  async _uploadTestResultAttachments(testExecutionId, testAttachments, otherAttachments) {
265
- var _a;
266
272
  try {
267
273
  this.isTestRunStartSuccess = await this.promiseOnBegin;
268
274
  if (!this.isTestRunStartSuccess) {
@@ -276,7 +282,7 @@ class MPTReporter {
276
282
  }
277
283
  for (const otherAttachment of otherAttachments) {
278
284
  await this.renewSasUriIfNeeded();
279
- const match = (_a = otherAttachment === null || otherAttachment === void 0 ? void 0 : otherAttachment.contentType) === null || _a === void 0 ? void 0 : _a.match(/charset=(.*)/);
285
+ const match = otherAttachment?.contentType?.match(/charset=(.*)/);
280
286
  const charset = match && match.length > 1 ? match[1] : "utf-8";
281
287
  await this.storageClient.uploadBuffer(this.sasUri.uri, otherAttachment.body.toString(charset || "utf-8"), `${testExecutionId}/${otherAttachment.name}`);
282
288
  }