@azure/playwright 1.0.1-alpha.20251224.1 → 1.0.1-alpha.20251225.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 (141) hide show
  1. package/dist/browser/common/constants.d.ts +13 -0
  2. package/dist/browser/common/constants.d.ts.map +1 -1
  3. package/dist/browser/common/constants.js +13 -0
  4. package/dist/browser/common/constants.js.map +1 -1
  5. package/dist/browser/common/messages.d.ts +41 -0
  6. package/dist/browser/common/messages.d.ts.map +1 -1
  7. package/dist/browser/common/messages.js +41 -0
  8. package/dist/browser/common/messages.js.map +1 -1
  9. package/dist/browser/common/playwrightServiceConfig.d.ts +2 -0
  10. package/dist/browser/common/playwrightServiceConfig.d.ts.map +1 -1
  11. package/dist/browser/common/playwrightServiceConfig.js +4 -0
  12. package/dist/browser/common/playwrightServiceConfig.js.map +1 -1
  13. package/dist/browser/common/types.d.ts +13 -0
  14. package/dist/browser/common/types.d.ts.map +1 -1
  15. package/dist/browser/common/types.js.map +1 -1
  16. package/dist/browser/reporter/index.d.ts +10 -0
  17. package/dist/browser/reporter/index.d.ts.map +1 -0
  18. package/dist/browser/reporter/index.js +12 -0
  19. package/dist/browser/reporter/index.js.map +1 -0
  20. package/dist/browser/reporter/playwrightReporter.d.ts +21 -0
  21. package/dist/browser/reporter/playwrightReporter.d.ts.map +1 -0
  22. package/dist/browser/reporter/playwrightReporter.js +88 -0
  23. package/dist/browser/reporter/playwrightReporter.js.map +1 -0
  24. package/dist/browser/utils/playwrightReporterStorageManager.d.ts +14 -0
  25. package/dist/browser/utils/playwrightReporterStorageManager.d.ts.map +1 -0
  26. package/dist/browser/utils/playwrightReporterStorageManager.js +310 -0
  27. package/dist/browser/utils/playwrightReporterStorageManager.js.map +1 -0
  28. package/dist/browser/utils/playwrightServiceApicall.d.ts +1 -0
  29. package/dist/browser/utils/playwrightServiceApicall.d.ts.map +1 -1
  30. package/dist/browser/utils/playwrightServiceApicall.js +18 -1
  31. package/dist/browser/utils/playwrightServiceApicall.js.map +1 -1
  32. package/dist/browser/utils/utils.d.ts +14 -1
  33. package/dist/browser/utils/utils.d.ts.map +1 -1
  34. package/dist/browser/utils/utils.js +119 -0
  35. package/dist/browser/utils/utils.js.map +1 -1
  36. package/dist/commonjs/common/constants.d.ts +13 -0
  37. package/dist/commonjs/common/constants.d.ts.map +1 -1
  38. package/dist/commonjs/common/constants.js +14 -1
  39. package/dist/commonjs/common/constants.js.map +1 -1
  40. package/dist/commonjs/common/messages.d.ts +41 -0
  41. package/dist/commonjs/common/messages.d.ts.map +1 -1
  42. package/dist/commonjs/common/messages.js +41 -0
  43. package/dist/commonjs/common/messages.js.map +1 -1
  44. package/dist/commonjs/common/playwrightServiceConfig.d.ts +2 -0
  45. package/dist/commonjs/common/playwrightServiceConfig.d.ts.map +1 -1
  46. package/dist/commonjs/common/playwrightServiceConfig.js +4 -0
  47. package/dist/commonjs/common/playwrightServiceConfig.js.map +1 -1
  48. package/dist/commonjs/common/types.d.ts +13 -0
  49. package/dist/commonjs/common/types.d.ts.map +1 -1
  50. package/dist/commonjs/common/types.js.map +1 -1
  51. package/dist/commonjs/reporter/index.d.ts +10 -0
  52. package/dist/commonjs/reporter/index.d.ts.map +1 -0
  53. package/dist/commonjs/reporter/index.js +15 -0
  54. package/dist/commonjs/reporter/index.js.map +1 -0
  55. package/dist/commonjs/reporter/playwrightReporter.d.ts +21 -0
  56. package/dist/commonjs/reporter/playwrightReporter.d.ts.map +1 -0
  57. package/dist/commonjs/reporter/playwrightReporter.js +91 -0
  58. package/dist/commonjs/reporter/playwrightReporter.js.map +1 -0
  59. package/dist/commonjs/utils/playwrightReporterStorageManager.d.ts +14 -0
  60. package/dist/commonjs/utils/playwrightReporterStorageManager.d.ts.map +1 -0
  61. package/dist/commonjs/utils/playwrightReporterStorageManager.js +314 -0
  62. package/dist/commonjs/utils/playwrightReporterStorageManager.js.map +1 -0
  63. package/dist/commonjs/utils/playwrightServiceApicall.d.ts +1 -0
  64. package/dist/commonjs/utils/playwrightServiceApicall.d.ts.map +1 -1
  65. package/dist/commonjs/utils/playwrightServiceApicall.js +17 -0
  66. package/dist/commonjs/utils/playwrightServiceApicall.js.map +1 -1
  67. package/dist/commonjs/utils/utils.d.ts +14 -1
  68. package/dist/commonjs/utils/utils.d.ts.map +1 -1
  69. package/dist/commonjs/utils/utils.js +125 -0
  70. package/dist/commonjs/utils/utils.js.map +1 -1
  71. package/dist/esm/common/constants.d.ts +13 -0
  72. package/dist/esm/common/constants.d.ts.map +1 -1
  73. package/dist/esm/common/constants.js +13 -0
  74. package/dist/esm/common/constants.js.map +1 -1
  75. package/dist/esm/common/messages.d.ts +41 -0
  76. package/dist/esm/common/messages.d.ts.map +1 -1
  77. package/dist/esm/common/messages.js +41 -0
  78. package/dist/esm/common/messages.js.map +1 -1
  79. package/dist/esm/common/playwrightServiceConfig.d.ts +2 -0
  80. package/dist/esm/common/playwrightServiceConfig.d.ts.map +1 -1
  81. package/dist/esm/common/playwrightServiceConfig.js +4 -0
  82. package/dist/esm/common/playwrightServiceConfig.js.map +1 -1
  83. package/dist/esm/common/types.d.ts +13 -0
  84. package/dist/esm/common/types.d.ts.map +1 -1
  85. package/dist/esm/common/types.js.map +1 -1
  86. package/dist/esm/reporter/index.d.ts +10 -0
  87. package/dist/esm/reporter/index.d.ts.map +1 -0
  88. package/dist/esm/reporter/index.js +12 -0
  89. package/dist/esm/reporter/index.js.map +1 -0
  90. package/dist/esm/reporter/playwrightReporter.d.ts +21 -0
  91. package/dist/esm/reporter/playwrightReporter.d.ts.map +1 -0
  92. package/dist/esm/reporter/playwrightReporter.js +88 -0
  93. package/dist/esm/reporter/playwrightReporter.js.map +1 -0
  94. package/dist/esm/utils/playwrightReporterStorageManager.d.ts +14 -0
  95. package/dist/esm/utils/playwrightReporterStorageManager.d.ts.map +1 -0
  96. package/dist/esm/utils/playwrightReporterStorageManager.js +310 -0
  97. package/dist/esm/utils/playwrightReporterStorageManager.js.map +1 -0
  98. package/dist/esm/utils/playwrightServiceApicall.d.ts +1 -0
  99. package/dist/esm/utils/playwrightServiceApicall.d.ts.map +1 -1
  100. package/dist/esm/utils/playwrightServiceApicall.js +18 -1
  101. package/dist/esm/utils/playwrightServiceApicall.js.map +1 -1
  102. package/dist/esm/utils/utils.d.ts +14 -1
  103. package/dist/esm/utils/utils.d.ts.map +1 -1
  104. package/dist/esm/utils/utils.js +119 -0
  105. package/dist/esm/utils/utils.js.map +1 -1
  106. package/dist/react-native/common/constants.d.ts +13 -0
  107. package/dist/react-native/common/constants.d.ts.map +1 -1
  108. package/dist/react-native/common/constants.js +13 -0
  109. package/dist/react-native/common/constants.js.map +1 -1
  110. package/dist/react-native/common/messages.d.ts +41 -0
  111. package/dist/react-native/common/messages.d.ts.map +1 -1
  112. package/dist/react-native/common/messages.js +41 -0
  113. package/dist/react-native/common/messages.js.map +1 -1
  114. package/dist/react-native/common/playwrightServiceConfig.d.ts +2 -0
  115. package/dist/react-native/common/playwrightServiceConfig.d.ts.map +1 -1
  116. package/dist/react-native/common/playwrightServiceConfig.js +4 -0
  117. package/dist/react-native/common/playwrightServiceConfig.js.map +1 -1
  118. package/dist/react-native/common/types.d.ts +13 -0
  119. package/dist/react-native/common/types.d.ts.map +1 -1
  120. package/dist/react-native/common/types.js.map +1 -1
  121. package/dist/react-native/reporter/index.d.ts +10 -0
  122. package/dist/react-native/reporter/index.d.ts.map +1 -0
  123. package/dist/react-native/reporter/index.js +12 -0
  124. package/dist/react-native/reporter/index.js.map +1 -0
  125. package/dist/react-native/reporter/playwrightReporter.d.ts +21 -0
  126. package/dist/react-native/reporter/playwrightReporter.d.ts.map +1 -0
  127. package/dist/react-native/reporter/playwrightReporter.js +88 -0
  128. package/dist/react-native/reporter/playwrightReporter.js.map +1 -0
  129. package/dist/react-native/utils/playwrightReporterStorageManager.d.ts +14 -0
  130. package/dist/react-native/utils/playwrightReporterStorageManager.d.ts.map +1 -0
  131. package/dist/react-native/utils/playwrightReporterStorageManager.js +310 -0
  132. package/dist/react-native/utils/playwrightReporterStorageManager.js.map +1 -0
  133. package/dist/react-native/utils/playwrightServiceApicall.d.ts +1 -0
  134. package/dist/react-native/utils/playwrightServiceApicall.d.ts.map +1 -1
  135. package/dist/react-native/utils/playwrightServiceApicall.js +18 -1
  136. package/dist/react-native/utils/playwrightServiceApicall.js.map +1 -1
  137. package/dist/react-native/utils/utils.d.ts +14 -1
  138. package/dist/react-native/utils/utils.d.ts.map +1 -1
  139. package/dist/react-native/utils/utils.js +119 -0
  140. package/dist/react-native/utils/utils.js.map +1 -1
  141. package/package.json +22 -2
@@ -1,4 +1,4 @@
1
- import type { VersionInfo, RunConfig } from "../common/types.js";
1
+ import type { VersionInfo, RunConfig, WorkspaceMetaData } from "../common/types.js";
2
2
  import type { TokenCredential } from "@azure/core-auth";
3
3
  import { FullConfig } from "@playwright/test";
4
4
  import { CIInfo } from "./cIInfoProvider.js";
@@ -40,4 +40,17 @@ export declare function getTestRunApiUrl(): string;
40
40
  export declare function isNullOrEmpty(str: string | null | undefined): boolean;
41
41
  export declare function getRunName(ciInfo: CIInfo): Promise<string>;
42
42
  export declare function extractErrorMessage(responseBody: string): string;
43
+ export declare function getWorkspaceMetaDataApiUrl(): string;
44
+ export declare function getHtmlReporterOutputFolder(config: FullConfig | undefined): string;
45
+ export declare function getContentType(filePath: string): string;
46
+ export declare function calculateOptimalConcurrency(files: Array<{
47
+ size: number;
48
+ }>): number;
49
+ export declare function collectAllFiles(folderPath: string, basePath: string, runIdFolderPrefix?: string): Array<{
50
+ fullPath: string;
51
+ relativePath: string;
52
+ size: number;
53
+ contentType: string;
54
+ }>;
55
+ export declare function getPortalTestRunUrl(workspaceMetadata: WorkspaceMetaData | null): string;
43
56
  //# sourceMappingURL=utils.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../src/utils/utils.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAqB,WAAW,EAAc,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAUhG,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAMxD,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAgB,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAK3D,OAAO,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AACjE,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAEzC,eAAO,MAAM,iBAAiB,QAAO,MAapC,CAAC;AAIF,eAAO,MAAM,sBAAsB,GACjC,OAAO;IACL,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,EAAE,MAAM,CAAC;IAChB,sBAAsB,CAAC,EAAE,CAAC,YAAY,EAAE,MAAM,KAAK,MAAM,CAAC;CAC3D,EACD,eAAe,MAAM,KACpB,KAUF,CAAC;AAEF,eAAO,MAAM,4BAA4B,GACvC,OAAO;IACL,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,EAAE,MAAM,CAAC;IAChB,sBAAsB,CAAC,EAAE,CAAC,YAAY,EAAE,MAAM,KAAK,MAAM,CAAC;CAC3D,EACD,eAAe,MAAM,KACpB,KASF,CAAC;AAEF,eAAO,MAAM,4BAA4B,QAAO;IAC9C,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;CACnB,GAAG,IAgBH,CAAC;AAEF,eAAO,MAAM,cAAc,QAAO,MAAM,GAAG,SAE1C,CAAC;AAEF,eAAO,MAAM,iBAAiB,QAAO,MAAM,GAAG,SAE7C,CAAC;AAEF,eAAO,MAAM,WAAW,GAAI,MAAM,MAAM,GAAG,IAAI,GAAG,SAAS,KAAG,OAM7D,CAAC;AAEF,eAAO,MAAM,cAAc,QAAO,MAIjC,CAAC;AAEF,eAAO,MAAM,oBAAoB,GAAI,OAAO,MAAM,EAAE,IAAI,MAAM,EAAE,YAAY,MAAM,KAAG,MAEpF,CAAC;AAEF,eAAO,MAAM,kBAAkB,QAAO,IAKrC,CAAC;AAEF,eAAO,MAAM,aAAa,GAAI,OAAO,MAAM,KAAG,IAM7C,CAAC;AACF,eAAO,MAAM,cAAc,GACzB,2BAA2B,CAAC,KAAK,EAAE;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,KAAK,IAAI,KAC3E,IAqBF,CAAC;AAYF,eAAO,MAAM,8BAA8B,QAAO,IAUjD,CAAC;AAEF,eAAO,MAAM,0BAA0B,GAAU,aAAa,eAAe,KAAG,OAAO,CAAC,MAAM,CAW7F,CAAC;AAEF,eAAO,MAAM,cAAc,GAAI,SAAS,MAAM,KAAG,WAYhD,CAAC;AAEF,eAAO,MAAM,yBAAyB,QAAO,IAc5C,CAAC;AAEF,eAAO,MAAM,gBAAgB,GAAI,QAAQ,UAAU,KAAG,SAcrD,CAAC;AAEF,wBAAgB,gBAAgB,IAAI,MAAM,CAWzC;AAED,wBAAgB,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,OAAO,CAErE;AAkBD,wBAAsB,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAyBhE;AAED,wBAAgB,mBAAmB,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM,CAchE"}
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../src/utils/utils.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAEV,WAAW,EAEX,SAAS,EACT,iBAAiB,EAClB,MAAM,oBAAoB,CAAC;AAU5B,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAMxD,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAgB,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAQ3D,OAAO,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AACjE,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAEzC,eAAO,MAAM,iBAAiB,QAAO,MAapC,CAAC;AAIF,eAAO,MAAM,sBAAsB,GACjC,OAAO;IACL,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,EAAE,MAAM,CAAC;IAChB,sBAAsB,CAAC,EAAE,CAAC,YAAY,EAAE,MAAM,KAAK,MAAM,CAAC;CAC3D,EACD,eAAe,MAAM,KACpB,KAUF,CAAC;AAEF,eAAO,MAAM,4BAA4B,GACvC,OAAO;IACL,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,EAAE,MAAM,CAAC;IAChB,sBAAsB,CAAC,EAAE,CAAC,YAAY,EAAE,MAAM,KAAK,MAAM,CAAC;CAC3D,EACD,eAAe,MAAM,KACpB,KASF,CAAC;AAEF,eAAO,MAAM,4BAA4B,QAAO;IAC9C,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;CACnB,GAAG,IAgBH,CAAC;AAEF,eAAO,MAAM,cAAc,QAAO,MAAM,GAAG,SAE1C,CAAC;AAEF,eAAO,MAAM,iBAAiB,QAAO,MAAM,GAAG,SAE7C,CAAC;AAEF,eAAO,MAAM,WAAW,GAAI,MAAM,MAAM,GAAG,IAAI,GAAG,SAAS,KAAG,OAM7D,CAAC;AAEF,eAAO,MAAM,cAAc,QAAO,MAIjC,CAAC;AAEF,eAAO,MAAM,oBAAoB,GAAI,OAAO,MAAM,EAAE,IAAI,MAAM,EAAE,YAAY,MAAM,KAAG,MAEpF,CAAC;AAEF,eAAO,MAAM,kBAAkB,QAAO,IAKrC,CAAC;AAEF,eAAO,MAAM,aAAa,GAAI,OAAO,MAAM,KAAG,IAM7C,CAAC;AACF,eAAO,MAAM,cAAc,GACzB,2BAA2B,CAAC,KAAK,EAAE;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,KAAK,IAAI,KAC3E,IAqBF,CAAC;AAYF,eAAO,MAAM,8BAA8B,QAAO,IAUjD,CAAC;AAEF,eAAO,MAAM,0BAA0B,GAAU,aAAa,eAAe,KAAG,OAAO,CAAC,MAAM,CAW7F,CAAC;AAEF,eAAO,MAAM,cAAc,GAAI,SAAS,MAAM,KAAG,WAYhD,CAAC;AAEF,eAAO,MAAM,yBAAyB,QAAO,IAc5C,CAAC;AAEF,eAAO,MAAM,gBAAgB,GAAI,QAAQ,UAAU,KAAG,SAcrD,CAAC;AAEF,wBAAgB,gBAAgB,IAAI,MAAM,CAWzC;AAED,wBAAgB,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,OAAO,CAErE;AAkBD,wBAAsB,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAyBhE;AAED,wBAAgB,mBAAmB,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM,CAchE;AAED,wBAAgB,0BAA0B,IAAI,MAAM,CASnD;AAED,wBAAgB,2BAA2B,CAAC,MAAM,EAAE,UAAU,GAAG,SAAS,GAAG,MAAM,CAmBlF;AAED,wBAAgB,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAyBvD;AAED,wBAAgB,2BAA2B,CAAC,KAAK,EAAE,KAAK,CAAC;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC,GAAG,MAAM,CA2BlF;AAED,wBAAgB,eAAe,CAC7B,UAAU,EAAE,MAAM,EAClB,QAAQ,EAAE,MAAM,EAChB,iBAAiB,CAAC,EAAE,MAAM,GACzB,KAAK,CAAC;IACP,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;CACrB,CAAC,CA2CD;AAED,wBAAgB,mBAAmB,CAAC,iBAAiB,EAAE,iBAAiB,GAAG,IAAI,GAAG,MAAM,CAoBvF"}
@@ -11,6 +11,9 @@ import { createEntraIdAccessToken } from "../common/entraIdAccessToken.js";
11
11
  import { CI_PROVIDERS } from "./cIInfoProvider.js";
12
12
  import { exec } from "child_process";
13
13
  import { getPackageVersionFromFolder } from "./getPackageVersion.js";
14
+ import { readdirSync, statSync } from "fs";
15
+ import { join, relative } from "path";
16
+ import { UploadConstants } from "../common/constants.js";
14
17
  // Re-exporting for backward compatibility
15
18
  export { getPlaywrightVersion } from "./getPlaywrightVersion.js";
16
19
  export { parseJwt } from "./parseJwt.js";
@@ -257,4 +260,120 @@ export function extractErrorMessage(responseBody) {
257
260
  return responseBody;
258
261
  }
259
262
  }
263
+ export function getWorkspaceMetaDataApiUrl() {
264
+ const result = populateValuesFromServiceUrl();
265
+ if (!result?.region || !result?.domain || !result?.accountId) {
266
+ exitWithFailureMessage(ServiceErrorMessageConstants.NO_SERVICE_URL_ERROR);
267
+ }
268
+ const baseUrl = `https://${result?.region}.api.${result?.domain}/playwrightworkspaces/${result?.accountId}`;
269
+ return `${baseUrl}?api-version=${Constants.LatestAPIVersion}`;
270
+ }
271
+ export function getHtmlReporterOutputFolder(config) {
272
+ const defaultFolder = "playwright-report";
273
+ if (!config?.reporter) {
274
+ return defaultFolder;
275
+ }
276
+ for (const reporter of config.reporter) {
277
+ if (Array.isArray(reporter)) {
278
+ const [reporterName, options] = reporter;
279
+ if (reporterName === "html" && options && typeof options === "object") {
280
+ return options.outputFolder || defaultFolder;
281
+ }
282
+ }
283
+ else if (typeof reporter === "string" && reporter === "html") {
284
+ return defaultFolder;
285
+ }
286
+ }
287
+ return defaultFolder;
288
+ }
289
+ export function getContentType(filePath) {
290
+ const ext = filePath.toLowerCase().split(".").pop();
291
+ const contentTypes = {
292
+ html: "text/html",
293
+ css: "text/css",
294
+ js: "application/javascript",
295
+ json: "application/json",
296
+ png: "image/png",
297
+ jpg: "image/jpeg",
298
+ jpeg: "image/jpeg",
299
+ svg: "image/svg+xml",
300
+ ico: "image/x-icon",
301
+ txt: "text/plain",
302
+ ttf: "font/ttf",
303
+ woff: "font/woff",
304
+ woff2: "font/woff2",
305
+ webmanifest: "application/manifest+json",
306
+ map: "application/json",
307
+ xml: "application/xml",
308
+ pdf: "application/pdf",
309
+ zip: "application/zip",
310
+ };
311
+ return contentTypes[ext || ""] || "application/octet-stream";
312
+ }
313
+ export function calculateOptimalConcurrency(files) {
314
+ const totalFiles = files.length;
315
+ const totalSize = files.reduce((sum, f) => sum + f.size, 0);
316
+ const avgFileSize = totalSize / totalFiles;
317
+ let optimalConcurrency;
318
+ if (totalFiles <= 10) {
319
+ optimalConcurrency = Math.min(totalFiles, 10);
320
+ }
321
+ else if (avgFileSize < UploadConstants.SMALL_FILE_THRESHOLD) {
322
+ optimalConcurrency = Math.min(UploadConstants.MAX_CONCURRENCY, Math.max(UploadConstants.BASE_CONCURRENCY, totalFiles / 50));
323
+ }
324
+ else if (totalFiles > 1000) {
325
+ optimalConcurrency = Math.min(UploadConstants.MAX_CONCURRENCY, UploadConstants.BASE_CONCURRENCY + Math.floor(totalFiles / 200));
326
+ }
327
+ else {
328
+ optimalConcurrency = Math.min(UploadConstants.MAX_CONCURRENCY, UploadConstants.BASE_CONCURRENCY);
329
+ }
330
+ return Math.floor(optimalConcurrency);
331
+ }
332
+ export function collectAllFiles(folderPath, basePath, runIdFolderPrefix) {
333
+ const files = [];
334
+ const stack = [folderPath];
335
+ while (stack.length > 0) {
336
+ const currentPath = stack.pop();
337
+ try {
338
+ const items = readdirSync(currentPath);
339
+ for (const item of items) {
340
+ const itemPath = join(currentPath, item);
341
+ const stats = statSync(itemPath);
342
+ if (stats.isDirectory()) {
343
+ stack.push(itemPath);
344
+ }
345
+ else {
346
+ let relativePath = relative(basePath, itemPath).split("\\").join("/");
347
+ if (runIdFolderPrefix) {
348
+ relativePath = `${runIdFolderPrefix}/${relativePath}`;
349
+ }
350
+ files.push({
351
+ fullPath: itemPath,
352
+ relativePath,
353
+ size: stats.size,
354
+ contentType: getContentType(itemPath),
355
+ });
356
+ }
357
+ }
358
+ }
359
+ catch (error) {
360
+ continue;
361
+ }
362
+ }
363
+ return files;
364
+ }
365
+ export function getPortalTestRunUrl(workspaceMetadata) {
366
+ const { subscriptionId, resourceId, name } = workspaceMetadata ?? {};
367
+ if (!subscriptionId || !resourceId || !name) {
368
+ throw new Error("Missing required workspace metadata: subscriptionId, resourceId, and name are required");
369
+ }
370
+ // Extract resource group from resourceId
371
+ const resourceIdParts = resourceId.split("/");
372
+ const resourceGroupIndex = resourceIdParts.findIndex((part) => part.toLowerCase() === "resourcegroups");
373
+ if (resourceGroupIndex === -1 || resourceGroupIndex + 1 >= resourceIdParts.length) {
374
+ throw new Error("Invalid resourceId format: could not extract resource group name");
375
+ }
376
+ const resourceGroupName = resourceIdParts[resourceGroupIndex + 1];
377
+ return `https://ms.portal.azure.com/#@microsoft.onmicrosoft.com/resource/subscriptions/${encodeURIComponent(subscriptionId)}/resourceGroups/${encodeURIComponent(resourceGroupName)}/providers/Microsoft.LoadTestService/playwrightWorkspaces/${encodeURIComponent(name)}/TestRuns`;
378
+ }
260
379
  //# sourceMappingURL=utils.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../src/utils/utils.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport type { AccessTokenClaims, VersionInfo, JwtPayload, RunConfig } from \"../common/types.js\";\nimport {\n Constants,\n InternalEnvironmentVariables,\n ServiceEnvironmentVariable,\n RunConfigConstants,\n GitHubActionsConstants,\n} from \"../common/constants.js\";\nimport { ServiceErrorMessageConstants } from \"../common/messages.js\";\nimport { coreLogger } from \"../common/logger.js\";\nimport type { TokenCredential } from \"@azure/core-auth\";\nimport process from \"node:process\";\nimport { randomUUID } from \"node:crypto\";\nimport { parseJwt } from \"./parseJwt.js\";\nimport { getPlaywrightVersion } from \"./getPlaywrightVersion.js\";\nimport { createEntraIdAccessToken } from \"../common/entraIdAccessToken.js\";\nimport { FullConfig } from \"@playwright/test\";\nimport { CI_PROVIDERS, CIInfo } from \"./cIInfoProvider.js\";\nimport { exec } from \"child_process\";\nimport { getPackageVersionFromFolder } from \"./getPackageVersion.js\";\n\n// Re-exporting for backward compatibility\nexport { getPlaywrightVersion } from \"./getPlaywrightVersion.js\";\nexport { parseJwt } from \"./parseJwt.js\";\n\nexport const getPackageVersion = (): string => {\n // hacky way to get package version\n // try from dist folder first (customer perspective)\n const distVersion = getPackageVersionFromFolder(\"../../../\");\n if (distVersion) {\n return distVersion;\n }\n // if not found, try from src folder (internal test suite)\n const srcVersion = getPackageVersionFromFolder(\"../../\");\n if (srcVersion) {\n return srcVersion;\n }\n return \"unknown-version\";\n};\n\n// const playwrightServiceConfig = new PlaywrightServiceConfig();\n\nexport const exitWithFailureMessage = (\n error: {\n key: string;\n message: string;\n formatWithErrorDetails?: (errorDetails: string) => string;\n },\n errorDetails?: string,\n): never => {\n console.log();\n\n if (error.formatWithErrorDetails && errorDetails) {\n console.error(error.formatWithErrorDetails(errorDetails));\n } else {\n console.error(error.message);\n }\n // eslint-disable-next-line n/no-process-exit\n process.exit(1);\n};\n\nexport const throwErrorWithFailureMessage = (\n error: {\n key: string;\n message: string;\n formatWithErrorDetails?: (errorDetails: string) => string;\n },\n errorDetails?: string,\n): never => {\n console.log();\n\n const finalMessage =\n error.formatWithErrorDetails && errorDetails\n ? error.formatWithErrorDetails(errorDetails)\n : error.message;\n\n throw new Error(finalMessage);\n};\n\nexport const populateValuesFromServiceUrl = (): {\n region: string;\n domain: string;\n accountId: string;\n} | null => {\n // Service URL format: wss://<region>.api.playwright.microsoft.com/accounts/<workspace-id>/browsers\n const url = process.env[\"PLAYWRIGHT_SERVICE_URL\"]!;\n if (url) {\n const parts = url.split(\"/\");\n\n if (parts.length > 2) {\n const subdomainParts = parts[2]!.split(\".\");\n const region = subdomainParts.length > 0 ? subdomainParts[0] : null;\n const domain = subdomainParts.slice(2).join(\".\");\n const accountId = parts[4];\n\n return { region: region!, domain: domain!, accountId: accountId! };\n }\n }\n return null;\n};\n\nexport const getAccessToken = (): string | undefined => {\n return process.env[ServiceEnvironmentVariable.PLAYWRIGHT_SERVICE_ACCESS_TOKEN];\n};\n\nexport const getServiceBaseURL = (): string | undefined => {\n return process.env[ServiceEnvironmentVariable.PLAYWRIGHT_SERVICE_URL];\n};\n\nexport const isValidGuid = (guid: string | null | undefined): boolean => {\n if (!guid) {\n return false;\n }\n const guidRegex = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;\n return guidRegex.test(guid);\n};\n\nexport const getAndSetRunId = (): string => {\n const runId = randomUUID();\n process.env[InternalEnvironmentVariables.MPT_SERVICE_RUN_ID] = runId;\n return runId;\n};\n\nexport const getServiceWSEndpoint = (runId: string, os: string, apiVersion: string): string => {\n return `${getServiceBaseURL()}?runId=${encodeURIComponent(runId)}&os=${os}&api-version=${apiVersion}`;\n};\n\nexport const validateServiceUrl = (): void => {\n const serviceUrl = getServiceBaseURL();\n if (!serviceUrl) {\n exitWithFailureMessage(ServiceErrorMessageConstants.NO_SERVICE_URL_ERROR);\n }\n};\n\nexport const ValidateRunID = (runID: string): void => {\n const isValidRunID = isValidGuid(runID);\n if (!isValidRunID) {\n const errorMessage = ServiceErrorMessageConstants.INVALID_RUN_ID_FORMAT.message;\n throw new Error(errorMessage);\n }\n};\nexport const validateMptPAT = (\n validationFailureCallback: (error: { key: string; message: string }) => void,\n): void => {\n try {\n const accessToken = getAccessToken();\n const result = populateValuesFromServiceUrl();\n if (!accessToken) {\n validationFailureCallback(ServiceErrorMessageConstants.NO_AUTH_ERROR);\n }\n const claims = parseJwt<Partial<AccessTokenClaims>>(accessToken!);\n if (!claims.exp) {\n validationFailureCallback(ServiceErrorMessageConstants.INVALID_MPT_PAT_ERROR);\n }\n if (Date.now() >= claims.exp! * 1000) {\n validationFailureCallback(ServiceErrorMessageConstants.EXPIRED_MPT_PAT_ERROR);\n }\n if (result!.accountId !== claims!.pwid) {\n validationFailureCallback(ServiceErrorMessageConstants.WORKSPACE_MISMATCH_ERROR);\n }\n } catch (err) {\n coreLogger.error(err);\n exitWithFailureMessage(ServiceErrorMessageConstants.INVALID_MPT_PAT_ERROR);\n }\n};\nconst isTokenExpiringSoon = (expirationTime: number, currentTime: number): boolean => {\n return expirationTime * 1000 - currentTime <= Constants.SevenDaysInMS;\n};\n\nconst warnAboutTokenExpiry = (expirationTime: number, currentTime: number): void => {\n const daysToExpiration = Math.ceil((expirationTime * 1000 - currentTime) / Constants.OneDayInMS);\n const expirationDate = new Date(expirationTime * 1000).toLocaleDateString();\n const expirationWarning = `Warning: The access token used for this test run will expire in ${daysToExpiration} days on ${expirationDate}. Generate a new token from the portal to avoid failures. For a simpler, more secure solution, switch to Microsoft Entra ID and eliminate token management. https://learn.microsoft.com/entra/identity/`;\n console.warn(expirationWarning);\n};\n\nexport const warnIfAccessTokenCloseToExpiry = (): void => {\n const accessToken = getAccessToken();\n if (!accessToken) {\n throw new Error(ServiceErrorMessageConstants.NO_AUTH_ERROR.message);\n }\n const claims = parseJwt<JwtPayload>(accessToken!);\n const currentTime = Date.now();\n if (isTokenExpiringSoon(claims.exp!, currentTime)) {\n warnAboutTokenExpiry(claims.exp!, currentTime);\n }\n};\n\nexport const fetchOrValidateAccessToken = async (credential?: TokenCredential): Promise<string> => {\n const entraIdAccessToken = createEntraIdAccessToken(credential);\n // Fetch a token or refresh if needed in a single call\n if (entraIdAccessToken.doesEntraIdAccessTokenNeedRotation()) {\n await entraIdAccessToken.fetchEntraIdAccessToken();\n }\n const token = getAccessToken();\n if (!token) {\n throw new Error(ServiceErrorMessageConstants.NO_AUTH_ERROR.message);\n }\n return token;\n};\n\nexport const getVersionInfo = (version: string): VersionInfo => {\n const regex = /^(\\d+)(?:\\.(\\d+))?(?:\\.(\\d+))?/;\n const match = version.match(regex);\n const versionInfo = {\n major: 0,\n minor: 0,\n patch: 0,\n };\n versionInfo.major = match && match[1] ? parseInt(match[1], 10) : 0;\n versionInfo.minor = match && match[2] ? parseInt(match[2], 10) : 0;\n versionInfo.patch = match && match[3] ? parseInt(match[3], 10) : 0;\n return versionInfo;\n};\n\nexport const validatePlaywrightVersion = (): void => {\n const minimumSupportedVersion = Constants.MinimumSupportedPlaywrightVersion;\n const installedVersion = getPlaywrightVersion();\n\n const minimumSupportedVersionInfo = getVersionInfo(minimumSupportedVersion);\n const installedVersionInfo = getVersionInfo(installedVersion);\n\n const isInstalledVersionGreater =\n installedVersionInfo.major > minimumSupportedVersionInfo.major ||\n (installedVersionInfo.major === minimumSupportedVersionInfo.major &&\n installedVersionInfo.minor >= minimumSupportedVersionInfo.minor);\n if (!isInstalledVersionGreater) {\n exitWithFailureMessage(ServiceErrorMessageConstants.INVALID_PLAYWRIGHT_VERSION_ERROR);\n }\n};\n\nexport const getTestRunConfig = (config: FullConfig): RunConfig => {\n const maxWorkers = config.workers || config.metadata.actualWorkers;\n const frameWorkVersion = config.version;\n\n const testRunConfig: RunConfig = {\n framework: {\n name: RunConfigConstants.TEST_FRAMEWORK_NAME,\n version: frameWorkVersion,\n runnerName: RunConfigConstants.TEST_FRAMEWORK_RUNNERNAME,\n },\n sdkLanguage: RunConfigConstants.TEST_SDK_LANGUAGE,\n maxWorkers: maxWorkers,\n };\n return testRunConfig;\n};\n\nexport function getTestRunApiUrl(): string {\n const result = populateValuesFromServiceUrl();\n const runId = process.env[InternalEnvironmentVariables.MPT_SERVICE_RUN_ID];\n\n if (!result?.region || !result?.domain || !result?.accountId) {\n exitWithFailureMessage(ServiceErrorMessageConstants.NO_SERVICE_URL_ERROR);\n }\n const baseUrl = `https://${result?.region}.reporting.api.${result?.domain}/playwrightworkspaces/${result?.accountId}/test-runs`;\n const url = runId ? `${baseUrl}/${runId}` : baseUrl;\n\n return `${url}?api-version=${Constants.LatestAPIVersion}`;\n}\n\nexport function isNullOrEmpty(str: string | null | undefined): boolean {\n return !str || str.trim() === \"\";\n}\n\nasync function runCommand(command: string): Promise<string> {\n return new Promise((resolve, reject) => {\n exec(command, (error, stdout, stderr) => {\n if (error) {\n reject(error);\n return;\n }\n if (stderr) {\n reject(new Error(stderr));\n return;\n }\n resolve(stdout.trim());\n });\n });\n}\n\nexport async function getRunName(ciInfo: CIInfo): Promise<string> {\n if (\n ciInfo.providerName === CI_PROVIDERS.GITHUB &&\n process.env[\"GITHUB_EVENT_NAME\"] === \"pull_request\"\n ) {\n const prNumber: string = `${process.env[\"GITHUB_REF_NAME\"]?.split(\"/\")[0]}`;\n const prLink: string = `${process.env[\"GITHUB_REPOSITORY\"]}/pull/${prNumber}`;\n return `PR# ${prNumber} on Repo: ${process.env[\"GITHUB_REPOSITORY\"]} (${prLink})`;\n }\n\n try {\n const gitVersion = await runCommand(GitHubActionsConstants.GIT_VERSION_COMMAND);\n if (isNullOrEmpty(gitVersion)) {\n throw new Error(\"Git is not installed on the machine\");\n }\n const isInsideWorkTree = await runCommand(GitHubActionsConstants.GIT_REV_PARSE);\n if (isInsideWorkTree !== \"true\") {\n throw new Error(\"Not inside a git repository\");\n }\n const gitCommitMessage = await runCommand(GitHubActionsConstants.GIT_COMMIT_MESSAGE_COMMAND);\n return gitCommitMessage;\n } catch (err) {\n coreLogger.error(`Error in getting git commit message: ${err}.`);\n return \"\";\n }\n}\n\nexport function extractErrorMessage(responseBody: string): string {\n if (!responseBody) {\n return \"\";\n }\n\n try {\n const errorResponse = JSON.parse(responseBody);\n if (errorResponse.error && errorResponse.error.message) {\n return errorResponse.error.message;\n }\n return responseBody;\n } catch (e) {\n return responseBody;\n }\n}\n"]}
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../src/utils/utils.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport type {\n AccessTokenClaims,\n VersionInfo,\n JwtPayload,\n RunConfig,\n WorkspaceMetaData,\n} from \"../common/types.js\";\nimport {\n Constants,\n InternalEnvironmentVariables,\n ServiceEnvironmentVariable,\n RunConfigConstants,\n GitHubActionsConstants,\n} from \"../common/constants.js\";\nimport { ServiceErrorMessageConstants } from \"../common/messages.js\";\nimport { coreLogger } from \"../common/logger.js\";\nimport type { TokenCredential } from \"@azure/core-auth\";\nimport process from \"node:process\";\nimport { randomUUID } from \"node:crypto\";\nimport { parseJwt } from \"./parseJwt.js\";\nimport { getPlaywrightVersion } from \"./getPlaywrightVersion.js\";\nimport { createEntraIdAccessToken } from \"../common/entraIdAccessToken.js\";\nimport { FullConfig } from \"@playwright/test\";\nimport { CI_PROVIDERS, CIInfo } from \"./cIInfoProvider.js\";\nimport { exec } from \"child_process\";\nimport { getPackageVersionFromFolder } from \"./getPackageVersion.js\";\nimport { readdirSync, statSync } from \"fs\";\nimport { join, relative } from \"path\";\nimport { UploadConstants } from \"../common/constants.js\";\n\n// Re-exporting for backward compatibility\nexport { getPlaywrightVersion } from \"./getPlaywrightVersion.js\";\nexport { parseJwt } from \"./parseJwt.js\";\n\nexport const getPackageVersion = (): string => {\n // hacky way to get package version\n // try from dist folder first (customer perspective)\n const distVersion = getPackageVersionFromFolder(\"../../../\");\n if (distVersion) {\n return distVersion;\n }\n // if not found, try from src folder (internal test suite)\n const srcVersion = getPackageVersionFromFolder(\"../../\");\n if (srcVersion) {\n return srcVersion;\n }\n return \"unknown-version\";\n};\n\n// const playwrightServiceConfig = new PlaywrightServiceConfig();\n\nexport const exitWithFailureMessage = (\n error: {\n key: string;\n message: string;\n formatWithErrorDetails?: (errorDetails: string) => string;\n },\n errorDetails?: string,\n): never => {\n console.log();\n\n if (error.formatWithErrorDetails && errorDetails) {\n console.error(error.formatWithErrorDetails(errorDetails));\n } else {\n console.error(error.message);\n }\n // eslint-disable-next-line n/no-process-exit\n process.exit(1);\n};\n\nexport const throwErrorWithFailureMessage = (\n error: {\n key: string;\n message: string;\n formatWithErrorDetails?: (errorDetails: string) => string;\n },\n errorDetails?: string,\n): never => {\n console.log();\n\n const finalMessage =\n error.formatWithErrorDetails && errorDetails\n ? error.formatWithErrorDetails(errorDetails)\n : error.message;\n\n throw new Error(finalMessage);\n};\n\nexport const populateValuesFromServiceUrl = (): {\n region: string;\n domain: string;\n accountId: string;\n} | null => {\n // Service URL format: wss://<region>.api.playwright.microsoft.com/accounts/<workspace-id>/browsers\n const url = process.env[\"PLAYWRIGHT_SERVICE_URL\"]!;\n if (url) {\n const parts = url.split(\"/\");\n\n if (parts.length > 2) {\n const subdomainParts = parts[2]!.split(\".\");\n const region = subdomainParts.length > 0 ? subdomainParts[0] : null;\n const domain = subdomainParts.slice(2).join(\".\");\n const accountId = parts[4];\n\n return { region: region!, domain: domain!, accountId: accountId! };\n }\n }\n return null;\n};\n\nexport const getAccessToken = (): string | undefined => {\n return process.env[ServiceEnvironmentVariable.PLAYWRIGHT_SERVICE_ACCESS_TOKEN];\n};\n\nexport const getServiceBaseURL = (): string | undefined => {\n return process.env[ServiceEnvironmentVariable.PLAYWRIGHT_SERVICE_URL];\n};\n\nexport const isValidGuid = (guid: string | null | undefined): boolean => {\n if (!guid) {\n return false;\n }\n const guidRegex = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;\n return guidRegex.test(guid);\n};\n\nexport const getAndSetRunId = (): string => {\n const runId = randomUUID();\n process.env[InternalEnvironmentVariables.MPT_SERVICE_RUN_ID] = runId;\n return runId;\n};\n\nexport const getServiceWSEndpoint = (runId: string, os: string, apiVersion: string): string => {\n return `${getServiceBaseURL()}?runId=${encodeURIComponent(runId)}&os=${os}&api-version=${apiVersion}`;\n};\n\nexport const validateServiceUrl = (): void => {\n const serviceUrl = getServiceBaseURL();\n if (!serviceUrl) {\n exitWithFailureMessage(ServiceErrorMessageConstants.NO_SERVICE_URL_ERROR);\n }\n};\n\nexport const ValidateRunID = (runID: string): void => {\n const isValidRunID = isValidGuid(runID);\n if (!isValidRunID) {\n const errorMessage = ServiceErrorMessageConstants.INVALID_RUN_ID_FORMAT.message;\n throw new Error(errorMessage);\n }\n};\nexport const validateMptPAT = (\n validationFailureCallback: (error: { key: string; message: string }) => void,\n): void => {\n try {\n const accessToken = getAccessToken();\n const result = populateValuesFromServiceUrl();\n if (!accessToken) {\n validationFailureCallback(ServiceErrorMessageConstants.NO_AUTH_ERROR);\n }\n const claims = parseJwt<Partial<AccessTokenClaims>>(accessToken!);\n if (!claims.exp) {\n validationFailureCallback(ServiceErrorMessageConstants.INVALID_MPT_PAT_ERROR);\n }\n if (Date.now() >= claims.exp! * 1000) {\n validationFailureCallback(ServiceErrorMessageConstants.EXPIRED_MPT_PAT_ERROR);\n }\n if (result!.accountId !== claims!.pwid) {\n validationFailureCallback(ServiceErrorMessageConstants.WORKSPACE_MISMATCH_ERROR);\n }\n } catch (err) {\n coreLogger.error(err);\n exitWithFailureMessage(ServiceErrorMessageConstants.INVALID_MPT_PAT_ERROR);\n }\n};\nconst isTokenExpiringSoon = (expirationTime: number, currentTime: number): boolean => {\n return expirationTime * 1000 - currentTime <= Constants.SevenDaysInMS;\n};\n\nconst warnAboutTokenExpiry = (expirationTime: number, currentTime: number): void => {\n const daysToExpiration = Math.ceil((expirationTime * 1000 - currentTime) / Constants.OneDayInMS);\n const expirationDate = new Date(expirationTime * 1000).toLocaleDateString();\n const expirationWarning = `Warning: The access token used for this test run will expire in ${daysToExpiration} days on ${expirationDate}. Generate a new token from the portal to avoid failures. For a simpler, more secure solution, switch to Microsoft Entra ID and eliminate token management. https://learn.microsoft.com/entra/identity/`;\n console.warn(expirationWarning);\n};\n\nexport const warnIfAccessTokenCloseToExpiry = (): void => {\n const accessToken = getAccessToken();\n if (!accessToken) {\n throw new Error(ServiceErrorMessageConstants.NO_AUTH_ERROR.message);\n }\n const claims = parseJwt<JwtPayload>(accessToken!);\n const currentTime = Date.now();\n if (isTokenExpiringSoon(claims.exp!, currentTime)) {\n warnAboutTokenExpiry(claims.exp!, currentTime);\n }\n};\n\nexport const fetchOrValidateAccessToken = async (credential?: TokenCredential): Promise<string> => {\n const entraIdAccessToken = createEntraIdAccessToken(credential);\n // Fetch a token or refresh if needed in a single call\n if (entraIdAccessToken.doesEntraIdAccessTokenNeedRotation()) {\n await entraIdAccessToken.fetchEntraIdAccessToken();\n }\n const token = getAccessToken();\n if (!token) {\n throw new Error(ServiceErrorMessageConstants.NO_AUTH_ERROR.message);\n }\n return token;\n};\n\nexport const getVersionInfo = (version: string): VersionInfo => {\n const regex = /^(\\d+)(?:\\.(\\d+))?(?:\\.(\\d+))?/;\n const match = version.match(regex);\n const versionInfo = {\n major: 0,\n minor: 0,\n patch: 0,\n };\n versionInfo.major = match && match[1] ? parseInt(match[1], 10) : 0;\n versionInfo.minor = match && match[2] ? parseInt(match[2], 10) : 0;\n versionInfo.patch = match && match[3] ? parseInt(match[3], 10) : 0;\n return versionInfo;\n};\n\nexport const validatePlaywrightVersion = (): void => {\n const minimumSupportedVersion = Constants.MinimumSupportedPlaywrightVersion;\n const installedVersion = getPlaywrightVersion();\n\n const minimumSupportedVersionInfo = getVersionInfo(minimumSupportedVersion);\n const installedVersionInfo = getVersionInfo(installedVersion);\n\n const isInstalledVersionGreater =\n installedVersionInfo.major > minimumSupportedVersionInfo.major ||\n (installedVersionInfo.major === minimumSupportedVersionInfo.major &&\n installedVersionInfo.minor >= minimumSupportedVersionInfo.minor);\n if (!isInstalledVersionGreater) {\n exitWithFailureMessage(ServiceErrorMessageConstants.INVALID_PLAYWRIGHT_VERSION_ERROR);\n }\n};\n\nexport const getTestRunConfig = (config: FullConfig): RunConfig => {\n const maxWorkers = config.workers || config.metadata.actualWorkers;\n const frameWorkVersion = config.version;\n\n const testRunConfig: RunConfig = {\n framework: {\n name: RunConfigConstants.TEST_FRAMEWORK_NAME,\n version: frameWorkVersion,\n runnerName: RunConfigConstants.TEST_FRAMEWORK_RUNNERNAME,\n },\n sdkLanguage: RunConfigConstants.TEST_SDK_LANGUAGE,\n maxWorkers: maxWorkers,\n };\n return testRunConfig;\n};\n\nexport function getTestRunApiUrl(): string {\n const result = populateValuesFromServiceUrl();\n const runId = process.env[InternalEnvironmentVariables.MPT_SERVICE_RUN_ID];\n\n if (!result?.region || !result?.domain || !result?.accountId) {\n exitWithFailureMessage(ServiceErrorMessageConstants.NO_SERVICE_URL_ERROR);\n }\n const baseUrl = `https://${result?.region}.reporting.api.${result?.domain}/playwrightworkspaces/${result?.accountId}/test-runs`;\n const url = runId ? `${baseUrl}/${runId}` : baseUrl;\n\n return `${url}?api-version=${Constants.LatestAPIVersion}`;\n}\n\nexport function isNullOrEmpty(str: string | null | undefined): boolean {\n return !str || str.trim() === \"\";\n}\n\nasync function runCommand(command: string): Promise<string> {\n return new Promise((resolve, reject) => {\n exec(command, (error, stdout, stderr) => {\n if (error) {\n reject(error);\n return;\n }\n if (stderr) {\n reject(new Error(stderr));\n return;\n }\n resolve(stdout.trim());\n });\n });\n}\n\nexport async function getRunName(ciInfo: CIInfo): Promise<string> {\n if (\n ciInfo.providerName === CI_PROVIDERS.GITHUB &&\n process.env[\"GITHUB_EVENT_NAME\"] === \"pull_request\"\n ) {\n const prNumber: string = `${process.env[\"GITHUB_REF_NAME\"]?.split(\"/\")[0]}`;\n const prLink: string = `${process.env[\"GITHUB_REPOSITORY\"]}/pull/${prNumber}`;\n return `PR# ${prNumber} on Repo: ${process.env[\"GITHUB_REPOSITORY\"]} (${prLink})`;\n }\n\n try {\n const gitVersion = await runCommand(GitHubActionsConstants.GIT_VERSION_COMMAND);\n if (isNullOrEmpty(gitVersion)) {\n throw new Error(\"Git is not installed on the machine\");\n }\n const isInsideWorkTree = await runCommand(GitHubActionsConstants.GIT_REV_PARSE);\n if (isInsideWorkTree !== \"true\") {\n throw new Error(\"Not inside a git repository\");\n }\n const gitCommitMessage = await runCommand(GitHubActionsConstants.GIT_COMMIT_MESSAGE_COMMAND);\n return gitCommitMessage;\n } catch (err) {\n coreLogger.error(`Error in getting git commit message: ${err}.`);\n return \"\";\n }\n}\n\nexport function extractErrorMessage(responseBody: string): string {\n if (!responseBody) {\n return \"\";\n }\n\n try {\n const errorResponse = JSON.parse(responseBody);\n if (errorResponse.error && errorResponse.error.message) {\n return errorResponse.error.message;\n }\n return responseBody;\n } catch (e) {\n return responseBody;\n }\n}\n\nexport function getWorkspaceMetaDataApiUrl(): string {\n const result = populateValuesFromServiceUrl();\n\n if (!result?.region || !result?.domain || !result?.accountId) {\n exitWithFailureMessage(ServiceErrorMessageConstants.NO_SERVICE_URL_ERROR);\n }\n const baseUrl = `https://${result?.region}.api.${result?.domain}/playwrightworkspaces/${result?.accountId}`;\n\n return `${baseUrl}?api-version=${Constants.LatestAPIVersion}`;\n}\n\nexport function getHtmlReporterOutputFolder(config: FullConfig | undefined): string {\n const defaultFolder = \"playwright-report\";\n\n if (!config?.reporter) {\n return defaultFolder;\n }\n\n for (const reporter of config.reporter) {\n if (Array.isArray(reporter)) {\n const [reporterName, options] = reporter;\n if (reporterName === \"html\" && options && typeof options === \"object\") {\n return (options as any).outputFolder || defaultFolder;\n }\n } else if (typeof reporter === \"string\" && reporter === \"html\") {\n return defaultFolder;\n }\n }\n\n return defaultFolder;\n}\n\nexport function getContentType(filePath: string): string {\n const ext = filePath.toLowerCase().split(\".\").pop();\n\n const contentTypes: { [key: string]: string } = {\n html: \"text/html\",\n css: \"text/css\",\n js: \"application/javascript\",\n json: \"application/json\",\n png: \"image/png\",\n jpg: \"image/jpeg\",\n jpeg: \"image/jpeg\",\n svg: \"image/svg+xml\",\n ico: \"image/x-icon\",\n txt: \"text/plain\",\n ttf: \"font/ttf\",\n woff: \"font/woff\",\n woff2: \"font/woff2\",\n webmanifest: \"application/manifest+json\",\n map: \"application/json\",\n xml: \"application/xml\",\n pdf: \"application/pdf\",\n zip: \"application/zip\",\n };\n\n return contentTypes[ext || \"\"] || \"application/octet-stream\";\n}\n\nexport function calculateOptimalConcurrency(files: Array<{ size: number }>): number {\n const totalFiles = files.length;\n const totalSize = files.reduce((sum, f) => sum + f.size, 0);\n const avgFileSize = totalSize / totalFiles;\n\n let optimalConcurrency: number;\n\n if (totalFiles <= 10) {\n optimalConcurrency = Math.min(totalFiles, 10);\n } else if (avgFileSize < UploadConstants.SMALL_FILE_THRESHOLD) {\n optimalConcurrency = Math.min(\n UploadConstants.MAX_CONCURRENCY,\n Math.max(UploadConstants.BASE_CONCURRENCY, totalFiles / 50),\n );\n } else if (totalFiles > 1000) {\n optimalConcurrency = Math.min(\n UploadConstants.MAX_CONCURRENCY,\n UploadConstants.BASE_CONCURRENCY + Math.floor(totalFiles / 200),\n );\n } else {\n optimalConcurrency = Math.min(\n UploadConstants.MAX_CONCURRENCY,\n UploadConstants.BASE_CONCURRENCY,\n );\n }\n\n return Math.floor(optimalConcurrency);\n}\n\nexport function collectAllFiles(\n folderPath: string,\n basePath: string,\n runIdFolderPrefix?: string,\n): Array<{\n fullPath: string;\n relativePath: string;\n size: number;\n contentType: string;\n}> {\n const files: Array<{\n fullPath: string;\n relativePath: string;\n size: number;\n contentType: string;\n }> = [];\n\n const stack = [folderPath];\n\n while (stack.length > 0) {\n const currentPath = stack.pop()!;\n\n try {\n const items = readdirSync(currentPath);\n\n for (const item of items) {\n const itemPath = join(currentPath, item);\n const stats = statSync(itemPath);\n\n if (stats.isDirectory()) {\n stack.push(itemPath);\n } else {\n let relativePath = relative(basePath, itemPath).split(\"\\\\\").join(\"/\");\n\n if (runIdFolderPrefix) {\n relativePath = `${runIdFolderPrefix}/${relativePath}`;\n }\n\n files.push({\n fullPath: itemPath,\n relativePath,\n size: stats.size,\n contentType: getContentType(itemPath),\n });\n }\n }\n } catch (error) {\n continue;\n }\n }\n\n return files;\n}\n\nexport function getPortalTestRunUrl(workspaceMetadata: WorkspaceMetaData | null): string {\n const { subscriptionId, resourceId, name } = workspaceMetadata ?? {};\n if (!subscriptionId || !resourceId || !name) {\n throw new Error(\n \"Missing required workspace metadata: subscriptionId, resourceId, and name are required\",\n );\n }\n\n // Extract resource group from resourceId\n const resourceIdParts = resourceId.split(\"/\");\n const resourceGroupIndex = resourceIdParts.findIndex(\n (part) => part.toLowerCase() === \"resourcegroups\",\n );\n\n if (resourceGroupIndex === -1 || resourceGroupIndex + 1 >= resourceIdParts.length) {\n throw new Error(\"Invalid resourceId format: could not extract resource group name\");\n }\n\n const resourceGroupName = resourceIdParts[resourceGroupIndex + 1];\n return `https://ms.portal.azure.com/#@microsoft.onmicrosoft.com/resource/subscriptions/${encodeURIComponent(subscriptionId)}/resourceGroups/${encodeURIComponent(resourceGroupName)}/providers/Microsoft.LoadTestService/playwrightWorkspaces/${encodeURIComponent(name)}/TestRuns`;\n}\n"]}
@@ -67,4 +67,17 @@ export declare const InternalEnvironmentVariables: {
67
67
  ONE_TIME_OPERATION_FLAG: string;
68
68
  USING_SERVICE_CONFIG: string;
69
69
  };
70
+ export declare const UploadConstants: {
71
+ SMALL_FILE_THRESHOLD: number;
72
+ LARGE_FILE_THRESHOLD: number;
73
+ BASE_CONCURRENCY: number;
74
+ MAX_CONCURRENCY: number;
75
+ PER_FILE_CONCURRENCY: number;
76
+ LARGE_FILE_CONCURRENCY: number;
77
+ BATCH_SIZE: number;
78
+ OPTIMIZED_BLOCK_SIZE: number;
79
+ STREAM_BUFFER_SIZE: number;
80
+ MAX_RETRY_ATTEMPTS: number;
81
+ RETRY_BASE_DELAY: number;
82
+ };
70
83
  //# sourceMappingURL=constants.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../../src/common/constants.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,2BAA2B;;;;CAIvC,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,SAAS;;;CAGZ,CAAC;AAEX;;;GAGG;AACH,eAAO,MAAM,WAAW;;;CAGd,CAAC;AAEX;;;GAGG;AACH,eAAO,MAAM,0BAA0B;;;CAGtC,CAAC;AAEF,eAAO,MAAM,sBAAsB;;;;CAIlC,CAAC;AAEF,eAAO,MAAM,8BAA8B;;;;;;CAM1C,CAAC;AAEF,eAAO,MAAM,WAAW;;;;CAIvB,CAAC;AAEF,eAAO,MAAM,kBAAkB;;;;CAI9B,CAAC;AAEF,eAAO,MAAM,SAAS;;;;;;CAMrB,CAAC;AAEF,eAAO,MAAM,4BAA4B;;;;;;;;;;CAUxC,CAAC"}
1
+ {"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../../src/common/constants.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,2BAA2B;;;;CAIvC,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,SAAS;;;CAGZ,CAAC;AAEX;;;GAGG;AACH,eAAO,MAAM,WAAW;;;CAGd,CAAC;AAEX;;;GAGG;AACH,eAAO,MAAM,0BAA0B;;;CAGtC,CAAC;AAEF,eAAO,MAAM,sBAAsB;;;;CAIlC,CAAC;AAEF,eAAO,MAAM,8BAA8B;;;;;;CAM1C,CAAC;AAEF,eAAO,MAAM,WAAW;;;;CAIvB,CAAC;AAEF,eAAO,MAAM,kBAAkB;;;;CAI9B,CAAC;AAEF,eAAO,MAAM,SAAS;;;;;;CAMrB,CAAC;AAEF,eAAO,MAAM,4BAA4B;;;;;;;;;;CAUxC,CAAC;AAEF,eAAO,MAAM,eAAe;;;;;;;;;;;;CAY3B,CAAC"}
@@ -69,4 +69,17 @@ export const InternalEnvironmentVariables = {
69
69
  ONE_TIME_OPERATION_FLAG: "_ONE_TIME_OPERATION_FLAG",
70
70
  USING_SERVICE_CONFIG: "_USING_SERVICE_CONFIG",
71
71
  };
72
+ export const UploadConstants = {
73
+ SMALL_FILE_THRESHOLD: 1024 * 1024,
74
+ LARGE_FILE_THRESHOLD: 100 * 1024 * 1024,
75
+ BASE_CONCURRENCY: 20,
76
+ MAX_CONCURRENCY: 50,
77
+ PER_FILE_CONCURRENCY: 10,
78
+ LARGE_FILE_CONCURRENCY: 5,
79
+ BATCH_SIZE: 100,
80
+ OPTIMIZED_BLOCK_SIZE: 8 * 1024 * 1024,
81
+ STREAM_BUFFER_SIZE: 4 * 1024 * 1024,
82
+ MAX_RETRY_ATTEMPTS: 3,
83
+ RETRY_BASE_DELAY: 1000,
84
+ };
72
85
  //# sourceMappingURL=constants.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"constants.js","sourceRoot":"","sources":["../../../src/common/constants.ts"],"names":[],"mappings":"AAAA,uCAAuC;AACvC,kCAAkC;AAElC,MAAM,CAAC,MAAM,2BAA2B,GAAG;IACzC,+CAA+C,EAAE,EAAE;IACnD,KAAK,EAAE,8CAA8C;IACrD,mCAAmC,EAAE,CAAC;CACvC,CAAC;AAEF;;;GAGG;AACH,MAAM,CAAC,MAAM,SAAS,GAAG;IACvB,KAAK,EAAE,OAAO;IACd,OAAO,EAAE,SAAS;CACV,CAAC;AAEX;;;GAGG;AACH,MAAM,CAAC,MAAM,WAAW,GAAG;IACzB,QAAQ,EAAE,UAAU;IACpB,YAAY,EAAE,cAAc;CACpB,CAAC;AAEX;;;GAGG;AACH,MAAM,CAAC,MAAM,0BAA0B,GAAG;IACxC,+BAA+B,EAAE,iCAAiC;IAClE,sBAAsB,EAAE,wBAAwB;CACjD,CAAC;AAEF,MAAM,CAAC,MAAM,sBAAsB,GAAG;IACpC,mBAAmB,EAAE,eAAe;IACpC,aAAa,EAAE,qCAAqC;IACpD,0BAA0B,EAAE,iCAAiC;CAC9D,CAAC;AAEF,MAAM,CAAC,MAAM,8BAA8B,GAAG;IAC5C,eAAe,EAAE,KAAK;IACtB,eAAe,EAAE,CAAC;IAClB,sBAAsB,EAAE,YAAY;IACpC,kBAAkB,EAAE,SAAS,CAAC,KAAK;IACnC,yBAAyB,EAAE,WAAW,CAAC,QAAQ;CAChD,CAAC;AAEF,MAAM,CAAC,MAAM,WAAW,GAAG;IACzB,UAAU,EAAE,YAAY;IACxB,UAAU,EAAE,YAAY;IACxB,MAAM,EAAE,QAAQ;CACjB,CAAC;AAEF,MAAM,CAAC,MAAM,kBAAkB,GAAG;IAChC,mBAAmB,EAAE,YAAY;IACjC,iBAAiB,EAAE,WAAW,CAAC,UAAU;IACzC,yBAAyB,EAAE,YAAY;CACxC,CAAC;AAEF,MAAM,CAAC,MAAM,SAAS,GAAG;IACvB,aAAa,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI;IACtC,UAAU,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI;IAC/B,iCAAiC,EAAE,QAAQ;IAC3C,gBAAgB,EAAE,YAAY;IAC9B,iBAAiB,EAAE,KAAK;CACzB,CAAC;AAEF,MAAM,CAAC,MAAM,4BAA4B,GAAG;IAC1C,sBAAsB,EAAE,yBAAyB;IACjD,qBAAqB,EAAE,wBAAwB;IAC/C,oBAAoB,EAAE,uBAAuB;IAC7C,eAAe,EAAE,kBAAkB;IACnC,kBAAkB,EAAE,qBAAqB;IACzC,6BAA6B,EAAE,gCAAgC;IAC/D,cAAc,EAAE,iBAAiB;IACjC,uBAAuB,EAAE,0BAA0B;IACnD,oBAAoB,EAAE,uBAAuB;CAC9C,CAAC","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nexport const EntraIdAccessTokenConstants = {\n LIFETIME_LEFT_THRESHOLD_IN_MINUTES_FOR_ROTATION: 15,\n SCOPE: \"https://management.core.windows.net/.default\",\n ROTATION_INTERVAL_PERIOD_IN_MINUTES: 4,\n};\n\n/** @public\n *\n * OS types supported on Azure Playwright cloud hosted browsers\n */\nexport const ServiceOS = {\n LINUX: \"linux\",\n WINDOWS: \"windows\",\n} as const;\n\n/** @public\n *\n * Authentication types supported on Azure Playwright\n */\nexport const ServiceAuth = {\n ENTRA_ID: \"ENTRA_ID\",\n ACCESS_TOKEN: \"ACCESS_TOKEN\",\n} as const;\n\n/** @public\n *\n * Environment variables used by Azure Playwright\n */\nexport const ServiceEnvironmentVariable = {\n PLAYWRIGHT_SERVICE_ACCESS_TOKEN: \"PLAYWRIGHT_SERVICE_ACCESS_TOKEN\",\n PLAYWRIGHT_SERVICE_URL: \"PLAYWRIGHT_SERVICE_URL\",\n};\n\nexport const GitHubActionsConstants = {\n GIT_VERSION_COMMAND: \"git --version\",\n GIT_REV_PARSE: \"git rev-parse --is-inside-work-tree\",\n GIT_COMMIT_MESSAGE_COMMAND: 'git log -1 --pretty=format:\"%s\"',\n};\n\nexport const DefaultConnectOptionsConstants = {\n DEFAULT_TIMEOUT: 30000,\n DEFAULT_SLOW_MO: 0,\n DEFAULT_EXPOSE_NETWORK: \"<loopback>\",\n DEFAULT_SERVICE_OS: ServiceOS.LINUX,\n DEFAULT_SERVICE_AUTH_TYPE: ServiceAuth.ENTRA_ID,\n};\n\nexport const SDKLanguage = {\n JAVASCRIPT: \"JAVASCRIPT\",\n TYPESCRIPT: \"TYPESCRIPT\",\n CSHARP: \"CSHARP\",\n};\n\nexport const RunConfigConstants = {\n TEST_FRAMEWORK_NAME: \"PLAYWRIGHT\",\n TEST_SDK_LANGUAGE: SDKLanguage.JAVASCRIPT,\n TEST_FRAMEWORK_RUNNERNAME: \"PLAYWRIGHT\",\n};\n\nexport const Constants = {\n SevenDaysInMS: 7 * 24 * 60 * 60 * 1000,\n OneDayInMS: 24 * 60 * 60 * 1000,\n MinimumSupportedPlaywrightVersion: \"1.47.0\",\n LatestAPIVersion: \"2025-09-01\",\n HTTP_CALL_TIMEOUT: 10000,\n};\n\nexport const InternalEnvironmentVariables = {\n MPT_PLAYWRIGHT_VERSION: \"_MPT_PLAYWRIGHT_VERSION\",\n MPT_SETUP_FATAL_ERROR: \"_MPT_SETUP_FATAL_ERROR\",\n MPT_SERVICE_RUN_NAME: \"_MPT_SERVICE_RUN_NAME\",\n MPT_API_VERSION: \"_MPT_API_VERSION\",\n MPT_SERVICE_RUN_ID: \"_MPT_SERVICE_RUN_ID\",\n MPT_CLOUD_HOSTED_BROWSER_USED: \"_MPT_CLOUD_HOSTED_BROWSER_USED\",\n MPT_SERVICE_OS: \"_MPT_SERVICE_OS\",\n ONE_TIME_OPERATION_FLAG: \"_ONE_TIME_OPERATION_FLAG\",\n USING_SERVICE_CONFIG: \"_USING_SERVICE_CONFIG\",\n};\n"]}
1
+ {"version":3,"file":"constants.js","sourceRoot":"","sources":["../../../src/common/constants.ts"],"names":[],"mappings":"AAAA,uCAAuC;AACvC,kCAAkC;AAElC,MAAM,CAAC,MAAM,2BAA2B,GAAG;IACzC,+CAA+C,EAAE,EAAE;IACnD,KAAK,EAAE,8CAA8C;IACrD,mCAAmC,EAAE,CAAC;CACvC,CAAC;AAEF;;;GAGG;AACH,MAAM,CAAC,MAAM,SAAS,GAAG;IACvB,KAAK,EAAE,OAAO;IACd,OAAO,EAAE,SAAS;CACV,CAAC;AAEX;;;GAGG;AACH,MAAM,CAAC,MAAM,WAAW,GAAG;IACzB,QAAQ,EAAE,UAAU;IACpB,YAAY,EAAE,cAAc;CACpB,CAAC;AAEX;;;GAGG;AACH,MAAM,CAAC,MAAM,0BAA0B,GAAG;IACxC,+BAA+B,EAAE,iCAAiC;IAClE,sBAAsB,EAAE,wBAAwB;CACjD,CAAC;AAEF,MAAM,CAAC,MAAM,sBAAsB,GAAG;IACpC,mBAAmB,EAAE,eAAe;IACpC,aAAa,EAAE,qCAAqC;IACpD,0BAA0B,EAAE,iCAAiC;CAC9D,CAAC;AAEF,MAAM,CAAC,MAAM,8BAA8B,GAAG;IAC5C,eAAe,EAAE,KAAK;IACtB,eAAe,EAAE,CAAC;IAClB,sBAAsB,EAAE,YAAY;IACpC,kBAAkB,EAAE,SAAS,CAAC,KAAK;IACnC,yBAAyB,EAAE,WAAW,CAAC,QAAQ;CAChD,CAAC;AAEF,MAAM,CAAC,MAAM,WAAW,GAAG;IACzB,UAAU,EAAE,YAAY;IACxB,UAAU,EAAE,YAAY;IACxB,MAAM,EAAE,QAAQ;CACjB,CAAC;AAEF,MAAM,CAAC,MAAM,kBAAkB,GAAG;IAChC,mBAAmB,EAAE,YAAY;IACjC,iBAAiB,EAAE,WAAW,CAAC,UAAU;IACzC,yBAAyB,EAAE,YAAY;CACxC,CAAC;AAEF,MAAM,CAAC,MAAM,SAAS,GAAG;IACvB,aAAa,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI;IACtC,UAAU,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI;IAC/B,iCAAiC,EAAE,QAAQ;IAC3C,gBAAgB,EAAE,YAAY;IAC9B,iBAAiB,EAAE,KAAK;CACzB,CAAC;AAEF,MAAM,CAAC,MAAM,4BAA4B,GAAG;IAC1C,sBAAsB,EAAE,yBAAyB;IACjD,qBAAqB,EAAE,wBAAwB;IAC/C,oBAAoB,EAAE,uBAAuB;IAC7C,eAAe,EAAE,kBAAkB;IACnC,kBAAkB,EAAE,qBAAqB;IACzC,6BAA6B,EAAE,gCAAgC;IAC/D,cAAc,EAAE,iBAAiB;IACjC,uBAAuB,EAAE,0BAA0B;IACnD,oBAAoB,EAAE,uBAAuB;CAC9C,CAAC;AAEF,MAAM,CAAC,MAAM,eAAe,GAAG;IAC7B,oBAAoB,EAAE,IAAI,GAAG,IAAI;IACjC,oBAAoB,EAAE,GAAG,GAAG,IAAI,GAAG,IAAI;IACvC,gBAAgB,EAAE,EAAE;IACpB,eAAe,EAAE,EAAE;IACnB,oBAAoB,EAAE,EAAE;IACxB,sBAAsB,EAAE,CAAC;IACzB,UAAU,EAAE,GAAG;IACf,oBAAoB,EAAE,CAAC,GAAG,IAAI,GAAG,IAAI;IACrC,kBAAkB,EAAE,CAAC,GAAG,IAAI,GAAG,IAAI;IACnC,kBAAkB,EAAE,CAAC;IACrB,gBAAgB,EAAE,IAAI;CACvB,CAAC","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nexport const EntraIdAccessTokenConstants = {\n LIFETIME_LEFT_THRESHOLD_IN_MINUTES_FOR_ROTATION: 15,\n SCOPE: \"https://management.core.windows.net/.default\",\n ROTATION_INTERVAL_PERIOD_IN_MINUTES: 4,\n};\n\n/** @public\n *\n * OS types supported on Azure Playwright cloud hosted browsers\n */\nexport const ServiceOS = {\n LINUX: \"linux\",\n WINDOWS: \"windows\",\n} as const;\n\n/** @public\n *\n * Authentication types supported on Azure Playwright\n */\nexport const ServiceAuth = {\n ENTRA_ID: \"ENTRA_ID\",\n ACCESS_TOKEN: \"ACCESS_TOKEN\",\n} as const;\n\n/** @public\n *\n * Environment variables used by Azure Playwright\n */\nexport const ServiceEnvironmentVariable = {\n PLAYWRIGHT_SERVICE_ACCESS_TOKEN: \"PLAYWRIGHT_SERVICE_ACCESS_TOKEN\",\n PLAYWRIGHT_SERVICE_URL: \"PLAYWRIGHT_SERVICE_URL\",\n};\n\nexport const GitHubActionsConstants = {\n GIT_VERSION_COMMAND: \"git --version\",\n GIT_REV_PARSE: \"git rev-parse --is-inside-work-tree\",\n GIT_COMMIT_MESSAGE_COMMAND: 'git log -1 --pretty=format:\"%s\"',\n};\n\nexport const DefaultConnectOptionsConstants = {\n DEFAULT_TIMEOUT: 30000,\n DEFAULT_SLOW_MO: 0,\n DEFAULT_EXPOSE_NETWORK: \"<loopback>\",\n DEFAULT_SERVICE_OS: ServiceOS.LINUX,\n DEFAULT_SERVICE_AUTH_TYPE: ServiceAuth.ENTRA_ID,\n};\n\nexport const SDKLanguage = {\n JAVASCRIPT: \"JAVASCRIPT\",\n TYPESCRIPT: \"TYPESCRIPT\",\n CSHARP: \"CSHARP\",\n};\n\nexport const RunConfigConstants = {\n TEST_FRAMEWORK_NAME: \"PLAYWRIGHT\",\n TEST_SDK_LANGUAGE: SDKLanguage.JAVASCRIPT,\n TEST_FRAMEWORK_RUNNERNAME: \"PLAYWRIGHT\",\n};\n\nexport const Constants = {\n SevenDaysInMS: 7 * 24 * 60 * 60 * 1000,\n OneDayInMS: 24 * 60 * 60 * 1000,\n MinimumSupportedPlaywrightVersion: \"1.47.0\",\n LatestAPIVersion: \"2025-09-01\",\n HTTP_CALL_TIMEOUT: 10000,\n};\n\nexport const InternalEnvironmentVariables = {\n MPT_PLAYWRIGHT_VERSION: \"_MPT_PLAYWRIGHT_VERSION\",\n MPT_SETUP_FATAL_ERROR: \"_MPT_SETUP_FATAL_ERROR\",\n MPT_SERVICE_RUN_NAME: \"_MPT_SERVICE_RUN_NAME\",\n MPT_API_VERSION: \"_MPT_API_VERSION\",\n MPT_SERVICE_RUN_ID: \"_MPT_SERVICE_RUN_ID\",\n MPT_CLOUD_HOSTED_BROWSER_USED: \"_MPT_CLOUD_HOSTED_BROWSER_USED\",\n MPT_SERVICE_OS: \"_MPT_SERVICE_OS\",\n ONE_TIME_OPERATION_FLAG: \"_ONE_TIME_OPERATION_FLAG\",\n USING_SERVICE_CONFIG: \"_USING_SERVICE_CONFIG\",\n};\n\nexport const UploadConstants = {\n SMALL_FILE_THRESHOLD: 1024 * 1024,\n LARGE_FILE_THRESHOLD: 100 * 1024 * 1024,\n BASE_CONCURRENCY: 20,\n MAX_CONCURRENCY: 50,\n PER_FILE_CONCURRENCY: 10,\n LARGE_FILE_CONCURRENCY: 5,\n BATCH_SIZE: 100,\n OPTIMIZED_BLOCK_SIZE: 8 * 1024 * 1024,\n STREAM_BUFFER_SIZE: 4 * 1024 * 1024,\n MAX_RETRY_ATTEMPTS: 3,\n RETRY_BASE_DELAY: 1000,\n};\n"]}
@@ -52,5 +52,46 @@ export declare const ServiceErrorMessageConstants: {
52
52
  key: string;
53
53
  message: string;
54
54
  };
55
+ FAILED_TO_GET_WORKSPACE_DETAILS: {
56
+ key: string;
57
+ message: string;
58
+ formatWithErrorDetails: (errorDetails: string) => string;
59
+ };
60
+ STORAGE_URI_NOT_FOUND: {
61
+ key: string;
62
+ message: string;
63
+ };
64
+ UNABLE_TO_EXTRACT_WORKSPACE_ID: {
65
+ key: string;
66
+ message: string;
67
+ };
68
+ HTML_REPORT_UPLOAD_FAILED: {
69
+ key: string;
70
+ message: string;
71
+ formatWithError: (errorMessage: string) => string;
72
+ };
73
+ HTML_REPORT_FOLDER_NOT_FOUND: {
74
+ key: string;
75
+ message: string;
76
+ formatWithFolder: (folderName: string) => string;
77
+ };
78
+ UPLOAD_FAILED_MULTIPLE_FILES: {
79
+ key: string;
80
+ message: string;
81
+ formatWithDetails: (failed: number, errors: string[]) => string;
82
+ };
83
+ UPLOAD_RETRY_EXHAUSTED: {
84
+ key: string;
85
+ message: string;
86
+ formatWithDetails: (maxRetries: number, errorMessage: string) => string;
87
+ };
88
+ REPORTER_REQUIRES_ENTRA_AUTH: {
89
+ key: string;
90
+ message: string;
91
+ };
92
+ HTML_REPORTER_REQUIRED: {
93
+ key: string;
94
+ message: string;
95
+ };
55
96
  };
56
97
  //# sourceMappingURL=messages.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"messages.d.ts","sourceRoot":"","sources":["../../../src/common/messages.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,4BAA4B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;+CA+CE,MAAM,KAAG,MAAM;;;;;;;;;;;;;;CAezD,CAAC"}
1
+ {"version":3,"file":"messages.d.ts","sourceRoot":"","sources":["../../../src/common/messages.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,4BAA4B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;+CA+CE,MAAM,KAAG,MAAM;;;;;;;;;;;;;;;;;+CAkBf,MAAM,KAAG,MAAM;;;;;;;;;;;;;wCActB,MAAM,KAAG,MAAM;;;;;uCAKhB,MAAM,KAAG,MAAM;;;;;oCAKlB,MAAM,UAAU,MAAM,EAAE,KAAG,MAAM;;;;;wCAM7B,MAAM,gBAAgB,MAAM,KAAG,MAAM;;;;;;;;;;CAYxE,CAAC"}
@@ -54,5 +54,46 @@ export const ServiceErrorMessageConstants = {
54
54
  key: "InvalidAuthTypeError",
55
55
  message: "Invalid authentication type specified. Please use either ENTRA_ID or ACCESS_TOKEN.",
56
56
  },
57
+ FAILED_TO_GET_WORKSPACE_DETAILS: {
58
+ key: "FailedToGetWorkspaceDetails",
59
+ message: "Failed to retrieve workspace details from the Playwright service.",
60
+ formatWithErrorDetails: (errorDetails) => `Failed to retrieve workspace details from the Playwright service. Error: ${errorDetails}. Please verify your service URL and authentication credentials.`,
61
+ },
62
+ STORAGE_URI_NOT_FOUND: {
63
+ key: "StorageUriNotFound",
64
+ message: "Storage URI not found in workspace details",
65
+ },
66
+ UNABLE_TO_EXTRACT_WORKSPACE_ID: {
67
+ key: "UnableToExtractWorkspaceId",
68
+ message: "Unable to extract workspace ID from service URL",
69
+ },
70
+ HTML_REPORT_UPLOAD_FAILED: {
71
+ key: "HtmlReportUploadFailed",
72
+ message: "HTML report upload failed",
73
+ formatWithError: (errorMessage) => `HTML report upload failed: ${errorMessage}`,
74
+ },
75
+ HTML_REPORT_FOLDER_NOT_FOUND: {
76
+ key: "HtmlReportFolderNotFound",
77
+ message: "HTML report folder not found",
78
+ formatWithFolder: (folderName) => `HTML report folder not found: ${folderName}`,
79
+ },
80
+ UPLOAD_FAILED_MULTIPLE_FILES: {
81
+ key: "UploadFailedMultipleFiles",
82
+ message: "Upload failed: multiple files could not be uploaded",
83
+ formatWithDetails: (failed, errors) => `Upload failed: ${failed} files could not be uploaded. Sample errors: ${errors.join(", ")}`,
84
+ },
85
+ UPLOAD_RETRY_EXHAUSTED: {
86
+ key: "UploadRetryExhausted",
87
+ message: "Failed after maximum retry attempts",
88
+ formatWithDetails: (maxRetries, errorMessage) => `Failed after ${maxRetries} attempts: ${errorMessage}`,
89
+ },
90
+ REPORTER_REQUIRES_ENTRA_AUTH: {
91
+ key: "ReporterRequiresEntraAuth",
92
+ message: "The Azure Playwright Reporter can only be used with ENTRA_ID authentication.",
93
+ },
94
+ HTML_REPORTER_REQUIRED: {
95
+ key: "HtmlReporterRequired",
96
+ message: "The Azure Playwright Reporter requires the 'html' reporter to be configured in your Playwright configuration. Please add the HTML reporter to generate test reports that can be uploaded to Azure Storage. Example: reporter: [['html'], ['@azure/playwright/reporter']]",
97
+ },
57
98
  };
58
99
  //# sourceMappingURL=messages.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"messages.js","sourceRoot":"","sources":["../../../src/common/messages.ts"],"names":[],"mappings":"AAAA,uCAAuC;AACvC,kCAAkC;AAElC,MAAM,CAAC,MAAM,4BAA4B,GAAG;IAC1C,oBAAoB,EAAE;QACpB,GAAG,EAAE,mBAAmB;QACxB,OAAO,EACL,8GAA8G;KACjH;IACD,uBAAuB,EAAE;QACvB,GAAG,EAAE,uBAAuB;QAC5B,OAAO,EAAE,qCAAqC;KAC/C;IACD,gCAAgC,EAAE;QAChC,GAAG,EAAE,+BAA+B;QACpC,OAAO,EACL,0IAA0I;KAC7I;IACD,4CAA4C,EAAE;QAC5C,GAAG,EAAE,yCAAyC;QAC9C,OAAO,EACL,4IAA4I;KAC/I;IACD,wBAAwB,EAAE;QACxB,GAAG,EAAE,oBAAoB;QACzB,OAAO,EACL,mHAAmH;KACtH;IACD,aAAa,EAAE;QACb,GAAG,EAAE,aAAa;QAClB,OAAO,EACL,uHAAuH;KAC1H;IACD,qBAAqB,EAAE;QACrB,GAAG,EAAE,oBAAoB;QACzB,OAAO,EAAE,8EAA8E;KACxF;IACD,qBAAqB,EAAE;QACrB,GAAG,EAAE,oBAAoB;QACzB,OAAO,EAAE,4DAA4D;KACtE;IACD,wBAAwB,EAAE;QACxB,GAAG,EAAE,sBAAsB;QAC3B,OAAO,EACL,8IAA8I;KACjJ;IACD,yBAAyB,EAAE;QACzB,GAAG,EAAE,uBAAuB;QAC5B,OAAO,EACL,2IAA2I;QAC7I,sBAAsB,EAAE,CAAC,YAAoB,EAAU,EAAE,CACvD,sEAAsE,YAAY,iFAAiF;KACtK;IACD,iCAAiC,EAAE;QACjC,GAAG,EAAE,+BAA+B;QACpC,OAAO,EAAE,4KAA4K;KACtL;IACD,qBAAqB,EAAE;QACrB,GAAG,EAAE,oBAAoB;QACzB,OAAO,EAAE,qFAAqF;KAC/F;IACD,uBAAuB,EAAE;QACvB,GAAG,EAAE,sBAAsB;QAC3B,OAAO,EAAE,oFAAoF;KAC9F;CACF,CAAC","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nexport const ServiceErrorMessageConstants = {\n NO_SERVICE_URL_ERROR: {\n key: \"NoServiceUrlError\",\n message:\n \"The value for the PLAYWRIGHT_SERVICE_URL variable is not set correctly. Please verify the URL and try again.\",\n },\n INVALID_GLOBAL_FUNCTION: {\n key: \"InvalidGlobalFunction\",\n message: \"File must export a single function.\",\n },\n INVALID_PLAYWRIGHT_VERSION_ERROR: {\n key: \"InvalidPlaywrightVersionError\",\n message:\n \"The Playwright version you are using is not supported. See the list of supported versions at https://aka.ms/pww/docs/supported-versions.\",\n },\n MULTIPLE_SETUP_FILE_PLAYWRIGHT_VERSION_ERROR: {\n key: \"MultipleSetupFilePlaywrightVersionError\",\n message:\n \"The Playwright version you are using does not support multiple setup/teardown files. Please update to Playwright version 1.49.0 or higher.\",\n },\n WORKSPACE_MISMATCH_ERROR: {\n key: \"InvalidAccessToken\",\n message:\n \"The provided access token does not match the specified workspace URL. Please verify that both values are correct.\",\n },\n NO_AUTH_ERROR: {\n key: \"NoAuthError\",\n message:\n \"Could not authenticate with the service. Please refer to https://aka.ms/pww/docs/authentication for more information.\",\n },\n INVALID_MPT_PAT_ERROR: {\n key: \"InvalidMptPatError\",\n message: \"The authentication token provided is invalid. Check the token and try again.\",\n },\n EXPIRED_MPT_PAT_ERROR: {\n key: \"ExpiredMptPatError\",\n message: \"Your authentication token has expired. Create a new token.\",\n },\n NO_CRED_ENTRA_AUTH_ERROR: {\n key: \"NoCredEntraAuthError\",\n message:\n \"Azure credentials not found when using Entra ID authentication. Please refer to https://aka.ms/pww/docs/authentication for more information.\",\n },\n FAILED_TO_CREATE_TEST_RUN: {\n key: \"FailedToCreateTestRun\",\n message:\n \"Failed to create the test run in the Playwright workspaces. Please refer to https://aka.ms/pww/docs/troubleshooting for more information.\",\n formatWithErrorDetails: (errorDetails: string): string =>\n `Failed to create the test run in the Playwright workspaces. Error: ${errorDetails}. Please refer to https://aka.ms/pww/docs/troubleshooting for more information.`,\n },\n INVALID_PARAM_WITH_SERVICE_CONFIG: {\n key: \"InvalidParamWithServiceConfig\",\n message: `Remove serviceAuth, runId, and runName from getConnectOptions when using createAzurePlaywrightConfig. Configure these options through createAzurePlaywrightConfig instead.`,\n },\n INVALID_RUN_ID_FORMAT: {\n key: \"InvalidRunIdFormat\",\n message: \"The Run ID must be a valid GUID format. Please provide a valid GUID for the Run ID.\",\n },\n INVALID_AUTH_TYPE_ERROR: {\n key: \"InvalidAuthTypeError\",\n message: \"Invalid authentication type specified. Please use either ENTRA_ID or ACCESS_TOKEN.\",\n },\n};\n"]}
1
+ {"version":3,"file":"messages.js","sourceRoot":"","sources":["../../../src/common/messages.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nexport const ServiceErrorMessageConstants = {\n NO_SERVICE_URL_ERROR: {\n key: \"NoServiceUrlError\",\n message:\n \"The value for the PLAYWRIGHT_SERVICE_URL variable is not set correctly. Please verify the URL and try again.\",\n },\n INVALID_GLOBAL_FUNCTION: {\n key: \"InvalidGlobalFunction\",\n message: \"File must export a single function.\",\n },\n INVALID_PLAYWRIGHT_VERSION_ERROR: {\n key: \"InvalidPlaywrightVersionError\",\n message:\n \"The Playwright version you are using is not supported. See the list of supported versions at https://aka.ms/pww/docs/supported-versions.\",\n },\n MULTIPLE_SETUP_FILE_PLAYWRIGHT_VERSION_ERROR: {\n key: \"MultipleSetupFilePlaywrightVersionError\",\n message:\n \"The Playwright version you are using does not support multiple setup/teardown files. Please update to Playwright version 1.49.0 or higher.\",\n },\n WORKSPACE_MISMATCH_ERROR: {\n key: \"InvalidAccessToken\",\n message:\n \"The provided access token does not match the specified workspace URL. Please verify that both values are correct.\",\n },\n NO_AUTH_ERROR: {\n key: \"NoAuthError\",\n message:\n \"Could not authenticate with the service. Please refer to https://aka.ms/pww/docs/authentication for more information.\",\n },\n INVALID_MPT_PAT_ERROR: {\n key: \"InvalidMptPatError\",\n message: \"The authentication token provided is invalid. Check the token and try again.\",\n },\n EXPIRED_MPT_PAT_ERROR: {\n key: \"ExpiredMptPatError\",\n message: \"Your authentication token has expired. Create a new token.\",\n },\n NO_CRED_ENTRA_AUTH_ERROR: {\n key: \"NoCredEntraAuthError\",\n message:\n \"Azure credentials not found when using Entra ID authentication. Please refer to https://aka.ms/pww/docs/authentication for more information.\",\n },\n FAILED_TO_CREATE_TEST_RUN: {\n key: \"FailedToCreateTestRun\",\n message:\n \"Failed to create the test run in the Playwright workspaces. Please refer to https://aka.ms/pww/docs/troubleshooting for more information.\",\n formatWithErrorDetails: (errorDetails: string): string =>\n `Failed to create the test run in the Playwright workspaces. Error: ${errorDetails}. Please refer to https://aka.ms/pww/docs/troubleshooting for more information.`,\n },\n INVALID_PARAM_WITH_SERVICE_CONFIG: {\n key: \"InvalidParamWithServiceConfig\",\n message: `Remove serviceAuth, runId, and runName from getConnectOptions when using createAzurePlaywrightConfig. Configure these options through createAzurePlaywrightConfig instead.`,\n },\n INVALID_RUN_ID_FORMAT: {\n key: \"InvalidRunIdFormat\",\n message: \"The Run ID must be a valid GUID format. Please provide a valid GUID for the Run ID.\",\n },\n INVALID_AUTH_TYPE_ERROR: {\n key: \"InvalidAuthTypeError\",\n message: \"Invalid authentication type specified. Please use either ENTRA_ID or ACCESS_TOKEN.\",\n },\n FAILED_TO_GET_WORKSPACE_DETAILS: {\n key: \"FailedToGetWorkspaceDetails\",\n message: \"Failed to retrieve workspace details from the Playwright service.\",\n formatWithErrorDetails: (errorDetails: string): string =>\n `Failed to retrieve workspace details from the Playwright service. Error: ${errorDetails}. Please verify your service URL and authentication credentials.`,\n },\n STORAGE_URI_NOT_FOUND: {\n key: \"StorageUriNotFound\",\n message: \"Storage URI not found in workspace details\",\n },\n UNABLE_TO_EXTRACT_WORKSPACE_ID: {\n key: \"UnableToExtractWorkspaceId\",\n message: \"Unable to extract workspace ID from service URL\",\n },\n HTML_REPORT_UPLOAD_FAILED: {\n key: \"HtmlReportUploadFailed\",\n message: \"HTML report upload failed\",\n formatWithError: (errorMessage: string): string => `HTML report upload failed: ${errorMessage}`,\n },\n HTML_REPORT_FOLDER_NOT_FOUND: {\n key: \"HtmlReportFolderNotFound\",\n message: \"HTML report folder not found\",\n formatWithFolder: (folderName: string): string => `HTML report folder not found: ${folderName}`,\n },\n UPLOAD_FAILED_MULTIPLE_FILES: {\n key: \"UploadFailedMultipleFiles\",\n message: \"Upload failed: multiple files could not be uploaded\",\n formatWithDetails: (failed: number, errors: string[]): string =>\n `Upload failed: ${failed} files could not be uploaded. Sample errors: ${errors.join(\", \")}`,\n },\n UPLOAD_RETRY_EXHAUSTED: {\n key: \"UploadRetryExhausted\",\n message: \"Failed after maximum retry attempts\",\n formatWithDetails: (maxRetries: number, errorMessage: string): string =>\n `Failed after ${maxRetries} attempts: ${errorMessage}`,\n },\n REPORTER_REQUIRES_ENTRA_AUTH: {\n key: \"ReporterRequiresEntraAuth\",\n message: \"The Azure Playwright Reporter can only be used with ENTRA_ID authentication.\",\n },\n HTML_REPORTER_REQUIRED: {\n key: \"HtmlReporterRequired\",\n message:\n \"The Azure Playwright Reporter requires the 'html' reporter to be configured in your Playwright configuration. Please add the HTML reporter to generate test reports that can be uploaded to Azure Storage. Example: reporter: [['html'], ['@azure/playwright/reporter']]\",\n },\n};\n"]}
@@ -1,4 +1,5 @@
1
1
  import type { PlaywrightServiceAdditionalOptions, OsType } from "./types.js";
2
+ import type { TokenCredential } from "@azure/identity";
2
3
  declare class PlaywrightServiceConfig {
3
4
  serviceOs: OsType;
4
5
  runId: string;
@@ -8,6 +9,7 @@ declare class PlaywrightServiceConfig {
8
9
  runName: string;
9
10
  apiVersion: string;
10
11
  private _serviceAuthType;
12
+ credential?: TokenCredential;
11
13
  constructor();
12
14
  static get instance(): PlaywrightServiceConfig;
13
15
  get serviceAuthType(): string;
@@ -1 +1 @@
1
- {"version":3,"file":"playwrightServiceConfig.d.ts","sourceRoot":"","sources":["../../../src/common/playwrightServiceConfig.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,kCAAkC,EAAE,MAAM,EAAE,MAAM,YAAY,CAAC;AAM7E,cAAM,uBAAuB;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,cAAc,EAAE,MAAM,CAAC;IACvB,MAAM,EAAE,MAAM,CAAC;IACf,aAAa,EAAE,MAAM,CAAC;IACtB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IAC1B,OAAO,CAAC,gBAAgB,CAAgC;;IAcxD,WAAkB,QAAQ,IAAI,uBAAuB,CAKpD;IAED,IAAW,eAAe,IAAI,MAAM,CAEnC;IAED,IAAW,eAAe,CAAC,KAAK,EAAE,MAAM,EAEvC;IAEY,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAOxC,eAAe,GAAI,UAAU,kCAAkC,KAAG,IAAI,CAYpE;IAEF,UAAU,GACR,UAAU,kCAAkC,EAC5C,sBAAqB,OAAe,KACnC,IAAI,CAqCL;CACH;AAED,OAAO,EAAE,uBAAuB,EAAE,CAAC"}
1
+ {"version":3,"file":"playwrightServiceConfig.d.ts","sourceRoot":"","sources":["../../../src/common/playwrightServiceConfig.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,kCAAkC,EAAE,MAAM,EAAE,MAAM,YAAY,CAAC;AAC7E,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAMvD,cAAM,uBAAuB;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,cAAc,EAAE,MAAM,CAAC;IACvB,MAAM,EAAE,MAAM,CAAC;IACf,aAAa,EAAE,MAAM,CAAC;IACtB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IAC1B,OAAO,CAAC,gBAAgB,CAAgC;IACjD,UAAU,CAAC,EAAE,eAAe,CAAC;;IAcpC,WAAkB,QAAQ,IAAI,uBAAuB,CAKpD;IAED,IAAW,eAAe,IAAI,MAAM,CAEnC;IAED,IAAW,eAAe,CAAC,KAAK,EAAE,MAAM,EAEvC;IAEY,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAOxC,eAAe,GAAI,UAAU,kCAAkC,KAAG,IAAI,CAYpE;IAEF,UAAU,GACR,UAAU,kCAAkC,EAC5C,sBAAqB,OAAe,KACnC,IAAI,CAwCL;CACH;AAED,OAAO,EAAE,uBAAuB,EAAE,CAAC"}
@@ -14,6 +14,7 @@ class PlaywrightServiceConfig {
14
14
  runName;
15
15
  apiVersion;
16
16
  _serviceAuthType = ServiceAuth.ENTRA_ID;
17
+ credential;
17
18
  constructor() {
18
19
  this.serviceOs = (process.env[InternalEnvironmentVariables.MPT_SERVICE_OS] ||
19
20
  DefaultConnectOptionsConstants.DEFAULT_SERVICE_OS);
@@ -92,6 +93,9 @@ class PlaywrightServiceConfig {
92
93
  if (options?.connectTimeout) {
93
94
  this.connectTimeout = options.connectTimeout;
94
95
  }
96
+ if (options?.credential) {
97
+ this.credential = options.credential;
98
+ }
95
99
  };
96
100
  }
97
101
  export { PlaywrightServiceConfig };
@@ -1 +1 @@
1
- {"version":3,"file":"playwrightServiceConfig.js","sourceRoot":"","sources":["../../../src/common/playwrightServiceConfig.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport {\n Constants,\n DefaultConnectOptionsConstants,\n InternalEnvironmentVariables,\n ServiceAuth,\n} from \"./constants.js\";\nimport type { PlaywrightServiceAdditionalOptions, OsType } from \"./types.js\";\nimport { getAndSetRunId, getRunName, ValidateRunID } from \"../utils/utils.js\";\nimport { CIInfoProvider } from \"../utils/cIInfoProvider.js\";\nimport { state } from \"./state.js\";\nimport { ServiceErrorMessageConstants } from \"./messages.js\";\n\nclass PlaywrightServiceConfig {\n public serviceOs: OsType;\n public runId: string;\n public connectTimeout: number;\n public slowMo: number;\n public exposeNetwork: string;\n public runName: string;\n public apiVersion: string;\n private _serviceAuthType: string = ServiceAuth.ENTRA_ID;\n\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.connectTimeout = DefaultConnectOptionsConstants.DEFAULT_TIMEOUT;\n this.slowMo = DefaultConnectOptionsConstants.DEFAULT_SLOW_MO;\n this.exposeNetwork = DefaultConnectOptionsConstants.DEFAULT_EXPOSE_NETWORK;\n this.apiVersion =\n process.env[InternalEnvironmentVariables.MPT_API_VERSION] || Constants.LatestAPIVersion;\n }\n\n public static get instance(): PlaywrightServiceConfig {\n if (!state.playwrightServiceConfig) {\n state.playwrightServiceConfig = new PlaywrightServiceConfig();\n }\n return state.playwrightServiceConfig;\n }\n\n public get serviceAuthType(): string {\n return this._serviceAuthType;\n }\n\n public set serviceAuthType(value: string) {\n this._serviceAuthType = value;\n }\n\n public async initialize(): Promise<void> {\n if (!this.runName) {\n const ciConfigInfo = CIInfoProvider.getCIInfo();\n this.runName = await getRunName(ciConfigInfo);\n }\n }\n\n validateOptions = (options?: PlaywrightServiceAdditionalOptions): void => {\n if (!options) return;\n\n const isUsingServiceConfig =\n process.env[InternalEnvironmentVariables.USING_SERVICE_CONFIG] === \"true\";\n if (isUsingServiceConfig) {\n if (options.serviceAuthType || options.runId || options.runName) {\n const errorMessage = ServiceErrorMessageConstants.INVALID_PARAM_WITH_SERVICE_CONFIG.message;\n throw new Error(errorMessage);\n }\n return;\n }\n };\n\n setOptions = (\n options?: PlaywrightServiceAdditionalOptions,\n isGetConnectOptions: boolean = false,\n ): void => {\n if (isGetConnectOptions) {\n this.validateOptions(options);\n }\n\n if (options?.exposeNetwork) {\n this.exposeNetwork = options.exposeNetwork;\n }\n if (options?.apiVersion) {\n if (!process.env[InternalEnvironmentVariables.MPT_API_VERSION]) {\n process.env[InternalEnvironmentVariables.MPT_API_VERSION] = options.apiVersion;\n }\n this.apiVersion = options.apiVersion;\n }\n if (!process.env[InternalEnvironmentVariables.MPT_SERVICE_RUN_ID]) {\n if (options?.runId) {\n ValidateRunID(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?.connectTimeout) {\n this.connectTimeout = options.connectTimeout;\n }\n };\n}\n\nexport { PlaywrightServiceConfig };\n"]}
1
+ {"version":3,"file":"playwrightServiceConfig.js","sourceRoot":"","sources":["../../../src/common/playwrightServiceConfig.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport {\n Constants,\n DefaultConnectOptionsConstants,\n InternalEnvironmentVariables,\n ServiceAuth,\n} from \"./constants.js\";\nimport type { PlaywrightServiceAdditionalOptions, OsType } from \"./types.js\";\nimport type { TokenCredential } from \"@azure/identity\";\nimport { getAndSetRunId, getRunName, ValidateRunID } from \"../utils/utils.js\";\nimport { CIInfoProvider } from \"../utils/cIInfoProvider.js\";\nimport { state } from \"./state.js\";\nimport { ServiceErrorMessageConstants } from \"./messages.js\";\n\nclass PlaywrightServiceConfig {\n public serviceOs: OsType;\n public runId: string;\n public connectTimeout: number;\n public slowMo: number;\n public exposeNetwork: string;\n public runName: string;\n public apiVersion: string;\n private _serviceAuthType: string = ServiceAuth.ENTRA_ID;\n public credential?: TokenCredential;\n\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.connectTimeout = DefaultConnectOptionsConstants.DEFAULT_TIMEOUT;\n this.slowMo = DefaultConnectOptionsConstants.DEFAULT_SLOW_MO;\n this.exposeNetwork = DefaultConnectOptionsConstants.DEFAULT_EXPOSE_NETWORK;\n this.apiVersion =\n process.env[InternalEnvironmentVariables.MPT_API_VERSION] || Constants.LatestAPIVersion;\n }\n\n public static get instance(): PlaywrightServiceConfig {\n if (!state.playwrightServiceConfig) {\n state.playwrightServiceConfig = new PlaywrightServiceConfig();\n }\n return state.playwrightServiceConfig;\n }\n\n public get serviceAuthType(): string {\n return this._serviceAuthType;\n }\n\n public set serviceAuthType(value: string) {\n this._serviceAuthType = value;\n }\n\n public async initialize(): Promise<void> {\n if (!this.runName) {\n const ciConfigInfo = CIInfoProvider.getCIInfo();\n this.runName = await getRunName(ciConfigInfo);\n }\n }\n\n validateOptions = (options?: PlaywrightServiceAdditionalOptions): void => {\n if (!options) return;\n\n const isUsingServiceConfig =\n process.env[InternalEnvironmentVariables.USING_SERVICE_CONFIG] === \"true\";\n if (isUsingServiceConfig) {\n if (options.serviceAuthType || options.runId || options.runName) {\n const errorMessage = ServiceErrorMessageConstants.INVALID_PARAM_WITH_SERVICE_CONFIG.message;\n throw new Error(errorMessage);\n }\n return;\n }\n };\n\n setOptions = (\n options?: PlaywrightServiceAdditionalOptions,\n isGetConnectOptions: boolean = false,\n ): void => {\n if (isGetConnectOptions) {\n this.validateOptions(options);\n }\n\n if (options?.exposeNetwork) {\n this.exposeNetwork = options.exposeNetwork;\n }\n if (options?.apiVersion) {\n if (!process.env[InternalEnvironmentVariables.MPT_API_VERSION]) {\n process.env[InternalEnvironmentVariables.MPT_API_VERSION] = options.apiVersion;\n }\n this.apiVersion = options.apiVersion;\n }\n if (!process.env[InternalEnvironmentVariables.MPT_SERVICE_RUN_ID]) {\n if (options?.runId) {\n ValidateRunID(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?.connectTimeout) {\n this.connectTimeout = options.connectTimeout;\n }\n if (options?.credential) {\n this.credential = options.credential;\n }\n };\n}\n\nexport { PlaywrightServiceConfig };\n"]}
@@ -170,4 +170,17 @@ export type TestRunCreatePayload = {
170
170
  config?: RunConfig;
171
171
  ciConfig?: CIInfo;
172
172
  };
173
+ export type WorkspaceMetaData = {
174
+ id?: string;
175
+ resourceId?: string;
176
+ name?: string;
177
+ state?: string;
178
+ subscriptionId?: string;
179
+ subscriptionState?: string;
180
+ tenantId?: string;
181
+ location?: string;
182
+ regionalAffinity?: string;
183
+ localAuth?: string;
184
+ storageUri?: string;
185
+ };
173
186
  //# sourceMappingURL=types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/common/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/common/types.ts"],"names":[],"mappings":"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"}