@azure/microsoft-playwright-testing 1.0.0-alpha.20250317.1 → 1.0.0-alpha.20250319.2
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.
- package/dist/{common → browser/common}/constants.d.ts +1 -1
- package/dist/browser/common/constants.d.ts.map +1 -0
- package/dist/browser/common/constants.js +226 -0
- package/dist/browser/common/constants.js.map +1 -0
- package/dist/browser/common/customerConfig.d.ts.map +1 -0
- package/dist/browser/common/customerConfig.js +13 -0
- package/dist/{common → browser/common}/customerConfig.js.map +1 -1
- package/dist/{common → browser/common}/entraIdAccessToken.d.ts +2 -2
- package/dist/browser/common/entraIdAccessToken.d.ts.map +1 -0
- package/dist/browser/common/entraIdAccessToken.js +71 -0
- package/dist/browser/common/entraIdAccessToken.js.map +1 -0
- package/dist/browser/common/environmentVariables.d.ts.map +1 -0
- package/dist/browser/common/environmentVariables.js +15 -0
- package/dist/browser/common/environmentVariables.js.map +1 -0
- package/dist/browser/common/executor.d.ts.map +1 -0
- package/dist/browser/common/executor.js +74 -0
- package/dist/browser/common/executor.js.map +1 -0
- package/dist/browser/common/httpService.d.ts.map +1 -0
- package/dist/browser/common/httpService.js +33 -0
- package/dist/browser/common/httpService.js.map +1 -0
- package/dist/browser/common/logger.d.ts.map +1 -0
- package/dist/browser/common/logger.js +6 -0
- package/dist/browser/common/logger.js.map +1 -0
- package/dist/browser/common/messages.d.ts.map +1 -0
- package/dist/browser/common/messages.js +37 -0
- package/dist/browser/common/messages.js.map +1 -0
- package/dist/browser/common/multimap.d.ts.map +1 -0
- package/dist/browser/common/multimap.js +60 -0
- package/dist/browser/common/multimap.js.map +1 -0
- package/dist/{common → browser/common}/playwrightServiceConfig.d.ts +1 -1
- package/dist/browser/common/playwrightServiceConfig.d.ts.map +1 -0
- package/dist/browser/common/playwrightServiceConfig.js +45 -0
- package/dist/browser/common/playwrightServiceConfig.js.map +1 -0
- package/dist/{common → browser/common}/types.d.ts +1 -1
- package/dist/browser/common/types.d.ts.map +1 -0
- package/dist/browser/common/types.js +4 -0
- package/dist/browser/common/types.js.map +1 -0
- package/dist/browser/core/global/playwright-service-global-setup.d.ts.map +1 -0
- package/dist/browser/core/global/playwright-service-global-setup.js +19 -0
- package/dist/browser/core/global/playwright-service-global-setup.js.map +1 -0
- package/dist/browser/core/global/playwright-service-global-teardown.d.ts.map +1 -0
- package/dist/browser/core/global/playwright-service-global-teardown.js +19 -0
- package/dist/browser/core/global/playwright-service-global-teardown.js.map +1 -0
- package/dist/{core → browser/core}/playwrightService.d.ts +1 -1
- package/dist/browser/core/playwrightService.d.ts.map +1 -0
- package/dist/browser/core/playwrightService.js +190 -0
- package/dist/browser/core/playwrightService.js.map +1 -0
- package/dist/browser/core/playwrightServiceEntra.d.ts.map +1 -0
- package/dist/browser/core/playwrightServiceEntra.js +49 -0
- package/dist/browser/core/playwrightServiceEntra.js.map +1 -0
- package/dist/browser/core/playwrightServiceUtils.d.ts +3 -0
- package/dist/browser/core/playwrightServiceUtils.d.ts.map +1 -0
- package/dist/browser/core/playwrightServiceUtils.js +11 -0
- package/dist/browser/core/playwrightServiceUtils.js.map +1 -0
- package/dist/{index.d.ts → browser/index.d.ts} +3 -3
- package/dist/browser/index.d.ts.map +1 -0
- package/dist/browser/index.js +11 -0
- package/dist/browser/index.js.map +1 -0
- package/dist/browser/model/entraTokenDetails.d.ts.map +1 -0
- package/dist/browser/model/entraTokenDetails.js +5 -0
- package/dist/browser/model/entraTokenDetails.js.map +1 -0
- package/dist/browser/model/mptTokenDetails.d.ts.map +1 -0
- package/dist/browser/model/mptTokenDetails.js +10 -0
- package/dist/browser/model/mptTokenDetails.js.map +1 -0
- package/dist/browser/model/shard.d.ts.map +1 -0
- package/dist/browser/model/shard.js +19 -0
- package/dist/browser/model/shard.js.map +1 -0
- package/dist/browser/model/storageUri.d.ts.map +1 -0
- package/dist/browser/model/storageUri.js +18 -0
- package/dist/browser/model/storageUri.js.map +1 -0
- package/dist/{model → browser/model}/testResult.d.ts +1 -1
- package/dist/browser/model/testResult.d.ts.map +1 -0
- package/dist/browser/model/testResult.js +5 -0
- package/dist/browser/model/testResult.js.map +1 -0
- package/dist/{model → browser/model}/testRun.d.ts +1 -1
- package/dist/browser/model/testRun.d.ts.map +1 -0
- package/dist/browser/model/testRun.js +8 -0
- package/dist/browser/model/testRun.js.map +1 -0
- package/dist/browser/package.json +3 -0
- package/dist/{reporter → browser/reporter}/index.d.ts +1 -1
- package/dist/browser/reporter/index.d.ts.map +1 -0
- package/dist/browser/reporter/index.js +12 -0
- package/dist/browser/reporter/index.js.map +1 -0
- package/dist/{reporter → browser/reporter}/mptReporter.d.ts +1 -1
- package/dist/browser/reporter/mptReporter.d.ts.map +1 -0
- package/dist/browser/reporter/mptReporter.js +373 -0
- package/dist/browser/reporter/mptReporter.js.map +1 -0
- package/dist/browser/utils/cIInfoProvider.d.ts.map +1 -0
- package/dist/browser/utils/cIInfoProvider.js +101 -0
- package/dist/browser/utils/cIInfoProvider.js.map +1 -0
- package/dist/browser/utils/getPlaywrightVersion.d.ts +2 -0
- package/dist/browser/utils/getPlaywrightVersion.d.ts.map +1 -0
- package/dist/browser/utils/getPlaywrightVersion.js +19 -0
- package/dist/browser/utils/getPlaywrightVersion.js.map +1 -0
- package/dist/{utils → browser/utils}/packageManager.d.ts +1 -1
- package/dist/browser/utils/packageManager.d.ts.map +1 -0
- package/dist/browser/utils/packageManager.js +47 -0
- package/dist/browser/utils/packageManager.js.map +1 -0
- package/dist/browser/utils/parseJwt.d.ts +4 -0
- package/dist/browser/utils/parseJwt.d.ts.map +1 -0
- package/dist/browser/utils/parseJwt.js +16 -0
- package/dist/browser/utils/parseJwt.js.map +1 -0
- package/dist/{utils → browser/utils}/reporterUtils.d.ts +10 -10
- package/dist/browser/utils/reporterUtils.d.ts.map +1 -0
- package/dist/browser/utils/reporterUtils.js +585 -0
- package/dist/browser/utils/reporterUtils.js.map +1 -0
- package/dist/{utils → browser/utils}/serviceClient.d.ts +7 -7
- package/dist/browser/utils/serviceClient.d.ts.map +1 -0
- package/dist/browser/utils/serviceClient.js +103 -0
- package/dist/browser/utils/serviceClient.js.map +1 -0
- package/dist/browser/utils/storageClient.d.ts.map +1 -0
- package/dist/browser/utils/storageClient.js +37 -0
- package/dist/browser/utils/storageClient.js.map +1 -0
- package/dist/{utils → browser/utils}/utils.d.ts +3 -4
- package/dist/browser/utils/utils.d.ts.map +1 -0
- package/dist/browser/utils/utils.js +151 -0
- package/dist/browser/utils/utils.js.map +1 -0
- package/dist/commonjs/common/constants.d.ts +95 -0
- package/dist/commonjs/common/constants.d.ts.map +1 -0
- package/dist/commonjs/common/constants.js.map +1 -0
- package/dist/commonjs/common/customerConfig.d.ts +9 -0
- package/dist/commonjs/common/customerConfig.d.ts.map +1 -0
- package/dist/commonjs/common/customerConfig.js.map +1 -0
- package/dist/commonjs/common/entraIdAccessToken.d.ts +12 -0
- package/dist/commonjs/common/entraIdAccessToken.d.ts.map +1 -0
- package/dist/{common → commonjs/common}/entraIdAccessToken.js +22 -18
- package/dist/commonjs/common/entraIdAccessToken.js.map +1 -0
- package/dist/commonjs/common/environmentVariables.d.ts +13 -0
- package/dist/commonjs/common/environmentVariables.d.ts.map +1 -0
- package/dist/{common → commonjs/common}/environmentVariables.js +4 -4
- package/dist/commonjs/common/environmentVariables.js.map +1 -0
- package/dist/commonjs/common/executor.d.ts +2 -0
- package/dist/commonjs/common/executor.d.ts.map +1 -0
- package/dist/{common → commonjs/common}/executor.js +13 -13
- package/dist/commonjs/common/executor.js.map +1 -0
- package/dist/commonjs/common/httpService.d.ts +5 -0
- package/dist/commonjs/common/httpService.d.ts.map +1 -0
- package/dist/{common → commonjs/common}/httpService.js +4 -4
- package/dist/commonjs/common/httpService.js.map +1 -0
- package/dist/commonjs/common/logger.d.ts +3 -0
- package/dist/commonjs/common/logger.d.ts.map +1 -0
- package/dist/commonjs/common/logger.js.map +1 -0
- package/dist/commonjs/common/messages.d.ts +35 -0
- package/dist/commonjs/common/messages.d.ts.map +1 -0
- package/dist/commonjs/common/messages.js.map +1 -0
- package/dist/commonjs/common/multimap.d.ts +16 -0
- package/dist/commonjs/common/multimap.d.ts.map +1 -0
- package/dist/commonjs/common/multimap.js.map +1 -0
- package/dist/commonjs/common/playwrightServiceConfig.d.ts +13 -0
- package/dist/commonjs/common/playwrightServiceConfig.d.ts.map +1 -0
- package/dist/commonjs/common/playwrightServiceConfig.js +48 -0
- package/dist/commonjs/common/playwrightServiceConfig.js.map +1 -0
- package/{types/microsoft-playwright-testing.d.ts → dist/commonjs/common/types.d.ts} +226 -273
- package/dist/commonjs/common/types.d.ts.map +1 -0
- package/dist/commonjs/common/types.js.map +1 -0
- package/dist/commonjs/core/global/playwright-service-global-setup.d.ts +4 -0
- package/dist/commonjs/core/global/playwright-service-global-setup.d.ts.map +1 -0
- package/dist/commonjs/core/global/playwright-service-global-setup.js +22 -0
- package/dist/commonjs/core/global/playwright-service-global-setup.js.map +1 -0
- package/dist/commonjs/core/global/playwright-service-global-teardown.d.ts +4 -0
- package/dist/commonjs/core/global/playwright-service-global-teardown.d.ts.map +1 -0
- package/dist/commonjs/core/global/playwright-service-global-teardown.js +22 -0
- package/dist/commonjs/core/global/playwright-service-global-teardown.js.map +1 -0
- package/dist/commonjs/core/playwrightService.d.ts +64 -0
- package/dist/commonjs/core/playwrightService.d.ts.map +1 -0
- package/dist/{core → commonjs/core}/playwrightService.js +44 -43
- package/dist/commonjs/core/playwrightService.js.map +1 -0
- package/dist/commonjs/core/playwrightServiceEntra.d.ts +16 -0
- package/dist/commonjs/core/playwrightServiceEntra.d.ts.map +1 -0
- package/dist/{core → commonjs/core}/playwrightServiceEntra.js +12 -12
- package/dist/commonjs/core/playwrightServiceEntra.js.map +1 -0
- package/dist/commonjs/core/playwrightServiceUtils-cjs.cjs.map +1 -0
- package/dist/commonjs/core/playwrightServiceUtils-cjs.d.cts.map +1 -0
- package/dist/commonjs/core/playwrightServiceUtils.d.ts +3 -0
- package/dist/commonjs/core/playwrightServiceUtils.js +10 -0
- package/dist/commonjs/index.d.ts +10 -0
- package/dist/commonjs/index.d.ts.map +1 -0
- package/dist/{index.js → commonjs/index.js} +9 -10
- package/dist/commonjs/index.js.map +1 -0
- package/dist/commonjs/model/entraTokenDetails.d.ts +5 -0
- package/dist/commonjs/model/entraTokenDetails.d.ts.map +1 -0
- package/dist/commonjs/model/entraTokenDetails.js.map +1 -0
- package/dist/commonjs/model/mptTokenDetails.d.ts +11 -0
- package/dist/commonjs/model/mptTokenDetails.d.ts.map +1 -0
- package/dist/commonjs/model/mptTokenDetails.js.map +1 -0
- package/dist/commonjs/model/shard.d.ts +41 -0
- package/dist/commonjs/model/shard.d.ts.map +1 -0
- package/dist/commonjs/model/shard.js.map +1 -0
- package/dist/commonjs/model/storageUri.d.ts +14 -0
- package/dist/commonjs/model/storageUri.d.ts.map +1 -0
- package/dist/commonjs/model/storageUri.js.map +1 -0
- package/dist/commonjs/model/testResult.d.ts +40 -0
- package/dist/commonjs/model/testResult.d.ts.map +1 -0
- package/dist/commonjs/model/testResult.js.map +1 -0
- package/dist/commonjs/model/testRun.d.ts +36 -0
- package/dist/commonjs/model/testRun.d.ts.map +1 -0
- package/dist/commonjs/model/testRun.js.map +1 -0
- package/dist/commonjs/package.json +3 -0
- package/dist/commonjs/reporter/index.d.ts +10 -0
- package/dist/commonjs/reporter/index.d.ts.map +1 -0
- package/dist/{reporter → commonjs/reporter}/index.js +2 -2
- package/dist/commonjs/reporter/index.js.map +1 -0
- package/{types/reporter/microsoft-playwright-testing.d.ts → dist/commonjs/reporter/mptReporter.d.ts} +100 -150
- package/dist/commonjs/reporter/mptReporter.d.ts.map +1 -0
- package/dist/{reporter → commonjs/reporter}/mptReporter.js +52 -52
- package/dist/commonjs/reporter/mptReporter.js.map +1 -0
- package/dist/{tsdoc-metadata.json → commonjs/tsdoc-metadata.json} +1 -1
- package/dist/commonjs/utils/cIInfoProvider.d.ts +25 -0
- package/dist/commonjs/utils/cIInfoProvider.d.ts.map +1 -0
- package/dist/commonjs/utils/cIInfoProvider.js.map +1 -0
- package/dist/commonjs/utils/getPlaywrightVersion.d.ts +2 -0
- package/dist/commonjs/utils/getPlaywrightVersion.d.ts.map +1 -0
- package/dist/commonjs/utils/getPlaywrightVersion.js +23 -0
- package/dist/commonjs/utils/getPlaywrightVersion.js.map +1 -0
- package/dist/commonjs/utils/packageManager.d.ts +15 -0
- package/dist/commonjs/utils/packageManager.d.ts.map +1 -0
- package/dist/commonjs/utils/packageManager.js.map +1 -0
- package/dist/commonjs/utils/parseJwt.d.ts +4 -0
- package/dist/commonjs/utils/parseJwt.d.ts.map +1 -0
- package/dist/commonjs/utils/parseJwt.js +21 -0
- package/dist/commonjs/utils/parseJwt.js.map +1 -0
- package/dist/commonjs/utils/reporterUtils.d.ts +60 -0
- package/dist/commonjs/utils/reporterUtils.d.ts.map +1 -0
- package/dist/{utils → commonjs/utils}/reporterUtils.js +47 -47
- package/dist/commonjs/utils/reporterUtils.js.map +1 -0
- package/dist/commonjs/utils/serviceClient.d.ts +25 -0
- package/dist/commonjs/utils/serviceClient.d.ts.map +1 -0
- package/dist/{utils → commonjs/utils}/serviceClient.js +19 -19
- package/dist/commonjs/utils/serviceClient.js.map +1 -0
- package/dist/commonjs/utils/storageClient.d.ts +6 -0
- package/dist/commonjs/utils/storageClient.d.ts.map +1 -0
- package/dist/{utils → commonjs/utils}/storageClient.js +7 -7
- package/dist/commonjs/utils/storageClient.js.map +1 -0
- package/dist/commonjs/utils/utils.d.ts +28 -0
- package/dist/commonjs/utils/utils.d.ts.map +1 -0
- package/dist/{utils → commonjs/utils}/utils.js +38 -60
- package/dist/commonjs/utils/utils.js.map +1 -0
- package/dist/esm/common/constants.d.ts +95 -0
- package/dist/esm/common/constants.d.ts.map +1 -0
- package/dist/esm/common/constants.js +226 -0
- package/dist/esm/common/constants.js.map +1 -0
- package/dist/esm/common/customerConfig.d.ts +9 -0
- package/dist/esm/common/customerConfig.d.ts.map +1 -0
- package/dist/esm/common/customerConfig.js +13 -0
- package/dist/esm/common/customerConfig.js.map +1 -0
- package/dist/esm/common/entraIdAccessToken.d.ts +12 -0
- package/dist/esm/common/entraIdAccessToken.d.ts.map +1 -0
- package/dist/esm/common/entraIdAccessToken.js +71 -0
- package/dist/esm/common/entraIdAccessToken.js.map +1 -0
- package/dist/esm/common/environmentVariables.d.ts +13 -0
- package/dist/esm/common/environmentVariables.d.ts.map +1 -0
- package/dist/esm/common/environmentVariables.js +15 -0
- package/dist/esm/common/environmentVariables.js.map +1 -0
- package/dist/esm/common/executor.d.ts +2 -0
- package/dist/esm/common/executor.d.ts.map +1 -0
- package/dist/esm/common/executor.js +74 -0
- package/dist/esm/common/executor.js.map +1 -0
- package/dist/esm/common/httpService.d.ts +5 -0
- package/dist/esm/common/httpService.d.ts.map +1 -0
- package/dist/esm/common/httpService.js +33 -0
- package/dist/esm/common/httpService.js.map +1 -0
- package/dist/esm/common/logger.d.ts +3 -0
- package/dist/esm/common/logger.d.ts.map +1 -0
- package/dist/esm/common/logger.js +6 -0
- package/dist/esm/common/logger.js.map +1 -0
- package/dist/esm/common/messages.d.ts +35 -0
- package/dist/esm/common/messages.d.ts.map +1 -0
- package/dist/esm/common/messages.js +37 -0
- package/dist/esm/common/messages.js.map +1 -0
- package/dist/esm/common/multimap.d.ts +16 -0
- package/dist/esm/common/multimap.d.ts.map +1 -0
- package/dist/esm/common/multimap.js +60 -0
- package/dist/esm/common/multimap.js.map +1 -0
- package/dist/esm/common/playwrightServiceConfig.d.ts +13 -0
- package/dist/esm/common/playwrightServiceConfig.d.ts.map +1 -0
- package/dist/esm/common/playwrightServiceConfig.js +45 -0
- package/dist/esm/common/playwrightServiceConfig.js.map +1 -0
- package/dist/esm/common/types.d.ts +226 -0
- package/dist/esm/common/types.d.ts.map +1 -0
- package/dist/esm/common/types.js +4 -0
- package/dist/esm/common/types.js.map +1 -0
- package/dist/esm/core/global/playwright-service-global-setup.d.ts +4 -0
- package/dist/esm/core/global/playwright-service-global-setup.d.ts.map +1 -0
- package/dist/esm/core/global/playwright-service-global-setup.js +19 -0
- package/dist/esm/core/global/playwright-service-global-setup.js.map +1 -0
- package/dist/esm/core/global/playwright-service-global-teardown.d.ts +4 -0
- package/dist/esm/core/global/playwright-service-global-teardown.d.ts.map +1 -0
- package/dist/esm/core/global/playwright-service-global-teardown.js +19 -0
- package/dist/esm/core/global/playwright-service-global-teardown.js.map +1 -0
- package/dist/esm/core/playwrightService.d.ts +64 -0
- package/dist/esm/core/playwrightService.d.ts.map +1 -0
- package/dist/esm/core/playwrightService.js +190 -0
- package/dist/esm/core/playwrightService.js.map +1 -0
- package/dist/esm/core/playwrightServiceEntra.d.ts +16 -0
- package/dist/esm/core/playwrightServiceEntra.d.ts.map +1 -0
- package/dist/esm/core/playwrightServiceEntra.js +49 -0
- package/dist/esm/core/playwrightServiceEntra.js.map +1 -0
- package/dist/esm/core/playwrightServiceUtils.d.ts +3 -0
- package/dist/esm/core/playwrightServiceUtils.d.ts.map +1 -0
- package/dist/esm/core/playwrightServiceUtils.js +11 -0
- package/dist/esm/core/playwrightServiceUtils.js.map +1 -0
- package/dist/esm/index.d.ts +10 -0
- package/dist/esm/index.d.ts.map +1 -0
- package/dist/esm/index.js +11 -0
- package/dist/esm/index.js.map +1 -0
- package/dist/esm/model/entraTokenDetails.d.ts +5 -0
- package/dist/esm/model/entraTokenDetails.d.ts.map +1 -0
- package/dist/esm/model/entraTokenDetails.js +5 -0
- package/dist/esm/model/entraTokenDetails.js.map +1 -0
- package/dist/esm/model/mptTokenDetails.d.ts +11 -0
- package/dist/esm/model/mptTokenDetails.d.ts.map +1 -0
- package/dist/esm/model/mptTokenDetails.js +10 -0
- package/dist/esm/model/mptTokenDetails.js.map +1 -0
- package/dist/esm/model/shard.d.ts +41 -0
- package/dist/esm/model/shard.d.ts.map +1 -0
- package/dist/esm/model/shard.js +19 -0
- package/dist/esm/model/shard.js.map +1 -0
- package/dist/esm/model/storageUri.d.ts +14 -0
- package/dist/esm/model/storageUri.d.ts.map +1 -0
- package/dist/esm/model/storageUri.js +18 -0
- package/dist/esm/model/storageUri.js.map +1 -0
- package/dist/esm/model/testResult.d.ts +40 -0
- package/dist/esm/model/testResult.d.ts.map +1 -0
- package/dist/esm/model/testResult.js +5 -0
- package/dist/esm/model/testResult.js.map +1 -0
- package/dist/esm/model/testRun.d.ts +36 -0
- package/dist/esm/model/testRun.d.ts.map +1 -0
- package/dist/esm/model/testRun.js +8 -0
- package/dist/esm/model/testRun.js.map +1 -0
- package/dist/esm/package.json +3 -0
- package/dist/esm/reporter/index.d.ts +10 -0
- package/dist/esm/reporter/index.d.ts.map +1 -0
- package/dist/esm/reporter/index.js +12 -0
- package/dist/esm/reporter/index.js.map +1 -0
- package/dist/esm/reporter/mptReporter.d.ts +100 -0
- package/dist/esm/reporter/mptReporter.d.ts.map +1 -0
- package/dist/esm/reporter/mptReporter.js +373 -0
- package/dist/esm/reporter/mptReporter.js.map +1 -0
- package/dist/esm/utils/cIInfoProvider.d.ts +25 -0
- package/dist/esm/utils/cIInfoProvider.d.ts.map +1 -0
- package/dist/esm/utils/cIInfoProvider.js +101 -0
- package/dist/esm/utils/cIInfoProvider.js.map +1 -0
- package/dist/esm/utils/getPlaywrightVersion.d.ts +2 -0
- package/dist/esm/utils/getPlaywrightVersion.d.ts.map +1 -0
- package/dist/esm/utils/getPlaywrightVersion.js +19 -0
- package/dist/esm/utils/getPlaywrightVersion.js.map +1 -0
- package/dist/esm/utils/packageManager.d.ts +15 -0
- package/dist/esm/utils/packageManager.d.ts.map +1 -0
- package/dist/esm/utils/packageManager.js +47 -0
- package/dist/esm/utils/packageManager.js.map +1 -0
- package/dist/esm/utils/parseJwt.d.ts +4 -0
- package/dist/esm/utils/parseJwt.d.ts.map +1 -0
- package/dist/esm/utils/parseJwt.js +16 -0
- package/dist/esm/utils/parseJwt.js.map +1 -0
- package/dist/esm/utils/reporterUtils.d.ts +60 -0
- package/dist/esm/utils/reporterUtils.d.ts.map +1 -0
- package/dist/esm/utils/reporterUtils.js +585 -0
- package/dist/esm/utils/reporterUtils.js.map +1 -0
- package/dist/esm/utils/serviceClient.d.ts +25 -0
- package/dist/esm/utils/serviceClient.d.ts.map +1 -0
- package/dist/esm/utils/serviceClient.js +103 -0
- package/dist/esm/utils/serviceClient.js.map +1 -0
- package/dist/esm/utils/storageClient.d.ts +6 -0
- package/dist/esm/utils/storageClient.d.ts.map +1 -0
- package/dist/esm/utils/storageClient.js +37 -0
- package/dist/esm/utils/storageClient.js.map +1 -0
- package/dist/esm/utils/utils.d.ts +28 -0
- package/dist/esm/utils/utils.d.ts.map +1 -0
- package/dist/esm/utils/utils.js +151 -0
- package/dist/esm/utils/utils.js.map +1 -0
- package/dist/react-native/common/constants.d.ts +95 -0
- package/dist/react-native/common/constants.d.ts.map +1 -0
- package/dist/react-native/common/constants.js +226 -0
- package/dist/react-native/common/constants.js.map +1 -0
- package/dist/react-native/common/customerConfig.d.ts +9 -0
- package/dist/react-native/common/customerConfig.d.ts.map +1 -0
- package/dist/react-native/common/customerConfig.js +13 -0
- package/dist/react-native/common/customerConfig.js.map +1 -0
- package/dist/react-native/common/entraIdAccessToken.d.ts +12 -0
- package/dist/react-native/common/entraIdAccessToken.d.ts.map +1 -0
- package/dist/react-native/common/entraIdAccessToken.js +71 -0
- package/dist/react-native/common/entraIdAccessToken.js.map +1 -0
- package/dist/react-native/common/environmentVariables.d.ts +13 -0
- package/dist/react-native/common/environmentVariables.d.ts.map +1 -0
- package/dist/react-native/common/environmentVariables.js +15 -0
- package/dist/react-native/common/environmentVariables.js.map +1 -0
- package/dist/react-native/common/executor.d.ts +2 -0
- package/dist/react-native/common/executor.d.ts.map +1 -0
- package/dist/react-native/common/executor.js +74 -0
- package/dist/react-native/common/executor.js.map +1 -0
- package/dist/react-native/common/httpService.d.ts +5 -0
- package/dist/react-native/common/httpService.d.ts.map +1 -0
- package/dist/react-native/common/httpService.js +33 -0
- package/dist/react-native/common/httpService.js.map +1 -0
- package/dist/react-native/common/logger.d.ts +3 -0
- package/dist/react-native/common/logger.d.ts.map +1 -0
- package/dist/react-native/common/logger.js +6 -0
- package/dist/react-native/common/logger.js.map +1 -0
- package/dist/react-native/common/messages.d.ts +35 -0
- package/dist/react-native/common/messages.d.ts.map +1 -0
- package/dist/react-native/common/messages.js +37 -0
- package/dist/react-native/common/messages.js.map +1 -0
- package/dist/react-native/common/multimap.d.ts +16 -0
- package/dist/react-native/common/multimap.d.ts.map +1 -0
- package/dist/react-native/common/multimap.js +60 -0
- package/dist/react-native/common/multimap.js.map +1 -0
- package/dist/react-native/common/playwrightServiceConfig.d.ts +13 -0
- package/dist/react-native/common/playwrightServiceConfig.d.ts.map +1 -0
- package/dist/react-native/common/playwrightServiceConfig.js +45 -0
- package/dist/react-native/common/playwrightServiceConfig.js.map +1 -0
- package/dist/react-native/common/types.d.ts +226 -0
- package/dist/react-native/common/types.d.ts.map +1 -0
- package/dist/react-native/common/types.js +4 -0
- package/dist/react-native/common/types.js.map +1 -0
- package/dist/react-native/core/global/playwright-service-global-setup.d.ts +4 -0
- package/dist/react-native/core/global/playwright-service-global-setup.d.ts.map +1 -0
- package/dist/react-native/core/global/playwright-service-global-setup.js +19 -0
- package/dist/react-native/core/global/playwright-service-global-setup.js.map +1 -0
- package/dist/react-native/core/global/playwright-service-global-teardown.d.ts +4 -0
- package/dist/react-native/core/global/playwright-service-global-teardown.d.ts.map +1 -0
- package/dist/react-native/core/global/playwright-service-global-teardown.js +19 -0
- package/dist/react-native/core/global/playwright-service-global-teardown.js.map +1 -0
- package/dist/react-native/core/playwrightService.d.ts +64 -0
- package/dist/react-native/core/playwrightService.d.ts.map +1 -0
- package/dist/react-native/core/playwrightService.js +190 -0
- package/dist/react-native/core/playwrightService.js.map +1 -0
- package/dist/react-native/core/playwrightServiceEntra.d.ts +16 -0
- package/dist/react-native/core/playwrightServiceEntra.d.ts.map +1 -0
- package/dist/react-native/core/playwrightServiceEntra.js +49 -0
- package/dist/react-native/core/playwrightServiceEntra.js.map +1 -0
- package/dist/react-native/core/playwrightServiceUtils.d.ts +3 -0
- package/dist/react-native/core/playwrightServiceUtils.d.ts.map +1 -0
- package/dist/react-native/core/playwrightServiceUtils.js +11 -0
- package/dist/react-native/core/playwrightServiceUtils.js.map +1 -0
- package/dist/react-native/index.d.ts +10 -0
- package/dist/react-native/index.d.ts.map +1 -0
- package/dist/react-native/index.js +11 -0
- package/dist/react-native/index.js.map +1 -0
- package/dist/react-native/model/entraTokenDetails.d.ts +5 -0
- package/dist/react-native/model/entraTokenDetails.d.ts.map +1 -0
- package/dist/react-native/model/entraTokenDetails.js +5 -0
- package/dist/react-native/model/entraTokenDetails.js.map +1 -0
- package/dist/react-native/model/mptTokenDetails.d.ts +11 -0
- package/dist/react-native/model/mptTokenDetails.d.ts.map +1 -0
- package/dist/react-native/model/mptTokenDetails.js +10 -0
- package/dist/react-native/model/mptTokenDetails.js.map +1 -0
- package/dist/react-native/model/shard.d.ts +41 -0
- package/dist/react-native/model/shard.d.ts.map +1 -0
- package/dist/react-native/model/shard.js +19 -0
- package/dist/react-native/model/shard.js.map +1 -0
- package/dist/react-native/model/storageUri.d.ts +14 -0
- package/dist/react-native/model/storageUri.d.ts.map +1 -0
- package/dist/react-native/model/storageUri.js +18 -0
- package/dist/react-native/model/storageUri.js.map +1 -0
- package/dist/react-native/model/testResult.d.ts +40 -0
- package/dist/react-native/model/testResult.d.ts.map +1 -0
- package/dist/react-native/model/testResult.js +5 -0
- package/dist/react-native/model/testResult.js.map +1 -0
- package/dist/react-native/model/testRun.d.ts +36 -0
- package/dist/react-native/model/testRun.d.ts.map +1 -0
- package/dist/react-native/model/testRun.js +8 -0
- package/dist/react-native/model/testRun.js.map +1 -0
- package/dist/react-native/package.json +3 -0
- package/dist/react-native/reporter/index.d.ts +10 -0
- package/dist/react-native/reporter/index.d.ts.map +1 -0
- package/dist/react-native/reporter/index.js +12 -0
- package/dist/react-native/reporter/index.js.map +1 -0
- package/dist/react-native/reporter/mptReporter.d.ts +100 -0
- package/dist/react-native/reporter/mptReporter.d.ts.map +1 -0
- package/dist/react-native/reporter/mptReporter.js +373 -0
- package/dist/react-native/reporter/mptReporter.js.map +1 -0
- package/dist/react-native/utils/cIInfoProvider.d.ts +25 -0
- package/dist/react-native/utils/cIInfoProvider.d.ts.map +1 -0
- package/dist/react-native/utils/cIInfoProvider.js +101 -0
- package/dist/react-native/utils/cIInfoProvider.js.map +1 -0
- package/dist/react-native/utils/getPlaywrightVersion.d.ts +2 -0
- package/dist/react-native/utils/getPlaywrightVersion.d.ts.map +1 -0
- package/dist/react-native/utils/getPlaywrightVersion.js +19 -0
- package/dist/react-native/utils/getPlaywrightVersion.js.map +1 -0
- package/dist/react-native/utils/packageManager.d.ts +15 -0
- package/dist/react-native/utils/packageManager.d.ts.map +1 -0
- package/dist/react-native/utils/packageManager.js +47 -0
- package/dist/react-native/utils/packageManager.js.map +1 -0
- package/dist/react-native/utils/parseJwt.d.ts +4 -0
- package/dist/react-native/utils/parseJwt.d.ts.map +1 -0
- package/dist/react-native/utils/parseJwt.js +16 -0
- package/dist/react-native/utils/parseJwt.js.map +1 -0
- package/dist/react-native/utils/reporterUtils.d.ts +60 -0
- package/dist/react-native/utils/reporterUtils.d.ts.map +1 -0
- package/dist/react-native/utils/reporterUtils.js +585 -0
- package/dist/react-native/utils/reporterUtils.js.map +1 -0
- package/dist/react-native/utils/serviceClient.d.ts +25 -0
- package/dist/react-native/utils/serviceClient.d.ts.map +1 -0
- package/dist/react-native/utils/serviceClient.js +103 -0
- package/dist/react-native/utils/serviceClient.js.map +1 -0
- package/dist/react-native/utils/storageClient.d.ts +6 -0
- package/dist/react-native/utils/storageClient.d.ts.map +1 -0
- package/dist/react-native/utils/storageClient.js +37 -0
- package/dist/react-native/utils/storageClient.js.map +1 -0
- package/dist/react-native/utils/utils.d.ts +28 -0
- package/dist/react-native/utils/utils.d.ts.map +1 -0
- package/dist/react-native/utils/utils.js +151 -0
- package/dist/react-native/utils/utils.js.map +1 -0
- package/package.json +73 -28
- package/CHANGELOG.md +0 -88
- package/dist/common/constants.d.ts.map +0 -1
- package/dist/common/constants.js.map +0 -1
- package/dist/common/customerConfig.d.ts.map +0 -1
- package/dist/common/entraIdAccessToken.d.ts.map +0 -1
- package/dist/common/entraIdAccessToken.js.map +0 -1
- package/dist/common/environmentVariables.d.ts.map +0 -1
- package/dist/common/environmentVariables.js.map +0 -1
- package/dist/common/executor.d.ts.map +0 -1
- package/dist/common/executor.js.map +0 -1
- package/dist/common/httpService.d.ts.map +0 -1
- package/dist/common/httpService.js.map +0 -1
- package/dist/common/logger.d.ts.map +0 -1
- package/dist/common/logger.js.map +0 -1
- package/dist/common/messages.d.ts.map +0 -1
- package/dist/common/messages.js.map +0 -1
- package/dist/common/multimap.d.ts.map +0 -1
- package/dist/common/multimap.js.map +0 -1
- package/dist/common/playwrightServiceConfig.d.ts.map +0 -1
- package/dist/common/playwrightServiceConfig.js +0 -48
- package/dist/common/playwrightServiceConfig.js.map +0 -1
- package/dist/common/types.d.ts.map +0 -1
- package/dist/common/types.js.map +0 -1
- package/dist/core/global/playwright-service-global-setup.d.ts.map +0 -1
- package/dist/core/global/playwright-service-global-setup.js +0 -22
- package/dist/core/global/playwright-service-global-setup.js.map +0 -1
- package/dist/core/global/playwright-service-global-teardown.d.ts.map +0 -1
- package/dist/core/global/playwright-service-global-teardown.js +0 -22
- package/dist/core/global/playwright-service-global-teardown.js.map +0 -1
- package/dist/core/playwrightService.d.ts.map +0 -1
- package/dist/core/playwrightService.js.map +0 -1
- package/dist/core/playwrightServiceEntra.d.ts.map +0 -1
- package/dist/core/playwrightServiceEntra.js.map +0 -1
- package/dist/index.d.ts.map +0 -1
- package/dist/index.js.map +0 -1
- package/dist/model/entraTokenDetails.d.ts.map +0 -1
- package/dist/model/entraTokenDetails.js.map +0 -1
- package/dist/model/mptTokenDetails.d.ts.map +0 -1
- package/dist/model/mptTokenDetails.js.map +0 -1
- package/dist/model/shard.d.ts.map +0 -1
- package/dist/model/shard.js.map +0 -1
- package/dist/model/storageUri.d.ts.map +0 -1
- package/dist/model/storageUri.js.map +0 -1
- package/dist/model/testResult.d.ts.map +0 -1
- package/dist/model/testResult.js.map +0 -1
- package/dist/model/testRun.d.ts.map +0 -1
- package/dist/model/testRun.js.map +0 -1
- package/dist/reporter/index.d.ts.map +0 -1
- package/dist/reporter/index.js.map +0 -1
- package/dist/reporter/mptReporter.d.ts.map +0 -1
- package/dist/reporter/mptReporter.js.map +0 -1
- package/dist/utils/cIInfoProvider.d.ts.map +0 -1
- package/dist/utils/cIInfoProvider.js.map +0 -1
- package/dist/utils/packageManager.d.ts.map +0 -1
- package/dist/utils/packageManager.js.map +0 -1
- package/dist/utils/reporterUtils.d.ts.map +0 -1
- package/dist/utils/reporterUtils.js.map +0 -1
- package/dist/utils/serviceClient.d.ts.map +0 -1
- package/dist/utils/serviceClient.js.map +0 -1
- package/dist/utils/storageClient.d.ts.map +0 -1
- package/dist/utils/storageClient.js.map +0 -1
- package/dist/utils/utils.d.ts.map +0 -1
- package/dist/utils/utils.js.map +0 -1
- /package/dist/{common → browser/common}/customerConfig.d.ts +0 -0
- /package/dist/{common → browser/common}/environmentVariables.d.ts +0 -0
- /package/dist/{common → browser/common}/executor.d.ts +0 -0
- /package/dist/{common → browser/common}/httpService.d.ts +0 -0
- /package/dist/{common → browser/common}/logger.d.ts +0 -0
- /package/dist/{common → browser/common}/messages.d.ts +0 -0
- /package/dist/{common → browser/common}/multimap.d.ts +0 -0
- /package/dist/{core → browser/core}/global/playwright-service-global-setup.d.ts +0 -0
- /package/dist/{core → browser/core}/global/playwright-service-global-teardown.d.ts +0 -0
- /package/dist/{core → browser/core}/playwrightServiceEntra.d.ts +0 -0
- /package/dist/{model → browser/model}/entraTokenDetails.d.ts +0 -0
- /package/dist/{model → browser/model}/mptTokenDetails.d.ts +0 -0
- /package/dist/{model → browser/model}/shard.d.ts +0 -0
- /package/dist/{model → browser/model}/storageUri.d.ts +0 -0
- /package/dist/{utils → browser/utils}/cIInfoProvider.d.ts +0 -0
- /package/dist/{utils → browser/utils}/storageClient.d.ts +0 -0
- /package/dist/{common → commonjs/common}/constants.js +0 -0
- /package/dist/{common → commonjs/common}/customerConfig.js +0 -0
- /package/dist/{common → commonjs/common}/logger.js +0 -0
- /package/dist/{common → commonjs/common}/messages.js +0 -0
- /package/dist/{common → commonjs/common}/multimap.js +0 -0
- /package/dist/{common → commonjs/common}/types.js +0 -0
- /package/dist/{model → commonjs/model}/entraTokenDetails.js +0 -0
- /package/dist/{model → commonjs/model}/mptTokenDetails.js +0 -0
- /package/dist/{model → commonjs/model}/shard.js +0 -0
- /package/dist/{model → commonjs/model}/storageUri.js +0 -0
- /package/dist/{model → commonjs/model}/testResult.js +0 -0
- /package/dist/{model → commonjs/model}/testRun.js +0 -0
- /package/dist/{utils → commonjs/utils}/cIInfoProvider.js +0 -0
- /package/dist/{utils → commonjs/utils}/packageManager.js +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"reporterUtils.js","sourceRoot":"","sources":["../../../src/utils/reporterUtils.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport type {\n FullResult,\n Location,\n TestCase,\n TestResult,\n TestStep,\n FullConfig,\n Suite,\n} from \"@playwright/test/reporter\";\nimport { exec } from \"node:child_process\";\nimport { reporterLogger } from \"../common/logger.js\";\nimport { createHash, randomUUID } from \"node:crypto\";\nimport type { IBackOffOptions } from \"../common/types.js\";\nimport fs from \"node:fs\";\nimport path from \"node:path\";\nimport { Constants } from \"../common/constants.js\";\nimport type { EnvironmentVariables } from \"../common/environmentVariables.js\";\nimport type { DedupedStep, RawTestStep } from \"../common/types.js\";\nimport { TokenType } from \"../model/mptTokenDetails.js\";\nimport type { UploadMetadata } from \"../model/shard.js\";\nimport { Shard, TestRunStatus } from \"../model/shard.js\";\nimport type { RawTestResult } from \"../model/testResult.js\";\nimport { TestResult as MPTTestResult } from \"../model/testResult.js\";\nimport type { TestRunConfig } from \"../model/testRun.js\";\nimport { TestRun } from \"../model/testRun.js\";\nimport type { CIInfo } from \"./cIInfoProvider.js\";\nimport { CI_PROVIDERS } from \"./cIInfoProvider.js\";\nimport { CIInfoProvider } from \"./cIInfoProvider.js\";\nimport type { StorageUri } from \"../model/storageUri.js\";\nimport { getPackageVersion } from \"./utils.js\";\nclass ReporterUtils {\n private envVariables: EnvironmentVariables;\n\n private config: FullConfig;\n totalTests: number;\n failedTests: number;\n skippedTests: number;\n passedTests: number;\n flakyTests: number;\n startTime: number;\n\n // eslint-disable-next-line @azure/azure-sdk/ts-use-interface-parameters\n constructor(envVariables: EnvironmentVariables, config: FullConfig, _: Suite) {\n this.config = config;\n this.envVariables = envVariables;\n this.startTime = Date.now();\n\n this.totalTests = 0;\n this.failedTests = 0;\n this.skippedTests = 0;\n this.passedTests = 0;\n this.flakyTests = 0;\n }\n\n public async getTestRunObject(ciInfo: CIInfo): Promise<TestRun> {\n const testRun = new TestRun();\n const runName = this.envVariables.runName || (await this.getRunName(ciInfo));\n testRun.testRunId = this.envVariables.runId;\n testRun.displayName = ReporterUtils.isNullOrEmpty(runName) ? this.envVariables.runId : runName;\n testRun.creatorName = this.envVariables.userName;\n testRun.creatorId = this.envVariables.userId!;\n testRun.startTime = ReporterUtils.timestampToRFC3339(this.startTime);\n testRun.ciConfig = {\n ciProviderName: ciInfo.provider!,\n branch: ciInfo.branch!,\n author: ciInfo.author!,\n commitId: ciInfo.commitId!,\n revisionUrl: ciInfo.revisionUrl!,\n };\n testRun.testRunConfig = this.getTestRunConfig();\n testRun.cloudReportingEnabled = \"true\";\n return testRun;\n }\n\n public getTestRunShardStartObject(): Shard {\n const shard = new Shard();\n if (this.config.shard !== null && this.config.shard !== undefined) {\n this.envVariables.shardId = this.config.shard.current.toString();\n } else {\n this.envVariables.shardId = \"1\";\n }\n shard.shardId = this.envVariables.shardId;\n shard.summary = {\n startTime: ReporterUtils.timestampToRFC3339(this.startTime),\n };\n shard.uploadCompleted = false;\n return shard;\n }\n\n public getTestRunShardEndObject(\n result: FullResult,\n // eslint-disable-next-line @azure/azure-sdk/ts-use-interface-parameters\n shard: Shard,\n errorMessages: string[],\n attachmentMetadata: UploadMetadata,\n workers: number,\n ): Shard {\n shard.shardId = this.envVariables.shardId ?? \"1\";\n shard.summary.totalTime = result.duration;\n shard.summary.endTime = ReporterUtils.timestampToRFC3339(Date.now());\n shard.summary.status = TestRunStatus.CLIENT_COMPLETE;\n shard.summary.errorMessages = errorMessages;\n shard.summary.uploadMetadata = attachmentMetadata;\n shard.uploadCompleted = true;\n shard.workers = workers;\n return shard;\n }\n\n public getOSName(result: TestResult, data: string): string {\n try {\n for (const attachment of result.attachments) {\n if (attachment.name === data) {\n const match = attachment?.contentType?.match(/charset=(.*)/);\n const charset = match && match.length > 1 ? match[1] : \"utf-8\";\n return attachment.body?.toString((charset as any) || \"utf-8\").toUpperCase() || \"\";\n }\n }\n } catch (error) {\n reporterLogger.error(`Error in fetching OS - ${error}`);\n }\n return \"\";\n }\n\n public getTestResultObject(test: TestCase, result: TestResult, jobName: string): MPTTestResult {\n switch (test.outcome()) {\n case \"skipped\":\n this.skippedTests++;\n this.totalTests++;\n break;\n case \"expected\":\n this.passedTests++;\n this.totalTests++;\n break;\n case \"unexpected\":\n if (result.retry === test.retries) {\n this.failedTests++;\n this.totalTests++;\n }\n break;\n case \"flaky\":\n this.totalTests++;\n this.flakyTests++;\n break;\n default:\n break;\n }\n\n const testResult = new MPTTestResult();\n testResult.runId = this.envVariables.runId;\n testResult.shardId = this.envVariables.runId + \"_\" + this.envVariables.shardId;\n testResult.accountId = this.envVariables.accountId!;\n testResult.suiteId = ReporterUtils.calculateSha1(`${test.parent.title}-${test.location.file}`);\n testResult.testId = testResult.suiteId.concat(`-${ReporterUtils.calculateSha1(test.title)}`);\n testResult.testCombinationId = test.id;\n testResult.testExecutionId = randomUUID();\n testResult.testTitle = test.title;\n testResult.suiteTitle = this.extractRootParentTitle(test.parent)!;\n testResult.fileName = test.location.file;\n testResult.status = this.getTestStatus(test, result);\n testResult.lineNumber = test.location.line;\n testResult.retry = result.retry ? result.retry : 0;\n let browserName = test.parent.project()?.use.browserName?.toLowerCase();\n if (!browserName) {\n browserName = test.parent.project()?.use.defaultBrowserType?.toLowerCase();\n }\n testResult.webTestConfig = {\n jobName: jobName,\n projectName: test.parent.project()!.name,\n browserType: browserName ? browserName.toUpperCase() : \"\",\n os: this.getOSName(result, Constants.OS),\n };\n testResult.annotations = this.extractTestAnnotations(test.annotations);\n testResult.tags = this.extractTestTags(test);\n testResult.resultsSummary = {\n status: result.status.toUpperCase(),\n duration: result.duration,\n startTime: result.startTime.toISOString().replace(/\\.\\d+Z$/, \"Z\"),\n attachmentsMetadata: this.getAttachmentStatus(result),\n };\n testResult.artifactsPath = result.attachments\n .filter((attachment) => attachment?.path !== null && attachment?.path !== undefined) // Filter attachments with defined and non-null path property\n .map(\n (attachment) =>\n `${testResult.testExecutionId}/${ReporterUtils.getFileRelativePath(attachment.path!)}`,\n );\n return testResult;\n }\n\n public generateMarkdownSummary(testRunUrl: string): void {\n try {\n if (CIInfoProvider.getCIProvider() === CI_PROVIDERS.GITHUB) {\n const markdownContent = `\n#### Microsoft Playwright Testing run summary\n\n#### Results:\n \n **Passed:** ${this.passedTests}\n \n **Failed:** ${this.failedTests}\n \n **Flaky:** ${this.flakyTests}\n \n **Skipped:** ${this.skippedTests}\n \n#### For more details, visit the [service dashboard](${testRunUrl}).\n `;\n fs.writeFileSync(process.env[\"GITHUB_STEP_SUMMARY\"]!, markdownContent);\n }\n } catch (err) {\n reporterLogger.error(`\\nCould not generate markdown summary - ${err}`);\n }\n }\n\n public getRawTestResultObject(result: TestResult): RawTestResult {\n const rawTestResult: RawTestResult = {\n steps: this.dedupeSteps(result.steps).map((step) => this.serializeTestStep(step)),\n errors: this.getTestError(result),\n stdErr: result.stderr ? JSON.stringify(result.stderr, null, 2) : \"\",\n stdOut: result.stdout ? JSON.stringify(result.stdout, null, 2) : \"\",\n };\n return rawTestResult;\n }\n\n public static getRunId(cIInfo: CIInfo): string {\n if (cIInfo === null || cIInfo.provider === CI_PROVIDERS.DEFAULT) {\n return randomUUID();\n }\n\n const concatString = `${cIInfo.provider}-${cIInfo.repo}-${cIInfo.runId}-${cIInfo.runAttempt}`;\n const runId = ReporterUtils.calculateSha1(concatString);\n return runId;\n }\n\n public static calculateSha1(buffer: Buffer | string): string {\n const hash = createHash(\"sha1\");\n hash.update(buffer);\n return hash.digest(\"hex\");\n }\n\n /*\n public static getTokenDetails(accessToken: string) {\n let tokenDetails = new MPTTokenDetails();\n try {\n const token = accessToken.split('.')[1];\n const _token = Buffer.from(token, 'base64');\n tokenDetails = JSON.parse(_token.toString());\n } catch (err) {\n throw err;\n }\n return tokenDetails;\n }\n */\n\n public static getTokenDetails<T>(accessToken: string, tokenType: TokenType): T {\n const token = accessToken.split(\".\")[1]!;\n const _token = Buffer.from(token, \"base64\");\n const tokenDetails = JSON.parse(_token.toString());\n\n switch (tokenType) {\n case TokenType.MPT:\n return tokenDetails as T;\n case TokenType.ENTRA:\n return tokenDetails as T;\n default:\n throw new Error(\"Unsupported token type\");\n }\n }\n\n public static hasAudienceClaim(token: string): boolean {\n try {\n // Split the token into its three parts\n const parts = token.split(\".\");\n if (parts.length !== 3) {\n throw new Error(\"Invalid token format\");\n }\n\n // Base64 decode the payload\n const payload = parts[1]!;\n const decodedPayload = Buffer.from(payload, \"base64\");\n\n // Parse the decoded payload as JSON\n const payloadObject = JSON.parse(decodedPayload.toString());\n\n // Check if the payload has an 'aud' claim\n return \"aud\" in payloadObject;\n } catch (error) {\n return false;\n }\n }\n\n public static timestampToRFC3339(timestamp: number): string {\n const date = new Date(timestamp);\n const dateString = date.toISOString().replace(/\\.\\d+Z$/, \"Z\");\n return dateString;\n }\n\n public static getFileRelativePath(filePath: string): string {\n if (filePath) {\n let parts = filePath.split(\"/\");\n\n if (parts.length > 1) {\n return parts[parts.length - 1]!;\n }\n\n parts = filePath.split(\"\\\\\");\n\n if (parts.length > 1) {\n return parts[parts.length - 1]!;\n }\n }\n\n return filePath;\n }\n\n public static getReporterBackOffOptions: Partial<IBackOffOptions> = {\n numOfAttempts: 3,\n jitter: \"full\",\n retry: (error) => {\n if (error.response) {\n const status = error.response.status;\n if (Constants.NON_RETRYABLE_STATUS_CODES.includes(status)) {\n return false;\n }\n }\n return true;\n },\n };\n\n // eslint-disable-next-line @azure/azure-sdk/ts-use-interface-parameters\n public static isTimeGreaterThanCurrentPlus10Minutes(sasUri: StorageUri): boolean {\n try {\n const url = new URL(sasUri.uri);\n const params = new URLSearchParams(url.search);\n const expiryTime = params.get(\"se\"); // 'se' is the query parameter for the expiry time\n if (expiryTime) {\n const timestampFromIsoString = new Date(expiryTime).getTime();\n const currentTimestampPlus10Minutes = Date.now() + 10 * 60 * 1000;\n const isSasValidityGreaterThanCurrentTimePlus10Minutes =\n timestampFromIsoString > currentTimestampPlus10Minutes;\n if (!isSasValidityGreaterThanCurrentTimePlus10Minutes) {\n reporterLogger.info(\n `Sas rotation required because close to expiry, SasUriValidTillTime: ${timestampFromIsoString}, CurrentTime: ${currentTimestampPlus10Minutes}`,\n );\n }\n return isSasValidityGreaterThanCurrentTimePlus10Minutes;\n }\n reporterLogger.error(`Sas rotation required because expiry param not found.`);\n return false;\n } catch (error) {\n reporterLogger.error(`Sas rotation required because of ${error}.`);\n return false;\n }\n }\n\n public static getFileSize(attachmentPath: string): number {\n try {\n const stats = fs.statSync(attachmentPath);\n return stats.size;\n } catch (error) {\n return 0;\n }\n }\n\n public static getBufferSize(attachmentBody: Buffer): number {\n try {\n const fileSizeInBytes = attachmentBody.length;\n return fileSizeInBytes;\n } catch (error) {\n return 0;\n }\n }\n\n public redactAccessToken(info: string | undefined): string {\n if (!info || ReporterUtils.isNullOrEmpty(this.envVariables.accessToken)) {\n return \"\";\n }\n const accessTokenRegex = new RegExp(this.envVariables.accessToken, \"g\");\n return info.replace(accessTokenRegex, Constants.DEFAULT_REDACTED_MESSAGE);\n }\n public static getRegionFromAccountID(accountId: string): string | undefined {\n if (accountId.includes(\"_\")) {\n return accountId.split(\"_\")[0]!;\n } else {\n return;\n } // Handling for older workspaces without region in id\n }\n\n public progressBar(current: number, total: number): void {\n const width = 40;\n const percent = current / total;\n const completed = Math.round(width * percent);\n const remaining = width - completed;\n\n if (current % Math.round(total / 5) === 0 || current === total) {\n process.stdout.write(\"\\r\");\n process.stdout.write(\n `[${\"=\".repeat(completed)}${\" \".repeat(remaining)}] ${Math.round(percent * 100)}%`,\n );\n }\n }\n\n private getTestRunConfig(): TestRunConfig {\n const testRunConfig: TestRunConfig = {\n workers: this.getWorkers(),\n pwVersion: this.config.version,\n timeout: this.config.globalTimeout,\n repeatEach: this.config.projects[0].repeatEach,\n retries: this.config.projects[0].retries,\n shards: this.config.shard ? this.config.shard : { total: 1 },\n testFramework: {\n name: Constants.TEST_FRAMEWORK_NAME,\n version: this.config.version,\n runnerName: Constants.TEST_FRAMEWORK_RUNNERNAME,\n },\n testType: Constants.TEST_TYPE,\n testSdkLanguage: Constants.TEST_SDK_LANGUAGE,\n reporterPackageVersion: getPackageVersion(),\n };\n return testRunConfig;\n }\n\n private relativeLocation(location: Location | undefined): Location | undefined {\n if (!location) {\n return undefined;\n }\n const file = this.toPosixPath(path.relative(this.config.rootDir, location.file));\n return {\n file,\n line: location.line,\n column: location.column,\n };\n }\n\n private extractTestTags(input: TestCase): string[] {\n let tags: string[] = [];\n if (\"tags\" in input && Array.isArray(input.tags) && input.tags.length > 0) {\n tags = input.tags.map((tag) => tag.slice(1));\n return tags;\n }\n\n // Check if the input string contains tags directly\n const regex = /@(\\w+)/g;\n const matches = input.title.match(regex);\n if (matches) {\n tags = tags.concat(matches.map((match) => match.slice(1)));\n }\n\n // Try parsing the input string as a JavaScript object\n try {\n const obj = JSON.parse(`{${input}}`);\n if (obj.tag && Array.isArray(obj.tag)) {\n tags = tags.concat(obj.tag);\n }\n } catch (error) {\n // Ignore parsing errors\n }\n return tags;\n }\n\n private extractTestAnnotations(annotations: TestCase[\"annotations\"]): string[] {\n const result = annotations.map((annotation) => {\n if (annotation.type && annotation.description) {\n return `${annotation.type}: ${annotation.description}`;\n }\n return annotation.type;\n });\n return result;\n }\n\n private toPosixPath(aPath: string): string {\n return aPath.split(path.sep).join(path.posix.sep);\n }\n\n private getAttachmentStatus(testResult: TestResult): string {\n let attachmentStatus: string = \"\";\n for (const attachment of testResult.attachments) {\n if (attachment.contentType.includes(\"image\")) {\n if (attachmentStatus !== \"\") {\n attachmentStatus += \",\";\n }\n attachmentStatus += \"image\";\n } else if (attachment.contentType.includes(\"video\")) {\n if (attachmentStatus !== \"\") {\n attachmentStatus += \",\";\n }\n attachmentStatus += \"video\";\n } else if (attachment.contentType === \"application/zip\") {\n if (attachmentStatus !== \"\") {\n attachmentStatus += \",\";\n }\n attachmentStatus += \"trace\";\n } else if (attachment.contentType === \"text/plain\") {\n if (attachmentStatus !== \"\") {\n attachmentStatus += \",\";\n }\n attachmentStatus += \"txt\";\n }\n }\n return attachmentStatus;\n }\n\n private dedupeSteps(steps: TestStep[]): DedupedStep[] {\n const result: DedupedStep[] = [];\n let lastResult = undefined;\n for (const step of steps) {\n const canDedupe =\n !step.error && step.duration >= 0 && step.location?.file && !step.steps.length;\n const lastStep = lastResult?.step;\n if (\n canDedupe &&\n lastResult &&\n lastStep &&\n step.category === lastStep.category &&\n step.title === lastStep.title &&\n step.location?.file === lastStep.location?.file &&\n step.location?.line === lastStep.location?.line &&\n step.location?.column === lastStep.location?.column\n ) {\n ++lastResult.count;\n lastResult.duration += step.duration;\n continue;\n }\n lastResult = { step, count: 1, duration: step.duration };\n result.push(lastResult);\n if (!canDedupe) {\n lastResult = undefined;\n }\n }\n return result;\n }\n\n private serializeTestStep(dedupedStep: DedupedStep): RawTestStep {\n const { step, duration, count } = dedupedStep;\n const result: RawTestStep = {\n title: step.title,\n category: step.category,\n startTime: step.startTime.toISOString(),\n duration,\n error: step.error ? step.error.message : undefined,\n location: this.relativeLocation(step.location),\n steps: this.dedupeSteps(step.steps).map((subStep) => this.serializeTestStep(subStep)),\n count: count,\n };\n return result;\n }\n\n private getTestStatus(test: TestCase, result: TestResult): string {\n if (test.expectedStatus === result.status) {\n if (result.status === \"skipped\") {\n return \"SKIPPED\";\n } else {\n return \"PASSED\";\n }\n } else if (result.status === \"interrupted\") {\n return \"SKIPPED\";\n } else {\n return \"FAILED\";\n }\n }\n\n private extractRootParentTitle(suite: Suite): string | undefined {\n // Traverse through the parent properties until reaching the root parent\n let currentSuite: Suite | undefined = suite;\n let depthCount: number = 0;\n let suiteTitle: string = currentSuite.title;\n const projectName = currentSuite.project()!.name;\n while (currentSuite?.parent && !ReporterUtils.isNullOrEmpty(currentSuite.parent.title)) {\n if (depthCount > 10 || currentSuite.parent.title === projectName) {\n break;\n }\n suiteTitle = suiteTitle + \" > \" + currentSuite.parent.title;\n currentSuite = currentSuite.parent;\n depthCount++;\n }\n return suiteTitle;\n }\n\n private async getRunName(ciInfo: CIInfo): Promise<string> {\n if (\n ciInfo.provider === 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 let gitCommitMessage: string | null = null;\n try {\n const gitVersion = await this.runCommand(Constants.GIT_VERSION_COMMAND);\n if (ReporterUtils.isNullOrEmpty(gitVersion)) {\n throw new Error(\"Git is not installed on the machine\");\n }\n const isInsideWorkTree = await this.runCommand(Constants.GIT_REV_PARSE);\n if (isInsideWorkTree !== \"true\") {\n throw new Error(\"Not inside a git repository\");\n }\n gitCommitMessage = await this.runCommand(Constants.GIT_COMMIT_MESSAGE_COMMAND);\n return gitCommitMessage;\n } catch (err) {\n reporterLogger.error(`\\nError in getting git commit message: ${err}.`);\n return \"\";\n }\n }\n\n private async 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\n public static isNullOrEmpty(str: string | null | undefined): boolean {\n return !str || str.trim() === \"\";\n }\n\n private getTestError(result: TestResult): string {\n if (!result.errors || result.errors.length === 0) return \"\";\n const errorMessages: { message: string }[] = [];\n result.errors.forEach((error) => {\n if (error.message) errorMessages.push({ message: error.message });\n if (error.snippet && error.location) {\n errorMessages.push({\n message: error.snippet + \"\\n\\n\" + this.getReadableLineLocation(error.location),\n });\n } else if (error.snippet) errorMessages.push({ message: error.snippet });\n });\n return JSON.stringify(errorMessages, null, 2);\n }\n\n private getReadableLineLocation(location: Location): string {\n return `at ${location.file}:${location.line}:${location.column}`;\n }\n\n private getWorkers(): number {\n if (\n this.config.metadata &&\n \"actualWorkers\" in this.config.metadata &&\n typeof this.config.metadata.actualWorkers === \"number\"\n ) {\n return this.config.metadata.actualWorkers;\n }\n return this.config.workers;\n }\n}\n\nexport default ReporterUtils;\n"]}
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import type { FullResult } from "@playwright/test/reporter";
|
|
2
|
-
import type { EnvironmentVariables } from "../common/environmentVariables";
|
|
3
|
-
import type { Shard, UploadMetadata } from "../model/shard";
|
|
4
|
-
import type { StorageUri } from "../model/storageUri";
|
|
5
|
-
import type { TestResult } from "../model/testResult";
|
|
6
|
-
import type { TestRun } from "../model/testRun";
|
|
7
|
-
import type { CIInfo } from "./cIInfoProvider";
|
|
8
|
-
import type ReporterUtils from "./reporterUtils";
|
|
2
|
+
import type { EnvironmentVariables } from "../common/environmentVariables.js";
|
|
3
|
+
import type { Shard, UploadMetadata } from "../model/shard.js";
|
|
4
|
+
import type { StorageUri } from "../model/storageUri.js";
|
|
5
|
+
import type { TestResult } from "../model/testResult.js";
|
|
6
|
+
import type { TestRun } from "../model/testRun.js";
|
|
7
|
+
import type { CIInfo } from "./cIInfoProvider.js";
|
|
8
|
+
import type ReporterUtils from "./reporterUtils.js";
|
|
9
9
|
export declare class ServiceClient {
|
|
10
10
|
private httpService;
|
|
11
11
|
private readonly envVariables;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"serviceClient.d.ts","sourceRoot":"","sources":["../../../src/utils/serviceClient.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AAE5D,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,mCAAmC,CAAC;AAE9E,OAAO,KAAK,EAAE,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAC/D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAClD,OAAO,KAAK,aAAa,MAAM,oBAAoB,CAAC;AAIpD,qBAAa,aAAa;IACxB,OAAO,CAAC,WAAW,CAAc;IACjC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAuB;IACpD,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAgB;IAC9C,OAAO,CAAC,QAAQ,CAAC,uBAAuB,CAAiC;IACzE,OAAO,CAAC,2BAA2B,CAA2B;IAC9D,OAAO,CAAC,0BAA0B,CAAwB;gBAGxD,YAAY,EAAE,oBAAoB,EAClC,aAAa,EAAE,aAAa,EAE5B,mBAAmB,EAAE,CAAC,YAAY,EAAE,MAAM,KAAK,IAAI,EACnD,2BAA2B,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,EACrD,0BAA0B,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI;IAU7C,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAmC9C,qBAAqB,IAAI,OAAO,CAAC,KAAK,CAAC;IAqBvC,mBAAmB,CACvB,MAAM,EAAE,UAAU,EAElB,KAAK,EAAE,KAAK,EACZ,aAAa,EAAE,MAAM,EAAE,EACvB,kBAAkB,EAAE,cAAc,EAClC,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,OAAO,CAAC;IA4Bb,eAAe,CAAC,WAAW,EAAE,UAAU,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAsBzD,gBAAgB,IAAI,OAAO,CAAC,UAAU,CAAC;IAkB7C,OAAO,CAAC,kBAAkB;IAI1B,OAAO,CAAC,mBAAmB;CAS5B"}
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
// Copyright (c) Microsoft Corporation.
|
|
2
|
+
// Licensed under the MIT License.
|
|
3
|
+
import { Constants, InternalEnvironmentVariables } from "../common/constants.js";
|
|
4
|
+
import { HttpService } from "../common/httpService.js";
|
|
5
|
+
import { reporterLogger } from "../common/logger.js";
|
|
6
|
+
export class ServiceClient {
|
|
7
|
+
constructor(
|
|
8
|
+
/* eslint-disable @azure/azure-sdk/ts-use-interface-parameters */
|
|
9
|
+
envVariables, reporterUtils,
|
|
10
|
+
/* eslint-enable @azure/azure-sdk/ts-use-interface-parameters */
|
|
11
|
+
addErrorInformation, isInformationMessagePresent, addKeyToInformationMessage) {
|
|
12
|
+
this.httpService = new HttpService();
|
|
13
|
+
this.envVariables = envVariables;
|
|
14
|
+
this.reporterUtils = reporterUtils;
|
|
15
|
+
this.addInformationalMessage = addErrorInformation;
|
|
16
|
+
this.isInformationMessagePresent = isInformationMessagePresent;
|
|
17
|
+
this.addKeyToInformationMessage = addKeyToInformationMessage;
|
|
18
|
+
}
|
|
19
|
+
async patchTestRun(ciInfo) {
|
|
20
|
+
const testRun = await this.reporterUtils.getTestRunObject(ciInfo);
|
|
21
|
+
// Escape the runId to avoid issues with special characters
|
|
22
|
+
const escapedRunId = encodeURIComponent(this.envVariables.runId);
|
|
23
|
+
const response = await this.httpService.callAPI("PATCH", `${this.getServiceEndpoint()}/${Constants.testRunsEndpoint.replace("{workspaceId}", this.envVariables.accountId)}/${escapedRunId}?api-version=${Constants.API_VERSION}`, JSON.stringify(testRun), this.envVariables.accessToken, "application/merge-patch+json", this.envVariables.correlationId);
|
|
24
|
+
if (response.status === 200) {
|
|
25
|
+
return JSON.parse(response.bodyAsText);
|
|
26
|
+
}
|
|
27
|
+
else if (response.status === 409) {
|
|
28
|
+
const errorMessage = Constants.CONFLICT_409_ERROR_MESSAGE.replace("{runId}", this.envVariables.runId);
|
|
29
|
+
this.addInformationalMessage(errorMessage);
|
|
30
|
+
process.stdout.write(`\n${errorMessage}`);
|
|
31
|
+
}
|
|
32
|
+
else if (response.status === 403) {
|
|
33
|
+
const errorMessage = Constants.FORBIDDEN_403_ERROR_MESSAGE.replace(new RegExp("{workspaceId}", "g"), this.envVariables.accountId);
|
|
34
|
+
this.addInformationalMessage(errorMessage);
|
|
35
|
+
process.stdout.write(`\n${errorMessage}`);
|
|
36
|
+
}
|
|
37
|
+
else {
|
|
38
|
+
this.handleErrorResponse(response, Constants.patchTestRun);
|
|
39
|
+
}
|
|
40
|
+
throw new Error(`Received status ${response.status} from service from PATCH TestRun call.`);
|
|
41
|
+
}
|
|
42
|
+
async postTestRunShardStart() {
|
|
43
|
+
const postTestRunShardObject = this.reporterUtils.getTestRunShardStartObject();
|
|
44
|
+
const escapedRunId = encodeURIComponent(this.envVariables.runId);
|
|
45
|
+
const response = await this.httpService.callAPI("POST", `${this.getServiceEndpoint()}/${Constants.testRunsShardEndpoint.replace("{workspaceId}", this.envVariables.accountId).replace("{testRunId}", escapedRunId)}/?api-version=${Constants.API_VERSION}`, JSON.stringify(postTestRunShardObject), this.envVariables.accessToken, "application/json", this.envVariables.correlationId);
|
|
46
|
+
if (response.status === 200) {
|
|
47
|
+
return JSON.parse(response.bodyAsText);
|
|
48
|
+
}
|
|
49
|
+
this.handleErrorResponse(response, Constants.patchTestRunShardStart);
|
|
50
|
+
throw new Error(`Received status ${response.status} from service from PATCH TestRun Shard Start call.`);
|
|
51
|
+
}
|
|
52
|
+
async postTestRunShardEnd(result,
|
|
53
|
+
// eslint-disable-next-line @azure/azure-sdk/ts-use-interface-parameters
|
|
54
|
+
shard, errorMessages, attachmentMetadata, workers) {
|
|
55
|
+
const postTestRunShardObject = this.reporterUtils.getTestRunShardEndObject(result, shard, errorMessages, attachmentMetadata, workers);
|
|
56
|
+
const escapedRunId = encodeURIComponent(this.envVariables.runId);
|
|
57
|
+
const response = await this.httpService.callAPI("POST", `${this.getServiceEndpoint()}/${Constants.testRunsShardEndpoint.replace("{workspaceId}", this.envVariables.accountId).replace("{testRunId}", escapedRunId)}/?api-version=${Constants.API_VERSION}`, JSON.stringify(postTestRunShardObject), this.envVariables.accessToken, "application/json", this.envVariables.correlationId);
|
|
58
|
+
if (response.status === 200) {
|
|
59
|
+
return JSON.parse(response.bodyAsText);
|
|
60
|
+
}
|
|
61
|
+
this.handleErrorResponse(response, Constants.patchTestRunShardEnd);
|
|
62
|
+
throw new Error(`Received status ${response.status} from service from PATCH TestRun Shard End call.`);
|
|
63
|
+
}
|
|
64
|
+
// eslint-disable-next-line @azure/azure-sdk/ts-use-interface-parameters
|
|
65
|
+
async postTestResults(testResults) {
|
|
66
|
+
try {
|
|
67
|
+
const payload = {
|
|
68
|
+
value: testResults,
|
|
69
|
+
};
|
|
70
|
+
const response = await this.httpService.callAPI("POST", `${this.getServiceEndpoint()}/${Constants.testResultsEndpoint.replace("{workspaceId}", this.envVariables.accountId)}?api-version=${Constants.API_VERSION}`, JSON.stringify(payload), this.envVariables.accessToken, "application/json", this.envVariables.correlationId);
|
|
71
|
+
if (response.status === 200) {
|
|
72
|
+
return;
|
|
73
|
+
}
|
|
74
|
+
this.handleErrorResponse(response, Constants.postTestResults);
|
|
75
|
+
}
|
|
76
|
+
catch (error) {
|
|
77
|
+
reporterLogger.error(`Error occurred while posting test results: ${error}`);
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
async createStorageUri() {
|
|
81
|
+
const escapedRunId = encodeURIComponent(this.envVariables.runId);
|
|
82
|
+
const response = await this.httpService.callAPI("POST", `${this.getServiceEndpoint()}/${Constants.storageUriEndpoint.replace("{workspaceId}", this.envVariables.accountId).replace("{testRunId}", escapedRunId)}?api-version=${Constants.API_VERSION}`, null, this.envVariables.accessToken, "application/json", this.envVariables.correlationId);
|
|
83
|
+
if (response.status === 200) {
|
|
84
|
+
return JSON.parse(response.bodyAsText);
|
|
85
|
+
}
|
|
86
|
+
this.handleErrorResponse(response, Constants.getStorageUri);
|
|
87
|
+
throw new Error(`Received status ${response.status} from service from GET StorageUri call.`);
|
|
88
|
+
}
|
|
89
|
+
getServiceEndpoint() {
|
|
90
|
+
return process.env[InternalEnvironmentVariables.MPT_SERVICE_REPORTING_URL];
|
|
91
|
+
}
|
|
92
|
+
handleErrorResponse(response, action) {
|
|
93
|
+
var _a, _b;
|
|
94
|
+
const statusCode = response.status;
|
|
95
|
+
const errorMessage = (_b = (_a = Constants.ERROR_MESSAGE[action]) === null || _a === void 0 ? void 0 : _a[statusCode]) !== null && _b !== void 0 ? _b : "Unknown error occured.";
|
|
96
|
+
if (!this.isInformationMessagePresent(statusCode.toString())) {
|
|
97
|
+
this.addKeyToInformationMessage(statusCode.toString());
|
|
98
|
+
this.addInformationalMessage(errorMessage);
|
|
99
|
+
}
|
|
100
|
+
process.stdout.write(`${errorMessage}\n`);
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
//# sourceMappingURL=serviceClient.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"serviceClient.js","sourceRoot":"","sources":["../../../src/utils/serviceClient.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport type { FullResult } from \"@playwright/test/reporter\";\nimport { Constants, InternalEnvironmentVariables } from \"../common/constants.js\";\nimport type { EnvironmentVariables } from \"../common/environmentVariables.js\";\nimport { HttpService } from \"../common/httpService.js\";\nimport type { Shard, UploadMetadata } from \"../model/shard.js\";\nimport type { StorageUri } from \"../model/storageUri.js\";\nimport type { TestResult } from \"../model/testResult.js\";\nimport type { TestRun } from \"../model/testRun.js\";\nimport type { CIInfo } from \"./cIInfoProvider.js\";\nimport type ReporterUtils from \"./reporterUtils.js\";\nimport type { PipelineResponse } from \"@azure/core-rest-pipeline\";\nimport { reporterLogger } from \"../common/logger.js\";\n\nexport class ServiceClient {\n private httpService: HttpService;\n private readonly envVariables: EnvironmentVariables;\n private readonly reporterUtils: ReporterUtils;\n private readonly addInformationalMessage: (errorMessage: string) => void;\n private isInformationMessagePresent: (key: string) => boolean;\n private addKeyToInformationMessage: (key: string) => void;\n constructor(\n /* eslint-disable @azure/azure-sdk/ts-use-interface-parameters */\n envVariables: EnvironmentVariables,\n reporterUtils: ReporterUtils,\n /* eslint-enable @azure/azure-sdk/ts-use-interface-parameters */\n addErrorInformation: (errorMessage: string) => void,\n isInformationMessagePresent: (key: string) => boolean,\n addKeyToInformationMessage: (key: string) => void,\n ) {\n this.httpService = new HttpService();\n this.envVariables = envVariables;\n this.reporterUtils = reporterUtils;\n this.addInformationalMessage = addErrorInformation;\n this.isInformationMessagePresent = isInformationMessagePresent;\n this.addKeyToInformationMessage = addKeyToInformationMessage;\n }\n\n async patchTestRun(ciInfo: CIInfo): Promise<TestRun> {\n const testRun = await this.reporterUtils.getTestRunObject(ciInfo);\n\n // Escape the runId to avoid issues with special characters\n const escapedRunId = encodeURIComponent(this.envVariables.runId!);\n const response: PipelineResponse = await this.httpService.callAPI(\n \"PATCH\",\n `${this.getServiceEndpoint()}/${Constants.testRunsEndpoint.replace(\"{workspaceId}\", this.envVariables.accountId!)}/${escapedRunId}?api-version=${Constants.API_VERSION}`,\n JSON.stringify(testRun),\n this.envVariables.accessToken,\n \"application/merge-patch+json\",\n this.envVariables.correlationId!,\n );\n if (response.status === 200) {\n return JSON.parse(response.bodyAsText!) as TestRun;\n } else if (response.status === 409) {\n const errorMessage = Constants.CONFLICT_409_ERROR_MESSAGE.replace(\n \"{runId}\",\n this.envVariables.runId,\n );\n this.addInformationalMessage(errorMessage);\n process.stdout.write(`\\n${errorMessage}`);\n } else if (response.status === 403) {\n const errorMessage = Constants.FORBIDDEN_403_ERROR_MESSAGE.replace(\n new RegExp(\"{workspaceId}\", \"g\"),\n this.envVariables.accountId!,\n );\n this.addInformationalMessage(errorMessage);\n process.stdout.write(`\\n${errorMessage}`);\n } else {\n this.handleErrorResponse(response, Constants.patchTestRun);\n }\n throw new Error(`Received status ${response.status} from service from PATCH TestRun call.`);\n }\n\n async postTestRunShardStart(): Promise<Shard> {\n const postTestRunShardObject = this.reporterUtils.getTestRunShardStartObject();\n const escapedRunId = encodeURIComponent(this.envVariables.runId!);\n const response: PipelineResponse = await this.httpService.callAPI(\n \"POST\",\n `${this.getServiceEndpoint()}/${Constants.testRunsShardEndpoint.replace(\"{workspaceId}\", this.envVariables.accountId!).replace(\"{testRunId}\", escapedRunId)}/?api-version=${Constants.API_VERSION}`,\n JSON.stringify(postTestRunShardObject),\n this.envVariables.accessToken,\n \"application/json\",\n this.envVariables.correlationId!,\n );\n if (response.status === 200) {\n return JSON.parse(response.bodyAsText!) as Shard;\n }\n this.handleErrorResponse(response, Constants.patchTestRunShardStart);\n\n throw new Error(\n `Received status ${response.status} from service from PATCH TestRun Shard Start call.`,\n );\n }\n\n async postTestRunShardEnd(\n result: FullResult,\n // eslint-disable-next-line @azure/azure-sdk/ts-use-interface-parameters\n shard: Shard,\n errorMessages: string[],\n attachmentMetadata: UploadMetadata,\n workers: number,\n ): Promise<TestRun> {\n const postTestRunShardObject = this.reporterUtils.getTestRunShardEndObject(\n result,\n shard,\n errorMessages,\n attachmentMetadata,\n workers,\n );\n const escapedRunId = encodeURIComponent(this.envVariables.runId!);\n const response: PipelineResponse = await this.httpService.callAPI(\n \"POST\",\n `${this.getServiceEndpoint()}/${Constants.testRunsShardEndpoint.replace(\"{workspaceId}\", this.envVariables.accountId!).replace(\"{testRunId}\", escapedRunId)}/?api-version=${Constants.API_VERSION}`,\n JSON.stringify(postTestRunShardObject),\n this.envVariables.accessToken,\n \"application/json\",\n this.envVariables.correlationId!,\n );\n if (response.status === 200) {\n return JSON.parse(response.bodyAsText!) as TestRun;\n }\n this.handleErrorResponse(response, Constants.patchTestRunShardEnd);\n\n throw new Error(\n `Received status ${response.status} from service from PATCH TestRun Shard End call.`,\n );\n }\n\n // eslint-disable-next-line @azure/azure-sdk/ts-use-interface-parameters\n async postTestResults(testResults: TestResult[]): Promise<void> {\n try {\n const payload: any = {\n value: testResults,\n };\n const response: PipelineResponse = await this.httpService.callAPI(\n \"POST\",\n `${this.getServiceEndpoint()}/${Constants.testResultsEndpoint.replace(\"{workspaceId}\", this.envVariables.accountId!)}?api-version=${Constants.API_VERSION}`,\n JSON.stringify(payload),\n this.envVariables.accessToken,\n \"application/json\",\n this.envVariables.correlationId!,\n );\n if (response.status === 200) {\n return;\n }\n this.handleErrorResponse(response, Constants.postTestResults);\n } catch (error) {\n reporterLogger.error(`Error occurred while posting test results: ${error}`);\n }\n }\n\n async createStorageUri(): Promise<StorageUri> {\n const escapedRunId = encodeURIComponent(this.envVariables.runId!);\n const response: PipelineResponse = await this.httpService.callAPI(\n \"POST\",\n `${this.getServiceEndpoint()}/${Constants.storageUriEndpoint.replace(\"{workspaceId}\", this.envVariables.accountId!).replace(\"{testRunId}\", escapedRunId)}?api-version=${Constants.API_VERSION}`,\n null,\n this.envVariables.accessToken,\n \"application/json\",\n this.envVariables.correlationId!,\n );\n if (response.status === 200) {\n return JSON.parse(response.bodyAsText!) as StorageUri;\n }\n this.handleErrorResponse(response, Constants.getStorageUri);\n\n throw new Error(`Received status ${response.status} from service from GET StorageUri call.`);\n }\n\n private getServiceEndpoint(): string {\n return process.env[InternalEnvironmentVariables.MPT_SERVICE_REPORTING_URL]!;\n }\n\n private handleErrorResponse(response: PipelineResponse, action: string): void {\n const statusCode = response.status;\n const errorMessage = Constants.ERROR_MESSAGE[action]?.[statusCode] ?? \"Unknown error occured.\";\n if (!this.isInformationMessagePresent(statusCode.toString())) {\n this.addKeyToInformationMessage(statusCode.toString());\n this.addInformationalMessage(errorMessage);\n }\n process.stdout.write(`${errorMessage}\\n`);\n }\n}\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"storageClient.d.ts","sourceRoot":"","sources":["../../../src/utils/storageClient.ts"],"names":[],"mappings":"AAOA,qBAAa,aAAa;IACX,UAAU,CAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,gBAAgB,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAalF,YAAY,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,gBAAgB,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAa/F,OAAO,CAAC,gBAAgB;CAOzB"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
// Copyright (c) Microsoft Corporation.
|
|
2
|
+
// Licensed under the MIT License.
|
|
3
|
+
import { BlockBlobClient } from "@azure/storage-blob";
|
|
4
|
+
import { reporterLogger } from "../common/logger.js";
|
|
5
|
+
import { Constants } from "../common/constants.js";
|
|
6
|
+
export class StorageClient {
|
|
7
|
+
async uploadFile(uri, filePath, fileRelativePath) {
|
|
8
|
+
try {
|
|
9
|
+
const cloudFilepath = this.getCloudFilepath(uri, fileRelativePath);
|
|
10
|
+
const blobClient = new BlockBlobClient(cloudFilepath);
|
|
11
|
+
await blobClient.uploadFile(filePath, { concurrency: 10 });
|
|
12
|
+
reporterLogger.info(`\nUploaded file ${filePath}.`);
|
|
13
|
+
}
|
|
14
|
+
catch (err) {
|
|
15
|
+
reporterLogger.error(`\nUnable to upload file ${filePath}, Name: ${err.name}, Message: ${err.message}, Stack: ${err.stack}`);
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
async uploadBuffer(uri, buffer, fileRelativePath) {
|
|
19
|
+
try {
|
|
20
|
+
const cloudFilepath = this.getCloudFilepath(uri, fileRelativePath);
|
|
21
|
+
const blobClient = new BlockBlobClient(cloudFilepath);
|
|
22
|
+
await blobClient.upload(buffer, buffer.length);
|
|
23
|
+
reporterLogger.verbose(`\nUploaded buffer to ${fileRelativePath}.`);
|
|
24
|
+
}
|
|
25
|
+
catch (err) {
|
|
26
|
+
reporterLogger.error(`\nUnable to upload buffer ${fileRelativePath}, Name: ${err.name}, Message: ${err.message}, Stack: ${err.stack}`);
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
getCloudFilepath(uri, fileRelativePath) {
|
|
30
|
+
// Split the uri on "?" to get the container uri and sas token
|
|
31
|
+
const parts = uri.split(Constants.SAS_URI_SEPARATOR);
|
|
32
|
+
const containerUri = parts[0];
|
|
33
|
+
const sasToken = parts[1];
|
|
34
|
+
return containerUri + "/" + fileRelativePath + "?" + sasToken;
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
//# sourceMappingURL=storageClient.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"storageClient.js","sourceRoot":"","sources":["../../../src/utils/storageClient.ts"],"names":[],"mappings":"AAAA,uCAAuC;AACvC,kCAAkC;AAElC,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AACtD,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AAEnD,MAAM,OAAO,aAAa;IACjB,KAAK,CAAC,UAAU,CAAC,GAAW,EAAE,QAAgB,EAAE,gBAAwB;QAC7E,IAAI,CAAC;YACH,MAAM,aAAa,GAAG,IAAI,CAAC,gBAAgB,CAAC,GAAG,EAAE,gBAAgB,CAAC,CAAC;YACnE,MAAM,UAAU,GAAG,IAAI,eAAe,CAAC,aAAa,CAAC,CAAC;YACtD,MAAM,UAAU,CAAC,UAAU,CAAC,QAAQ,EAAE,EAAE,WAAW,EAAE,EAAE,EAAE,CAAC,CAAC;YAC3D,cAAc,CAAC,IAAI,CAAC,mBAAmB,QAAQ,GAAG,CAAC,CAAC;QACtD,CAAC;QAAC,OAAO,GAAQ,EAAE,CAAC;YAClB,cAAc,CAAC,KAAK,CAClB,2BAA2B,QAAQ,WAAW,GAAG,CAAC,IAAI,cAAc,GAAG,CAAC,OAAO,YAAY,GAAG,CAAC,KAAK,EAAE,CACvG,CAAC;QACJ,CAAC;IACH,CAAC;IAEM,KAAK,CAAC,YAAY,CAAC,GAAW,EAAE,MAAc,EAAE,gBAAwB;QAC7E,IAAI,CAAC;YACH,MAAM,aAAa,GAAG,IAAI,CAAC,gBAAgB,CAAC,GAAG,EAAE,gBAAgB,CAAC,CAAC;YACnE,MAAM,UAAU,GAAG,IAAI,eAAe,CAAC,aAAa,CAAC,CAAC;YACtD,MAAM,UAAU,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;YAC/C,cAAc,CAAC,OAAO,CAAC,wBAAwB,gBAAgB,GAAG,CAAC,CAAC;QACtE,CAAC;QAAC,OAAO,GAAQ,EAAE,CAAC;YAClB,cAAc,CAAC,KAAK,CAClB,6BAA6B,gBAAgB,WAAW,GAAG,CAAC,IAAI,cAAc,GAAG,CAAC,OAAO,YAAY,GAAG,CAAC,KAAK,EAAE,CACjH,CAAC;QACJ,CAAC;IACH,CAAC;IAEO,gBAAgB,CAAC,GAAW,EAAE,gBAAwB;QAC5D,8DAA8D;QAC9D,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,SAAS,CAAC,iBAAiB,CAAC,CAAC;QACrD,MAAM,YAAY,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;QAC9B,MAAM,QAAQ,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;QAC1B,OAAO,YAAY,GAAG,GAAG,GAAG,gBAAgB,GAAG,GAAG,GAAG,QAAQ,CAAC;IAChE,CAAC;CACF","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport { BlockBlobClient } from \"@azure/storage-blob\";\nimport { reporterLogger } from \"../common/logger.js\";\nimport { Constants } from \"../common/constants.js\";\n\nexport class StorageClient {\n public async uploadFile(uri: string, filePath: string, fileRelativePath: string): Promise<void> {\n try {\n const cloudFilepath = this.getCloudFilepath(uri, fileRelativePath);\n const blobClient = new BlockBlobClient(cloudFilepath);\n await blobClient.uploadFile(filePath, { concurrency: 10 });\n reporterLogger.info(`\\nUploaded file ${filePath}.`);\n } catch (err: any) {\n reporterLogger.error(\n `\\nUnable to upload file ${filePath}, Name: ${err.name}, Message: ${err.message}, Stack: ${err.stack}`,\n );\n }\n }\n\n public async uploadBuffer(uri: string, buffer: string, fileRelativePath: string): Promise<void> {\n try {\n const cloudFilepath = this.getCloudFilepath(uri, fileRelativePath);\n const blobClient = new BlockBlobClient(cloudFilepath);\n await blobClient.upload(buffer, buffer.length);\n reporterLogger.verbose(`\\nUploaded buffer to ${fileRelativePath}.`);\n } catch (err: any) {\n reporterLogger.error(\n `\\nUnable to upload buffer ${fileRelativePath}, Name: ${err.name}, Message: ${err.message}, Stack: ${err.stack}`,\n );\n }\n }\n\n private getCloudFilepath(uri: string, fileRelativePath: string): string {\n // Split the uri on \"?\" to get the container uri and sas token\n const parts = uri.split(Constants.SAS_URI_SEPARATOR);\n const containerUri = parts[0];\n const sasToken = parts[1];\n return containerUri + \"/\" + fileRelativePath + \"?\" + sasToken;\n }\n}\n"]}
|
|
@@ -1,15 +1,15 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type { VersionInfo } from "../common/types.js";
|
|
2
2
|
import type { TokenCredential } from "@azure/identity";
|
|
3
|
+
export { getPlaywrightVersion } from "./getPlaywrightVersion.js";
|
|
4
|
+
export { parseJwt } from "./parseJwt.js";
|
|
3
5
|
export declare const exitWithFailureMessage: (error: {
|
|
4
6
|
key: string;
|
|
5
7
|
message: string;
|
|
6
8
|
}) => never;
|
|
7
|
-
export declare const base64UrlDecode: (base64Url: string) => string;
|
|
8
9
|
export declare const populateValuesFromServiceUrl: () => {
|
|
9
10
|
region: string;
|
|
10
11
|
accountId: string;
|
|
11
12
|
} | null;
|
|
12
|
-
export declare const parseJwt: <T = JwtPayload>(token: string) => T;
|
|
13
13
|
export declare const getAccessToken: () => string | undefined;
|
|
14
14
|
export declare const getServiceBaseURL: () => string | undefined;
|
|
15
15
|
export declare const getAndSetRunId: () => string;
|
|
@@ -22,7 +22,6 @@ export declare const validateMptPAT: (validationFailureCallback: (error: {
|
|
|
22
22
|
export declare const warnIfAccessTokenCloseToExpiry: () => void;
|
|
23
23
|
export declare const fetchOrValidateAccessToken: (credential?: TokenCredential) => Promise<string>;
|
|
24
24
|
export declare const emitReportingUrl: () => void;
|
|
25
|
-
export declare const getPlaywrightVersion: () => string;
|
|
26
25
|
export declare const getPackageVersion: () => string;
|
|
27
26
|
export declare const getVersionInfo: (version: string) => VersionInfo;
|
|
28
27
|
export declare const validatePlaywrightVersion: () => void;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../src/utils/utils.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAc,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAUlE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AASvD,OAAO,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AACjE,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAEzC,eAAO,MAAM,sBAAsB,GAAI,OAAO;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,KAAG,KAKhF,CAAC;AAEF,eAAO,MAAM,4BAA4B,QAAO;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,GAAG,IAevF,CAAC;AAEF,eAAO,MAAM,cAAc,QAAO,MAAM,GAAG,SAE1C,CAAC;AAEF,eAAO,MAAM,iBAAiB,QAAO,MAAM,GAAG,SAE7C,CAAC;AAEF,eAAO,MAAM,cAAc,QAAO,MAIjC,CAAC;AAEF,eAAO,MAAM,oBAAoB,GAAI,OAAO,MAAM,EAAE,IAAI,MAAM,KAAG,MAEhE,CAAC;AAEF,eAAO,MAAM,kBAAkB,QAAO,IAKrC,CAAC;AAEF,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,IAOjD,CAAC;AAEF,eAAO,MAAM,0BAA0B,GAAU,aAAa,eAAe,KAAG,OAAO,CAAC,MAAM,CAS7F,CAAC;AAEF,eAAO,MAAM,gBAAgB,QAAO,IAUnC,CAAC;AAEF,eAAO,MAAM,iBAAiB,QAAO,MASpC,CAAC;AACF,eAAO,MAAM,cAAc,GAAI,SAAS,MAAM,KAAG,WAYhD,CAAC;AAEF,eAAO,MAAM,yBAAyB,QAAO,IAc5C,CAAC"}
|
|
@@ -0,0 +1,151 @@
|
|
|
1
|
+
// Copyright (c) Microsoft Corporation.
|
|
2
|
+
// Licensed under the MIT License.
|
|
3
|
+
import { API_VERSION, Constants, InternalEnvironmentVariables, MINIMUM_SUPPORTED_PLAYWRIGHT_VERSION, ServiceEnvironmentVariable, } from "../common/constants.js";
|
|
4
|
+
import { ServiceErrorMessageConstants } from "../common/messages.js";
|
|
5
|
+
import { coreLogger } from "../common/logger.js";
|
|
6
|
+
import ReporterUtils from "./reporterUtils.js";
|
|
7
|
+
import { CIInfoProvider } from "./cIInfoProvider.js";
|
|
8
|
+
import * as process from "node:process";
|
|
9
|
+
import { parseJwt } from "./parseJwt.js";
|
|
10
|
+
import { getPlaywrightVersion } from "./getPlaywrightVersion.js";
|
|
11
|
+
import { createEntraIdAccessToken } from "../common/entraIdAccessToken.js";
|
|
12
|
+
// Re-exporting for backward compatibility
|
|
13
|
+
export { getPlaywrightVersion } from "./getPlaywrightVersion.js";
|
|
14
|
+
export { parseJwt } from "./parseJwt.js";
|
|
15
|
+
export const exitWithFailureMessage = (error) => {
|
|
16
|
+
console.log();
|
|
17
|
+
console.error(error.message);
|
|
18
|
+
// eslint-disable-next-line n/no-process-exit
|
|
19
|
+
process.exit(1);
|
|
20
|
+
};
|
|
21
|
+
export const populateValuesFromServiceUrl = () => {
|
|
22
|
+
// Service URL format: wss://<region>.api.playwright.microsoft.com/accounts/<workspace-id>/browsers
|
|
23
|
+
const url = process.env["PLAYWRIGHT_SERVICE_URL"];
|
|
24
|
+
if (!ReporterUtils.isNullOrEmpty(url)) {
|
|
25
|
+
const parts = url.split("/");
|
|
26
|
+
if (parts.length > 2) {
|
|
27
|
+
const subdomainParts = parts[2].split(".");
|
|
28
|
+
const region = subdomainParts.length > 0 ? subdomainParts[0] : null;
|
|
29
|
+
const accountId = parts[4];
|
|
30
|
+
return { region: region, accountId: accountId };
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
return null;
|
|
34
|
+
};
|
|
35
|
+
export const getAccessToken = () => {
|
|
36
|
+
return process.env[ServiceEnvironmentVariable.PLAYWRIGHT_SERVICE_ACCESS_TOKEN];
|
|
37
|
+
};
|
|
38
|
+
export const getServiceBaseURL = () => {
|
|
39
|
+
return process.env[ServiceEnvironmentVariable.PLAYWRIGHT_SERVICE_URL];
|
|
40
|
+
};
|
|
41
|
+
export const getAndSetRunId = () => {
|
|
42
|
+
const runId = ReporterUtils.getRunId(CIInfoProvider.getCIInfo());
|
|
43
|
+
process.env[InternalEnvironmentVariables.MPT_SERVICE_RUN_ID] = runId;
|
|
44
|
+
return runId;
|
|
45
|
+
};
|
|
46
|
+
export const getServiceWSEndpoint = (runId, os) => {
|
|
47
|
+
return `${getServiceBaseURL()}?runId=${encodeURIComponent(runId)}&os=${os}&api-version=${API_VERSION}`;
|
|
48
|
+
};
|
|
49
|
+
export const validateServiceUrl = () => {
|
|
50
|
+
const serviceUrl = getServiceBaseURL();
|
|
51
|
+
if (!serviceUrl) {
|
|
52
|
+
exitWithFailureMessage(ServiceErrorMessageConstants.NO_SERVICE_URL_ERROR);
|
|
53
|
+
}
|
|
54
|
+
};
|
|
55
|
+
export const validateMptPAT = (validationFailureCallback) => {
|
|
56
|
+
try {
|
|
57
|
+
const accessToken = getAccessToken();
|
|
58
|
+
const result = populateValuesFromServiceUrl();
|
|
59
|
+
if (!accessToken) {
|
|
60
|
+
validationFailureCallback(ServiceErrorMessageConstants.NO_AUTH_ERROR);
|
|
61
|
+
}
|
|
62
|
+
const claims = parseJwt(accessToken);
|
|
63
|
+
if (!claims.exp) {
|
|
64
|
+
validationFailureCallback(ServiceErrorMessageConstants.INVALID_MPT_PAT_ERROR);
|
|
65
|
+
}
|
|
66
|
+
if (Date.now() >= claims.exp * 1000) {
|
|
67
|
+
validationFailureCallback(ServiceErrorMessageConstants.EXPIRED_MPT_PAT_ERROR);
|
|
68
|
+
}
|
|
69
|
+
if (result.accountId !== claims.aid) {
|
|
70
|
+
validationFailureCallback(ServiceErrorMessageConstants.WORKSPACE_MISMATCH_ERROR);
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
catch (err) {
|
|
74
|
+
coreLogger.error(err);
|
|
75
|
+
exitWithFailureMessage(ServiceErrorMessageConstants.INVALID_MPT_PAT_ERROR);
|
|
76
|
+
}
|
|
77
|
+
};
|
|
78
|
+
const isTokenExpiringSoon = (expirationTime, currentTime) => {
|
|
79
|
+
return expirationTime * 1000 - currentTime <= Constants.sevenDaysInMs;
|
|
80
|
+
};
|
|
81
|
+
const warnAboutTokenExpiry = (expirationTime, currentTime) => {
|
|
82
|
+
const daysToExpiration = Math.ceil((expirationTime * 1000 - currentTime) / Constants.oneDayInMs);
|
|
83
|
+
const expirationDate = new Date(expirationTime * 1000).toLocaleDateString();
|
|
84
|
+
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/en-us/entra/identity/`;
|
|
85
|
+
console.warn(expirationWarning);
|
|
86
|
+
};
|
|
87
|
+
export const warnIfAccessTokenCloseToExpiry = () => {
|
|
88
|
+
const accessToken = getAccessToken();
|
|
89
|
+
const claims = parseJwt(accessToken);
|
|
90
|
+
const currentTime = Date.now();
|
|
91
|
+
if (isTokenExpiringSoon(claims.exp, currentTime)) {
|
|
92
|
+
warnAboutTokenExpiry(claims.exp, currentTime);
|
|
93
|
+
}
|
|
94
|
+
};
|
|
95
|
+
export const fetchOrValidateAccessToken = async (credential) => {
|
|
96
|
+
const entraIdAccessToken = createEntraIdAccessToken(credential);
|
|
97
|
+
if (entraIdAccessToken.token && entraIdAccessToken.doesEntraIdAccessTokenNeedRotation()) {
|
|
98
|
+
await entraIdAccessToken.fetchEntraIdAccessToken();
|
|
99
|
+
}
|
|
100
|
+
if (!getAccessToken()) {
|
|
101
|
+
throw new Error(ServiceErrorMessageConstants.NO_AUTH_ERROR.message);
|
|
102
|
+
}
|
|
103
|
+
return getAccessToken();
|
|
104
|
+
};
|
|
105
|
+
export const emitReportingUrl = () => {
|
|
106
|
+
const regex = /wss:\/\/([\w-]+)\.api\.(playwright(?:-test|-int)?\.io|playwright\.microsoft\.com)\//;
|
|
107
|
+
const url = getServiceBaseURL();
|
|
108
|
+
const match = url === null || url === void 0 ? void 0 : url.match(regex);
|
|
109
|
+
if (match && match.length >= 3) {
|
|
110
|
+
const [, region, domain] = match;
|
|
111
|
+
process.env[InternalEnvironmentVariables.MPT_SERVICE_REPORTING_URL] =
|
|
112
|
+
`https://${region}.reporting.api.${domain}`;
|
|
113
|
+
}
|
|
114
|
+
};
|
|
115
|
+
export const getPackageVersion = () => {
|
|
116
|
+
try {
|
|
117
|
+
// eslint-disable-next-line @typescript-eslint/no-require-imports
|
|
118
|
+
const version = require("../../package.json").version;
|
|
119
|
+
return version;
|
|
120
|
+
}
|
|
121
|
+
catch (error) {
|
|
122
|
+
console.error("Error fetching package version:", error);
|
|
123
|
+
return "unknown version";
|
|
124
|
+
}
|
|
125
|
+
};
|
|
126
|
+
export const getVersionInfo = (version) => {
|
|
127
|
+
const regex = /^(\d+)(?:\.(\d+))?(?:\.(\d+))?/;
|
|
128
|
+
const match = version.match(regex);
|
|
129
|
+
const versionInfo = {
|
|
130
|
+
major: 0,
|
|
131
|
+
minor: 0,
|
|
132
|
+
patch: 0,
|
|
133
|
+
};
|
|
134
|
+
versionInfo.major = match && match[1] ? parseInt(match[1], 10) : 0;
|
|
135
|
+
versionInfo.minor = match && match[2] ? parseInt(match[2], 10) : 0;
|
|
136
|
+
versionInfo.patch = match && match[3] ? parseInt(match[3], 10) : 0;
|
|
137
|
+
return versionInfo;
|
|
138
|
+
};
|
|
139
|
+
export const validatePlaywrightVersion = () => {
|
|
140
|
+
const minimumSupportedVersion = MINIMUM_SUPPORTED_PLAYWRIGHT_VERSION;
|
|
141
|
+
const installedVersion = getPlaywrightVersion();
|
|
142
|
+
const minimumSupportedVersionInfo = getVersionInfo(minimumSupportedVersion);
|
|
143
|
+
const installedVersionInfo = getVersionInfo(installedVersion);
|
|
144
|
+
const isInstalledVersionGreater = installedVersionInfo.major > minimumSupportedVersionInfo.major ||
|
|
145
|
+
(installedVersionInfo.major === minimumSupportedVersionInfo.major &&
|
|
146
|
+
installedVersionInfo.minor >= minimumSupportedVersionInfo.minor);
|
|
147
|
+
if (!isInstalledVersionGreater) {
|
|
148
|
+
exitWithFailureMessage(ServiceErrorMessageConstants.INVALID_PLAYWRIGHT_VERSION_ERROR);
|
|
149
|
+
}
|
|
150
|
+
};
|
|
151
|
+
//# sourceMappingURL=utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../src/utils/utils.ts"],"names":[],"mappings":"AAAA,uCAAuC;AACvC,kCAAkC;AAGlC,OAAO,EACL,WAAW,EACX,SAAS,EACT,4BAA4B,EAC5B,oCAAoC,EACpC,0BAA0B,GAC3B,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAAE,4BAA4B,EAAE,MAAM,uBAAuB,CAAC;AACrE,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAEjD,OAAO,aAAa,MAAM,oBAAoB,CAAC;AAC/C,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,KAAK,OAAO,MAAM,cAAc,CAAC;AACxC,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AACjE,OAAO,EAAE,wBAAwB,EAAE,MAAM,iCAAiC,CAAC;AAE3E,0CAA0C;AAC1C,OAAO,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AACjE,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAEzC,MAAM,CAAC,MAAM,sBAAsB,GAAG,CAAC,KAAuC,EAAS,EAAE;IACvF,OAAO,CAAC,GAAG,EAAE,CAAC;IACd,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IAC7B,6CAA6C;IAC7C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,4BAA4B,GAAG,GAAiD,EAAE;IAC7F,mGAAmG;IACnG,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,wBAAwB,CAAE,CAAC;IACnD,IAAI,CAAC,aAAa,CAAC,aAAa,CAAC,GAAG,CAAC,EAAE,CAAC;QACtC,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAE7B,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACrB,MAAM,cAAc,GAAG,KAAK,CAAC,CAAC,CAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YAC5C,MAAM,MAAM,GAAG,cAAc,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;YACpE,MAAM,SAAS,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;YAE3B,OAAO,EAAE,MAAM,EAAE,MAAO,EAAE,SAAS,EAAE,SAAU,EAAE,CAAC;QACpD,CAAC;IACH,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,cAAc,GAAG,GAAuB,EAAE;IACrD,OAAO,OAAO,CAAC,GAAG,CAAC,0BAA0B,CAAC,+BAA+B,CAAC,CAAC;AACjF,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,iBAAiB,GAAG,GAAuB,EAAE;IACxD,OAAO,OAAO,CAAC,GAAG,CAAC,0BAA0B,CAAC,sBAAsB,CAAC,CAAC;AACxE,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,cAAc,GAAG,GAAW,EAAE;IACzC,MAAM,KAAK,GAAG,aAAa,CAAC,QAAQ,CAAC,cAAc,CAAC,SAAS,EAAE,CAAC,CAAC;IACjE,OAAO,CAAC,GAAG,CAAC,4BAA4B,CAAC,kBAAkB,CAAC,GAAG,KAAK,CAAC;IACrE,OAAO,KAAK,CAAC;AACf,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,KAAa,EAAE,EAAU,EAAU,EAAE;IACxE,OAAO,GAAG,iBAAiB,EAAE,UAAU,kBAAkB,CAAC,KAAK,CAAC,OAAO,EAAE,gBAAgB,WAAW,EAAE,CAAC;AACzG,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,kBAAkB,GAAG,GAAS,EAAE;IAC3C,MAAM,UAAU,GAAG,iBAAiB,EAAE,CAAC;IACvC,IAAI,CAAC,UAAU,EAAE,CAAC;QAChB,sBAAsB,CAAC,4BAA4B,CAAC,oBAAoB,CAAC,CAAC;IAC5E,CAAC;AACH,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,cAAc,GAAG,CAC5B,yBAA4E,EACtE,EAAE;IACR,IAAI,CAAC;QACH,MAAM,WAAW,GAAG,cAAc,EAAE,CAAC;QACrC,MAAM,MAAM,GAAG,4BAA4B,EAAE,CAAC;QAC9C,IAAI,CAAC,WAAW,EAAE,CAAC;YACjB,yBAAyB,CAAC,4BAA4B,CAAC,aAAa,CAAC,CAAC;QACxE,CAAC;QACD,MAAM,MAAM,GAAG,QAAQ,CAAa,WAAY,CAAC,CAAC;QAClD,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC;YAChB,yBAAyB,CAAC,4BAA4B,CAAC,qBAAqB,CAAC,CAAC;QAChF,CAAC;QACD,IAAI,IAAI,CAAC,GAAG,EAAE,IAAI,MAAM,CAAC,GAAI,GAAG,IAAI,EAAE,CAAC;YACrC,yBAAyB,CAAC,4BAA4B,CAAC,qBAAqB,CAAC,CAAC;QAChF,CAAC;QACD,IAAI,MAAO,CAAC,SAAS,KAAK,MAAO,CAAC,GAAG,EAAE,CAAC;YACtC,yBAAyB,CAAC,4BAA4B,CAAC,wBAAwB,CAAC,CAAC;QACnF,CAAC;IACH,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QACtB,sBAAsB,CAAC,4BAA4B,CAAC,qBAAqB,CAAC,CAAC;IAC7E,CAAC;AACH,CAAC,CAAC;AACF,MAAM,mBAAmB,GAAG,CAAC,cAAsB,EAAE,WAAmB,EAAW,EAAE;IACnF,OAAO,cAAc,GAAG,IAAI,GAAG,WAAW,IAAI,SAAS,CAAC,aAAa,CAAC;AACxE,CAAC,CAAC;AAEF,MAAM,oBAAoB,GAAG,CAAC,cAAsB,EAAE,WAAmB,EAAQ,EAAE;IACjF,MAAM,gBAAgB,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,cAAc,GAAG,IAAI,GAAG,WAAW,CAAC,GAAG,SAAS,CAAC,UAAU,CAAC,CAAC;IACjG,MAAM,cAAc,GAAG,IAAI,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,CAAC,kBAAkB,EAAE,CAAC;IAC5E,MAAM,iBAAiB,GAAG,mEAAmE,gBAAgB,YAAY,cAAc,+MAA+M,CAAC;IACvV,OAAO,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;AAClC,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,8BAA8B,GAAG,GAAS,EAAE;IACvD,MAAM,WAAW,GAAG,cAAc,EAAE,CAAC;IACrC,MAAM,MAAM,GAAG,QAAQ,CAAa,WAAY,CAAC,CAAC;IAClD,MAAM,WAAW,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IAC/B,IAAI,mBAAmB,CAAC,MAAM,CAAC,GAAI,EAAE,WAAW,CAAC,EAAE,CAAC;QAClD,oBAAoB,CAAC,MAAM,CAAC,GAAI,EAAE,WAAW,CAAC,CAAC;IACjD,CAAC;AACH,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,0BAA0B,GAAG,KAAK,EAAE,UAA4B,EAAmB,EAAE;IAChG,MAAM,kBAAkB,GAAG,wBAAwB,CAAC,UAAU,CAAC,CAAC;IAChE,IAAI,kBAAkB,CAAC,KAAK,IAAI,kBAAkB,CAAC,kCAAkC,EAAE,EAAE,CAAC;QACxF,MAAM,kBAAkB,CAAC,uBAAuB,EAAE,CAAC;IACrD,CAAC;IACD,IAAI,CAAC,cAAc,EAAE,EAAE,CAAC;QACtB,MAAM,IAAI,KAAK,CAAC,4BAA4B,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;IACtE,CAAC;IACD,OAAO,cAAc,EAAG,CAAC;AAC3B,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,gBAAgB,GAAG,GAAS,EAAE;IACzC,MAAM,KAAK,GACT,qFAAqF,CAAC;IACxF,MAAM,GAAG,GAAG,iBAAiB,EAAE,CAAC;IAChC,MAAM,KAAK,GAAG,GAAG,aAAH,GAAG,uBAAH,GAAG,CAAE,KAAK,CAAC,KAAK,CAAC,CAAC;IAChC,IAAI,KAAK,IAAI,KAAK,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC;QAC/B,MAAM,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,GAAG,KAAK,CAAC;QACjC,OAAO,CAAC,GAAG,CAAC,4BAA4B,CAAC,yBAAyB,CAAC;YACjE,WAAW,MAAM,kBAAkB,MAAM,EAAE,CAAC;IAChD,CAAC;AACH,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,iBAAiB,GAAG,GAAW,EAAE;IAC5C,IAAI,CAAC;QACH,iEAAiE;QACjE,MAAM,OAAO,GAAG,OAAO,CAAC,oBAAoB,CAAC,CAAC,OAAO,CAAC;QACtD,OAAO,OAAO,CAAC;IACjB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,iCAAiC,EAAE,KAAK,CAAC,CAAC;QACxD,OAAO,iBAAiB,CAAC;IAC3B,CAAC;AACH,CAAC,CAAC;AACF,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,OAAe,EAAe,EAAE;IAC7D,MAAM,KAAK,GAAG,gCAAgC,CAAC;IAC/C,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IACnC,MAAM,WAAW,GAAG;QAClB,KAAK,EAAE,CAAC;QACR,KAAK,EAAE,CAAC;QACR,KAAK,EAAE,CAAC;KACT,CAAC;IACF,WAAW,CAAC,KAAK,GAAG,KAAK,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACnE,WAAW,CAAC,KAAK,GAAG,KAAK,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACnE,WAAW,CAAC,KAAK,GAAG,KAAK,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACnE,OAAO,WAAW,CAAC;AACrB,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,yBAAyB,GAAG,GAAS,EAAE;IAClD,MAAM,uBAAuB,GAAG,oCAAoC,CAAC;IACrE,MAAM,gBAAgB,GAAG,oBAAoB,EAAE,CAAC;IAEhD,MAAM,2BAA2B,GAAG,cAAc,CAAC,uBAAuB,CAAC,CAAC;IAC5E,MAAM,oBAAoB,GAAG,cAAc,CAAC,gBAAgB,CAAC,CAAC;IAE9D,MAAM,yBAAyB,GAC7B,oBAAoB,CAAC,KAAK,GAAG,2BAA2B,CAAC,KAAK;QAC9D,CAAC,oBAAoB,CAAC,KAAK,KAAK,2BAA2B,CAAC,KAAK;YAC/D,oBAAoB,CAAC,KAAK,IAAI,2BAA2B,CAAC,KAAK,CAAC,CAAC;IACrE,IAAI,CAAC,yBAAyB,EAAE,CAAC;QAC/B,sBAAsB,CAAC,4BAA4B,CAAC,gCAAgC,CAAC,CAAC;IACxF,CAAC;AACH,CAAC,CAAC","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport type { JwtPayload, VersionInfo } from \"../common/types.js\";\nimport {\n API_VERSION,\n Constants,\n InternalEnvironmentVariables,\n MINIMUM_SUPPORTED_PLAYWRIGHT_VERSION,\n ServiceEnvironmentVariable,\n} from \"../common/constants.js\";\nimport { ServiceErrorMessageConstants } from \"../common/messages.js\";\nimport { coreLogger } from \"../common/logger.js\";\nimport type { TokenCredential } from \"@azure/identity\";\nimport ReporterUtils from \"./reporterUtils.js\";\nimport { CIInfoProvider } from \"./cIInfoProvider.js\";\nimport * as process from \"node:process\";\nimport { parseJwt } from \"./parseJwt.js\";\nimport { getPlaywrightVersion } from \"./getPlaywrightVersion.js\";\nimport { createEntraIdAccessToken } from \"../common/entraIdAccessToken.js\";\n\n// Re-exporting for backward compatibility\nexport { getPlaywrightVersion } from \"./getPlaywrightVersion.js\";\nexport { parseJwt } from \"./parseJwt.js\";\n\nexport const exitWithFailureMessage = (error: { key: string; message: string }): never => {\n console.log();\n console.error(error.message);\n // eslint-disable-next-line n/no-process-exit\n process.exit(1);\n};\n\nexport const populateValuesFromServiceUrl = (): { region: string; accountId: string } | 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 (!ReporterUtils.isNullOrEmpty(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 accountId = parts[4];\n\n return { region: region!, 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 getAndSetRunId = (): string => {\n const runId = ReporterUtils.getRunId(CIInfoProvider.getCIInfo());\n process.env[InternalEnvironmentVariables.MPT_SERVICE_RUN_ID] = runId;\n return runId;\n};\n\nexport const getServiceWSEndpoint = (runId: string, os: string): string => {\n return `${getServiceBaseURL()}?runId=${encodeURIComponent(runId)}&os=${os}&api-version=${API_VERSION}`;\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 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<JwtPayload>(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!.aid) {\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/en-us/entra/identity/`;\n console.warn(expirationWarning);\n};\n\nexport const warnIfAccessTokenCloseToExpiry = (): void => {\n const accessToken = getAccessToken();\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 if (entraIdAccessToken.token && entraIdAccessToken.doesEntraIdAccessTokenNeedRotation()) {\n await entraIdAccessToken.fetchEntraIdAccessToken();\n }\n if (!getAccessToken()) {\n throw new Error(ServiceErrorMessageConstants.NO_AUTH_ERROR.message);\n }\n return getAccessToken()!;\n};\n\nexport const emitReportingUrl = (): void => {\n const regex =\n /wss:\\/\\/([\\w-]+)\\.api\\.(playwright(?:-test|-int)?\\.io|playwright\\.microsoft\\.com)\\//;\n const url = getServiceBaseURL();\n const match = url?.match(regex);\n if (match && match.length >= 3) {\n const [, region, domain] = match;\n process.env[InternalEnvironmentVariables.MPT_SERVICE_REPORTING_URL] =\n `https://${region}.reporting.api.${domain}`;\n }\n};\n\nexport const getPackageVersion = (): string => {\n try {\n // eslint-disable-next-line @typescript-eslint/no-require-imports\n const version = require(\"../../package.json\").version;\n return version;\n } catch (error) {\n console.error(\"Error fetching package version:\", error);\n return \"unknown version\";\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 = MINIMUM_SUPPORTED_PLAYWRIGHT_VERSION;\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"]}
|