@testream/cypress-reporter 1.0.2 → 1.0.3

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.
@@ -15,11 +15,6 @@ export interface TestreamReporterOptions {
15
15
  * @required
16
16
  */
17
17
  apiKey: string;
18
- /**
19
- * Project key to associate test results with
20
- * @required
21
- */
22
- projectKey: string;
23
18
  /**
24
19
  * Git commit SHA (auto-detected from environment if not provided)
25
20
  */
@@ -88,7 +83,6 @@ export interface TestreamReporterOptions {
88
83
  * new TestreamReporter({
89
84
  * on,
90
85
  * apiKey: 'your-api-key',
91
- * projectKey: 'YOUR_PROJECT',
92
86
  * uploadEnabled: true,
93
87
  * });
94
88
  * },
@@ -1 +1 @@
1
- {"version":3,"file":"","sourceRoot":"","sources":["file:///home/runner/work/jira-test-manager/jira-test-manager/packages/cypress-reporter/src/reporter.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AASH,KAAK,mBAAmB,GAAG,GAAG,CAAC;AAE/B;;GAEG;AACH,MAAM,WAAW,uBAAuB;IACtC,iFAAiF;IACjF,EAAE,EAAE,mBAAmB,CAAC;IAExB;;;OAGG;IACH,MAAM,EAAE,MAAM,CAAC;IAEf;;;OAGG;IACH,UAAU,EAAE,MAAM,CAAC;IAEnB;;OAEG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB;;;OAGG;IACH,aAAa,CAAC,EAAE,OAAO,CAAC;IAExB;;;OAGG;IACH,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAG5B,oDAAoD;IACpD,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,6CAA6C;IAC7C,SAAS,CAAC,EAAE,MAAM,CAAC;IAGnB,gDAAgD;IAChD,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,6EAA6E;IAC7E,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB;;;OAGG;IACH,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,qDAAqD;IACrD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAGlB,yCAAyC;IACzC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,4CAA4C;IAC5C,UAAU,CAAC,EAAE,MAAM,CAAC;IAGpB,uDAAuD;IACvD,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,yBAAyB;IACzB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,iBAAiB;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IAGnB,iBAAiB;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,mBAAmB;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,gBAAgB;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAGlB,sBAAsB;IACtB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,qBAAqB;IACrB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,kBAAkB;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IAGpB,uDAAuD;IACvD,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,OAAO,CAA0B;IACzC,OAAO,CAAC,IAAI,CAAqB;YAEnB,iBAAiB;gBAenB,OAAO,EAAE,uBAAuB;IAqE5C;;OAEG;YACW,aAAa;CA4D5B"}
1
+ {"version":3,"file":"","sourceRoot":"","sources":["file:///home/runner/work/jira-test-manager/jira-test-manager/packages/cypress-reporter/src/reporter.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AASH,KAAK,mBAAmB,GAAG,GAAG,CAAC;AAE/B;;GAEG;AACH,MAAM,WAAW,uBAAuB;IACtC,iFAAiF;IACjF,EAAE,EAAE,mBAAmB,CAAC;IAExB;;;OAGG;IACH,MAAM,EAAE,MAAM,CAAC;IAEf;;OAEG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB;;;OAGG;IACH,aAAa,CAAC,EAAE,OAAO,CAAC;IAExB;;;OAGG;IACH,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAG5B,oDAAoD;IACpD,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,6CAA6C;IAC7C,SAAS,CAAC,EAAE,MAAM,CAAC;IAGnB,gDAAgD;IAChD,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,6EAA6E;IAC7E,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB;;;OAGG;IACH,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,qDAAqD;IACrD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAGlB,yCAAyC;IACzC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,4CAA4C;IAC5C,UAAU,CAAC,EAAE,MAAM,CAAC;IAGpB,uDAAuD;IACvD,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,yBAAyB;IACzB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,iBAAiB;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IAGnB,iBAAiB;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,mBAAmB;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,gBAAgB;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAGlB,sBAAsB;IACtB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,qBAAqB;IACrB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,kBAAkB;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IAGpB,uDAAuD;IACvD,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,OAAO,CAA0B;IACzC,OAAO,CAAC,IAAI,CAAqB;YAEnB,iBAAiB;gBAenB,OAAO,EAAE,uBAAuB;IAiE5C;;OAEG;YACW,aAAa;CA4D5B"}
@@ -46,11 +46,6 @@ export interface CypressReporterConfig {
46
46
  * @required
47
47
  */
48
48
  apiKey: string;
49
- /**
50
- * Project key to associate test results with
51
- * @required
52
- */
53
- projectKey: string;
54
49
  /**
55
50
  * Path to Cypress project directory
56
51
  * If not provided, uses current directory
@@ -1 +1 @@
1
- {"version":3,"file":"","sourceRoot":"","sources":["file:///home/runner/work/jira-test-manager/jira-test-manager/packages/cypress-reporter/src/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,KAAK,EAAE,QAAQ,GAAG,QAAQ,GAAG,SAAS,GAAG,SAAS,CAAC;IACnD,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,KAAK,CAAC;QACd,KAAK,EAAE,QAAQ,GAAG,QAAQ,GAAG,SAAS,CAAC;QACvC,KAAK,CAAC,EAAE;YACN,IAAI,EAAE,MAAM,CAAC;YACb,OAAO,EAAE,MAAM,CAAC;YAChB,KAAK,CAAC,EAAE,MAAM,CAAC;SAChB,CAAC;QACF,kBAAkB,EAAE,MAAM,CAAC;QAC3B,iBAAiB,EAAE,MAAM,CAAC;KAC3B,CAAC,CAAC;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE;QACL,MAAM,EAAE,MAAM,CAAC;QACf,KAAK,EAAE,MAAM,CAAC;QACd,MAAM,EAAE,MAAM,CAAC;QACf,OAAO,EAAE,MAAM,CAAC;QAChB,OAAO,EAAE,MAAM,CAAC;QAChB,QAAQ,EAAE,MAAM,CAAC;QACjB,QAAQ,EAAE,MAAM,CAAC;QACjB,SAAS,EAAE,MAAM,CAAC;QAClB,OAAO,EAAE,MAAM,CAAC;KACjB,CAAC;IACF,KAAK,EAAE,WAAW,EAAE,CAAC;IACrB,IAAI,EAAE,WAAW,CAAC;CACnB;AAED;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACpC;;;OAGG;IACH,MAAM,EAAE,MAAM,CAAC;IAEf;;;OAGG;IACH,UAAU,EAAE,MAAM,CAAC;IAEnB;;;OAGG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB;;OAEG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;IAEhB;;OAEG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB;;OAEG;IACH,aAAa,CAAC,EAAE,MAAM,CAAC;IAEvB;;;OAGG;IACH,aAAa,CAAC,EAAE,OAAO,CAAC;IAExB;;;OAGG;IACH,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAE5B;;OAEG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAElB;;OAEG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;IAEjB;;OAEG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;IAEpB;;OAEG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB;;OAEG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB;;OAEG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAElB;;OAEG;IACH,eAAe,CAAC,EAAE,MAAM,CAAC;IAEzB;;OAEG;IACH,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IAEvB;;;OAGG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB"}
1
+ {"version":3,"file":"","sourceRoot":"","sources":["file:///home/runner/work/jira-test-manager/jira-test-manager/packages/cypress-reporter/src/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,KAAK,EAAE,QAAQ,GAAG,QAAQ,GAAG,SAAS,GAAG,SAAS,CAAC;IACnD,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,KAAK,CAAC;QACd,KAAK,EAAE,QAAQ,GAAG,QAAQ,GAAG,SAAS,CAAC;QACvC,KAAK,CAAC,EAAE;YACN,IAAI,EAAE,MAAM,CAAC;YACb,OAAO,EAAE,MAAM,CAAC;YAChB,KAAK,CAAC,EAAE,MAAM,CAAC;SAChB,CAAC;QACF,kBAAkB,EAAE,MAAM,CAAC;QAC3B,iBAAiB,EAAE,MAAM,CAAC;KAC3B,CAAC,CAAC;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE;QACL,MAAM,EAAE,MAAM,CAAC;QACf,KAAK,EAAE,MAAM,CAAC;QACd,MAAM,EAAE,MAAM,CAAC;QACf,OAAO,EAAE,MAAM,CAAC;QAChB,OAAO,EAAE,MAAM,CAAC;QAChB,QAAQ,EAAE,MAAM,CAAC;QACjB,QAAQ,EAAE,MAAM,CAAC;QACjB,SAAS,EAAE,MAAM,CAAC;QAClB,OAAO,EAAE,MAAM,CAAC;KACjB,CAAC;IACF,KAAK,EAAE,WAAW,EAAE,CAAC;IACrB,IAAI,EAAE,WAAW,CAAC;CACnB;AAED;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACpC;;;OAGG;IACH,MAAM,EAAE,MAAM,CAAC;IAEf;;;OAGG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB;;OAEG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;IAEhB;;OAEG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB;;OAEG;IACH,aAAa,CAAC,EAAE,MAAM,CAAC;IAEvB;;;OAGG;IACH,aAAa,CAAC,EAAE,OAAO,CAAC;IAExB;;;OAGG;IACH,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAE5B;;OAEG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAElB;;OAEG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;IAEjB;;OAEG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;IAEpB;;OAEG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB;;OAEG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB;;OAEG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAElB;;OAEG;IACH,eAAe,CAAC,EAAE,MAAM,CAAC;IAEzB;;OAEG;IACH,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IAEvB;;;OAGG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB"}
package/dist/index.js CHANGED
@@ -1 +1 @@
1
- (()=>{"use strict";var e={301:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:true});t.GenerateCtrfReport=void 0;const n=r(896);const o=r(928);class GenerateCtrfReport{constructor(e){var t,r,o,i,s,a,u,l,d,p,c,f,m,h,y,_,b,v,R,T;this.reporterName="cypress-ctrf-json-reporter";this.defaultOutputFile="ctrf-report.json";this.defaultOutputDir="ctrf";this.runStart=0;this.runStop=0;this.filename=this.defaultOutputFile;this.browser="";this.reporterConfigOptions={on:e.on,outputFile:(t=e===null||e===void 0?void 0:e.outputFile)!==null&&t!==void 0?t:this.defaultOutputFile,outputDir:(r=e===null||e===void 0?void 0:e.outputDir)!==null&&r!==void 0?r:this.defaultOutputDir,minimal:(o=e===null||e===void 0?void 0:e.minimal)!==null&&o!==void 0?o:false,screenshot:(i=e===null||e===void 0?void 0:e.screenshot)!==null&&i!==void 0?i:false,testType:(s=e===null||e===void 0?void 0:e.testType)!==null&&s!==void 0?s:"e2e",appName:(a=e===null||e===void 0?void 0:e.appName)!==null&&a!==void 0?a:undefined,appVersion:(u=e===null||e===void 0?void 0:e.appVersion)!==null&&u!==void 0?u:undefined,osPlatform:(l=e===null||e===void 0?void 0:e.osPlatform)!==null&&l!==void 0?l:undefined,osRelease:(d=e===null||e===void 0?void 0:e.osRelease)!==null&&d!==void 0?d:undefined,osVersion:(p=e===null||e===void 0?void 0:e.osVersion)!==null&&p!==void 0?p:undefined,buildName:(c=e===null||e===void 0?void 0:e.buildName)!==null&&c!==void 0?c:undefined,buildNumber:(f=e===null||e===void 0?void 0:e.buildNumber)!==null&&f!==void 0?f:undefined,buildUrl:(m=e===null||e===void 0?void 0:e.buildUrl)!==null&&m!==void 0?m:undefined,repositoryName:(h=e===null||e===void 0?void 0:e.repositoryName)!==null&&h!==void 0?h:undefined,repositoryUrl:(y=e===null||e===void 0?void 0:e.repositoryUrl)!==null&&y!==void 0?y:undefined,branchName:(_=e===null||e===void 0?void 0:e.branchName)!==null&&_!==void 0?_:undefined,testEnvironment:(b=e===null||e===void 0?void 0:e.testEnvironment)!==null&&b!==void 0?b:undefined};this.ctrfReport={results:{tool:{name:"cypress"},summary:{tests:0,passed:0,failed:0,pending:0,skipped:0,other:0,start:0,stop:0},tests:[]}};this.validateOptions();if(this.reporterConfigOptions.outputFile!==undefined)this.setFilename(this.reporterConfigOptions.outputFile);this.ctrfEnvironment={};if(((v=this.reporterConfigOptions)===null||v===void 0?void 0:v.outputFile)!==undefined)this.setFilename(this.reporterConfigOptions.outputFile);if(!n.existsSync((R=this.reporterConfigOptions.outputDir)!==null&&R!==void 0?R:this.defaultOutputDir)){n.mkdirSync((T=this.reporterConfigOptions.outputDir)!==null&&T!==void 0?T:this.defaultOutputDir,{recursive:true})}this.setEventHandlers()}setFilename(e){if(e.endsWith(".json")){this.filename=e}else{this.filename=`${e}.json`}}validateOptions(){if(this.reporterConfigOptions.on===false){throw new Error("Missing required option: on")}}setEventHandlers(){this.reporterConfigOptions.on("before:run",(e=>{var t;this.runStart=Date.now();this.browser=`${e.browser.name} ${e.browser.version}`;this.setEnvironmentDetails((t=this.reporterConfigOptions)!==null&&t!==void 0?t:{});if(this.hasEnvironmentDetails(this.ctrfEnvironment)){this.ctrfReport.results.environment=this.ctrfEnvironment}}));this.reporterConfigOptions.on("after:spec",((e,t)=>{this.updateCtrfResultsFromAfterSpecResults(t)}));this.reporterConfigOptions.on("after:run",(e=>{this.runStop=Date.now();this.updateCtrfTotalsFromAfterRun(e);this.writeReportToFile(this.ctrfReport)}))}updateCtrfResultsFromAfterSpecResults(e){e.tests.forEach((t=>{var r,n,o,i,s,a;const u=(r=t.attempts)===null||r===void 0?void 0:r[t.attempts.length-1];const l=typeof t.duration==="number"?t.duration:(n=u===null||u===void 0?void 0:u.wallClockDuration)!==null&&n!==void 0?n:0;const d=(i=(o=t.attempts)===null||o===void 0?void 0:o.length)!==null&&i!==void 0?i:0;const p=t.state==="passed"&&d>1;const c={name:t.title.join(" "),status:t.state,duration:l};if(this.reporterConfigOptions.minimal===false){if(t.state==="failed"){const e=this.extractFailureDetails(t,u);c.message=e.message;c.trace=e.trace}c.rawStatus=t.state;c.type=(s=this.reporterConfigOptions.testType)!==null&&s!==void 0?s:"e2e";c.filePath=(a=e.spec)===null||a===void 0?void 0:a.relative;c.retries=d-1;c.flaky=p;c.browser=this.browser;const r=this.getScreenshot(t,e,false);if(r!==undefined&&typeof r==="string"){c.screenshot=r}}const f=this.getAttachments(t,e);if(f.length>0){if(c.attachments!==undefined){c.attachments=[...c.attachments,...f]}else{c.attachments=f}}this.ctrfReport.results.tests.push(c)}))}updateCtrfTotalsFromAfterRun(e){this.ctrfReport.results.summary={tests:e.totalTests,failed:e.totalFailed,passed:e.totalPassed,skipped:e.totalSkipped,pending:e.totalPending,other:0,start:this.runStart,stop:this.runStop}}setEnvironmentDetails(e){if(e.appName!==undefined){this.ctrfEnvironment.appName=e.appName}if(e.appVersion!==undefined){this.ctrfEnvironment.appVersion=e.appVersion}if(e.osPlatform!==undefined){this.ctrfEnvironment.osPlatform=e.osPlatform}if(e.osRelease!==undefined){this.ctrfEnvironment.osRelease=e.osRelease}if(e.osVersion!==undefined){this.ctrfEnvironment.osVersion=e.osVersion}if(e.buildName!==undefined){this.ctrfEnvironment.buildName=e.buildName}if(e.buildNumber!==undefined){this.ctrfEnvironment.buildNumber=e.buildNumber}if(e.buildUrl!==undefined){this.ctrfEnvironment.buildUrl=e.buildUrl}if(e.repositoryName!==undefined){this.ctrfEnvironment.repositoryName=e.repositoryName}if(e.repositoryUrl!==undefined){this.ctrfEnvironment.repositoryUrl=e.repositoryUrl}if(e.branchName!==undefined){this.ctrfEnvironment.branchName=e.branchName}if(e.testEnvironment!==undefined){this.ctrfEnvironment.testEnvironment=e.testEnvironment}}hasEnvironmentDetails(e){return Object.keys(e).length>0}extractFailureDetails(e,t){const r={};if((t===null||t===void 0?void 0:t.error)!==undefined&&(t===null||t===void 0?void 0:t.error)!==null&&"message"in t.error&&"stack"in t.error){r.message=t.error.message;r.trace=t.error.stack}else if(typeof e.displayError==="string"&&e.displayError.trim().length>0){r.message=e.displayError;r.trace=e.displayError}return r}getScreenshot(e,t,r=false){if(this.reporterConfigOptions.screenshot===false&&!r){return undefined}if(t.screenshots===undefined||t.screenshots.length===0){return undefined}const o=t.screenshots.filter((t=>t.path!==undefined&&t.path!==""&&t.path.includes(e.title.join(" -- "))));if(o.length===0){return undefined}if(r){return o.map((e=>({name:"screenshot",contentType:"image/png",path:e.path})))}let i=o.find((e=>e.path.includes("(failed)")));if(i===undefined&&o.length>0){i=o[o.length-1]}if(i!==undefined){try{const e=n.readFileSync(i.path,{encoding:"base64"});return e}catch(e){console.warn(`Error reading screenshot file ${i.path}:`,e);return undefined}}return undefined}getAttachments(e,t){const r=[];if(t.screenshots!==undefined&&t.screenshots.length>0){try{const n=this.getScreenshot(e,t,true);if(n!==undefined&&Array.isArray(n)){r.push(...n)}}catch(e){console.error("Error processing screenshot attachments:",e)}}if(t.video!==undefined&&t.video!==null&&t.video.trim()!==""){try{if(n.existsSync(t.video)){r.push({name:"video",contentType:"video/mp4",path:t.video})}else{console.warn(`Video file not found: ${t.video}`)}}catch(e){console.warn("Error processing video attachment:",e)}}return r}writeReportToFile(e){var t,r;const i=o.join((t=this.reporterConfigOptions.outputDir)!==null&&t!==void 0?t:this.defaultOutputDir,(r=this.reporterConfigOptions.outputFile)!==null&&r!==void 0?r:this.defaultOutputFile);const s=JSON.stringify(e,null,2);try{n.writeFileSync(i,s+"\n");console.log(`${this.reporterName}: successfully written ctrf json to %s/%s`,this.reporterConfigOptions.outputDir,this.reporterConfigOptions.outputFile)}catch(e){console.error(`Error writing ctrf json report:, ${String(e)}`)}}}t.GenerateCtrfReport=GenerateCtrfReport},641:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:true});t.GenerateCtrfReport=void 0;var n=r(301);Object.defineProperty(t,"GenerateCtrfReport",{enumerable:true,get:function(){return n.GenerateCtrfReport}})},406:(e,t)=>{Object.defineProperty(t,"__esModule",{value:true});t.detectCIContext=detectCIContext;function detectCIContext(){const e=process.env;if(e.GITHUB_ACTIONS==="true"){return{branch:e.GITHUB_HEAD_REF||e.GITHUB_REF_NAME||e.GITHUB_REF?.replace("refs/heads/",""),commitSha:e.GITHUB_SHA,repositoryUrl:e.GITHUB_SERVER_URL&&e.GITHUB_REPOSITORY?`${e.GITHUB_SERVER_URL}/${e.GITHUB_REPOSITORY}`:undefined,buildNumber:e.GITHUB_RUN_NUMBER,buildUrl:e.GITHUB_SERVER_URL&&e.GITHUB_REPOSITORY&&e.GITHUB_RUN_ID?`${e.GITHUB_SERVER_URL}/${e.GITHUB_REPOSITORY}/actions/runs/${e.GITHUB_RUN_ID}`:undefined}}if(e.GITLAB_CI==="true"){return{branch:e.CI_COMMIT_BRANCH||e.CI_MERGE_REQUEST_SOURCE_BRANCH_NAME,commitSha:e.CI_COMMIT_SHA,repositoryUrl:e.CI_PROJECT_URL,buildNumber:e.CI_PIPELINE_IID,buildUrl:e.CI_PIPELINE_URL}}if(e.TF_BUILD==="True"){return{branch:e.BUILD_SOURCEBRANCH?.replace("refs/heads/",""),commitSha:e.BUILD_SOURCEVERSION,repositoryUrl:e.BUILD_REPOSITORY_URI,buildNumber:e.BUILD_BUILDNUMBER,buildUrl:e.SYSTEM_TEAMFOUNDATIONCOLLECTIONURI&&e.SYSTEM_TEAMPROJECT&&e.BUILD_BUILDID?`${e.SYSTEM_TEAMFOUNDATIONCOLLECTIONURI}${e.SYSTEM_TEAMPROJECT}/_build/results?buildId=${e.BUILD_BUILDID}`:undefined}}if(e.CIRCLECI==="true"){return{branch:e.CIRCLE_BRANCH,commitSha:e.CIRCLE_SHA1,repositoryUrl:e.CIRCLE_REPOSITORY_URL,buildNumber:e.CIRCLE_BUILD_NUM,buildUrl:e.CIRCLE_BUILD_URL}}if(e.JENKINS_URL){return{branch:e.GIT_BRANCH?.replace("origin/",""),commitSha:e.GIT_COMMIT,repositoryUrl:e.GIT_URL,buildNumber:e.BUILD_NUMBER,buildUrl:e.BUILD_URL}}if(e.BITBUCKET_BUILD_NUMBER){return{branch:e.BITBUCKET_BRANCH,commitSha:e.BITBUCKET_COMMIT,repositoryUrl:e.BITBUCKET_GIT_HTTP_ORIGIN,buildNumber:e.BITBUCKET_BUILD_NUMBER,buildUrl:e.BITBUCKET_REPO_FULL_NAME&&e.BITBUCKET_BUILD_NUMBER?`https://bitbucket.org/${e.BITBUCKET_REPO_FULL_NAME}/pipelines/results/${e.BITBUCKET_BUILD_NUMBER}`:undefined}}return{}}},827:(e,t)=>{Object.defineProperty(t,"__esModule",{value:true})},322:function(e,t,r){var n=this&&this.__createBinding||(Object.create?function(e,t,r,n){if(n===undefined)n=r;var o=Object.getOwnPropertyDescriptor(t,r);if(!o||("get"in o?!t.__esModule:o.writable||o.configurable)){o={enumerable:true,get:function(){return t[r]}}}Object.defineProperty(e,n,o)}:function(e,t,r,n){if(n===undefined)n=r;e[n]=t[r]});var o=this&&this.__exportStar||function(e,t){for(var r in e)if(r!=="default"&&!Object.prototype.hasOwnProperty.call(t,r))n(t,e,r)};Object.defineProperty(t,"__esModule",{value:true});t.ensureReportId=t.mapAttachmentsToTestResults=t.uploadArtifacts=t.uploadTestRun=t.detectCIContext=void 0;o(r(827),t);var i=r(406);Object.defineProperty(t,"detectCIContext",{enumerable:true,get:function(){return i.detectCIContext}});var s=r(969);Object.defineProperty(t,"uploadTestRun",{enumerable:true,get:function(){return s.uploadTestRun}});Object.defineProperty(t,"uploadArtifacts",{enumerable:true,get:function(){return s.uploadArtifacts}});Object.defineProperty(t,"mapAttachmentsToTestResults",{enumerable:true,get:function(){return s.mapAttachmentsToTestResults}});Object.defineProperty(t,"ensureReportId",{enumerable:true,get:function(){return s.ensureReportId}})},969:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:true});t.ensureReportId=ensureReportId;t.uploadTestRun=uploadTestRun;t.mapAttachmentsToTestResults=mapAttachmentsToTestResults;t.uploadArtifacts=uploadArtifacts;const n=r(406);const o="https://test-manager-backend.fly.dev";function ensureReportId(e){if(typeof e.reportId==="string"&&e.reportId.trim().length>0){return e.reportId}const t=crypto.randomUUID();e.reportId=t;return t}function resolveApiUrl(e){const t=normalizeApiUrl(e);if(t){return t}const r=getEnvApiUrl();if(r){return r}return o}function getEnvApiUrl(){if(typeof process==="undefined"||!process?.env){return undefined}return normalizeApiUrl(process.env.TESTREAM_API_URL)}function normalizeApiUrl(e){if(!e){return undefined}const t=e.trim();if(!t){return undefined}return t.replace(/\/+$/,"")}function isReportAlreadyExistsConflict(e){return e.errorCode==="report_already_exists"}function formatUploadError(e){const t=e.detail||e.title||e.rawBody||"Unknown error";const r=e.errorCode?`, code=${e.errorCode}`:"";return`Upload failed (HTTP ${e.statusCode}${r}): ${t}`}async function parseHttpError(e){const t=await e.text();const r=e.headers.get("content-type")||"";if(r.toLowerCase().includes("json")&&t.trim().length>0){try{const r=JSON.parse(t);return{statusCode:e.status,title:r.title,detail:r.detail||r.details||r.error,errorCode:r.errorCode,rawBody:t}}catch{}}return{statusCode:e.status,rawBody:t}}function resolveUploadContext(e){const t=(0,n.detectCIContext)();return{commitSha:e.commitSha??t.commitSha,branch:e.branch??t.branch,repositoryUrl:e.repositoryUrl??t.repositoryUrl,buildName:e.buildName,buildNumber:e.buildNumber??t.buildNumber,buildUrl:e.buildUrl??t.buildUrl,testEnvironment:e.testEnvironment,appName:e.appName,appVersion:e.appVersion,testType:e.testType}}async function uploadTestRun(e){const{report:t,apiKey:r}=e;const n=resolveApiUrl(e.apiUrl);const o=ensureReportId(t);const i=resolveUploadContext(e);const s={report:t,reportId:o,...i};console.log("Uploading test results...");let a;try{a=await fetch(`${n}/api/v1/ingest`,{method:"POST",headers:{"X-API-KEY":r,"Content-Type":"application/json"},body:JSON.stringify(s)})}catch(e){const t=e instanceof Error?e.message:String(e);const r=`Connection failed: ${t}`;console.error(r);return{success:false,reportId:o,error:r}}if(!a.ok){const e=await parseHttpError(a);if(a.status===409&&isReportAlreadyExistsConflict(e)){console.warn("Report already exists (workflow may have been re-run)");return{success:true,reportId:o,summary:{passed:t.results.summary.passed,failed:t.results.summary.failed,skipped:t.results.summary.skipped,total:t.results.summary.tests},alreadyExists:true,statusCode:e.statusCode,errorCode:e.errorCode}}const r=formatUploadError(e);console.error(r);return{success:false,reportId:o,error:r,statusCode:e.statusCode,errorCode:e.errorCode,errorDetail:e.detail||e.rawBody}}const u=await a.json();console.log(`✓ Test results uploaded successfully`);console.log(` Report ID: ${u.reportId}`);console.log(` Test Run ID: ${u.testRunId}`);console.log(` Tests: ${u.summary.passed}/${u.summary.total} passed`);return{success:true,reportId:u.reportId,testRunId:u.testRunId,summary:{passed:u.summary.passed,failed:u.summary.failed,skipped:u.summary.skipped,total:u.summary.total},testResults:u.testResults}}function mapAttachmentsToTestResults(e,t){const r=new Map;for(const e of t){const t=r.get(e.name)??[];t.push(e.id);r.set(e.name,t)}const n=[];for(const t of e){const e=r.get(t.name);const o=e?.shift();if(!t.attachments||t.attachments.length===0){continue}if(!o){console.warn(`Skipping artifact upload: could not match test result for "${t.name}"`);continue}n.push({testResultId:o,attachments:t.attachments})}return n}async function uploadArtifacts(e){const{reportId:t,apiKey:r,testResults:n}=e;const o=resolveApiUrl(e.apiUrl);let i=0;for(const e of n){for(const n of e.attachments){try{const s=await uploadSingleArtifact({testResultId:e.testResultId,attachment:n,reportId:t,apiKey:r,apiUrl:o});if(s)i++}catch(e){const t=e instanceof Error?e.message:String(e);console.error(`Failed to upload artifact ${n.name}: ${t}`)}}}if(i>0){console.log(`✓ Uploaded ${i} artifact(s)`)}return i}async function uploadSingleArtifact(e){const{testResultId:t,attachment:n,reportId:o,apiKey:i,apiUrl:s}=e;const a=await Promise.resolve().then(r.t.bind(r,943,23));const u=await Promise.resolve().then(r.t.bind(r,928,23));const l=u.resolve(n.path);try{await a.access(l)}catch{console.warn(`Artifact not found: ${u.basename(l)}`);return false}let d;let p;const c=u.basename(l);const f=n.contentType||"application/octet-stream";try{d=await a.readFile(l);p=d.byteLength}catch(e){const t=e instanceof Error?e.message:String(e);throw new Error(`Failed to read file: ${t}`)}try{return await uploadWithPresignedUrl({testResultId:t,reportId:o,apiKey:i,apiUrl:s,attachmentName:n.name,fileName:c,contentType:f,sizeBytes:p,fileBuffer:d})}catch(e){if(!(e instanceof LegacyUploadRequiredError)){throw e}return await uploadWithLegacyEndpoint({testResultId:t,attachmentName:n.name,reportId:o,apiKey:i,apiUrl:s,fileName:c,contentType:f,fileBuffer:d})}}class LegacyUploadRequiredError extends Error{constructor(){super("Legacy upload endpoint required")}}async function uploadWithPresignedUrl(e){const{testResultId:t,reportId:r,apiKey:n,apiUrl:o,attachmentName:i,fileName:s,contentType:a,sizeBytes:u,fileBuffer:l}=e;const d={testResultId:t,ctrfAttachmentName:i,fileName:s,contentType:a,sizeBytes:u};const p=await fetch(`${o}/api/v1/artifacts/${r}/upload-url`,{method:"POST",headers:{"X-API-KEY":n,"Content-Type":"application/json"},body:JSON.stringify(d)});if(shouldFallbackToLegacyUpload(p.status)){throw new LegacyUploadRequiredError}if(!p.ok){const e=await p.text();throw new Error(`Failed to create direct upload URL (HTTP ${p.status}): ${e}`)}const c=await p.json();const f={...c.requiredHeaders??{}};if(!hasHeaderIgnoreCase(f,"Content-Type")){f["Content-Type"]=a}const m=await fetch(c.uploadUrl,{method:"PUT",headers:f,body:l});if(!m.ok){const e=await m.text();throw new Error(`Direct artifact upload failed (HTTP ${m.status}): ${e}`)}const h={testResultId:t,ctrfAttachmentName:i,fileName:s,contentType:a,sizeBytes:u,storageKey:c.storageKey};const y=await fetch(`${o}/api/v1/artifacts/${r}/complete`,{method:"POST",headers:{"X-API-KEY":n,"Content-Type":"application/json"},body:JSON.stringify(h)});if(!y.ok){const e=await y.text();throw new Error(`Failed to finalize artifact upload (HTTP ${y.status}): ${e}`)}return true}async function uploadWithLegacyEndpoint(e){const{testResultId:t,attachmentName:r,reportId:n,apiKey:o,apiUrl:i,fileName:s,contentType:a,fileBuffer:u}=e;const l=new Blob([new Uint8Array(u)],{type:a});const d=new FormData;d.append("testResultId",t);d.append("ctrfAttachmentName",r);d.append("file",l,s);const p=await fetch(`${i}/api/v1/artifacts/${n}`,{method:"POST",headers:{"X-API-KEY":o},body:d});if(!p.ok){const e=await p.text();throw new Error(`Legacy artifact upload failed (HTTP ${p.status}): ${e}`)}return true}function shouldFallbackToLegacyUpload(e){return e===404||e===405||e===501}function hasHeaderIgnoreCase(e,t){const r=t.toLowerCase();return Object.keys(e).some((e=>e.toLowerCase()===r))}},481:function(e,t,r){var n=this&&this.__createBinding||(Object.create?function(e,t,r,n){if(n===undefined)n=r;var o=Object.getOwnPropertyDescriptor(t,r);if(!o||("get"in o?!t.__esModule:o.writable||o.configurable)){o={enumerable:true,get:function(){return t[r]}}}Object.defineProperty(e,n,o)}:function(e,t,r,n){if(n===undefined)n=r;e[n]=t[r]});var o=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:true,value:t})}:function(e,t){e["default"]=t});var i=this&&this.__importStar||function(){var ownKeys=function(e){ownKeys=Object.getOwnPropertyNames||function(e){var t=[];for(var r in e)if(Object.prototype.hasOwnProperty.call(e,r))t[t.length]=r;return t};return ownKeys(e)};return function(e){if(e&&e.__esModule)return e;var t={};if(e!=null)for(var r=ownKeys(e),i=0;i<r.length;i++)if(r[i]!=="default")n(t,e,r[i]);o(t,e);return t}}();Object.defineProperty(t,"__esModule",{value:true});t.detectCypressVersion=detectCypressVersion;const s=i(r(943));const a=i(r(928));async function detectCypressVersion(e){try{const t=a.join(e||process.cwd(),"package.json");const r=JSON.parse(await s.readFile(t,"utf-8"));const n=r.dependencies?.cypress||r.devDependencies?.cypress;if(n){return n.replace(/^[\^~]/,"")}}catch{}return undefined}},665:function(e,t,r){var n=this&&this.__createBinding||(Object.create?function(e,t,r,n){if(n===undefined)n=r;var o=Object.getOwnPropertyDescriptor(t,r);if(!o||("get"in o?!t.__esModule:o.writable||o.configurable)){o={enumerable:true,get:function(){return t[r]}}}Object.defineProperty(e,n,o)}:function(e,t,r,n){if(n===undefined)n=r;e[n]=t[r]});var o=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:true,value:t})}:function(e,t){e["default"]=t});var i=this&&this.__importStar||function(){var ownKeys=function(e){ownKeys=Object.getOwnPropertyNames||function(e){var t=[];for(var r in e)if(Object.prototype.hasOwnProperty.call(e,r))t[t.length]=r;return t};return ownKeys(e)};return function(e){if(e&&e.__esModule)return e;var t={};if(e!=null)for(var r=ownKeys(e),i=0;i<r.length;i++)if(r[i]!=="default")n(t,e,r[i]);o(t,e);return t}}();Object.defineProperty(t,"__esModule",{value:true});t.TestreamReporter=void 0;const s=i(r(943));const a=i(r(928));const u=r(641);const l=r(10);class TestreamReporter{async waitForReportFile(e,t=6e4,r=250){const n=Date.now();while(Date.now()-n<t){try{await s.access(e);return}catch{await new Promise((e=>setTimeout(e,r)))}}throw new Error(`CTRF report not found at ${e} after ${t}ms`)}constructor(e){this.options=e;if(!e.apiKey||e.apiKey.trim()===""){throw new Error("[TestreamReporter] API key is required. Please provide apiKey in TestreamReporterOptions or set TESTREAM_API_KEY environment variable.")}if(!e.projectKey||e.projectKey.trim()===""){throw new Error("[TestreamReporter] Project key is required. Please provide projectKey in TestreamReporterOptions or set TESTREAM_PROJECT_KEY environment variable.")}const t={};const wrappedOn=(r,n)=>{if(!t[r]){t[r]=[];e.on(r,(async(...e)=>{const n=t[r].map((t=>t(...e)));await Promise.all(n)}))}t[r].push(n)};const r={on:wrappedOn};if(e.outputDir!==undefined)r.outputDir=e.outputDir;if(e.outputFile!==undefined)r.outputFile=e.outputFile;if(e.minimal!==undefined)r.minimal=e.minimal;r.screenshot=e.screenshot??true;if(e.annotations!==undefined)r.annotations=e.annotations;if(e.testType!==undefined)r.testType=e.testType;if(e.appName!==undefined)r.appName=e.appName;if(e.appVersion!==undefined)r.appVersion=e.appVersion;if(e.osPlatform!==undefined)r.osPlatform=e.osPlatform;if(e.osRelease!==undefined)r.osRelease=e.osRelease;if(e.osVersion!==undefined)r.osVersion=e.osVersion;if(e.buildName!==undefined)r.buildName=e.buildName;if(e.buildNumber!==undefined)r.buildNumber=e.buildNumber;if(e.buildUrl!==undefined)r.buildUrl=e.buildUrl;if(e.repositoryName!==undefined)r.repositoryName=e.repositoryName;if(e.repositoryUrl!==undefined)r.repositoryUrl=e.repositoryUrl;if(e.branchName!==undefined)r.branchName=e.branchName;if(e.testEnvironment!==undefined)r.testEnvironment=e.testEnvironment;this.ctrf=new u.GenerateCtrfReport(r);wrappedOn("after:run",(()=>this.uploadResults()))}async uploadResults(){const{uploadEnabled:e=true,failOnUploadError:t=false}=this.options;if(!e){console.log("[TestreamReporter] Upload disabled, skipping upload.");return}try{const e=this.options.outputDir||"ctrf";const r=this.options.outputFile||"ctrf-report.json";const n=a.resolve(e,r);await this.waitForReportFile(n);const o=await s.readFile(n,"utf-8");const i=JSON.parse(o);i.results.tool.name="cypress";i.generatedBy="@testream/cypress-reporter";const u=await(0,l.uploadToApi)({report:i,apiKey:this.options.apiKey,commitSha:this.options.commitSha,branch:this.options.branchName,repositoryUrl:this.options.repositoryUrl,buildNumber:this.options.buildNumber,buildUrl:this.options.buildUrl,testEnvironment:this.options.testEnvironment,appName:this.options.appName,appVersion:this.options.appVersion,testType:this.options.testType||"e2e"});if(!u.success){const e=`Failed to upload test results: ${u.error}`;if(t){throw new Error(e)}else{console.error(`[TestreamReporter] ${e}`)}}}catch(e){const r=e instanceof Error?e.message:String(e);const n=`[TestreamReporter] Error uploading results: ${r}`;if(t){console.error(n);throw e}else{console.error(n)}}}}t.TestreamReporter=TestreamReporter},10:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:true});t.detectGitContext=void 0;t.uploadToApi=uploadToApi;const n=r(322);async function uploadToApi(e){const t=await(0,n.uploadTestRun)({report:e.report,apiKey:e.apiKey,apiUrl:e.apiUrl,commitSha:e.commitSha,branch:e.branch,repositoryUrl:e.repositoryUrl,buildName:e.buildName,buildNumber:e.buildNumber,buildUrl:e.buildUrl,testEnvironment:e.testEnvironment,appName:e.appName,appVersion:e.appVersion,testType:e.testType});if(!t.success||t.alreadyExists){return t}let r=0;if(t.testResults){const o=(0,n.mapAttachmentsToTestResults)(e.report.results.tests,t.testResults);if(o.length>0){r=await(0,n.uploadArtifacts)({reportId:t.reportId,apiKey:e.apiKey,apiUrl:e.apiUrl,testResults:o})}}return{...t,artifactCount:r}}t.detectGitContext=n.detectCIContext},896:e=>{e.exports=require("fs")},943:e=>{e.exports=require("fs/promises")},928:e=>{e.exports=require("path")}};var t={};function __nccwpck_require__(r){var n=t[r];if(n!==undefined){return n.exports}var o=t[r]={exports:{}};var i=true;try{e[r].call(o.exports,o,o.exports,__nccwpck_require__);i=false}finally{if(i)delete t[r]}return o.exports}(()=>{var e=Object.getPrototypeOf?e=>Object.getPrototypeOf(e):e=>e.__proto__;var t;__nccwpck_require__.t=function(r,n){if(n&1)r=this(r);if(n&8)return r;if(typeof r==="object"&&r){if(n&4&&r.__esModule)return r;if(n&16&&typeof r.then==="function")return r}var o=Object.create(null);__nccwpck_require__.r(o);var i={};t=t||[null,e({}),e([]),e(e)];for(var s=n&2&&r;typeof s=="object"&&!~t.indexOf(s);s=e(s)){Object.getOwnPropertyNames(s).forEach((e=>i[e]=()=>r[e]))}i["default"]=()=>r;__nccwpck_require__.d(o,i);return o}})();(()=>{__nccwpck_require__.d=(e,t)=>{for(var r in t){if(__nccwpck_require__.o(t,r)&&!__nccwpck_require__.o(e,r)){Object.defineProperty(e,r,{enumerable:true,get:t[r]})}}}})();(()=>{__nccwpck_require__.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t)})();(()=>{__nccwpck_require__.r=e=>{if(typeof Symbol!=="undefined"&&Symbol.toStringTag){Object.defineProperty(e,Symbol.toStringTag,{value:"Module"})}Object.defineProperty(e,"__esModule",{value:true})}})();if(typeof __nccwpck_require__!=="undefined")__nccwpck_require__.ab=__dirname+"/";var r={};(()=>{var e=r;Object.defineProperty(e,"__esModule",{value:true});e.detectGitContext=e.uploadToApi=e.detectCypressVersion=e.TestreamReporter=void 0;var t=__nccwpck_require__(665);Object.defineProperty(e,"TestreamReporter",{enumerable:true,get:function(){return t.TestreamReporter}});var n=__nccwpck_require__(481);Object.defineProperty(e,"detectCypressVersion",{enumerable:true,get:function(){return n.detectCypressVersion}});var o=__nccwpck_require__(10);Object.defineProperty(e,"uploadToApi",{enumerable:true,get:function(){return o.uploadToApi}});var i=__nccwpck_require__(322);Object.defineProperty(e,"detectGitContext",{enumerable:true,get:function(){return i.detectCIContext}})})();module.exports=r})();
1
+ (()=>{"use strict";var e={301:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:true});t.GenerateCtrfReport=void 0;const n=r(896);const o=r(928);class GenerateCtrfReport{constructor(e){var t,r,o,i,s,a,u,l,d,p,c,f,m,h,y,_,b,v,R,T;this.reporterName="cypress-ctrf-json-reporter";this.defaultOutputFile="ctrf-report.json";this.defaultOutputDir="ctrf";this.runStart=0;this.runStop=0;this.filename=this.defaultOutputFile;this.browser="";this.reporterConfigOptions={on:e.on,outputFile:(t=e===null||e===void 0?void 0:e.outputFile)!==null&&t!==void 0?t:this.defaultOutputFile,outputDir:(r=e===null||e===void 0?void 0:e.outputDir)!==null&&r!==void 0?r:this.defaultOutputDir,minimal:(o=e===null||e===void 0?void 0:e.minimal)!==null&&o!==void 0?o:false,screenshot:(i=e===null||e===void 0?void 0:e.screenshot)!==null&&i!==void 0?i:false,testType:(s=e===null||e===void 0?void 0:e.testType)!==null&&s!==void 0?s:"e2e",appName:(a=e===null||e===void 0?void 0:e.appName)!==null&&a!==void 0?a:undefined,appVersion:(u=e===null||e===void 0?void 0:e.appVersion)!==null&&u!==void 0?u:undefined,osPlatform:(l=e===null||e===void 0?void 0:e.osPlatform)!==null&&l!==void 0?l:undefined,osRelease:(d=e===null||e===void 0?void 0:e.osRelease)!==null&&d!==void 0?d:undefined,osVersion:(p=e===null||e===void 0?void 0:e.osVersion)!==null&&p!==void 0?p:undefined,buildName:(c=e===null||e===void 0?void 0:e.buildName)!==null&&c!==void 0?c:undefined,buildNumber:(f=e===null||e===void 0?void 0:e.buildNumber)!==null&&f!==void 0?f:undefined,buildUrl:(m=e===null||e===void 0?void 0:e.buildUrl)!==null&&m!==void 0?m:undefined,repositoryName:(h=e===null||e===void 0?void 0:e.repositoryName)!==null&&h!==void 0?h:undefined,repositoryUrl:(y=e===null||e===void 0?void 0:e.repositoryUrl)!==null&&y!==void 0?y:undefined,branchName:(_=e===null||e===void 0?void 0:e.branchName)!==null&&_!==void 0?_:undefined,testEnvironment:(b=e===null||e===void 0?void 0:e.testEnvironment)!==null&&b!==void 0?b:undefined};this.ctrfReport={results:{tool:{name:"cypress"},summary:{tests:0,passed:0,failed:0,pending:0,skipped:0,other:0,start:0,stop:0},tests:[]}};this.validateOptions();if(this.reporterConfigOptions.outputFile!==undefined)this.setFilename(this.reporterConfigOptions.outputFile);this.ctrfEnvironment={};if(((v=this.reporterConfigOptions)===null||v===void 0?void 0:v.outputFile)!==undefined)this.setFilename(this.reporterConfigOptions.outputFile);if(!n.existsSync((R=this.reporterConfigOptions.outputDir)!==null&&R!==void 0?R:this.defaultOutputDir)){n.mkdirSync((T=this.reporterConfigOptions.outputDir)!==null&&T!==void 0?T:this.defaultOutputDir,{recursive:true})}this.setEventHandlers()}setFilename(e){if(e.endsWith(".json")){this.filename=e}else{this.filename=`${e}.json`}}validateOptions(){if(this.reporterConfigOptions.on===false){throw new Error("Missing required option: on")}}setEventHandlers(){this.reporterConfigOptions.on("before:run",(e=>{var t;this.runStart=Date.now();this.browser=`${e.browser.name} ${e.browser.version}`;this.setEnvironmentDetails((t=this.reporterConfigOptions)!==null&&t!==void 0?t:{});if(this.hasEnvironmentDetails(this.ctrfEnvironment)){this.ctrfReport.results.environment=this.ctrfEnvironment}}));this.reporterConfigOptions.on("after:spec",((e,t)=>{this.updateCtrfResultsFromAfterSpecResults(t)}));this.reporterConfigOptions.on("after:run",(e=>{this.runStop=Date.now();this.updateCtrfTotalsFromAfterRun(e);this.writeReportToFile(this.ctrfReport)}))}updateCtrfResultsFromAfterSpecResults(e){e.tests.forEach((t=>{var r,n,o,i,s,a;const u=(r=t.attempts)===null||r===void 0?void 0:r[t.attempts.length-1];const l=typeof t.duration==="number"?t.duration:(n=u===null||u===void 0?void 0:u.wallClockDuration)!==null&&n!==void 0?n:0;const d=(i=(o=t.attempts)===null||o===void 0?void 0:o.length)!==null&&i!==void 0?i:0;const p=t.state==="passed"&&d>1;const c={name:t.title.join(" "),status:t.state,duration:l};if(this.reporterConfigOptions.minimal===false){if(t.state==="failed"){const e=this.extractFailureDetails(t,u);c.message=e.message;c.trace=e.trace}c.rawStatus=t.state;c.type=(s=this.reporterConfigOptions.testType)!==null&&s!==void 0?s:"e2e";c.filePath=(a=e.spec)===null||a===void 0?void 0:a.relative;c.retries=d-1;c.flaky=p;c.browser=this.browser;const r=this.getScreenshot(t,e,false);if(r!==undefined&&typeof r==="string"){c.screenshot=r}}const f=this.getAttachments(t,e);if(f.length>0){if(c.attachments!==undefined){c.attachments=[...c.attachments,...f]}else{c.attachments=f}}this.ctrfReport.results.tests.push(c)}))}updateCtrfTotalsFromAfterRun(e){this.ctrfReport.results.summary={tests:e.totalTests,failed:e.totalFailed,passed:e.totalPassed,skipped:e.totalSkipped,pending:e.totalPending,other:0,start:this.runStart,stop:this.runStop}}setEnvironmentDetails(e){if(e.appName!==undefined){this.ctrfEnvironment.appName=e.appName}if(e.appVersion!==undefined){this.ctrfEnvironment.appVersion=e.appVersion}if(e.osPlatform!==undefined){this.ctrfEnvironment.osPlatform=e.osPlatform}if(e.osRelease!==undefined){this.ctrfEnvironment.osRelease=e.osRelease}if(e.osVersion!==undefined){this.ctrfEnvironment.osVersion=e.osVersion}if(e.buildName!==undefined){this.ctrfEnvironment.buildName=e.buildName}if(e.buildNumber!==undefined){this.ctrfEnvironment.buildNumber=e.buildNumber}if(e.buildUrl!==undefined){this.ctrfEnvironment.buildUrl=e.buildUrl}if(e.repositoryName!==undefined){this.ctrfEnvironment.repositoryName=e.repositoryName}if(e.repositoryUrl!==undefined){this.ctrfEnvironment.repositoryUrl=e.repositoryUrl}if(e.branchName!==undefined){this.ctrfEnvironment.branchName=e.branchName}if(e.testEnvironment!==undefined){this.ctrfEnvironment.testEnvironment=e.testEnvironment}}hasEnvironmentDetails(e){return Object.keys(e).length>0}extractFailureDetails(e,t){const r={};if((t===null||t===void 0?void 0:t.error)!==undefined&&(t===null||t===void 0?void 0:t.error)!==null&&"message"in t.error&&"stack"in t.error){r.message=t.error.message;r.trace=t.error.stack}else if(typeof e.displayError==="string"&&e.displayError.trim().length>0){r.message=e.displayError;r.trace=e.displayError}return r}getScreenshot(e,t,r=false){if(this.reporterConfigOptions.screenshot===false&&!r){return undefined}if(t.screenshots===undefined||t.screenshots.length===0){return undefined}const o=t.screenshots.filter((t=>t.path!==undefined&&t.path!==""&&t.path.includes(e.title.join(" -- "))));if(o.length===0){return undefined}if(r){return o.map((e=>({name:"screenshot",contentType:"image/png",path:e.path})))}let i=o.find((e=>e.path.includes("(failed)")));if(i===undefined&&o.length>0){i=o[o.length-1]}if(i!==undefined){try{const e=n.readFileSync(i.path,{encoding:"base64"});return e}catch(e){console.warn(`Error reading screenshot file ${i.path}:`,e);return undefined}}return undefined}getAttachments(e,t){const r=[];if(t.screenshots!==undefined&&t.screenshots.length>0){try{const n=this.getScreenshot(e,t,true);if(n!==undefined&&Array.isArray(n)){r.push(...n)}}catch(e){console.error("Error processing screenshot attachments:",e)}}if(t.video!==undefined&&t.video!==null&&t.video.trim()!==""){try{if(n.existsSync(t.video)){r.push({name:"video",contentType:"video/mp4",path:t.video})}else{console.warn(`Video file not found: ${t.video}`)}}catch(e){console.warn("Error processing video attachment:",e)}}return r}writeReportToFile(e){var t,r;const i=o.join((t=this.reporterConfigOptions.outputDir)!==null&&t!==void 0?t:this.defaultOutputDir,(r=this.reporterConfigOptions.outputFile)!==null&&r!==void 0?r:this.defaultOutputFile);const s=JSON.stringify(e,null,2);try{n.writeFileSync(i,s+"\n");console.log(`${this.reporterName}: successfully written ctrf json to %s/%s`,this.reporterConfigOptions.outputDir,this.reporterConfigOptions.outputFile)}catch(e){console.error(`Error writing ctrf json report:, ${String(e)}`)}}}t.GenerateCtrfReport=GenerateCtrfReport},641:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:true});t.GenerateCtrfReport=void 0;var n=r(301);Object.defineProperty(t,"GenerateCtrfReport",{enumerable:true,get:function(){return n.GenerateCtrfReport}})},406:(e,t)=>{Object.defineProperty(t,"__esModule",{value:true});t.detectCIContext=detectCIContext;function detectCIContext(){const e=process.env;if(e.GITHUB_ACTIONS==="true"){return{branch:e.GITHUB_HEAD_REF||e.GITHUB_REF_NAME||e.GITHUB_REF?.replace("refs/heads/",""),commitSha:e.GITHUB_SHA,repositoryUrl:e.GITHUB_SERVER_URL&&e.GITHUB_REPOSITORY?`${e.GITHUB_SERVER_URL}/${e.GITHUB_REPOSITORY}`:undefined,buildNumber:e.GITHUB_RUN_NUMBER,buildUrl:e.GITHUB_SERVER_URL&&e.GITHUB_REPOSITORY&&e.GITHUB_RUN_ID?`${e.GITHUB_SERVER_URL}/${e.GITHUB_REPOSITORY}/actions/runs/${e.GITHUB_RUN_ID}`:undefined}}if(e.GITLAB_CI==="true"){return{branch:e.CI_COMMIT_BRANCH||e.CI_MERGE_REQUEST_SOURCE_BRANCH_NAME,commitSha:e.CI_COMMIT_SHA,repositoryUrl:e.CI_PROJECT_URL,buildNumber:e.CI_PIPELINE_IID,buildUrl:e.CI_PIPELINE_URL}}if(e.TF_BUILD==="True"){return{branch:e.BUILD_SOURCEBRANCH?.replace("refs/heads/",""),commitSha:e.BUILD_SOURCEVERSION,repositoryUrl:e.BUILD_REPOSITORY_URI,buildNumber:e.BUILD_BUILDNUMBER,buildUrl:e.SYSTEM_TEAMFOUNDATIONCOLLECTIONURI&&e.SYSTEM_TEAMPROJECT&&e.BUILD_BUILDID?`${e.SYSTEM_TEAMFOUNDATIONCOLLECTIONURI}${e.SYSTEM_TEAMPROJECT}/_build/results?buildId=${e.BUILD_BUILDID}`:undefined}}if(e.CIRCLECI==="true"){return{branch:e.CIRCLE_BRANCH,commitSha:e.CIRCLE_SHA1,repositoryUrl:e.CIRCLE_REPOSITORY_URL,buildNumber:e.CIRCLE_BUILD_NUM,buildUrl:e.CIRCLE_BUILD_URL}}if(e.JENKINS_URL){return{branch:e.GIT_BRANCH?.replace("origin/",""),commitSha:e.GIT_COMMIT,repositoryUrl:e.GIT_URL,buildNumber:e.BUILD_NUMBER,buildUrl:e.BUILD_URL}}if(e.BITBUCKET_BUILD_NUMBER){return{branch:e.BITBUCKET_BRANCH,commitSha:e.BITBUCKET_COMMIT,repositoryUrl:e.BITBUCKET_GIT_HTTP_ORIGIN,buildNumber:e.BITBUCKET_BUILD_NUMBER,buildUrl:e.BITBUCKET_REPO_FULL_NAME&&e.BITBUCKET_BUILD_NUMBER?`https://bitbucket.org/${e.BITBUCKET_REPO_FULL_NAME}/pipelines/results/${e.BITBUCKET_BUILD_NUMBER}`:undefined}}return{}}},827:(e,t)=>{Object.defineProperty(t,"__esModule",{value:true})},322:function(e,t,r){var n=this&&this.__createBinding||(Object.create?function(e,t,r,n){if(n===undefined)n=r;var o=Object.getOwnPropertyDescriptor(t,r);if(!o||("get"in o?!t.__esModule:o.writable||o.configurable)){o={enumerable:true,get:function(){return t[r]}}}Object.defineProperty(e,n,o)}:function(e,t,r,n){if(n===undefined)n=r;e[n]=t[r]});var o=this&&this.__exportStar||function(e,t){for(var r in e)if(r!=="default"&&!Object.prototype.hasOwnProperty.call(t,r))n(t,e,r)};Object.defineProperty(t,"__esModule",{value:true});t.ensureReportId=t.mapAttachmentsToTestResults=t.uploadArtifacts=t.uploadTestRun=t.detectCIContext=void 0;o(r(827),t);var i=r(406);Object.defineProperty(t,"detectCIContext",{enumerable:true,get:function(){return i.detectCIContext}});var s=r(969);Object.defineProperty(t,"uploadTestRun",{enumerable:true,get:function(){return s.uploadTestRun}});Object.defineProperty(t,"uploadArtifacts",{enumerable:true,get:function(){return s.uploadArtifacts}});Object.defineProperty(t,"mapAttachmentsToTestResults",{enumerable:true,get:function(){return s.mapAttachmentsToTestResults}});Object.defineProperty(t,"ensureReportId",{enumerable:true,get:function(){return s.ensureReportId}})},969:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:true});t.ensureReportId=ensureReportId;t.uploadTestRun=uploadTestRun;t.mapAttachmentsToTestResults=mapAttachmentsToTestResults;t.uploadArtifacts=uploadArtifacts;const n=r(406);const o="https://test-manager-backend.fly.dev";function ensureReportId(e){if(typeof e.reportId==="string"&&e.reportId.trim().length>0){return e.reportId}const t=crypto.randomUUID();e.reportId=t;return t}function resolveApiUrl(e){const t=normalizeApiUrl(e);if(t){return t}const r=getEnvApiUrl();if(r){return r}return o}function getEnvApiUrl(){if(typeof process==="undefined"||!process?.env){return undefined}return normalizeApiUrl(process.env.TESTREAM_API_URL)}function normalizeApiUrl(e){if(!e){return undefined}const t=e.trim();if(!t){return undefined}return t.replace(/\/+$/,"")}function isReportAlreadyExistsConflict(e){return e.errorCode==="report_already_exists"}function formatUploadError(e){const t=e.detail||e.title||e.rawBody||"Unknown error";const r=e.errorCode?`, code=${e.errorCode}`:"";return`Upload failed (HTTP ${e.statusCode}${r}): ${t}`}async function parseHttpError(e){const t=await e.text();const r=e.headers.get("content-type")||"";if(r.toLowerCase().includes("json")&&t.trim().length>0){try{const r=JSON.parse(t);return{statusCode:e.status,title:r.title,detail:r.detail||r.details||r.error,errorCode:r.errorCode,rawBody:t}}catch{}}return{statusCode:e.status,rawBody:t}}function resolveUploadContext(e){const t=(0,n.detectCIContext)();return{commitSha:e.commitSha??t.commitSha,branch:e.branch??t.branch,repositoryUrl:e.repositoryUrl??t.repositoryUrl,buildName:e.buildName,buildNumber:e.buildNumber??t.buildNumber,buildUrl:e.buildUrl??t.buildUrl,testEnvironment:e.testEnvironment,appName:e.appName,appVersion:e.appVersion,testType:e.testType}}async function uploadTestRun(e){const{report:t,apiKey:r}=e;const n=resolveApiUrl(e.apiUrl);const o=ensureReportId(t);const i=resolveUploadContext(e);const s={report:t,reportId:o,...i};console.log("Uploading test results...");let a;try{a=await fetch(`${n}/api/v1/ingest`,{method:"POST",headers:{"X-API-KEY":r,"Content-Type":"application/json"},body:JSON.stringify(s)})}catch(e){const t=e instanceof Error?e.message:String(e);const r=`Connection failed: ${t}`;console.error(r);return{success:false,reportId:o,error:r}}if(!a.ok){const e=await parseHttpError(a);if(a.status===409&&isReportAlreadyExistsConflict(e)){console.warn("Report already exists (workflow may have been re-run)");return{success:true,reportId:o,summary:{passed:t.results.summary.passed,failed:t.results.summary.failed,skipped:t.results.summary.skipped,total:t.results.summary.tests},alreadyExists:true,statusCode:e.statusCode,errorCode:e.errorCode}}const r=formatUploadError(e);console.error(r);return{success:false,reportId:o,error:r,statusCode:e.statusCode,errorCode:e.errorCode,errorDetail:e.detail||e.rawBody}}const u=await a.json();console.log(`✓ Test results uploaded successfully`);console.log(` Report ID: ${u.reportId}`);console.log(` Test Run ID: ${u.testRunId}`);console.log(` Tests: ${u.summary.passed}/${u.summary.total} passed`);return{success:true,reportId:u.reportId,testRunId:u.testRunId,summary:{passed:u.summary.passed,failed:u.summary.failed,skipped:u.summary.skipped,total:u.summary.total},testResults:u.testResults}}function mapAttachmentsToTestResults(e,t){const r=new Map;for(const e of t){const t=r.get(e.name)??[];t.push(e.id);r.set(e.name,t)}const n=[];for(const t of e){const e=r.get(t.name);const o=e?.shift();if(!t.attachments||t.attachments.length===0){continue}if(!o){console.warn(`Skipping artifact upload: could not match test result for "${t.name}"`);continue}n.push({testResultId:o,attachments:t.attachments})}return n}async function uploadArtifacts(e){const{reportId:t,apiKey:r,testResults:n}=e;const o=resolveApiUrl(e.apiUrl);let i=0;for(const e of n){for(const n of e.attachments){try{const s=await uploadSingleArtifact({testResultId:e.testResultId,attachment:n,reportId:t,apiKey:r,apiUrl:o});if(s)i++}catch(e){const t=e instanceof Error?e.message:String(e);console.error(`Failed to upload artifact ${n.name}: ${t}`)}}}if(i>0){console.log(`✓ Uploaded ${i} artifact(s)`)}return i}async function uploadSingleArtifact(e){const{testResultId:t,attachment:n,reportId:o,apiKey:i,apiUrl:s}=e;const a=await Promise.resolve().then(r.t.bind(r,943,23));const u=await Promise.resolve().then(r.t.bind(r,928,23));const l=u.resolve(n.path);try{await a.access(l)}catch{console.warn(`Artifact not found: ${u.basename(l)}`);return false}let d;let p;const c=u.basename(l);const f=n.contentType||"application/octet-stream";try{d=await a.readFile(l);p=d.byteLength}catch(e){const t=e instanceof Error?e.message:String(e);throw new Error(`Failed to read file: ${t}`)}try{return await uploadWithPresignedUrl({testResultId:t,reportId:o,apiKey:i,apiUrl:s,attachmentName:n.name,fileName:c,contentType:f,sizeBytes:p,fileBuffer:d})}catch(e){if(!(e instanceof LegacyUploadRequiredError)){throw e}return await uploadWithLegacyEndpoint({testResultId:t,attachmentName:n.name,reportId:o,apiKey:i,apiUrl:s,fileName:c,contentType:f,fileBuffer:d})}}class LegacyUploadRequiredError extends Error{constructor(){super("Legacy upload endpoint required")}}async function uploadWithPresignedUrl(e){const{testResultId:t,reportId:r,apiKey:n,apiUrl:o,attachmentName:i,fileName:s,contentType:a,sizeBytes:u,fileBuffer:l}=e;const d={testResultId:t,ctrfAttachmentName:i,fileName:s,contentType:a,sizeBytes:u};const p=await fetch(`${o}/api/v1/artifacts/${r}/upload-url`,{method:"POST",headers:{"X-API-KEY":n,"Content-Type":"application/json"},body:JSON.stringify(d)});if(shouldFallbackToLegacyUpload(p.status)){throw new LegacyUploadRequiredError}if(!p.ok){const e=await p.text();throw new Error(`Failed to create direct upload URL (HTTP ${p.status}): ${e}`)}const c=await p.json();const f={...c.requiredHeaders??{}};if(!hasHeaderIgnoreCase(f,"Content-Type")){f["Content-Type"]=a}const m=await fetch(c.uploadUrl,{method:"PUT",headers:f,body:l});if(!m.ok){const e=await m.text();throw new Error(`Direct artifact upload failed (HTTP ${m.status}): ${e}`)}const h={testResultId:t,ctrfAttachmentName:i,fileName:s,contentType:a,sizeBytes:u,storageKey:c.storageKey};const y=await fetch(`${o}/api/v1/artifacts/${r}/complete`,{method:"POST",headers:{"X-API-KEY":n,"Content-Type":"application/json"},body:JSON.stringify(h)});if(!y.ok){const e=await y.text();throw new Error(`Failed to finalize artifact upload (HTTP ${y.status}): ${e}`)}return true}async function uploadWithLegacyEndpoint(e){const{testResultId:t,attachmentName:r,reportId:n,apiKey:o,apiUrl:i,fileName:s,contentType:a,fileBuffer:u}=e;const l=new Blob([new Uint8Array(u)],{type:a});const d=new FormData;d.append("testResultId",t);d.append("ctrfAttachmentName",r);d.append("file",l,s);const p=await fetch(`${i}/api/v1/artifacts/${n}`,{method:"POST",headers:{"X-API-KEY":o},body:d});if(!p.ok){const e=await p.text();throw new Error(`Legacy artifact upload failed (HTTP ${p.status}): ${e}`)}return true}function shouldFallbackToLegacyUpload(e){return e===404||e===405||e===501}function hasHeaderIgnoreCase(e,t){const r=t.toLowerCase();return Object.keys(e).some((e=>e.toLowerCase()===r))}},481:function(e,t,r){var n=this&&this.__createBinding||(Object.create?function(e,t,r,n){if(n===undefined)n=r;var o=Object.getOwnPropertyDescriptor(t,r);if(!o||("get"in o?!t.__esModule:o.writable||o.configurable)){o={enumerable:true,get:function(){return t[r]}}}Object.defineProperty(e,n,o)}:function(e,t,r,n){if(n===undefined)n=r;e[n]=t[r]});var o=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:true,value:t})}:function(e,t){e["default"]=t});var i=this&&this.__importStar||function(){var ownKeys=function(e){ownKeys=Object.getOwnPropertyNames||function(e){var t=[];for(var r in e)if(Object.prototype.hasOwnProperty.call(e,r))t[t.length]=r;return t};return ownKeys(e)};return function(e){if(e&&e.__esModule)return e;var t={};if(e!=null)for(var r=ownKeys(e),i=0;i<r.length;i++)if(r[i]!=="default")n(t,e,r[i]);o(t,e);return t}}();Object.defineProperty(t,"__esModule",{value:true});t.detectCypressVersion=detectCypressVersion;const s=i(r(943));const a=i(r(928));async function detectCypressVersion(e){try{const t=a.join(e||process.cwd(),"package.json");const r=JSON.parse(await s.readFile(t,"utf-8"));const n=r.dependencies?.cypress||r.devDependencies?.cypress;if(n){return n.replace(/^[\^~]/,"")}}catch{}return undefined}},665:function(e,t,r){var n=this&&this.__createBinding||(Object.create?function(e,t,r,n){if(n===undefined)n=r;var o=Object.getOwnPropertyDescriptor(t,r);if(!o||("get"in o?!t.__esModule:o.writable||o.configurable)){o={enumerable:true,get:function(){return t[r]}}}Object.defineProperty(e,n,o)}:function(e,t,r,n){if(n===undefined)n=r;e[n]=t[r]});var o=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:true,value:t})}:function(e,t){e["default"]=t});var i=this&&this.__importStar||function(){var ownKeys=function(e){ownKeys=Object.getOwnPropertyNames||function(e){var t=[];for(var r in e)if(Object.prototype.hasOwnProperty.call(e,r))t[t.length]=r;return t};return ownKeys(e)};return function(e){if(e&&e.__esModule)return e;var t={};if(e!=null)for(var r=ownKeys(e),i=0;i<r.length;i++)if(r[i]!=="default")n(t,e,r[i]);o(t,e);return t}}();Object.defineProperty(t,"__esModule",{value:true});t.TestreamReporter=void 0;const s=i(r(943));const a=i(r(928));const u=r(641);const l=r(10);class TestreamReporter{async waitForReportFile(e,t=6e4,r=250){const n=Date.now();while(Date.now()-n<t){try{await s.access(e);return}catch{await new Promise((e=>setTimeout(e,r)))}}throw new Error(`CTRF report not found at ${e} after ${t}ms`)}constructor(e){this.options=e;if(!e.apiKey||e.apiKey.trim()===""){throw new Error("[TestreamReporter] API key is required. Please provide apiKey in TestreamReporterOptions or set TESTREAM_API_KEY environment variable.")}const t={};const wrappedOn=(r,n)=>{if(!t[r]){t[r]=[];e.on(r,(async(...e)=>{const n=t[r].map((t=>t(...e)));await Promise.all(n)}))}t[r].push(n)};const r={on:wrappedOn};if(e.outputDir!==undefined)r.outputDir=e.outputDir;if(e.outputFile!==undefined)r.outputFile=e.outputFile;if(e.minimal!==undefined)r.minimal=e.minimal;r.screenshot=e.screenshot??true;if(e.annotations!==undefined)r.annotations=e.annotations;if(e.testType!==undefined)r.testType=e.testType;if(e.appName!==undefined)r.appName=e.appName;if(e.appVersion!==undefined)r.appVersion=e.appVersion;if(e.osPlatform!==undefined)r.osPlatform=e.osPlatform;if(e.osRelease!==undefined)r.osRelease=e.osRelease;if(e.osVersion!==undefined)r.osVersion=e.osVersion;if(e.buildName!==undefined)r.buildName=e.buildName;if(e.buildNumber!==undefined)r.buildNumber=e.buildNumber;if(e.buildUrl!==undefined)r.buildUrl=e.buildUrl;if(e.repositoryName!==undefined)r.repositoryName=e.repositoryName;if(e.repositoryUrl!==undefined)r.repositoryUrl=e.repositoryUrl;if(e.branchName!==undefined)r.branchName=e.branchName;if(e.testEnvironment!==undefined)r.testEnvironment=e.testEnvironment;this.ctrf=new u.GenerateCtrfReport(r);wrappedOn("after:run",(()=>this.uploadResults()))}async uploadResults(){const{uploadEnabled:e=true,failOnUploadError:t=false}=this.options;if(!e){console.log("[TestreamReporter] Upload disabled, skipping upload.");return}try{const e=this.options.outputDir||"ctrf";const r=this.options.outputFile||"ctrf-report.json";const n=a.resolve(e,r);await this.waitForReportFile(n);const o=await s.readFile(n,"utf-8");const i=JSON.parse(o);i.results.tool.name="cypress";i.generatedBy="@testream/cypress-reporter";const u=await(0,l.uploadToApi)({report:i,apiKey:this.options.apiKey,commitSha:this.options.commitSha,branch:this.options.branchName,repositoryUrl:this.options.repositoryUrl,buildNumber:this.options.buildNumber,buildUrl:this.options.buildUrl,testEnvironment:this.options.testEnvironment,appName:this.options.appName,appVersion:this.options.appVersion,testType:this.options.testType||"e2e"});if(!u.success){const e=`Failed to upload test results: ${u.error}`;if(t){throw new Error(e)}else{console.error(`[TestreamReporter] ${e}`)}}}catch(e){const r=e instanceof Error?e.message:String(e);const n=`[TestreamReporter] Error uploading results: ${r}`;if(t){console.error(n);throw e}else{console.error(n)}}}}t.TestreamReporter=TestreamReporter},10:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:true});t.detectGitContext=void 0;t.uploadToApi=uploadToApi;const n=r(322);async function uploadToApi(e){const t=await(0,n.uploadTestRun)({report:e.report,apiKey:e.apiKey,apiUrl:e.apiUrl,commitSha:e.commitSha,branch:e.branch,repositoryUrl:e.repositoryUrl,buildName:e.buildName,buildNumber:e.buildNumber,buildUrl:e.buildUrl,testEnvironment:e.testEnvironment,appName:e.appName,appVersion:e.appVersion,testType:e.testType});if(!t.success||t.alreadyExists){return t}let r=0;if(t.testResults){const o=(0,n.mapAttachmentsToTestResults)(e.report.results.tests,t.testResults);if(o.length>0){r=await(0,n.uploadArtifacts)({reportId:t.reportId,apiKey:e.apiKey,apiUrl:e.apiUrl,testResults:o})}}return{...t,artifactCount:r}}t.detectGitContext=n.detectCIContext},896:e=>{e.exports=require("fs")},943:e=>{e.exports=require("fs/promises")},928:e=>{e.exports=require("path")}};var t={};function __nccwpck_require__(r){var n=t[r];if(n!==undefined){return n.exports}var o=t[r]={exports:{}};var i=true;try{e[r].call(o.exports,o,o.exports,__nccwpck_require__);i=false}finally{if(i)delete t[r]}return o.exports}(()=>{var e=Object.getPrototypeOf?e=>Object.getPrototypeOf(e):e=>e.__proto__;var t;__nccwpck_require__.t=function(r,n){if(n&1)r=this(r);if(n&8)return r;if(typeof r==="object"&&r){if(n&4&&r.__esModule)return r;if(n&16&&typeof r.then==="function")return r}var o=Object.create(null);__nccwpck_require__.r(o);var i={};t=t||[null,e({}),e([]),e(e)];for(var s=n&2&&r;typeof s=="object"&&!~t.indexOf(s);s=e(s)){Object.getOwnPropertyNames(s).forEach((e=>i[e]=()=>r[e]))}i["default"]=()=>r;__nccwpck_require__.d(o,i);return o}})();(()=>{__nccwpck_require__.d=(e,t)=>{for(var r in t){if(__nccwpck_require__.o(t,r)&&!__nccwpck_require__.o(e,r)){Object.defineProperty(e,r,{enumerable:true,get:t[r]})}}}})();(()=>{__nccwpck_require__.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t)})();(()=>{__nccwpck_require__.r=e=>{if(typeof Symbol!=="undefined"&&Symbol.toStringTag){Object.defineProperty(e,Symbol.toStringTag,{value:"Module"})}Object.defineProperty(e,"__esModule",{value:true})}})();if(typeof __nccwpck_require__!=="undefined")__nccwpck_require__.ab=__dirname+"/";var r={};(()=>{var e=r;Object.defineProperty(e,"__esModule",{value:true});e.detectGitContext=e.uploadToApi=e.detectCypressVersion=e.TestreamReporter=void 0;var t=__nccwpck_require__(665);Object.defineProperty(e,"TestreamReporter",{enumerable:true,get:function(){return t.TestreamReporter}});var n=__nccwpck_require__(481);Object.defineProperty(e,"detectCypressVersion",{enumerable:true,get:function(){return n.detectCypressVersion}});var o=__nccwpck_require__(10);Object.defineProperty(e,"uploadToApi",{enumerable:true,get:function(){return o.uploadToApi}});var i=__nccwpck_require__(322);Object.defineProperty(e,"detectGitContext",{enumerable:true,get:function(){return i.detectCIContext}})})();module.exports=r})();
@@ -15,11 +15,6 @@ export interface TestreamReporterOptions {
15
15
  * @required
16
16
  */
17
17
  apiKey: string;
18
- /**
19
- * Project key to associate test results with
20
- * @required
21
- */
22
- projectKey: string;
23
18
  /**
24
19
  * Git commit SHA (auto-detected from environment if not provided)
25
20
  */
@@ -88,7 +83,6 @@ export interface TestreamReporterOptions {
88
83
  * new TestreamReporter({
89
84
  * on,
90
85
  * apiKey: 'your-api-key',
91
- * projectKey: 'YOUR_PROJECT',
92
86
  * uploadEnabled: true,
93
87
  * });
94
88
  * },
@@ -1 +1 @@
1
- {"version":3,"file":"reporter.d.ts","sourceRoot":"","sources":["../src/reporter.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AASH,KAAK,mBAAmB,GAAG,GAAG,CAAC;AAE/B;;GAEG;AACH,MAAM,WAAW,uBAAuB;IACtC,iFAAiF;IACjF,EAAE,EAAE,mBAAmB,CAAC;IAExB;;;OAGG;IACH,MAAM,EAAE,MAAM,CAAC;IAEf;;;OAGG;IACH,UAAU,EAAE,MAAM,CAAC;IAEnB;;OAEG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB;;;OAGG;IACH,aAAa,CAAC,EAAE,OAAO,CAAC;IAExB;;;OAGG;IACH,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAG5B,oDAAoD;IACpD,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,6CAA6C;IAC7C,SAAS,CAAC,EAAE,MAAM,CAAC;IAGnB,gDAAgD;IAChD,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,6EAA6E;IAC7E,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB;;;OAGG;IACH,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,qDAAqD;IACrD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAGlB,yCAAyC;IACzC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,4CAA4C;IAC5C,UAAU,CAAC,EAAE,MAAM,CAAC;IAGpB,uDAAuD;IACvD,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,yBAAyB;IACzB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,iBAAiB;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IAGnB,iBAAiB;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,mBAAmB;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,gBAAgB;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAGlB,sBAAsB;IACtB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,qBAAqB;IACrB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,kBAAkB;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IAGpB,uDAAuD;IACvD,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,OAAO,CAA0B;IACzC,OAAO,CAAC,IAAI,CAAqB;YAEnB,iBAAiB;gBAenB,OAAO,EAAE,uBAAuB;IAqE5C;;OAEG;YACW,aAAa;CA4D5B"}
1
+ {"version":3,"file":"reporter.d.ts","sourceRoot":"","sources":["../src/reporter.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AASH,KAAK,mBAAmB,GAAG,GAAG,CAAC;AAE/B;;GAEG;AACH,MAAM,WAAW,uBAAuB;IACtC,iFAAiF;IACjF,EAAE,EAAE,mBAAmB,CAAC;IAExB;;;OAGG;IACH,MAAM,EAAE,MAAM,CAAC;IAEf;;OAEG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB;;;OAGG;IACH,aAAa,CAAC,EAAE,OAAO,CAAC;IAExB;;;OAGG;IACH,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAG5B,oDAAoD;IACpD,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,6CAA6C;IAC7C,SAAS,CAAC,EAAE,MAAM,CAAC;IAGnB,gDAAgD;IAChD,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,6EAA6E;IAC7E,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB;;;OAGG;IACH,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,qDAAqD;IACrD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAGlB,yCAAyC;IACzC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,4CAA4C;IAC5C,UAAU,CAAC,EAAE,MAAM,CAAC;IAGpB,uDAAuD;IACvD,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,yBAAyB;IACzB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,iBAAiB;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IAGnB,iBAAiB;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,mBAAmB;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,gBAAgB;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAGlB,sBAAsB;IACtB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,qBAAqB;IACrB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,kBAAkB;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IAGpB,uDAAuD;IACvD,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,OAAO,CAA0B;IACzC,OAAO,CAAC,IAAI,CAAqB;YAEnB,iBAAiB;gBAenB,OAAO,EAAE,uBAAuB;IAiE5C;;OAEG;YACW,aAAa;CA4D5B"}
package/dist/types.d.ts CHANGED
@@ -46,11 +46,6 @@ export interface CypressReporterConfig {
46
46
  * @required
47
47
  */
48
48
  apiKey: string;
49
- /**
50
- * Project key to associate test results with
51
- * @required
52
- */
53
- projectKey: string;
54
49
  /**
55
50
  * Path to Cypress project directory
56
51
  * If not provided, uses current directory
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,KAAK,EAAE,QAAQ,GAAG,QAAQ,GAAG,SAAS,GAAG,SAAS,CAAC;IACnD,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,KAAK,CAAC;QACd,KAAK,EAAE,QAAQ,GAAG,QAAQ,GAAG,SAAS,CAAC;QACvC,KAAK,CAAC,EAAE;YACN,IAAI,EAAE,MAAM,CAAC;YACb,OAAO,EAAE,MAAM,CAAC;YAChB,KAAK,CAAC,EAAE,MAAM,CAAC;SAChB,CAAC;QACF,kBAAkB,EAAE,MAAM,CAAC;QAC3B,iBAAiB,EAAE,MAAM,CAAC;KAC3B,CAAC,CAAC;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE;QACL,MAAM,EAAE,MAAM,CAAC;QACf,KAAK,EAAE,MAAM,CAAC;QACd,MAAM,EAAE,MAAM,CAAC;QACf,OAAO,EAAE,MAAM,CAAC;QAChB,OAAO,EAAE,MAAM,CAAC;QAChB,QAAQ,EAAE,MAAM,CAAC;QACjB,QAAQ,EAAE,MAAM,CAAC;QACjB,SAAS,EAAE,MAAM,CAAC;QAClB,OAAO,EAAE,MAAM,CAAC;KACjB,CAAC;IACF,KAAK,EAAE,WAAW,EAAE,CAAC;IACrB,IAAI,EAAE,WAAW,CAAC;CACnB;AAED;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACpC;;;OAGG;IACH,MAAM,EAAE,MAAM,CAAC;IAEf;;;OAGG;IACH,UAAU,EAAE,MAAM,CAAC;IAEnB;;;OAGG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB;;OAEG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;IAEhB;;OAEG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB;;OAEG;IACH,aAAa,CAAC,EAAE,MAAM,CAAC;IAEvB;;;OAGG;IACH,aAAa,CAAC,EAAE,OAAO,CAAC;IAExB;;;OAGG;IACH,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAE5B;;OAEG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAElB;;OAEG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;IAEjB;;OAEG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;IAEpB;;OAEG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB;;OAEG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB;;OAEG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAElB;;OAEG;IACH,eAAe,CAAC,EAAE,MAAM,CAAC;IAEzB;;OAEG;IACH,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IAEvB;;;OAGG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,KAAK,EAAE,QAAQ,GAAG,QAAQ,GAAG,SAAS,GAAG,SAAS,CAAC;IACnD,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,KAAK,CAAC;QACd,KAAK,EAAE,QAAQ,GAAG,QAAQ,GAAG,SAAS,CAAC;QACvC,KAAK,CAAC,EAAE;YACN,IAAI,EAAE,MAAM,CAAC;YACb,OAAO,EAAE,MAAM,CAAC;YAChB,KAAK,CAAC,EAAE,MAAM,CAAC;SAChB,CAAC;QACF,kBAAkB,EAAE,MAAM,CAAC;QAC3B,iBAAiB,EAAE,MAAM,CAAC;KAC3B,CAAC,CAAC;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE;QACL,MAAM,EAAE,MAAM,CAAC;QACf,KAAK,EAAE,MAAM,CAAC;QACd,MAAM,EAAE,MAAM,CAAC;QACf,OAAO,EAAE,MAAM,CAAC;QAChB,OAAO,EAAE,MAAM,CAAC;QAChB,QAAQ,EAAE,MAAM,CAAC;QACjB,QAAQ,EAAE,MAAM,CAAC;QACjB,SAAS,EAAE,MAAM,CAAC;QAClB,OAAO,EAAE,MAAM,CAAC;KACjB,CAAC;IACF,KAAK,EAAE,WAAW,EAAE,CAAC;IACrB,IAAI,EAAE,WAAW,CAAC;CACnB;AAED;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACpC;;;OAGG;IACH,MAAM,EAAE,MAAM,CAAC;IAEf;;;OAGG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB;;OAEG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;IAEhB;;OAEG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB;;OAEG;IACH,aAAa,CAAC,EAAE,MAAM,CAAC;IAEvB;;;OAGG;IACH,aAAa,CAAC,EAAE,OAAO,CAAC;IAExB;;;OAGG;IACH,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAE5B;;OAEG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAElB;;OAEG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;IAEjB;;OAEG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;IAEpB;;OAEG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB;;OAEG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB;;OAEG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAElB;;OAEG;IACH,eAAe,CAAC,EAAE,MAAM,CAAC;IAEzB;;OAEG;IACH,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IAEvB;;;OAGG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@testream/cypress-reporter",
3
- "version": "1.0.2",
3
+ "version": "1.0.3",
4
4
  "description": "Cypress plugin to upload test results to Testream",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",