@flakiness/sdk 1.0.2 → 1.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/lib/browser.js CHANGED
@@ -171,7 +171,7 @@ function computeTestId(test, suiteId) {
171
171
  });
172
172
  }
173
173
 
174
- // node_modules/.pnpm/@flakiness+flakiness-report@0.22.0/node_modules/@flakiness/flakiness-report/lib/flakinessReport.js
174
+ // node_modules/.pnpm/@flakiness+flakiness-report@0.25.0_zod@4.3.5/node_modules/@flakiness/flakiness-report/lib/flakinessReport.js
175
175
  var FlakinessReport;
176
176
  ((FlakinessReport22) => {
177
177
  FlakinessReport22.CATEGORY_PLAYWRIGHT = "playwright";
@@ -179,7 +179,7 @@ var FlakinessReport;
179
179
  FlakinessReport22.CATEGORY_JUNIT = "junit";
180
180
  })(FlakinessReport || (FlakinessReport = {}));
181
181
 
182
- // node_modules/.pnpm/@flakiness+flakiness-report@0.22.0/node_modules/@flakiness/flakiness-report/lib/schema.js
182
+ // node_modules/.pnpm/@flakiness+flakiness-report@0.25.0_zod@4.3.5/node_modules/@flakiness/flakiness-report/lib/schema.js
183
183
  import z from "zod/v4";
184
184
  var Schema;
185
185
  ((Schema2) => {
@@ -284,7 +284,9 @@ var Schema;
284
284
  samples: z.array(Schema2.SystemUtilizationSample)
285
285
  });
286
286
  Schema2.UtilizationTelemetry = z.tuple([Schema2.DurationMS, z.number().min(0).max(100)]);
287
+ Schema2.FlakinessProject = z.string();
287
288
  Schema2.Report = z.object({
289
+ flakinessProject: Schema2.FlakinessProject.optional(),
288
290
  category: z.string().min(1).max(100),
289
291
  commitId: Schema2.CommitId,
290
292
  relatedCommitIds: z.array(Schema2.CommitId).optional(),
package/lib/index.js CHANGED
@@ -775,7 +775,7 @@ function computeTestId(test, suiteId) {
775
775
  });
776
776
  }
777
777
 
778
- // node_modules/.pnpm/@flakiness+flakiness-report@0.22.0/node_modules/@flakiness/flakiness-report/lib/flakinessReport.js
778
+ // node_modules/.pnpm/@flakiness+flakiness-report@0.25.0_zod@4.3.5/node_modules/@flakiness/flakiness-report/lib/flakinessReport.js
779
779
  var FlakinessReport;
780
780
  ((FlakinessReport22) => {
781
781
  FlakinessReport22.CATEGORY_PLAYWRIGHT = "playwright";
@@ -783,7 +783,7 @@ var FlakinessReport;
783
783
  FlakinessReport22.CATEGORY_JUNIT = "junit";
784
784
  })(FlakinessReport || (FlakinessReport = {}));
785
785
 
786
- // node_modules/.pnpm/@flakiness+flakiness-report@0.22.0/node_modules/@flakiness/flakiness-report/lib/schema.js
786
+ // node_modules/.pnpm/@flakiness+flakiness-report@0.25.0_zod@4.3.5/node_modules/@flakiness/flakiness-report/lib/schema.js
787
787
  import z from "zod/v4";
788
788
  var Schema;
789
789
  ((Schema2) => {
@@ -888,7 +888,9 @@ var Schema;
888
888
  samples: z.array(Schema2.SystemUtilizationSample)
889
889
  });
890
890
  Schema2.UtilizationTelemetry = z.tuple([Schema2.DurationMS, z.number().min(0).max(100)]);
891
+ Schema2.FlakinessProject = z.string();
891
892
  Schema2.Report = z.object({
893
+ flakinessProject: Schema2.FlakinessProject.optional(),
892
894
  category: z.string().min(1).max(100),
893
895
  commitId: Schema2.CommitId,
894
896
  relatedCommitIds: z.array(Schema2.CommitId).optional(),
@@ -936,6 +938,39 @@ function stripAnsi(str) {
936
938
  import assert2 from "assert";
937
939
  import fs4 from "fs";
938
940
  import { URL as URL2 } from "url";
941
+
942
+ // src/_githubOIDC.ts
943
+ var GithubOIDC = class _GithubOIDC {
944
+ constructor(_requestUrl, _requestToken) {
945
+ this._requestUrl = _requestUrl;
946
+ this._requestToken = _requestToken;
947
+ }
948
+ static initializeFromEnv() {
949
+ const requestUrl = process.env.ACTIONS_ID_TOKEN_REQUEST_URL;
950
+ const requestToken = process.env.ACTIONS_ID_TOKEN_REQUEST_TOKEN;
951
+ return requestUrl && requestToken ? new _GithubOIDC(requestUrl, requestToken) : void 0;
952
+ }
953
+ async fetchToken(audience) {
954
+ const url = new URL(this._requestUrl);
955
+ url.searchParams.set("audience", audience);
956
+ const response = await fetch(url, {
957
+ headers: {
958
+ "Authorization": `bearer ${this._requestToken}`,
959
+ "Accept": "application/json; api-version=2.0"
960
+ }
961
+ });
962
+ if (!response.ok) {
963
+ const body = await response.text().catch(() => "");
964
+ throw new Error(`Failed to request GitHub OIDC token: ${response.status} ${body}`);
965
+ }
966
+ const json = await response.json();
967
+ if (!json.value)
968
+ throw new Error("GitHub OIDC token response did not contain a token value.");
969
+ return json.value;
970
+ }
971
+ };
972
+
973
+ // src/uploadReport.ts
939
974
  async function createFileAttachment(contentType, filePath) {
940
975
  return {
941
976
  type: "file",
@@ -953,9 +988,28 @@ async function createDataAttachment(contentType, data) {
953
988
  };
954
989
  }
955
990
  async function uploadReport(report, attachments, options) {
956
- const flakinessAccessToken = options?.flakinessAccessToken ?? process.env["FLAKINESS_ACCESS_TOKEN"];
957
- const flakinessEndpoint = options?.flakinessEndpoint ?? process.env["FLAKINESS_ENDPOINT"] ?? "https://flakiness.io";
991
+ let flakinessAccessToken = options?.flakinessAccessToken ?? process.env["FLAKINESS_ACCESS_TOKEN"];
958
992
  const logger = options?.logger ?? console;
993
+ const githubOIDC = GithubOIDC.initializeFromEnv();
994
+ if (!flakinessAccessToken && githubOIDC) {
995
+ if (!report.flakinessProject) {
996
+ const reason = "`flakinessProject` is not configured to upload using Github OIDC.";
997
+ if (process.env.CI)
998
+ logger.warn(`[flakiness.io] \u26A0 Skipping upload: ${reason}`);
999
+ return { status: "skipped", reason };
1000
+ }
1001
+ try {
1002
+ flakinessAccessToken = await githubOIDC.fetchToken(report.flakinessProject);
1003
+ if (!flakinessAccessToken)
1004
+ throw new Error("token is empty");
1005
+ } catch (e) {
1006
+ const errorMessage = e.message || String(e);
1007
+ logger.error(`[flakiness.io] \u2715 Unexpected error while fetching Github OIDC token: ${errorMessage}`);
1008
+ if (options?.throwOnFailure)
1009
+ throw e;
1010
+ return { status: "failed", error: errorMessage };
1011
+ }
1012
+ }
959
1013
  if (!flakinessAccessToken) {
960
1014
  const reason = "No FLAKINESS_ACCESS_TOKEN found";
961
1015
  if (process.env.CI)
@@ -963,6 +1017,7 @@ async function uploadReport(report, attachments, options) {
963
1017
  return { status: "skipped", reason };
964
1018
  }
965
1019
  try {
1020
+ const flakinessEndpoint = options?.flakinessEndpoint ?? process.env["FLAKINESS_ENDPOINT"] ?? "https://flakiness.io";
966
1021
  const upload = new ReportUpload(report, attachments, { flakinessAccessToken, flakinessEndpoint });
967
1022
  const uploadResult = await upload.upload();
968
1023
  if (!uploadResult.success) {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@flakiness/sdk",
3
- "version": "1.0.2",
3
+ "version": "1.1.0",
4
4
  "private": false,
5
5
  "repository": {
6
6
  "type": "git",
@@ -25,7 +25,7 @@
25
25
  "author": "Degu Labs, Inc",
26
26
  "license": "MIT",
27
27
  "devDependencies": {
28
- "@flakiness/flakiness-report": "^0.22.0",
28
+ "@flakiness/flakiness-report": "^0.25.0",
29
29
  "@types/debug": "^4.1.12",
30
30
  "@types/node": "^25.0.3",
31
31
  "esbuild": "^0.27.0",
@@ -34,7 +34,7 @@
34
34
  "typescript": "^5.6.2"
35
35
  },
36
36
  "peerDependencies": {
37
- "@flakiness/flakiness-report": "^0.22.0"
37
+ "@flakiness/flakiness-report": "^0.25.0"
38
38
  },
39
39
  "dependencies": {
40
40
  "chalk": "^5.6.2",
@@ -0,0 +1,8 @@
1
+ export declare class GithubOIDC {
2
+ private _requestUrl;
3
+ private _requestToken;
4
+ static initializeFromEnv(): GithubOIDC | undefined;
5
+ constructor(_requestUrl: string, _requestToken: string);
6
+ fetchToken(audience: string): Promise<string>;
7
+ }
8
+ //# sourceMappingURL=_githubOIDC.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"_githubOIDC.d.ts","sourceRoot":"","sources":["../../src/_githubOIDC.ts"],"names":[],"mappings":"AAAA,qBAAa,UAAU;IAQnB,OAAO,CAAC,WAAW;IACnB,OAAO,CAAC,aAAa;IARvB,MAAM,CAAC,iBAAiB,IAAI,UAAU,GAAC,SAAS;gBAOtC,WAAW,EAAE,MAAM,EACnB,aAAa,EAAE,MAAM;IAKzB,UAAU,CAAC,QAAQ,EAAE,MAAM;CAsBlC"}
@@ -1 +1 @@
1
- {"version":3,"file":"uploadReport.d.ts","sourceRoot":"","sources":["../../src/uploadReport.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAW9D;;;;;;GAMG;AACH,MAAM,MAAM,cAAc,GAAG;IAC3B,iEAAiE;IACjE,IAAI,EAAE,QAAQ,CAAC;IACf,4EAA4E;IAC5E,EAAE,EAAE,eAAe,CAAC,YAAY,CAAC;IACjC,4EAA4E;IAC5E,WAAW,EAAE,MAAM,CAAC;IACpB,6CAA6C;IAC7C,IAAI,EAAE,MAAM,CAAC;CACd,CAAA;AAED;;;;;;GAMG;AACH,MAAM,MAAM,cAAc,GAAG;IAC3B,+DAA+D;IAC/D,IAAI,EAAE,MAAM,CAAC;IACb,iFAAiF;IACjF,EAAE,EAAE,eAAe,CAAC,YAAY,CAAC;IACjC,4EAA4E;IAC5E,WAAW,EAAE,MAAM,CAAC;IACpB,+DAA+D;IAC/D,IAAI,EAAE,MAAM,CAAC;CACd,CAAA;AAED;;;;;GAKG;AACH,MAAM,MAAM,UAAU,GAAG,cAAc,GAAG,cAAc,CAAC;AAEzD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AACH,wBAAsB,oBAAoB,CAAC,WAAW,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC,CAOzG;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,wBAAsB,oBAAoB,CAAC,WAAW,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC,CAOrG;AAED,KAAK,YAAY,GACb;IAAE,MAAM,EAAE,SAAS,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,GACxC;IAAE,MAAM,EAAE,SAAS,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GACrC;IAAE,MAAM,EAAE,QAAQ,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC;AAExC,UAAU,MAAM;IACd,GAAG,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,KAAK,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;CAC9B;AAED,MAAM,MAAM,aAAa,GAAG;IAC1B;;;;;;;;OAQG;IACH,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAE3B;;;;;;;;OAQG;IACH,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAE9B;;;;;;;;OAQG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;IAEhB;;;;;;;;;OASG;IACH,cAAc,CAAC,EAAE,OAAO,CAAC;CAC1B,CAAA;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AACH,wBAAsB,YAAY,CAChC,MAAM,EAAE,eAAe,CAAC,MAAM,EAC9B,WAAW,EAAE,UAAU,EAAE,EACzB,OAAO,CAAC,EAAE,aAAa,GACtB,OAAO,CAAC,YAAY,CAAC,CAiCvB"}
1
+ {"version":3,"file":"uploadReport.d.ts","sourceRoot":"","sources":["../../src/uploadReport.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAY9D;;;;;;GAMG;AACH,MAAM,MAAM,cAAc,GAAG;IAC3B,iEAAiE;IACjE,IAAI,EAAE,QAAQ,CAAC;IACf,4EAA4E;IAC5E,EAAE,EAAE,eAAe,CAAC,YAAY,CAAC;IACjC,4EAA4E;IAC5E,WAAW,EAAE,MAAM,CAAC;IACpB,6CAA6C;IAC7C,IAAI,EAAE,MAAM,CAAC;CACd,CAAA;AAED;;;;;;GAMG;AACH,MAAM,MAAM,cAAc,GAAG;IAC3B,+DAA+D;IAC/D,IAAI,EAAE,MAAM,CAAC;IACb,iFAAiF;IACjF,EAAE,EAAE,eAAe,CAAC,YAAY,CAAC;IACjC,4EAA4E;IAC5E,WAAW,EAAE,MAAM,CAAC;IACpB,+DAA+D;IAC/D,IAAI,EAAE,MAAM,CAAC;CACd,CAAA;AAED;;;;;GAKG;AACH,MAAM,MAAM,UAAU,GAAG,cAAc,GAAG,cAAc,CAAC;AAEzD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AACH,wBAAsB,oBAAoB,CAAC,WAAW,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC,CAOzG;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,wBAAsB,oBAAoB,CAAC,WAAW,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC,CAOrG;AAED,KAAK,YAAY,GACb;IAAE,MAAM,EAAE,SAAS,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,GACxC;IAAE,MAAM,EAAE,SAAS,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GACrC;IAAE,MAAM,EAAE,QAAQ,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC;AAExC,UAAU,MAAM;IACd,GAAG,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,KAAK,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;CAC9B;AAED,MAAM,MAAM,aAAa,GAAG;IAC1B;;;;;;;;OAQG;IACH,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAE3B;;;;;;;;OAQG;IACH,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAE9B;;;;;;;;OAQG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;IAEhB;;;;;;;;;OASG;IACH,cAAc,CAAC,EAAE,OAAO,CAAC;CAC1B,CAAA;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AACH,wBAAsB,YAAY,CAChC,MAAM,EAAE,eAAe,CAAC,MAAM,EAC9B,WAAW,EAAE,UAAU,EAAE,EACzB,OAAO,CAAC,EAAE,aAAa,GACtB,OAAO,CAAC,YAAY,CAAC,CAqDvB"}