From 554b769ffc42b9b3852008ac587eac816a44c5e7 Mon Sep 17 00:00:00 2001 From: "redmond\\richawla" Date: Wed, 25 Mar 2026 09:42:35 -0700 Subject: [PATCH 01/20] Cleanup Unused APIs --- dist/api/PurviewClient.d.ts | 3 +- dist/api/PurviewClient.d.ts.map | 2 +- dist/api/PurviewClient.js | 19 --- dist/api/PurviewClient.js.map | 2 +- dist/config/types.d.ts | 26 ---- dist/config/types.d.ts.map | 2 +- dist/config/types.js.map | 2 +- dist/index.js | 180 +------------------------ dist/payload/PayloadBuilder.d.ts | 11 +- dist/payload/PayloadBuilder.d.ts.map | 2 +- dist/payload/PayloadBuilder.js | 161 +---------------------- dist/payload/PayloadBuilder.js.map | 2 +- dist/utils/types.d.ts | 57 -------- dist/utils/types.d.ts.map | 2 +- src/api/purviewClient.ts | 28 +--- src/config/types.ts | 30 ----- src/payload/payloadBuilder.ts | 188 +-------------------------- src/purview/client.ts | 85 ------------ src/purview/payloadBuilder.ts | 74 ----------- src/utils/types.ts | 65 --------- tests/api/purviewClient.test.ts | 46 +------ tests/payload/payloadBuilder.test.ts | 62 --------- 22 files changed, 24 insertions(+), 1025 deletions(-) delete mode 100644 src/purview/client.ts delete mode 100644 src/purview/payloadBuilder.ts diff --git a/dist/api/PurviewClient.d.ts b/dist/api/PurviewClient.d.ts index c9511bd..975eb30 100644 --- a/dist/api/PurviewClient.d.ts +++ b/dist/api/PurviewClient.d.ts @@ -1,4 +1,4 @@ -import { ActionConfig, PurviewPayload, ApiResponse, ProcessContentBatchRequest, ProcessContentRequest, ProcessContentResponse, UploadSignalRequest, ProtectionScopesRequest, ProtectionScopesResponse, GraphUserInfoContainer } from '../config/types'; +import { ActionConfig, ApiResponse, ProcessContentBatchRequest, ProcessContentRequest, ProcessContentResponse, UploadSignalRequest, ProtectionScopesRequest, ProtectionScopesResponse, GraphUserInfoContainer } from '../config/types'; export declare class PurviewClient { private readonly config; private readonly logger; @@ -7,7 +7,6 @@ export declare class PurviewClient { private readonly baseUrl; constructor(config: ActionConfig); setAuthToken(token: string): void; - queueConversationMessage(payload: PurviewPayload): Promise; processContentAsync(payload: ProcessContentBatchRequest): Promise; processContent(userId: string, request: ProcessContentRequest, scopeIdentifier: string, inline?: boolean): Promise>; uploadSignal(payload: UploadSignalRequest): Promise; diff --git a/dist/api/PurviewClient.d.ts.map b/dist/api/PurviewClient.d.ts.map index e0fb023..f8fe4cc 100644 --- a/dist/api/PurviewClient.d.ts.map +++ b/dist/api/PurviewClient.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"purviewClient.d.ts","sourceRoot":"","sources":["../../src/api/purviewClient.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,cAAc,EAAE,WAAW,EAAE,0BAA0B,EAAE,qBAAqB,EAAE,sBAAsB,EAAE,mBAAmB,EAAE,uBAAuB,EAAE,wBAAwB,EAAE,sBAAsB,EAAE,MAAM,iBAAiB,CAAC;AAIvP,qBAAa,aAAa;IAMZ,OAAO,CAAC,QAAQ,CAAC,MAAM;IALnC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAChC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAe;IAC5C,OAAO,CAAC,SAAS,CAAuB;IACxC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;gBAEJ,MAAM,EAAE,YAAY;IAMjD,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAI3B,wBAAwB,CAAC,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,WAAW,CAAC;IA0BvE,mBAAmB,CAAC,OAAO,EAAE,0BAA0B,GAAG,OAAO,CAAC,WAAW,CAAC;IA2B9E,cAAc,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,qBAAqB,EAAE,eAAe,EAAE,MAAM,EAAE,MAAM,GAAE,OAAc,GAAG,OAAO,CAAC,WAAW,CAAC,sBAAsB,CAAC,CAAC;IAmC7J,YAAY,CAAC,OAAO,EAAE,mBAAmB,GAAG,OAAO,CAAC,WAAW,CAAC;IA0BhE,2BAA2B,CAAC,OAAO,EAAE,uBAAuB,GAAG,OAAO,CAAC,WAAW,CAAC,wBAAwB,CAAC,CAAC;IA8B7G,yBAAyB,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,uBAAuB,GAAG,OAAO,CAAC,WAAW,CAAC,wBAAwB,CAAC,CAAC;IA8B3H,WAAW,CAAC,UAAU,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,WAAW,CAAC,sBAAsB,CAAC,CAAC;YA6BvE,WAAW;IA4EzB,OAAO,CAAC,YAAY;IAQpB,OAAO,CAAC,iBAAiB;IAIzB,OAAO,CAAC,qBAAqB;CAS9B"} \ No newline at end of file +{"version":3,"file":"purviewClient.d.ts","sourceRoot":"","sources":["../../src/api/purviewClient.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,0BAA0B,EAAE,qBAAqB,EAAE,sBAAsB,EAAE,mBAAmB,EAAE,uBAAuB,EAAE,wBAAwB,EAAE,sBAAsB,EAAE,MAAM,iBAAiB,CAAC;AAIvO,qBAAa,aAAa;IAMZ,OAAO,CAAC,QAAQ,CAAC,MAAM;IALnC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAChC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAe;IAC5C,OAAO,CAAC,SAAS,CAAuB;IACxC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;gBAEJ,MAAM,EAAE,YAAY;IAMjD,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAI3B,mBAAmB,CAAC,OAAO,EAAE,0BAA0B,GAAG,OAAO,CAAC,WAAW,CAAC;IA2B9E,cAAc,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,qBAAqB,EAAE,eAAe,EAAE,MAAM,EAAE,MAAM,GAAE,OAAc,GAAG,OAAO,CAAC,WAAW,CAAC,sBAAsB,CAAC,CAAC;IAmC7J,YAAY,CAAC,OAAO,EAAE,mBAAmB,GAAG,OAAO,CAAC,WAAW,CAAC;IA0BhE,2BAA2B,CAAC,OAAO,EAAE,uBAAuB,GAAG,OAAO,CAAC,WAAW,CAAC,wBAAwB,CAAC,CAAC;IA8B7G,yBAAyB,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,uBAAuB,GAAG,OAAO,CAAC,WAAW,CAAC,wBAAwB,CAAC,CAAC;IA8B3H,WAAW,CAAC,UAAU,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,WAAW,CAAC,sBAAsB,CAAC,CAAC;YA6BvE,WAAW;IA4EzB,OAAO,CAAC,YAAY;IAQpB,OAAO,CAAC,iBAAiB;IAIzB,OAAO,CAAC,qBAAqB;CAS9B"} \ No newline at end of file diff --git a/dist/api/PurviewClient.js b/dist/api/PurviewClient.js index 46cc53a..5dbc350 100644 --- a/dist/api/PurviewClient.js +++ b/dist/api/PurviewClient.js @@ -15,25 +15,6 @@ export class PurviewClient { setAuthToken(token) { this.authToken = token; } - async queueConversationMessage(payload) { - if (!this.authToken) { - throw new Error('Authentication token not set'); - } - this.logger.info(`Queuing conversation message`); - const endpoint = `${this.baseUrl}/conversations/${payload.conversationId}/messages`; - let payloadString = JSON.stringify(payload, this.jsonReplacer); - try { - const result = await this.retryHandler.executeWithRetry(async () => this.sendRequest(endpoint, payloadString, 'POST', {}, 'QueueConversationMessage'), 'QueueConversationMessage'); - return result; - } - catch (error) { - this.logger.error('Failed to queue conversation message', { error }); - return { - success: false, - error: error instanceof Error ? error.message : 'Unknown error' - }; - } - } async processContentAsync(payload) { if (!this.authToken) { throw new Error('Authentication token not set'); diff --git a/dist/api/PurviewClient.js.map b/dist/api/PurviewClient.js.map index a8ff4ba..5fe2319 100644 --- a/dist/api/PurviewClient.js.map +++ b/dist/api/PurviewClient.js.map @@ -1 +1 @@ -{"version":3,"file":"purviewClient.js","sourceRoot":"","sources":["../../src/api/purviewClient.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"purviewClient.js","sourceRoot":"","sources":["../../src/api/purviewClient.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/dist/config/types.d.ts b/dist/config/types.d.ts index d42a386..e47ff1a 100644 --- a/dist/config/types.d.ts +++ b/dist/config/types.d.ts @@ -42,32 +42,6 @@ export interface FileMetadata { typeOfChange?: CommitChangeType; commitTimestamp?: string; } -export interface PurviewPayload { - conversationId: string; - messages: PurviewMessage[]; - metadata: PayloadMetadata; -} -export interface PurviewMessage { - id: string; - content: string; - contentType: 'file' | 'metadata'; - timestamp: string; - fileInfo?: FileInfo; -} -export interface FileInfo { - path: string; - size: number; - sha: string; - language?: string; -} -export interface PayloadMetadata { - repository: string; - branch: string; - commit: string; - runId: string; - timestamp: string; - fileCount: number; -} export interface ApiResponse { success: boolean; data?: T; diff --git a/dist/config/types.d.ts.map b/dist/config/types.d.ts.map index 2a3107c..6f2da3f 100644 --- a/dist/config/types.d.ts.map +++ b/dist/config/types.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/config/types.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/config/types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,YAAY;IAC3B,QAAQ,EAAE,MAAM,CAAC;IACjB,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,QAAQ,EAAE,MAAM,CAAC;IACjB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,eAAe,EAAE,MAAM,CAAC;IACxB,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;IAC3B,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,OAAO,CAAC;IACf,UAAU,EAAE,cAAc,CAAC;IAC3B,MAAM,EAAE,MAAM,CAAC;IACf,YAAY,CAAC,EAAE,WAAW,EAAE,CAAC;IAG7B,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,SAAS;IACxB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,IAAI,CAAC;CACjB;AAED,MAAM,MAAM,gBAAgB,GAC1B,SAAS,GACT,OAAO,GACP,SAAS,GACT,UAAU,GACV,SAAS,GACT,QAAQ,GACR,SAAS,GACT,WAAW,CAAC;AAEd,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;IACxC,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;IACxC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,YAAY,CAAC,EAAE,gBAAgB,CAAC;IAChC,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED,MAAM,WAAW,WAAW,CAAC,CAAC,GAAG,GAAG;IAClC,OAAO,EAAE,OAAO,CAAC;IACjB,IAAI,CAAC,EAAE,CAAC,CAAC;IACT,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,MAAM,MAAM,CAAC,CAAC,EAAE,CAAC,GAAG,KAAK,IAC3B;IAAE,OAAO,EAAE,IAAI,CAAC;IAAC,KAAK,EAAE,CAAC,CAAA;CAAE,GAC3B;IAAE,OAAO,EAAE,KAAK,CAAC;IAAC,KAAK,EAAE,CAAC,CAAA;CAAE,CAAC;AAGjC,MAAM,WAAW,kBAAkB;IACjC,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,iBAAiB;IAC9B,mFAAmF;IACnF,aAAa,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,0BAA0B;IACvC,sBAAsB,EAAE,yBAAyB,EAAE,CAAC;CACvD;AAED,MAAM,WAAW,yBAAyB;IACtC,gBAAgB,EAAE,gBAAgB,CAAC;IACnC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,gBAAgB;IAC7B,cAAc,EAAE,0BAA0B,EAAE,CAAC;IAC7C,gBAAgB,CAAC,EAAE,gBAAgB,CAAC;IACpC,cAAc,CAAC,EAAE,cAAc,CAAC;IAChC,qBAAqB,CAAC,EAAE,qBAAqB,CAAC;IAC9C,oBAAoB,CAAC,EAAE,oBAAoB,CAAC;CAC/C;AAED,MAAM,WAAW,0BAA2B,SAAQ,iBAAiB;IACjE,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,WAAW,CAAC;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,aAAa,EAAE,MAAM,CAAC;IACtB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,OAAO,CAAC;IACrB,eAAe,EAAE,MAAM,CAAC;IACxB,gBAAgB,EAAE,MAAM,CAAC;CAC5B;AAED,MAAM,WAAW,2BAA4B,SAAQ,0BAA0B;IAC3E,aAAa,EAAE,6CAA6C,CAAC;IAC7D,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,iBAAiB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC7B,OAAO,CAAC,EAAE,mBAAmB,EAAE,CAAC;CACnC;AAED,MAAM,WAAW,mBAAoB,SAAQ,0BAA0B;IACnE,aAAa,EAAE,qCAAqC,CAAC;IACrD,OAAO,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,WAAY,SAAQ,iBAAiB;CAErD;AAED,MAAM,WAAW,WAAY,SAAQ,WAAW;IAC9C,aAAa,EAAE,6BAA6B,CAAC;IAC7C,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,aAAc,SAAQ,WAAW;IAChD,aAAa,EAAE,+BAA+B,CAAC;IAC/C,IAAI,EAAE,MAAM,CAAC;CACd;AAED,oBAAY,QAAQ;IAChB,OAAO,IAAI;IACX,UAAU,IAAI;IACd,UAAU,IAAI;IACd,YAAY,IAAI;IAChB,YAAY,IAAI;CACnB;AAED,MAAM,WAAW,gBAAgB;IAC7B,QAAQ,EAAE,QAAQ,CAAC;CACtB;AAED,MAAM,WAAW,cAAc;IAC3B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,6BAA6B,CAAC,EAAE,6BAA6B,CAAC;CACjE;AAED,MAAM,WAAW,6BAA6B;IAC1C,uBAAuB,EAAE,MAAM,CAAC;IAChC,sBAAsB,EAAE,MAAM,CAAC;CAClC;AAED,MAAM,WAAW,qBAAqB;IAClC,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,oBAAqB,SAAQ,qBAAqB;IAC/D,mBAAmB,EAAE,cAAc,CAAC;CACvC;AAED,MAAM,WAAW,cAAe,SAAQ,iBAAiB;IACrD,KAAK,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,yBAA0B,SAAQ,cAAc;IAC/D,aAAa,EAAE,2CAA2C,CAAC;CAC5D;AAED,MAAM,WAAW,oBAAqB,SAAQ,cAAc;IAC1D,aAAa,EAAE,sCAAsC,CAAC;CACvD;AAED,MAAM,WAAW,iBAAkB,SAAQ,cAAc;IACvD,aAAa,EAAE,mCAAmC,CAAC;CACpD;AAED,MAAM,WAAW,mBAAmB;IAChC,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,mBAAmB;IAClC,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,MAAM,CAAC;IACf,eAAe,EAAE,MAAM,CAAC;IACxB,eAAe,EAAE,gBAAgB,CAAC;IAClC,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;CACvC;AAGD,MAAM,MAAM,yBAAyB,GACjC,MAAM,GACN,YAAY,GACZ,YAAY,GACZ,cAAc,GACd,cAAc,GACd,oBAAoB,CAAC;AAGzB,KAAK,mBAAmB,GACpB,MAAM,GACN,UAAU,GACV,UAAU,GACV,oBAAoB,CAAC;AAGzB,MAAM,WAAW,uBAAuB;IACtC;;OAEG;IACH,UAAU,CAAC,EAAE,yBAAyB,CAAC;IAEvC;;OAEG;IACH,SAAS,CAAC,EAAE,cAAc,EAAE,CAAC;IAE7B;;OAEG;IACH,OAAO,CAAC,EAAE,mBAAmB,CAAC;IAE9B;;OAEG;IACH,cAAc,CAAC,EAAE,cAAc,CAAC;IAEhC;;OAEG;IACH,qBAAqB,CAAC,EAAE,qBAAqB,CAAC;IAE9C;;;OAGG;IACH,aAAa,CAAC,EAAE,MAAM,CAAC;IAEvB;;;OAGG;IACH,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED,MAAM,WAAW,aAAa;IAC5B,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,WAAW,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;IACvC,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;IACxC,KAAK,EAAE,MAAM,CAAC;IACd,iBAAiB,EAAE,MAAM,CAAC;IAC1B,iBAAiB,EAAE,MAAM,CAAC;IAC1B,eAAe,EAAE,MAAM,CAAC;IACxB,YAAY,EAAE,gBAAgB,CAAC;CAChC;AAED,MAAM,WAAW,MAAM;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;IACvC,WAAW,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;IACvC,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;CAChC;AAED,MAAM,WAAW,sBAAsB;IACrC,KAAK,EAAE,aAAa,EAAE,CAAC;CACxB;AAED,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,iBAAiB,EAAE,MAAM,CAAC;CAC3B;AAED,MAAM,WAAW,wBAAwB;IACvC,KAAK,EAAE,YAAY,EAAE,CAAC;CACvB;AAED,MAAM,WAAW,YAAY;IAC3B,WAAW,EAAE,aAAa,CAAC;IAC3B,SAAS,EAAE,cAAc,EAAE,CAAC;IAC5B,UAAU,EAAE,yBAAyB,CAAC;IACtC,aAAa,EAAE,MAAM,CAAC;IACtB,aAAa,EAAE,aAAa,EAAE,CAAC;CAChC;AAED,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,MAAM,CAAC;IACf,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,aAAa;IAC5B,UAAU,EAAE,SAAS,EAAE,CAAC;IACxB,UAAU,EAAE,SAAS,EAAE,CAAC;CACzB;AAED,MAAM,WAAW,SAAS;IACxB,aAAa,EAAE,MAAM,CAAC;IACtB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,eAAe;IAC9B,sBAAsB,EAAE,0BAA0B,EAAE,CAAC;IACrD,oBAAoB,EAAE,mBAAmB,EAAE,CAAC;CAC7C;AAID,MAAM,WAAW,qBAAqB;IACpC,gBAAgB,EAAE,gBAAgB,CAAC;CACpC;AAED,MAAM,WAAW,sBAAsB;IACrC,EAAE,EAAE,MAAM,CAAC;IACX,oBAAoB,EAAE,oBAAoB,CAAC;IAC3C,aAAa,EAAE,YAAY,EAAE,CAAC;IAC9B,gBAAgB,EAAE,GAAG,EAAE,CAAC;CACzB;AAED,MAAM,MAAM,oBAAoB,GAAG,aAAa,GAAG,UAAU,CAAC;AAE9D,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,MAAM,CAAC;IACf,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,iBAAiB;IAChC,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,aAAa,EAAE,YAAY,EAAE,CAAC;CAC/B;AAED,oBAAY,aAAa;IACvB,cAAc,mBAAmB;IACjC,eAAe,oBAAoB;CACpC;AAED,MAAM,WAAW,gBAAgB;IAC/B,aAAa,EAAE,OAAO,CAAC;IACvB,UAAU,EAAE,aAAa,EAAE,CAAC;IAC5B,aAAa,EAAE,aAAa,CAAC;CAC9B;AAED,MAAM,WAAW,UAAU;IACvB,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,GAAG,SAAS,CAAC;CAC7B;AAED,MAAM,WAAW,WAAW;IAC1B,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,YAAY,EAAE,CAAC;CACvB;AAID,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,WAAW,EAAE,CAAC;IACrB,aAAa,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,iBAAiB;IAChC,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;CACd;AAGD,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,MAAM,CAAC;QACf,UAAU,UAAU;YAClB,YAAY,CAAC,EAAE,MAAM,CAAC;YACtB,YAAY,CAAC,EAAE,MAAM,CAAC;YACtB,aAAa,CAAC,EAAE,MAAM,CAAC;YACvB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAAC;SACnC;KACF;CACF"} \ No newline at end of file diff --git a/dist/config/types.js.map b/dist/config/types.js.map index 66d7ffe..3fece16 100644 --- a/dist/config/types.js.map +++ b/dist/config/types.js.map @@ -1 +1 @@ -{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/config/types.ts"],"names":[],"mappings":"AA0KA,MAAM,CAAN,IAAY,QAMX;AAND,WAAY,QAAQ;IAChB,6CAAW,CAAA;IACX,mDAAc,CAAA;IACd,mDAAc,CAAA;IACd,uDAAgB,CAAA;IAChB,uDAAgB,CAAA;AACpB,CAAC,EANW,QAAQ,KAAR,QAAQ,QAMnB;AAwND,MAAM,CAAN,IAAY,aAGX;AAHD,WAAY,aAAa;IACvB,kDAAiC,CAAA;IACjC,oDAAmC,CAAA;AACrC,CAAC,EAHW,aAAa,KAAb,aAAa,QAGxB"} \ No newline at end of file +{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/config/types.ts"],"names":[],"mappings":"AA4IA,MAAM,CAAN,IAAY,QAMX;AAND,WAAY,QAAQ;IAChB,6CAAW,CAAA;IACX,mDAAc,CAAA;IACd,mDAAc,CAAA;IACd,uDAAgB,CAAA;IAChB,uDAAgB,CAAA;AACpB,CAAC,EANW,QAAQ,KAAR,QAAQ,QAMnB;AAwND,MAAM,CAAN,IAAY,aAGX;AAHD,WAAY,aAAa;IACvB,kDAAiC,CAAA;IACjC,oDAAmC,CAAA;AACrC,CAAC,EAHW,aAAa,KAAb,aAAa,QAGxB"} \ No newline at end of file diff --git a/dist/index.js b/dist/index.js index 9eea9fb..4508377 100644 --- a/dist/index.js +++ b/dist/index.js @@ -61995,25 +61995,6 @@ class PurviewClient { setAuthToken(token) { this.authToken = token; } - async queueConversationMessage(payload) { - if (!this.authToken) { - throw new Error('Authentication token not set'); - } - this.logger.info(`Queuing conversation message`); - const endpoint = `${this.baseUrl}/conversations/${payload.conversationId}/messages`; - let payloadString = JSON.stringify(payload, this.jsonReplacer); - try { - const result = await this.retryHandler.executeWithRetry(async () => this.sendRequest(endpoint, payloadString, 'POST', {}, 'QueueConversationMessage'), 'QueueConversationMessage'); - return result; - } - catch (error) { - this.logger.error('Failed to queue conversation message', { error }); - return { - success: false, - error: error instanceof Error ? error.message : 'Unknown error' - }; - } - } async processContentAsync(payload) { if (!this.authToken) { throw new Error('Authentication token not set'); @@ -62980,55 +62961,6 @@ class PayloadBuilder { this.config = config; this.logger = new logger_Logger('PayloadBuilder'); } - async build(files) { - const conversationId = this.generateConversationId(); - const allMessages = []; - // Add metadata message - allMessages.push(this.createMetadataMessage(files)); - // Add file messages - for (const file of files) { - const fileMessages = await this.createFileMessages(file); - allMessages.push(...fileMessages); - } - // Split messages into payloads of <= maxPayloadSize - const payloads = []; - let currentMessages = []; - let currentSize = 0; - const baseOverhead = 300; // JSON overhead for metadata, conversationId, etc. - for (const msg of allMessages) { - const msgSize = JSON.stringify(msg).length; - if (currentMessages.length > 0 && currentSize + msgSize + baseOverhead > this.maxPayloadSize) { - payloads.push(this.createPayloadObject(conversationId, currentMessages, files.length)); - currentMessages = []; - currentSize = 0; - } - currentMessages.push(msg); - currentSize += msgSize; - } - if (currentMessages.length > 0) { - payloads.push(this.createPayloadObject(conversationId, currentMessages, files.length)); - } - this.logger.debug('Payload built', { - conversationId, - payloadCount: payloads.length, - totalMessages: allMessages.length - }); - return payloads; - } - createPayloadObject(conversationId, messages, fileCount) { - return { - conversationId, - messages, - metadata: { - repository: `${this.config.repository.owner}/${this.config.repository.repo}`, - branch: this.config.repository.branch, - commit: this.config.repository.sha, - runId: this.config.repository.runId, - timestamp: new Date().toISOString(), - fileCount - } - }; - } buildProtectionScopesRequest() { const request = { activities: PayloadBuilder.scopeActivity, @@ -63216,7 +63148,7 @@ class PayloadBuilder { } buildUploadSignalRequest(files, prInfo) { const requests = []; - const conversationId = crypto.randomUUID(); + const conversationId = crypto.randomUUID() + '@GA'; let seqNum = 0; for (const file of files) { this.logger.info(`Building upload signal request for file: ${file.path}`); @@ -63227,7 +63159,7 @@ class PayloadBuilder { const singleSize = JSON.stringify(singleCTP).length + 200; // account for wrapper fields if (singleSize <= this.maxPayloadSize) { requests.push({ - id: crypto.randomUUID(), + id: crypto.randomUUID() + '@GA', userId, userEmail, scopeIdentifier: "", @@ -63244,7 +63176,7 @@ class PayloadBuilder { const isLastChunk = i + maxContentPerChunk >= content.length; const chunkCTP = this.createContentToProcess(file, conversationId, seqNum, !isLastChunk, chunk); requests.push({ - id: crypto.randomUUID(), + id: crypto.randomUUID() + '@GA', userId, userEmail, scopeIdentifier: "", @@ -63259,7 +63191,7 @@ class PayloadBuilder { } buildProcessContentBatchRequest(files) { const allItems = []; - const conversationId = crypto.randomUUID(); + const conversationId = crypto.randomUUID() + '@GA'; let seqNum = 0; for (const file of files) { const content = file.content || `File: ${file.path} (${file.size} bytes)`; @@ -63356,110 +63288,6 @@ class PayloadBuilder { } }; } - createMetadataMessage(files) { - const summary = { - totalFiles: files.length, - totalSize: files.reduce((sum, f) => sum + f.size, 0), - fileTypes: this.getFileTypes(files), - repository: this.config.repository - }; - return { - id: this.generateMessageId(), - content: JSON.stringify(summary, null, 2), - contentType: 'metadata', - timestamp: new Date().toISOString() - }; - } - async createFileMessages(file) { - const messages = []; - // If content is included and large, chunk it - if (file.content && file.content.length > 50000) { - const chunks = this.chunkContent(file.content); - for (let i = 0; i < chunks.length; i++) { - messages.push({ - id: this.generateMessageId(), - content: chunks[i], // Non-null assertion safe due to chunkContent implementation - contentType: 'file', - timestamp: new Date().toISOString(), - fileInfo: { - path: file.path, - size: file.size, - sha: file.sha, - language: this.detectLanguage(file.path) - } - }); - } - } - else { - // Single message for small files - messages.push({ - id: this.generateMessageId(), - content: file.content || `File: ${file.path} (${file.size} bytes)`, - contentType: 'file', - timestamp: new Date().toISOString(), - fileInfo: { - path: file.path, - size: file.size, - sha: file.sha, - language: this.detectLanguage(file.path) - } - }); - } - return messages; - } - chunkContent(content, chunkSize = 50000) { - const chunks = []; - for (let i = 0; i < content.length; i += chunkSize) { - chunks.push(content.substring(i, i + chunkSize)); - } - return chunks; - } - generateConversationId() { - const timestamp = Date.now(); - const random = Math.random().toString(36).substring(2, 9); - return `conv-${this.config.repository.runId}-${timestamp}-${random}`; - } - generateMessageId() { - return `msg-${Date.now()}-${Math.random().toString(36).substring(2, 9)}`; - } - getFileTypes(files) { - const types = {}; - for (const file of files) { - const ext = file.path.split('.').pop() || 'unknown'; - types[ext] = (types[ext] || 0) + 1; - } - return types; - } - detectLanguage(filePath) { - const languageMap = { - '.js': 'javascript', - '.ts': 'typescript', - '.py': 'python', - '.java': 'java', - '.cs': 'csharp', - '.go': 'go', - '.rs': 'rust', - '.cpp': 'cpp', - '.c': 'c', - '.rb': 'ruby', - '.php': 'php', - '.swift': 'swift', - '.kt': 'kotlin', - '.scala': 'scala', - '.r': 'r', - '.m': 'matlab', - '.jl': 'julia', - '.sh': 'shell', - '.ps1': 'powershell', - '.yml': 'yaml', - '.yaml': 'yaml', - '.json': 'json', - '.xml': 'xml', - '.md': 'markdown' - }; - const ext = filePath.match(/\.[^.]+$/)?.[0]; - return ext ? languageMap[ext] : undefined; - } } //# sourceMappingURL=payloadBuilder.js.map ;// CONCATENATED MODULE: ./dist/utils/blockDetector.js diff --git a/dist/payload/PayloadBuilder.d.ts b/dist/payload/PayloadBuilder.d.ts index 39ff6d8..9dea0bf 100644 --- a/dist/payload/PayloadBuilder.d.ts +++ b/dist/payload/PayloadBuilder.d.ts @@ -1,4 +1,4 @@ -import { ActionConfig, FileMetadata, PurviewPayload, UploadSignalRequest, Activity, PrInfo, ProtectionScopesRequest, ProtectionScopesResponse, SplitPCRequests, ProcessContentBatchRequest, ProcessContentRequest, ScopeCheckResult, PolicyScopes, PolicyLocation } from '../config/types'; +import { ActionConfig, FileMetadata, UploadSignalRequest, Activity, PrInfo, ProtectionScopesRequest, ProtectionScopesResponse, SplitPCRequests, ProcessContentBatchRequest, ProcessContentRequest, ScopeCheckResult, PolicyScopes, PolicyLocation } from '../config/types'; export declare class PayloadBuilder { private readonly config; private readonly logger; @@ -6,8 +6,6 @@ export declare class PayloadBuilder { private static readonly domain; private static readonly scopeActivity; constructor(config: ActionConfig); - build(files: FileMetadata[]): Promise; - private createPayloadObject; buildProtectionScopesRequest(): ProtectionScopesRequest; buildProcessAndUploadRequests(files: FileMetadata[], scopeResponse: ProtectionScopesResponse, prInfo: PrInfo): SplitPCRequests; /** @@ -27,12 +25,5 @@ export declare class PayloadBuilder { buildUploadSignalRequest(files: FileMetadata[], prInfo: PrInfo): UploadSignalRequest[]; buildProcessContentBatchRequest(files: FileMetadata[]): ProcessContentBatchRequest[]; private createContentToProcess; - private createMetadataMessage; - private createFileMessages; - private chunkContent; - private generateConversationId; - private generateMessageId; - private getFileTypes; - private detectLanguage; } //# sourceMappingURL=payloadBuilder.d.ts.map \ No newline at end of file diff --git a/dist/payload/PayloadBuilder.d.ts.map b/dist/payload/PayloadBuilder.d.ts.map index 959b56a..735c4ce 100644 --- a/dist/payload/PayloadBuilder.d.ts.map +++ b/dist/payload/PayloadBuilder.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"payloadBuilder.d.ts","sourceRoot":"","sources":["../../src/payload/payloadBuilder.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,cAAc,EAAkB,mBAAmB,EAAE,QAAQ,EAAe,MAAM,EAAE,uBAAuB,EAAE,wBAAwB,EAAE,eAAe,EAA6B,0BAA0B,EAA6B,qBAAqB,EAAoB,gBAAgB,EAAiB,YAAY,EAAE,cAAc,EAAiB,MAAM,iBAAiB,CAAC;AAG9Z,qBAAa,cAAc;IAMb,OAAO,CAAC,QAAQ,CAAC,MAAM;IALnC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAChC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAmB;IAClD,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAwB;IACtD,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,aAAa,CAA2C;gBAEnD,MAAM,EAAE,YAAY;IAG3C,KAAK,CAAC,KAAK,EAAE,YAAY,EAAE,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC;IA6C7D,OAAO,CAAC,mBAAmB;IAe3B,4BAA4B,IAAI,uBAAuB;IAkBvD,6BAA6B,CAAC,KAAK,EAAE,YAAY,EAAE,EAAE,aAAa,EAAE,wBAAwB,EAAE,MAAM,EAAE,MAAM,GAAG,eAAe;IAiG9H;;;;;;;OAOG;IACH,qBAAqB,CACnB,MAAM,EAAE,YAAY,EAAE,EACtB,eAAe,EAAE,QAAQ,EACzB,eAAe,EAAE,cAAc,GAC9B,gBAAgB;IAoDnB;;OAEG;IACH,iCAAiC,CAAC,IAAI,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,qBAAqB,EAAE;IA0BzH,OAAO,CAAC,aAAa;IAerB,wBAAwB,CAAC,KAAK,EAAE,YAAY,EAAE,EAAE,MAAM,EAAE,MAAM,GAAG,mBAAmB,EAAE;IAiDtF,+BAA+B,CAAC,KAAK,EAAE,YAAY,EAAE,GAAG,0BAA0B,EAAE;IA8DpF,OAAO,CAAC,sBAAsB;IAiD9B,OAAO,CAAC,qBAAqB;YAgBf,kBAAkB;IAwChC,OAAO,CAAC,YAAY;IAWpB,OAAO,CAAC,sBAAsB;IAM9B,OAAO,CAAC,iBAAiB;IAIzB,OAAO,CAAC,YAAY;IAWpB,OAAO,CAAC,cAAc;CA+BvB"} \ No newline at end of file +{"version":3,"file":"payloadBuilder.d.ts","sourceRoot":"","sources":["../../src/payload/payloadBuilder.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,mBAAmB,EAAE,QAAQ,EAAe,MAAM,EAAE,uBAAuB,EAAE,wBAAwB,EAAE,eAAe,EAA6B,0BAA0B,EAA6B,qBAAqB,EAAoB,gBAAgB,EAAiB,YAAY,EAAE,cAAc,EAAiB,MAAM,iBAAiB,CAAC;AAG9X,qBAAa,cAAc;IAMb,OAAO,CAAC,QAAQ,CAAC,MAAM;IALnC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAChC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAmB;IAClD,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAwB;IACtD,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,aAAa,CAA2C;gBAEnD,MAAM,EAAE,YAAY;IAIjD,4BAA4B,IAAI,uBAAuB;IAkBvD,6BAA6B,CAAC,KAAK,EAAE,YAAY,EAAE,EAAE,aAAa,EAAE,wBAAwB,EAAE,MAAM,EAAE,MAAM,GAAG,eAAe;IAiG9H;;;;;;;OAOG;IACH,qBAAqB,CACnB,MAAM,EAAE,YAAY,EAAE,EACtB,eAAe,EAAE,QAAQ,EACzB,eAAe,EAAE,cAAc,GAC9B,gBAAgB;IAoDnB;;OAEG;IACH,iCAAiC,CAAC,IAAI,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,qBAAqB,EAAE;IA0BzH,OAAO,CAAC,aAAa;IAerB,wBAAwB,CAAC,KAAK,EAAE,YAAY,EAAE,EAAE,MAAM,EAAE,MAAM,GAAG,mBAAmB,EAAE;IAiDtF,+BAA+B,CAAC,KAAK,EAAE,YAAY,EAAE,GAAG,0BAA0B,EAAE;IA8DpF,OAAO,CAAC,sBAAsB;CAiD/B"} \ No newline at end of file diff --git a/dist/payload/PayloadBuilder.js b/dist/payload/PayloadBuilder.js index 54e7ce3..7273577 100644 --- a/dist/payload/PayloadBuilder.js +++ b/dist/payload/PayloadBuilder.js @@ -10,55 +10,6 @@ export class PayloadBuilder { this.config = config; this.logger = new Logger('PayloadBuilder'); } - async build(files) { - const conversationId = this.generateConversationId(); - const allMessages = []; - // Add metadata message - allMessages.push(this.createMetadataMessage(files)); - // Add file messages - for (const file of files) { - const fileMessages = await this.createFileMessages(file); - allMessages.push(...fileMessages); - } - // Split messages into payloads of <= maxPayloadSize - const payloads = []; - let currentMessages = []; - let currentSize = 0; - const baseOverhead = 300; // JSON overhead for metadata, conversationId, etc. - for (const msg of allMessages) { - const msgSize = JSON.stringify(msg).length; - if (currentMessages.length > 0 && currentSize + msgSize + baseOverhead > this.maxPayloadSize) { - payloads.push(this.createPayloadObject(conversationId, currentMessages, files.length)); - currentMessages = []; - currentSize = 0; - } - currentMessages.push(msg); - currentSize += msgSize; - } - if (currentMessages.length > 0) { - payloads.push(this.createPayloadObject(conversationId, currentMessages, files.length)); - } - this.logger.debug('Payload built', { - conversationId, - payloadCount: payloads.length, - totalMessages: allMessages.length - }); - return payloads; - } - createPayloadObject(conversationId, messages, fileCount) { - return { - conversationId, - messages, - metadata: { - repository: `${this.config.repository.owner}/${this.config.repository.repo}`, - branch: this.config.repository.branch, - commit: this.config.repository.sha, - runId: this.config.repository.runId, - timestamp: new Date().toISOString(), - fileCount - } - }; - } buildProtectionScopesRequest() { const request = { activities: PayloadBuilder.scopeActivity, @@ -246,7 +197,7 @@ export class PayloadBuilder { } buildUploadSignalRequest(files, prInfo) { const requests = []; - const conversationId = crypto.randomUUID(); + const conversationId = crypto.randomUUID() + '@GA'; let seqNum = 0; for (const file of files) { this.logger.info(`Building upload signal request for file: ${file.path}`); @@ -257,7 +208,7 @@ export class PayloadBuilder { const singleSize = JSON.stringify(singleCTP).length + 200; // account for wrapper fields if (singleSize <= this.maxPayloadSize) { requests.push({ - id: crypto.randomUUID(), + id: crypto.randomUUID() + '@GA', userId, userEmail, scopeIdentifier: "", @@ -274,7 +225,7 @@ export class PayloadBuilder { const isLastChunk = i + maxContentPerChunk >= content.length; const chunkCTP = this.createContentToProcess(file, conversationId, seqNum, !isLastChunk, chunk); requests.push({ - id: crypto.randomUUID(), + id: crypto.randomUUID() + '@GA', userId, userEmail, scopeIdentifier: "", @@ -289,7 +240,7 @@ export class PayloadBuilder { } buildProcessContentBatchRequest(files) { const allItems = []; - const conversationId = crypto.randomUUID(); + const conversationId = crypto.randomUUID() + '@GA'; let seqNum = 0; for (const file of files) { const content = file.content || `File: ${file.path} (${file.size} bytes)`; @@ -386,109 +337,5 @@ export class PayloadBuilder { } }; } - createMetadataMessage(files) { - const summary = { - totalFiles: files.length, - totalSize: files.reduce((sum, f) => sum + f.size, 0), - fileTypes: this.getFileTypes(files), - repository: this.config.repository - }; - return { - id: this.generateMessageId(), - content: JSON.stringify(summary, null, 2), - contentType: 'metadata', - timestamp: new Date().toISOString() - }; - } - async createFileMessages(file) { - const messages = []; - // If content is included and large, chunk it - if (file.content && file.content.length > 50000) { - const chunks = this.chunkContent(file.content); - for (let i = 0; i < chunks.length; i++) { - messages.push({ - id: this.generateMessageId(), - content: chunks[i], // Non-null assertion safe due to chunkContent implementation - contentType: 'file', - timestamp: new Date().toISOString(), - fileInfo: { - path: file.path, - size: file.size, - sha: file.sha, - language: this.detectLanguage(file.path) - } - }); - } - } - else { - // Single message for small files - messages.push({ - id: this.generateMessageId(), - content: file.content || `File: ${file.path} (${file.size} bytes)`, - contentType: 'file', - timestamp: new Date().toISOString(), - fileInfo: { - path: file.path, - size: file.size, - sha: file.sha, - language: this.detectLanguage(file.path) - } - }); - } - return messages; - } - chunkContent(content, chunkSize = 50000) { - const chunks = []; - for (let i = 0; i < content.length; i += chunkSize) { - chunks.push(content.substring(i, i + chunkSize)); - } - return chunks; - } - generateConversationId() { - const timestamp = Date.now(); - const random = Math.random().toString(36).substring(2, 9); - return `conv-${this.config.repository.runId}-${timestamp}-${random}`; - } - generateMessageId() { - return `msg-${Date.now()}-${Math.random().toString(36).substring(2, 9)}`; - } - getFileTypes(files) { - const types = {}; - for (const file of files) { - const ext = file.path.split('.').pop() || 'unknown'; - types[ext] = (types[ext] || 0) + 1; - } - return types; - } - detectLanguage(filePath) { - const languageMap = { - '.js': 'javascript', - '.ts': 'typescript', - '.py': 'python', - '.java': 'java', - '.cs': 'csharp', - '.go': 'go', - '.rs': 'rust', - '.cpp': 'cpp', - '.c': 'c', - '.rb': 'ruby', - '.php': 'php', - '.swift': 'swift', - '.kt': 'kotlin', - '.scala': 'scala', - '.r': 'r', - '.m': 'matlab', - '.jl': 'julia', - '.sh': 'shell', - '.ps1': 'powershell', - '.yml': 'yaml', - '.yaml': 'yaml', - '.json': 'json', - '.xml': 'xml', - '.md': 'markdown' - }; - const ext = filePath.match(/\.[^.]+$/)?.[0]; - return ext ? languageMap[ext] : undefined; - } } //# sourceMappingURL=payloadBuilder.js.map \ No newline at end of file diff --git a/dist/payload/PayloadBuilder.js.map b/dist/payload/PayloadBuilder.js.map index a1c47ba..7a419a1 100644 --- a/dist/payload/PayloadBuilder.js.map +++ b/dist/payload/PayloadBuilder.js.map @@ -1 +1 @@ -{"version":3,"file":"payloadBuilder.js","sourceRoot":"","sources":["../../src/payload/payloadBuilder.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"payloadBuilder.js","sourceRoot":"","sources":["../../src/payload/payloadBuilder.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/dist/utils/types.d.ts b/dist/utils/types.d.ts index 0fbf116..a7c1bb0 100644 --- a/dist/utils/types.d.ts +++ b/dist/utils/types.d.ts @@ -23,61 +23,4 @@ export interface FilePayload { sliceIndex?: number; totalSlices?: number; } -export interface PurviewPayload { - clientInfo: { - clientName: string; - version: string; - ClientIp: string; - }; - messageGroups: PurviewMessageGroup[]; -} -export interface PurviewMessageGroup { - messageGroupId: string; - messageGroupSubject: string; - messageGroupTenantId: string; - messages: PurviewMessage[]; - appHostInfo: PurviewAppHostInfo; - messageGroupParticipants: PurviewParticipant[]; -} -export interface PurviewMessage { - timestamp: string; - lastModifiedDate: string; - messageLocale: string; - messageClientIp: string; - messageId: number; - messageType: number; - messageFrom: PurviewParticipant; - content: PurviewContent[]; - reaction: string; - accessedResources: any[]; - modelInfo: { - modelProviderName: string; - modelName: string; - modelVersion: string; - }; - deviceInfo: { - deviceManagementType: number; - deviceType: string; - operatingSystemPlatform: string; - operatingSystemVersion: string; - }; -} -export interface PurviewParticipant { - tenantId: string; - displayName: string; - recipientType: number; - userPrincipalName: string; -} -export interface PurviewContent { - Id: string; - ContentType: number; - Content: string; -} -export interface PurviewAppHostInfo { - AppHostName: string; - ChildAppHostName: string; - AppHostFQDN: string; - AppHostVersion: string; - ApplicationHostCategories: string[]; -} //# sourceMappingURL=types.d.ts.map \ No newline at end of file diff --git a/dist/utils/types.d.ts.map b/dist/utils/types.d.ts.map index 8ee3f32..b587db1 100644 --- a/dist/utils/types.d.ts.map +++ b/dist/utils/types.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/utils/types.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,YAAY;IAC3B,QAAQ,EAAE,MAAM,CAAC;IACjB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,YAAY,EAAE,MAAM,CAAC;IACrB,eAAe,EAAE,OAAO,CAAC;IACzB,UAAU,EAAE,OAAO,CAAC;IACpB,qBAAqB,EAAE,OAAO,CAAC;IAC/B,MAAM,EAAE,OAAO,CAAC;IAChB,YAAY,EAAE,OAAO,CAAC;IACtB,WAAW,EAAE,MAAM,CAAC;IACpB,yBAAyB,EAAE,MAAM,EAAE,CAAC;IACpC,KAAK,EAAE,OAAO,CAAC;CAChB;AAED,MAAM,WAAW,WAAW;IAC1B,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,OAAO,CAAC;IAClB,QAAQ,EAAE,OAAO,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAID,MAAM,WAAW,cAAc;IAC7B,UAAU,EAAE;QACV,UAAU,EAAE,MAAM,CAAC;QACnB,OAAO,EAAE,MAAM,CAAC;QAChB,QAAQ,EAAE,MAAM,CAAC;KAClB,CAAC;IACF,aAAa,EAAE,mBAAmB,EAAE,CAAC;CACtC;AAED,MAAM,WAAW,mBAAmB;IAClC,cAAc,EAAE,MAAM,CAAC;IACvB,mBAAmB,EAAE,MAAM,CAAC;IAC5B,oBAAoB,EAAE,MAAM,CAAC;IAC7B,QAAQ,EAAE,cAAc,EAAE,CAAC;IAC3B,WAAW,EAAE,kBAAkB,CAAC;IAChC,wBAAwB,EAAE,kBAAkB,EAAE,CAAC;CAChD;AAED,MAAM,WAAW,cAAc;IAC7B,SAAS,EAAE,MAAM,CAAC;IAClB,gBAAgB,EAAE,MAAM,CAAC;IACzB,aAAa,EAAE,MAAM,CAAC;IACtB,eAAe,EAAE,MAAM,CAAC;IACxB,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,kBAAkB,CAAC;IAChC,OAAO,EAAE,cAAc,EAAE,CAAC;IAC1B,QAAQ,EAAE,MAAM,CAAC;IACjB,iBAAiB,EAAE,GAAG,EAAE,CAAC;IACzB,SAAS,EAAE;QACT,iBAAiB,EAAE,MAAM,CAAC;QAC1B,SAAS,EAAE,MAAM,CAAC;QAClB,YAAY,EAAE,MAAM,CAAC;KACtB,CAAC;IACF,UAAU,EAAE;QACV,oBAAoB,EAAE,MAAM,CAAC;QAC7B,UAAU,EAAE,MAAM,CAAC;QACnB,uBAAuB,EAAE,MAAM,CAAC;QAChC,sBAAsB,EAAE,MAAM,CAAC;KAChC,CAAC;CACH;AAED,MAAM,WAAW,kBAAkB;IACjC,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,EAAE,MAAM,CAAC;IACtB,iBAAiB,EAAE,MAAM,CAAC;CAC3B;AAED,MAAM,WAAW,cAAc;IAC7B,EAAE,EAAE,MAAM,CAAC;IACX,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,kBAAkB;IACjC,WAAW,EAAE,MAAM,CAAC;IACpB,gBAAgB,EAAE,MAAM,CAAC;IACzB,WAAW,EAAE,MAAM,CAAC;IACpB,cAAc,EAAE,MAAM,CAAC;IACvB,yBAAyB,EAAE,MAAM,EAAE,CAAC;CACrC"} \ No newline at end of file +{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/utils/types.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,YAAY;IAC3B,QAAQ,EAAE,MAAM,CAAC;IACjB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,YAAY,EAAE,MAAM,CAAC;IACrB,eAAe,EAAE,OAAO,CAAC;IACzB,UAAU,EAAE,OAAO,CAAC;IACpB,qBAAqB,EAAE,OAAO,CAAC;IAC/B,MAAM,EAAE,OAAO,CAAC;IAChB,YAAY,EAAE,OAAO,CAAC;IACtB,WAAW,EAAE,MAAM,CAAC;IACpB,yBAAyB,EAAE,MAAM,EAAE,CAAC;IACpC,KAAK,EAAE,OAAO,CAAC;CAChB;AAED,MAAM,WAAW,WAAW;IAC1B,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,OAAO,CAAC;IAClB,QAAQ,EAAE,OAAO,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB"} \ No newline at end of file diff --git a/src/api/purviewClient.ts b/src/api/purviewClient.ts index 9e6fb01..bb32ac5 100644 --- a/src/api/purviewClient.ts +++ b/src/api/purviewClient.ts @@ -1,4 +1,4 @@ -import { ActionConfig, PurviewPayload, ApiResponse, ProcessContentBatchRequest, ProcessContentRequest, ProcessContentResponse, UploadSignalRequest, ProtectionScopesRequest, ProtectionScopesResponse, GraphUserInfoContainer } from '../config/types'; +import { ActionConfig, ApiResponse, ProcessContentBatchRequest, ProcessContentRequest, ProcessContentResponse, UploadSignalRequest, ProtectionScopesRequest, ProtectionScopesResponse, GraphUserInfoContainer } from '../config/types'; import { Logger } from '../utils/logger'; import { RetryHandler } from '../utils/retryHandler'; @@ -17,32 +17,6 @@ export class PurviewClient { setAuthToken(token: string): void { this.authToken = token; } - - async queueConversationMessage(payload: PurviewPayload): Promise { - if (!this.authToken) { - throw new Error('Authentication token not set'); - } - - this.logger.info(`Queuing conversation message`); - - const endpoint = `${this.baseUrl}/conversations/${payload.conversationId}/messages`; - let payloadString: string = JSON.stringify(payload, this.jsonReplacer); - - try { - const result = await this.retryHandler.executeWithRetry( - async () => this.sendRequest(endpoint, payloadString, 'POST', {}, 'QueueConversationMessage'), - 'QueueConversationMessage' - ); - - return result; - } catch (error) { - this.logger.error('Failed to queue conversation message', { error }); - return { - success: false, - error: error instanceof Error ? error.message : 'Unknown error' - }; - } - } async processContentAsync(payload: ProcessContentBatchRequest): Promise { if (!this.authToken) { diff --git a/src/config/types.ts b/src/config/types.ts index f5af180..015fc6b 100644 --- a/src/config/types.ts +++ b/src/config/types.ts @@ -57,36 +57,6 @@ export interface FileMetadata { commitTimestamp?: string; } -export interface PurviewPayload { - conversationId: string; - messages: PurviewMessage[]; - metadata: PayloadMetadata; -} - -export interface PurviewMessage { - id: string; - content: string; - contentType: 'file' | 'metadata'; - timestamp: string; - fileInfo?: FileInfo; -} - -export interface FileInfo { - path: string; - size: number; - sha: string; - language?: string; -} - -export interface PayloadMetadata { - repository: string; - branch: string; - commit: string; - runId: string; - timestamp: string; - fileCount: number; -} - export interface ApiResponse { success: boolean; data?: T; diff --git a/src/payload/payloadBuilder.ts b/src/payload/payloadBuilder.ts index 25f5487..6b161a7 100644 --- a/src/payload/payloadBuilder.ts +++ b/src/payload/payloadBuilder.ts @@ -1,4 +1,4 @@ -import { ActionConfig, FileMetadata, PurviewPayload, PurviewMessage, UploadSignalRequest, Activity, TextContent, PrInfo, ProtectionScopesRequest, ProtectionScopesResponse, SplitPCRequests, ProtectionScopeActivities, ProcessContentBatchRequest, ProcessContentRequestItem, ProcessContentRequest, ContentToProcess, ScopeCheckResult, ExecutionMode, PolicyScopes, PolicyLocation, DlpActionInfo } from '../config/types'; +import { ActionConfig, FileMetadata, UploadSignalRequest, Activity, TextContent, PrInfo, ProtectionScopesRequest, ProtectionScopesResponse, SplitPCRequests, ProtectionScopeActivities, ProcessContentBatchRequest, ProcessContentRequestItem, ProcessContentRequest, ContentToProcess, ScopeCheckResult, ExecutionMode, PolicyScopes, PolicyLocation, DlpActionInfo } from '../config/types'; import { Logger } from '../utils/logger'; export class PayloadBuilder { @@ -10,65 +10,6 @@ export class PayloadBuilder { constructor(private readonly config: ActionConfig) { this.logger = new Logger('PayloadBuilder'); } - async build(files: FileMetadata[]): Promise { - const conversationId = this.generateConversationId(); - const allMessages: PurviewMessage[] = []; - - // Add metadata message - allMessages.push(this.createMetadataMessage(files)); - - // Add file messages - for (const file of files) { - const fileMessages = await this.createFileMessages(file); - allMessages.push(...fileMessages); - } - - // Split messages into payloads of <= maxPayloadSize - const payloads: PurviewPayload[] = []; - let currentMessages: PurviewMessage[] = []; - let currentSize = 0; - const baseOverhead = 300; // JSON overhead for metadata, conversationId, etc. - - for (const msg of allMessages) { - const msgSize = JSON.stringify(msg).length; - - if (currentMessages.length > 0 && currentSize + msgSize + baseOverhead > this.maxPayloadSize) { - payloads.push(this.createPayloadObject(conversationId, currentMessages, files.length)); - currentMessages = []; - currentSize = 0; - } - - currentMessages.push(msg); - currentSize += msgSize; - } - - if (currentMessages.length > 0) { - payloads.push(this.createPayloadObject(conversationId, currentMessages, files.length)); - } - - this.logger.debug('Payload built', { - conversationId, - payloadCount: payloads.length, - totalMessages: allMessages.length - }); - - return payloads; - } - - private createPayloadObject(conversationId: string, messages: PurviewMessage[], fileCount: number): PurviewPayload { - return { - conversationId, - messages, - metadata: { - repository: `${this.config.repository.owner}/${this.config.repository.repo}`, - branch: this.config.repository.branch, - commit: this.config.repository.sha, - runId: this.config.repository.runId, - timestamp: new Date().toISOString(), - fileCount - } - }; - } buildProtectionScopesRequest(): ProtectionScopesRequest { const request: ProtectionScopesRequest = { @@ -295,7 +236,7 @@ export class PayloadBuilder { buildUploadSignalRequest(files: FileMetadata[], prInfo: PrInfo): UploadSignalRequest[] { const requests: UploadSignalRequest[] = []; - const conversationId = crypto.randomUUID(); + const conversationId = crypto.randomUUID()+ '@GA'; let seqNum = 0; for (const file of files) { @@ -310,7 +251,7 @@ export class PayloadBuilder { if (singleSize <= this.maxPayloadSize) { requests.push({ - id: crypto.randomUUID(), + id: crypto.randomUUID()+ '@GA', userId, userEmail, scopeIdentifier: "", @@ -327,7 +268,7 @@ export class PayloadBuilder { const isLastChunk = i + maxContentPerChunk >= content.length; const chunkCTP = this.createContentToProcess(file, conversationId, seqNum, !isLastChunk, chunk); requests.push({ - id: crypto.randomUUID(), + id: crypto.randomUUID()+ '@GA', userId, userEmail, scopeIdentifier: "", @@ -344,7 +285,7 @@ export class PayloadBuilder { buildProcessContentBatchRequest(files: FileMetadata[]): ProcessContentBatchRequest[] { const allItems: ProcessContentRequestItem[] = []; - const conversationId = crypto.randomUUID(); + const conversationId = crypto.randomUUID()+ '@GA'; let seqNum = 0; for (const file of files) { @@ -453,123 +394,4 @@ export class PayloadBuilder { }; } - private createMetadataMessage(files: FileMetadata[]): PurviewMessage { - const summary = { - totalFiles: files.length, - totalSize: files.reduce((sum, f) => sum + f.size, 0), - fileTypes: this.getFileTypes(files), - repository: this.config.repository - }; - - return { - id: this.generateMessageId(), - content: JSON.stringify(summary, null, 2), - contentType: 'metadata', - timestamp: new Date().toISOString() - }; - } - - private async createFileMessages(file: FileMetadata): Promise { - const messages: PurviewMessage[] = []; - - // If content is included and large, chunk it - if (file.content && file.content.length > 50000) { - const chunks = this.chunkContent(file.content); - - for (let i = 0; i < chunks.length; i++) { - messages.push({ - id: this.generateMessageId(), - content: chunks[i]!, // Non-null assertion safe due to chunkContent implementation - contentType: 'file', - timestamp: new Date().toISOString(), - fileInfo: { - path: file.path, - size: file.size, - sha: file.sha, - language: this.detectLanguage(file.path) - } - }); - } - } else { - // Single message for small files - messages.push({ - id: this.generateMessageId(), - content: file.content || `File: ${file.path} (${file.size} bytes)`, - contentType: 'file', - timestamp: new Date().toISOString(), - fileInfo: { - path: file.path, - size: file.size, - sha: file.sha, - language: this.detectLanguage(file.path) - } - }); - } - - return messages; - } - - private chunkContent(content: string, chunkSize: number = 50000): string[] { - const chunks: string[] = []; - - for (let i = 0; i < content.length; i += chunkSize) { - chunks.push(content.substring(i, i + chunkSize)); - } - - return chunks; - } - - - private generateConversationId(): string { - const timestamp = Date.now(); - const random = Math.random().toString(36).substring(2, 9); - return `conv-${this.config.repository.runId}-${timestamp}-${random}`; - } - - private generateMessageId(): string { - return `msg-${Date.now()}-${Math.random().toString(36).substring(2, 9)}`; - } - - private getFileTypes(files: FileMetadata[]): Record { - const types: Record = {}; - - for (const file of files) { - const ext = file.path.split('.').pop() || 'unknown'; - types[ext] = (types[ext] || 0) + 1; - } - - return types; - } - - private detectLanguage(filePath: string): string | undefined { - const languageMap: Record = { - '.js': 'javascript', - '.ts': 'typescript', - '.py': 'python', - '.java': 'java', - '.cs': 'csharp', - '.go': 'go', - '.rs': 'rust', - '.cpp': 'cpp', - '.c': 'c', - '.rb': 'ruby', - '.php': 'php', - '.swift': 'swift', - '.kt': 'kotlin', - '.scala': 'scala', - '.r': 'r', - '.m': 'matlab', - '.jl': 'julia', - '.sh': 'shell', - '.ps1': 'powershell', - '.yml': 'yaml', - '.yaml': 'yaml', - '.json': 'json', - '.xml': 'xml', - '.md': 'markdown' - }; - - const ext = filePath.match(/\.[^.]+$/)?.[0]; - return ext ? languageMap[ext] : undefined; - } } \ No newline at end of file diff --git a/src/purview/client.ts b/src/purview/client.ts deleted file mode 100644 index 366d762..0000000 --- a/src/purview/client.ts +++ /dev/null @@ -1,85 +0,0 @@ -import axios, { AxiosError } from 'axios'; -import { Logger } from '../utils/logger'; -import { ActionConfig, PurviewPayload } from '../utils/types'; - -export async function postToPurview( - payload: PurviewPayload, - token: string, - config: ActionConfig, - logger: Logger, - maxRetries: number = 3 -): Promise<{ success: boolean; groupId: string | null }> { - - const groupId = payload.messageGroups?.[0]?.messageGroupId ?? null; - logger.startGroup(`Submitting Batch to Purview API (Group ID: ${groupId})`); - logger.debug(`Endpoint: ${config.endpoint}`); - logger.debug(`Payload contains ${payload.messageGroups[0]?.messages?.length ?? 0} messages.`); - if (config.debug) { - // Stringify with a replacer to handle potential circular references safely - const cache = new Set(); - const payloadString = JSON.stringify(payload, (_key, value) => { - if (typeof value === 'object' && value !== null) { - if (cache.has(value)) return '[Circular]'; - cache.add(value); - } - return value; - }, 2); - logger.debug(`Payload content: ${payloadString}`); - } - - let attempt = 0; - while (attempt < maxRetries) { - attempt++; - logger.info(`Attempting to POST to Purview API (Attempt ${attempt}/${maxRetries})...`); - - try { - const startTime = Date.now(); - const response = await axios.post(config.endpoint, payload, { - headers: { - 'Authorization': `Bearer ${token}`, - 'Content-Type': 'application/json; charset=utf-8', - }, - timeout: 60000, // 60 second timeout - }); - const duration = Date.now() - startTime; - - logger.info(`API call successful. Status: ${response.status} ${response.statusText}. Duration: ${duration}ms`); - logger.endGroup(); - return { success: true, groupId }; - - } catch (error) { - const axiosError = error as AxiosError; - if (axiosError.response) { - logger.error(`HTTP Error: ${axiosError.response.status} ${axiosError.response.statusText}`); - logger.error(`Response Body: ${JSON.stringify(axiosError.response.data)}`); - // Do not retry on 4xx client errors (except 429 which we might later) - if (axiosError.response.status >= 400 && axiosError.response.status < 500) { - if (config.failOnNon2xx) { - throw new Error(`Purview API returned a client error: ${axiosError.response.status}`); - } - logger.endGroup(); - return { success: false, groupId }; - } - } else if (axiosError.request) { - logger.error('Network Error: No response received from Purview endpoint. Check connectivity and endpoint URL.'); - } else { - logger.error(`Request Setup Error: ${axiosError.message}`); - } - - if (attempt >= maxRetries) { - break; // Exit loop if max retries reached - } - - const delay = Math.pow(2, attempt) * 1000; // Exponential backoff - logger.info(`Retrying in ${delay / 1000} seconds...`); - await new Promise(resolve => setTimeout(resolve, delay)); - } - } - - logger.error('Max retries reached. Aborting submission.'); - logger.endGroup(); - if (config.failOnNon2xx) { - throw new Error('Failed to send data to Purview after multiple retries.'); - } - return { success: false, groupId }; -} \ No newline at end of file diff --git a/src/purview/payloadBuilder.ts b/src/purview/payloadBuilder.ts deleted file mode 100644 index 80e4908..0000000 --- a/src/purview/payloadBuilder.ts +++ /dev/null @@ -1,74 +0,0 @@ -import * as github from '@actions/github'; -import { randomUUID } from 'crypto'; -import { ActionConfig, FilePayload, PurviewContent, PurviewMessage, PurviewMessageGroup, PurviewParticipant, PurviewPayload } from '../utils/types'; - -function createParticipant(config: ActionConfig): PurviewParticipant { - return { - tenantId: config.tenantId, - displayName: config.userPrincipalName.split('@')[0] || '', // Best effort display name from UPN - recipientType: 0, // 0 for User - userPrincipalName: config.userPrincipalName, - }; -} - -function createFileContent(payload: FilePayload): PurviewContent { - return { - Id: randomUUID(), - ContentType: 0, // 0 for Raw text/base64 - Content: payload.content, - }; -} - -export function buildPurviewPayload(filePayloads: FilePayload[], config: ActionConfig): PurviewPayload { - const now = new Date().toISOString(); - const participant = createParticipant(config); - const { GITHUB_SERVER_URL, GITHUB_REPOSITORY, GITHUB_SHA, GITHUB_REF_NAME } = process.env; - - const messages: PurviewMessage[] = filePayloads.map((fp, index) => { - return { - timestamp: now, - lastModifiedDate: now, - messageLocale: 'en-US', - messageClientIp: '', - messageId: index, // Simple index within the batch - messageType: 1, // 1 for Standard - messageFrom: participant, - content: [createFileContent(fp)], - reaction: '', - accessedResources: [], - modelInfo: { modelProviderName: '', modelName: '', modelVersion: '' }, - deviceInfo: { - deviceManagementType: 0, - deviceType: 'PC', - operatingSystemPlatform: 'Service', - operatingSystemVersion: '', - }, - }; - }); - - const messageGroup: PurviewMessageGroup = { - messageGroupId: `${github.context.runId}-${github.context.runAttempt}`, - messageGroupSubject: `Commit ${GITHUB_SHA?.slice(0, 7)} to ${GITHUB_REPOSITORY} on branch ${GITHUB_REF_NAME}`, - messageGroupTenantId: config.tenantId, - messages: messages, - appHostInfo: { - AppHostName: config.appHostName, - ChildAppHostName: '', - AppHostFQDN: `${GITHUB_SERVER_URL}/${GITHUB_REPOSITORY}`, - AppHostVersion: '1.0.0', // Version of this action - ApplicationHostCategories: config.applicationHostCategories, - }, - messageGroupParticipants: [participant], - }; - - const payload: PurviewPayload = { - clientInfo: { - clientName: 'purview-github-action', - version: '1.0', - ClientIp: '', // Left blank for service-to-service - }, - messageGroups: [messageGroup], - }; - - return payload; -} \ No newline at end of file diff --git a/src/utils/types.ts b/src/utils/types.ts index a41e3b7..f0a5042 100644 --- a/src/utils/types.ts +++ b/src/utils/types.ts @@ -25,69 +25,4 @@ export interface FilePayload { isSliced: boolean; sliceIndex?: number; totalSlices?: number; -} - -// --- Purview API Payload Types --- - -export interface PurviewPayload { - clientInfo: { - clientName: string; - version: string; - ClientIp: string; - }; - messageGroups: PurviewMessageGroup[]; -} - -export interface PurviewMessageGroup { - messageGroupId: string; - messageGroupSubject: string; - messageGroupTenantId: string; - messages: PurviewMessage[]; - appHostInfo: PurviewAppHostInfo; - messageGroupParticipants: PurviewParticipant[]; -} - -export interface PurviewMessage { - timestamp: string; - lastModifiedDate: string; - messageLocale: string; - messageClientIp: string; - messageId: number; - messageType: number; - messageFrom: PurviewParticipant; - content: PurviewContent[]; - reaction: string; - accessedResources: any[]; - modelInfo: { - modelProviderName: string; - modelName: string; - modelVersion: string; - }; - deviceInfo: { - deviceManagementType: number; - deviceType: string; - operatingSystemPlatform: string; - operatingSystemVersion: string; - }; -} - -export interface PurviewParticipant { - tenantId: string; - displayName: string; - recipientType: number; - userPrincipalName: string; -} - -export interface PurviewContent { - Id: string; - ContentType: number; // 0 for Raw text/base64 - Content: string; -} - -export interface PurviewAppHostInfo { - AppHostName: string; - ChildAppHostName: string; - AppHostFQDN: string; - AppHostVersion: string; - ApplicationHostCategories: string[]; } \ No newline at end of file diff --git a/tests/api/purviewClient.test.ts b/tests/api/purviewClient.test.ts index 7451fe5..58240a6 100644 --- a/tests/api/purviewClient.test.ts +++ b/tests/api/purviewClient.test.ts @@ -9,7 +9,7 @@ jest.mock('@actions/core', () => ({ })); import { PurviewClient } from '../../src/api/purviewClient'; -import { ActionConfig, PurviewPayload, ProcessContentBatchRequest, UploadSignalRequest } from '../../src/config/types'; +import { ActionConfig, ProcessContentBatchRequest, UploadSignalRequest } from '../../src/config/types'; function createConfig(overrides: Partial = {}): ActionConfig { return { @@ -71,50 +71,6 @@ describe('PurviewClient', () => { }); }); - describe('queueConversationMessage', () => { - it('throws when auth token is not set', async () => { - const payload: PurviewPayload = { - conversationId: 'conv-1', - messages: [], - metadata: { - repository: 'o/r', - branch: 'main', - commit: 'sha1', - runId: '1', - timestamp: new Date().toISOString(), - fileCount: 0, - }, - }; - - await expect(client.queueConversationMessage(payload)).rejects.toThrow( - 'Authentication token not set' - ); - }); - - it('sends POST to correct endpoint', async () => { - client.setAuthToken('token'); - mockFetch({ status: 200, body: {} }); - - const payload: PurviewPayload = { - conversationId: 'conv-123', - messages: [], - metadata: { - repository: 'o/r', - branch: 'main', - commit: 'sha1', - runId: '1', - timestamp: new Date().toISOString(), - fileCount: 0, - }, - }; - - await client.queueConversationMessage(payload); - expect(globalThis.fetch).toHaveBeenCalled(); - const callUrl = (globalThis.fetch as jest.Mock).mock.calls[0][0]; - expect(callUrl).toContain('/conversations/conv-123/messages'); - }); - }); - describe('processContentAsync', () => { it('throws when auth token is not set', async () => { const payload: ProcessContentBatchRequest = { processContentRequests: [] }; diff --git a/tests/payload/payloadBuilder.test.ts b/tests/payload/payloadBuilder.test.ts index 419d88d..fcc568b 100644 --- a/tests/payload/payloadBuilder.test.ts +++ b/tests/payload/payloadBuilder.test.ts @@ -73,68 +73,6 @@ describe('PayloadBuilder', () => { builder = new PayloadBuilder(createConfig()); }); - describe('build', () => { - it('builds payload with metadata and file messages', async () => { - const files = [createFile()]; - const payloads = await builder.build(files); - - expect(payloads.length).toBeGreaterThanOrEqual(1); - const payload = payloads[0]!; - expect(payload.conversationId).toBeTruthy(); - expect(payload.conversationId).toMatch(/^conv-/); - expect(payload.messages.length).toBeGreaterThanOrEqual(2); // metadata + file - expect(payload.metadata.repository).toBe('testOwner/testRepo'); - expect(payload.metadata.branch).toBe('main'); - expect(payload.metadata.commit).toBe('abc123'); - expect(payload.metadata.fileCount).toBe(1); - }); - - it('includes metadata message with file summary', async () => { - const files = [ - createFile({ path: 'a.ts', size: 100 }), - createFile({ path: 'b.js', size: 200 }), - ]; - const payloads = await builder.build(files); - - const allMessages = payloads.flatMap(p => p.messages); - const metadataMsg = allMessages.find(m => m.contentType === 'metadata'); - expect(metadataMsg).toBeDefined(); - const content = JSON.parse(metadataMsg!.content); - expect(content.totalFiles).toBe(2); - expect(content.totalSize).toBe(300); - }); - - it('chunks large file content', async () => { - const largeContent = 'x'.repeat(120000); - const files = [createFile({ content: largeContent })]; - const payloads = await builder.build(files); - - const fileMessages = payloads.flatMap(p => p.messages).filter(m => m.contentType === 'file'); - expect(fileMessages.length).toBeGreaterThan(1); - }); - - it('splits into multiple payloads when exceeding 3MB', async () => { - const hugeContent = 'y'.repeat(2000000); - const files = Array.from({ length: 5 }, (_, i) => - createFile({ path: `file${i}.ts`, content: hugeContent }) - ); - - const payloads = await builder.build(files); - // Should be split into multiple payloads, none truncated - expect(payloads.length).toBeGreaterThan(1); - for (const payload of payloads) { - const payloadSize = JSON.stringify(payload).length; - expect(payloadSize).toBeLessThanOrEqual(1024 * 1024 * 3 + 1000); // 3MB + small tolerance for single large messages - } - // No content should be truncated - const allMessages = payloads.flatMap(p => p.messages); - const truncatedMessages = allMessages.filter( - m => m.contentType === 'file' && m.content.includes('[truncated]') - ); - expect(truncatedMessages.length).toBe(0); - }); - }); - describe('buildProtectionScopesRequest', () => { it('returns request with uploadText activity', () => { const request = builder.buildProtectionScopesRequest(); From 48b42d72cb4d1fb3204c1dd7326845ff42922f95 Mon Sep 17 00:00:00 2001 From: "redmond\\richawla" Date: Thu, 26 Mar 2026 13:27:06 -0700 Subject: [PATCH 02/20] Sanitize Urls --- dist/api/PurviewClient.d.ts | 1 + dist/api/PurviewClient.d.ts.map | 2 +- dist/api/PurviewClient.js | 5 ++++- dist/api/PurviewClient.js.map | 2 +- dist/index.js | 5 ++++- src/api/purviewClient.ts | 6 +++++- 6 files changed, 16 insertions(+), 5 deletions(-) diff --git a/dist/api/PurviewClient.d.ts b/dist/api/PurviewClient.d.ts index 975eb30..90571c8 100644 --- a/dist/api/PurviewClient.d.ts +++ b/dist/api/PurviewClient.d.ts @@ -16,6 +16,7 @@ export declare class PurviewClient { private sendRequest; private jsonReplacer; private generateRequestId; + private sanitizeEndpoint; private sanitizeErrorResponse; } //# sourceMappingURL=purviewClient.d.ts.map \ No newline at end of file diff --git a/dist/api/PurviewClient.d.ts.map b/dist/api/PurviewClient.d.ts.map index f8fe4cc..7dba5c9 100644 --- a/dist/api/PurviewClient.d.ts.map +++ b/dist/api/PurviewClient.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"purviewClient.d.ts","sourceRoot":"","sources":["../../src/api/purviewClient.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,0BAA0B,EAAE,qBAAqB,EAAE,sBAAsB,EAAE,mBAAmB,EAAE,uBAAuB,EAAE,wBAAwB,EAAE,sBAAsB,EAAE,MAAM,iBAAiB,CAAC;AAIvO,qBAAa,aAAa;IAMZ,OAAO,CAAC,QAAQ,CAAC,MAAM;IALnC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAChC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAe;IAC5C,OAAO,CAAC,SAAS,CAAuB;IACxC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;gBAEJ,MAAM,EAAE,YAAY;IAMjD,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAI3B,mBAAmB,CAAC,OAAO,EAAE,0BAA0B,GAAG,OAAO,CAAC,WAAW,CAAC;IA2B9E,cAAc,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,qBAAqB,EAAE,eAAe,EAAE,MAAM,EAAE,MAAM,GAAE,OAAc,GAAG,OAAO,CAAC,WAAW,CAAC,sBAAsB,CAAC,CAAC;IAmC7J,YAAY,CAAC,OAAO,EAAE,mBAAmB,GAAG,OAAO,CAAC,WAAW,CAAC;IA0BhE,2BAA2B,CAAC,OAAO,EAAE,uBAAuB,GAAG,OAAO,CAAC,WAAW,CAAC,wBAAwB,CAAC,CAAC;IA8B7G,yBAAyB,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,uBAAuB,GAAG,OAAO,CAAC,WAAW,CAAC,wBAAwB,CAAC,CAAC;IA8B3H,WAAW,CAAC,UAAU,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,WAAW,CAAC,sBAAsB,CAAC,CAAC;YA6BvE,WAAW;IA4EzB,OAAO,CAAC,YAAY;IAQpB,OAAO,CAAC,iBAAiB;IAIzB,OAAO,CAAC,qBAAqB;CAS9B"} \ No newline at end of file +{"version":3,"file":"purviewClient.d.ts","sourceRoot":"","sources":["../../src/api/purviewClient.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,0BAA0B,EAAE,qBAAqB,EAAE,sBAAsB,EAAE,mBAAmB,EAAE,uBAAuB,EAAE,wBAAwB,EAAE,sBAAsB,EAAE,MAAM,iBAAiB,CAAC;AAIvO,qBAAa,aAAa;IAMZ,OAAO,CAAC,QAAQ,CAAC,MAAM;IALnC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAChC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAe;IAC5C,OAAO,CAAC,SAAS,CAAuB;IACxC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;gBAEJ,MAAM,EAAE,YAAY;IAMjD,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAI3B,mBAAmB,CAAC,OAAO,EAAE,0BAA0B,GAAG,OAAO,CAAC,WAAW,CAAC;IA2B9E,cAAc,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,qBAAqB,EAAE,eAAe,EAAE,MAAM,EAAE,MAAM,GAAE,OAAc,GAAG,OAAO,CAAC,WAAW,CAAC,sBAAsB,CAAC,CAAC;IAmC7J,YAAY,CAAC,OAAO,EAAE,mBAAmB,GAAG,OAAO,CAAC,WAAW,CAAC;IA0BhE,2BAA2B,CAAC,OAAO,EAAE,uBAAuB,GAAG,OAAO,CAAC,WAAW,CAAC,wBAAwB,CAAC,CAAC;IA8B7G,yBAAyB,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,uBAAuB,GAAG,OAAO,CAAC,WAAW,CAAC,wBAAwB,CAAC,CAAC;IA8B3H,WAAW,CAAC,UAAU,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,WAAW,CAAC,sBAAsB,CAAC,CAAC;YA6BvE,WAAW;IA4EzB,OAAO,CAAC,YAAY;IAQpB,OAAO,CAAC,iBAAiB;IAIzB,OAAO,CAAC,gBAAgB;IAIxB,OAAO,CAAC,qBAAqB;CAS9B"} \ No newline at end of file diff --git a/dist/api/PurviewClient.js b/dist/api/PurviewClient.js index 5dbc350..b941d03 100644 --- a/dist/api/PurviewClient.js +++ b/dist/api/PurviewClient.js @@ -155,7 +155,7 @@ export class PurviewClient { }; this.logger.startGroup('Purview API Request'); this.logger.debug('Sending request', { - endpoint, + endpoint: this.sanitizeEndpoint(endpoint), payloadSize: JSON.stringify(payload).length }); try { @@ -224,6 +224,9 @@ export class PurviewClient { generateRequestId() { return `${this.config.repository.runId}-${Date.now()}-${Math.random().toString(36).substr(2, 9)}`; } + sanitizeEndpoint(endpoint) { + return endpoint.replace(/[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}/gi, ''); + } sanitizeErrorResponse(response) { // Remove any potential sensitive data from error responses const sanitized = response diff --git a/dist/api/PurviewClient.js.map b/dist/api/PurviewClient.js.map index 5fe2319..e643dd4 100644 --- a/dist/api/PurviewClient.js.map +++ b/dist/api/PurviewClient.js.map @@ -1 +1 @@ -{"version":3,"file":"purviewClient.js","sourceRoot":"","sources":["../../src/api/purviewClient.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"purviewClient.js","sourceRoot":"","sources":["../../src/api/purviewClient.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/dist/index.js b/dist/index.js index 4508377..df035be 100644 --- a/dist/index.js +++ b/dist/index.js @@ -62135,7 +62135,7 @@ class PurviewClient { }; this.logger.startGroup('Purview API Request'); this.logger.debug('Sending request', { - endpoint, + endpoint: this.sanitizeEndpoint(endpoint), payloadSize: JSON.stringify(payload).length }); try { @@ -62204,6 +62204,9 @@ class PurviewClient { generateRequestId() { return `${this.config.repository.runId}-${Date.now()}-${Math.random().toString(36).substr(2, 9)}`; } + sanitizeEndpoint(endpoint) { + return endpoint.replace(/[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}/gi, ''); + } sanitizeErrorResponse(response) { // Remove any potential sensitive data from error responses const sanitized = response diff --git a/src/api/purviewClient.ts b/src/api/purviewClient.ts index bb32ac5..a3f688d 100644 --- a/src/api/purviewClient.ts +++ b/src/api/purviewClient.ts @@ -206,7 +206,7 @@ export class PurviewClient { this.logger.startGroup('Purview API Request'); this.logger.debug('Sending request', { - endpoint, + endpoint: this.sanitizeEndpoint(endpoint), payloadSize: JSON.stringify(payload).length }); @@ -282,6 +282,10 @@ export class PurviewClient { private generateRequestId(): string { return `${this.config.repository.runId}-${Date.now()}-${Math.random().toString(36).substr(2, 9)}`; } + + private sanitizeEndpoint(endpoint: string): string { + return endpoint.replace(/[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}/gi, ''); + } private sanitizeErrorResponse(response: string): string { // Remove any potential sensitive data from error responses From f9f351f59f95d66b7376da52102be9d9e7d0bd34 Mon Sep 17 00:00:00 2001 From: Rishabh Chawla Date: Tue, 31 Mar 2026 17:40:10 -0700 Subject: [PATCH 03/20] Add git committer info and git commit info --- dist/config/types.d.ts | 34 +- dist/config/types.d.ts.map | 2 +- dist/config/types.js.map | 2 +- dist/file/FileProcessor.d.ts | 2 +- dist/file/FileProcessor.d.ts.map | 2 +- dist/file/FileProcessor.js | 63 +- dist/file/FileProcessor.js.map | 2 +- dist/index.js | 25928 +++++++++++---------- dist/payload/PayloadBuilder.d.ts | 25 +- dist/payload/PayloadBuilder.d.ts.map | 2 +- dist/payload/PayloadBuilder.js | 173 +- dist/payload/PayloadBuilder.js.map | 2 +- dist/runner/GitHubActionsRunner.d.ts | 16 + dist/runner/GitHubActionsRunner.d.ts.map | 2 +- dist/runner/GitHubActionsRunner.js | 420 +- dist/runner/GitHubActionsRunner.js.map | 2 +- dist/runner/fullScanService.d.ts | 4 +- dist/runner/fullScanService.d.ts.map | 2 +- dist/runner/fullScanService.js.map | 2 +- flow.md | 53 +- src/config.ts | 31 - src/config/types.ts | 44 +- src/file/fileProcessor.ts | 72 +- src/git/changedFiles.ts | 29 - src/payload/payloadBuilder.ts | 192 +- src/runner/fullScanService.ts | 10 +- src/runner/gitHubActionsRunner.ts | 556 +- src/utils/fileUtils.ts | 63 - src/utils/types.ts | 28 - tests/payload/payloadBuilder.test.ts | 2 +- tests/utils/fileUtils.test.ts | 107 - 31 files changed, 14262 insertions(+), 13610 deletions(-) delete mode 100644 src/config.ts delete mode 100644 src/git/changedFiles.ts delete mode 100644 src/utils/fileUtils.ts delete mode 100644 src/utils/types.ts delete mode 100644 tests/utils/fileUtils.test.ts diff --git a/dist/config/types.d.ts b/dist/config/types.d.ts index e47ff1a..5bf0328 100644 --- a/dist/config/types.d.ts +++ b/dist/config/types.d.ts @@ -36,6 +36,9 @@ export interface FileMetadata { authorLogin?: string | null | undefined; authorEmail?: string | null | undefined; authorId?: string; + committerLogin?: string | null | undefined; + committerEmail?: string | null | undefined; + committerId?: string; numberOfDeletions?: number; numberOfAdditions?: number; numberOfChanges?: number; @@ -95,8 +98,9 @@ export interface ProcessContentMetadataBase extends GraphDataTypeBase { export interface ProcessConversationMetadata extends ProcessContentMetadataBase { "@odata.type": "microsoft.graph.processConversationMetadata"; parentMessageId?: string; - accessedResources?: string[]; + accessedResources_v2?: AccessedResourceDetails[]; plugins?: AiInteractionPlugin[]; + agents?: AiAgentInfo[]; } export interface ProcessFileMetadata extends ProcessContentMetadataBase { "@odata.type": "microsoft.graph.processFileMetadata"; @@ -155,6 +159,22 @@ export interface AiInteractionPlugin { name: string; version: string; } +export interface AiAgentInfo { + identifier: string; + name?: string; + version?: string; +} +export interface AccessedResourceDetails { + identifier: string; + name: string; + url?: string; + labelId?: string; + accessType?: ResourceAccessType; + status?: ResourceAccessStatus; + isCrossPromptInjectionDetected?: boolean; +} +export type ResourceAccessType = "none" | "read" | "write" | "create" | "unknownFutureValue"; +export type ResourceAccessStatus = "failure" | "success" | "unknownFutureValue"; export interface UploadSignalRequest { id: string; userId: string; @@ -295,10 +315,22 @@ export interface ScopeCheckResult { export interface CommitInfo { sha: string; email: string | undefined; + committerEmail?: string; + message?: string; } export interface CommitFiles { sha: string; files: FileMetadata[]; + message?: string; + authorEmail?: string; + authorLogin?: string; + authorName?: string; + authorId?: string; + committerEmail?: string; + committerLogin?: string; + committerName?: string; + committerId?: string; + timestamp?: string; } export interface UsersConfig { users: UserMapping[]; diff --git a/dist/config/types.d.ts.map b/dist/config/types.d.ts.map index 6f2da3f..ea9e939 100644 --- a/dist/config/types.d.ts.map +++ b/dist/config/types.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/config/types.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/config/types.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/dist/config/types.js.map b/dist/config/types.js.map index 3fece16..0473fb4 100644 --- a/dist/config/types.js.map +++ b/dist/config/types.js.map @@ -1 +1 @@ -{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/config/types.ts"],"names":[],"mappings":"AA4IA,MAAM,CAAN,IAAY,QAMX;AAND,WAAY,QAAQ;IAChB,6CAAW,CAAA;IACX,mDAAc,CAAA;IACd,mDAAc,CAAA;IACd,uDAAgB,CAAA;IAChB,uDAAgB,CAAA;AACpB,CAAC,EANW,QAAQ,KAAR,QAAQ,QAMnB;AAwND,MAAM,CAAN,IAAY,aAGX;AAHD,WAAY,aAAa;IACvB,kDAAiC,CAAA;IACjC,oDAAmC,CAAA;AACrC,CAAC,EAHW,aAAa,KAAb,aAAa,QAGxB"} \ No newline at end of file +{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/config/types.ts"],"names":[],"mappings":"AAgJA,MAAM,CAAN,IAAY,QAMX;AAND,WAAY,QAAQ;IAChB,6CAAW,CAAA;IACX,mDAAc,CAAA;IACd,mDAAc,CAAA;IACd,uDAAgB,CAAA;IAChB,uDAAgB,CAAA;AACpB,CAAC,EANW,QAAQ,KAAR,QAAQ,QAMnB;AA4OD,MAAM,CAAN,IAAY,aAGX;AAHD,WAAY,aAAa;IACvB,kDAAiC,CAAA;IACjC,oDAAmC,CAAA;AACrC,CAAC,EAHW,aAAa,KAAb,aAAa,QAGxB"} \ No newline at end of file diff --git a/dist/file/FileProcessor.d.ts b/dist/file/FileProcessor.d.ts index 6e3d41d..90491df 100644 --- a/dist/file/FileProcessor.d.ts +++ b/dist/file/FileProcessor.d.ts @@ -63,7 +63,7 @@ export declare class FileProcessor { private isCommitEmpty; getCommits(): Promise; getAllPRCommits(): Promise; - getFilesGroupedByCommit(lastProcessedHeadSha?: string | null): Promise; + getFilesGroupedByCommit(lastProcessedHeadSha?: string | null, prefetchedCommits?: CommitInfo[]): Promise; getLatestPushFiles(lastProcessedHeadSha?: string | null): Promise; private getPullRequestFiles; private getFilesFromPatterns; diff --git a/dist/file/FileProcessor.d.ts.map b/dist/file/FileProcessor.d.ts.map index c87c623..9436598 100644 --- a/dist/file/FileProcessor.d.ts.map +++ b/dist/file/FileProcessor.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"fileProcessor.d.ts","sourceRoot":"","sources":["../../src/file/fileProcessor.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAY9F,qBAAa,aAAa;IASZ,OAAO,CAAC,QAAQ,CAAC,MAAM;IARnC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAChC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAuC;IAC/D,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAgB;IAC9C,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAwB;IACpD,OAAO,CAAC,QAAQ,CAAuD;IACvE,2EAA2E;IAC3E,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAkC;gBAEtC,MAAM,EAAE,YAAY;IAQjD;;;;;;OAMG;YACW,cAAc;IA4E5B,OAAO,CAAC,eAAe;IASvB,OAAO,CAAC,iBAAiB;IAIzB,OAAO,CAAC,iBAAiB;IAuBnB,eAAe,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;IAepC,eAAe,IAAI,OAAO,CAAC,YAAY,EAAE,CAAC;IAuEhD;;;OAGG;IACH,OAAO,CAAC,mBAAmB;IAwBrB,gBAAgB,IAAI,OAAO,CAAC,MAAM,CAAC;IAenC,SAAS,IAAI,OAAO,CAAC,MAAM,CAAC;YA8CpB,iBAAiB;IA8D/B;;;;OAIG;YACW,WAAW;IA6BzB;;;;OAIG;YACW,gBAAgB;IAsC9B;;;;OAIG;IACH,OAAO,CAAC,mBAAmB;IAiB3B;;;OAGG;IACH,OAAO,CAAC,YAAY;IAwEpB;;;;;OAKG;IACH,OAAO,CAAC,eAAe;IAmDvB,OAAO,CAAC,aAAa;IAOf,UAAU,IAAI,OAAO,CAAC,UAAU,EAAE,CAAC;IA0CnC,eAAe,IAAI,OAAO,CAAC,UAAU,EAAE,CAAC;IAuBxC,uBAAuB,CAAC,oBAAoB,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;IA2CrF,kBAAkB,CAAC,oBAAoB,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC;YAKzE,mBAAmB;YA4BnB,oBAAoB;CAOnC"} \ No newline at end of file +{"version":3,"file":"fileProcessor.d.ts","sourceRoot":"","sources":["../../src/file/fileProcessor.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAY9F,qBAAa,aAAa;IASZ,OAAO,CAAC,QAAQ,CAAC,MAAM;IARnC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAChC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAuC;IAC/D,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAgB;IAC9C,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAwB;IACpD,OAAO,CAAC,QAAQ,CAAuD;IACvE,2EAA2E;IAC3E,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAkC;gBAEtC,MAAM,EAAE,YAAY;IAQjD;;;;;;OAMG;YACW,cAAc;IA4E5B,OAAO,CAAC,eAAe;IASvB,OAAO,CAAC,iBAAiB;IAIzB,OAAO,CAAC,iBAAiB;IAuBnB,eAAe,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;IAepC,eAAe,IAAI,OAAO,CAAC,YAAY,EAAE,CAAC;IAuEhD;;;OAGG;IACH,OAAO,CAAC,mBAAmB;IAwBrB,gBAAgB,IAAI,OAAO,CAAC,MAAM,CAAC;IAenC,SAAS,IAAI,OAAO,CAAC,MAAM,CAAC;YA8CpB,iBAAiB;IA2E/B;;;;OAIG;YACW,WAAW;IA6BzB;;;;OAIG;YACW,gBAAgB;IAsC9B;;;;OAIG;IACH,OAAO,CAAC,mBAAmB;IAiB3B;;;OAGG;IACH,OAAO,CAAC,YAAY;IAwEpB;;;;;OAKG;IACH,OAAO,CAAC,eAAe;IAmDvB,OAAO,CAAC,aAAa;IAOf,UAAU,IAAI,OAAO,CAAC,UAAU,EAAE,CAAC;IA8CnC,eAAe,IAAI,OAAO,CAAC,UAAU,EAAE,CAAC;IAyBxC,uBAAuB,CAAC,oBAAoB,CAAC,EAAE,MAAM,GAAG,IAAI,EAAE,iBAAiB,CAAC,EAAE,UAAU,EAAE,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;IAkDvH,kBAAkB,CAAC,oBAAoB,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC;YAKzE,mBAAmB;YA4BnB,oBAAoB;CAOnC"} \ No newline at end of file diff --git a/dist/file/FileProcessor.js b/dist/file/FileProcessor.js index 4b9327d..c9da793 100644 --- a/dist/file/FileProcessor.js +++ b/dist/file/FileProcessor.js @@ -273,20 +273,31 @@ export class FileProcessor { url: url, }; } - async getFilesForCommit(commitSha, userId) { + async getFilesForCommit(commitSha, authorId, committerId) { const { data: commit } = await this.octokit.rest.repos.getCommit({ owner: this.config.repository.owner, repo: this.config.repository.repo, ref: commitSha }); + const commitMeta = { + sha: commit.sha, + files: [], + message: commit.commit.message || undefined, + authorEmail: commit.commit.author?.email || undefined, + authorLogin: commit.author?.login || undefined, + authorName: commit.commit.author?.name || undefined, + authorId, + committerEmail: commit.commit.committer?.email || undefined, + committerLogin: commit.committer?.login || undefined, + committerName: commit.commit.committer?.name || undefined, + committerId, + timestamp: commit.commit.author?.date || commit.commit.committer?.date || undefined, + }; if (!commit.files || commit.files.length === 0) { this.logger.warn(`No files found in commit: ${commit.sha}`); - return []; + return commitMeta; } this.logger.info(`Processing commit ${commit.sha} with ${commit.files.length} changed file(s).`); - let fileMetadata = []; - const token = await this.authService.getToken(); - this.purviewClient.setAuthToken(token.accessToken); const filteredCommitFiles = commit.files.filter((f) => this.shouldIncludePath(f.filename)); this.logger.info(`Commit ${commit.sha}: ${filteredCommitFiles.length}/${commit.files.length} files match the configured patterns.`); for (const file of filteredCommitFiles) { @@ -312,16 +323,19 @@ export class FileProcessor { content: fileContent, authorLogin: commit.author?.login || commit.committer?.login || null, authorEmail: commit.commit.author?.email || commit.commit.committer?.email || null, - authorId: userId, + authorId, + committerLogin: commit.committer?.login || commit.author?.login || null, + committerEmail: commit.commit.committer?.email || commit.commit.author?.email || null, + committerId, numberOfDeletions: file.deletions, numberOfAdditions: file.additions, numberOfChanges: file.changes, typeOfChange: file.status, commitTimestamp: commit.commit.author?.date || commit.commit.committer?.date }; - fileMetadata.push(metadata); + commitMeta.files.push(metadata); } - return fileMetadata; + return commitMeta; } /** * Computes a unified diff for a file when the commit API omits the patch. @@ -545,6 +559,8 @@ export class FileProcessor { const commitInfos = commits.map((commit) => ({ sha: commit.id, email: commit.author?.email || commit.committer?.email || undefined, + committerEmail: commit.committer?.email || undefined, + message: commit.message || undefined, })); return commitInfos; } @@ -564,7 +580,9 @@ export class FileProcessor { }); const commitInfos = comparison.commits.map((commit) => ({ sha: commit.sha, - email: commit.commit.author?.email || commit.commit.committer?.email || undefined + email: commit.commit.author?.email || commit.commit.committer?.email || undefined, + committerEmail: commit.commit.committer?.email || undefined, + message: commit.commit.message || undefined, })); return commitInfos; } @@ -585,13 +603,15 @@ export class FileProcessor { }); const commitInfos = commits.map((commit) => ({ sha: commit.sha, - email: commit.commit.author?.email || commit.commit.committer?.email || undefined + email: commit.commit.author?.email || commit.commit.committer?.email || undefined, + committerEmail: commit.commit.committer?.email || undefined, + message: commit.commit.message || undefined, })); this.logger.info(`Found ${commitInfos.length} total commit(s) in PR #${pr.number}`); return commitInfos; } - async getFilesGroupedByCommit(lastProcessedHeadSha) { - const allCommits = await this.getCommits(); + async getFilesGroupedByCommit(lastProcessedHeadSha, prefetchedCommits) { + const allCommits = prefetchedCommits ?? await this.getCommits(); // Find commits to process by skipping everything up to and including lastProcessedHeadSha let commitsToProcess = allCommits; if (lastProcessedHeadSha) { @@ -608,14 +628,17 @@ export class FileProcessor { this.logger.info('No new commits to process'); return []; } - // Resolve all author emails to user IDs up front - const commitAuthorEmails = new Set(); + // Resolve all author and committer emails to user IDs up front + const allEmails = new Set(); for (const commit of commitsToProcess) { if (commit.email) { - commitAuthorEmails.add(commit.email.toLowerCase()); + allEmails.add(commit.email.toLowerCase()); + } + if (commit.committerEmail) { + allEmails.add(commit.committerEmail.toLowerCase()); } } - const userIdMap = await this.resolveUserIds(commitAuthorEmails); + const userIdMap = await this.resolveUserIds(allEmails); const result = []; for (const commit of commitsToProcess) { this.logger.info(`Processing commit: ${commit.sha}`); @@ -623,8 +646,12 @@ export class FileProcessor { if (commit.email) { userId = userIdMap[commit.email.toLowerCase()] || this.config.userId; } - const files = await this.getFilesForCommit(commit.sha, userId); - result.push({ sha: commit.sha, files }); + let committerId; + if (commit.committerEmail) { + committerId = userIdMap[commit.committerEmail.toLowerCase()] || this.config.userId; + } + const commitFiles = await this.getFilesForCommit(commit.sha, userId, committerId); + result.push(commitFiles); } return result; } diff --git a/dist/file/FileProcessor.js.map b/dist/file/FileProcessor.js.map index b1e09f0..ad00b0f 100644 --- a/dist/file/FileProcessor.js.map +++ b/dist/file/FileProcessor.js.map @@ -1 +1 @@ -{"version":3,"file":"fileProcessor.js","sourceRoot":"","sources":["../../src/file/fileProcessor.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"fileProcessor.js","sourceRoot":"","sources":["../../src/file/fileProcessor.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/dist/index.js b/dist/index.js index df035be..926c621 100644 --- a/dist/index.js +++ b/dist/index.js @@ -44695,298 +44695,298 @@ var ExecutionMode; ;// CONCATENATED MODULE: ./node_modules/@azure/msal-common/dist/utils/Constants.mjs /*! @azure/msal-common v16.3.0 2026-03-13 */ -/* - * Copyright (c) Microsoft Corporation. All rights reserved. - * Licensed under the MIT License. - */ -const SKU = "msal.js.common"; -// default authority -const DEFAULT_AUTHORITY = "https://login.microsoftonline.com/common/"; -const DEFAULT_AUTHORITY_HOST = "login.microsoftonline.com"; -const DEFAULT_COMMON_TENANT = "common"; -// ADFS String -const ADFS = "adfs"; -const DSTS = "dstsv2"; -// Default AAD Instance Discovery Endpoint -const AAD_INSTANCE_DISCOVERY_ENDPT = `${DEFAULT_AUTHORITY}discovery/instance?api-version=1.1&authorization_endpoint=`; -// CIAM URL -const CIAM_AUTH_URL = ".ciamlogin.com"; -const AAD_TENANT_DOMAIN_SUFFIX = ".onmicrosoft.com"; -// Resource delimiter - used for certain cache entries -const Constants_RESOURCE_DELIM = "|"; -// Consumer UTID -const CONSUMER_UTID = "9188040d-6c67-4c5b-b112-36a304b66dad"; -// Default scopes -const OPENID_SCOPE = "openid"; -const PROFILE_SCOPE = "profile"; -const OFFLINE_ACCESS_SCOPE = "offline_access"; -const EMAIL_SCOPE = "email"; -const CODE_GRANT_TYPE = "authorization_code"; -const S256_CODE_CHALLENGE_METHOD = "S256"; -const URL_FORM_CONTENT_TYPE = "application/x-www-form-urlencoded;charset=utf-8"; -const AUTHORIZATION_PENDING = "authorization_pending"; -const NOT_APPLICABLE = "N/A"; -const NOT_AVAILABLE = "Not Available"; -const FORWARD_SLASH = "/"; -const IMDS_ENDPOINT = "http://169.254.169.254/metadata/instance/compute/location"; -const IMDS_VERSION = "2020-06-01"; -const IMDS_TIMEOUT = 2000; -const AZURE_REGION_AUTO_DISCOVER_FLAG = "TryAutoDetect"; -const REGIONAL_AUTH_PUBLIC_CLOUD_SUFFIX = "login.microsoft.com"; -const KNOWN_PUBLIC_CLOUDS = [ - "login.microsoftonline.com", - "login.windows.net", - "login.microsoft.com", - "sts.windows.net", -]; -const SHR_NONCE_VALIDITY = 240; -const INVALID_INSTANCE = "invalid_instance"; -const HTTP_SUCCESS = 200; -const HTTP_SUCCESS_RANGE_START = 200; -const HTTP_SUCCESS_RANGE_END = 299; -const HTTP_REDIRECT = 302; -const HTTP_CLIENT_ERROR = 400; -const HTTP_CLIENT_ERROR_RANGE_START = 400; -const HTTP_BAD_REQUEST = 400; -const HTTP_UNAUTHORIZED = 401; -const HTTP_NOT_FOUND = 404; -const HTTP_REQUEST_TIMEOUT = 408; -const HTTP_GONE = 410; -const HTTP_TOO_MANY_REQUESTS = 429; -const HTTP_CLIENT_ERROR_RANGE_END = 499; -const HTTP_SERVER_ERROR = 500; -const HTTP_SERVER_ERROR_RANGE_START = 500; -const HTTP_SERVICE_UNAVAILABLE = 503; -const HTTP_GATEWAY_TIMEOUT = 504; -const HTTP_SERVER_ERROR_RANGE_END = 599; -const HTTP_MULTI_SIDED_ERROR = 600; -const HttpMethod = { - GET: "GET", - POST: "POST", -}; -const OIDC_DEFAULT_SCOPES = [ - OPENID_SCOPE, - PROFILE_SCOPE, - OFFLINE_ACCESS_SCOPE, -]; -const OIDC_SCOPES = [...OIDC_DEFAULT_SCOPES, EMAIL_SCOPE]; -/** - * Request header names - */ -const HeaderNames = { - CONTENT_TYPE: "Content-Type", - CONTENT_LENGTH: "Content-Length", - RETRY_AFTER: "Retry-After", - CCS_HEADER: "X-AnchorMailbox", - WWWAuthenticate: "WWW-Authenticate", - AuthenticationInfo: "Authentication-Info", - X_MS_REQUEST_ID: "x-ms-request-id", - X_MS_HTTP_VERSION: "x-ms-httpver", -}; -/** - * Persistent cache keys MSAL which stay while user is logged in. - */ -const PersistentCacheKeys = { - ACTIVE_ACCOUNT_FILTERS: "active-account-filters", // new cache entry for active_account for a more robust version for browser -}; -/** - * String constants related to AAD Authority - */ -const AADAuthority = { - COMMON: "common", - ORGANIZATIONS: "organizations", - CONSUMERS: "consumers", -}; -/** - * Claims request keys - */ -const ClaimsRequestKeys = { - ACCESS_TOKEN: "access_token", - XMS_CC: "xms_cc", -}; -/** - * we considered making this "enum" in the request instead of string, however it looks like the allowed list of - * prompt values kept changing over past couple of years. There are some undocumented prompt values for some - * internal partners too, hence the choice of generic "string" type instead of the "enum" - */ -const PromptValue = { - LOGIN: "login", - SELECT_ACCOUNT: "select_account", - CONSENT: "consent", - NONE: "none", - CREATE: "create", - NO_SESSION: "no_session", -}; -/** - * allowed values for codeVerifier - */ -const CodeChallengeMethodValues = { - PLAIN: "plain", - S256: "S256", -}; -/** - * Allowed values for response_type - */ -const OAuthResponseType = { - CODE: "code", - IDTOKEN_TOKEN: "id_token token", - IDTOKEN_TOKEN_REFRESHTOKEN: "id_token token refresh_token", -}; -/** - * allowed values for response_mode - */ -const ResponseMode = { - QUERY: "query", - FRAGMENT: "fragment", - FORM_POST: "form_post", -}; -/** - * allowed grant_type - */ -const GrantType = { - IMPLICIT_GRANT: "implicit", - AUTHORIZATION_CODE_GRANT: "authorization_code", - CLIENT_CREDENTIALS_GRANT: "client_credentials", - RESOURCE_OWNER_PASSWORD_GRANT: "password", - REFRESH_TOKEN_GRANT: "refresh_token", - DEVICE_CODE_GRANT: "device_code", - JWT_BEARER: "urn:ietf:params:oauth:grant-type:jwt-bearer", -}; -/** - * Account types in Cache - */ -const CACHE_ACCOUNT_TYPE_MSSTS = "MSSTS"; -const CACHE_ACCOUNT_TYPE_ADFS = "ADFS"; -const CACHE_ACCOUNT_TYPE_MSAV1 = "MSA"; -const Constants_CACHE_ACCOUNT_TYPE_GENERIC = "Generic"; -/** - * Separators used in cache - */ -const Constants_CACHE_KEY_SEPARATOR = "-"; -const CLIENT_INFO_SEPARATOR = "."; -/** - * Credential Type stored in the cache - */ -const CredentialType = { - ID_TOKEN: "IdToken", - ACCESS_TOKEN: "AccessToken", - ACCESS_TOKEN_WITH_AUTH_SCHEME: "AccessToken_With_AuthScheme", - REFRESH_TOKEN: "RefreshToken", -}; -/** - * Combine all cache types - */ -const CacheType = { - ADFS: 1001, - MSA: 1002, - MSSTS: 1003, - GENERIC: 1004, - ACCESS_TOKEN: 2001, - REFRESH_TOKEN: 2002, - ID_TOKEN: 2003, - APP_METADATA: 3001, - UNDEFINED: 9999, -}; -/** - * More Cache related constants - */ -const APP_METADATA = "appmetadata"; -const CLIENT_INFO = "client_info"; -const THE_FAMILY_ID = "1"; -const AUTHORITY_METADATA_CACHE_KEY = "authority-metadata"; -const AUTHORITY_METADATA_REFRESH_TIME_SECONDS = 3600 * 24; // 24 Hours -const AuthorityMetadataSource = { - CONFIG: "config", - CACHE: "cache", - NETWORK: "network", - HARDCODED_VALUES: "hardcoded_values", -}; -const SERVER_TELEM_SCHEMA_VERSION = 5; -const SERVER_TELEM_MAX_CUR_HEADER_BYTES = 80; // ESTS limit is 100B, set to 80 to provide a 20B buffer -const SERVER_TELEM_MAX_LAST_HEADER_BYTES = 330; // ESTS limit is 350B, set to 330 to provide a 20B buffer, -const SERVER_TELEM_MAX_CACHED_ERRORS = 50; // Limit the number of errors that can be stored to prevent uncontrolled size gains -const SERVER_TELEM_CACHE_KEY = "server-telemetry"; -const SERVER_TELEM_CATEGORY_SEPARATOR = "|"; -const SERVER_TELEM_VALUE_SEPARATOR = ","; -const SERVER_TELEM_OVERFLOW_TRUE = "1"; -const SERVER_TELEM_OVERFLOW_FALSE = "0"; -const SERVER_TELEM_UNKNOWN_ERROR = "unknown_error"; -/** - * Type of the authentication request - */ -const AuthenticationScheme = { - BEARER: "Bearer", - POP: "pop", - SSH: "ssh-cert", -}; -/** - * Constants related to throttling - */ -const DEFAULT_THROTTLE_TIME_SECONDS = 60; -// Default maximum time to throttle in seconds, overrides what the server sends back -const DEFAULT_MAX_THROTTLE_TIME_SECONDS = 3600; -// Prefix for storing throttling entries -const THROTTLING_PREFIX = "throttling"; -// Value assigned to the x-ms-lib-capability header to indicate to the server the library supports throttling -const X_MS_LIB_CAPABILITY_VALUE = "retry-after, h429"; -/** - * Errors - */ -const INVALID_GRANT_ERROR = "invalid_grant"; -const CLIENT_MISMATCH_ERROR = "client_mismatch"; -/** - * Password grant parameters - */ -const PasswordGrantConstants = { - username: "username", - password: "password", -}; -/** - * Region Discovery Sources - */ -const RegionDiscoverySources = { - FAILED_AUTO_DETECTION: "1", - INTERNAL_CACHE: "2", - ENVIRONMENT_VARIABLE: "3", - IMDS: "4", -}; -/** - * Region Discovery Outcomes - */ -const RegionDiscoveryOutcomes = { - CONFIGURED_MATCHES_DETECTED: "1", - CONFIGURED_NO_AUTO_DETECTION: "2", - CONFIGURED_NOT_DETECTED: "3", - AUTO_DETECTION_REQUESTED_SUCCESSFUL: "4", - AUTO_DETECTION_REQUESTED_FAILED: "5", -}; -/** - * Specifies the reason for fetching the access token from the identity provider - */ -const CacheOutcome = { - // When a token is found in the cache or the cache is not supposed to be hit when making the request - NOT_APPLICABLE: "0", - // When the token request goes to the identity provider because force_refresh was set to true. Also occurs if claims were requested - FORCE_REFRESH_OR_CLAIMS: "1", - // When the token request goes to the identity provider because no cached access token exists - NO_CACHED_ACCESS_TOKEN: "2", - // When the token request goes to the identity provider because cached access token expired - CACHED_ACCESS_TOKEN_EXPIRED: "3", - // When the token request goes to the identity provider because refresh_in was used and the existing token needs to be refreshed - PROACTIVELY_REFRESHED: "4", -}; -const JsonWebTokenTypes = { - Jwt: "JWT", - Jwk: "JWK", - Pop: "pop", -}; -const ONE_DAY_IN_MS = 86400000; -// Token renewal offset default in seconds -const DEFAULT_TOKEN_RENEWAL_OFFSET_SEC = 300; -const EncodingTypes = { - BASE64: "base64", - HEX: "hex", - UTF8: "utf-8", +/* + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. + */ +const SKU = "msal.js.common"; +// default authority +const DEFAULT_AUTHORITY = "https://login.microsoftonline.com/common/"; +const DEFAULT_AUTHORITY_HOST = "login.microsoftonline.com"; +const DEFAULT_COMMON_TENANT = "common"; +// ADFS String +const ADFS = "adfs"; +const DSTS = "dstsv2"; +// Default AAD Instance Discovery Endpoint +const AAD_INSTANCE_DISCOVERY_ENDPT = `${DEFAULT_AUTHORITY}discovery/instance?api-version=1.1&authorization_endpoint=`; +// CIAM URL +const CIAM_AUTH_URL = ".ciamlogin.com"; +const AAD_TENANT_DOMAIN_SUFFIX = ".onmicrosoft.com"; +// Resource delimiter - used for certain cache entries +const Constants_RESOURCE_DELIM = "|"; +// Consumer UTID +const CONSUMER_UTID = "9188040d-6c67-4c5b-b112-36a304b66dad"; +// Default scopes +const OPENID_SCOPE = "openid"; +const PROFILE_SCOPE = "profile"; +const OFFLINE_ACCESS_SCOPE = "offline_access"; +const EMAIL_SCOPE = "email"; +const CODE_GRANT_TYPE = "authorization_code"; +const S256_CODE_CHALLENGE_METHOD = "S256"; +const URL_FORM_CONTENT_TYPE = "application/x-www-form-urlencoded;charset=utf-8"; +const AUTHORIZATION_PENDING = "authorization_pending"; +const NOT_APPLICABLE = "N/A"; +const NOT_AVAILABLE = "Not Available"; +const FORWARD_SLASH = "/"; +const IMDS_ENDPOINT = "http://169.254.169.254/metadata/instance/compute/location"; +const IMDS_VERSION = "2020-06-01"; +const IMDS_TIMEOUT = 2000; +const AZURE_REGION_AUTO_DISCOVER_FLAG = "TryAutoDetect"; +const REGIONAL_AUTH_PUBLIC_CLOUD_SUFFIX = "login.microsoft.com"; +const KNOWN_PUBLIC_CLOUDS = [ + "login.microsoftonline.com", + "login.windows.net", + "login.microsoft.com", + "sts.windows.net", +]; +const SHR_NONCE_VALIDITY = 240; +const INVALID_INSTANCE = "invalid_instance"; +const HTTP_SUCCESS = 200; +const HTTP_SUCCESS_RANGE_START = 200; +const HTTP_SUCCESS_RANGE_END = 299; +const HTTP_REDIRECT = 302; +const HTTP_CLIENT_ERROR = 400; +const HTTP_CLIENT_ERROR_RANGE_START = 400; +const HTTP_BAD_REQUEST = 400; +const HTTP_UNAUTHORIZED = 401; +const HTTP_NOT_FOUND = 404; +const HTTP_REQUEST_TIMEOUT = 408; +const HTTP_GONE = 410; +const HTTP_TOO_MANY_REQUESTS = 429; +const HTTP_CLIENT_ERROR_RANGE_END = 499; +const HTTP_SERVER_ERROR = 500; +const HTTP_SERVER_ERROR_RANGE_START = 500; +const HTTP_SERVICE_UNAVAILABLE = 503; +const HTTP_GATEWAY_TIMEOUT = 504; +const HTTP_SERVER_ERROR_RANGE_END = 599; +const HTTP_MULTI_SIDED_ERROR = 600; +const HttpMethod = { + GET: "GET", + POST: "POST", +}; +const OIDC_DEFAULT_SCOPES = [ + OPENID_SCOPE, + PROFILE_SCOPE, + OFFLINE_ACCESS_SCOPE, +]; +const OIDC_SCOPES = [...OIDC_DEFAULT_SCOPES, EMAIL_SCOPE]; +/** + * Request header names + */ +const HeaderNames = { + CONTENT_TYPE: "Content-Type", + CONTENT_LENGTH: "Content-Length", + RETRY_AFTER: "Retry-After", + CCS_HEADER: "X-AnchorMailbox", + WWWAuthenticate: "WWW-Authenticate", + AuthenticationInfo: "Authentication-Info", + X_MS_REQUEST_ID: "x-ms-request-id", + X_MS_HTTP_VERSION: "x-ms-httpver", +}; +/** + * Persistent cache keys MSAL which stay while user is logged in. + */ +const PersistentCacheKeys = { + ACTIVE_ACCOUNT_FILTERS: "active-account-filters", // new cache entry for active_account for a more robust version for browser +}; +/** + * String constants related to AAD Authority + */ +const AADAuthority = { + COMMON: "common", + ORGANIZATIONS: "organizations", + CONSUMERS: "consumers", +}; +/** + * Claims request keys + */ +const ClaimsRequestKeys = { + ACCESS_TOKEN: "access_token", + XMS_CC: "xms_cc", +}; +/** + * we considered making this "enum" in the request instead of string, however it looks like the allowed list of + * prompt values kept changing over past couple of years. There are some undocumented prompt values for some + * internal partners too, hence the choice of generic "string" type instead of the "enum" + */ +const PromptValue = { + LOGIN: "login", + SELECT_ACCOUNT: "select_account", + CONSENT: "consent", + NONE: "none", + CREATE: "create", + NO_SESSION: "no_session", +}; +/** + * allowed values for codeVerifier + */ +const CodeChallengeMethodValues = { + PLAIN: "plain", + S256: "S256", +}; +/** + * Allowed values for response_type + */ +const OAuthResponseType = { + CODE: "code", + IDTOKEN_TOKEN: "id_token token", + IDTOKEN_TOKEN_REFRESHTOKEN: "id_token token refresh_token", +}; +/** + * allowed values for response_mode + */ +const ResponseMode = { + QUERY: "query", + FRAGMENT: "fragment", + FORM_POST: "form_post", +}; +/** + * allowed grant_type + */ +const GrantType = { + IMPLICIT_GRANT: "implicit", + AUTHORIZATION_CODE_GRANT: "authorization_code", + CLIENT_CREDENTIALS_GRANT: "client_credentials", + RESOURCE_OWNER_PASSWORD_GRANT: "password", + REFRESH_TOKEN_GRANT: "refresh_token", + DEVICE_CODE_GRANT: "device_code", + JWT_BEARER: "urn:ietf:params:oauth:grant-type:jwt-bearer", +}; +/** + * Account types in Cache + */ +const CACHE_ACCOUNT_TYPE_MSSTS = "MSSTS"; +const CACHE_ACCOUNT_TYPE_ADFS = "ADFS"; +const CACHE_ACCOUNT_TYPE_MSAV1 = "MSA"; +const Constants_CACHE_ACCOUNT_TYPE_GENERIC = "Generic"; +/** + * Separators used in cache + */ +const Constants_CACHE_KEY_SEPARATOR = "-"; +const CLIENT_INFO_SEPARATOR = "."; +/** + * Credential Type stored in the cache + */ +const CredentialType = { + ID_TOKEN: "IdToken", + ACCESS_TOKEN: "AccessToken", + ACCESS_TOKEN_WITH_AUTH_SCHEME: "AccessToken_With_AuthScheme", + REFRESH_TOKEN: "RefreshToken", +}; +/** + * Combine all cache types + */ +const CacheType = { + ADFS: 1001, + MSA: 1002, + MSSTS: 1003, + GENERIC: 1004, + ACCESS_TOKEN: 2001, + REFRESH_TOKEN: 2002, + ID_TOKEN: 2003, + APP_METADATA: 3001, + UNDEFINED: 9999, +}; +/** + * More Cache related constants + */ +const APP_METADATA = "appmetadata"; +const CLIENT_INFO = "client_info"; +const THE_FAMILY_ID = "1"; +const AUTHORITY_METADATA_CACHE_KEY = "authority-metadata"; +const AUTHORITY_METADATA_REFRESH_TIME_SECONDS = 3600 * 24; // 24 Hours +const AuthorityMetadataSource = { + CONFIG: "config", + CACHE: "cache", + NETWORK: "network", + HARDCODED_VALUES: "hardcoded_values", +}; +const SERVER_TELEM_SCHEMA_VERSION = 5; +const SERVER_TELEM_MAX_CUR_HEADER_BYTES = 80; // ESTS limit is 100B, set to 80 to provide a 20B buffer +const SERVER_TELEM_MAX_LAST_HEADER_BYTES = 330; // ESTS limit is 350B, set to 330 to provide a 20B buffer, +const SERVER_TELEM_MAX_CACHED_ERRORS = 50; // Limit the number of errors that can be stored to prevent uncontrolled size gains +const SERVER_TELEM_CACHE_KEY = "server-telemetry"; +const SERVER_TELEM_CATEGORY_SEPARATOR = "|"; +const SERVER_TELEM_VALUE_SEPARATOR = ","; +const SERVER_TELEM_OVERFLOW_TRUE = "1"; +const SERVER_TELEM_OVERFLOW_FALSE = "0"; +const SERVER_TELEM_UNKNOWN_ERROR = "unknown_error"; +/** + * Type of the authentication request + */ +const AuthenticationScheme = { + BEARER: "Bearer", + POP: "pop", + SSH: "ssh-cert", +}; +/** + * Constants related to throttling + */ +const DEFAULT_THROTTLE_TIME_SECONDS = 60; +// Default maximum time to throttle in seconds, overrides what the server sends back +const DEFAULT_MAX_THROTTLE_TIME_SECONDS = 3600; +// Prefix for storing throttling entries +const THROTTLING_PREFIX = "throttling"; +// Value assigned to the x-ms-lib-capability header to indicate to the server the library supports throttling +const X_MS_LIB_CAPABILITY_VALUE = "retry-after, h429"; +/** + * Errors + */ +const INVALID_GRANT_ERROR = "invalid_grant"; +const CLIENT_MISMATCH_ERROR = "client_mismatch"; +/** + * Password grant parameters + */ +const PasswordGrantConstants = { + username: "username", + password: "password", +}; +/** + * Region Discovery Sources + */ +const RegionDiscoverySources = { + FAILED_AUTO_DETECTION: "1", + INTERNAL_CACHE: "2", + ENVIRONMENT_VARIABLE: "3", + IMDS: "4", +}; +/** + * Region Discovery Outcomes + */ +const RegionDiscoveryOutcomes = { + CONFIGURED_MATCHES_DETECTED: "1", + CONFIGURED_NO_AUTO_DETECTION: "2", + CONFIGURED_NOT_DETECTED: "3", + AUTO_DETECTION_REQUESTED_SUCCESSFUL: "4", + AUTO_DETECTION_REQUESTED_FAILED: "5", +}; +/** + * Specifies the reason for fetching the access token from the identity provider + */ +const CacheOutcome = { + // When a token is found in the cache or the cache is not supposed to be hit when making the request + NOT_APPLICABLE: "0", + // When the token request goes to the identity provider because force_refresh was set to true. Also occurs if claims were requested + FORCE_REFRESH_OR_CLAIMS: "1", + // When the token request goes to the identity provider because no cached access token exists + NO_CACHED_ACCESS_TOKEN: "2", + // When the token request goes to the identity provider because cached access token expired + CACHED_ACCESS_TOKEN_EXPIRED: "3", + // When the token request goes to the identity provider because refresh_in was used and the existing token needs to be refreshed + PROACTIVELY_REFRESHED: "4", +}; +const JsonWebTokenTypes = { + Jwt: "JWT", + Jwk: "JWK", + Pop: "pop", +}; +const ONE_DAY_IN_MS = 86400000; +// Token renewal offset default in seconds +const DEFAULT_TOKEN_RENEWAL_OFFSET_SEC = 300; +const EncodingTypes = { + BASE64: "base64", + HEX: "hex", + UTF8: "utf-8", }; @@ -44995,147 +44995,147 @@ const EncodingTypes = { ;// CONCATENATED MODULE: ./node_modules/@azure/msal-node/dist/utils/Constants.mjs /*! @azure/msal-node v5.1.0 2026-03-13 */ -/* - * Copyright (c) Microsoft Corporation. All rights reserved. - * Licensed under the MIT License. - */ -// MSI Constants. Docs for MSI are available here https://docs.microsoft.com/azure/app-service/overview-managed-identity -const Constants_DEFAULT_MANAGED_IDENTITY_ID = "system_assigned_managed_identity"; -const MANAGED_IDENTITY_DEFAULT_TENANT = "managed_identity"; -const Constants_DEFAULT_AUTHORITY_FOR_MANAGED_IDENTITY = (/* unused pure expression or super */ null && (`https://login.microsoftonline.com/${MANAGED_IDENTITY_DEFAULT_TENANT}/`)); -/** - * Managed Identity Headers - used in network requests - */ -const ManagedIdentityHeaders = { - AUTHORIZATION_HEADER_NAME: "Authorization", - METADATA_HEADER_NAME: "Metadata", - APP_SERVICE_SECRET_HEADER_NAME: "X-IDENTITY-HEADER", - ML_AND_SF_SECRET_HEADER_NAME: "secret", -}; -/** - * Managed Identity Query Parameters - used in network requests - */ -const ManagedIdentityQueryParameters = { - API_VERSION: "api-version", - RESOURCE: "resource", - SHA256_TOKEN_TO_REFRESH: "token_sha256_to_refresh", - XMS_CC: "xms_cc", -}; -/** - * Managed Identity Environment Variable Names - */ -const ManagedIdentityEnvironmentVariableNames = { - AZURE_POD_IDENTITY_AUTHORITY_HOST: "AZURE_POD_IDENTITY_AUTHORITY_HOST", - DEFAULT_IDENTITY_CLIENT_ID: "DEFAULT_IDENTITY_CLIENT_ID", - IDENTITY_ENDPOINT: "IDENTITY_ENDPOINT", - IDENTITY_HEADER: "IDENTITY_HEADER", - IDENTITY_SERVER_THUMBPRINT: "IDENTITY_SERVER_THUMBPRINT", - IMDS_ENDPOINT: "IMDS_ENDPOINT", - MSI_ENDPOINT: "MSI_ENDPOINT", - MSI_SECRET: "MSI_SECRET", -}; -/** - * Managed Identity Source Names - * @public - */ -const Constants_ManagedIdentitySourceNames = { - APP_SERVICE: "AppService", - AZURE_ARC: "AzureArc", - CLOUD_SHELL: "CloudShell", - DEFAULT_TO_IMDS: "DefaultToImds", - IMDS: "Imds", - MACHINE_LEARNING: "MachineLearning", - SERVICE_FABRIC: "ServiceFabric", -}; -/** - * Managed Identity Ids - */ -const Constants_ManagedIdentityIdType = { - SYSTEM_ASSIGNED: "system-assigned", - USER_ASSIGNED_CLIENT_ID: "user-assigned-client-id", - USER_ASSIGNED_RESOURCE_ID: "user-assigned-resource-id", - USER_ASSIGNED_OBJECT_ID: "user-assigned-object-id", -}; -/** - * http methods - */ -const Constants_HttpMethod = { - GET: "GET", - POST: "POST", -}; -/** - * Constants used for region discovery - */ -const REGION_ENVIRONMENT_VARIABLE = "REGION_NAME"; -const MSAL_FORCE_REGION = "MSAL_FORCE_REGION"; -/** - * Constant used for PKCE - */ -const RANDOM_OCTET_SIZE = 32; -/** - * Constants used in PKCE - */ -const Hash = { - SHA256: "sha256", -}; -/** - * Constants for encoding schemes - */ -const CharSet = { - CV_CHARSET: "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-._~", -}; -/** - * Cache Constants - */ -const CACHE = { - KEY_SEPARATOR: "-", -}; -/** - * Constants - */ -const Constants_Constants = { - MSAL_SKU: "msal.js.node", - JWT_BEARER_ASSERTION_TYPE: "urn:ietf:params:oauth:client-assertion-type:jwt-bearer", - HTTP_PROTOCOL: "http://", - LOCALHOST: "localhost", -}; -/** - * API Codes for Telemetry purposes. - * Before adding a new code you must claim it in the MSAL Telemetry tracker as these number spaces are shared across all MSALs - * 0-99 Silent Flow - * 600-699 Device Code Flow - * 800-899 Auth Code Flow - */ -const ApiId = { - acquireTokenSilent: 62, - acquireTokenByUsernamePassword: 371, - acquireTokenByDeviceCode: 671, - acquireTokenByClientCredential: 771, - acquireTokenByOBO: 772, - acquireTokenWithManagedIdentity: 773, - acquireTokenByCode: 871, - acquireTokenByRefreshToken: 872, -}; -/** - * JWT constants - */ -const JwtConstants = { - RSA_256: "RS256", - PSS_256: "PS256", - X5T_256: "x5t#S256", - X5T: "x5t", - X5C: "x5c", - AUDIENCE: "aud", - EXPIRATION_TIME: "exp", - ISSUER: "iss", - SUBJECT: "sub", - NOT_BEFORE: "nbf", - JWT_ID: "jti", -}; -const LOOPBACK_SERVER_CONSTANTS = { - INTERVAL_MS: 100, - TIMEOUT_MS: 5000, -}; +/* + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. + */ +// MSI Constants. Docs for MSI are available here https://docs.microsoft.com/azure/app-service/overview-managed-identity +const Constants_DEFAULT_MANAGED_IDENTITY_ID = "system_assigned_managed_identity"; +const MANAGED_IDENTITY_DEFAULT_TENANT = "managed_identity"; +const Constants_DEFAULT_AUTHORITY_FOR_MANAGED_IDENTITY = (/* unused pure expression or super */ null && (`https://login.microsoftonline.com/${MANAGED_IDENTITY_DEFAULT_TENANT}/`)); +/** + * Managed Identity Headers - used in network requests + */ +const ManagedIdentityHeaders = { + AUTHORIZATION_HEADER_NAME: "Authorization", + METADATA_HEADER_NAME: "Metadata", + APP_SERVICE_SECRET_HEADER_NAME: "X-IDENTITY-HEADER", + ML_AND_SF_SECRET_HEADER_NAME: "secret", +}; +/** + * Managed Identity Query Parameters - used in network requests + */ +const ManagedIdentityQueryParameters = { + API_VERSION: "api-version", + RESOURCE: "resource", + SHA256_TOKEN_TO_REFRESH: "token_sha256_to_refresh", + XMS_CC: "xms_cc", +}; +/** + * Managed Identity Environment Variable Names + */ +const ManagedIdentityEnvironmentVariableNames = { + AZURE_POD_IDENTITY_AUTHORITY_HOST: "AZURE_POD_IDENTITY_AUTHORITY_HOST", + DEFAULT_IDENTITY_CLIENT_ID: "DEFAULT_IDENTITY_CLIENT_ID", + IDENTITY_ENDPOINT: "IDENTITY_ENDPOINT", + IDENTITY_HEADER: "IDENTITY_HEADER", + IDENTITY_SERVER_THUMBPRINT: "IDENTITY_SERVER_THUMBPRINT", + IMDS_ENDPOINT: "IMDS_ENDPOINT", + MSI_ENDPOINT: "MSI_ENDPOINT", + MSI_SECRET: "MSI_SECRET", +}; +/** + * Managed Identity Source Names + * @public + */ +const Constants_ManagedIdentitySourceNames = { + APP_SERVICE: "AppService", + AZURE_ARC: "AzureArc", + CLOUD_SHELL: "CloudShell", + DEFAULT_TO_IMDS: "DefaultToImds", + IMDS: "Imds", + MACHINE_LEARNING: "MachineLearning", + SERVICE_FABRIC: "ServiceFabric", +}; +/** + * Managed Identity Ids + */ +const Constants_ManagedIdentityIdType = { + SYSTEM_ASSIGNED: "system-assigned", + USER_ASSIGNED_CLIENT_ID: "user-assigned-client-id", + USER_ASSIGNED_RESOURCE_ID: "user-assigned-resource-id", + USER_ASSIGNED_OBJECT_ID: "user-assigned-object-id", +}; +/** + * http methods + */ +const Constants_HttpMethod = { + GET: "GET", + POST: "POST", +}; +/** + * Constants used for region discovery + */ +const REGION_ENVIRONMENT_VARIABLE = "REGION_NAME"; +const MSAL_FORCE_REGION = "MSAL_FORCE_REGION"; +/** + * Constant used for PKCE + */ +const RANDOM_OCTET_SIZE = 32; +/** + * Constants used in PKCE + */ +const Hash = { + SHA256: "sha256", +}; +/** + * Constants for encoding schemes + */ +const CharSet = { + CV_CHARSET: "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-._~", +}; +/** + * Cache Constants + */ +const CACHE = { + KEY_SEPARATOR: "-", +}; +/** + * Constants + */ +const Constants_Constants = { + MSAL_SKU: "msal.js.node", + JWT_BEARER_ASSERTION_TYPE: "urn:ietf:params:oauth:client-assertion-type:jwt-bearer", + HTTP_PROTOCOL: "http://", + LOCALHOST: "localhost", +}; +/** + * API Codes for Telemetry purposes. + * Before adding a new code you must claim it in the MSAL Telemetry tracker as these number spaces are shared across all MSALs + * 0-99 Silent Flow + * 600-699 Device Code Flow + * 800-899 Auth Code Flow + */ +const ApiId = { + acquireTokenSilent: 62, + acquireTokenByUsernamePassword: 371, + acquireTokenByDeviceCode: 671, + acquireTokenByClientCredential: 771, + acquireTokenByOBO: 772, + acquireTokenWithManagedIdentity: 773, + acquireTokenByCode: 871, + acquireTokenByRefreshToken: 872, +}; +/** + * JWT constants + */ +const JwtConstants = { + RSA_256: "RS256", + PSS_256: "PS256", + X5T_256: "x5t#S256", + X5T: "x5t", + X5C: "x5c", + AUDIENCE: "aud", + EXPIRATION_TIME: "exp", + ISSUER: "iss", + SUBJECT: "sub", + NOT_BEFORE: "nbf", + JWT_ID: "jti", +}; +const LOOPBACK_SERVER_CONSTANTS = { + INTERVAL_MS: 100, + TIMEOUT_MS: 5000, +}; const AZURE_ARC_SECRET_FILE_MAX_SIZE_BYTES = 4096; // 4 KB @@ -45144,34 +45144,34 @@ const AZURE_ARC_SECRET_FILE_MAX_SIZE_BYTES = 4096; // 4 KB ;// CONCATENATED MODULE: ./node_modules/@azure/msal-common/dist/error/AuthError.mjs /*! @azure/msal-common v16.3.0 2026-03-13 */ -/* - * Copyright (c) Microsoft Corporation. All rights reserved. - * Licensed under the MIT License. - */ -function getDefaultErrorMessage(code) { - return `See https://aka.ms/msal.js.errors#${code} for details`; -} -/** - * General error class thrown by the MSAL.js library. - */ -class AuthError extends Error { - constructor(errorCode, errorMessage, suberror) { - const message = errorMessage || - (errorCode ? getDefaultErrorMessage(errorCode) : ""); - const errorString = message ? `${errorCode}: ${message}` : errorCode; - super(errorString); - Object.setPrototypeOf(this, AuthError.prototype); - this.errorCode = errorCode || ""; - this.errorMessage = message || ""; - this.subError = suberror || ""; - this.name = "AuthError"; - } - setCorrelationId(correlationId) { - this.correlationId = correlationId; - } -} -function createAuthError(code, additionalMessage) { - return new AuthError(code, additionalMessage || getDefaultErrorMessage(code)); +/* + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. + */ +function getDefaultErrorMessage(code) { + return `See https://aka.ms/msal.js.errors#${code} for details`; +} +/** + * General error class thrown by the MSAL.js library. + */ +class AuthError extends Error { + constructor(errorCode, errorMessage, suberror) { + const message = errorMessage || + (errorCode ? getDefaultErrorMessage(errorCode) : ""); + const errorString = message ? `${errorCode}: ${message}` : errorCode; + super(errorString); + Object.setPrototypeOf(this, AuthError.prototype); + this.errorCode = errorCode || ""; + this.errorMessage = message || ""; + this.subError = suberror || ""; + this.name = "AuthError"; + } + setCorrelationId(correlationId) { + this.correlationId = correlationId; + } +} +function createAuthError(code, additionalMessage) { + return new AuthError(code, additionalMessage || getDefaultErrorMessage(code)); } @@ -45183,263 +45183,263 @@ function createAuthError(code, additionalMessage) { -/* - * Copyright (c) Microsoft Corporation. All rights reserved. - * Licensed under the MIT License. - */ -const skuGroupSeparator = ","; -const skuValueSeparator = "|"; -function makeExtraSkuString(params) { - const { skus, libraryName, libraryVersion, extensionName, extensionVersion, } = params; - const skuMap = new Map([ - [0, [libraryName, libraryVersion]], - [2, [extensionName, extensionVersion]], - ]); - let skuArr = []; - if (skus?.length) { - skuArr = skus.split(skuGroupSeparator); - // Ignore invalid input sku param - if (skuArr.length < 4) { - return skus; - } - } - else { - skuArr = Array.from({ length: 4 }, () => skuValueSeparator); - } - skuMap.forEach((value, key) => { - if (value.length === 2 && value[0]?.length && value[1]?.length) { - setSku({ - skuArr, - index: key, - skuName: value[0], - skuVersion: value[1], - }); - } - }); - return skuArr.join(skuGroupSeparator); -} -function setSku(params) { - const { skuArr, index, skuName, skuVersion } = params; - if (index >= skuArr.length) { - return; - } - skuArr[index] = [skuName, skuVersion].join(skuValueSeparator); -} -/** @internal */ -class ServerTelemetryManager { - constructor(telemetryRequest, cacheManager) { - this.cacheOutcome = CacheOutcome.NOT_APPLICABLE; - this.cacheManager = cacheManager; - this.apiId = telemetryRequest.apiId; - this.correlationId = telemetryRequest.correlationId; - this.wrapperSKU = telemetryRequest.wrapperSKU || ""; - this.wrapperVer = telemetryRequest.wrapperVer || ""; - this.telemetryCacheKey = - SERVER_TELEM_CACHE_KEY + - Constants_CACHE_KEY_SEPARATOR + - telemetryRequest.clientId; - } - /** - * API to add MSER Telemetry to request - */ - generateCurrentRequestHeaderValue() { - const request = `${this.apiId}${SERVER_TELEM_VALUE_SEPARATOR}${this.cacheOutcome}`; - const platformFieldsArr = [this.wrapperSKU, this.wrapperVer]; - const nativeBrokerErrorCode = this.getNativeBrokerErrorCode(); - if (nativeBrokerErrorCode?.length) { - platformFieldsArr.push(`broker_error=${nativeBrokerErrorCode}`); - } - const platformFields = platformFieldsArr.join(SERVER_TELEM_VALUE_SEPARATOR); - const regionDiscoveryFields = this.getRegionDiscoveryFields(); - const requestWithRegionDiscoveryFields = [ - request, - regionDiscoveryFields, - ].join(SERVER_TELEM_VALUE_SEPARATOR); - return [ - SERVER_TELEM_SCHEMA_VERSION, - requestWithRegionDiscoveryFields, - platformFields, - ].join(SERVER_TELEM_CATEGORY_SEPARATOR); - } - /** - * API to add MSER Telemetry for the last failed request - */ - generateLastRequestHeaderValue() { - const lastRequests = this.getLastRequests(); - const maxErrors = ServerTelemetryManager.maxErrorsToSend(lastRequests); - const failedRequests = lastRequests.failedRequests - .slice(0, 2 * maxErrors) - .join(SERVER_TELEM_VALUE_SEPARATOR); - const errors = lastRequests.errors - .slice(0, maxErrors) - .join(SERVER_TELEM_VALUE_SEPARATOR); - const errorCount = lastRequests.errors.length; - // Indicate whether this header contains all data or partial data - const overflow = maxErrors < errorCount - ? SERVER_TELEM_OVERFLOW_TRUE - : SERVER_TELEM_OVERFLOW_FALSE; - const platformFields = [errorCount, overflow].join(SERVER_TELEM_VALUE_SEPARATOR); - return [ - SERVER_TELEM_SCHEMA_VERSION, - lastRequests.cacheHits, - failedRequests, - errors, - platformFields, - ].join(SERVER_TELEM_CATEGORY_SEPARATOR); - } - /** - * API to cache token failures for MSER data capture - * @param error - */ - cacheFailedRequest(error) { - const lastRequests = this.getLastRequests(); - if (lastRequests.errors.length >= - SERVER_TELEM_MAX_CACHED_ERRORS) { - // Remove a cached error to make room, first in first out - lastRequests.failedRequests.shift(); // apiId - lastRequests.failedRequests.shift(); // correlationId - lastRequests.errors.shift(); - } - lastRequests.failedRequests.push(this.apiId, this.correlationId); - if (error instanceof Error && !!error && error.toString()) { - if (error instanceof AuthError) { - if (error.subError) { - lastRequests.errors.push(error.subError); - } - else if (error.errorCode) { - lastRequests.errors.push(error.errorCode); - } - else { - lastRequests.errors.push(error.toString()); - } - } - else { - lastRequests.errors.push(error.toString()); - } - } - else { - lastRequests.errors.push(SERVER_TELEM_UNKNOWN_ERROR); - } - this.cacheManager.setServerTelemetry(this.telemetryCacheKey, lastRequests, this.correlationId); - return; - } - /** - * Update server telemetry cache entry by incrementing cache hit counter - */ - incrementCacheHits() { - const lastRequests = this.getLastRequests(); - lastRequests.cacheHits += 1; - this.cacheManager.setServerTelemetry(this.telemetryCacheKey, lastRequests, this.correlationId); - return lastRequests.cacheHits; - } - /** - * Get the server telemetry entity from cache or initialize a new one - */ - getLastRequests() { - const initialValue = { - failedRequests: [], - errors: [], - cacheHits: 0, - }; - const lastRequests = this.cacheManager.getServerTelemetry(this.telemetryCacheKey, this.correlationId); - return lastRequests || initialValue; - } - /** - * Remove server telemetry cache entry - */ - clearTelemetryCache() { - const lastRequests = this.getLastRequests(); - const numErrorsFlushed = ServerTelemetryManager.maxErrorsToSend(lastRequests); - const errorCount = lastRequests.errors.length; - if (numErrorsFlushed === errorCount) { - // All errors were sent on last request, clear Telemetry cache - this.cacheManager.removeItem(this.telemetryCacheKey, this.correlationId); - } - else { - // Partial data was flushed to server, construct a new telemetry cache item with errors that were not flushed - const serverTelemEntity = { - failedRequests: lastRequests.failedRequests.slice(numErrorsFlushed * 2), - errors: lastRequests.errors.slice(numErrorsFlushed), - cacheHits: 0, - }; - this.cacheManager.setServerTelemetry(this.telemetryCacheKey, serverTelemEntity, this.correlationId); - } - } - /** - * Returns the maximum number of errors that can be flushed to the server in the next network request - * @param serverTelemetryEntity - */ - static maxErrorsToSend(serverTelemetryEntity) { - let i; - let maxErrors = 0; - let dataSize = 0; - const errorCount = serverTelemetryEntity.errors.length; - for (i = 0; i < errorCount; i++) { - // failedRequests parameter contains pairs of apiId and correlationId, multiply index by 2 to preserve pairs - const apiId = serverTelemetryEntity.failedRequests[2 * i] || ""; - const correlationId = serverTelemetryEntity.failedRequests[2 * i + 1] || ""; - const errorCode = serverTelemetryEntity.errors[i] || ""; - // Count number of characters that would be added to header, each character is 1 byte. Add 3 at the end to account for separators - dataSize += - apiId.toString().length + - correlationId.toString().length + - errorCode.length + - 3; - if (dataSize < SERVER_TELEM_MAX_LAST_HEADER_BYTES) { - // Adding this entry to the header would still keep header size below the limit - maxErrors += 1; - } - else { - break; - } - } - return maxErrors; - } - /** - * Get the region discovery fields - * - * @returns string - */ - getRegionDiscoveryFields() { - const regionDiscoveryFields = []; - regionDiscoveryFields.push(this.regionUsed || ""); - regionDiscoveryFields.push(this.regionSource || ""); - regionDiscoveryFields.push(this.regionOutcome || ""); - return regionDiscoveryFields.join(","); - } - /** - * Update the region discovery metadata - * - * @param regionDiscoveryMetadata - * @returns void - */ - updateRegionDiscoveryMetadata(regionDiscoveryMetadata) { - this.regionUsed = regionDiscoveryMetadata.region_used; - this.regionSource = regionDiscoveryMetadata.region_source; - this.regionOutcome = regionDiscoveryMetadata.region_outcome; - } - /** - * Set cache outcome - */ - setCacheOutcome(cacheOutcome) { - this.cacheOutcome = cacheOutcome; - } - setNativeBrokerErrorCode(errorCode) { - const lastRequests = this.getLastRequests(); - lastRequests.nativeBrokerErrorCode = errorCode; - this.cacheManager.setServerTelemetry(this.telemetryCacheKey, lastRequests, this.correlationId); - } - getNativeBrokerErrorCode() { - return this.getLastRequests().nativeBrokerErrorCode; - } - clearNativeBrokerErrorCode() { - const lastRequests = this.getLastRequests(); - delete lastRequests.nativeBrokerErrorCode; - this.cacheManager.setServerTelemetry(this.telemetryCacheKey, lastRequests, this.correlationId); - } - static makeExtraSkuString(params) { - return makeExtraSkuString(params); - } +/* + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. + */ +const skuGroupSeparator = ","; +const skuValueSeparator = "|"; +function makeExtraSkuString(params) { + const { skus, libraryName, libraryVersion, extensionName, extensionVersion, } = params; + const skuMap = new Map([ + [0, [libraryName, libraryVersion]], + [2, [extensionName, extensionVersion]], + ]); + let skuArr = []; + if (skus?.length) { + skuArr = skus.split(skuGroupSeparator); + // Ignore invalid input sku param + if (skuArr.length < 4) { + return skus; + } + } + else { + skuArr = Array.from({ length: 4 }, () => skuValueSeparator); + } + skuMap.forEach((value, key) => { + if (value.length === 2 && value[0]?.length && value[1]?.length) { + setSku({ + skuArr, + index: key, + skuName: value[0], + skuVersion: value[1], + }); + } + }); + return skuArr.join(skuGroupSeparator); +} +function setSku(params) { + const { skuArr, index, skuName, skuVersion } = params; + if (index >= skuArr.length) { + return; + } + skuArr[index] = [skuName, skuVersion].join(skuValueSeparator); +} +/** @internal */ +class ServerTelemetryManager { + constructor(telemetryRequest, cacheManager) { + this.cacheOutcome = CacheOutcome.NOT_APPLICABLE; + this.cacheManager = cacheManager; + this.apiId = telemetryRequest.apiId; + this.correlationId = telemetryRequest.correlationId; + this.wrapperSKU = telemetryRequest.wrapperSKU || ""; + this.wrapperVer = telemetryRequest.wrapperVer || ""; + this.telemetryCacheKey = + SERVER_TELEM_CACHE_KEY + + Constants_CACHE_KEY_SEPARATOR + + telemetryRequest.clientId; + } + /** + * API to add MSER Telemetry to request + */ + generateCurrentRequestHeaderValue() { + const request = `${this.apiId}${SERVER_TELEM_VALUE_SEPARATOR}${this.cacheOutcome}`; + const platformFieldsArr = [this.wrapperSKU, this.wrapperVer]; + const nativeBrokerErrorCode = this.getNativeBrokerErrorCode(); + if (nativeBrokerErrorCode?.length) { + platformFieldsArr.push(`broker_error=${nativeBrokerErrorCode}`); + } + const platformFields = platformFieldsArr.join(SERVER_TELEM_VALUE_SEPARATOR); + const regionDiscoveryFields = this.getRegionDiscoveryFields(); + const requestWithRegionDiscoveryFields = [ + request, + regionDiscoveryFields, + ].join(SERVER_TELEM_VALUE_SEPARATOR); + return [ + SERVER_TELEM_SCHEMA_VERSION, + requestWithRegionDiscoveryFields, + platformFields, + ].join(SERVER_TELEM_CATEGORY_SEPARATOR); + } + /** + * API to add MSER Telemetry for the last failed request + */ + generateLastRequestHeaderValue() { + const lastRequests = this.getLastRequests(); + const maxErrors = ServerTelemetryManager.maxErrorsToSend(lastRequests); + const failedRequests = lastRequests.failedRequests + .slice(0, 2 * maxErrors) + .join(SERVER_TELEM_VALUE_SEPARATOR); + const errors = lastRequests.errors + .slice(0, maxErrors) + .join(SERVER_TELEM_VALUE_SEPARATOR); + const errorCount = lastRequests.errors.length; + // Indicate whether this header contains all data or partial data + const overflow = maxErrors < errorCount + ? SERVER_TELEM_OVERFLOW_TRUE + : SERVER_TELEM_OVERFLOW_FALSE; + const platformFields = [errorCount, overflow].join(SERVER_TELEM_VALUE_SEPARATOR); + return [ + SERVER_TELEM_SCHEMA_VERSION, + lastRequests.cacheHits, + failedRequests, + errors, + platformFields, + ].join(SERVER_TELEM_CATEGORY_SEPARATOR); + } + /** + * API to cache token failures for MSER data capture + * @param error + */ + cacheFailedRequest(error) { + const lastRequests = this.getLastRequests(); + if (lastRequests.errors.length >= + SERVER_TELEM_MAX_CACHED_ERRORS) { + // Remove a cached error to make room, first in first out + lastRequests.failedRequests.shift(); // apiId + lastRequests.failedRequests.shift(); // correlationId + lastRequests.errors.shift(); + } + lastRequests.failedRequests.push(this.apiId, this.correlationId); + if (error instanceof Error && !!error && error.toString()) { + if (error instanceof AuthError) { + if (error.subError) { + lastRequests.errors.push(error.subError); + } + else if (error.errorCode) { + lastRequests.errors.push(error.errorCode); + } + else { + lastRequests.errors.push(error.toString()); + } + } + else { + lastRequests.errors.push(error.toString()); + } + } + else { + lastRequests.errors.push(SERVER_TELEM_UNKNOWN_ERROR); + } + this.cacheManager.setServerTelemetry(this.telemetryCacheKey, lastRequests, this.correlationId); + return; + } + /** + * Update server telemetry cache entry by incrementing cache hit counter + */ + incrementCacheHits() { + const lastRequests = this.getLastRequests(); + lastRequests.cacheHits += 1; + this.cacheManager.setServerTelemetry(this.telemetryCacheKey, lastRequests, this.correlationId); + return lastRequests.cacheHits; + } + /** + * Get the server telemetry entity from cache or initialize a new one + */ + getLastRequests() { + const initialValue = { + failedRequests: [], + errors: [], + cacheHits: 0, + }; + const lastRequests = this.cacheManager.getServerTelemetry(this.telemetryCacheKey, this.correlationId); + return lastRequests || initialValue; + } + /** + * Remove server telemetry cache entry + */ + clearTelemetryCache() { + const lastRequests = this.getLastRequests(); + const numErrorsFlushed = ServerTelemetryManager.maxErrorsToSend(lastRequests); + const errorCount = lastRequests.errors.length; + if (numErrorsFlushed === errorCount) { + // All errors were sent on last request, clear Telemetry cache + this.cacheManager.removeItem(this.telemetryCacheKey, this.correlationId); + } + else { + // Partial data was flushed to server, construct a new telemetry cache item with errors that were not flushed + const serverTelemEntity = { + failedRequests: lastRequests.failedRequests.slice(numErrorsFlushed * 2), + errors: lastRequests.errors.slice(numErrorsFlushed), + cacheHits: 0, + }; + this.cacheManager.setServerTelemetry(this.telemetryCacheKey, serverTelemEntity, this.correlationId); + } + } + /** + * Returns the maximum number of errors that can be flushed to the server in the next network request + * @param serverTelemetryEntity + */ + static maxErrorsToSend(serverTelemetryEntity) { + let i; + let maxErrors = 0; + let dataSize = 0; + const errorCount = serverTelemetryEntity.errors.length; + for (i = 0; i < errorCount; i++) { + // failedRequests parameter contains pairs of apiId and correlationId, multiply index by 2 to preserve pairs + const apiId = serverTelemetryEntity.failedRequests[2 * i] || ""; + const correlationId = serverTelemetryEntity.failedRequests[2 * i + 1] || ""; + const errorCode = serverTelemetryEntity.errors[i] || ""; + // Count number of characters that would be added to header, each character is 1 byte. Add 3 at the end to account for separators + dataSize += + apiId.toString().length + + correlationId.toString().length + + errorCode.length + + 3; + if (dataSize < SERVER_TELEM_MAX_LAST_HEADER_BYTES) { + // Adding this entry to the header would still keep header size below the limit + maxErrors += 1; + } + else { + break; + } + } + return maxErrors; + } + /** + * Get the region discovery fields + * + * @returns string + */ + getRegionDiscoveryFields() { + const regionDiscoveryFields = []; + regionDiscoveryFields.push(this.regionUsed || ""); + regionDiscoveryFields.push(this.regionSource || ""); + regionDiscoveryFields.push(this.regionOutcome || ""); + return regionDiscoveryFields.join(","); + } + /** + * Update the region discovery metadata + * + * @param regionDiscoveryMetadata + * @returns void + */ + updateRegionDiscoveryMetadata(regionDiscoveryMetadata) { + this.regionUsed = regionDiscoveryMetadata.region_used; + this.regionSource = regionDiscoveryMetadata.region_source; + this.regionOutcome = regionDiscoveryMetadata.region_outcome; + } + /** + * Set cache outcome + */ + setCacheOutcome(cacheOutcome) { + this.cacheOutcome = cacheOutcome; + } + setNativeBrokerErrorCode(errorCode) { + const lastRequests = this.getLastRequests(); + lastRequests.nativeBrokerErrorCode = errorCode; + this.cacheManager.setServerTelemetry(this.telemetryCacheKey, lastRequests, this.correlationId); + } + getNativeBrokerErrorCode() { + return this.getLastRequests().nativeBrokerErrorCode; + } + clearNativeBrokerErrorCode() { + const lastRequests = this.getLastRequests(); + delete lastRequests.nativeBrokerErrorCode; + this.cacheManager.setServerTelemetry(this.telemetryCacheKey, lastRequests, this.correlationId); + } + static makeExtraSkuString(params) { + return makeExtraSkuString(params); + } } @@ -45450,25 +45450,25 @@ class ServerTelemetryManager { -/* - * Copyright (c) Microsoft Corporation. All rights reserved. - * Licensed under the MIT License. - */ -/** - * ClientAuthErrorMessage class containing string constants used by error codes and messages. - */ -/** - * Error thrown when there is an error in the client code running on the browser. - */ -class ClientAuthError extends AuthError { - constructor(errorCode, additionalMessage) { - super(errorCode, additionalMessage); - this.name = "ClientAuthError"; - Object.setPrototypeOf(this, ClientAuthError.prototype); - } -} -function ClientAuthError_createClientAuthError(errorCode, additionalMessage) { - return new ClientAuthError(errorCode, additionalMessage); +/* + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. + */ +/** + * ClientAuthErrorMessage class containing string constants used by error codes and messages. + */ +/** + * Error thrown when there is an error in the client code running on the browser. + */ +class ClientAuthError extends AuthError { + constructor(errorCode, additionalMessage) { + super(errorCode, additionalMessage); + this.name = "ClientAuthError"; + Object.setPrototypeOf(this, ClientAuthError.prototype); + } +} +function ClientAuthError_createClientAuthError(errorCode, additionalMessage) { + return new ClientAuthError(errorCode, additionalMessage); } @@ -45477,48 +45477,48 @@ function ClientAuthError_createClientAuthError(errorCode, additionalMessage) { ;// CONCATENATED MODULE: ./node_modules/@azure/msal-common/dist/error/ClientAuthErrorCodes.mjs /*! @azure/msal-common v16.3.0 2026-03-13 */ -/* - * Copyright (c) Microsoft Corporation. All rights reserved. - * Licensed under the MIT License. - */ -const clientInfoDecodingError = "client_info_decoding_error"; -const clientInfoEmptyError = "client_info_empty_error"; -const tokenParsingError = "token_parsing_error"; -const nullOrEmptyToken = "null_or_empty_token"; -const endpointResolutionError = "endpoints_resolution_error"; -const networkError = "network_error"; -const openIdConfigError = "openid_config_error"; -const hashNotDeserialized = "hash_not_deserialized"; -const ClientAuthErrorCodes_invalidState = "invalid_state"; -const ClientAuthErrorCodes_stateMismatch = "state_mismatch"; -const ClientAuthErrorCodes_stateNotFound = "state_not_found"; -const nonceMismatch = "nonce_mismatch"; -const authTimeNotFound = "auth_time_not_found"; -const maxAgeTranspired = "max_age_transpired"; -const multipleMatchingTokens = "multiple_matching_tokens"; -const multipleMatchingAppMetadata = "multiple_matching_appMetadata"; -const requestCannotBeMade = "request_cannot_be_made"; -const cannotRemoveEmptyScope = "cannot_remove_empty_scope"; -const cannotAppendScopeSet = "cannot_append_scopeset"; -const emptyInputScopeSet = "empty_input_scopeset"; -const noAccountInSilentRequest = "no_account_in_silent_request"; -const invalidCacheRecord = "invalid_cache_record"; -const invalidCacheEnvironment = "invalid_cache_environment"; -const noAccountFound = "no_account_found"; -const ClientAuthErrorCodes_noCryptoObject = "no_crypto_object"; -const unexpectedCredentialType = "unexpected_credential_type"; -const tokenRefreshRequired = "token_refresh_required"; -const tokenClaimsCnfRequiredForSignedJwt = "token_claims_cnf_required_for_signedjwt"; -const ClientAuthErrorCodes_authorizationCodeMissingFromServerResponse = "authorization_code_missing_from_server_response"; -const bindingKeyNotRemoved = "binding_key_not_removed"; -const endSessionEndpointNotSupported = "end_session_endpoint_not_supported"; -const keyIdMissing = "key_id_missing"; -const noNetworkConnectivity = "no_network_connectivity"; -const userCanceled = "user_canceled"; -const methodNotImplemented = "method_not_implemented"; -const nestedAppAuthBridgeDisabled = "nested_app_auth_bridge_disabled"; -const platformBrokerError = "platform_broker_error"; -const resourceParameterRequired = "resource_parameter_required"; +/* + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. + */ +const clientInfoDecodingError = "client_info_decoding_error"; +const clientInfoEmptyError = "client_info_empty_error"; +const tokenParsingError = "token_parsing_error"; +const nullOrEmptyToken = "null_or_empty_token"; +const endpointResolutionError = "endpoints_resolution_error"; +const networkError = "network_error"; +const openIdConfigError = "openid_config_error"; +const hashNotDeserialized = "hash_not_deserialized"; +const ClientAuthErrorCodes_invalidState = "invalid_state"; +const ClientAuthErrorCodes_stateMismatch = "state_mismatch"; +const ClientAuthErrorCodes_stateNotFound = "state_not_found"; +const nonceMismatch = "nonce_mismatch"; +const authTimeNotFound = "auth_time_not_found"; +const maxAgeTranspired = "max_age_transpired"; +const multipleMatchingTokens = "multiple_matching_tokens"; +const multipleMatchingAppMetadata = "multiple_matching_appMetadata"; +const requestCannotBeMade = "request_cannot_be_made"; +const cannotRemoveEmptyScope = "cannot_remove_empty_scope"; +const cannotAppendScopeSet = "cannot_append_scopeset"; +const emptyInputScopeSet = "empty_input_scopeset"; +const noAccountInSilentRequest = "no_account_in_silent_request"; +const invalidCacheRecord = "invalid_cache_record"; +const invalidCacheEnvironment = "invalid_cache_environment"; +const noAccountFound = "no_account_found"; +const ClientAuthErrorCodes_noCryptoObject = "no_crypto_object"; +const unexpectedCredentialType = "unexpected_credential_type"; +const tokenRefreshRequired = "token_refresh_required"; +const tokenClaimsCnfRequiredForSignedJwt = "token_claims_cnf_required_for_signedjwt"; +const ClientAuthErrorCodes_authorizationCodeMissingFromServerResponse = "authorization_code_missing_from_server_response"; +const bindingKeyNotRemoved = "binding_key_not_removed"; +const endSessionEndpointNotSupported = "end_session_endpoint_not_supported"; +const keyIdMissing = "key_id_missing"; +const noNetworkConnectivity = "no_network_connectivity"; +const userCanceled = "user_canceled"; +const methodNotImplemented = "method_not_implemented"; +const nestedAppAuthBridgeDisabled = "nested_app_auth_bridge_disabled"; +const platformBrokerError = "platform_broker_error"; +const resourceParameterRequired = "resource_parameter_required"; const misplacedResourceParam = "misplaced_resource_parameter"; @@ -45530,35 +45530,35 @@ const misplacedResourceParam = "misplaced_resource_parameter"; -/* - * Copyright (c) Microsoft Corporation. All rights reserved. - * Licensed under the MIT License. - */ -/** - * Helper to enforce resource parameter presence in token requests when isMcp is set in the configuration. - * If resource parameter is set in both the request and in extraQueryParameters or extraParameters, an error will be thrown. - * This is used for MCP flows. - * @param isMcp - Flag indicating if application is an MCP app, from configuration - * @param request - Auth request - */ -function enforceResourceParameter(isMcp, request) { - if (!isMcp) { - return; - } - if (request.resource && - (containsResourceParam(request.extraParameters) || - containsResourceParam(request.extraQueryParameters))) { - throw ClientAuthError_createClientAuthError(misplacedResourceParam); - } - if (!request.resource) { - throw ClientAuthError_createClientAuthError(resourceParameterRequired); - } -} -function containsResourceParam(params) { - if (!params) { - return false; - } - return Object.prototype.hasOwnProperty.call(params, "resource"); +/* + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. + */ +/** + * Helper to enforce resource parameter presence in token requests when isMcp is set in the configuration. + * If resource parameter is set in both the request and in extraQueryParameters or extraParameters, an error will be thrown. + * This is used for MCP flows. + * @param isMcp - Flag indicating if application is an MCP app, from configuration + * @param request - Auth request + */ +function enforceResourceParameter(isMcp, request) { + if (!isMcp) { + return; + } + if (request.resource && + (containsResourceParam(request.extraParameters) || + containsResourceParam(request.extraQueryParameters))) { + throw ClientAuthError_createClientAuthError(misplacedResourceParam); + } + if (!request.resource) { + throw ClientAuthError_createClientAuthError(resourceParameterRequired); + } +} +function containsResourceParam(params) { + if (!params) { + return false; + } + return Object.prototype.hasOwnProperty.call(params, "resource"); } @@ -45567,68 +45567,68 @@ function containsResourceParam(params) { ;// CONCATENATED MODULE: ./node_modules/@azure/msal-common/dist/constants/AADServerParamKeys.mjs /*! @azure/msal-common v16.3.0 2026-03-13 */ -/* - * Copyright (c) Microsoft Corporation. All rights reserved. - * Licensed under the MIT License. - */ -const CLIENT_ID = "client_id"; -const REDIRECT_URI = "redirect_uri"; -const RESPONSE_TYPE = "response_type"; -const RESPONSE_MODE = "response_mode"; -const GRANT_TYPE = "grant_type"; -const CLAIMS = "claims"; -const SCOPE = "scope"; -const ERROR = "error"; -const ERROR_DESCRIPTION = "error_description"; -const ACCESS_TOKEN = "access_token"; -const ID_TOKEN = "id_token"; -const REFRESH_TOKEN = "refresh_token"; -const EXPIRES_IN = "expires_in"; -const REFRESH_TOKEN_EXPIRES_IN = "refresh_token_expires_in"; -const STATE = "state"; -const NONCE = "nonce"; -const PROMPT = "prompt"; -const SESSION_STATE = "session_state"; -const AADServerParamKeys_CLIENT_INFO = "client_info"; -const CODE = "code"; -const CODE_CHALLENGE = "code_challenge"; -const CODE_CHALLENGE_METHOD = "code_challenge_method"; -const CODE_VERIFIER = "code_verifier"; -const CLIENT_REQUEST_ID = "client-request-id"; -const X_CLIENT_SKU = "x-client-SKU"; -const X_CLIENT_VER = "x-client-VER"; -const X_CLIENT_OS = "x-client-OS"; -const X_CLIENT_CPU = "x-client-CPU"; -const X_CLIENT_CURR_TELEM = "x-client-current-telemetry"; -const X_CLIENT_LAST_TELEM = "x-client-last-telemetry"; -const X_MS_LIB_CAPABILITY = "x-ms-lib-capability"; -const X_APP_NAME = "x-app-name"; -const X_APP_VER = "x-app-ver"; -const POST_LOGOUT_URI = "post_logout_redirect_uri"; -const ID_TOKEN_HINT = "id_token_hint"; -const DEVICE_CODE = "device_code"; -const CLIENT_SECRET = "client_secret"; -const CLIENT_ASSERTION = "client_assertion"; -const CLIENT_ASSERTION_TYPE = "client_assertion_type"; -const TOKEN_TYPE = "token_type"; -const REQ_CNF = "req_cnf"; -const OBO_ASSERTION = "assertion"; -const REQUESTED_TOKEN_USE = "requested_token_use"; -const ON_BEHALF_OF = "on_behalf_of"; -const FOCI = "foci"; -const CCS_HEADER = "X-AnchorMailbox"; -const RETURN_SPA_CODE = "return_spa_code"; -const AADServerParamKeys_NATIVE_BROKER = "nativebroker"; -const LOGOUT_HINT = "logout_hint"; -const SID = "sid"; -const LOGIN_HINT = "login_hint"; -const DOMAIN_HINT = "domain_hint"; -const X_CLIENT_EXTRA_SKU = "x-client-xtra-sku"; -const BROKER_CLIENT_ID = "brk_client_id"; -const BROKER_REDIRECT_URI = "brk_redirect_uri"; -const INSTANCE_AWARE = "instance_aware"; -const AADServerParamKeys_EAR_JWK = "ear_jwk"; -const AADServerParamKeys_EAR_JWE_CRYPTO = "ear_jwe_crypto"; +/* + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. + */ +const CLIENT_ID = "client_id"; +const REDIRECT_URI = "redirect_uri"; +const RESPONSE_TYPE = "response_type"; +const RESPONSE_MODE = "response_mode"; +const GRANT_TYPE = "grant_type"; +const CLAIMS = "claims"; +const SCOPE = "scope"; +const ERROR = "error"; +const ERROR_DESCRIPTION = "error_description"; +const ACCESS_TOKEN = "access_token"; +const ID_TOKEN = "id_token"; +const REFRESH_TOKEN = "refresh_token"; +const EXPIRES_IN = "expires_in"; +const REFRESH_TOKEN_EXPIRES_IN = "refresh_token_expires_in"; +const STATE = "state"; +const NONCE = "nonce"; +const PROMPT = "prompt"; +const SESSION_STATE = "session_state"; +const AADServerParamKeys_CLIENT_INFO = "client_info"; +const CODE = "code"; +const CODE_CHALLENGE = "code_challenge"; +const CODE_CHALLENGE_METHOD = "code_challenge_method"; +const CODE_VERIFIER = "code_verifier"; +const CLIENT_REQUEST_ID = "client-request-id"; +const X_CLIENT_SKU = "x-client-SKU"; +const X_CLIENT_VER = "x-client-VER"; +const X_CLIENT_OS = "x-client-OS"; +const X_CLIENT_CPU = "x-client-CPU"; +const X_CLIENT_CURR_TELEM = "x-client-current-telemetry"; +const X_CLIENT_LAST_TELEM = "x-client-last-telemetry"; +const X_MS_LIB_CAPABILITY = "x-ms-lib-capability"; +const X_APP_NAME = "x-app-name"; +const X_APP_VER = "x-app-ver"; +const POST_LOGOUT_URI = "post_logout_redirect_uri"; +const ID_TOKEN_HINT = "id_token_hint"; +const DEVICE_CODE = "device_code"; +const CLIENT_SECRET = "client_secret"; +const CLIENT_ASSERTION = "client_assertion"; +const CLIENT_ASSERTION_TYPE = "client_assertion_type"; +const TOKEN_TYPE = "token_type"; +const REQ_CNF = "req_cnf"; +const OBO_ASSERTION = "assertion"; +const REQUESTED_TOKEN_USE = "requested_token_use"; +const ON_BEHALF_OF = "on_behalf_of"; +const FOCI = "foci"; +const CCS_HEADER = "X-AnchorMailbox"; +const RETURN_SPA_CODE = "return_spa_code"; +const AADServerParamKeys_NATIVE_BROKER = "nativebroker"; +const LOGOUT_HINT = "logout_hint"; +const SID = "sid"; +const LOGIN_HINT = "login_hint"; +const DOMAIN_HINT = "domain_hint"; +const X_CLIENT_EXTRA_SKU = "x-client-xtra-sku"; +const BROKER_CLIENT_ID = "brk_client_id"; +const BROKER_REDIRECT_URI = "brk_redirect_uri"; +const INSTANCE_AWARE = "instance_aware"; +const AADServerParamKeys_EAR_JWK = "ear_jwk"; +const AADServerParamKeys_EAR_JWE_CRYPTO = "ear_jwe_crypto"; const RESOURCE = "resource"; @@ -45639,21 +45639,21 @@ const RESOURCE = "resource"; -/* - * Copyright (c) Microsoft Corporation. All rights reserved. - * Licensed under the MIT License. - */ -/** - * Error thrown when there is an error with the server code, for example, unavailability. - */ -class ServerError_ServerError extends AuthError { - constructor(errorCode, errorMessage, subError, errorNo, status) { - super(errorCode, errorMessage, subError); - this.name = "ServerError"; - this.errorNo = errorNo; - this.status = status; - Object.setPrototypeOf(this, ServerError_ServerError.prototype); - } +/* + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. + */ +/** + * Error thrown when there is an error with the server code, for example, unavailability. + */ +class ServerError_ServerError extends AuthError { + constructor(errorCode, errorMessage, subError, errorNo, status) { + super(errorCode, errorMessage, subError); + this.name = "ServerError"; + this.errorNo = errorNo; + this.status = status; + Object.setPrototypeOf(this, ServerError_ServerError.prototype); + } } @@ -45662,426 +45662,426 @@ class ServerError_ServerError extends AuthError { ;// CONCATENATED MODULE: ./node_modules/@azure/msal-common/dist/logger/Logger.mjs /*! @azure/msal-common v16.3.0 2026-03-13 */ -/* - * Copyright (c) Microsoft Corporation. All rights reserved. - * Licensed under the MIT License. - */ -/** - * Log message level. - */ -var LogLevel; -(function (LogLevel) { - LogLevel[LogLevel["Error"] = 0] = "Error"; - LogLevel[LogLevel["Warning"] = 1] = "Warning"; - LogLevel[LogLevel["Info"] = 2] = "Info"; - LogLevel[LogLevel["Verbose"] = 3] = "Verbose"; - LogLevel[LogLevel["Trace"] = 4] = "Trace"; -})(LogLevel || (LogLevel = {})); -// Shared cache state for better minification - using Map's insertion order for LRU -const CACHE_CAPACITY = 50; -const MAX_LOGS_PER_CORRELATION = 500; -const correlationCache = new Map(); -/** - * Mark correlation ID as recently used by moving it to end of Map - * @param correlationId - * @param {CorrelationLogData} data - */ -function markAsRecentlyUsed(correlationId, data) { - correlationCache.delete(correlationId); - correlationCache.set(correlationId, data); -} -/** - * Add log message to cache for specific correlation ID - * @param correlationId - * @param {LoggedMessage} loggedMessage - */ -function addLogToCache(correlationId, loggedMessage) { - const currentTime = Date.now(); - let data = correlationCache.get(correlationId); - if (data) { - // Mark as recently used - markAsRecentlyUsed(correlationId, data); - } - else { - // Create new entry - data = { logs: [], firstEventTime: currentTime }; - correlationCache.set(correlationId, data); - // Remove LRU (first entry) if capacity exceeded - if (correlationCache.size > CACHE_CAPACITY) { - const firstKey = correlationCache.keys().next().value; - if (firstKey) { - correlationCache.delete(firstKey); - } - } - } - // Add log to the data, maintaining max logs per correlation - data.logs.push({ - ...loggedMessage, - milliseconds: currentTime - data.firstEventTime, - }); - if (data.logs.length > MAX_LOGS_PER_CORRELATION) { - data.logs.shift(); // Remove oldest log - } -} -/** - * Get logs for correlation ID and flush them from cache - * Attaches logs with empty correlation id to the requested correlation logs - * @param correlationId - */ -function getAndFlushLogsFromCache(correlationId) { - const res = []; - for (const id of ["", correlationId]) { - const data = correlationCache.get(id); - res.push(...(data?.logs ?? [])); - correlationCache.delete(id); // Remove the correlation ID completely from cache - } - return res; -} -/** - * Checks if a string is already a hashed logging string (6 alphanumeric characters) - */ -function isHashedString(str) { - if (str.length !== 6) { - return false; - } - for (let i = 0; i < str.length; i++) { - const char = str[i]; - const isAlphaNumeric = (char >= "a" && char <= "z") || - (char >= "A" && char <= "Z") || - (char >= "0" && char <= "9"); - if (!isAlphaNumeric) { - return false; - } - } - return true; -} -/** - * Class which facilitates logging of messages to a specific place. - */ -class Logger_Logger { - constructor(loggerOptions, packageName, packageVersion) { - // Current log level, defaults to info. - this.level = LogLevel.Info; - const defaultLoggerCallback = () => { - return; - }; - const setLoggerOptions = loggerOptions || Logger_Logger.createDefaultLoggerOptions(); - this.localCallback = - setLoggerOptions.loggerCallback || defaultLoggerCallback; - this.piiLoggingEnabled = setLoggerOptions.piiLoggingEnabled || false; - this.level = - typeof setLoggerOptions.logLevel === "number" - ? setLoggerOptions.logLevel - : LogLevel.Info; - this.packageName = packageName || ""; - this.packageVersion = packageVersion || ""; - } - static createDefaultLoggerOptions() { - return { - loggerCallback: () => { - // allow users to not set loggerCallback - }, - piiLoggingEnabled: false, - logLevel: LogLevel.Info, - }; - } - /** - * Create new Logger with existing configurations. - */ - clone(packageName, packageVersion) { - return new Logger_Logger({ - loggerCallback: this.localCallback, - piiLoggingEnabled: this.piiLoggingEnabled, - logLevel: this.level, - }, packageName, packageVersion); - } - /** - * Log message with required options. - */ - logMessage(logMessage, options) { - const correlationId = options.correlationId; - const isHashedInput = isHashedString(logMessage); - if (isHashedInput) { - const loggedMessage = { - hash: logMessage, - level: options.logLevel, - containsPii: options.containsPii || false, - milliseconds: 0, // Will be calculated in addLogToCache - }; - addLogToCache(correlationId, loggedMessage); - } - if (options.logLevel > this.level || - (!this.piiLoggingEnabled && options.containsPii)) { - return; - } - const timestamp = new Date().toUTCString(); - // Add correlationId to logs if set, correlationId provided on log messages take precedence - const logHeader = `[${timestamp}] : [${correlationId}]`; - const log = `${logHeader} : ${this.packageName}@${this.packageVersion} : ${LogLevel[options.logLevel]} - ${logMessage}`; - this.executeCallback(options.logLevel, log, options.containsPii || false); - } - /** - * Execute callback with message. - */ - executeCallback(level, message, containsPii) { - if (this.localCallback) { - this.localCallback(level, message, containsPii); - } - } - /** - * Logs error messages. - */ - error(message, correlationId) { - this.logMessage(message, { - logLevel: LogLevel.Error, - containsPii: false, - correlationId: correlationId, - }); - } - /** - * Logs error messages with PII. - */ - errorPii(message, correlationId) { - this.logMessage(message, { - logLevel: LogLevel.Error, - containsPii: true, - correlationId: correlationId, - }); - } - /** - * Logs warning messages. - */ - warning(message, correlationId) { - this.logMessage(message, { - logLevel: LogLevel.Warning, - containsPii: false, - correlationId: correlationId, - }); - } - /** - * Logs warning messages with PII. - */ - warningPii(message, correlationId) { - this.logMessage(message, { - logLevel: LogLevel.Warning, - containsPii: true, - correlationId: correlationId, - }); - } - /** - * Logs info messages. - */ - info(message, correlationId) { - this.logMessage(message, { - logLevel: LogLevel.Info, - containsPii: false, - correlationId: correlationId, - }); - } - /** - * Logs info messages with PII. - */ - infoPii(message, correlationId) { - this.logMessage(message, { - logLevel: LogLevel.Info, - containsPii: true, - correlationId: correlationId, - }); - } - /** - * Logs verbose messages. - */ - verbose(message, correlationId) { - this.logMessage(message, { - logLevel: LogLevel.Verbose, - containsPii: false, - correlationId: correlationId, - }); - } - /** - * Logs verbose messages with PII. - */ - verbosePii(message, correlationId) { - this.logMessage(message, { - logLevel: LogLevel.Verbose, - containsPii: true, - correlationId: correlationId, - }); - } - /** - * Logs trace messages. - */ - trace(message, correlationId) { - this.logMessage(message, { - logLevel: LogLevel.Trace, - containsPii: false, - correlationId: correlationId, - }); - } - /** - * Logs trace messages with PII. - */ - tracePii(message, correlationId) { - this.logMessage(message, { - logLevel: LogLevel.Trace, - containsPii: true, - correlationId: correlationId, - }); - } - /** - * Returns whether PII Logging is enabled or not. - */ - isPiiLoggingEnabled() { - return this.piiLoggingEnabled || false; - } +/* + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. + */ +/** + * Log message level. + */ +var LogLevel; +(function (LogLevel) { + LogLevel[LogLevel["Error"] = 0] = "Error"; + LogLevel[LogLevel["Warning"] = 1] = "Warning"; + LogLevel[LogLevel["Info"] = 2] = "Info"; + LogLevel[LogLevel["Verbose"] = 3] = "Verbose"; + LogLevel[LogLevel["Trace"] = 4] = "Trace"; +})(LogLevel || (LogLevel = {})); +// Shared cache state for better minification - using Map's insertion order for LRU +const CACHE_CAPACITY = 50; +const MAX_LOGS_PER_CORRELATION = 500; +const correlationCache = new Map(); +/** + * Mark correlation ID as recently used by moving it to end of Map + * @param correlationId + * @param {CorrelationLogData} data + */ +function markAsRecentlyUsed(correlationId, data) { + correlationCache.delete(correlationId); + correlationCache.set(correlationId, data); +} +/** + * Add log message to cache for specific correlation ID + * @param correlationId + * @param {LoggedMessage} loggedMessage + */ +function addLogToCache(correlationId, loggedMessage) { + const currentTime = Date.now(); + let data = correlationCache.get(correlationId); + if (data) { + // Mark as recently used + markAsRecentlyUsed(correlationId, data); + } + else { + // Create new entry + data = { logs: [], firstEventTime: currentTime }; + correlationCache.set(correlationId, data); + // Remove LRU (first entry) if capacity exceeded + if (correlationCache.size > CACHE_CAPACITY) { + const firstKey = correlationCache.keys().next().value; + if (firstKey) { + correlationCache.delete(firstKey); + } + } + } + // Add log to the data, maintaining max logs per correlation + data.logs.push({ + ...loggedMessage, + milliseconds: currentTime - data.firstEventTime, + }); + if (data.logs.length > MAX_LOGS_PER_CORRELATION) { + data.logs.shift(); // Remove oldest log + } } - - -//# sourceMappingURL=Logger.mjs.map - -;// CONCATENATED MODULE: ./node_modules/@azure/msal-common/dist/authority/AuthorityType.mjs -/*! @azure/msal-common v16.3.0 2026-03-13 */ - -/* - * Copyright (c) Microsoft Corporation. All rights reserved. - * Licensed under the MIT License. - */ -/** - * Authority types supported by MSAL. - */ -const AuthorityType = { - Default: 0, - Adfs: 1, - Dsts: 2, - Ciam: 3, -}; - - -//# sourceMappingURL=AuthorityType.mjs.map - -;// CONCATENATED MODULE: ./node_modules/@azure/msal-common/dist/authority/OpenIdConfigResponse.mjs -/*! @azure/msal-common v16.3.0 2026-03-13 */ - -/* - * Copyright (c) Microsoft Corporation. All rights reserved. - * Licensed under the MIT License. - */ -function isOpenIdConfigResponse(response) { - return (response.hasOwnProperty("authorization_endpoint") && - response.hasOwnProperty("token_endpoint") && - response.hasOwnProperty("issuer") && - response.hasOwnProperty("jwks_uri")); +/** + * Get logs for correlation ID and flush them from cache + * Attaches logs with empty correlation id to the requested correlation logs + * @param correlationId + */ +function getAndFlushLogsFromCache(correlationId) { + const res = []; + for (const id of ["", correlationId]) { + const data = correlationCache.get(id); + res.push(...(data?.logs ?? [])); + correlationCache.delete(id); // Remove the correlation ID completely from cache + } + return res; } - - -//# sourceMappingURL=OpenIdConfigResponse.mjs.map - -;// CONCATENATED MODULE: ./node_modules/@azure/msal-common/dist/error/ClientConfigurationError.mjs -/*! @azure/msal-common v16.3.0 2026-03-13 */ - - - -/* - * Copyright (c) Microsoft Corporation. All rights reserved. - * Licensed under the MIT License. - */ -/** - * Error thrown when there is an error in configuration of the MSAL.js library. - */ -class ClientConfigurationError extends AuthError { - constructor(errorCode) { - super(errorCode); - this.name = "ClientConfigurationError"; - Object.setPrototypeOf(this, ClientConfigurationError.prototype); - } -} -function ClientConfigurationError_createClientConfigurationError(errorCode) { - return new ClientConfigurationError(errorCode); +/** + * Checks if a string is already a hashed logging string (6 alphanumeric characters) + */ +function isHashedString(str) { + if (str.length !== 6) { + return false; + } + for (let i = 0; i < str.length; i++) { + const char = str[i]; + const isAlphaNumeric = (char >= "a" && char <= "z") || + (char >= "A" && char <= "Z") || + (char >= "0" && char <= "9"); + if (!isAlphaNumeric) { + return false; + } + } + return true; } - - -//# sourceMappingURL=ClientConfigurationError.mjs.map - -;// CONCATENATED MODULE: ./node_modules/@azure/msal-common/dist/utils/StringUtils.mjs -/*! @azure/msal-common v16.3.0 2026-03-13 */ - -/* - * Copyright (c) Microsoft Corporation. All rights reserved. - * Licensed under the MIT License. - */ -/** - * @hidden - */ -class StringUtils_StringUtils { - /** - * Check if stringified object is empty - * @param strObj - */ - static isEmptyObj(strObj) { - if (strObj) { - try { - const obj = JSON.parse(strObj); - return Object.keys(obj).length === 0; - } - catch (e) { } - } - return true; - } - static startsWith(str, search) { - return str.indexOf(search) === 0; - } - static endsWith(str, search) { - return (str.length >= search.length && - str.lastIndexOf(search) === str.length - search.length); - } - /** - * Parses string into an object. - * - * @param query - */ - static queryStringToObject(query) { - const obj = {}; - const params = query.split("&"); - const decode = (s) => decodeURIComponent(s.replace(/\+/g, " ")); - params.forEach((pair) => { - if (pair.trim()) { - const [key, value] = pair.split(/=(.+)/g, 2); // Split on the first occurence of the '=' character - if (key && value) { - obj[decode(key)] = decode(value); - } - } - }); - return obj; - } - /** - * Trims entries in an array. - * - * @param arr - */ - static trimArrayEntries(arr) { - return arr.map((entry) => entry.trim()); - } - /** - * Removes empty strings from array - * @param arr - */ - static removeEmptyStringsFromArray(arr) { - return arr.filter((entry) => { - return !!entry; - }); - } - /** - * Attempts to parse a string into JSON - * @param str - */ - static jsonParseHelper(str) { - try { - return JSON.parse(str); - } - catch (e) { - return null; - } - } +/** + * Class which facilitates logging of messages to a specific place. + */ +class Logger_Logger { + constructor(loggerOptions, packageName, packageVersion) { + // Current log level, defaults to info. + this.level = LogLevel.Info; + const defaultLoggerCallback = () => { + return; + }; + const setLoggerOptions = loggerOptions || Logger_Logger.createDefaultLoggerOptions(); + this.localCallback = + setLoggerOptions.loggerCallback || defaultLoggerCallback; + this.piiLoggingEnabled = setLoggerOptions.piiLoggingEnabled || false; + this.level = + typeof setLoggerOptions.logLevel === "number" + ? setLoggerOptions.logLevel + : LogLevel.Info; + this.packageName = packageName || ""; + this.packageVersion = packageVersion || ""; + } + static createDefaultLoggerOptions() { + return { + loggerCallback: () => { + // allow users to not set loggerCallback + }, + piiLoggingEnabled: false, + logLevel: LogLevel.Info, + }; + } + /** + * Create new Logger with existing configurations. + */ + clone(packageName, packageVersion) { + return new Logger_Logger({ + loggerCallback: this.localCallback, + piiLoggingEnabled: this.piiLoggingEnabled, + logLevel: this.level, + }, packageName, packageVersion); + } + /** + * Log message with required options. + */ + logMessage(logMessage, options) { + const correlationId = options.correlationId; + const isHashedInput = isHashedString(logMessage); + if (isHashedInput) { + const loggedMessage = { + hash: logMessage, + level: options.logLevel, + containsPii: options.containsPii || false, + milliseconds: 0, // Will be calculated in addLogToCache + }; + addLogToCache(correlationId, loggedMessage); + } + if (options.logLevel > this.level || + (!this.piiLoggingEnabled && options.containsPii)) { + return; + } + const timestamp = new Date().toUTCString(); + // Add correlationId to logs if set, correlationId provided on log messages take precedence + const logHeader = `[${timestamp}] : [${correlationId}]`; + const log = `${logHeader} : ${this.packageName}@${this.packageVersion} : ${LogLevel[options.logLevel]} - ${logMessage}`; + this.executeCallback(options.logLevel, log, options.containsPii || false); + } + /** + * Execute callback with message. + */ + executeCallback(level, message, containsPii) { + if (this.localCallback) { + this.localCallback(level, message, containsPii); + } + } + /** + * Logs error messages. + */ + error(message, correlationId) { + this.logMessage(message, { + logLevel: LogLevel.Error, + containsPii: false, + correlationId: correlationId, + }); + } + /** + * Logs error messages with PII. + */ + errorPii(message, correlationId) { + this.logMessage(message, { + logLevel: LogLevel.Error, + containsPii: true, + correlationId: correlationId, + }); + } + /** + * Logs warning messages. + */ + warning(message, correlationId) { + this.logMessage(message, { + logLevel: LogLevel.Warning, + containsPii: false, + correlationId: correlationId, + }); + } + /** + * Logs warning messages with PII. + */ + warningPii(message, correlationId) { + this.logMessage(message, { + logLevel: LogLevel.Warning, + containsPii: true, + correlationId: correlationId, + }); + } + /** + * Logs info messages. + */ + info(message, correlationId) { + this.logMessage(message, { + logLevel: LogLevel.Info, + containsPii: false, + correlationId: correlationId, + }); + } + /** + * Logs info messages with PII. + */ + infoPii(message, correlationId) { + this.logMessage(message, { + logLevel: LogLevel.Info, + containsPii: true, + correlationId: correlationId, + }); + } + /** + * Logs verbose messages. + */ + verbose(message, correlationId) { + this.logMessage(message, { + logLevel: LogLevel.Verbose, + containsPii: false, + correlationId: correlationId, + }); + } + /** + * Logs verbose messages with PII. + */ + verbosePii(message, correlationId) { + this.logMessage(message, { + logLevel: LogLevel.Verbose, + containsPii: true, + correlationId: correlationId, + }); + } + /** + * Logs trace messages. + */ + trace(message, correlationId) { + this.logMessage(message, { + logLevel: LogLevel.Trace, + containsPii: false, + correlationId: correlationId, + }); + } + /** + * Logs trace messages with PII. + */ + tracePii(message, correlationId) { + this.logMessage(message, { + logLevel: LogLevel.Trace, + containsPii: true, + correlationId: correlationId, + }); + } + /** + * Returns whether PII Logging is enabled or not. + */ + isPiiLoggingEnabled() { + return this.piiLoggingEnabled || false; + } +} + + +//# sourceMappingURL=Logger.mjs.map + +;// CONCATENATED MODULE: ./node_modules/@azure/msal-common/dist/authority/AuthorityType.mjs +/*! @azure/msal-common v16.3.0 2026-03-13 */ + +/* + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. + */ +/** + * Authority types supported by MSAL. + */ +const AuthorityType = { + Default: 0, + Adfs: 1, + Dsts: 2, + Ciam: 3, +}; + + +//# sourceMappingURL=AuthorityType.mjs.map + +;// CONCATENATED MODULE: ./node_modules/@azure/msal-common/dist/authority/OpenIdConfigResponse.mjs +/*! @azure/msal-common v16.3.0 2026-03-13 */ + +/* + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. + */ +function isOpenIdConfigResponse(response) { + return (response.hasOwnProperty("authorization_endpoint") && + response.hasOwnProperty("token_endpoint") && + response.hasOwnProperty("issuer") && + response.hasOwnProperty("jwks_uri")); +} + + +//# sourceMappingURL=OpenIdConfigResponse.mjs.map + +;// CONCATENATED MODULE: ./node_modules/@azure/msal-common/dist/error/ClientConfigurationError.mjs +/*! @azure/msal-common v16.3.0 2026-03-13 */ + + + +/* + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. + */ +/** + * Error thrown when there is an error in configuration of the MSAL.js library. + */ +class ClientConfigurationError extends AuthError { + constructor(errorCode) { + super(errorCode); + this.name = "ClientConfigurationError"; + Object.setPrototypeOf(this, ClientConfigurationError.prototype); + } +} +function ClientConfigurationError_createClientConfigurationError(errorCode) { + return new ClientConfigurationError(errorCode); +} + + +//# sourceMappingURL=ClientConfigurationError.mjs.map + +;// CONCATENATED MODULE: ./node_modules/@azure/msal-common/dist/utils/StringUtils.mjs +/*! @azure/msal-common v16.3.0 2026-03-13 */ + +/* + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. + */ +/** + * @hidden + */ +class StringUtils_StringUtils { + /** + * Check if stringified object is empty + * @param strObj + */ + static isEmptyObj(strObj) { + if (strObj) { + try { + const obj = JSON.parse(strObj); + return Object.keys(obj).length === 0; + } + catch (e) { } + } + return true; + } + static startsWith(str, search) { + return str.indexOf(search) === 0; + } + static endsWith(str, search) { + return (str.length >= search.length && + str.lastIndexOf(search) === str.length - search.length); + } + /** + * Parses string into an object. + * + * @param query + */ + static queryStringToObject(query) { + const obj = {}; + const params = query.split("&"); + const decode = (s) => decodeURIComponent(s.replace(/\+/g, " ")); + params.forEach((pair) => { + if (pair.trim()) { + const [key, value] = pair.split(/=(.+)/g, 2); // Split on the first occurence of the '=' character + if (key && value) { + obj[decode(key)] = decode(value); + } + } + }); + return obj; + } + /** + * Trims entries in an array. + * + * @param arr + */ + static trimArrayEntries(arr) { + return arr.map((entry) => entry.trim()); + } + /** + * Removes empty strings from array + * @param arr + */ + static removeEmptyStringsFromArray(arr) { + return arr.filter((entry) => { + return !!entry; + }); + } + /** + * Attempts to parse a string into JSON + * @param str + */ + static jsonParseHelper(str) { + try { + return JSON.parse(str); + } + catch (e) { + return null; + } + } } @@ -46090,31 +46090,31 @@ class StringUtils_StringUtils { ;// CONCATENATED MODULE: ./node_modules/@azure/msal-common/dist/error/ClientConfigurationErrorCodes.mjs /*! @azure/msal-common v16.3.0 2026-03-13 */ -/* - * Copyright (c) Microsoft Corporation. All rights reserved. - * Licensed under the MIT License. - */ -const redirectUriEmpty = "redirect_uri_empty"; -const claimsRequestParsingError = "claims_request_parsing_error"; -const authorityUriInsecure = "authority_uri_insecure"; -const urlParseError = "url_parse_error"; -const urlEmptyError = "empty_url_error"; -const emptyInputScopesError = "empty_input_scopes_error"; -const invalidClaims = "invalid_claims"; -const tokenRequestEmpty = "token_request_empty"; -const logoutRequestEmpty = "logout_request_empty"; -const invalidCodeChallengeMethod = "invalid_code_challenge_method"; -const pkceParamsMissing = "pkce_params_missing"; -const invalidCloudDiscoveryMetadata = "invalid_cloud_discovery_metadata"; -const invalidAuthorityMetadata = "invalid_authority_metadata"; -const untrustedAuthority = "untrusted_authority"; -const missingSshJwk = "missing_ssh_jwk"; -const missingSshKid = "missing_ssh_kid"; -const missingNonceAuthenticationHeader = "missing_nonce_authentication_header"; -const invalidAuthenticationHeader = "invalid_authentication_header"; -const cannotSetOIDCOptions = "cannot_set_OIDCOptions"; -const cannotAllowPlatformBroker = "cannot_allow_platform_broker"; -const authorityMismatch = "authority_mismatch"; +/* + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. + */ +const redirectUriEmpty = "redirect_uri_empty"; +const claimsRequestParsingError = "claims_request_parsing_error"; +const authorityUriInsecure = "authority_uri_insecure"; +const urlParseError = "url_parse_error"; +const urlEmptyError = "empty_url_error"; +const emptyInputScopesError = "empty_input_scopes_error"; +const invalidClaims = "invalid_claims"; +const tokenRequestEmpty = "token_request_empty"; +const logoutRequestEmpty = "logout_request_empty"; +const invalidCodeChallengeMethod = "invalid_code_challenge_method"; +const pkceParamsMissing = "pkce_params_missing"; +const invalidCloudDiscoveryMetadata = "invalid_cloud_discovery_metadata"; +const invalidAuthorityMetadata = "invalid_authority_metadata"; +const untrustedAuthority = "untrusted_authority"; +const missingSshJwk = "missing_ssh_jwk"; +const missingSshKid = "missing_ssh_kid"; +const missingNonceAuthenticationHeader = "missing_nonce_authentication_header"; +const invalidAuthenticationHeader = "invalid_authentication_header"; +const cannotSetOIDCOptions = "cannot_set_OIDCOptions"; +const cannotAllowPlatformBroker = "cannot_allow_platform_broker"; +const authorityMismatch = "authority_mismatch"; const invalidRequestMethodForEAR = "invalid_request_method_for_EAR"; @@ -46128,159 +46128,159 @@ const invalidRequestMethodForEAR = "invalid_request_method_for_EAR"; -/* - * Copyright (c) Microsoft Corporation. All rights reserved. - * Licensed under the MIT License. - */ -/** - * Url object class which can perform various transformations on url strings. - */ -class UrlString { - get urlString() { - return this._urlString; - } - constructor(url) { - this._urlString = url; - if (!this._urlString) { - // Throws error if url is empty - throw ClientConfigurationError_createClientConfigurationError(urlEmptyError); - } - if (!url.includes("#")) { - this._urlString = UrlString.canonicalizeUri(url); - } - } - /** - * Ensure urls are lower case and end with a / character. - * @param url - */ - static canonicalizeUri(url) { - if (url) { - let lowerCaseUrl = url.toLowerCase(); - if (StringUtils_StringUtils.endsWith(lowerCaseUrl, "?")) { - lowerCaseUrl = lowerCaseUrl.slice(0, -1); - } - else if (StringUtils_StringUtils.endsWith(lowerCaseUrl, "?/")) { - lowerCaseUrl = lowerCaseUrl.slice(0, -2); - } - if (!StringUtils_StringUtils.endsWith(lowerCaseUrl, "/")) { - lowerCaseUrl += "/"; - } - return lowerCaseUrl; - } - return url; - } - /** - * Throws if urlString passed is not a valid authority URI string. - */ - validateAsUri() { - // Attempts to parse url for uri components - let components; - try { - components = this.getUrlComponents(); - } - catch (e) { - throw ClientConfigurationError_createClientConfigurationError(urlParseError); - } - // Throw error if URI or path segments are not parseable. - if (!components.HostNameAndPort || !components.PathSegments) { - throw ClientConfigurationError_createClientConfigurationError(urlParseError); - } - // Throw error if uri is insecure. - if (!components.Protocol || - components.Protocol.toLowerCase() !== "https:") { - throw ClientConfigurationError_createClientConfigurationError(authorityUriInsecure); - } - } - /** - * Given a url and a query string return the url with provided query string appended - * @param url - * @param queryString - */ - static appendQueryString(url, queryString) { - if (!queryString) { - return url; - } - return url.indexOf("?") < 0 - ? `${url}?${queryString}` - : `${url}&${queryString}`; - } - /** - * Returns a url with the hash removed - * @param url - */ - static removeHashFromUrl(url) { - return UrlString.canonicalizeUri(url.split("#")[0]); - } - /** - * Given a url like https://a:b/common/d?e=f#g, and a tenantId, returns https://a:b/tenantId/d - * @param href The url - * @param tenantId The tenant id to replace - */ - replaceTenantPath(tenantId) { - const urlObject = this.getUrlComponents(); - const pathArray = urlObject.PathSegments; - if (tenantId && - pathArray.length !== 0 && - (pathArray[0] === AADAuthority.COMMON || - pathArray[0] === AADAuthority.ORGANIZATIONS)) { - pathArray[0] = tenantId; - } - return UrlString.constructAuthorityUriFromObject(urlObject); - } - /** - * Parses out the components from a url string. - * @returns An object with the various components. Please cache this value insted of calling this multiple times on the same url. - */ - getUrlComponents() { - // https://gist.github.com/curtisz/11139b2cfcaef4a261e0 - const regEx = RegExp("^(([^:/?#]+):)?(//([^/?#]*))?([^?#]*)(\\?([^#]*))?(#(.*))?"); - // If url string does not match regEx, we throw an error - const match = this.urlString.match(regEx); - if (!match) { - throw ClientConfigurationError_createClientConfigurationError(urlParseError); - } - // Url component object - const urlComponents = { - Protocol: match[1], - HostNameAndPort: match[4], - AbsolutePath: match[5], - QueryString: match[7], - }; - let pathSegments = urlComponents.AbsolutePath.split("/"); - pathSegments = pathSegments.filter((val) => val && val.length > 0); // remove empty elements - urlComponents.PathSegments = pathSegments; - if (urlComponents.QueryString && - urlComponents.QueryString.endsWith("/")) { - urlComponents.QueryString = urlComponents.QueryString.substring(0, urlComponents.QueryString.length - 1); - } - return urlComponents; - } - static getDomainFromUrl(url) { - const regEx = RegExp("^([^:/?#]+://)?([^/?#]*)"); - const match = url.match(regEx); - if (!match) { - throw ClientConfigurationError_createClientConfigurationError(urlParseError); - } - return match[2]; - } - static getAbsoluteUrl(relativeUrl, baseUrl) { - if (relativeUrl[0] === FORWARD_SLASH) { - const url = new UrlString(baseUrl); - const baseComponents = url.getUrlComponents(); - return (baseComponents.Protocol + - "//" + - baseComponents.HostNameAndPort + - relativeUrl); - } - return relativeUrl; - } - static constructAuthorityUriFromObject(urlObject) { - return new UrlString(urlObject.Protocol + - "//" + - urlObject.HostNameAndPort + - "/" + - urlObject.PathSegments.join("/")); - } +/* + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. + */ +/** + * Url object class which can perform various transformations on url strings. + */ +class UrlString { + get urlString() { + return this._urlString; + } + constructor(url) { + this._urlString = url; + if (!this._urlString) { + // Throws error if url is empty + throw ClientConfigurationError_createClientConfigurationError(urlEmptyError); + } + if (!url.includes("#")) { + this._urlString = UrlString.canonicalizeUri(url); + } + } + /** + * Ensure urls are lower case and end with a / character. + * @param url + */ + static canonicalizeUri(url) { + if (url) { + let lowerCaseUrl = url.toLowerCase(); + if (StringUtils_StringUtils.endsWith(lowerCaseUrl, "?")) { + lowerCaseUrl = lowerCaseUrl.slice(0, -1); + } + else if (StringUtils_StringUtils.endsWith(lowerCaseUrl, "?/")) { + lowerCaseUrl = lowerCaseUrl.slice(0, -2); + } + if (!StringUtils_StringUtils.endsWith(lowerCaseUrl, "/")) { + lowerCaseUrl += "/"; + } + return lowerCaseUrl; + } + return url; + } + /** + * Throws if urlString passed is not a valid authority URI string. + */ + validateAsUri() { + // Attempts to parse url for uri components + let components; + try { + components = this.getUrlComponents(); + } + catch (e) { + throw ClientConfigurationError_createClientConfigurationError(urlParseError); + } + // Throw error if URI or path segments are not parseable. + if (!components.HostNameAndPort || !components.PathSegments) { + throw ClientConfigurationError_createClientConfigurationError(urlParseError); + } + // Throw error if uri is insecure. + if (!components.Protocol || + components.Protocol.toLowerCase() !== "https:") { + throw ClientConfigurationError_createClientConfigurationError(authorityUriInsecure); + } + } + /** + * Given a url and a query string return the url with provided query string appended + * @param url + * @param queryString + */ + static appendQueryString(url, queryString) { + if (!queryString) { + return url; + } + return url.indexOf("?") < 0 + ? `${url}?${queryString}` + : `${url}&${queryString}`; + } + /** + * Returns a url with the hash removed + * @param url + */ + static removeHashFromUrl(url) { + return UrlString.canonicalizeUri(url.split("#")[0]); + } + /** + * Given a url like https://a:b/common/d?e=f#g, and a tenantId, returns https://a:b/tenantId/d + * @param href The url + * @param tenantId The tenant id to replace + */ + replaceTenantPath(tenantId) { + const urlObject = this.getUrlComponents(); + const pathArray = urlObject.PathSegments; + if (tenantId && + pathArray.length !== 0 && + (pathArray[0] === AADAuthority.COMMON || + pathArray[0] === AADAuthority.ORGANIZATIONS)) { + pathArray[0] = tenantId; + } + return UrlString.constructAuthorityUriFromObject(urlObject); + } + /** + * Parses out the components from a url string. + * @returns An object with the various components. Please cache this value insted of calling this multiple times on the same url. + */ + getUrlComponents() { + // https://gist.github.com/curtisz/11139b2cfcaef4a261e0 + const regEx = RegExp("^(([^:/?#]+):)?(//([^/?#]*))?([^?#]*)(\\?([^#]*))?(#(.*))?"); + // If url string does not match regEx, we throw an error + const match = this.urlString.match(regEx); + if (!match) { + throw ClientConfigurationError_createClientConfigurationError(urlParseError); + } + // Url component object + const urlComponents = { + Protocol: match[1], + HostNameAndPort: match[4], + AbsolutePath: match[5], + QueryString: match[7], + }; + let pathSegments = urlComponents.AbsolutePath.split("/"); + pathSegments = pathSegments.filter((val) => val && val.length > 0); // remove empty elements + urlComponents.PathSegments = pathSegments; + if (urlComponents.QueryString && + urlComponents.QueryString.endsWith("/")) { + urlComponents.QueryString = urlComponents.QueryString.substring(0, urlComponents.QueryString.length - 1); + } + return urlComponents; + } + static getDomainFromUrl(url) { + const regEx = RegExp("^([^:/?#]+://)?([^/?#]*)"); + const match = url.match(regEx); + if (!match) { + throw ClientConfigurationError_createClientConfigurationError(urlParseError); + } + return match[2]; + } + static getAbsoluteUrl(relativeUrl, baseUrl) { + if (relativeUrl[0] === FORWARD_SLASH) { + const url = new UrlString(baseUrl); + const baseComponents = url.getUrlComponents(); + return (baseComponents.Protocol + + "//" + + baseComponents.HostNameAndPort + + relativeUrl); + } + return relativeUrl; + } + static constructAuthorityUriFromObject(urlObject) { + return new UrlString(urlObject.Protocol + + "//" + + urlObject.HostNameAndPort + + "/" + + urlObject.PathSegments.join("/")); + } } @@ -46292,159 +46292,159 @@ class UrlString { -/* - * Copyright (c) Microsoft Corporation. All rights reserved. - * Licensed under the MIT License. - */ -// Build endpoint metadata dynamically to avoid string duplication -const endpointHosts = [ - { host: "login.microsoftonline.com" }, - { - host: "login.chinacloudapi.cn", - issuerHost: "login.partner.microsoftonline.cn", // Issuer differs - }, - { host: "login.microsoftonline.us" }, - { host: "login.sovcloud-identity.fr" }, - { host: "login.sovcloud-identity.de" }, - { host: "login.sovcloud-identity.sg" }, -]; -function buildOpenIdConfig(host, issuerHost) { - return { - token_endpoint: `https://${host}/{tenantid}/oauth2/v2.0/token`, - jwks_uri: `https://${host}/{tenantid}/discovery/v2.0/keys`, - issuer: `https://${issuerHost}/{tenantid}/v2.0`, - authorization_endpoint: `https://${host}/{tenantid}/oauth2/v2.0/authorize`, - end_session_endpoint: `https://${host}/{tenantid}/oauth2/v2.0/logout`, - }; -} -const dynamicEndpointMetadata = endpointHosts.reduce((acc, { host, issuerHost }) => { - acc[host] = buildOpenIdConfig(host, issuerHost || host); - return acc; -}, {}); -const rawMetdataJSON = { - endpointMetadata: dynamicEndpointMetadata, - instanceDiscoveryMetadata: { - metadata: [ - { - preferred_network: "login.microsoftonline.com", - preferred_cache: "login.windows.net", - aliases: [ - "login.microsoftonline.com", - "login.windows.net", - "login.microsoft.com", - "sts.windows.net", - ], - }, - { - preferred_network: "login.partner.microsoftonline.cn", - preferred_cache: "login.partner.microsoftonline.cn", - aliases: [ - "login.partner.microsoftonline.cn", - "login.chinacloudapi.cn", - ], - }, - { - preferred_network: "login.microsoftonline.de", - preferred_cache: "login.microsoftonline.de", - aliases: ["login.microsoftonline.de"], - }, - { - preferred_network: "login.microsoftonline.us", - preferred_cache: "login.microsoftonline.us", - aliases: [ - "login.microsoftonline.us", - "login.usgovcloudapi.net", - ], - }, - { - preferred_network: "login-us.microsoftonline.com", - preferred_cache: "login-us.microsoftonline.com", - aliases: ["login-us.microsoftonline.com"], - }, - { - preferred_network: "login.sovcloud-identity.fr", - preferred_cache: "login.sovcloud-identity.fr", - aliases: ["login.sovcloud-identity.fr"], - }, - { - preferred_network: "login.sovcloud-identity.de", - preferred_cache: "login.sovcloud-identity.de", - aliases: ["login.sovcloud-identity.de"], - }, - { - preferred_network: "login.sovcloud-identity.sg", - preferred_cache: "login.sovcloud-identity.sg", - aliases: ["login.sovcloud-identity.sg"], - }, - ], - }, -}; -const EndpointMetadata = rawMetdataJSON.endpointMetadata; -const InstanceDiscoveryMetadata = rawMetdataJSON.instanceDiscoveryMetadata; -const InstanceDiscoveryMetadataAliases = new Set(); -InstanceDiscoveryMetadata.metadata.forEach((metadataEntry) => { - metadataEntry.aliases.forEach((alias) => { - InstanceDiscoveryMetadataAliases.add(alias); - }); -}); -/** - * Attempts to get an aliases array from the static authority metadata sources based on the canonical authority host - * @param staticAuthorityOptions - * @param logger - * @returns - */ -function getAliasesFromStaticSources(staticAuthorityOptions, logger, correlationId) { - let staticAliases; - const canonicalAuthority = staticAuthorityOptions.canonicalAuthority; - if (canonicalAuthority) { - const authorityHost = new UrlString(canonicalAuthority).getUrlComponents().HostNameAndPort; - staticAliases = - getAliasesFromMetadata(logger, correlationId, authorityHost, staticAuthorityOptions.cloudDiscoveryMetadata?.metadata, AuthorityMetadataSource.CONFIG) || - getAliasesFromMetadata(logger, correlationId, authorityHost, InstanceDiscoveryMetadata.metadata, AuthorityMetadataSource.HARDCODED_VALUES) || - staticAuthorityOptions.knownAuthorities; - } - return staticAliases || []; -} -/** - * Returns aliases for from the raw cloud discovery metadata passed in - * @param authorityHost - * @param rawCloudDiscoveryMetadata - * @returns - */ -function getAliasesFromMetadata(logger, correlationId, authorityHost, cloudDiscoveryMetadata, source) { - logger.trace(`getAliasesFromMetadata called with source: '${source}'`, correlationId); - if (authorityHost && cloudDiscoveryMetadata) { - const metadata = getCloudDiscoveryMetadataFromNetworkResponse(cloudDiscoveryMetadata, authorityHost); - if (metadata) { - logger.trace(`getAliasesFromMetadata: found cloud discovery metadata in '${source}', returning aliases`, correlationId); - return metadata.aliases; - } - else { - logger.trace(`getAliasesFromMetadata: did not find cloud discovery metadata in '${source}'`, correlationId); - } - } - return null; -} -/** - * Get cloud discovery metadata for common authorities - */ -function getCloudDiscoveryMetadataFromHardcodedValues(authorityHost) { - const metadata = getCloudDiscoveryMetadataFromNetworkResponse(InstanceDiscoveryMetadata.metadata, authorityHost); - return metadata; -} -/** - * Searches instance discovery network response for the entry that contains the host in the aliases list - * @param response - * @param authority - */ -function getCloudDiscoveryMetadataFromNetworkResponse(response, authorityHost) { - for (let i = 0; i < response.length; i++) { - const metadata = response[i]; - if (metadata.aliases.includes(authorityHost)) { - return metadata; - } - } - return null; +/* + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. + */ +// Build endpoint metadata dynamically to avoid string duplication +const endpointHosts = [ + { host: "login.microsoftonline.com" }, + { + host: "login.chinacloudapi.cn", + issuerHost: "login.partner.microsoftonline.cn", // Issuer differs + }, + { host: "login.microsoftonline.us" }, + { host: "login.sovcloud-identity.fr" }, + { host: "login.sovcloud-identity.de" }, + { host: "login.sovcloud-identity.sg" }, +]; +function buildOpenIdConfig(host, issuerHost) { + return { + token_endpoint: `https://${host}/{tenantid}/oauth2/v2.0/token`, + jwks_uri: `https://${host}/{tenantid}/discovery/v2.0/keys`, + issuer: `https://${issuerHost}/{tenantid}/v2.0`, + authorization_endpoint: `https://${host}/{tenantid}/oauth2/v2.0/authorize`, + end_session_endpoint: `https://${host}/{tenantid}/oauth2/v2.0/logout`, + }; +} +const dynamicEndpointMetadata = endpointHosts.reduce((acc, { host, issuerHost }) => { + acc[host] = buildOpenIdConfig(host, issuerHost || host); + return acc; +}, {}); +const rawMetdataJSON = { + endpointMetadata: dynamicEndpointMetadata, + instanceDiscoveryMetadata: { + metadata: [ + { + preferred_network: "login.microsoftonline.com", + preferred_cache: "login.windows.net", + aliases: [ + "login.microsoftonline.com", + "login.windows.net", + "login.microsoft.com", + "sts.windows.net", + ], + }, + { + preferred_network: "login.partner.microsoftonline.cn", + preferred_cache: "login.partner.microsoftonline.cn", + aliases: [ + "login.partner.microsoftonline.cn", + "login.chinacloudapi.cn", + ], + }, + { + preferred_network: "login.microsoftonline.de", + preferred_cache: "login.microsoftonline.de", + aliases: ["login.microsoftonline.de"], + }, + { + preferred_network: "login.microsoftonline.us", + preferred_cache: "login.microsoftonline.us", + aliases: [ + "login.microsoftonline.us", + "login.usgovcloudapi.net", + ], + }, + { + preferred_network: "login-us.microsoftonline.com", + preferred_cache: "login-us.microsoftonline.com", + aliases: ["login-us.microsoftonline.com"], + }, + { + preferred_network: "login.sovcloud-identity.fr", + preferred_cache: "login.sovcloud-identity.fr", + aliases: ["login.sovcloud-identity.fr"], + }, + { + preferred_network: "login.sovcloud-identity.de", + preferred_cache: "login.sovcloud-identity.de", + aliases: ["login.sovcloud-identity.de"], + }, + { + preferred_network: "login.sovcloud-identity.sg", + preferred_cache: "login.sovcloud-identity.sg", + aliases: ["login.sovcloud-identity.sg"], + }, + ], + }, +}; +const EndpointMetadata = rawMetdataJSON.endpointMetadata; +const InstanceDiscoveryMetadata = rawMetdataJSON.instanceDiscoveryMetadata; +const InstanceDiscoveryMetadataAliases = new Set(); +InstanceDiscoveryMetadata.metadata.forEach((metadataEntry) => { + metadataEntry.aliases.forEach((alias) => { + InstanceDiscoveryMetadataAliases.add(alias); + }); +}); +/** + * Attempts to get an aliases array from the static authority metadata sources based on the canonical authority host + * @param staticAuthorityOptions + * @param logger + * @returns + */ +function getAliasesFromStaticSources(staticAuthorityOptions, logger, correlationId) { + let staticAliases; + const canonicalAuthority = staticAuthorityOptions.canonicalAuthority; + if (canonicalAuthority) { + const authorityHost = new UrlString(canonicalAuthority).getUrlComponents().HostNameAndPort; + staticAliases = + getAliasesFromMetadata(logger, correlationId, authorityHost, staticAuthorityOptions.cloudDiscoveryMetadata?.metadata, AuthorityMetadataSource.CONFIG) || + getAliasesFromMetadata(logger, correlationId, authorityHost, InstanceDiscoveryMetadata.metadata, AuthorityMetadataSource.HARDCODED_VALUES) || + staticAuthorityOptions.knownAuthorities; + } + return staticAliases || []; +} +/** + * Returns aliases for from the raw cloud discovery metadata passed in + * @param authorityHost + * @param rawCloudDiscoveryMetadata + * @returns + */ +function getAliasesFromMetadata(logger, correlationId, authorityHost, cloudDiscoveryMetadata, source) { + logger.trace(`getAliasesFromMetadata called with source: '${source}'`, correlationId); + if (authorityHost && cloudDiscoveryMetadata) { + const metadata = getCloudDiscoveryMetadataFromNetworkResponse(cloudDiscoveryMetadata, authorityHost); + if (metadata) { + logger.trace(`getAliasesFromMetadata: found cloud discovery metadata in '${source}', returning aliases`, correlationId); + return metadata.aliases; + } + else { + logger.trace(`getAliasesFromMetadata: did not find cloud discovery metadata in '${source}'`, correlationId); + } + } + return null; +} +/** + * Get cloud discovery metadata for common authorities + */ +function getCloudDiscoveryMetadataFromHardcodedValues(authorityHost) { + const metadata = getCloudDiscoveryMetadataFromNetworkResponse(InstanceDiscoveryMetadata.metadata, authorityHost); + return metadata; +} +/** + * Searches instance discovery network response for the entry that contains the host in the aliases list + * @param response + * @param authority + */ +function getCloudDiscoveryMetadataFromNetworkResponse(response, authorityHost) { + for (let i = 0; i < response.length; i++) { + const metadata = response[i]; + if (metadata.aliases.includes(authorityHost)) { + return metadata; + } + } + return null; } @@ -46453,27 +46453,27 @@ function getCloudDiscoveryMetadataFromNetworkResponse(response, authorityHost) { ;// CONCATENATED MODULE: ./node_modules/@azure/msal-common/dist/authority/ProtocolMode.mjs /*! @azure/msal-common v16.3.0 2026-03-13 */ -/* - * Copyright (c) Microsoft Corporation. All rights reserved. - * Licensed under the MIT License. - */ -/** - * Protocol modes supported by MSAL. - */ -const ProtocolMode_ProtocolMode = { - /** - * Auth Code + PKCE with Entra ID (formerly AAD) specific optimizations and features - */ - AAD: "AAD", - /** - * Auth Code + PKCE without Entra ID specific optimizations and features. For use only with non-Microsoft owned authorities. - * Support is limited for this mode. - */ - OIDC: "OIDC", - /** - * Encrypted Authorize Response (EAR) with Entra ID specific optimizations and features - */ - EAR: "EAR", +/* + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. + */ +/** + * Protocol modes supported by MSAL. + */ +const ProtocolMode_ProtocolMode = { + /** + * Auth Code + PKCE with Entra ID (formerly AAD) specific optimizations and features + */ + AAD: "AAD", + /** + * Auth Code + PKCE without Entra ID specific optimizations and features. For use only with non-Microsoft owned authorities. + * Support is limited for this mode. + */ + OIDC: "OIDC", + /** + * Encrypted Authorize Response (EAR) with Entra ID specific optimizations and features + */ + EAR: "EAR", }; @@ -46482,23 +46482,23 @@ const ProtocolMode_ProtocolMode = { ;// CONCATENATED MODULE: ./node_modules/@azure/msal-common/dist/authority/AuthorityOptions.mjs /*! @azure/msal-common v16.3.0 2026-03-13 */ -/* - * Copyright (c) Microsoft Corporation. All rights reserved. - * Licensed under the MIT License. - */ -const AzureCloudInstance = { - // AzureCloudInstance is not specified. - None: "none", - // Microsoft Azure public cloud - AzurePublic: "https://login.microsoftonline.com", - // Microsoft PPE - AzurePpe: "https://login.windows-ppe.net", - // Microsoft Chinese national/regional cloud - AzureChina: "https://login.chinacloudapi.cn", - // Microsoft German national/regional cloud ("Black Forest") - AzureGermany: "https://login.microsoftonline.de", - // US Government cloud - AzureUsGovernment: "https://login.microsoftonline.us", +/* + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. + */ +const AzureCloudInstance = { + // AzureCloudInstance is not specified. + None: "none", + // Microsoft Azure public cloud + AzurePublic: "https://login.microsoftonline.com", + // Microsoft PPE + AzurePpe: "https://login.windows-ppe.net", + // Microsoft Chinese national/regional cloud + AzureChina: "https://login.chinacloudapi.cn", + // Microsoft German national/regional cloud ("Black Forest") + AzureGermany: "https://login.microsoftonline.de", + // US Government cloud + AzureUsGovernment: "https://login.microsoftonline.us", }; @@ -46507,13 +46507,13 @@ const AzureCloudInstance = { ;// CONCATENATED MODULE: ./node_modules/@azure/msal-common/dist/authority/CloudInstanceDiscoveryResponse.mjs /*! @azure/msal-common v16.3.0 2026-03-13 */ -/* - * Copyright (c) Microsoft Corporation. All rights reserved. - * Licensed under the MIT License. - */ -function isCloudInstanceDiscoveryResponse(response) { - return (response.hasOwnProperty("tenant_discovery_endpoint") && - response.hasOwnProperty("metadata")); +/* + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. + */ +function isCloudInstanceDiscoveryResponse(response) { + return (response.hasOwnProperty("tenant_discovery_endpoint") && + response.hasOwnProperty("metadata")); } @@ -46522,13 +46522,13 @@ function isCloudInstanceDiscoveryResponse(response) { ;// CONCATENATED MODULE: ./node_modules/@azure/msal-common/dist/authority/CloudInstanceDiscoveryErrorResponse.mjs /*! @azure/msal-common v16.3.0 2026-03-13 */ -/* - * Copyright (c) Microsoft Corporation. All rights reserved. - * Licensed under the MIT License. - */ -function isCloudInstanceDiscoveryErrorResponse(response) { - return (response.hasOwnProperty("error") && - response.hasOwnProperty("error_description")); +/* + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. + */ +function isCloudInstanceDiscoveryErrorResponse(response) { + return (response.hasOwnProperty("error") && + response.hasOwnProperty("error_description")); } @@ -46537,172 +46537,172 @@ function isCloudInstanceDiscoveryErrorResponse(response) { ;// CONCATENATED MODULE: ./node_modules/@azure/msal-common/dist/telemetry/performance/PerformanceEvents.mjs /*! @azure/msal-common v16.3.0 2026-03-13 */ -/* - * Copyright (c) Microsoft Corporation. All rights reserved. - * Licensed under the MIT License. - */ -/** - * Time spent sending/waiting for the response of a request to the token endpoint - */ -const NetworkClientSendPostRequestAsync = "networkClientSendPostRequestAsync"; -const RefreshTokenClientExecutePostToTokenEndpoint = "refreshTokenClientExecutePostToTokenEndpoint"; -const AuthorizationCodeClientExecutePostToTokenEndpoint = "authorizationCodeClientExecutePostToTokenEndpoint"; -/** - * Time spent on the network for refresh token acquisition - */ -const RefreshTokenClientExecuteTokenRequest = "refreshTokenClientExecuteTokenRequest"; -/** - * Time taken for acquiring refresh token , records RT size - */ -const RefreshTokenClientAcquireToken = "refreshTokenClientAcquireToken"; -/** - * Time taken for acquiring cached refresh token - */ -const RefreshTokenClientAcquireTokenWithCachedRefreshToken = "refreshTokenClientAcquireTokenWithCachedRefreshToken"; -/** - * Helper function to create token request body in RefreshTokenClient (msal-common). - */ -const RefreshTokenClientCreateTokenRequestBody = "refreshTokenClientCreateTokenRequestBody"; -const SilentFlowClientGenerateResultFromCacheRecord = "silentFlowClientGenerateResultFromCacheRecord"; -/** - * getAuthCodeUrl API (msal-browser and msal-node). - */ -const GetAuthCodeUrl = "getAuthCodeUrl"; -/** - * Functions from InteractionHandler (msal-browser) - */ -const HandleCodeResponseFromServer = "handleCodeResponseFromServer"; -/** - * APIs in Authorization Code Client (msal-common) - */ -const AuthClientExecuteTokenRequest = "authClientExecuteTokenRequest"; -const AuthClientCreateTokenRequestBody = "authClientCreateTokenRequestBody"; -const UpdateTokenEndpointAuthority = "updateTokenEndpointAuthority"; -/** - * Generate functions in PopTokenGenerator (msal-common) - */ -const PopTokenGenerateCnf = "popTokenGenerateCnf"; -/** - * handleServerTokenResponse API in ResponseHandler (msal-common) - */ -const HandleServerTokenResponse = "handleServerTokenResponse"; -/** - * Authority functions - */ -const AuthorityResolveEndpointsAsync = "authorityResolveEndpointsAsync"; -const AuthorityGetCloudDiscoveryMetadataFromNetwork = "authorityGetCloudDiscoveryMetadataFromNetwork"; -const AuthorityUpdateCloudDiscoveryMetadata = "authorityUpdateCloudDiscoveryMetadata"; -const AuthorityGetEndpointMetadataFromNetwork = "authorityGetEndpointMetadataFromNetwork"; -const AuthorityUpdateEndpointMetadata = "authorityUpdateEndpointMetadata"; -const AuthorityUpdateMetadataWithRegionalInformation = "authorityUpdateMetadataWithRegionalInformation"; -/** - * Region Discovery functions - */ -const RegionDiscoveryDetectRegion = "regionDiscoveryDetectRegion"; -const RegionDiscoveryGetRegionFromIMDS = "regionDiscoveryGetRegionFromIMDS"; -const RegionDiscoveryGetCurrentVersion = "regionDiscoveryGetCurrentVersion"; -/** - * Cache operations - */ -const CacheManagerGetRefreshToken = "cacheManagerGetRefreshToken"; -const SetUserData = "setUserData"; - - -//# sourceMappingURL=PerformanceEvents.mjs.map - +/* + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. + */ +/** + * Time spent sending/waiting for the response of a request to the token endpoint + */ +const NetworkClientSendPostRequestAsync = "networkClientSendPostRequestAsync"; +const RefreshTokenClientExecutePostToTokenEndpoint = "refreshTokenClientExecutePostToTokenEndpoint"; +const AuthorizationCodeClientExecutePostToTokenEndpoint = "authorizationCodeClientExecutePostToTokenEndpoint"; +/** + * Time spent on the network for refresh token acquisition + */ +const RefreshTokenClientExecuteTokenRequest = "refreshTokenClientExecuteTokenRequest"; +/** + * Time taken for acquiring refresh token , records RT size + */ +const RefreshTokenClientAcquireToken = "refreshTokenClientAcquireToken"; +/** + * Time taken for acquiring cached refresh token + */ +const RefreshTokenClientAcquireTokenWithCachedRefreshToken = "refreshTokenClientAcquireTokenWithCachedRefreshToken"; +/** + * Helper function to create token request body in RefreshTokenClient (msal-common). + */ +const RefreshTokenClientCreateTokenRequestBody = "refreshTokenClientCreateTokenRequestBody"; +const SilentFlowClientGenerateResultFromCacheRecord = "silentFlowClientGenerateResultFromCacheRecord"; +/** + * getAuthCodeUrl API (msal-browser and msal-node). + */ +const GetAuthCodeUrl = "getAuthCodeUrl"; +/** + * Functions from InteractionHandler (msal-browser) + */ +const HandleCodeResponseFromServer = "handleCodeResponseFromServer"; +/** + * APIs in Authorization Code Client (msal-common) + */ +const AuthClientExecuteTokenRequest = "authClientExecuteTokenRequest"; +const AuthClientCreateTokenRequestBody = "authClientCreateTokenRequestBody"; +const UpdateTokenEndpointAuthority = "updateTokenEndpointAuthority"; +/** + * Generate functions in PopTokenGenerator (msal-common) + */ +const PopTokenGenerateCnf = "popTokenGenerateCnf"; +/** + * handleServerTokenResponse API in ResponseHandler (msal-common) + */ +const HandleServerTokenResponse = "handleServerTokenResponse"; +/** + * Authority functions + */ +const AuthorityResolveEndpointsAsync = "authorityResolveEndpointsAsync"; +const AuthorityGetCloudDiscoveryMetadataFromNetwork = "authorityGetCloudDiscoveryMetadataFromNetwork"; +const AuthorityUpdateCloudDiscoveryMetadata = "authorityUpdateCloudDiscoveryMetadata"; +const AuthorityGetEndpointMetadataFromNetwork = "authorityGetEndpointMetadataFromNetwork"; +const AuthorityUpdateEndpointMetadata = "authorityUpdateEndpointMetadata"; +const AuthorityUpdateMetadataWithRegionalInformation = "authorityUpdateMetadataWithRegionalInformation"; +/** + * Region Discovery functions + */ +const RegionDiscoveryDetectRegion = "regionDiscoveryDetectRegion"; +const RegionDiscoveryGetRegionFromIMDS = "regionDiscoveryGetRegionFromIMDS"; +const RegionDiscoveryGetCurrentVersion = "regionDiscoveryGetCurrentVersion"; +/** + * Cache operations + */ +const CacheManagerGetRefreshToken = "cacheManagerGetRefreshToken"; +const SetUserData = "setUserData"; + + +//# sourceMappingURL=PerformanceEvents.mjs.map + ;// CONCATENATED MODULE: ./node_modules/@azure/msal-common/dist/utils/FunctionWrappers.mjs /*! @azure/msal-common v16.3.0 2026-03-13 */ -/* - * Copyright (c) Microsoft Corporation. All rights reserved. - * Licensed under the MIT License. - */ -/** - * Wraps a function with a performance measurement. - * Usage: invoke(functionToCall, performanceClient, "EventName", "correlationId")(...argsToPassToFunction) - * @param callback - * @param eventName - * @param logger - * @param telemetryClient - * @param correlationId - * @returns - * @internal - */ -// eslint-disable-next-line @typescript-eslint/no-explicit-any -const invoke = (callback, eventName, logger, telemetryClient, correlationId) => { - return (...args) => { - logger.trace(`Executing function '${eventName}'`, correlationId); - const inProgressEvent = telemetryClient.startMeasurement(eventName, correlationId); - if (correlationId) { - // Track number of times this API is called in a single request - telemetryClient.incrementFields({ [`ext.${eventName}CallCount`]: 1 }, correlationId); - } - try { - const result = callback(...args); - inProgressEvent.end({ - success: true, - }); - logger.trace(`Returning result from '${eventName}'`, correlationId); - return result; - } - catch (e) { - logger.trace(`Error occurred in '${eventName}'`, correlationId); - try { - logger.trace(JSON.stringify(e), correlationId); - } - catch (e) { - logger.trace("Unable to print error message.", correlationId); - } - inProgressEvent.end({ - success: false, - }, e); - throw e; - } - }; -}; -/** - * Wraps an async function with a performance measurement. - * Usage: invokeAsync(functionToCall, performanceClient, "EventName", "correlationId")(...argsToPassToFunction) - * @param callback - * @param eventName - * @param logger - * @param telemetryClient - * @param correlationId - * @returns - * @internal - * - */ -// eslint-disable-next-line @typescript-eslint/no-explicit-any -const invokeAsync = (callback, eventName, logger, telemetryClient, correlationId) => { - return (...args) => { - logger.trace(`Executing function '${eventName}'`, correlationId); - const inProgressEvent = telemetryClient.startMeasurement(eventName, correlationId); - if (correlationId) { - // Track number of times this API is called in a single request - telemetryClient.incrementFields({ [`ext.${eventName}CallCount`]: 1 }, correlationId); - } - return callback(...args) - .then((response) => { - logger.trace(`Returning result from '${eventName}'`, correlationId); - inProgressEvent.end({ - success: true, - }); - return response; - }) - .catch((e) => { - logger.trace(`Error occurred in '${eventName}'`, correlationId); - try { - logger.trace(JSON.stringify(e), correlationId); - } - catch (e) { - logger.trace("Unable to print error message.", correlationId); - } - inProgressEvent.end({ - success: false, - }, e); - throw e; - }); - }; +/* + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. + */ +/** + * Wraps a function with a performance measurement. + * Usage: invoke(functionToCall, performanceClient, "EventName", "correlationId")(...argsToPassToFunction) + * @param callback + * @param eventName + * @param logger + * @param telemetryClient + * @param correlationId + * @returns + * @internal + */ +// eslint-disable-next-line @typescript-eslint/no-explicit-any +const invoke = (callback, eventName, logger, telemetryClient, correlationId) => { + return (...args) => { + logger.trace(`Executing function '${eventName}'`, correlationId); + const inProgressEvent = telemetryClient.startMeasurement(eventName, correlationId); + if (correlationId) { + // Track number of times this API is called in a single request + telemetryClient.incrementFields({ [`ext.${eventName}CallCount`]: 1 }, correlationId); + } + try { + const result = callback(...args); + inProgressEvent.end({ + success: true, + }); + logger.trace(`Returning result from '${eventName}'`, correlationId); + return result; + } + catch (e) { + logger.trace(`Error occurred in '${eventName}'`, correlationId); + try { + logger.trace(JSON.stringify(e), correlationId); + } + catch (e) { + logger.trace("Unable to print error message.", correlationId); + } + inProgressEvent.end({ + success: false, + }, e); + throw e; + } + }; +}; +/** + * Wraps an async function with a performance measurement. + * Usage: invokeAsync(functionToCall, performanceClient, "EventName", "correlationId")(...argsToPassToFunction) + * @param callback + * @param eventName + * @param logger + * @param telemetryClient + * @param correlationId + * @returns + * @internal + * + */ +// eslint-disable-next-line @typescript-eslint/no-explicit-any +const invokeAsync = (callback, eventName, logger, telemetryClient, correlationId) => { + return (...args) => { + logger.trace(`Executing function '${eventName}'`, correlationId); + const inProgressEvent = telemetryClient.startMeasurement(eventName, correlationId); + if (correlationId) { + // Track number of times this API is called in a single request + telemetryClient.incrementFields({ [`ext.${eventName}CallCount`]: 1 }, correlationId); + } + return callback(...args) + .then((response) => { + logger.trace(`Returning result from '${eventName}'`, correlationId); + inProgressEvent.end({ + success: true, + }); + return response; + }) + .catch((e) => { + logger.trace(`Error occurred in '${eventName}'`, correlationId); + try { + logger.trace(JSON.stringify(e), correlationId); + } + catch (e) { + logger.trace("Unable to print error message.", correlationId); + } + inProgressEvent.end({ + success: false, + }, e); + throw e; + }); + }; }; @@ -46715,107 +46715,107 @@ const invokeAsync = (callback, eventName, logger, telemetryClient, correlationId -/* - * Copyright (c) Microsoft Corporation. All rights reserved. - * Licensed under the MIT License. - */ -class RegionDiscovery { - constructor(networkInterface, logger, performanceClient, correlationId) { - this.networkInterface = networkInterface; - this.logger = logger; - this.performanceClient = performanceClient; - this.correlationId = correlationId; - } - /** - * Detect the region from the application's environment. - * - * @returns Promise - */ - async detectRegion(environmentRegion, regionDiscoveryMetadata) { - // Initialize auto detected region with the region from the envrionment - let autodetectedRegionName = environmentRegion; - // Check if a region was detected from the environment, if not, attempt to get the region from IMDS - if (!autodetectedRegionName) { - const options = RegionDiscovery.IMDS_OPTIONS; - try { - const localIMDSVersionResponse = await invokeAsync(this.getRegionFromIMDS.bind(this), RegionDiscoveryGetRegionFromIMDS, this.logger, this.performanceClient, this.correlationId)(IMDS_VERSION, options); - if (localIMDSVersionResponse.status === HTTP_SUCCESS) { - autodetectedRegionName = localIMDSVersionResponse.body; - regionDiscoveryMetadata.region_source = - RegionDiscoverySources.IMDS; - } - // If the response using the local IMDS version failed, try to fetch the current version of IMDS and retry. - if (localIMDSVersionResponse.status === - HTTP_BAD_REQUEST) { - const currentIMDSVersion = await invokeAsync(this.getCurrentVersion.bind(this), RegionDiscoveryGetCurrentVersion, this.logger, this.performanceClient, this.correlationId)(options); - if (!currentIMDSVersion) { - regionDiscoveryMetadata.region_source = - RegionDiscoverySources.FAILED_AUTO_DETECTION; - return null; - } - const currentIMDSVersionResponse = await invokeAsync(this.getRegionFromIMDS.bind(this), RegionDiscoveryGetRegionFromIMDS, this.logger, this.performanceClient, this.correlationId)(currentIMDSVersion, options); - if (currentIMDSVersionResponse.status === - HTTP_SUCCESS) { - autodetectedRegionName = - currentIMDSVersionResponse.body; - regionDiscoveryMetadata.region_source = - RegionDiscoverySources.IMDS; - } - } - } - catch (e) { - regionDiscoveryMetadata.region_source = - RegionDiscoverySources.FAILED_AUTO_DETECTION; - return null; - } - } - else { - regionDiscoveryMetadata.region_source = - RegionDiscoverySources.ENVIRONMENT_VARIABLE; - } - // If no region was auto detected from the environment or from the IMDS endpoint, mark the attempt as a FAILED_AUTO_DETECTION - if (!autodetectedRegionName) { - regionDiscoveryMetadata.region_source = - RegionDiscoverySources.FAILED_AUTO_DETECTION; - } - return autodetectedRegionName || null; - } - /** - * Make the call to the IMDS endpoint - * - * @param imdsEndpointUrl - * @returns Promise> - */ - async getRegionFromIMDS(version, options) { - return this.networkInterface.sendGetRequestAsync(`${IMDS_ENDPOINT}?api-version=${version}&format=text`, options, IMDS_TIMEOUT); - } - /** - * Get the most recent version of the IMDS endpoint available - * - * @returns Promise - */ - async getCurrentVersion(options) { - try { - const response = await this.networkInterface.sendGetRequestAsync(`${IMDS_ENDPOINT}?format=json`, options); - // When IMDS endpoint is called without the api version query param, bad request response comes back with latest version. - if (response.status === HTTP_BAD_REQUEST && - response.body && - response.body["newest-versions"] && - response.body["newest-versions"].length > 0) { - return response.body["newest-versions"][0]; - } - return null; - } - catch (e) { - return null; - } - } -} -// Options for the IMDS endpoint request -RegionDiscovery.IMDS_OPTIONS = { - headers: { - Metadata: "true", - }, +/* + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. + */ +class RegionDiscovery { + constructor(networkInterface, logger, performanceClient, correlationId) { + this.networkInterface = networkInterface; + this.logger = logger; + this.performanceClient = performanceClient; + this.correlationId = correlationId; + } + /** + * Detect the region from the application's environment. + * + * @returns Promise + */ + async detectRegion(environmentRegion, regionDiscoveryMetadata) { + // Initialize auto detected region with the region from the envrionment + let autodetectedRegionName = environmentRegion; + // Check if a region was detected from the environment, if not, attempt to get the region from IMDS + if (!autodetectedRegionName) { + const options = RegionDiscovery.IMDS_OPTIONS; + try { + const localIMDSVersionResponse = await invokeAsync(this.getRegionFromIMDS.bind(this), RegionDiscoveryGetRegionFromIMDS, this.logger, this.performanceClient, this.correlationId)(IMDS_VERSION, options); + if (localIMDSVersionResponse.status === HTTP_SUCCESS) { + autodetectedRegionName = localIMDSVersionResponse.body; + regionDiscoveryMetadata.region_source = + RegionDiscoverySources.IMDS; + } + // If the response using the local IMDS version failed, try to fetch the current version of IMDS and retry. + if (localIMDSVersionResponse.status === + HTTP_BAD_REQUEST) { + const currentIMDSVersion = await invokeAsync(this.getCurrentVersion.bind(this), RegionDiscoveryGetCurrentVersion, this.logger, this.performanceClient, this.correlationId)(options); + if (!currentIMDSVersion) { + regionDiscoveryMetadata.region_source = + RegionDiscoverySources.FAILED_AUTO_DETECTION; + return null; + } + const currentIMDSVersionResponse = await invokeAsync(this.getRegionFromIMDS.bind(this), RegionDiscoveryGetRegionFromIMDS, this.logger, this.performanceClient, this.correlationId)(currentIMDSVersion, options); + if (currentIMDSVersionResponse.status === + HTTP_SUCCESS) { + autodetectedRegionName = + currentIMDSVersionResponse.body; + regionDiscoveryMetadata.region_source = + RegionDiscoverySources.IMDS; + } + } + } + catch (e) { + regionDiscoveryMetadata.region_source = + RegionDiscoverySources.FAILED_AUTO_DETECTION; + return null; + } + } + else { + regionDiscoveryMetadata.region_source = + RegionDiscoverySources.ENVIRONMENT_VARIABLE; + } + // If no region was auto detected from the environment or from the IMDS endpoint, mark the attempt as a FAILED_AUTO_DETECTION + if (!autodetectedRegionName) { + regionDiscoveryMetadata.region_source = + RegionDiscoverySources.FAILED_AUTO_DETECTION; + } + return autodetectedRegionName || null; + } + /** + * Make the call to the IMDS endpoint + * + * @param imdsEndpointUrl + * @returns Promise> + */ + async getRegionFromIMDS(version, options) { + return this.networkInterface.sendGetRequestAsync(`${IMDS_ENDPOINT}?api-version=${version}&format=text`, options, IMDS_TIMEOUT); + } + /** + * Get the most recent version of the IMDS endpoint available + * + * @returns Promise + */ + async getCurrentVersion(options) { + try { + const response = await this.networkInterface.sendGetRequestAsync(`${IMDS_ENDPOINT}?format=json`, options); + // When IMDS endpoint is called without the api version query param, bad request response comes back with latest version. + if (response.status === HTTP_BAD_REQUEST && + response.body && + response.body["newest-versions"] && + response.body["newest-versions"].length > 0) { + return response.body["newest-versions"][0]; + } + return null; + } + catch (e) { + return null; + } + } +} +// Options for the IMDS endpoint request +RegionDiscovery.IMDS_OPTIONS = { + headers: { + Metadata: "true", + }, }; @@ -46827,82 +46827,82 @@ RegionDiscovery.IMDS_OPTIONS = { -/* - * Copyright (c) Microsoft Corporation. All rights reserved. - * Licensed under the MIT License. - */ -/** - * Extract token by decoding the rawToken - * - * @param encodedToken - */ -function extractTokenClaims(encodedToken, base64Decode) { - const jswPayload = getJWSPayload(encodedToken); - // token will be decoded to get the username - try { - // base64Decode() should throw an error if there is an issue - const base64Decoded = base64Decode(jswPayload); - return JSON.parse(base64Decoded); - } - catch (err) { - throw ClientAuthError_createClientAuthError(tokenParsingError); - } -} -/** - * Check if the signin_state claim contains "kmsi" - * @param idTokenClaims - * @returns - */ -function isKmsi(idTokenClaims) { - if (!idTokenClaims.signin_state) { - return false; - } - /** - * Signin_state claim known values: - * dvc_mngd - device is managed - * dvc_dmjd - device is domain joined - * kmsi - user opted to "keep me signed in" - * inknownntwk - Request made inside a known network. Don't use this, use CAE instead. - */ - const kmsiClaims = ["kmsi", "dvc_dmjd"]; // There are some cases where kmsi may not be returned but persistent storage is still OK - allow dvc_dmjd as well - return idTokenClaims.signin_state.some((value) => kmsiClaims.includes(value.trim().toLowerCase())); -} -/** - * decode a JWT - * - * @param authToken - */ -function getJWSPayload(authToken) { - if (!authToken) { - throw ClientAuthError_createClientAuthError(nullOrEmptyToken); - } - const tokenPartsRegex = /^([^\.\s]*)\.([^\.\s]+)\.([^\.\s]*)$/; - const matches = tokenPartsRegex.exec(authToken); - if (!matches || matches.length < 4) { - throw ClientAuthError_createClientAuthError(tokenParsingError); - } - /** - * const crackedToken = { - * header: matches[1], - * JWSPayload: matches[2], - * JWSSig: matches[3], - * }; - */ - return matches[2]; -} -/** - * Determine if the token's max_age has transpired - */ -function checkMaxAge(authTime, maxAge) { - /* - * per https://openid.net/specs/openid-connect-core-1_0.html#AuthRequest - * To force an immediate re-authentication: If an app requires that a user re-authenticate prior to access, - * provide a value of 0 for the max_age parameter and the AS will force a fresh login. - */ - const fiveMinuteSkew = 300000; // five minutes in milliseconds - if (maxAge === 0 || Date.now() - fiveMinuteSkew > authTime + maxAge) { - throw ClientAuthError_createClientAuthError(maxAgeTranspired); - } +/* + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. + */ +/** + * Extract token by decoding the rawToken + * + * @param encodedToken + */ +function extractTokenClaims(encodedToken, base64Decode) { + const jswPayload = getJWSPayload(encodedToken); + // token will be decoded to get the username + try { + // base64Decode() should throw an error if there is an issue + const base64Decoded = base64Decode(jswPayload); + return JSON.parse(base64Decoded); + } + catch (err) { + throw ClientAuthError_createClientAuthError(tokenParsingError); + } +} +/** + * Check if the signin_state claim contains "kmsi" + * @param idTokenClaims + * @returns + */ +function isKmsi(idTokenClaims) { + if (!idTokenClaims.signin_state) { + return false; + } + /** + * Signin_state claim known values: + * dvc_mngd - device is managed + * dvc_dmjd - device is domain joined + * kmsi - user opted to "keep me signed in" + * inknownntwk - Request made inside a known network. Don't use this, use CAE instead. + */ + const kmsiClaims = ["kmsi", "dvc_dmjd"]; // There are some cases where kmsi may not be returned but persistent storage is still OK - allow dvc_dmjd as well + return idTokenClaims.signin_state.some((value) => kmsiClaims.includes(value.trim().toLowerCase())); +} +/** + * decode a JWT + * + * @param authToken + */ +function getJWSPayload(authToken) { + if (!authToken) { + throw ClientAuthError_createClientAuthError(nullOrEmptyToken); + } + const tokenPartsRegex = /^([^\.\s]*)\.([^\.\s]+)\.([^\.\s]*)$/; + const matches = tokenPartsRegex.exec(authToken); + if (!matches || matches.length < 4) { + throw ClientAuthError_createClientAuthError(tokenParsingError); + } + /** + * const crackedToken = { + * header: matches[1], + * JWSPayload: matches[2], + * JWSSig: matches[3], + * }; + */ + return matches[2]; +} +/** + * Determine if the token's max_age has transpired + */ +function checkMaxAge(authTime, maxAge) { + /* + * per https://openid.net/specs/openid-connect-core-1_0.html#AuthRequest + * To force an immediate re-authentication: If an app requires that a user re-authenticate prior to access, + * provide a value of 0 for the max_age parameter and the AS will force a fresh login. + */ + const fiveMinuteSkew = 300000; // five minutes in milliseconds + if (maxAge === 0 || Date.now() - fiveMinuteSkew > authTime + maxAge) { + throw ClientAuthError_createClientAuthError(maxAgeTranspired); + } } @@ -46911,76 +46911,76 @@ function checkMaxAge(authTime, maxAge) { ;// CONCATENATED MODULE: ./node_modules/@azure/msal-common/dist/utils/TimeUtils.mjs /*! @azure/msal-common v16.3.0 2026-03-13 */ -/* - * Copyright (c) Microsoft Corporation. All rights reserved. - * Licensed under the MIT License. - */ -/** - * Utility functions for managing date and time operations. - */ -/** - * return the current time in Unix time (seconds). - */ -function nowSeconds() { - // Date.getTime() returns in milliseconds. - return Math.round(new Date().getTime() / 1000.0); -} -/** - * Converts JS Date object to seconds - * @param date Date - */ -function toSecondsFromDate(date) { - // Convert date to seconds - return date.getTime() / 1000; -} -/** - * Convert seconds to JS Date object. Seconds can be in a number or string format or undefined (will still return a date). - * @param seconds - */ -function toDateFromSeconds(seconds) { - if (seconds) { - return new Date(Number(seconds) * 1000); - } - return new Date(); -} -/** - * check if a token is expired based on given UTC time in seconds. - * @param expiresOn - */ -function isTokenExpired(expiresOn, offset) { - // check for access token expiry - const expirationSec = Number(expiresOn) || 0; - const offsetCurrentTimeSec = nowSeconds() + offset; - // If current time + offset is greater than token expiration time, then token is expired. - return offsetCurrentTimeSec > expirationSec; -} -/** - * Checks if a cache entry is expired based on the last updated time and cache retention days. - * @param lastUpdatedAt - * @param cacheRetentionDays - * @returns - */ -function isCacheExpired(lastUpdatedAt, cacheRetentionDays) { - const cacheExpirationTimestamp = Number(lastUpdatedAt) + cacheRetentionDays * 24 * 60 * 60 * 1000; - return Date.now() > cacheExpirationTimestamp; -} -/** - * If the current time is earlier than the time that a token was cached at, we must discard the token - * i.e. The system clock was turned back after acquiring the cached token - * @param cachedAt - * @param offset - */ -function wasClockTurnedBack(cachedAt) { - const cachedAtSec = Number(cachedAt); - return cachedAtSec > nowSeconds(); -} -/** - * Waits for t number of milliseconds - * @param t number - * @param value T - */ -function delay(t, value) { - return new Promise((resolve) => setTimeout(() => resolve(value), t)); +/* + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. + */ +/** + * Utility functions for managing date and time operations. + */ +/** + * return the current time in Unix time (seconds). + */ +function nowSeconds() { + // Date.getTime() returns in milliseconds. + return Math.round(new Date().getTime() / 1000.0); +} +/** + * Converts JS Date object to seconds + * @param date Date + */ +function toSecondsFromDate(date) { + // Convert date to seconds + return date.getTime() / 1000; +} +/** + * Convert seconds to JS Date object. Seconds can be in a number or string format or undefined (will still return a date). + * @param seconds + */ +function toDateFromSeconds(seconds) { + if (seconds) { + return new Date(Number(seconds) * 1000); + } + return new Date(); +} +/** + * check if a token is expired based on given UTC time in seconds. + * @param expiresOn + */ +function isTokenExpired(expiresOn, offset) { + // check for access token expiry + const expirationSec = Number(expiresOn) || 0; + const offsetCurrentTimeSec = nowSeconds() + offset; + // If current time + offset is greater than token expiration time, then token is expired. + return offsetCurrentTimeSec > expirationSec; +} +/** + * Checks if a cache entry is expired based on the last updated time and cache retention days. + * @param lastUpdatedAt + * @param cacheRetentionDays + * @returns + */ +function isCacheExpired(lastUpdatedAt, cacheRetentionDays) { + const cacheExpirationTimestamp = Number(lastUpdatedAt) + cacheRetentionDays * 24 * 60 * 60 * 1000; + return Date.now() > cacheExpirationTimestamp; +} +/** + * If the current time is earlier than the time that a token was cached at, we must discard the token + * i.e. The system clock was turned back after acquiring the cached token + * @param cachedAt + * @param offset + */ +function wasClockTurnedBack(cachedAt) { + const cachedAtSec = Number(cachedAt); + return cachedAtSec > nowSeconds(); +} +/** + * Waits for t number of milliseconds + * @param t number + * @param value T + */ +function delay(t, value) { + return new Promise((resolve) => setTimeout(() => resolve(value), t)); } @@ -46995,261 +46995,261 @@ function delay(t, value) { -/* - * Copyright (c) Microsoft Corporation. All rights reserved. - * Licensed under the MIT License. - */ -/** - * Create IdTokenEntity - * @param homeAccountId - * @param authenticationResult - * @param clientId - * @param authority - */ -function createIdTokenEntity(homeAccountId, environment, idToken, clientId, tenantId) { - const idTokenEntity = { - credentialType: CredentialType.ID_TOKEN, - homeAccountId: homeAccountId, - environment: environment, - clientId: clientId, - secret: idToken, - realm: tenantId, - lastUpdatedAt: Date.now().toString(), // Set the last updated time to now - }; - return idTokenEntity; -} -/** - * Create AccessTokenEntity - * @param homeAccountId - * @param environment - * @param accessToken - * @param clientId - * @param tenantId - * @param scopes - * @param expiresOn - * @param extExpiresOn - */ -function createAccessTokenEntity(homeAccountId, environment, accessToken, clientId, tenantId, scopes, expiresOn, extExpiresOn, base64Decode, refreshOn, tokenType, userAssertionHash, keyId) { - const atEntity = { - homeAccountId: homeAccountId, - credentialType: CredentialType.ACCESS_TOKEN, - secret: accessToken, - cachedAt: nowSeconds().toString(), - expiresOn: expiresOn.toString(), - extendedExpiresOn: extExpiresOn.toString(), - environment: environment, - clientId: clientId, - realm: tenantId, - target: scopes, - tokenType: tokenType || AuthenticationScheme.BEARER, - lastUpdatedAt: Date.now().toString(), // Set the last updated time to now - }; - if (userAssertionHash) { - atEntity.userAssertionHash = userAssertionHash; - } - if (refreshOn) { - atEntity.refreshOn = refreshOn.toString(); - } - /* - * Create Access Token With Auth Scheme instead of regular access token - * Cast to lower to handle "bearer" from ADFS - */ - if (atEntity.tokenType?.toLowerCase() !== - AuthenticationScheme.BEARER.toLowerCase()) { - atEntity.credentialType = - CredentialType.ACCESS_TOKEN_WITH_AUTH_SCHEME; - switch (atEntity.tokenType) { - case AuthenticationScheme.POP: - // Make sure keyId is present and add it to credential - const tokenClaims = extractTokenClaims(accessToken, base64Decode); - if (!tokenClaims?.cnf?.kid) { - throw ClientAuthError_createClientAuthError(tokenClaimsCnfRequiredForSignedJwt); - } - atEntity.keyId = tokenClaims.cnf.kid; - break; - case AuthenticationScheme.SSH: - atEntity.keyId = keyId; - } - } - return atEntity; -} -/** - * Create RefreshTokenEntity - * @param homeAccountId - * @param authenticationResult - * @param clientId - * @param authority - */ -function createRefreshTokenEntity(homeAccountId, environment, refreshToken, clientId, familyId, userAssertionHash, expiresOn) { - const rtEntity = { - credentialType: CredentialType.REFRESH_TOKEN, - homeAccountId: homeAccountId, - environment: environment, - clientId: clientId, - secret: refreshToken, - lastUpdatedAt: Date.now().toString(), - }; - if (userAssertionHash) { - rtEntity.userAssertionHash = userAssertionHash; - } - if (familyId) { - rtEntity.familyId = familyId; - } - if (expiresOn) { - rtEntity.expiresOn = expiresOn.toString(); - } - return rtEntity; -} -function isCredentialEntity(entity) { - return (entity.hasOwnProperty("homeAccountId") && - entity.hasOwnProperty("environment") && - entity.hasOwnProperty("credentialType") && - entity.hasOwnProperty("clientId") && - entity.hasOwnProperty("secret")); -} -/** - * Validates an entity: checks for all expected params - * @param entity - */ -function isAccessTokenEntity(entity) { - if (!entity) { - return false; - } - return (isCredentialEntity(entity) && - entity.hasOwnProperty("realm") && - entity.hasOwnProperty("target") && - (entity["credentialType"] === CredentialType.ACCESS_TOKEN || - entity["credentialType"] === - CredentialType.ACCESS_TOKEN_WITH_AUTH_SCHEME)); -} -/** - * Validates an entity: checks for all expected params - * @param entity - */ -function isIdTokenEntity(entity) { - if (!entity) { - return false; - } - return (isCredentialEntity(entity) && - entity.hasOwnProperty("realm") && - entity["credentialType"] === CredentialType.ID_TOKEN); -} -/** - * Validates an entity: checks for all expected params - * @param entity - */ -function isRefreshTokenEntity(entity) { - if (!entity) { - return false; - } - return (isCredentialEntity(entity) && - entity["credentialType"] === CredentialType.REFRESH_TOKEN); -} -/** - * validates if a given cache entry is "Telemetry", parses - * @param key - * @param entity - */ -function isServerTelemetryEntity(key, entity) { - const validateKey = key.indexOf(SERVER_TELEM_CACHE_KEY) === 0; - let validateEntity = true; - if (entity) { - validateEntity = - entity.hasOwnProperty("failedRequests") && - entity.hasOwnProperty("errors") && - entity.hasOwnProperty("cacheHits"); - } - return validateKey && validateEntity; -} -/** - * validates if a given cache entry is "Throttling", parses - * @param key - * @param entity - */ -function isThrottlingEntity(key, entity) { - let validateKey = false; - if (key) { - validateKey = key.indexOf(THROTTLING_PREFIX) === 0; - } - let validateEntity = true; - if (entity) { - validateEntity = entity.hasOwnProperty("throttleTime"); - } - return validateKey && validateEntity; -} -/** - * Generate AppMetadata Cache Key as per the schema: appmetadata-- - */ -function generateAppMetadataKey({ environment, clientId, }) { - const appMetaDataKeyArray = [ - APP_METADATA, - environment, - clientId, - ]; - return appMetaDataKeyArray - .join(Constants_CACHE_KEY_SEPARATOR) - .toLowerCase(); -} -/* - * Validates an entity: checks for all expected params - * @param entity - */ -function isAppMetadataEntity(key, entity) { - if (!entity) { - return false; - } - return (key.indexOf(APP_METADATA) === 0 && - entity.hasOwnProperty("clientId") && - entity.hasOwnProperty("environment")); -} -/** - * Validates an entity: checks for all expected params - * @param entity - */ -function isAuthorityMetadataEntity(key, entity) { - if (!entity) { - return false; - } - return (key.indexOf(AUTHORITY_METADATA_CACHE_KEY) === 0 && - entity.hasOwnProperty("aliases") && - entity.hasOwnProperty("preferred_cache") && - entity.hasOwnProperty("preferred_network") && - entity.hasOwnProperty("canonical_authority") && - entity.hasOwnProperty("authorization_endpoint") && - entity.hasOwnProperty("token_endpoint") && - entity.hasOwnProperty("issuer") && - entity.hasOwnProperty("aliasesFromNetwork") && - entity.hasOwnProperty("endpointsFromNetwork") && - entity.hasOwnProperty("expiresAt") && - entity.hasOwnProperty("jwks_uri")); -} -/** - * Reset the exiresAt value - */ -function generateAuthorityMetadataExpiresAt() { - return (nowSeconds() + - AUTHORITY_METADATA_REFRESH_TIME_SECONDS); -} -function updateAuthorityEndpointMetadata(authorityMetadata, updatedValues, fromNetwork) { - authorityMetadata.authorization_endpoint = - updatedValues.authorization_endpoint; - authorityMetadata.token_endpoint = updatedValues.token_endpoint; - authorityMetadata.end_session_endpoint = updatedValues.end_session_endpoint; - authorityMetadata.issuer = updatedValues.issuer; - authorityMetadata.endpointsFromNetwork = fromNetwork; - authorityMetadata.jwks_uri = updatedValues.jwks_uri; -} -function updateCloudDiscoveryMetadata(authorityMetadata, updatedValues, fromNetwork) { - authorityMetadata.aliases = updatedValues.aliases; - authorityMetadata.preferred_cache = updatedValues.preferred_cache; - authorityMetadata.preferred_network = updatedValues.preferred_network; - authorityMetadata.aliasesFromNetwork = fromNetwork; -} -/** - * Returns whether or not the data needs to be refreshed - */ -function isAuthorityMetadataExpired(metadata) { - return metadata.expiresAt <= nowSeconds(); +/* + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. + */ +/** + * Create IdTokenEntity + * @param homeAccountId + * @param authenticationResult + * @param clientId + * @param authority + */ +function createIdTokenEntity(homeAccountId, environment, idToken, clientId, tenantId) { + const idTokenEntity = { + credentialType: CredentialType.ID_TOKEN, + homeAccountId: homeAccountId, + environment: environment, + clientId: clientId, + secret: idToken, + realm: tenantId, + lastUpdatedAt: Date.now().toString(), // Set the last updated time to now + }; + return idTokenEntity; +} +/** + * Create AccessTokenEntity + * @param homeAccountId + * @param environment + * @param accessToken + * @param clientId + * @param tenantId + * @param scopes + * @param expiresOn + * @param extExpiresOn + */ +function createAccessTokenEntity(homeAccountId, environment, accessToken, clientId, tenantId, scopes, expiresOn, extExpiresOn, base64Decode, refreshOn, tokenType, userAssertionHash, keyId) { + const atEntity = { + homeAccountId: homeAccountId, + credentialType: CredentialType.ACCESS_TOKEN, + secret: accessToken, + cachedAt: nowSeconds().toString(), + expiresOn: expiresOn.toString(), + extendedExpiresOn: extExpiresOn.toString(), + environment: environment, + clientId: clientId, + realm: tenantId, + target: scopes, + tokenType: tokenType || AuthenticationScheme.BEARER, + lastUpdatedAt: Date.now().toString(), // Set the last updated time to now + }; + if (userAssertionHash) { + atEntity.userAssertionHash = userAssertionHash; + } + if (refreshOn) { + atEntity.refreshOn = refreshOn.toString(); + } + /* + * Create Access Token With Auth Scheme instead of regular access token + * Cast to lower to handle "bearer" from ADFS + */ + if (atEntity.tokenType?.toLowerCase() !== + AuthenticationScheme.BEARER.toLowerCase()) { + atEntity.credentialType = + CredentialType.ACCESS_TOKEN_WITH_AUTH_SCHEME; + switch (atEntity.tokenType) { + case AuthenticationScheme.POP: + // Make sure keyId is present and add it to credential + const tokenClaims = extractTokenClaims(accessToken, base64Decode); + if (!tokenClaims?.cnf?.kid) { + throw ClientAuthError_createClientAuthError(tokenClaimsCnfRequiredForSignedJwt); + } + atEntity.keyId = tokenClaims.cnf.kid; + break; + case AuthenticationScheme.SSH: + atEntity.keyId = keyId; + } + } + return atEntity; +} +/** + * Create RefreshTokenEntity + * @param homeAccountId + * @param authenticationResult + * @param clientId + * @param authority + */ +function createRefreshTokenEntity(homeAccountId, environment, refreshToken, clientId, familyId, userAssertionHash, expiresOn) { + const rtEntity = { + credentialType: CredentialType.REFRESH_TOKEN, + homeAccountId: homeAccountId, + environment: environment, + clientId: clientId, + secret: refreshToken, + lastUpdatedAt: Date.now().toString(), + }; + if (userAssertionHash) { + rtEntity.userAssertionHash = userAssertionHash; + } + if (familyId) { + rtEntity.familyId = familyId; + } + if (expiresOn) { + rtEntity.expiresOn = expiresOn.toString(); + } + return rtEntity; +} +function isCredentialEntity(entity) { + return (entity.hasOwnProperty("homeAccountId") && + entity.hasOwnProperty("environment") && + entity.hasOwnProperty("credentialType") && + entity.hasOwnProperty("clientId") && + entity.hasOwnProperty("secret")); +} +/** + * Validates an entity: checks for all expected params + * @param entity + */ +function isAccessTokenEntity(entity) { + if (!entity) { + return false; + } + return (isCredentialEntity(entity) && + entity.hasOwnProperty("realm") && + entity.hasOwnProperty("target") && + (entity["credentialType"] === CredentialType.ACCESS_TOKEN || + entity["credentialType"] === + CredentialType.ACCESS_TOKEN_WITH_AUTH_SCHEME)); +} +/** + * Validates an entity: checks for all expected params + * @param entity + */ +function isIdTokenEntity(entity) { + if (!entity) { + return false; + } + return (isCredentialEntity(entity) && + entity.hasOwnProperty("realm") && + entity["credentialType"] === CredentialType.ID_TOKEN); +} +/** + * Validates an entity: checks for all expected params + * @param entity + */ +function isRefreshTokenEntity(entity) { + if (!entity) { + return false; + } + return (isCredentialEntity(entity) && + entity["credentialType"] === CredentialType.REFRESH_TOKEN); +} +/** + * validates if a given cache entry is "Telemetry", parses + * @param key + * @param entity + */ +function isServerTelemetryEntity(key, entity) { + const validateKey = key.indexOf(SERVER_TELEM_CACHE_KEY) === 0; + let validateEntity = true; + if (entity) { + validateEntity = + entity.hasOwnProperty("failedRequests") && + entity.hasOwnProperty("errors") && + entity.hasOwnProperty("cacheHits"); + } + return validateKey && validateEntity; +} +/** + * validates if a given cache entry is "Throttling", parses + * @param key + * @param entity + */ +function isThrottlingEntity(key, entity) { + let validateKey = false; + if (key) { + validateKey = key.indexOf(THROTTLING_PREFIX) === 0; + } + let validateEntity = true; + if (entity) { + validateEntity = entity.hasOwnProperty("throttleTime"); + } + return validateKey && validateEntity; +} +/** + * Generate AppMetadata Cache Key as per the schema: appmetadata-- + */ +function generateAppMetadataKey({ environment, clientId, }) { + const appMetaDataKeyArray = [ + APP_METADATA, + environment, + clientId, + ]; + return appMetaDataKeyArray + .join(Constants_CACHE_KEY_SEPARATOR) + .toLowerCase(); +} +/* + * Validates an entity: checks for all expected params + * @param entity + */ +function isAppMetadataEntity(key, entity) { + if (!entity) { + return false; + } + return (key.indexOf(APP_METADATA) === 0 && + entity.hasOwnProperty("clientId") && + entity.hasOwnProperty("environment")); +} +/** + * Validates an entity: checks for all expected params + * @param entity + */ +function isAuthorityMetadataEntity(key, entity) { + if (!entity) { + return false; + } + return (key.indexOf(AUTHORITY_METADATA_CACHE_KEY) === 0 && + entity.hasOwnProperty("aliases") && + entity.hasOwnProperty("preferred_cache") && + entity.hasOwnProperty("preferred_network") && + entity.hasOwnProperty("canonical_authority") && + entity.hasOwnProperty("authorization_endpoint") && + entity.hasOwnProperty("token_endpoint") && + entity.hasOwnProperty("issuer") && + entity.hasOwnProperty("aliasesFromNetwork") && + entity.hasOwnProperty("endpointsFromNetwork") && + entity.hasOwnProperty("expiresAt") && + entity.hasOwnProperty("jwks_uri")); +} +/** + * Reset the exiresAt value + */ +function generateAuthorityMetadataExpiresAt() { + return (nowSeconds() + + AUTHORITY_METADATA_REFRESH_TIME_SECONDS); +} +function updateAuthorityEndpointMetadata(authorityMetadata, updatedValues, fromNetwork) { + authorityMetadata.authorization_endpoint = + updatedValues.authorization_endpoint; + authorityMetadata.token_endpoint = updatedValues.token_endpoint; + authorityMetadata.end_session_endpoint = updatedValues.end_session_endpoint; + authorityMetadata.issuer = updatedValues.issuer; + authorityMetadata.endpointsFromNetwork = fromNetwork; + authorityMetadata.jwks_uri = updatedValues.jwks_uri; +} +function updateCloudDiscoveryMetadata(authorityMetadata, updatedValues, fromNetwork) { + authorityMetadata.aliases = updatedValues.aliases; + authorityMetadata.preferred_cache = updatedValues.preferred_cache; + authorityMetadata.preferred_network = updatedValues.preferred_network; + authorityMetadata.aliasesFromNetwork = fromNetwork; +} +/** + * Returns whether or not the data needs to be refreshed + */ +function isAuthorityMetadataExpired(metadata) { + return metadata.expiresAt <= nowSeconds(); } @@ -47277,1847 +47277,4282 @@ function isAuthorityMetadataExpired(metadata) { -/* - * Copyright (c) Microsoft Corporation. All rights reserved. - * Licensed under the MIT License. - */ -/** - * The authority class validates the authority URIs used by the user, and retrieves the OpenID Configuration Data from the - * endpoint. It will store the pertinent config data in this object for use during token calls. - * @internal - */ -class Authority_Authority { - constructor(authority, networkInterface, cacheManager, authorityOptions, logger, correlationId, performanceClient, managedIdentity) { - this.canonicalAuthority = authority; - this._canonicalAuthority.validateAsUri(); - this.networkInterface = networkInterface; - this.cacheManager = cacheManager; - this.authorityOptions = authorityOptions; - this.regionDiscoveryMetadata = { - region_used: undefined, - region_source: undefined, - region_outcome: undefined, - }; - this.logger = logger; - this.performanceClient = performanceClient; - this.correlationId = correlationId; - this.managedIdentity = managedIdentity || false; - this.regionDiscovery = new RegionDiscovery(networkInterface, this.logger, this.performanceClient, this.correlationId); - } - /** - * Get {@link AuthorityType} - * @param authorityUri {@link IUri} - * @private - */ - getAuthorityType(authorityUri) { - // CIAM auth url pattern is being standardized as: .ciamlogin.com - if (authorityUri.HostNameAndPort.endsWith(CIAM_AUTH_URL)) { - return AuthorityType.Ciam; - } - const pathSegments = authorityUri.PathSegments; - if (pathSegments.length) { - switch (pathSegments[0].toLowerCase()) { - case ADFS: - return AuthorityType.Adfs; - case DSTS: - return AuthorityType.Dsts; - } - } - return AuthorityType.Default; - } - // See above for AuthorityType - get authorityType() { - return this.getAuthorityType(this.canonicalAuthorityUrlComponents); - } - /** - * ProtocolMode enum representing the way endpoints are constructed. - */ - get protocolMode() { - return this.authorityOptions.protocolMode; - } - /** - * Returns authorityOptions which can be used to reinstantiate a new authority instance - */ - get options() { - return this.authorityOptions; - } - /** - * A URL that is the authority set by the developer - */ - get canonicalAuthority() { - return this._canonicalAuthority.urlString; - } - /** - * Sets canonical authority. - */ - set canonicalAuthority(url) { - this._canonicalAuthority = new UrlString(url); - this._canonicalAuthority.validateAsUri(); - this._canonicalAuthorityUrlComponents = null; - } - /** - * Get authority components. - */ - get canonicalAuthorityUrlComponents() { - if (!this._canonicalAuthorityUrlComponents) { - this._canonicalAuthorityUrlComponents = - this._canonicalAuthority.getUrlComponents(); - } - return this._canonicalAuthorityUrlComponents; - } - /** - * Get hostname and port i.e. login.microsoftonline.com - */ - get hostnameAndPort() { - return this.canonicalAuthorityUrlComponents.HostNameAndPort.toLowerCase(); - } - /** - * Get tenant for authority. - */ - get tenant() { - return this.canonicalAuthorityUrlComponents.PathSegments[0]; - } - /** - * OAuth /authorize endpoint for requests - */ - get authorizationEndpoint() { - if (this.discoveryComplete()) { - return this.replacePath(this.metadata.authorization_endpoint); - } - else { - throw ClientAuthError_createClientAuthError(endpointResolutionError); - } - } - /** - * OAuth /token endpoint for requests - */ - get tokenEndpoint() { - if (this.discoveryComplete()) { - return this.replacePath(this.metadata.token_endpoint); - } - else { - throw ClientAuthError_createClientAuthError(endpointResolutionError); - } - } - get deviceCodeEndpoint() { - if (this.discoveryComplete()) { - return this.replacePath(this.metadata.token_endpoint.replace("/token", "/devicecode")); - } - else { - throw ClientAuthError_createClientAuthError(endpointResolutionError); - } - } - /** - * OAuth logout endpoint for requests - */ - get endSessionEndpoint() { - if (this.discoveryComplete()) { - // ROPC policies may not have end_session_endpoint set - if (!this.metadata.end_session_endpoint) { - throw ClientAuthError_createClientAuthError(endSessionEndpointNotSupported); - } - return this.replacePath(this.metadata.end_session_endpoint); - } - else { - throw ClientAuthError_createClientAuthError(endpointResolutionError); - } - } - /** - * OAuth issuer for requests - */ - get selfSignedJwtAudience() { - if (this.discoveryComplete()) { - return this.replacePath(this.metadata.issuer); - } - else { - throw ClientAuthError_createClientAuthError(endpointResolutionError); - } - } - /** - * Jwks_uri for token signing keys - */ - get jwksUri() { - if (this.discoveryComplete()) { - return this.replacePath(this.metadata.jwks_uri); - } - else { - throw ClientAuthError_createClientAuthError(endpointResolutionError); - } - } - /** - * Returns a flag indicating that tenant name can be replaced in authority {@link IUri} - * @param authorityUri {@link IUri} - * @private - */ - canReplaceTenant(authorityUri) { - return (authorityUri.PathSegments.length === 1 && - !Authority_Authority.reservedTenantDomains.has(authorityUri.PathSegments[0]) && - this.getAuthorityType(authorityUri) === AuthorityType.Default && - this.protocolMode !== ProtocolMode_ProtocolMode.OIDC); - } - /** - * Replaces tenant in url path with current tenant. Defaults to common. - * @param urlString - */ - replaceTenant(urlString) { - return urlString.replace(/{tenant}|{tenantid}/g, this.tenant); - } - /** - * Replaces path such as tenant or policy with the current tenant or policy. - * @param urlString - */ - replacePath(urlString) { - let endpoint = urlString; - const cachedAuthorityUrl = new UrlString(this.metadata.canonical_authority); - const cachedAuthorityUrlComponents = cachedAuthorityUrl.getUrlComponents(); - const cachedAuthorityParts = cachedAuthorityUrlComponents.PathSegments; - const currentAuthorityParts = this.canonicalAuthorityUrlComponents.PathSegments; - currentAuthorityParts.forEach((currentPart, index) => { - let cachedPart = cachedAuthorityParts[index]; - if (index === 0 && - this.canReplaceTenant(cachedAuthorityUrlComponents)) { - const tenantId = new UrlString(this.metadata.authorization_endpoint).getUrlComponents().PathSegments[0]; - /** - * Check if AAD canonical authority contains tenant domain name, for example "testdomain.onmicrosoft.com", - * by comparing its first path segment to the corresponding authorization endpoint path segment, which is - * always resolved with tenant id by OIDC. - */ - if (cachedPart !== tenantId) { - this.logger.verbose(`Replacing tenant domain name '${cachedPart}' with id '${tenantId}'`, this.correlationId); - cachedPart = tenantId; - } - } - if (currentPart !== cachedPart) { - endpoint = endpoint.replace(`/${cachedPart}/`, `/${currentPart}/`); - } - }); - return this.replaceTenant(endpoint); - } - /** - * The default open id configuration endpoint for any canonical authority. - */ - get defaultOpenIdConfigurationEndpoint() { - const canonicalAuthorityHost = this.hostnameAndPort; - if (this.canonicalAuthority.endsWith("v2.0/") || - this.authorityType === AuthorityType.Adfs || - (this.protocolMode === ProtocolMode_ProtocolMode.OIDC && - !this.isAliasOfKnownMicrosoftAuthority(canonicalAuthorityHost))) { - return `${this.canonicalAuthority}.well-known/openid-configuration`; - } - return `${this.canonicalAuthority}v2.0/.well-known/openid-configuration`; - } - /** - * Boolean that returns whether or not tenant discovery has been completed. - */ - discoveryComplete() { - return !!this.metadata; - } - /** - * Perform endpoint discovery to discover aliases, preferred_cache, preferred_network - * and the /authorize, /token and logout endpoints. - */ - async resolveEndpointsAsync() { - const metadataEntity = this.getCurrentMetadataEntity(); - const cloudDiscoverySource = await invokeAsync(this.updateCloudDiscoveryMetadata.bind(this), AuthorityUpdateCloudDiscoveryMetadata, this.logger, this.performanceClient, this.correlationId)(metadataEntity); - this.canonicalAuthority = this.canonicalAuthority.replace(this.hostnameAndPort, metadataEntity.preferred_network); - const endpointSource = await invokeAsync(this.updateEndpointMetadata.bind(this), AuthorityUpdateEndpointMetadata, this.logger, this.performanceClient, this.correlationId)(metadataEntity); - this.updateCachedMetadata(metadataEntity, cloudDiscoverySource, { - source: endpointSource, - }); - this.performanceClient?.addFields({ - cloudDiscoverySource: cloudDiscoverySource, - authorityEndpointSource: endpointSource, - }, this.correlationId); - } - /** - * Returns metadata entity from cache if it exists, otherwiser returns a new metadata entity built - * from the configured canonical authority - * @returns - */ - getCurrentMetadataEntity() { - let metadataEntity = this.cacheManager.getAuthorityMetadataByAlias(this.hostnameAndPort, this.correlationId); - if (!metadataEntity) { - metadataEntity = { - aliases: [], - preferred_cache: this.hostnameAndPort, - preferred_network: this.hostnameAndPort, - canonical_authority: this.canonicalAuthority, - authorization_endpoint: "", - token_endpoint: "", - end_session_endpoint: "", - issuer: "", - aliasesFromNetwork: false, - endpointsFromNetwork: false, - expiresAt: generateAuthorityMetadataExpiresAt(), - jwks_uri: "", - }; - } - return metadataEntity; - } - /** - * Updates cached metadata based on metadata source and sets the instance's metadata - * property to the same value - * @param metadataEntity - * @param cloudDiscoverySource - * @param endpointMetadataResult - */ - updateCachedMetadata(metadataEntity, cloudDiscoverySource, endpointMetadataResult) { - if (cloudDiscoverySource !== AuthorityMetadataSource.CACHE && - endpointMetadataResult?.source !== - AuthorityMetadataSource.CACHE) { - // Reset the expiration time unless both values came from a successful cache lookup - metadataEntity.expiresAt = - generateAuthorityMetadataExpiresAt(); - metadataEntity.canonical_authority = this.canonicalAuthority; - } - const cacheKey = this.cacheManager.generateAuthorityMetadataCacheKey(metadataEntity.preferred_cache, this.correlationId); - this.cacheManager.setAuthorityMetadata(cacheKey, metadataEntity, this.correlationId); - this.metadata = metadataEntity; - } - /** - * Update AuthorityMetadataEntity with new endpoints and return where the information came from - * @param metadataEntity - */ - async updateEndpointMetadata(metadataEntity) { - const localMetadata = this.updateEndpointMetadataFromLocalSources(metadataEntity); - // Further update may be required for hardcoded metadata if regional metadata is preferred - if (localMetadata) { - if (localMetadata.source === - AuthorityMetadataSource.HARDCODED_VALUES) { - // If the user prefers to use an azure region replace the global endpoints with regional information. - if (this.authorityOptions.azureRegionConfiguration?.azureRegion) { - if (localMetadata.metadata) { - const hardcodedMetadata = await invokeAsync(this.updateMetadataWithRegionalInformation.bind(this), AuthorityUpdateMetadataWithRegionalInformation, this.logger, this.performanceClient, this.correlationId)(localMetadata.metadata); - updateAuthorityEndpointMetadata(metadataEntity, hardcodedMetadata, false); - metadataEntity.canonical_authority = - this.canonicalAuthority; - } - } - } - return localMetadata.source; - } - // Get metadata from network if local sources aren't available - let metadata = await invokeAsync(this.getEndpointMetadataFromNetwork.bind(this), AuthorityGetEndpointMetadataFromNetwork, this.logger, this.performanceClient, this.correlationId)(); - if (metadata) { - // If the user prefers to use an azure region replace the global endpoints with regional information. - if (this.authorityOptions.azureRegionConfiguration?.azureRegion) { - metadata = await invokeAsync(this.updateMetadataWithRegionalInformation.bind(this), AuthorityUpdateMetadataWithRegionalInformation, this.logger, this.performanceClient, this.correlationId)(metadata); - } - updateAuthorityEndpointMetadata(metadataEntity, metadata, true); - return AuthorityMetadataSource.NETWORK; - } - else { - // Metadata could not be obtained from the config, cache, network or hardcoded values - throw ClientAuthError_createClientAuthError(openIdConfigError, this.defaultOpenIdConfigurationEndpoint); - } - } - /** - * Updates endpoint metadata from local sources and returns where the information was retrieved from and the metadata config - * response if the source is hardcoded metadata - * @param metadataEntity - * @returns - */ - updateEndpointMetadataFromLocalSources(metadataEntity) { - this.logger.verbose("Attempting to get endpoint metadata from authority configuration", this.correlationId); - const configMetadata = this.getEndpointMetadataFromConfig(); - if (configMetadata) { - this.logger.verbose("Found endpoint metadata in authority configuration", this.correlationId); - updateAuthorityEndpointMetadata(metadataEntity, configMetadata, false); - return { - source: AuthorityMetadataSource.CONFIG, - }; - } - this.logger.verbose("Did not find endpoint metadata in the config... Attempting to get endpoint metadata from the hardcoded values.", this.correlationId); - const hardcodedMetadata = this.getEndpointMetadataFromHardcodedValues(); - if (hardcodedMetadata) { - updateAuthorityEndpointMetadata(metadataEntity, hardcodedMetadata, false); - return { - source: AuthorityMetadataSource.HARDCODED_VALUES, - metadata: hardcodedMetadata, - }; - } - else { - this.logger.verbose("Did not find endpoint metadata in hardcoded values... Attempting to get endpoint metadata from the network metadata cache.", this.correlationId); - } - // Check cached metadata entity expiration status - const metadataEntityExpired = isAuthorityMetadataExpired(metadataEntity); - if (this.isAuthoritySameType(metadataEntity) && - metadataEntity.endpointsFromNetwork && - !metadataEntityExpired) { - // No need to update - this.logger.verbose("Found endpoint metadata in the cache.", ""); - return { source: AuthorityMetadataSource.CACHE }; - } - else if (metadataEntityExpired) { - this.logger.verbose("The metadata entity is expired.", ""); - } - return null; - } - /** - * Compares the number of url components after the domain to determine if the cached - * authority metadata can be used for the requested authority. Protects against same domain different - * authority such as login.microsoftonline.com/tenant and login.microsoftonline.com/tfp/tenant/policy - * @param metadataEntity - */ - isAuthoritySameType(metadataEntity) { - const cachedAuthorityUrl = new UrlString(metadataEntity.canonical_authority); - const cachedParts = cachedAuthorityUrl.getUrlComponents().PathSegments; - return (cachedParts.length === - this.canonicalAuthorityUrlComponents.PathSegments.length); - } - /** - * Parse authorityMetadata config option - */ - getEndpointMetadataFromConfig() { - if (this.authorityOptions.authorityMetadata) { - try { - return JSON.parse(this.authorityOptions.authorityMetadata); - } - catch (e) { - throw ClientConfigurationError_createClientConfigurationError(invalidAuthorityMetadata); - } - } - return null; - } - /** - * Gets OAuth endpoints from the given OpenID configuration endpoint. - * - * @param hasHardcodedMetadata boolean - */ - async getEndpointMetadataFromNetwork() { - const options = {}; - /* - * TODO: Add a timeout if the authority exists in our library's - * hardcoded list of metadata - */ - const openIdConfigurationEndpoint = this.defaultOpenIdConfigurationEndpoint; - this.logger.verbose(`Authority.getEndpointMetadataFromNetwork: attempting to retrieve OAuth endpoints from '${openIdConfigurationEndpoint}'`, this.correlationId); - try { - const response = await this.networkInterface.sendGetRequestAsync(openIdConfigurationEndpoint, options); - const isValidResponse = isOpenIdConfigResponse(response.body); - if (isValidResponse) { - return response.body; - } - else { - this.logger.verbose(`Authority.getEndpointMetadataFromNetwork: could not parse response as OpenID configuration`, this.correlationId); - return null; - } - } - catch (e) { - this.logger.verbose(`Authority.getEndpointMetadataFromNetwork: '${e}'`, this.correlationId); - return null; - } - } - /** - * Get OAuth endpoints for common authorities. - */ - getEndpointMetadataFromHardcodedValues() { - if (this.hostnameAndPort in EndpointMetadata) { - return EndpointMetadata[this.hostnameAndPort]; - } - return null; - } - /** - * Update the retrieved metadata with regional information. - * User selected Azure region will be used if configured. - */ - async updateMetadataWithRegionalInformation(metadata) { - const userConfiguredAzureRegion = this.authorityOptions.azureRegionConfiguration?.azureRegion; - if (userConfiguredAzureRegion) { - if (userConfiguredAzureRegion !== - AZURE_REGION_AUTO_DISCOVER_FLAG) { - this.regionDiscoveryMetadata.region_outcome = - RegionDiscoveryOutcomes.CONFIGURED_NO_AUTO_DETECTION; - this.regionDiscoveryMetadata.region_used = - userConfiguredAzureRegion; - return Authority_Authority.replaceWithRegionalInformation(metadata, userConfiguredAzureRegion); - } - const autodetectedRegionName = await invokeAsync(this.regionDiscovery.detectRegion.bind(this.regionDiscovery), RegionDiscoveryDetectRegion, this.logger, this.performanceClient, this.correlationId)(this.authorityOptions.azureRegionConfiguration - ?.environmentRegion, this.regionDiscoveryMetadata); - if (autodetectedRegionName) { - this.regionDiscoveryMetadata.region_outcome = - RegionDiscoveryOutcomes.AUTO_DETECTION_REQUESTED_SUCCESSFUL; - this.regionDiscoveryMetadata.region_used = - autodetectedRegionName; - return Authority_Authority.replaceWithRegionalInformation(metadata, autodetectedRegionName); - } - this.regionDiscoveryMetadata.region_outcome = - RegionDiscoveryOutcomes.AUTO_DETECTION_REQUESTED_FAILED; - } - return metadata; - } - /** - * Updates the AuthorityMetadataEntity with new aliases, preferred_network and preferred_cache - * and returns where the information was retrieved from - * @param metadataEntity - * @returns AuthorityMetadataSource - */ - async updateCloudDiscoveryMetadata(metadataEntity) { - const localMetadataSource = this.updateCloudDiscoveryMetadataFromLocalSources(metadataEntity); - if (localMetadataSource) { - return localMetadataSource; - } - // Fallback to network as metadata source - const metadata = await invokeAsync(this.getCloudDiscoveryMetadataFromNetwork.bind(this), AuthorityGetCloudDiscoveryMetadataFromNetwork, this.logger, this.performanceClient, this.correlationId)(); - if (metadata) { - updateCloudDiscoveryMetadata(metadataEntity, metadata, true); - return AuthorityMetadataSource.NETWORK; - } - // Metadata could not be obtained from the config, cache, network or hardcoded values - throw ClientConfigurationError_createClientConfigurationError(untrustedAuthority); - } - updateCloudDiscoveryMetadataFromLocalSources(metadataEntity) { - this.logger.verbose("Attempting to get cloud discovery metadata from authority configuration", this.correlationId); - this.logger.verbosePii(`Known Authorities: '${this.authorityOptions.knownAuthorities || - NOT_APPLICABLE}'`, this.correlationId); - this.logger.verbosePii(`Authority Metadata: '${this.authorityOptions.authorityMetadata || - NOT_APPLICABLE}'`, this.correlationId); - this.logger.verbosePii(`Canonical Authority: '${metadataEntity.canonical_authority || NOT_APPLICABLE}'`, this.correlationId); - const metadata = this.getCloudDiscoveryMetadataFromConfig(); - if (metadata) { - this.logger.verbose("Found cloud discovery metadata in authority configuration", this.correlationId); - updateCloudDiscoveryMetadata(metadataEntity, metadata, false); - return AuthorityMetadataSource.CONFIG; - } - // If the cached metadata came from config but that config was not passed to this instance, we must go to hardcoded values - this.logger.verbose("Did not find cloud discovery metadata in the config... Attempting to get cloud discovery metadata from the hardcoded values.", this.correlationId); - const hardcodedMetadata = getCloudDiscoveryMetadataFromHardcodedValues(this.hostnameAndPort); - if (hardcodedMetadata) { - this.logger.verbose("Found cloud discovery metadata from hardcoded values.", this.correlationId); - updateCloudDiscoveryMetadata(metadataEntity, hardcodedMetadata, false); - return AuthorityMetadataSource.HARDCODED_VALUES; - } - this.logger.verbose("Did not find cloud discovery metadata in hardcoded values... Attempting to get cloud discovery metadata from the network metadata cache.", this.correlationId); - const metadataEntityExpired = isAuthorityMetadataExpired(metadataEntity); - if (this.isAuthoritySameType(metadataEntity) && - metadataEntity.aliasesFromNetwork && - !metadataEntityExpired) { - this.logger.verbose("Found cloud discovery metadata in the cache.", ""); - // No need to update - return AuthorityMetadataSource.CACHE; - } - else if (metadataEntityExpired) { - this.logger.verbose("The metadata entity is expired.", ""); - } - return null; - } - /** - * Parse cloudDiscoveryMetadata config or check knownAuthorities - */ - getCloudDiscoveryMetadataFromConfig() { - // CIAM does not support cloud discovery metadata - if (this.authorityType === AuthorityType.Ciam) { - this.logger.verbose("CIAM authorities do not support cloud discovery metadata, generate the aliases from authority host.", this.correlationId); - return Authority_Authority.createCloudDiscoveryMetadataFromHost(this.hostnameAndPort); - } - // Check if network response was provided in config - if (this.authorityOptions.cloudDiscoveryMetadata) { - this.logger.verbose("The cloud discovery metadata has been provided as a network response, in the config.", this.correlationId); - try { - this.logger.verbose("Attempting to parse the cloud discovery metadata.", this.correlationId); - const parsedResponse = JSON.parse(this.authorityOptions.cloudDiscoveryMetadata); - const metadata = getCloudDiscoveryMetadataFromNetworkResponse(parsedResponse.metadata, this.hostnameAndPort); - this.logger.verbose("Parsed the cloud discovery metadata.", ""); - if (metadata) { - this.logger.verbose("There is returnable metadata attached to the parsed cloud discovery metadata.", this.correlationId); - return metadata; - } - else { - this.logger.verbose("There is no metadata attached to the parsed cloud discovery metadata.", this.correlationId); - } - } - catch (e) { - this.logger.verbose("Unable to parse the cloud discovery metadata. Throwing Invalid Cloud Discovery Metadata Error.", this.correlationId); - throw ClientConfigurationError_createClientConfigurationError(invalidCloudDiscoveryMetadata); - } - } - // If cloudDiscoveryMetadata is empty or does not contain the host, check knownAuthorities - if (this.isInKnownAuthorities()) { - this.logger.verbose("The host is included in knownAuthorities. Creating new cloud discovery metadata from the host.", this.correlationId); - return Authority_Authority.createCloudDiscoveryMetadataFromHost(this.hostnameAndPort); - } - return null; - } - /** - * Called to get metadata from network if CloudDiscoveryMetadata was not populated by config - * - * @param hasHardcodedMetadata boolean - */ - async getCloudDiscoveryMetadataFromNetwork() { - const instanceDiscoveryEndpoint = `${AAD_INSTANCE_DISCOVERY_ENDPT}${this.canonicalAuthority}oauth2/v2.0/authorize`; - const options = {}; - /* - * TODO: Add a timeout if the authority exists in our library's - * hardcoded list of metadata - */ - let match = null; - try { - const response = await this.networkInterface.sendGetRequestAsync(instanceDiscoveryEndpoint, options); - let typedResponseBody; - let metadata; - if (isCloudInstanceDiscoveryResponse(response.body)) { - typedResponseBody = - response.body; - metadata = typedResponseBody.metadata; - this.logger.verbosePii(`tenant_discovery_endpoint is: '${typedResponseBody.tenant_discovery_endpoint}'`, this.correlationId); - } - else if (isCloudInstanceDiscoveryErrorResponse(response.body)) { - this.logger.warning(`A CloudInstanceDiscoveryErrorResponse was returned. The cloud instance discovery network request's status code is: '${response.status}'`, this.correlationId); - typedResponseBody = - response.body; - if (typedResponseBody.error === INVALID_INSTANCE) { - this.logger.error("The CloudInstanceDiscoveryErrorResponse error is invalid_instance.", this.correlationId); - return null; - } - this.logger.warning(`The CloudInstanceDiscoveryErrorResponse error is '${typedResponseBody.error}'`, this.correlationId); - this.logger.warning(`The CloudInstanceDiscoveryErrorResponse error description is '${typedResponseBody.error_description}'`, this.correlationId); - this.logger.warning("Setting the value of the CloudInstanceDiscoveryMetadata (returned from the network, correlationId) to []", this.correlationId); - metadata = []; - } - else { - this.logger.error("AAD did not return a CloudInstanceDiscoveryResponse or CloudInstanceDiscoveryErrorResponse", this.correlationId); - return null; - } - this.logger.verbose("Attempting to find a match between the developer's authority and the CloudInstanceDiscoveryMetadata returned from the network request.", this.correlationId); - match = getCloudDiscoveryMetadataFromNetworkResponse(metadata, this.hostnameAndPort); - } - catch (error) { - if (error instanceof AuthError) { - this.logger.error(`There was a network error while attempting to get the cloud discovery instance metadata.\nError: '${error.errorCode}'\nError Description: '${error.errorMessage}'`, this.correlationId); - } - else { - const typedError = error; - this.logger.error(`A non-MSALJS error was thrown while attempting to get the cloud instance discovery metadata.\nError: '${typedError.name}'\nError Description: '${typedError.message}'`, this.correlationId); - } - return null; - } - // Custom Domain scenario, host is trusted because Instance Discovery call succeeded - if (!match) { - this.logger.warning("The developer's authority was not found within the CloudInstanceDiscoveryMetadata returned from the network request.", this.correlationId); - this.logger.verbose("Creating custom Authority for custom domain scenario.", this.correlationId); - match = Authority_Authority.createCloudDiscoveryMetadataFromHost(this.hostnameAndPort); - } - return match; - } - /** - * Helper function to determine if this host is included in the knownAuthorities config option - */ - isInKnownAuthorities() { - const matches = this.authorityOptions.knownAuthorities.filter((authority) => { - return (authority && - UrlString.getDomainFromUrl(authority).toLowerCase() === - this.hostnameAndPort); - }); - return matches.length > 0; - } - /** - * helper function to populate the authority based on azureCloudOptions - * @param authorityString - * @param azureCloudOptions - */ - static generateAuthority(authorityString, azureCloudOptions) { - let authorityAzureCloudInstance; - if (azureCloudOptions && - azureCloudOptions.azureCloudInstance !== AzureCloudInstance.None) { - const tenant = azureCloudOptions.tenant - ? azureCloudOptions.tenant - : DEFAULT_COMMON_TENANT; - authorityAzureCloudInstance = `${azureCloudOptions.azureCloudInstance}/${tenant}/`; - } - return authorityAzureCloudInstance - ? authorityAzureCloudInstance - : authorityString; - } - /** - * Creates cloud discovery metadata object from a given host - * @param host - */ - static createCloudDiscoveryMetadataFromHost(host) { - return { - preferred_network: host, - preferred_cache: host, - aliases: [host], - }; - } - /** - * helper function to generate environment from authority object - */ - getPreferredCache() { - if (this.managedIdentity) { - return DEFAULT_AUTHORITY_HOST; - } - else if (this.discoveryComplete()) { - return this.metadata.preferred_cache; - } - else { - throw ClientAuthError_createClientAuthError(endpointResolutionError); - } - } - /** - * Returns whether or not the provided host is an alias of this authority instance - * @param host - */ - isAlias(host) { - return this.metadata.aliases.indexOf(host) > -1; - } - /** - * Returns whether or not the provided host is an alias of a known Microsoft authority for purposes of endpoint discovery - * @param host - */ - isAliasOfKnownMicrosoftAuthority(host) { - return InstanceDiscoveryMetadataAliases.has(host); - } - /** - * Checks whether the provided host is that of a public cloud authority - * - * @param authority string - * @returns bool - */ - static isPublicCloudAuthority(host) { - return KNOWN_PUBLIC_CLOUDS.indexOf(host) >= 0; - } - /** - * Rebuild the authority string with the region - * - * @param host string - * @param region string - */ - static buildRegionalAuthorityString(host, region, queryString) { - // Create and validate a Url string object with the initial authority string - const authorityUrlInstance = new UrlString(host); - authorityUrlInstance.validateAsUri(); - const authorityUrlParts = authorityUrlInstance.getUrlComponents(); - let hostNameAndPort = `${region}.${authorityUrlParts.HostNameAndPort}`; - if (this.isPublicCloudAuthority(authorityUrlParts.HostNameAndPort)) { - hostNameAndPort = `${region}.${REGIONAL_AUTH_PUBLIC_CLOUD_SUFFIX}`; - } - // Include the query string portion of the url - const url = UrlString.constructAuthorityUriFromObject({ - ...authorityUrlInstance.getUrlComponents(), - HostNameAndPort: hostNameAndPort, - }).urlString; - // Add the query string if a query string was provided - if (queryString) - return `${url}?${queryString}`; - return url; - } - /** - * Replace the endpoints in the metadata object with their regional equivalents. - * - * @param metadata OpenIdConfigResponse - * @param azureRegion string - */ - static replaceWithRegionalInformation(metadata, azureRegion) { - const regionalMetadata = { ...metadata }; - regionalMetadata.authorization_endpoint = - Authority_Authority.buildRegionalAuthorityString(regionalMetadata.authorization_endpoint, azureRegion); - regionalMetadata.token_endpoint = - Authority_Authority.buildRegionalAuthorityString(regionalMetadata.token_endpoint, azureRegion); - if (regionalMetadata.end_session_endpoint) { - regionalMetadata.end_session_endpoint = - Authority_Authority.buildRegionalAuthorityString(regionalMetadata.end_session_endpoint, azureRegion); - } - return regionalMetadata; - } - /** - * Transform CIAM_AUTHORIY as per the below rules: - * If no path segments found and it is a CIAM authority (hostname ends with .ciamlogin.com), then transform it - * - * NOTE: The transformation path should go away once STS supports CIAM with the format: `tenantIdorDomain.ciamlogin.com` - * `ciamlogin.com` can also change in the future and we should accommodate the same - * - * @param authority - */ - static transformCIAMAuthority(authority) { - let ciamAuthority = authority; - const authorityUrl = new UrlString(authority); - const authorityUrlComponents = authorityUrl.getUrlComponents(); - // check if transformation is needed - if (authorityUrlComponents.PathSegments.length === 0 && - authorityUrlComponents.HostNameAndPort.endsWith(CIAM_AUTH_URL)) { - const tenantIdOrDomain = authorityUrlComponents.HostNameAndPort.split(".")[0]; - ciamAuthority = `${ciamAuthority}${tenantIdOrDomain}${AAD_TENANT_DOMAIN_SUFFIX}`; - } - return ciamAuthority; - } -} -// Reserved tenant domain names that will not be replaced with tenant id -Authority_Authority.reservedTenantDomains = new Set([ - "{tenant}", - "{tenantid}", - AADAuthority.COMMON, - AADAuthority.CONSUMERS, - AADAuthority.ORGANIZATIONS, -]); -/** - * Extract tenantId from authority - */ -function getTenantFromAuthorityString(authority) { - const authorityUrl = new UrlString(authority); - const authorityUrlComponents = authorityUrl.getUrlComponents(); - /** - * For credential matching purposes, tenantId is the last path segment of the authority URL: - * AAD Authority - domain/tenantId -> Credentials are cached with realm = tenantId - * B2C Authority - domain/{tenantId}?/.../policy -> Credentials are cached with realm = policy - * tenantId is downcased because B2C policies can have mixed case but tfp claim is downcased - * - * Note that we may not have any path segments in certain OIDC scenarios. - */ - const tenantId = authorityUrlComponents.PathSegments.slice(-1)[0]?.toLowerCase(); - switch (tenantId) { - case AADAuthority.COMMON: - case AADAuthority.ORGANIZATIONS: - case AADAuthority.CONSUMERS: - return undefined; - default: - return tenantId; - } -} -function formatAuthorityUri(authorityUri) { - return authorityUri.endsWith(FORWARD_SLASH) - ? authorityUri - : `${authorityUri}${FORWARD_SLASH}`; -} -function buildStaticAuthorityOptions(authOptions) { - const rawCloudDiscoveryMetadata = authOptions.cloudDiscoveryMetadata; - let cloudDiscoveryMetadata = undefined; - if (rawCloudDiscoveryMetadata) { - try { - cloudDiscoveryMetadata = JSON.parse(rawCloudDiscoveryMetadata); - } - catch (e) { - throw ClientConfigurationError_createClientConfigurationError(invalidCloudDiscoveryMetadata); - } - } - return { - canonicalAuthority: authOptions.authority - ? formatAuthorityUri(authOptions.authority) - : undefined, - knownAuthorities: authOptions.knownAuthorities, - cloudDiscoveryMetadata: cloudDiscoveryMetadata, - }; -} - - -//# sourceMappingURL=Authority.mjs.map - -;// CONCATENATED MODULE: ./node_modules/@azure/msal-common/dist/request/ScopeSet.mjs -/*! @azure/msal-common v16.3.0 2026-03-13 */ - - - - - - - - -/* - * Copyright (c) Microsoft Corporation. All rights reserved. - * Licensed under the MIT License. - */ -/** - * The ScopeSet class creates a set of scopes. Scopes are case-insensitive, unique values, so the Set object in JS makes - * the most sense to implement for this class. All scopes are trimmed and converted to lower case strings in intersection and union functions - * to ensure uniqueness of strings. - */ -class ScopeSet { - constructor(inputScopes) { - // Filter empty string and null/undefined array items - const scopeArr = inputScopes - ? StringUtils_StringUtils.trimArrayEntries([...inputScopes]) - : []; - const filteredInput = scopeArr - ? StringUtils_StringUtils.removeEmptyStringsFromArray(scopeArr) - : []; - // Check if scopes array has at least one member - if (!filteredInput || !filteredInput.length) { - throw ClientConfigurationError_createClientConfigurationError(emptyInputScopesError); - } - this.scopes = new Set(); // Iterator in constructor not supported by IE11 - filteredInput.forEach((scope) => this.scopes.add(scope)); - } - /** - * Factory method to create ScopeSet from space-delimited string - * @param inputScopeString - * @param appClientId - * @param scopesRequired - */ - static fromString(inputScopeString) { - const scopeString = inputScopeString || ""; - const inputScopes = scopeString.split(" "); - return new ScopeSet(inputScopes); - } - /** - * Creates the set of scopes to search for in cache lookups - * @param inputScopeString - * @returns - */ - static createSearchScopes(inputScopeString) { - // Handle empty scopes by using default OIDC scopes for cache lookup - const scopesToUse = inputScopeString && inputScopeString.length > 0 - ? inputScopeString - : [...OIDC_DEFAULT_SCOPES]; - const scopeSet = new ScopeSet(scopesToUse); - if (!scopeSet.containsOnlyOIDCScopes()) { - scopeSet.removeOIDCScopes(); - } - else { - scopeSet.removeScope(OFFLINE_ACCESS_SCOPE); - } - return scopeSet; - } - /** - * Check if a given scope is present in this set of scopes. - * @param scope - */ - containsScope(scope) { - const lowerCaseScopes = this.printScopesLowerCase().split(" "); - const lowerCaseScopesSet = new ScopeSet(lowerCaseScopes); - // compare lowercase scopes - return scope - ? lowerCaseScopesSet.scopes.has(scope.toLowerCase()) - : false; - } - /** - * Check if a set of scopes is present in this set of scopes. - * @param scopeSet - */ - containsScopeSet(scopeSet) { - if (!scopeSet || scopeSet.scopes.size <= 0) { - return false; - } - return (this.scopes.size >= scopeSet.scopes.size && - scopeSet.asArray().every((scope) => this.containsScope(scope))); - } - /** - * Check if set of scopes contains only the defaults - */ - containsOnlyOIDCScopes() { - let defaultScopeCount = 0; - OIDC_SCOPES.forEach((defaultScope) => { - if (this.containsScope(defaultScope)) { - defaultScopeCount += 1; - } - }); - return this.scopes.size === defaultScopeCount; - } - /** - * Appends single scope if passed - * @param newScope - */ - appendScope(newScope) { - if (newScope) { - this.scopes.add(newScope.trim()); - } - } - /** - * Appends multiple scopes if passed - * @param newScopes - */ - appendScopes(newScopes) { - try { - newScopes.forEach((newScope) => this.appendScope(newScope)); - } - catch (e) { - throw ClientAuthError_createClientAuthError(cannotAppendScopeSet); - } - } - /** - * Removes element from set of scopes. - * @param scope - */ - removeScope(scope) { - if (!scope) { - throw ClientAuthError_createClientAuthError(cannotRemoveEmptyScope); - } - this.scopes.delete(scope.trim()); - } - /** - * Removes default scopes from set of scopes - * Primarily used to prevent cache misses if the default scopes are not returned from the server - */ - removeOIDCScopes() { - OIDC_SCOPES.forEach((defaultScope) => { - this.scopes.delete(defaultScope); - }); - } - /** - * Combines an array of scopes with the current set of scopes. - * @param otherScopes - */ - unionScopeSets(otherScopes) { - if (!otherScopes) { - throw ClientAuthError_createClientAuthError(emptyInputScopeSet); - } - const unionScopes = new Set(); // Iterator in constructor not supported in IE11 - otherScopes.scopes.forEach((scope) => unionScopes.add(scope.toLowerCase())); - this.scopes.forEach((scope) => unionScopes.add(scope.toLowerCase())); - return unionScopes; - } - /** - * Check if scopes intersect between this set and another. - * @param otherScopes - */ - intersectingScopeSets(otherScopes) { - if (!otherScopes) { - throw ClientAuthError_createClientAuthError(emptyInputScopeSet); - } - // Do not allow OIDC scopes to be the only intersecting scopes - if (!otherScopes.containsOnlyOIDCScopes()) { - otherScopes.removeOIDCScopes(); - } - const unionScopes = this.unionScopeSets(otherScopes); - const sizeOtherScopes = otherScopes.getScopeCount(); - const sizeThisScopes = this.getScopeCount(); - const sizeUnionScopes = unionScopes.size; - return sizeUnionScopes < sizeThisScopes + sizeOtherScopes; - } - /** - * Returns size of set of scopes. - */ - getScopeCount() { - return this.scopes.size; - } - /** - * Returns the scopes as an array of string values - */ - asArray() { - const array = []; - this.scopes.forEach((val) => array.push(val)); - return array; - } - /** - * Prints scopes into a space-delimited string - */ - printScopes() { - if (this.scopes) { - const scopeArr = this.asArray(); - return scopeArr.join(" "); - } - return ""; - } - /** - * Prints scopes into a space-delimited lower-case string (used for caching) - */ - printScopesLowerCase() { - return this.printScopes().toLowerCase(); - } -} - - -//# sourceMappingURL=ScopeSet.mjs.map - -;// CONCATENATED MODULE: ./node_modules/@azure/msal-common/dist/request/RequestParameterBuilder.mjs -/*! @azure/msal-common v16.3.0 2026-03-13 */ - - - - - +/* + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. + */ +/** + * The authority class validates the authority URIs used by the user, and retrieves the OpenID Configuration Data from the + * endpoint. It will store the pertinent config data in this object for use during token calls. + * @internal + */ +class Authority_Authority { + constructor(authority, networkInterface, cacheManager, authorityOptions, logger, correlationId, performanceClient, managedIdentity) { + this.canonicalAuthority = authority; + this._canonicalAuthority.validateAsUri(); + this.networkInterface = networkInterface; + this.cacheManager = cacheManager; + this.authorityOptions = authorityOptions; + this.regionDiscoveryMetadata = { + region_used: undefined, + region_source: undefined, + region_outcome: undefined, + }; + this.logger = logger; + this.performanceClient = performanceClient; + this.correlationId = correlationId; + this.managedIdentity = managedIdentity || false; + this.regionDiscovery = new RegionDiscovery(networkInterface, this.logger, this.performanceClient, this.correlationId); + } + /** + * Get {@link AuthorityType} + * @param authorityUri {@link IUri} + * @private + */ + getAuthorityType(authorityUri) { + // CIAM auth url pattern is being standardized as: .ciamlogin.com + if (authorityUri.HostNameAndPort.endsWith(CIAM_AUTH_URL)) { + return AuthorityType.Ciam; + } + const pathSegments = authorityUri.PathSegments; + if (pathSegments.length) { + switch (pathSegments[0].toLowerCase()) { + case ADFS: + return AuthorityType.Adfs; + case DSTS: + return AuthorityType.Dsts; + } + } + return AuthorityType.Default; + } + // See above for AuthorityType + get authorityType() { + return this.getAuthorityType(this.canonicalAuthorityUrlComponents); + } + /** + * ProtocolMode enum representing the way endpoints are constructed. + */ + get protocolMode() { + return this.authorityOptions.protocolMode; + } + /** + * Returns authorityOptions which can be used to reinstantiate a new authority instance + */ + get options() { + return this.authorityOptions; + } + /** + * A URL that is the authority set by the developer + */ + get canonicalAuthority() { + return this._canonicalAuthority.urlString; + } + /** + * Sets canonical authority. + */ + set canonicalAuthority(url) { + this._canonicalAuthority = new UrlString(url); + this._canonicalAuthority.validateAsUri(); + this._canonicalAuthorityUrlComponents = null; + } + /** + * Get authority components. + */ + get canonicalAuthorityUrlComponents() { + if (!this._canonicalAuthorityUrlComponents) { + this._canonicalAuthorityUrlComponents = + this._canonicalAuthority.getUrlComponents(); + } + return this._canonicalAuthorityUrlComponents; + } + /** + * Get hostname and port i.e. login.microsoftonline.com + */ + get hostnameAndPort() { + return this.canonicalAuthorityUrlComponents.HostNameAndPort.toLowerCase(); + } + /** + * Get tenant for authority. + */ + get tenant() { + return this.canonicalAuthorityUrlComponents.PathSegments[0]; + } + /** + * OAuth /authorize endpoint for requests + */ + get authorizationEndpoint() { + if (this.discoveryComplete()) { + return this.replacePath(this.metadata.authorization_endpoint); + } + else { + throw ClientAuthError_createClientAuthError(endpointResolutionError); + } + } + /** + * OAuth /token endpoint for requests + */ + get tokenEndpoint() { + if (this.discoveryComplete()) { + return this.replacePath(this.metadata.token_endpoint); + } + else { + throw ClientAuthError_createClientAuthError(endpointResolutionError); + } + } + get deviceCodeEndpoint() { + if (this.discoveryComplete()) { + return this.replacePath(this.metadata.token_endpoint.replace("/token", "/devicecode")); + } + else { + throw ClientAuthError_createClientAuthError(endpointResolutionError); + } + } + /** + * OAuth logout endpoint for requests + */ + get endSessionEndpoint() { + if (this.discoveryComplete()) { + // ROPC policies may not have end_session_endpoint set + if (!this.metadata.end_session_endpoint) { + throw ClientAuthError_createClientAuthError(endSessionEndpointNotSupported); + } + return this.replacePath(this.metadata.end_session_endpoint); + } + else { + throw ClientAuthError_createClientAuthError(endpointResolutionError); + } + } + /** + * OAuth issuer for requests + */ + get selfSignedJwtAudience() { + if (this.discoveryComplete()) { + return this.replacePath(this.metadata.issuer); + } + else { + throw ClientAuthError_createClientAuthError(endpointResolutionError); + } + } + /** + * Jwks_uri for token signing keys + */ + get jwksUri() { + if (this.discoveryComplete()) { + return this.replacePath(this.metadata.jwks_uri); + } + else { + throw ClientAuthError_createClientAuthError(endpointResolutionError); + } + } + /** + * Returns a flag indicating that tenant name can be replaced in authority {@link IUri} + * @param authorityUri {@link IUri} + * @private + */ + canReplaceTenant(authorityUri) { + return (authorityUri.PathSegments.length === 1 && + !Authority_Authority.reservedTenantDomains.has(authorityUri.PathSegments[0]) && + this.getAuthorityType(authorityUri) === AuthorityType.Default && + this.protocolMode !== ProtocolMode_ProtocolMode.OIDC); + } + /** + * Replaces tenant in url path with current tenant. Defaults to common. + * @param urlString + */ + replaceTenant(urlString) { + return urlString.replace(/{tenant}|{tenantid}/g, this.tenant); + } + /** + * Replaces path such as tenant or policy with the current tenant or policy. + * @param urlString + */ + replacePath(urlString) { + let endpoint = urlString; + const cachedAuthorityUrl = new UrlString(this.metadata.canonical_authority); + const cachedAuthorityUrlComponents = cachedAuthorityUrl.getUrlComponents(); + const cachedAuthorityParts = cachedAuthorityUrlComponents.PathSegments; + const currentAuthorityParts = this.canonicalAuthorityUrlComponents.PathSegments; + currentAuthorityParts.forEach((currentPart, index) => { + let cachedPart = cachedAuthorityParts[index]; + if (index === 0 && + this.canReplaceTenant(cachedAuthorityUrlComponents)) { + const tenantId = new UrlString(this.metadata.authorization_endpoint).getUrlComponents().PathSegments[0]; + /** + * Check if AAD canonical authority contains tenant domain name, for example "testdomain.onmicrosoft.com", + * by comparing its first path segment to the corresponding authorization endpoint path segment, which is + * always resolved with tenant id by OIDC. + */ + if (cachedPart !== tenantId) { + this.logger.verbose(`Replacing tenant domain name '${cachedPart}' with id '${tenantId}'`, this.correlationId); + cachedPart = tenantId; + } + } + if (currentPart !== cachedPart) { + endpoint = endpoint.replace(`/${cachedPart}/`, `/${currentPart}/`); + } + }); + return this.replaceTenant(endpoint); + } + /** + * The default open id configuration endpoint for any canonical authority. + */ + get defaultOpenIdConfigurationEndpoint() { + const canonicalAuthorityHost = this.hostnameAndPort; + if (this.canonicalAuthority.endsWith("v2.0/") || + this.authorityType === AuthorityType.Adfs || + (this.protocolMode === ProtocolMode_ProtocolMode.OIDC && + !this.isAliasOfKnownMicrosoftAuthority(canonicalAuthorityHost))) { + return `${this.canonicalAuthority}.well-known/openid-configuration`; + } + return `${this.canonicalAuthority}v2.0/.well-known/openid-configuration`; + } + /** + * Boolean that returns whether or not tenant discovery has been completed. + */ + discoveryComplete() { + return !!this.metadata; + } + /** + * Perform endpoint discovery to discover aliases, preferred_cache, preferred_network + * and the /authorize, /token and logout endpoints. + */ + async resolveEndpointsAsync() { + const metadataEntity = this.getCurrentMetadataEntity(); + const cloudDiscoverySource = await invokeAsync(this.updateCloudDiscoveryMetadata.bind(this), AuthorityUpdateCloudDiscoveryMetadata, this.logger, this.performanceClient, this.correlationId)(metadataEntity); + this.canonicalAuthority = this.canonicalAuthority.replace(this.hostnameAndPort, metadataEntity.preferred_network); + const endpointSource = await invokeAsync(this.updateEndpointMetadata.bind(this), AuthorityUpdateEndpointMetadata, this.logger, this.performanceClient, this.correlationId)(metadataEntity); + this.updateCachedMetadata(metadataEntity, cloudDiscoverySource, { + source: endpointSource, + }); + this.performanceClient?.addFields({ + cloudDiscoverySource: cloudDiscoverySource, + authorityEndpointSource: endpointSource, + }, this.correlationId); + } + /** + * Returns metadata entity from cache if it exists, otherwiser returns a new metadata entity built + * from the configured canonical authority + * @returns + */ + getCurrentMetadataEntity() { + let metadataEntity = this.cacheManager.getAuthorityMetadataByAlias(this.hostnameAndPort, this.correlationId); + if (!metadataEntity) { + metadataEntity = { + aliases: [], + preferred_cache: this.hostnameAndPort, + preferred_network: this.hostnameAndPort, + canonical_authority: this.canonicalAuthority, + authorization_endpoint: "", + token_endpoint: "", + end_session_endpoint: "", + issuer: "", + aliasesFromNetwork: false, + endpointsFromNetwork: false, + expiresAt: generateAuthorityMetadataExpiresAt(), + jwks_uri: "", + }; + } + return metadataEntity; + } + /** + * Updates cached metadata based on metadata source and sets the instance's metadata + * property to the same value + * @param metadataEntity + * @param cloudDiscoverySource + * @param endpointMetadataResult + */ + updateCachedMetadata(metadataEntity, cloudDiscoverySource, endpointMetadataResult) { + if (cloudDiscoverySource !== AuthorityMetadataSource.CACHE && + endpointMetadataResult?.source !== + AuthorityMetadataSource.CACHE) { + // Reset the expiration time unless both values came from a successful cache lookup + metadataEntity.expiresAt = + generateAuthorityMetadataExpiresAt(); + metadataEntity.canonical_authority = this.canonicalAuthority; + } + const cacheKey = this.cacheManager.generateAuthorityMetadataCacheKey(metadataEntity.preferred_cache, this.correlationId); + this.cacheManager.setAuthorityMetadata(cacheKey, metadataEntity, this.correlationId); + this.metadata = metadataEntity; + } + /** + * Update AuthorityMetadataEntity with new endpoints and return where the information came from + * @param metadataEntity + */ + async updateEndpointMetadata(metadataEntity) { + const localMetadata = this.updateEndpointMetadataFromLocalSources(metadataEntity); + // Further update may be required for hardcoded metadata if regional metadata is preferred + if (localMetadata) { + if (localMetadata.source === + AuthorityMetadataSource.HARDCODED_VALUES) { + // If the user prefers to use an azure region replace the global endpoints with regional information. + if (this.authorityOptions.azureRegionConfiguration?.azureRegion) { + if (localMetadata.metadata) { + const hardcodedMetadata = await invokeAsync(this.updateMetadataWithRegionalInformation.bind(this), AuthorityUpdateMetadataWithRegionalInformation, this.logger, this.performanceClient, this.correlationId)(localMetadata.metadata); + updateAuthorityEndpointMetadata(metadataEntity, hardcodedMetadata, false); + metadataEntity.canonical_authority = + this.canonicalAuthority; + } + } + } + return localMetadata.source; + } + // Get metadata from network if local sources aren't available + let metadata = await invokeAsync(this.getEndpointMetadataFromNetwork.bind(this), AuthorityGetEndpointMetadataFromNetwork, this.logger, this.performanceClient, this.correlationId)(); + if (metadata) { + // If the user prefers to use an azure region replace the global endpoints with regional information. + if (this.authorityOptions.azureRegionConfiguration?.azureRegion) { + metadata = await invokeAsync(this.updateMetadataWithRegionalInformation.bind(this), AuthorityUpdateMetadataWithRegionalInformation, this.logger, this.performanceClient, this.correlationId)(metadata); + } + updateAuthorityEndpointMetadata(metadataEntity, metadata, true); + return AuthorityMetadataSource.NETWORK; + } + else { + // Metadata could not be obtained from the config, cache, network or hardcoded values + throw ClientAuthError_createClientAuthError(openIdConfigError, this.defaultOpenIdConfigurationEndpoint); + } + } + /** + * Updates endpoint metadata from local sources and returns where the information was retrieved from and the metadata config + * response if the source is hardcoded metadata + * @param metadataEntity + * @returns + */ + updateEndpointMetadataFromLocalSources(metadataEntity) { + this.logger.verbose("Attempting to get endpoint metadata from authority configuration", this.correlationId); + const configMetadata = this.getEndpointMetadataFromConfig(); + if (configMetadata) { + this.logger.verbose("Found endpoint metadata in authority configuration", this.correlationId); + updateAuthorityEndpointMetadata(metadataEntity, configMetadata, false); + return { + source: AuthorityMetadataSource.CONFIG, + }; + } + this.logger.verbose("Did not find endpoint metadata in the config... Attempting to get endpoint metadata from the hardcoded values.", this.correlationId); + const hardcodedMetadata = this.getEndpointMetadataFromHardcodedValues(); + if (hardcodedMetadata) { + updateAuthorityEndpointMetadata(metadataEntity, hardcodedMetadata, false); + return { + source: AuthorityMetadataSource.HARDCODED_VALUES, + metadata: hardcodedMetadata, + }; + } + else { + this.logger.verbose("Did not find endpoint metadata in hardcoded values... Attempting to get endpoint metadata from the network metadata cache.", this.correlationId); + } + // Check cached metadata entity expiration status + const metadataEntityExpired = isAuthorityMetadataExpired(metadataEntity); + if (this.isAuthoritySameType(metadataEntity) && + metadataEntity.endpointsFromNetwork && + !metadataEntityExpired) { + // No need to update + this.logger.verbose("Found endpoint metadata in the cache.", ""); + return { source: AuthorityMetadataSource.CACHE }; + } + else if (metadataEntityExpired) { + this.logger.verbose("The metadata entity is expired.", ""); + } + return null; + } + /** + * Compares the number of url components after the domain to determine if the cached + * authority metadata can be used for the requested authority. Protects against same domain different + * authority such as login.microsoftonline.com/tenant and login.microsoftonline.com/tfp/tenant/policy + * @param metadataEntity + */ + isAuthoritySameType(metadataEntity) { + const cachedAuthorityUrl = new UrlString(metadataEntity.canonical_authority); + const cachedParts = cachedAuthorityUrl.getUrlComponents().PathSegments; + return (cachedParts.length === + this.canonicalAuthorityUrlComponents.PathSegments.length); + } + /** + * Parse authorityMetadata config option + */ + getEndpointMetadataFromConfig() { + if (this.authorityOptions.authorityMetadata) { + try { + return JSON.parse(this.authorityOptions.authorityMetadata); + } + catch (e) { + throw ClientConfigurationError_createClientConfigurationError(invalidAuthorityMetadata); + } + } + return null; + } + /** + * Gets OAuth endpoints from the given OpenID configuration endpoint. + * + * @param hasHardcodedMetadata boolean + */ + async getEndpointMetadataFromNetwork() { + const options = {}; + /* + * TODO: Add a timeout if the authority exists in our library's + * hardcoded list of metadata + */ + const openIdConfigurationEndpoint = this.defaultOpenIdConfigurationEndpoint; + this.logger.verbose(`Authority.getEndpointMetadataFromNetwork: attempting to retrieve OAuth endpoints from '${openIdConfigurationEndpoint}'`, this.correlationId); + try { + const response = await this.networkInterface.sendGetRequestAsync(openIdConfigurationEndpoint, options); + const isValidResponse = isOpenIdConfigResponse(response.body); + if (isValidResponse) { + return response.body; + } + else { + this.logger.verbose(`Authority.getEndpointMetadataFromNetwork: could not parse response as OpenID configuration`, this.correlationId); + return null; + } + } + catch (e) { + this.logger.verbose(`Authority.getEndpointMetadataFromNetwork: '${e}'`, this.correlationId); + return null; + } + } + /** + * Get OAuth endpoints for common authorities. + */ + getEndpointMetadataFromHardcodedValues() { + if (this.hostnameAndPort in EndpointMetadata) { + return EndpointMetadata[this.hostnameAndPort]; + } + return null; + } + /** + * Update the retrieved metadata with regional information. + * User selected Azure region will be used if configured. + */ + async updateMetadataWithRegionalInformation(metadata) { + const userConfiguredAzureRegion = this.authorityOptions.azureRegionConfiguration?.azureRegion; + if (userConfiguredAzureRegion) { + if (userConfiguredAzureRegion !== + AZURE_REGION_AUTO_DISCOVER_FLAG) { + this.regionDiscoveryMetadata.region_outcome = + RegionDiscoveryOutcomes.CONFIGURED_NO_AUTO_DETECTION; + this.regionDiscoveryMetadata.region_used = + userConfiguredAzureRegion; + return Authority_Authority.replaceWithRegionalInformation(metadata, userConfiguredAzureRegion); + } + const autodetectedRegionName = await invokeAsync(this.regionDiscovery.detectRegion.bind(this.regionDiscovery), RegionDiscoveryDetectRegion, this.logger, this.performanceClient, this.correlationId)(this.authorityOptions.azureRegionConfiguration + ?.environmentRegion, this.regionDiscoveryMetadata); + if (autodetectedRegionName) { + this.regionDiscoveryMetadata.region_outcome = + RegionDiscoveryOutcomes.AUTO_DETECTION_REQUESTED_SUCCESSFUL; + this.regionDiscoveryMetadata.region_used = + autodetectedRegionName; + return Authority_Authority.replaceWithRegionalInformation(metadata, autodetectedRegionName); + } + this.regionDiscoveryMetadata.region_outcome = + RegionDiscoveryOutcomes.AUTO_DETECTION_REQUESTED_FAILED; + } + return metadata; + } + /** + * Updates the AuthorityMetadataEntity with new aliases, preferred_network and preferred_cache + * and returns where the information was retrieved from + * @param metadataEntity + * @returns AuthorityMetadataSource + */ + async updateCloudDiscoveryMetadata(metadataEntity) { + const localMetadataSource = this.updateCloudDiscoveryMetadataFromLocalSources(metadataEntity); + if (localMetadataSource) { + return localMetadataSource; + } + // Fallback to network as metadata source + const metadata = await invokeAsync(this.getCloudDiscoveryMetadataFromNetwork.bind(this), AuthorityGetCloudDiscoveryMetadataFromNetwork, this.logger, this.performanceClient, this.correlationId)(); + if (metadata) { + updateCloudDiscoveryMetadata(metadataEntity, metadata, true); + return AuthorityMetadataSource.NETWORK; + } + // Metadata could not be obtained from the config, cache, network or hardcoded values + throw ClientConfigurationError_createClientConfigurationError(untrustedAuthority); + } + updateCloudDiscoveryMetadataFromLocalSources(metadataEntity) { + this.logger.verbose("Attempting to get cloud discovery metadata from authority configuration", this.correlationId); + this.logger.verbosePii(`Known Authorities: '${this.authorityOptions.knownAuthorities || + NOT_APPLICABLE}'`, this.correlationId); + this.logger.verbosePii(`Authority Metadata: '${this.authorityOptions.authorityMetadata || + NOT_APPLICABLE}'`, this.correlationId); + this.logger.verbosePii(`Canonical Authority: '${metadataEntity.canonical_authority || NOT_APPLICABLE}'`, this.correlationId); + const metadata = this.getCloudDiscoveryMetadataFromConfig(); + if (metadata) { + this.logger.verbose("Found cloud discovery metadata in authority configuration", this.correlationId); + updateCloudDiscoveryMetadata(metadataEntity, metadata, false); + return AuthorityMetadataSource.CONFIG; + } + // If the cached metadata came from config but that config was not passed to this instance, we must go to hardcoded values + this.logger.verbose("Did not find cloud discovery metadata in the config... Attempting to get cloud discovery metadata from the hardcoded values.", this.correlationId); + const hardcodedMetadata = getCloudDiscoveryMetadataFromHardcodedValues(this.hostnameAndPort); + if (hardcodedMetadata) { + this.logger.verbose("Found cloud discovery metadata from hardcoded values.", this.correlationId); + updateCloudDiscoveryMetadata(metadataEntity, hardcodedMetadata, false); + return AuthorityMetadataSource.HARDCODED_VALUES; + } + this.logger.verbose("Did not find cloud discovery metadata in hardcoded values... Attempting to get cloud discovery metadata from the network metadata cache.", this.correlationId); + const metadataEntityExpired = isAuthorityMetadataExpired(metadataEntity); + if (this.isAuthoritySameType(metadataEntity) && + metadataEntity.aliasesFromNetwork && + !metadataEntityExpired) { + this.logger.verbose("Found cloud discovery metadata in the cache.", ""); + // No need to update + return AuthorityMetadataSource.CACHE; + } + else if (metadataEntityExpired) { + this.logger.verbose("The metadata entity is expired.", ""); + } + return null; + } + /** + * Parse cloudDiscoveryMetadata config or check knownAuthorities + */ + getCloudDiscoveryMetadataFromConfig() { + // CIAM does not support cloud discovery metadata + if (this.authorityType === AuthorityType.Ciam) { + this.logger.verbose("CIAM authorities do not support cloud discovery metadata, generate the aliases from authority host.", this.correlationId); + return Authority_Authority.createCloudDiscoveryMetadataFromHost(this.hostnameAndPort); + } + // Check if network response was provided in config + if (this.authorityOptions.cloudDiscoveryMetadata) { + this.logger.verbose("The cloud discovery metadata has been provided as a network response, in the config.", this.correlationId); + try { + this.logger.verbose("Attempting to parse the cloud discovery metadata.", this.correlationId); + const parsedResponse = JSON.parse(this.authorityOptions.cloudDiscoveryMetadata); + const metadata = getCloudDiscoveryMetadataFromNetworkResponse(parsedResponse.metadata, this.hostnameAndPort); + this.logger.verbose("Parsed the cloud discovery metadata.", ""); + if (metadata) { + this.logger.verbose("There is returnable metadata attached to the parsed cloud discovery metadata.", this.correlationId); + return metadata; + } + else { + this.logger.verbose("There is no metadata attached to the parsed cloud discovery metadata.", this.correlationId); + } + } + catch (e) { + this.logger.verbose("Unable to parse the cloud discovery metadata. Throwing Invalid Cloud Discovery Metadata Error.", this.correlationId); + throw ClientConfigurationError_createClientConfigurationError(invalidCloudDiscoveryMetadata); + } + } + // If cloudDiscoveryMetadata is empty or does not contain the host, check knownAuthorities + if (this.isInKnownAuthorities()) { + this.logger.verbose("The host is included in knownAuthorities. Creating new cloud discovery metadata from the host.", this.correlationId); + return Authority_Authority.createCloudDiscoveryMetadataFromHost(this.hostnameAndPort); + } + return null; + } + /** + * Called to get metadata from network if CloudDiscoveryMetadata was not populated by config + * + * @param hasHardcodedMetadata boolean + */ + async getCloudDiscoveryMetadataFromNetwork() { + const instanceDiscoveryEndpoint = `${AAD_INSTANCE_DISCOVERY_ENDPT}${this.canonicalAuthority}oauth2/v2.0/authorize`; + const options = {}; + /* + * TODO: Add a timeout if the authority exists in our library's + * hardcoded list of metadata + */ + let match = null; + try { + const response = await this.networkInterface.sendGetRequestAsync(instanceDiscoveryEndpoint, options); + let typedResponseBody; + let metadata; + if (isCloudInstanceDiscoveryResponse(response.body)) { + typedResponseBody = + response.body; + metadata = typedResponseBody.metadata; + this.logger.verbosePii(`tenant_discovery_endpoint is: '${typedResponseBody.tenant_discovery_endpoint}'`, this.correlationId); + } + else if (isCloudInstanceDiscoveryErrorResponse(response.body)) { + this.logger.warning(`A CloudInstanceDiscoveryErrorResponse was returned. The cloud instance discovery network request's status code is: '${response.status}'`, this.correlationId); + typedResponseBody = + response.body; + if (typedResponseBody.error === INVALID_INSTANCE) { + this.logger.error("The CloudInstanceDiscoveryErrorResponse error is invalid_instance.", this.correlationId); + return null; + } + this.logger.warning(`The CloudInstanceDiscoveryErrorResponse error is '${typedResponseBody.error}'`, this.correlationId); + this.logger.warning(`The CloudInstanceDiscoveryErrorResponse error description is '${typedResponseBody.error_description}'`, this.correlationId); + this.logger.warning("Setting the value of the CloudInstanceDiscoveryMetadata (returned from the network, correlationId) to []", this.correlationId); + metadata = []; + } + else { + this.logger.error("AAD did not return a CloudInstanceDiscoveryResponse or CloudInstanceDiscoveryErrorResponse", this.correlationId); + return null; + } + this.logger.verbose("Attempting to find a match between the developer's authority and the CloudInstanceDiscoveryMetadata returned from the network request.", this.correlationId); + match = getCloudDiscoveryMetadataFromNetworkResponse(metadata, this.hostnameAndPort); + } + catch (error) { + if (error instanceof AuthError) { + this.logger.error(`There was a network error while attempting to get the cloud discovery instance metadata.\nError: '${error.errorCode}'\nError Description: '${error.errorMessage}'`, this.correlationId); + } + else { + const typedError = error; + this.logger.error(`A non-MSALJS error was thrown while attempting to get the cloud instance discovery metadata.\nError: '${typedError.name}'\nError Description: '${typedError.message}'`, this.correlationId); + } + return null; + } + // Custom Domain scenario, host is trusted because Instance Discovery call succeeded + if (!match) { + this.logger.warning("The developer's authority was not found within the CloudInstanceDiscoveryMetadata returned from the network request.", this.correlationId); + this.logger.verbose("Creating custom Authority for custom domain scenario.", this.correlationId); + match = Authority_Authority.createCloudDiscoveryMetadataFromHost(this.hostnameAndPort); + } + return match; + } + /** + * Helper function to determine if this host is included in the knownAuthorities config option + */ + isInKnownAuthorities() { + const matches = this.authorityOptions.knownAuthorities.filter((authority) => { + return (authority && + UrlString.getDomainFromUrl(authority).toLowerCase() === + this.hostnameAndPort); + }); + return matches.length > 0; + } + /** + * helper function to populate the authority based on azureCloudOptions + * @param authorityString + * @param azureCloudOptions + */ + static generateAuthority(authorityString, azureCloudOptions) { + let authorityAzureCloudInstance; + if (azureCloudOptions && + azureCloudOptions.azureCloudInstance !== AzureCloudInstance.None) { + const tenant = azureCloudOptions.tenant + ? azureCloudOptions.tenant + : DEFAULT_COMMON_TENANT; + authorityAzureCloudInstance = `${azureCloudOptions.azureCloudInstance}/${tenant}/`; + } + return authorityAzureCloudInstance + ? authorityAzureCloudInstance + : authorityString; + } + /** + * Creates cloud discovery metadata object from a given host + * @param host + */ + static createCloudDiscoveryMetadataFromHost(host) { + return { + preferred_network: host, + preferred_cache: host, + aliases: [host], + }; + } + /** + * helper function to generate environment from authority object + */ + getPreferredCache() { + if (this.managedIdentity) { + return DEFAULT_AUTHORITY_HOST; + } + else if (this.discoveryComplete()) { + return this.metadata.preferred_cache; + } + else { + throw ClientAuthError_createClientAuthError(endpointResolutionError); + } + } + /** + * Returns whether or not the provided host is an alias of this authority instance + * @param host + */ + isAlias(host) { + return this.metadata.aliases.indexOf(host) > -1; + } + /** + * Returns whether or not the provided host is an alias of a known Microsoft authority for purposes of endpoint discovery + * @param host + */ + isAliasOfKnownMicrosoftAuthority(host) { + return InstanceDiscoveryMetadataAliases.has(host); + } + /** + * Checks whether the provided host is that of a public cloud authority + * + * @param authority string + * @returns bool + */ + static isPublicCloudAuthority(host) { + return KNOWN_PUBLIC_CLOUDS.indexOf(host) >= 0; + } + /** + * Rebuild the authority string with the region + * + * @param host string + * @param region string + */ + static buildRegionalAuthorityString(host, region, queryString) { + // Create and validate a Url string object with the initial authority string + const authorityUrlInstance = new UrlString(host); + authorityUrlInstance.validateAsUri(); + const authorityUrlParts = authorityUrlInstance.getUrlComponents(); + let hostNameAndPort = `${region}.${authorityUrlParts.HostNameAndPort}`; + if (this.isPublicCloudAuthority(authorityUrlParts.HostNameAndPort)) { + hostNameAndPort = `${region}.${REGIONAL_AUTH_PUBLIC_CLOUD_SUFFIX}`; + } + // Include the query string portion of the url + const url = UrlString.constructAuthorityUriFromObject({ + ...authorityUrlInstance.getUrlComponents(), + HostNameAndPort: hostNameAndPort, + }).urlString; + // Add the query string if a query string was provided + if (queryString) + return `${url}?${queryString}`; + return url; + } + /** + * Replace the endpoints in the metadata object with their regional equivalents. + * + * @param metadata OpenIdConfigResponse + * @param azureRegion string + */ + static replaceWithRegionalInformation(metadata, azureRegion) { + const regionalMetadata = { ...metadata }; + regionalMetadata.authorization_endpoint = + Authority_Authority.buildRegionalAuthorityString(regionalMetadata.authorization_endpoint, azureRegion); + regionalMetadata.token_endpoint = + Authority_Authority.buildRegionalAuthorityString(regionalMetadata.token_endpoint, azureRegion); + if (regionalMetadata.end_session_endpoint) { + regionalMetadata.end_session_endpoint = + Authority_Authority.buildRegionalAuthorityString(regionalMetadata.end_session_endpoint, azureRegion); + } + return regionalMetadata; + } + /** + * Transform CIAM_AUTHORIY as per the below rules: + * If no path segments found and it is a CIAM authority (hostname ends with .ciamlogin.com), then transform it + * + * NOTE: The transformation path should go away once STS supports CIAM with the format: `tenantIdorDomain.ciamlogin.com` + * `ciamlogin.com` can also change in the future and we should accommodate the same + * + * @param authority + */ + static transformCIAMAuthority(authority) { + let ciamAuthority = authority; + const authorityUrl = new UrlString(authority); + const authorityUrlComponents = authorityUrl.getUrlComponents(); + // check if transformation is needed + if (authorityUrlComponents.PathSegments.length === 0 && + authorityUrlComponents.HostNameAndPort.endsWith(CIAM_AUTH_URL)) { + const tenantIdOrDomain = authorityUrlComponents.HostNameAndPort.split(".")[0]; + ciamAuthority = `${ciamAuthority}${tenantIdOrDomain}${AAD_TENANT_DOMAIN_SUFFIX}`; + } + return ciamAuthority; + } +} +// Reserved tenant domain names that will not be replaced with tenant id +Authority_Authority.reservedTenantDomains = new Set([ + "{tenant}", + "{tenantid}", + AADAuthority.COMMON, + AADAuthority.CONSUMERS, + AADAuthority.ORGANIZATIONS, +]); +/** + * Extract tenantId from authority + */ +function getTenantFromAuthorityString(authority) { + const authorityUrl = new UrlString(authority); + const authorityUrlComponents = authorityUrl.getUrlComponents(); + /** + * For credential matching purposes, tenantId is the last path segment of the authority URL: + * AAD Authority - domain/tenantId -> Credentials are cached with realm = tenantId + * B2C Authority - domain/{tenantId}?/.../policy -> Credentials are cached with realm = policy + * tenantId is downcased because B2C policies can have mixed case but tfp claim is downcased + * + * Note that we may not have any path segments in certain OIDC scenarios. + */ + const tenantId = authorityUrlComponents.PathSegments.slice(-1)[0]?.toLowerCase(); + switch (tenantId) { + case AADAuthority.COMMON: + case AADAuthority.ORGANIZATIONS: + case AADAuthority.CONSUMERS: + return undefined; + default: + return tenantId; + } +} +function formatAuthorityUri(authorityUri) { + return authorityUri.endsWith(FORWARD_SLASH) + ? authorityUri + : `${authorityUri}${FORWARD_SLASH}`; +} +function buildStaticAuthorityOptions(authOptions) { + const rawCloudDiscoveryMetadata = authOptions.cloudDiscoveryMetadata; + let cloudDiscoveryMetadata = undefined; + if (rawCloudDiscoveryMetadata) { + try { + cloudDiscoveryMetadata = JSON.parse(rawCloudDiscoveryMetadata); + } + catch (e) { + throw ClientConfigurationError_createClientConfigurationError(invalidCloudDiscoveryMetadata); + } + } + return { + canonicalAuthority: authOptions.authority + ? formatAuthorityUri(authOptions.authority) + : undefined, + knownAuthorities: authOptions.knownAuthorities, + cloudDiscoveryMetadata: cloudDiscoveryMetadata, + }; +} + + +//# sourceMappingURL=Authority.mjs.map + +;// CONCATENATED MODULE: ./node_modules/@azure/msal-common/dist/request/ScopeSet.mjs +/*! @azure/msal-common v16.3.0 2026-03-13 */ + + + + + + + + +/* + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. + */ +/** + * The ScopeSet class creates a set of scopes. Scopes are case-insensitive, unique values, so the Set object in JS makes + * the most sense to implement for this class. All scopes are trimmed and converted to lower case strings in intersection and union functions + * to ensure uniqueness of strings. + */ +class ScopeSet { + constructor(inputScopes) { + // Filter empty string and null/undefined array items + const scopeArr = inputScopes + ? StringUtils_StringUtils.trimArrayEntries([...inputScopes]) + : []; + const filteredInput = scopeArr + ? StringUtils_StringUtils.removeEmptyStringsFromArray(scopeArr) + : []; + // Check if scopes array has at least one member + if (!filteredInput || !filteredInput.length) { + throw ClientConfigurationError_createClientConfigurationError(emptyInputScopesError); + } + this.scopes = new Set(); // Iterator in constructor not supported by IE11 + filteredInput.forEach((scope) => this.scopes.add(scope)); + } + /** + * Factory method to create ScopeSet from space-delimited string + * @param inputScopeString + * @param appClientId + * @param scopesRequired + */ + static fromString(inputScopeString) { + const scopeString = inputScopeString || ""; + const inputScopes = scopeString.split(" "); + return new ScopeSet(inputScopes); + } + /** + * Creates the set of scopes to search for in cache lookups + * @param inputScopeString + * @returns + */ + static createSearchScopes(inputScopeString) { + // Handle empty scopes by using default OIDC scopes for cache lookup + const scopesToUse = inputScopeString && inputScopeString.length > 0 + ? inputScopeString + : [...OIDC_DEFAULT_SCOPES]; + const scopeSet = new ScopeSet(scopesToUse); + if (!scopeSet.containsOnlyOIDCScopes()) { + scopeSet.removeOIDCScopes(); + } + else { + scopeSet.removeScope(OFFLINE_ACCESS_SCOPE); + } + return scopeSet; + } + /** + * Check if a given scope is present in this set of scopes. + * @param scope + */ + containsScope(scope) { + const lowerCaseScopes = this.printScopesLowerCase().split(" "); + const lowerCaseScopesSet = new ScopeSet(lowerCaseScopes); + // compare lowercase scopes + return scope + ? lowerCaseScopesSet.scopes.has(scope.toLowerCase()) + : false; + } + /** + * Check if a set of scopes is present in this set of scopes. + * @param scopeSet + */ + containsScopeSet(scopeSet) { + if (!scopeSet || scopeSet.scopes.size <= 0) { + return false; + } + return (this.scopes.size >= scopeSet.scopes.size && + scopeSet.asArray().every((scope) => this.containsScope(scope))); + } + /** + * Check if set of scopes contains only the defaults + */ + containsOnlyOIDCScopes() { + let defaultScopeCount = 0; + OIDC_SCOPES.forEach((defaultScope) => { + if (this.containsScope(defaultScope)) { + defaultScopeCount += 1; + } + }); + return this.scopes.size === defaultScopeCount; + } + /** + * Appends single scope if passed + * @param newScope + */ + appendScope(newScope) { + if (newScope) { + this.scopes.add(newScope.trim()); + } + } + /** + * Appends multiple scopes if passed + * @param newScopes + */ + appendScopes(newScopes) { + try { + newScopes.forEach((newScope) => this.appendScope(newScope)); + } + catch (e) { + throw ClientAuthError_createClientAuthError(cannotAppendScopeSet); + } + } + /** + * Removes element from set of scopes. + * @param scope + */ + removeScope(scope) { + if (!scope) { + throw ClientAuthError_createClientAuthError(cannotRemoveEmptyScope); + } + this.scopes.delete(scope.trim()); + } + /** + * Removes default scopes from set of scopes + * Primarily used to prevent cache misses if the default scopes are not returned from the server + */ + removeOIDCScopes() { + OIDC_SCOPES.forEach((defaultScope) => { + this.scopes.delete(defaultScope); + }); + } + /** + * Combines an array of scopes with the current set of scopes. + * @param otherScopes + */ + unionScopeSets(otherScopes) { + if (!otherScopes) { + throw ClientAuthError_createClientAuthError(emptyInputScopeSet); + } + const unionScopes = new Set(); // Iterator in constructor not supported in IE11 + otherScopes.scopes.forEach((scope) => unionScopes.add(scope.toLowerCase())); + this.scopes.forEach((scope) => unionScopes.add(scope.toLowerCase())); + return unionScopes; + } + /** + * Check if scopes intersect between this set and another. + * @param otherScopes + */ + intersectingScopeSets(otherScopes) { + if (!otherScopes) { + throw ClientAuthError_createClientAuthError(emptyInputScopeSet); + } + // Do not allow OIDC scopes to be the only intersecting scopes + if (!otherScopes.containsOnlyOIDCScopes()) { + otherScopes.removeOIDCScopes(); + } + const unionScopes = this.unionScopeSets(otherScopes); + const sizeOtherScopes = otherScopes.getScopeCount(); + const sizeThisScopes = this.getScopeCount(); + const sizeUnionScopes = unionScopes.size; + return sizeUnionScopes < sizeThisScopes + sizeOtherScopes; + } + /** + * Returns size of set of scopes. + */ + getScopeCount() { + return this.scopes.size; + } + /** + * Returns the scopes as an array of string values + */ + asArray() { + const array = []; + this.scopes.forEach((val) => array.push(val)); + return array; + } + /** + * Prints scopes into a space-delimited string + */ + printScopes() { + if (this.scopes) { + const scopeArr = this.asArray(); + return scopeArr.join(" "); + } + return ""; + } + /** + * Prints scopes into a space-delimited lower-case string (used for caching) + */ + printScopesLowerCase() { + return this.printScopes().toLowerCase(); + } +} + + +//# sourceMappingURL=ScopeSet.mjs.map + +;// CONCATENATED MODULE: ./node_modules/@azure/msal-common/dist/request/RequestParameterBuilder.mjs +/*! @azure/msal-common v16.3.0 2026-03-13 */ + + + + + + + +/* + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. + */ +function instrumentBrokerParams(parameters, correlationId, performanceClient) { + if (!correlationId) { + return; + } + const clientId = parameters.get(CLIENT_ID); + if (clientId && parameters.has(BROKER_CLIENT_ID)) { + performanceClient?.addFields({ + embeddedClientId: clientId, + embeddedRedirectUri: parameters.get(REDIRECT_URI), + }, correlationId); + } +} +/** + * Add the given response_type + * @param parameters + * @param responseType + */ +function addResponseType(parameters, responseType) { + parameters.set(RESPONSE_TYPE, responseType); +} +/** + * add response_mode. defaults to query. + * @param responseMode + */ +function addResponseMode(parameters, responseMode) { + parameters.set(RESPONSE_MODE, responseMode ? responseMode : ResponseMode.QUERY); +} +/** + * Add flag to indicate STS should attempt to use WAM if available + */ +function addNativeBroker(parameters) { + parameters.set(NATIVE_BROKER, "1"); +} +/** + * add scopes. set addOidcScopes to false to prevent default scopes in non-user scenarios + * @param scopeSet + * @param addOidcScopes + */ +function addScopes(parameters, scopes, addOidcScopes = true, defaultScopes = OIDC_DEFAULT_SCOPES) { + // Always add openid to the scopes when adding OIDC scopes + if (addOidcScopes && + !defaultScopes.includes("openid") && + !scopes.includes("openid")) { + defaultScopes.push("openid"); + } + const requestScopes = addOidcScopes + ? [...(scopes || []), ...defaultScopes] + : scopes || []; + const scopeSet = new ScopeSet(requestScopes); + parameters.set(SCOPE, scopeSet.printScopes()); +} +/** + * add clientId + * @param clientId + */ +function addClientId(parameters, clientId) { + parameters.set(CLIENT_ID, clientId); +} +/** + * add redirect_uri + * @param redirectUri + */ +function addRedirectUri(parameters, redirectUri) { + parameters.set(REDIRECT_URI, redirectUri); +} +/** + * add post logout redirectUri + * @param redirectUri + */ +function addPostLogoutRedirectUri(parameters, redirectUri) { + parameters.set(POST_LOGOUT_URI, redirectUri); +} +/** + * add id_token_hint to logout request + * @param idTokenHint + */ +function addIdTokenHint(parameters, idTokenHint) { + parameters.set(ID_TOKEN_HINT, idTokenHint); +} +/** + * add domain_hint + * @param domainHint + */ +function addDomainHint(parameters, domainHint) { + parameters.set(DOMAIN_HINT, domainHint); +} +/** + * add login_hint + * @param loginHint + */ +function addLoginHint(parameters, loginHint) { + parameters.set(LOGIN_HINT, loginHint); +} +/** + * Adds the CCS (Cache Credential Service) query parameter for login_hint + * @param loginHint + */ +function addCcsUpn(parameters, loginHint) { + parameters.set(HeaderNames.CCS_HEADER, `UPN:${loginHint}`); +} +/** + * Adds the CCS (Cache Credential Service) query parameter for account object + * @param loginHint + */ +function addCcsOid(parameters, clientInfo) { + parameters.set(HeaderNames.CCS_HEADER, `Oid:${clientInfo.uid}@${clientInfo.utid}`); +} +/** + * add sid + * @param sid + */ +function addSid(parameters, sid) { + parameters.set(SID, sid); +} +/** + * add claims + * @param claims + */ +function addClaims(parameters, claims, clientCapabilities) { + const mergedClaims = addClientCapabilitiesToClaims(claims, clientCapabilities); + try { + JSON.parse(mergedClaims); + } + catch (e) { + throw ClientConfigurationError_createClientConfigurationError(invalidClaims); + } + parameters.set(CLAIMS, mergedClaims); +} +/** + * add correlationId + * @param correlationId + */ +function addCorrelationId(parameters, correlationId) { + parameters.set(CLIENT_REQUEST_ID, correlationId); +} +/** + * add library info query params + * @param libraryInfo + */ +function addLibraryInfo(parameters, libraryInfo) { + // Telemetry Info + parameters.set(X_CLIENT_SKU, libraryInfo.sku); + parameters.set(X_CLIENT_VER, libraryInfo.version); + if (libraryInfo.os) { + parameters.set(X_CLIENT_OS, libraryInfo.os); + } + if (libraryInfo.cpu) { + parameters.set(X_CLIENT_CPU, libraryInfo.cpu); + } +} +/** + * Add client telemetry parameters + * @param appTelemetry + */ +function addApplicationTelemetry(parameters, appTelemetry) { + if (appTelemetry?.appName) { + parameters.set(X_APP_NAME, appTelemetry.appName); + } + if (appTelemetry?.appVersion) { + parameters.set(X_APP_VER, appTelemetry.appVersion); + } +} +/** + * add prompt + * @param prompt + */ +function addPrompt(parameters, prompt) { + parameters.set(PROMPT, prompt); +} +/** + * add state + * @param state + */ +function addState(parameters, state) { + if (state) { + parameters.set(STATE, state); + } +} +/** + * add nonce + * @param nonce + */ +function addNonce(parameters, nonce) { + parameters.set(NONCE, nonce); +} +/** + * add code_challenge and code_challenge_method + * - throw if either of them are not passed + * @param codeChallenge + * @param codeChallengeMethod + */ +function addCodeChallengeParams(parameters, codeChallenge, codeChallengeMethod) { + if (codeChallenge && codeChallengeMethod) { + parameters.set(CODE_CHALLENGE, codeChallenge); + parameters.set(CODE_CHALLENGE_METHOD, codeChallengeMethod); + } + else { + throw ClientConfigurationError_createClientConfigurationError(pkceParamsMissing); + } +} +/** + * add the `authorization_code` passed by the user to exchange for a token + * @param code + */ +function addAuthorizationCode(parameters, code) { + parameters.set(CODE, code); +} +/** + * add the `authorization_code` passed by the user to exchange for a token + * @param code + */ +function addDeviceCode(parameters, code) { + parameters.set(DEVICE_CODE, code); +} +/** + * add the `refreshToken` passed by the user + * @param refreshToken + */ +function addRefreshToken(parameters, refreshToken) { + parameters.set(REFRESH_TOKEN, refreshToken); +} +/** + * add the `code_verifier` passed by the user to exchange for a token + * @param codeVerifier + */ +function addCodeVerifier(parameters, codeVerifier) { + parameters.set(CODE_VERIFIER, codeVerifier); +} +/** + * add client_secret + * @param clientSecret + */ +function addClientSecret(parameters, clientSecret) { + parameters.set(CLIENT_SECRET, clientSecret); +} +/** + * add clientAssertion for confidential client flows + * @param clientAssertion + */ +function addClientAssertion(parameters, clientAssertion) { + if (clientAssertion) { + parameters.set(CLIENT_ASSERTION, clientAssertion); + } +} +/** + * add clientAssertionType for confidential client flows + * @param clientAssertionType + */ +function addClientAssertionType(parameters, clientAssertionType) { + if (clientAssertionType) { + parameters.set(CLIENT_ASSERTION_TYPE, clientAssertionType); + } +} +/** + * add OBO assertion for confidential client flows + * @param clientAssertion + */ +function addOboAssertion(parameters, oboAssertion) { + parameters.set(OBO_ASSERTION, oboAssertion); +} +/** + * add grant type + * @param grantType + */ +function addRequestTokenUse(parameters, tokenUse) { + parameters.set(REQUESTED_TOKEN_USE, tokenUse); +} +/** + * add grant type + * @param grantType + */ +function addGrantType(parameters, grantType) { + parameters.set(GRANT_TYPE, grantType); +} +/** + * add client info + * + */ +function addClientInfo(parameters) { + parameters.set(CLIENT_INFO, "1"); +} +function addInstanceAware(parameters) { + if (!parameters.has(INSTANCE_AWARE)) { + parameters.set(INSTANCE_AWARE, "true"); + } +} +/** + * Add extraParameters + * @param extraParams - String dictionary containing extra parameters to be added. + */ +function addExtraParameters(parameters, extraParams) { + Object.entries(extraParams).forEach(([key, value]) => { + if (!parameters.has(key) && value) { + parameters.set(key, value); + } + }); +} +function addClientCapabilitiesToClaims(claims, clientCapabilities) { + let mergedClaims; + // Parse provided claims into JSON object or initialize empty object + if (!claims) { + mergedClaims = {}; + } + else { + try { + mergedClaims = JSON.parse(claims); + } + catch (e) { + throw ClientConfigurationError_createClientConfigurationError(invalidClaims); + } + } + if (clientCapabilities && clientCapabilities.length > 0) { + if (!mergedClaims.hasOwnProperty(ClaimsRequestKeys.ACCESS_TOKEN)) { + // Add access_token key to claims object + mergedClaims[ClaimsRequestKeys.ACCESS_TOKEN] = {}; + } + // Add xms_cc claim with provided clientCapabilities to access_token key + mergedClaims[ClaimsRequestKeys.ACCESS_TOKEN][ClaimsRequestKeys.XMS_CC] = { + values: clientCapabilities, + }; + } + return JSON.stringify(mergedClaims); +} +/** + * adds `username` for Password Grant flow + * @param username + */ +function addUsername(parameters, username) { + parameters.set(PasswordGrantConstants.username, username); +} +/** + * adds `password` for Password Grant flow + * @param password + */ +function addPassword(parameters, password) { + parameters.set(PasswordGrantConstants.password, password); +} +/** + * add pop_jwk to query params + * @param cnfString + */ +function addPopToken(parameters, cnfString) { + if (cnfString) { + parameters.set(TOKEN_TYPE, AuthenticationScheme.POP); + parameters.set(REQ_CNF, cnfString); + } +} +/** + * add SSH JWK and key ID to query params + */ +function addSshJwk(parameters, sshJwkString) { + if (sshJwkString) { + parameters.set(TOKEN_TYPE, AuthenticationScheme.SSH); + parameters.set(REQ_CNF, sshJwkString); + } +} +/** + * add server telemetry fields + * @param serverTelemetryManager + */ +function addServerTelemetry(parameters, serverTelemetryManager) { + parameters.set(X_CLIENT_CURR_TELEM, serverTelemetryManager.generateCurrentRequestHeaderValue()); + parameters.set(X_CLIENT_LAST_TELEM, serverTelemetryManager.generateLastRequestHeaderValue()); +} +/** + * Adds parameter that indicates to the server that throttling is supported + */ +function addThrottling(parameters) { + parameters.set(X_MS_LIB_CAPABILITY, X_MS_LIB_CAPABILITY_VALUE); +} +/** + * Adds logout_hint parameter for "silent" logout which prevent server account picker + */ +function addLogoutHint(parameters, logoutHint) { + parameters.set(LOGOUT_HINT, logoutHint); +} +function addBrokerParameters(parameters, brokerClientId, brokerRedirectUri) { + if (!parameters.has(BROKER_CLIENT_ID)) { + parameters.set(BROKER_CLIENT_ID, brokerClientId); + } + if (!parameters.has(BROKER_REDIRECT_URI)) { + parameters.set(BROKER_REDIRECT_URI, brokerRedirectUri); + } +} +/** + * Add EAR (Encrypted Authorize Response) request parameters + * @param parameters + * @param jwk + */ +function addEARParameters(parameters, jwk) { + parameters.set(EAR_JWK, encodeURIComponent(jwk)); + // ear_jwe_crypto will always have value: {"alg":"dir","enc":"A256GCM"} so we can hardcode this + const jweCryptoB64Encoded = "eyJhbGciOiJkaXIiLCJlbmMiOiJBMjU2R0NNIn0"; + parameters.set(EAR_JWE_CRYPTO, jweCryptoB64Encoded); +} +function addResource(parameters, resource) { + if (resource) { + parameters.set(RESOURCE, resource); + } +} + + +//# sourceMappingURL=RequestParameterBuilder.mjs.map + +;// CONCATENATED MODULE: ./node_modules/@azure/msal-common/dist/utils/UrlUtils.mjs +/*! @azure/msal-common v16.3.0 2026-03-13 */ + + + + + +/* + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. + */ +/** + * Canonicalizes a URL by making it lowercase and ensuring it ends with / + * Inlined version of UrlString.canonicalizeUri to avoid circular dependency + * @param url - URL to canonicalize + * @returns Canonicalized URL + */ +function canonicalizeUrl(url) { + if (!url) { + return url; + } + let lowerCaseUrl = url.toLowerCase(); + if (StringUtils.endsWith(lowerCaseUrl, "?")) { + lowerCaseUrl = lowerCaseUrl.slice(0, -1); + } + else if (StringUtils.endsWith(lowerCaseUrl, "?/")) { + lowerCaseUrl = lowerCaseUrl.slice(0, -2); + } + if (!StringUtils.endsWith(lowerCaseUrl, "/")) { + lowerCaseUrl += "/"; + } + return lowerCaseUrl; +} +/** + * Parses hash string from given string. Returns empty string if no hash symbol is found. + * @param hashString + */ +function stripLeadingHashOrQuery(responseString) { + if (responseString.startsWith("#/")) { + return responseString.substring(2); + } + else if (responseString.startsWith("#") || + responseString.startsWith("?")) { + return responseString.substring(1); + } + return responseString; +} +/** + * Returns URL hash as server auth code response object. + */ +function getDeserializedResponse(responseString) { + // Check if given hash is empty + if (!responseString || responseString.indexOf("=") < 0) { + return null; + } + try { + // Strip the # or ? symbol if present + const normalizedResponse = stripLeadingHashOrQuery(responseString); + // If # symbol was not present, above will return empty string, so give original hash value + const deserializedHash = Object.fromEntries(new URLSearchParams(normalizedResponse)); + // Check for known response properties + if (deserializedHash.code || + deserializedHash.ear_jwe || + deserializedHash.error || + deserializedHash.error_description || + deserializedHash.state) { + return deserializedHash; + } + } + catch (e) { + throw ClientAuthError_createClientAuthError(hashNotDeserialized); + } + return null; +} +/** + * Utility to create a URL from the params map + */ +function mapToQueryString(parameters) { + const queryParameterArray = new Array(); + parameters.forEach((value, key) => { + queryParameterArray.push(`${key}=${encodeURIComponent(value)}`); + }); + return queryParameterArray.join("&"); +} +/** + * Normalizes URLs for comparison by removing hash, canonicalizing, + * and ensuring consistent URL encoding in query parameters. + * This fixes redirect loops when URLs contain encoded characters like apostrophes (%27). + * @param url - URL to normalize + * @returns Normalized URL string for comparison + */ +function normalizeUrlForComparison(url) { + if (!url) { + return url; + } + // Remove hash first + const urlWithoutHash = url.split("#")[0]; + try { + // Parse the URL to handle encoding consistently + const urlObj = new URL(urlWithoutHash); + /* + * Reconstruct the URL with properly decoded query parameters + * This ensures that %27 and ' are treated as equivalent + */ + const normalizedUrl = urlObj.origin + urlObj.pathname + urlObj.search; + // Apply canonicalization logic inline to avoid circular dependency + return canonicalizeUrl(normalizedUrl); + } + catch (e) { + // Fallback to original logic if URL parsing fails + return canonicalizeUrl(urlWithoutHash); + } +} + + +//# sourceMappingURL=UrlUtils.mjs.map + +;// CONCATENATED MODULE: ./node_modules/@azure/msal-common/dist/crypto/ICrypto.mjs +/*! @azure/msal-common v16.3.0 2026-03-13 */ + + + + +/* + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. + */ +const ICrypto_DEFAULT_CRYPTO_IMPLEMENTATION = { + createNewGuid: () => { + throw ClientAuthError_createClientAuthError(methodNotImplemented); + }, + base64Decode: () => { + throw ClientAuthError_createClientAuthError(methodNotImplemented); + }, + base64Encode: () => { + throw ClientAuthError_createClientAuthError(methodNotImplemented); + }, + base64UrlEncode: () => { + throw ClientAuthError_createClientAuthError(methodNotImplemented); + }, + encodeKid: () => { + throw ClientAuthError_createClientAuthError(methodNotImplemented); + }, + async getPublicKeyThumbprint() { + throw ClientAuthError_createClientAuthError(methodNotImplemented); + }, + async removeTokenBindingKey() { + throw ClientAuthError_createClientAuthError(methodNotImplemented); + }, + async clearKeystore() { + throw ClientAuthError_createClientAuthError(methodNotImplemented); + }, + async signJwt() { + throw ClientAuthError_createClientAuthError(methodNotImplemented); + }, + async hashString() { + throw ClientAuthError_createClientAuthError(methodNotImplemented); + }, +}; + + +//# sourceMappingURL=ICrypto.mjs.map + +;// CONCATENATED MODULE: ./node_modules/@azure/msal-common/dist/packageMetadata.mjs +/*! @azure/msal-common v16.3.0 2026-03-13 */ + +/* eslint-disable header/header */ +const packageMetadata_name = "@azure/msal-common"; +const packageMetadata_version = "16.3.0"; + + +//# sourceMappingURL=packageMetadata.mjs.map + +;// CONCATENATED MODULE: ./node_modules/@azure/msal-common/dist/account/AccountInfo.mjs +/*! @azure/msal-common v16.3.0 2026-03-13 */ + +/* + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. + */ +/** + * Returns true if tenantId matches the utid portion of homeAccountId + * @param tenantId + * @param homeAccountId + * @returns + */ +function tenantIdMatchesHomeTenant(tenantId, homeAccountId) { + return (!!tenantId && + !!homeAccountId && + tenantId === homeAccountId.split(".")[1]); +} +/** + * Build tenant profile + * @param homeAccountId - Home account identifier for this account object + * @param localAccountId - Local account identifer for this account object + * @param tenantId - Full tenant or organizational id that this account belongs to + * @param idTokenClaims - Claims from the ID token + * @returns + */ +function AccountInfo_buildTenantProfile(homeAccountId, localAccountId, tenantId, idTokenClaims) { + if (idTokenClaims) { + const { oid, sub, tid, name, tfp, acr, preferred_username, upn, login_hint, } = idTokenClaims; + /** + * Since there is no way to determine if the authority is AAD or B2C, we exhaust all the possible claims that can serve as tenant ID with the following precedence: + * tid - TenantID claim that identifies the tenant that issued the token in AAD. Expected in all AAD ID tokens, not present in B2C ID Tokens. + * tfp - Trust Framework Policy claim that identifies the policy that was used to authenticate the user. Functions as tenant for B2C scenarios. + * acr - Authentication Context Class Reference claim used only with older B2C policies. Fallback in case tfp is not present, but likely won't be present anyway. + */ + const tenantId = tid || tfp || acr || ""; + return { + tenantId: tenantId, + localAccountId: oid || sub || "", + name: name, + username: preferred_username || upn || "", + loginHint: login_hint, + isHomeTenant: tenantIdMatchesHomeTenant(tenantId, homeAccountId), + }; + } + else { + return { + tenantId, + localAccountId, + username: "", + isHomeTenant: tenantIdMatchesHomeTenant(tenantId, homeAccountId), + }; + } +} +/** + * Replaces account info that varies by tenant profile sourced from the ID token claims passed in with the tenant-specific account info + * @param baseAccountInfo + * @param idTokenClaims + * @returns + */ +function updateAccountTenantProfileData(baseAccountInfo, tenantProfile, idTokenClaims, idTokenSecret) { + let updatedAccountInfo = baseAccountInfo; + // Tenant Profile overrides passed in account info + if (tenantProfile) { + // eslint-disable-next-line @typescript-eslint/no-unused-vars + const { isHomeTenant, ...tenantProfileOverride } = tenantProfile; + updatedAccountInfo = { ...baseAccountInfo, ...tenantProfileOverride }; + } + // ID token claims override passed in account info and tenant profile + if (idTokenClaims) { + // Ignore isHomeTenant, loginHint, and sid which are part of tenant profile but not base account info + // eslint-disable-next-line @typescript-eslint/no-unused-vars + const { isHomeTenant, ...claimsSourcedTenantProfile } = AccountInfo_buildTenantProfile(baseAccountInfo.homeAccountId, baseAccountInfo.localAccountId, baseAccountInfo.tenantId, idTokenClaims); + updatedAccountInfo = { + ...updatedAccountInfo, + ...claimsSourcedTenantProfile, + idTokenClaims: idTokenClaims, + idToken: idTokenSecret, + }; + return updatedAccountInfo; + } + return updatedAccountInfo; +} + + +//# sourceMappingURL=AccountInfo.mjs.map + +;// CONCATENATED MODULE: ./node_modules/@azure/msal-common/dist/error/CacheErrorCodes.mjs +/*! @azure/msal-common v16.3.0 2026-03-13 */ + +/* + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. + */ +const cacheQuotaExceeded = "cache_quota_exceeded"; +const cacheErrorUnknown = "cache_error_unknown"; + + +//# sourceMappingURL=CacheErrorCodes.mjs.map + +;// CONCATENATED MODULE: ./node_modules/@azure/msal-common/dist/error/CacheError.mjs +/*! @azure/msal-common v16.3.0 2026-03-13 */ + + + + + + +/* + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. + */ +/** + * Error thrown when there is an error with the cache + */ +class CacheError extends Error { + constructor(errorCode, errorMessage) { + const message = errorMessage || getDefaultErrorMessage(errorCode); + super(message); + Object.setPrototypeOf(this, CacheError.prototype); + this.name = "CacheError"; + this.errorCode = errorCode; + this.errorMessage = message; + } +} +/** + * Helper function to wrap browser errors in a CacheError object + * @param e + * @returns + */ +function createCacheError(e) { + if (!(e instanceof Error)) { + return new CacheError(cacheErrorUnknown); + } + if (e.name === "QuotaExceededError" || + e.name === "NS_ERROR_DOM_QUOTA_REACHED" || + e.message.includes("exceeded the quota")) { + return new CacheError(cacheQuotaExceeded); + } + else { + return new CacheError(e.name, e.message); + } +} + + +//# sourceMappingURL=CacheError.mjs.map + +;// CONCATENATED MODULE: ./node_modules/@azure/msal-common/dist/account/ClientInfo.mjs +/*! @azure/msal-common v16.3.0 2026-03-13 */ + + + + + +/* + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. + */ +/** + * Function to build a client info object from server clientInfo string + * @param rawClientInfo + * @param crypto + */ +function buildClientInfo(rawClientInfo, base64Decode) { + if (!rawClientInfo) { + throw ClientAuthError_createClientAuthError(clientInfoEmptyError); + } + try { + const decodedClientInfo = base64Decode(rawClientInfo); + return JSON.parse(decodedClientInfo); + } + catch (e) { + throw ClientAuthError_createClientAuthError(clientInfoDecodingError); + } +} +/** + * Function to build a client info object from cached homeAccountId string + * @param homeAccountId + */ +function buildClientInfoFromHomeAccountId(homeAccountId) { + if (!homeAccountId) { + throw ClientAuthError_createClientAuthError(clientInfoDecodingError); + } + const clientInfoParts = homeAccountId.split(CLIENT_INFO_SEPARATOR, 2); + return { + uid: clientInfoParts[0], + utid: clientInfoParts.length < 2 ? "" : clientInfoParts[1], + }; +} + + +//# sourceMappingURL=ClientInfo.mjs.map + +;// CONCATENATED MODULE: ./node_modules/@azure/msal-common/dist/account/TokenClaims.mjs +/*! @azure/msal-common v16.3.0 2026-03-13 */ + +/* + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. + */ +/** + * Gets tenantId from available ID token claims to set as credential realm with the following precedence: + * 1. tid - if the token is acquired from an Azure AD tenant tid will be present + * 2. tfp - if the token is acquired from a modern B2C tenant tfp should be present + * 3. acr - if the token is acquired from a legacy B2C tenant acr should be present + * Downcased to match the realm case-insensitive comparison requirements + * @param idTokenClaims + * @returns + */ +function getTenantIdFromIdTokenClaims(idTokenClaims) { + if (idTokenClaims) { + const tenantId = idTokenClaims.tid || idTokenClaims.tfp || idTokenClaims.acr; + return tenantId || null; + } + return null; +} + + +//# sourceMappingURL=TokenClaims.mjs.map + +;// CONCATENATED MODULE: ./node_modules/@azure/msal-common/dist/cache/utils/AccountEntityUtils.mjs +/*! @azure/msal-common v16.3.0 2026-03-13 */ + + + + + + + + + + +/* + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. + */ +/** + * Generate Account Id key component as per the schema: - + */ +function generateAccountId(accountEntity) { + const accountId = [ + accountEntity.homeAccountId, + accountEntity.environment, + ]; + return accountId.join(CACHE_KEY_SEPARATOR).toLowerCase(); +} +/** + * Returns the AccountInfo interface for this account. + */ +function getAccountInfo(accountEntity) { + const tenantProfiles = accountEntity.tenantProfiles || []; + // Ensure at least the home tenant profile exists + if (tenantProfiles.length === 0 && + accountEntity.realm && + accountEntity.localAccountId) { + tenantProfiles.push(AccountInfo_buildTenantProfile(accountEntity.homeAccountId, accountEntity.localAccountId, accountEntity.realm)); + } + return { + homeAccountId: accountEntity.homeAccountId, + environment: accountEntity.environment, + tenantId: accountEntity.realm, + username: accountEntity.username, + localAccountId: accountEntity.localAccountId, + loginHint: accountEntity.loginHint, + name: accountEntity.name, + nativeAccountId: accountEntity.nativeAccountId, + authorityType: accountEntity.authorityType, + // Deserialize tenant profiles array into a Map + tenantProfiles: new Map(tenantProfiles.map((tenantProfile) => { + return [tenantProfile.tenantId, tenantProfile]; + })), + dataBoundary: accountEntity.dataBoundary, + }; +} +/** + * Returns true if the account entity is in single tenant format (outdated), false otherwise + */ +function isSingleTenant(accountEntity) { + return !accountEntity.tenantProfiles; +} +/** + * Build Account cache from IdToken, clientInfo and authority/policy. Associated with AAD. + * @param accountDetails + */ +function createAccountEntity(accountDetails, authority, base64Decode) { + let authorityType; + if (authority.authorityType === AuthorityType.Adfs) { + authorityType = CACHE_ACCOUNT_TYPE_ADFS; + } + else if (authority.protocolMode === ProtocolMode_ProtocolMode.OIDC) { + authorityType = Constants_CACHE_ACCOUNT_TYPE_GENERIC; + } + else { + authorityType = CACHE_ACCOUNT_TYPE_MSSTS; + } + let clientInfo; + let dataBoundary; + if (accountDetails.clientInfo && base64Decode) { + clientInfo = buildClientInfo(accountDetails.clientInfo, base64Decode); + if (clientInfo.xms_tdbr) { + dataBoundary = clientInfo.xms_tdbr === "EU" ? "EU" : "None"; + } + } + const env = accountDetails.environment || + (authority && authority.getPreferredCache()); + if (!env) { + throw ClientAuthError_createClientAuthError(invalidCacheEnvironment); + } + /* + * In B2C scenarios the emails claim is used instead of preferred_username and it is an array. + * In most cases it will contain a single email. This field should not be relied upon if a custom + * policy is configured to return more than 1 email. + */ + const preferredUsername = accountDetails.idTokenClaims?.preferred_username || + accountDetails.idTokenClaims?.upn; + const email = accountDetails.idTokenClaims?.emails + ? accountDetails.idTokenClaims.emails[0] + : null; + const username = preferredUsername || email || ""; + const loginHint = accountDetails.idTokenClaims?.login_hint; + const realm = clientInfo?.utid || + getTenantIdFromIdTokenClaims(accountDetails.idTokenClaims) || + ""; // non-AAD scenarios can have empty realm + // How do you account for MSA CID here? + const localAccountId = clientInfo?.uid || + accountDetails.idTokenClaims?.oid || + accountDetails.idTokenClaims?.sub || + ""; + let tenantProfiles; + if (accountDetails.tenantProfiles) { + tenantProfiles = accountDetails.tenantProfiles; + } + else { + const tenantProfile = AccountInfo_buildTenantProfile(accountDetails.homeAccountId, localAccountId, realm, accountDetails.idTokenClaims); + tenantProfiles = [tenantProfile]; + } + return { + homeAccountId: accountDetails.homeAccountId, + environment: env, + realm: realm, + localAccountId: localAccountId, + username: username, + authorityType: authorityType, + loginHint: loginHint, + clientInfo: accountDetails.clientInfo, + name: accountDetails.idTokenClaims?.name || "", + lastModificationTime: undefined, + lastModificationApp: undefined, + cloudGraphHostName: accountDetails.cloudGraphHostName, + msGraphHost: accountDetails.msGraphHost, + nativeAccountId: accountDetails.nativeAccountId, + tenantProfiles: tenantProfiles, + dataBoundary, + }; +} +/** + * Creates an AccountEntity object from AccountInfo + * @param accountInfo + * @param cloudGraphHostName + * @param msGraphHost + * @returns + */ +function createAccountEntityFromAccountInfo(accountInfo, cloudGraphHostName, msGraphHost) { + // Serialize tenant profiles map into an array + const tenantProfiles = Array.from(accountInfo.tenantProfiles?.values() || []); + // Ensure at least the home tenant profile exists + if (tenantProfiles.length === 0 && + accountInfo.tenantId && + accountInfo.localAccountId) { + tenantProfiles.push(buildTenantProfile(accountInfo.homeAccountId, accountInfo.localAccountId, accountInfo.tenantId, accountInfo.idTokenClaims)); + } + return { + authorityType: accountInfo.authorityType || CACHE_ACCOUNT_TYPE_GENERIC, + homeAccountId: accountInfo.homeAccountId, + localAccountId: accountInfo.localAccountId, + nativeAccountId: accountInfo.nativeAccountId, + realm: accountInfo.tenantId, + environment: accountInfo.environment, + username: accountInfo.username, + loginHint: accountInfo.loginHint, + name: accountInfo.name, + cloudGraphHostName: cloudGraphHostName, + msGraphHost: msGraphHost, + tenantProfiles: tenantProfiles, + dataBoundary: accountInfo.dataBoundary, + }; +} +/** + * Generate HomeAccountId from server response + * @param serverClientInfo + * @param authType + */ +function generateHomeAccountId(serverClientInfo, authType, logger, cryptoObj, correlationId, idTokenClaims) { + // since ADFS/DSTS do not have tid and does not set client_info + if (!(authType === AuthorityType.Adfs || authType === AuthorityType.Dsts)) { + // for cases where there is clientInfo + if (serverClientInfo) { + try { + const clientInfo = buildClientInfo(serverClientInfo, cryptoObj.base64Decode); + if (clientInfo.uid && clientInfo.utid) { + return `${clientInfo.uid}.${clientInfo.utid}`; + } + } + catch (e) { } + } + logger.warning("No client info in response", correlationId); + } + // default to "sub" claim + return idTokenClaims?.sub || ""; +} +/** + * Validates an entity: checks for all expected params + * @param entity + */ +function isAccountEntity(entity) { + if (!entity) { + return false; + } + return (entity.hasOwnProperty("homeAccountId") && + entity.hasOwnProperty("environment") && + entity.hasOwnProperty("realm") && + entity.hasOwnProperty("localAccountId") && + entity.hasOwnProperty("username") && + entity.hasOwnProperty("authorityType")); +} + + +//# sourceMappingURL=AccountEntityUtils.mjs.map + +;// CONCATENATED MODULE: ./node_modules/@azure/msal-common/dist/cache/CacheManager.mjs +/*! @azure/msal-common v16.3.0 2026-03-13 */ + + + + + + + + + + + + + +/* + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. + */ +/** + * Interface class which implement cache storage functions used by MSAL to perform validity checks, and store tokens. + * @internal + */ +class CacheManager { + constructor(clientId, cryptoImpl, logger, performanceClient, staticAuthorityOptions) { + this.clientId = clientId; + this.cryptoImpl = cryptoImpl; + this.commonLogger = logger.clone(packageMetadata_name, packageMetadata_version); + this.staticAuthorityOptions = staticAuthorityOptions; + this.performanceClient = performanceClient; + } + /** + * Returns all the accounts in the cache that match the optional filter. If no filter is provided, all accounts are returned. + * @param accountFilter - (Optional) filter to narrow down the accounts returned + * @returns Array of AccountInfo objects in cache + */ + getAllAccounts(accountFilter = {}, correlationId) { + return this.buildTenantProfiles(this.getAccountsFilteredBy(accountFilter, correlationId), correlationId, accountFilter); + } + /** + * Gets first tenanted AccountInfo object found based on provided filters + */ + getAccountInfoFilteredBy(accountFilter, correlationId) { + const allAccounts = this.getAllAccounts(accountFilter, correlationId); + if (allAccounts.length > 1) { + // If one or more accounts are found, prioritize accounts that have an ID token + const sortedAccounts = allAccounts.sort((account) => { + return account.idTokenClaims ? -1 : 1; + }); + return sortedAccounts[0]; + } + else if (allAccounts.length === 1) { + // If only one account is found, return it regardless of whether a matching ID token was found + return allAccounts[0]; + } + else { + return null; + } + } + /** + * Returns a single matching + * @param accountFilter + * @returns + */ + getBaseAccountInfo(accountFilter, correlationId) { + const accountEntities = this.getAccountsFilteredBy(accountFilter, correlationId); + if (accountEntities.length > 0) { + return getAccountInfo(accountEntities[0]); + } + else { + return null; + } + } + /** + * Matches filtered account entities with cached ID tokens that match the tenant profile-specific account filters + * and builds the account info objects from the matching ID token's claims + * @param cachedAccounts + * @param accountFilter + * @returns Array of AccountInfo objects that match account and tenant profile filters + */ + buildTenantProfiles(cachedAccounts, correlationId, accountFilter) { + return cachedAccounts.flatMap((accountEntity) => { + return this.getTenantProfilesFromAccountEntity(accountEntity, correlationId, accountFilter?.tenantId, accountFilter); + }); + } + getTenantedAccountInfoByFilter(accountInfo, tokenKeys, tenantProfile, correlationId, tenantProfileFilter) { + let tenantedAccountInfo = null; + let idTokenClaims; + if (tenantProfileFilter) { + if (!this.tenantProfileMatchesFilter(tenantProfile, tenantProfileFilter)) { + return null; + } + } + const idToken = this.getIdToken(accountInfo, correlationId, tokenKeys, tenantProfile.tenantId); + if (idToken) { + idTokenClaims = extractTokenClaims(idToken.secret, this.cryptoImpl.base64Decode); + if (!this.idTokenClaimsMatchTenantProfileFilter(idTokenClaims, tenantProfileFilter)) { + // ID token sourced claims don't match so this tenant profile is not a match + return null; + } + } + // Expand tenant profile into account info based on matching tenant profile and if available matching ID token claims + tenantedAccountInfo = updateAccountTenantProfileData(accountInfo, tenantProfile, idTokenClaims, idToken?.secret); + return tenantedAccountInfo; + } + getTenantProfilesFromAccountEntity(accountEntity, correlationId, targetTenantId, tenantProfileFilter) { + const accountInfo = getAccountInfo(accountEntity); + let searchTenantProfiles = accountInfo.tenantProfiles || new Map(); + const tokenKeys = this.getTokenKeys(); + // If a tenant ID was provided, only return the tenant profile for that tenant ID if it exists + if (targetTenantId) { + const tenantProfile = searchTenantProfiles.get(targetTenantId); + if (tenantProfile) { + // Reduce search field to just this tenant profile + searchTenantProfiles = new Map([ + [targetTenantId, tenantProfile], + ]); + } + else { + // No tenant profile for search tenant ID, return empty array + return []; + } + } + const matchingTenantProfiles = []; + searchTenantProfiles.forEach((tenantProfile) => { + const tenantedAccountInfo = this.getTenantedAccountInfoByFilter(accountInfo, tokenKeys, tenantProfile, correlationId, tenantProfileFilter); + if (tenantedAccountInfo) { + matchingTenantProfiles.push(tenantedAccountInfo); + } + }); + return matchingTenantProfiles; + } + tenantProfileMatchesFilter(tenantProfile, tenantProfileFilter) { + if (!!tenantProfileFilter.localAccountId && + !this.matchLocalAccountIdFromTenantProfile(tenantProfile, tenantProfileFilter.localAccountId)) { + return false; + } + if (!!tenantProfileFilter.name && + !(tenantProfile.name === tenantProfileFilter.name)) { + return false; + } + if (tenantProfileFilter.isHomeTenant !== undefined && + !(tenantProfile.isHomeTenant === tenantProfileFilter.isHomeTenant)) { + return false; + } + return true; + } + idTokenClaimsMatchTenantProfileFilter(idTokenClaims, tenantProfileFilter) { + // Tenant Profile filtering + if (tenantProfileFilter) { + if (!!tenantProfileFilter.localAccountId && + !this.matchLocalAccountIdFromTokenClaims(idTokenClaims, tenantProfileFilter.localAccountId)) { + return false; + } + if (!!tenantProfileFilter.loginHint && + !this.matchLoginHintFromTokenClaims(idTokenClaims, tenantProfileFilter.loginHint)) { + return false; + } + if (!!tenantProfileFilter.username && + !this.matchUsername(idTokenClaims.preferred_username, tenantProfileFilter.username)) { + return false; + } + if (!!tenantProfileFilter.name && + !this.matchName(idTokenClaims, tenantProfileFilter.name)) { + return false; + } + if (!!tenantProfileFilter.sid && + !this.matchSid(idTokenClaims, tenantProfileFilter.sid)) { + return false; + } + } + return true; + } + /** + * saves a cache record + * @param cacheRecord {CacheRecord} + * @param storeInCache {?StoreInCache} + * @param correlationId {?string} correlation id + */ + async saveCacheRecord(cacheRecord, correlationId, kmsi, apiId, storeInCache) { + if (!cacheRecord) { + throw ClientAuthError_createClientAuthError(invalidCacheRecord); + } + try { + if (!!cacheRecord.account) { + await this.setAccount(cacheRecord.account, correlationId, kmsi, apiId); + } + if (!!cacheRecord.idToken && storeInCache?.idToken !== false) { + await this.setIdTokenCredential(cacheRecord.idToken, correlationId, kmsi); + } + if (!!cacheRecord.accessToken && + storeInCache?.accessToken !== false) { + await this.saveAccessToken(cacheRecord.accessToken, correlationId, kmsi); + } + if (!!cacheRecord.refreshToken && + storeInCache?.refreshToken !== false) { + await this.setRefreshTokenCredential(cacheRecord.refreshToken, correlationId, kmsi); + } + if (!!cacheRecord.appMetadata) { + this.setAppMetadata(cacheRecord.appMetadata, correlationId); + } + } + catch (e) { + this.commonLogger?.error(`CacheManager.saveCacheRecord: failed`, correlationId); + if (e instanceof AuthError) { + throw e; + } + else { + throw createCacheError(e); + } + } + } + /** + * saves access token credential + * @param credential + */ + async saveAccessToken(credential, correlationId, kmsi) { + const accessTokenFilter = { + clientId: credential.clientId, + credentialType: credential.credentialType, + environment: credential.environment, + homeAccountId: credential.homeAccountId, + realm: credential.realm, + tokenType: credential.tokenType, + }; + const tokenKeys = this.getTokenKeys(); + const currentScopes = ScopeSet.fromString(credential.target); + tokenKeys.accessToken.forEach((key) => { + if (!this.accessTokenKeyMatchesFilter(key, accessTokenFilter, false)) { + return; + } + const tokenEntity = this.getAccessTokenCredential(key, correlationId); + if (tokenEntity && + this.credentialMatchesFilter(tokenEntity, accessTokenFilter, correlationId)) { + const tokenScopeSet = ScopeSet.fromString(tokenEntity.target); + if (tokenScopeSet.intersectingScopeSets(currentScopes)) { + this.removeAccessToken(key, correlationId); + } + } + }); + await this.setAccessTokenCredential(credential, correlationId, kmsi); + } + /** + * Retrieve account entities matching all provided tenant-agnostic filters; if no filter is set, get all account entities in the cache + * Not checking for casing as keys are all generated in lower case, remember to convert to lower case if object properties are compared + * @param accountFilter - An object containing Account properties to filter by + */ + getAccountsFilteredBy(accountFilter, correlationId) { + const allAccountKeys = this.getAccountKeys(); + const matchingAccounts = []; + allAccountKeys.forEach((cacheKey) => { + const entity = this.getAccount(cacheKey, correlationId); + // Match base account fields + if (!entity) { + return; + } + if (!!accountFilter.homeAccountId && + !this.matchHomeAccountId(entity, accountFilter.homeAccountId)) { + return; + } + if (!!accountFilter.username && + !this.matchUsername(entity.username, accountFilter.username)) { + return; + } + if (!!accountFilter.environment && + !this.matchEnvironment(entity, accountFilter.environment, correlationId)) { + return; + } + if (!!accountFilter.realm && + !this.matchRealm(entity, accountFilter.realm)) { + return; + } + if (!!accountFilter.nativeAccountId && + !this.matchNativeAccountId(entity, accountFilter.nativeAccountId)) { + return; + } + if (!!accountFilter.authorityType && + !this.matchAuthorityType(entity, accountFilter.authorityType)) { + return; + } + // If at least one tenant profile matches the tenant profile filter, add the account to the list of matching accounts + const tenantProfileFilter = { + localAccountId: accountFilter?.localAccountId, + name: accountFilter?.name, + }; + const matchingTenantProfiles = entity.tenantProfiles?.filter((tenantProfile) => { + return this.tenantProfileMatchesFilter(tenantProfile, tenantProfileFilter); + }); + if (matchingTenantProfiles && matchingTenantProfiles.length === 0) { + // No tenant profile for this account matches filter, don't add to list of matching accounts + return; + } + matchingAccounts.push(entity); + }); + return matchingAccounts; + } + /** + * Returns whether or not the given credential entity matches the filter + * @param entity + * @param filter + * @param correlationId + * @returns + */ + credentialMatchesFilter(entity, filter, correlationId) { + if (!!filter.clientId && !this.matchClientId(entity, filter.clientId)) { + return false; + } + if (!!filter.userAssertionHash && + !this.matchUserAssertionHash(entity, filter.userAssertionHash)) { + return false; + } + /* + * homeAccountId can be undefined, and we want to filter out cached items that have a homeAccountId of "" + * because we don't want a client_credential request to return a cached token that has a homeAccountId + */ + if (typeof filter.homeAccountId === "string" && + !this.matchHomeAccountId(entity, filter.homeAccountId)) { + return false; + } + if (!!filter.environment && + !this.matchEnvironment(entity, filter.environment, correlationId)) { + return false; + } + if (!!filter.realm && !this.matchRealm(entity, filter.realm)) { + return false; + } + if (!!filter.credentialType && + !this.matchCredentialType(entity, filter.credentialType)) { + return false; + } + if (!!filter.familyId && !this.matchFamilyId(entity, filter.familyId)) { + return false; + } + /* + * idTokens do not have "target", target specific refreshTokens do exist for some types of authentication + * Resource specific refresh tokens case will be added when the support is deemed necessary + */ + if (!!filter.target && !this.matchTarget(entity, filter.target)) { + return false; + } + // Access Token with Auth Scheme specific matching + if (entity.credentialType === + CredentialType.ACCESS_TOKEN_WITH_AUTH_SCHEME) { + if (!!filter.tokenType && + !this.matchTokenType(entity, filter.tokenType)) { + return false; + } + // KeyId (sshKid) in request must match cached SSH certificate keyId because SSH cert is bound to a specific key + if (filter.tokenType === AuthenticationScheme.SSH) { + if (filter.keyId && !this.matchKeyId(entity, filter.keyId)) { + return false; + } + } + } + return true; + } + /** + * retrieve appMetadata matching all provided filters; if no filter is set, get all appMetadata + * @param filter + * @param correlationId + */ + getAppMetadataFilteredBy(filter, correlationId) { + const allCacheKeys = this.getKeys(); + const matchingAppMetadata = {}; + allCacheKeys.forEach((cacheKey) => { + // don't parse any non-appMetadata type cache entities + if (!this.isAppMetadata(cacheKey)) { + return; + } + // Attempt retrieval + const entity = this.getAppMetadata(cacheKey, correlationId); + if (!entity) { + return; + } + if (!!filter.environment && + !this.matchEnvironment(entity, filter.environment, correlationId)) { + return; + } + if (!!filter.clientId && + !this.matchClientId(entity, filter.clientId)) { + return; + } + matchingAppMetadata[cacheKey] = entity; + }); + return matchingAppMetadata; + } + /** + * retrieve authorityMetadata that contains a matching alias + * @param host + * @param correlationId + */ + getAuthorityMetadataByAlias(host, correlationId) { + const allCacheKeys = this.getAuthorityMetadataKeys(); + let matchedEntity = null; + allCacheKeys.forEach((cacheKey) => { + // don't parse any non-authorityMetadata type cache entities + if (!this.isAuthorityMetadata(cacheKey) || + cacheKey.indexOf(this.clientId) === -1) { + return; + } + // Attempt retrieval + const entity = this.getAuthorityMetadata(cacheKey, correlationId); + if (!entity) { + return; + } + if (entity.aliases.indexOf(host) === -1) { + return; + } + matchedEntity = entity; + }); + return matchedEntity; + } + /** + * Removes all accounts and related tokens from cache. + */ + removeAllAccounts(correlationId) { + const accounts = this.getAllAccounts({}, correlationId); + accounts.forEach((account) => { + this.removeAccount(account, correlationId); + }); + } + /** + * Removes the account and related tokens for a given account key + * @param account + */ + removeAccount(account, correlationId) { + this.removeAccountContext(account, correlationId); + const accountKeys = this.getAccountKeys(); + const keyFilter = (key) => { + return (key.includes(account.homeAccountId) && + key.includes(account.environment)); + }; + accountKeys.filter(keyFilter).forEach((key) => { + this.removeItem(key, correlationId); + this.performanceClient.incrementFields({ accountsRemoved: 1 }, correlationId); + }); + } + /** + * Removes credentials associated with the provided account + * @param account + */ + removeAccountContext(account, correlationId) { + const allTokenKeys = this.getTokenKeys(); + const keyFilter = (key) => { + return (key.includes(account.homeAccountId) && + key.includes(account.environment)); + }; + allTokenKeys.idToken.filter(keyFilter).forEach((key) => { + this.removeIdToken(key, correlationId); + }); + allTokenKeys.accessToken.filter(keyFilter).forEach((key) => { + this.removeAccessToken(key, correlationId); + }); + allTokenKeys.refreshToken.filter(keyFilter).forEach((key) => { + this.removeRefreshToken(key, correlationId); + }); + } + /** + * returns a boolean if the given credential is removed + * @param key + * @param correlationId + */ + removeAccessToken(key, correlationId) { + const credential = this.getAccessTokenCredential(key, correlationId); + if (!credential) { + return; + } + this.removeItem(key, correlationId); + this.performanceClient.incrementFields({ accessTokensRemoved: 1 }, correlationId); + // Remove Token Binding Key from key store for PoP Tokens Credentials + if (credential.credentialType.toLowerCase() === + CredentialType.ACCESS_TOKEN_WITH_AUTH_SCHEME.toLowerCase()) { + if (credential.tokenType === AuthenticationScheme.POP) { + const accessTokenWithAuthSchemeEntity = credential; + const kid = accessTokenWithAuthSchemeEntity.keyId; + if (kid) { + void this.cryptoImpl + .removeTokenBindingKey(kid, correlationId) + .catch(() => { + this.commonLogger.error(`Failed to remove token binding key '${kid}'`, correlationId); + this.performanceClient?.incrementFields({ removeTokenBindingKeyFailure: 1 }, correlationId); + }); + } + } + } + } + /** + * Removes all app metadata objects from cache. + */ + removeAppMetadata(correlationId) { + const allCacheKeys = this.getKeys(); + allCacheKeys.forEach((cacheKey) => { + if (this.isAppMetadata(cacheKey)) { + this.removeItem(cacheKey, correlationId); + } + }); + return true; + } + /** + * Retrieve IdTokenEntity from cache + * @param account {AccountInfo} + * @param tokenKeys {?TokenKeys} + * @param targetRealm {?string} + * @param performanceClient {?IPerformanceClient} + * @param correlationId {?string} + */ + getIdToken(account, correlationId, tokenKeys, targetRealm) { + this.commonLogger.trace("CacheManager - getIdToken called", correlationId); + const idTokenFilter = { + homeAccountId: account.homeAccountId, + environment: account.environment, + credentialType: CredentialType.ID_TOKEN, + clientId: this.clientId, + realm: targetRealm, + }; + const idTokenMap = this.getIdTokensByFilter(idTokenFilter, correlationId, tokenKeys); + const numIdTokens = idTokenMap.size; + if (numIdTokens < 1) { + this.commonLogger.info("CacheManager:getIdToken - No token found", correlationId); + return null; + } + else if (numIdTokens > 1) { + let tokensToBeRemoved = idTokenMap; + // Multiple tenant profiles and no tenant specified, pick home account + if (!targetRealm) { + const homeIdTokenMap = new Map(); + idTokenMap.forEach((idToken, key) => { + if (idToken.realm === account.tenantId) { + homeIdTokenMap.set(key, idToken); + } + }); + const numHomeIdTokens = homeIdTokenMap.size; + if (numHomeIdTokens < 1) { + this.commonLogger.info("CacheManager:getIdToken - Multiple ID tokens found for account but none match account entity tenant id, returning first result", correlationId); + return idTokenMap.values().next().value; + } + else if (numHomeIdTokens === 1) { + this.commonLogger.info("CacheManager:getIdToken - Multiple ID tokens found for account, defaulting to home tenant profile", correlationId); + return homeIdTokenMap.values().next().value; + } + else { + // Multiple ID tokens for home tenant profile, remove all and return null + tokensToBeRemoved = homeIdTokenMap; + } + } + // Multiple tokens for a single tenant profile, remove all and return null + this.commonLogger.info("CacheManager:getIdToken - Multiple matching ID tokens found, clearing them", correlationId); + tokensToBeRemoved.forEach((idToken, key) => { + this.removeIdToken(key, correlationId); + }); + this.performanceClient.addFields({ multiMatchedID: idTokenMap.size }, correlationId); + return null; + } + this.commonLogger.info("CacheManager:getIdToken - Returning ID token", correlationId); + return idTokenMap.values().next().value; + } + /** + * Gets all idTokens matching the given filter + * @param filter + * @returns + */ + getIdTokensByFilter(filter, correlationId, tokenKeys) { + const idTokenKeys = (tokenKeys && tokenKeys.idToken) || this.getTokenKeys().idToken; + const idTokens = new Map(); + idTokenKeys.forEach((key) => { + if (!this.idTokenKeyMatchesFilter(key, { + clientId: this.clientId, + ...filter, + })) { + return; + } + const idToken = this.getIdTokenCredential(key, correlationId); + if (idToken && + this.credentialMatchesFilter(idToken, filter, correlationId)) { + idTokens.set(key, idToken); + } + }); + return idTokens; + } + /** + * Validate the cache key against filter before retrieving and parsing cache value + * @param key + * @param filter + * @returns + */ + idTokenKeyMatchesFilter(inputKey, filter) { + const key = inputKey.toLowerCase(); + if (filter.clientId && + key.indexOf(filter.clientId.toLowerCase()) === -1) { + return false; + } + if (filter.homeAccountId && + key.indexOf(filter.homeAccountId.toLowerCase()) === -1) { + return false; + } + return true; + } + /** + * Removes idToken from the cache + * @param key + */ + removeIdToken(key, correlationId) { + this.removeItem(key, correlationId); + } + /** + * Removes refresh token from the cache + * @param key + */ + removeRefreshToken(key, correlationId) { + this.removeItem(key, correlationId); + } + /** + * Retrieve AccessTokenEntity from cache + * @param account {AccountInfo} + * @param request {BaseAuthRequest} + * @param tokenKeys {?TokenKeys} + * @param performanceClient {?IPerformanceClient} + */ + getAccessToken(account, request, tokenKeys, targetRealm) { + const correlationId = request.correlationId; + this.commonLogger.trace("CacheManager - getAccessToken called", correlationId); + const scopes = ScopeSet.createSearchScopes(request.scopes); + const authScheme = request.authenticationScheme || + AuthenticationScheme.BEARER; + /* + * Distinguish between Bearer and PoP/SSH token cache types + * Cast to lowercase to handle "bearer" from ADFS + */ + const credentialType = authScheme && + authScheme.toLowerCase() !== + AuthenticationScheme.BEARER.toLowerCase() + ? CredentialType.ACCESS_TOKEN_WITH_AUTH_SCHEME + : CredentialType.ACCESS_TOKEN; + const accessTokenFilter = { + homeAccountId: account.homeAccountId, + environment: account.environment, + credentialType: credentialType, + clientId: this.clientId, + realm: targetRealm || account.tenantId, + target: scopes, + tokenType: authScheme, + keyId: request.sshKid, + }; + const accessTokenKeys = (tokenKeys && tokenKeys.accessToken) || + this.getTokenKeys().accessToken; + const accessTokens = []; + accessTokenKeys.forEach((key) => { + // Validate key + if (this.accessTokenKeyMatchesFilter(key, accessTokenFilter, true)) { + const accessToken = this.getAccessTokenCredential(key, correlationId); + // Validate value + if (accessToken && + this.credentialMatchesFilter(accessToken, accessTokenFilter, correlationId)) { + accessTokens.push(accessToken); + } + } + }); + const numAccessTokens = accessTokens.length; + if (numAccessTokens < 1) { + this.commonLogger.info("CacheManager:getAccessToken - No token found", correlationId); + return null; + } + else if (numAccessTokens > 1) { + this.commonLogger.info("CacheManager:getAccessToken - Multiple access tokens found, clearing them", correlationId); + accessTokens.forEach((accessToken) => { + this.removeAccessToken(this.generateCredentialKey(accessToken), correlationId); + }); + this.performanceClient.addFields({ multiMatchedAT: accessTokens.length }, correlationId); + return null; + } + this.commonLogger.info("CacheManager:getAccessToken - Returning access token", correlationId); + return accessTokens[0]; + } + /** + * Validate the cache key against filter before retrieving and parsing cache value + * @param key + * @param filter + * @param keyMustContainAllScopes + * @returns + */ + accessTokenKeyMatchesFilter(inputKey, filter, keyMustContainAllScopes) { + const key = inputKey.toLowerCase(); + if (filter.clientId && + key.indexOf(filter.clientId.toLowerCase()) === -1) { + return false; + } + if (filter.homeAccountId && + key.indexOf(filter.homeAccountId.toLowerCase()) === -1) { + return false; + } + if (filter.realm && key.indexOf(filter.realm.toLowerCase()) === -1) { + return false; + } + if (filter.target) { + const scopes = filter.target.asArray(); + for (let i = 0; i < scopes.length; i++) { + if (keyMustContainAllScopes && + !key.includes(scopes[i].toLowerCase())) { + // When performing a cache lookup a missing scope would be a cache miss + return false; + } + else if (!keyMustContainAllScopes && + key.includes(scopes[i].toLowerCase())) { + // When performing a cache write, any token with a subset of requested scopes should be replaced + return true; + } + } + } + return true; + } + /** + * Gets all access tokens matching the filter + * @param filter + * @returns + */ + getAccessTokensByFilter(filter, correlationId) { + const tokenKeys = this.getTokenKeys(); + const accessTokens = []; + tokenKeys.accessToken.forEach((key) => { + if (!this.accessTokenKeyMatchesFilter(key, filter, true)) { + return; + } + const accessToken = this.getAccessTokenCredential(key, correlationId); + if (accessToken && + this.credentialMatchesFilter(accessToken, filter, correlationId)) { + accessTokens.push(accessToken); + } + }); + return accessTokens; + } + /** + * Helper to retrieve the appropriate refresh token from cache + * @param account {AccountInfo} + * @param familyRT {boolean} + * @param tokenKeys {?TokenKeys} + * @param performanceClient {?IPerformanceClient} + * @param correlationId {?string} + */ + getRefreshToken(account, familyRT, correlationId, tokenKeys) { + this.commonLogger.trace("CacheManager - getRefreshToken called", correlationId); + const id = familyRT ? THE_FAMILY_ID : undefined; + const refreshTokenFilter = { + homeAccountId: account.homeAccountId, + environment: account.environment, + credentialType: CredentialType.REFRESH_TOKEN, + clientId: this.clientId, + familyId: id, + }; + const refreshTokenKeys = (tokenKeys && tokenKeys.refreshToken) || + this.getTokenKeys().refreshToken; + const refreshTokens = []; + refreshTokenKeys.forEach((key) => { + // Validate key + if (this.refreshTokenKeyMatchesFilter(key, refreshTokenFilter)) { + const refreshToken = this.getRefreshTokenCredential(key, correlationId); + // Validate value + if (refreshToken && + this.credentialMatchesFilter(refreshToken, refreshTokenFilter, correlationId)) { + refreshTokens.push(refreshToken); + } + } + }); + const numRefreshTokens = refreshTokens.length; + if (numRefreshTokens < 1) { + this.commonLogger.info("CacheManager:getRefreshToken - No refresh token found.", correlationId); + return null; + } + // address the else case after remove functions address environment aliases + if (numRefreshTokens > 1) { + this.performanceClient.addFields({ multiMatchedRT: numRefreshTokens }, correlationId); + } + this.commonLogger.info("CacheManager:getRefreshToken - returning refresh token", correlationId); + return refreshTokens[0]; + } + /** + * Validate the cache key against filter before retrieving and parsing cache value + * @param key + * @param filter + */ + refreshTokenKeyMatchesFilter(inputKey, filter) { + const key = inputKey.toLowerCase(); + if (filter.familyId && + key.indexOf(filter.familyId.toLowerCase()) === -1) { + return false; + } + // If familyId is used, clientId is not in the key + if (!filter.familyId && + filter.clientId && + key.indexOf(filter.clientId.toLowerCase()) === -1) { + return false; + } + if (filter.homeAccountId && + key.indexOf(filter.homeAccountId.toLowerCase()) === -1) { + return false; + } + return true; + } + /** + * Retrieve AppMetadataEntity from cache + */ + readAppMetadataFromCache(environment, correlationId) { + const appMetadataFilter = { + environment, + clientId: this.clientId, + }; + const appMetadata = this.getAppMetadataFilteredBy(appMetadataFilter, correlationId); + const appMetadataEntries = Object.keys(appMetadata).map((key) => appMetadata[key]); + const numAppMetadata = appMetadataEntries.length; + if (numAppMetadata < 1) { + return null; + } + else if (numAppMetadata > 1) { + throw ClientAuthError_createClientAuthError(multipleMatchingAppMetadata); + } + return appMetadataEntries[0]; + } + /** + * Return the family_id value associated with FOCI + * @param environment + * @param clientId + */ + isAppMetadataFOCI(environment, correlationId) { + const appMetadata = this.readAppMetadataFromCache(environment, correlationId); + return !!(appMetadata && appMetadata.familyId === THE_FAMILY_ID); + } + /** + * helper to match account ids + * @param value + * @param homeAccountId + */ + matchHomeAccountId(entity, homeAccountId) { + return !!(typeof entity.homeAccountId === "string" && + homeAccountId === entity.homeAccountId); + } + /** + * helper to match account ids + * @param entity + * @param localAccountId + * @returns + */ + matchLocalAccountIdFromTokenClaims(tokenClaims, localAccountId) { + const idTokenLocalAccountId = tokenClaims.oid || tokenClaims.sub; + return localAccountId === idTokenLocalAccountId; + } + matchLocalAccountIdFromTenantProfile(tenantProfile, localAccountId) { + return tenantProfile.localAccountId === localAccountId; + } + /** + * helper to match names + * @param entity + * @param name + * @returns true if the downcased name properties are present and match in the filter and the entity + */ + matchName(claims, name) { + return !!(name.toLowerCase() === claims.name?.toLowerCase()); + } + /** + * helper to match usernames + * @param entity + * @param username + * @returns + */ + matchUsername(cachedUsername, filterUsername) { + return !!(cachedUsername && + typeof cachedUsername === "string" && + filterUsername?.toLowerCase() === cachedUsername.toLowerCase()); + } + /** + * helper to match assertion + * @param value + * @param oboAssertion + */ + matchUserAssertionHash(entity, userAssertionHash) { + return !!(entity.userAssertionHash && + userAssertionHash === entity.userAssertionHash); + } + /** + * helper to match environment + * @param value + * @param environment + */ + matchEnvironment(entity, environment, correlationId) { + // Check static authority options first for cases where authority metadata has not been resolved and cached yet + if (this.staticAuthorityOptions) { + const staticAliases = getAliasesFromStaticSources(this.staticAuthorityOptions, this.commonLogger, correlationId); + if (staticAliases.includes(environment) && + staticAliases.includes(entity.environment)) { + return true; + } + } + // Query metadata cache if no static authority configuration has aliases that match enviroment + const cloudMetadata = this.getAuthorityMetadataByAlias(environment, correlationId); + if (cloudMetadata && + cloudMetadata.aliases.indexOf(entity.environment) > -1) { + return true; + } + return false; + } + /** + * helper to match credential type + * @param entity + * @param credentialType + */ + matchCredentialType(entity, credentialType) { + return (entity.credentialType && + credentialType.toLowerCase() === entity.credentialType.toLowerCase()); + } + /** + * helper to match client ids + * @param entity + * @param clientId + */ + matchClientId(entity, clientId) { + return !!(entity.clientId && clientId === entity.clientId); + } + /** + * helper to match family ids + * @param entity + * @param familyId + */ + matchFamilyId(entity, familyId) { + return !!(entity.familyId && familyId === entity.familyId); + } + /** + * helper to match realm + * @param entity + * @param realm + */ + matchRealm(entity, realm) { + return !!(entity.realm?.toLowerCase() === realm.toLowerCase()); + } + /** + * helper to match nativeAccountId + * @param entity + * @param nativeAccountId + * @returns boolean indicating the match result + */ + matchNativeAccountId(entity, nativeAccountId) { + return !!(entity.nativeAccountId && nativeAccountId === entity.nativeAccountId); + } + /** + * helper to match loginHint which can be either: + * 1. login_hint ID token claim + * 2. username in cached account object + * 3. upn in ID token claims + * @param entity + * @param loginHint + * @returns + */ + matchLoginHintFromTokenClaims(tokenClaims, loginHint) { + if (tokenClaims.login_hint === loginHint) { + return true; + } + if (tokenClaims.preferred_username === loginHint) { + return true; + } + if (tokenClaims.upn === loginHint) { + return true; + } + return false; + } + /** + * Helper to match sid + * @param entity + * @param sid + * @returns true if the sid claim is present and matches the filter + */ + matchSid(idTokenClaims, sid) { + return idTokenClaims.sid === sid; + } + matchAuthorityType(entity, authorityType) { + return !!(entity.authorityType && + authorityType.toLowerCase() === entity.authorityType.toLowerCase()); + } + /** + * Returns true if the target scopes are a subset of the current entity's scopes, false otherwise. + * @param entity + * @param target + */ + matchTarget(entity, target) { + const isNotAccessTokenCredential = entity.credentialType !== CredentialType.ACCESS_TOKEN && + entity.credentialType !== + CredentialType.ACCESS_TOKEN_WITH_AUTH_SCHEME; + if (isNotAccessTokenCredential || !entity.target) { + return false; + } + const entityScopeSet = ScopeSet.fromString(entity.target); + return entityScopeSet.containsScopeSet(target); + } + /** + * Returns true if the credential's tokenType or Authentication Scheme matches the one in the request, false otherwise + * @param entity + * @param tokenType + */ + matchTokenType(entity, tokenType) { + return !!(entity.tokenType && entity.tokenType === tokenType); + } + /** + * Returns true if the credential's keyId matches the one in the request, false otherwise + * @param entity + * @param keyId + */ + matchKeyId(entity, keyId) { + return !!(entity.keyId && entity.keyId === keyId); + } + /** + * returns if a given cache entity is of the type appmetadata + * @param key + */ + isAppMetadata(key) { + return key.indexOf(APP_METADATA) !== -1; + } + /** + * returns if a given cache entity is of the type authoritymetadata + * @param key + */ + isAuthorityMetadata(key) { + return key.indexOf(AUTHORITY_METADATA_CACHE_KEY) !== -1; + } + /** + * returns cache key used for cloud instance metadata + */ + generateAuthorityMetadataCacheKey(authority) { + return `${AUTHORITY_METADATA_CACHE_KEY}-${this.clientId}-${authority}`; + } + /** + * Helper to convert serialized data to object + * @param obj + * @param json + */ + static toObject(obj, json) { + for (const propertyName in json) { + obj[propertyName] = json[propertyName]; + } + return obj; + } +} +/** @internal */ +class DefaultStorageClass extends CacheManager { + async setAccount() { + throw ClientAuthError_createClientAuthError(methodNotImplemented); + } + getAccount() { + throw ClientAuthError_createClientAuthError(methodNotImplemented); + } + async setIdTokenCredential() { + throw ClientAuthError_createClientAuthError(methodNotImplemented); + } + getIdTokenCredential() { + throw ClientAuthError_createClientAuthError(methodNotImplemented); + } + async setAccessTokenCredential() { + throw ClientAuthError_createClientAuthError(methodNotImplemented); + } + getAccessTokenCredential() { + throw ClientAuthError_createClientAuthError(methodNotImplemented); + } + async setRefreshTokenCredential() { + throw ClientAuthError_createClientAuthError(methodNotImplemented); + } + getRefreshTokenCredential() { + throw ClientAuthError_createClientAuthError(methodNotImplemented); + } + setAppMetadata() { + throw ClientAuthError_createClientAuthError(methodNotImplemented); + } + getAppMetadata() { + throw ClientAuthError_createClientAuthError(methodNotImplemented); + } + setServerTelemetry() { + throw ClientAuthError_createClientAuthError(methodNotImplemented); + } + getServerTelemetry() { + throw ClientAuthError_createClientAuthError(methodNotImplemented); + } + setAuthorityMetadata() { + throw ClientAuthError_createClientAuthError(methodNotImplemented); + } + getAuthorityMetadata() { + throw ClientAuthError_createClientAuthError(methodNotImplemented); + } + getAuthorityMetadataKeys() { + throw ClientAuthError_createClientAuthError(methodNotImplemented); + } + setThrottlingCache() { + throw ClientAuthError_createClientAuthError(methodNotImplemented); + } + getThrottlingCache() { + throw ClientAuthError_createClientAuthError(methodNotImplemented); + } + removeItem() { + throw ClientAuthError_createClientAuthError(methodNotImplemented); + } + getKeys() { + throw ClientAuthError_createClientAuthError(methodNotImplemented); + } + getAccountKeys() { + throw ClientAuthError_createClientAuthError(methodNotImplemented); + } + getTokenKeys() { + throw ClientAuthError_createClientAuthError(methodNotImplemented); + } + generateCredentialKey() { + throw ClientAuthError_createClientAuthError(methodNotImplemented); + } + generateAccountKey() { + throw ClientAuthError_createClientAuthError(methodNotImplemented); + } +} + + +//# sourceMappingURL=CacheManager.mjs.map + +;// CONCATENATED MODULE: ./node_modules/@azure/msal-common/dist/telemetry/performance/PerformanceEvent.mjs +/*! @azure/msal-common v16.3.0 2026-03-13 */ + +/* + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. + */ +/** + * State of the performance event. + * + * @export + * @enum {number} + */ +const PerformanceEventStatus = { + NotStarted: 0, + InProgress: 1, + Completed: 2, +}; +/** + * Prefix used to mark telemetry field names as dynamic. + * Fields with this prefix in addFields/incrementFields calls will be routed + * to the PerformanceEvent.ext sub-object. + */ +const EXT_FIELD_PREFIX = "ext."; +const IntFields = new Set([ + "accessTokenSize", + "durationMs", + "idTokenSize", + "matsSilentStatus", + "matsHttpStatus", + "refreshTokenSize", + "startTimeMs", + "status", + "multiMatchedAT", + "multiMatchedID", + "multiMatchedRT", + "unencryptedCacheCount", + "encryptedCacheExpiredCount", + "oldAccountCount", + "oldAccessCount", + "oldIdCount", + "oldRefreshCount", + "currAccountCount", + "currAccessCount", + "currIdCount", + "currRefreshCount", + "expiredCacheRemovedCount", + "upgradedCacheCount", + "networkRtt", + "redirectBridgeTimeoutMs", + "redirectBridgeMessageVersion", +]); + + +//# sourceMappingURL=PerformanceEvent.mjs.map + +;// CONCATENATED MODULE: ./node_modules/@azure/msal-common/dist/telemetry/performance/StubPerformanceClient.mjs +/*! @azure/msal-common v16.3.0 2026-03-13 */ + + + +/* + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. + */ +class StubPerformanceClient_StubPerformanceClient { + generateId() { + return "callback-id"; + } + startMeasurement(measureName, correlationId) { + return { + end: () => null, + discard: () => { }, + add: () => { }, + increment: () => { }, + event: { + eventId: this.generateId(), + status: PerformanceEventStatus.InProgress, + authority: "", + libraryName: "", + libraryVersion: "", + clientId: "", + name: measureName, + startTimeMs: Date.now(), + correlationId: correlationId || "", + }, + }; + } + endMeasurement() { + return null; + } + discardMeasurements() { + return; + } + removePerformanceCallback() { + return true; + } + addPerformanceCallback() { + return ""; + } + emitEvents() { + return; + } + addFields() { + return; + } + incrementFields() { + return; + } + cacheEventByCorrelationId() { + return; + } +} + + +//# sourceMappingURL=StubPerformanceClient.mjs.map + +;// CONCATENATED MODULE: ./node_modules/@azure/msal-common/dist/config/ClientConfiguration.mjs +/*! @azure/msal-common v16.3.0 2026-03-13 */ + + + -/* - * Copyright (c) Microsoft Corporation. All rights reserved. - * Licensed under the MIT License. - */ -function instrumentBrokerParams(parameters, correlationId, performanceClient) { - if (!correlationId) { - return; - } - const clientId = parameters.get(CLIENT_ID); - if (clientId && parameters.has(BROKER_CLIENT_ID)) { - performanceClient?.addFields({ - embeddedClientId: clientId, - embeddedRedirectUri: parameters.get(REDIRECT_URI), - }, correlationId); - } -} -/** - * Add the given response_type - * @param parameters - * @param responseType - */ -function addResponseType(parameters, responseType) { - parameters.set(RESPONSE_TYPE, responseType); -} -/** - * add response_mode. defaults to query. - * @param responseMode - */ -function addResponseMode(parameters, responseMode) { - parameters.set(RESPONSE_MODE, responseMode ? responseMode : ResponseMode.QUERY); -} -/** - * Add flag to indicate STS should attempt to use WAM if available - */ -function addNativeBroker(parameters) { - parameters.set(NATIVE_BROKER, "1"); -} -/** - * add scopes. set addOidcScopes to false to prevent default scopes in non-user scenarios - * @param scopeSet - * @param addOidcScopes - */ -function addScopes(parameters, scopes, addOidcScopes = true, defaultScopes = OIDC_DEFAULT_SCOPES) { - // Always add openid to the scopes when adding OIDC scopes - if (addOidcScopes && - !defaultScopes.includes("openid") && - !scopes.includes("openid")) { - defaultScopes.push("openid"); - } - const requestScopes = addOidcScopes - ? [...(scopes || []), ...defaultScopes] - : scopes || []; - const scopeSet = new ScopeSet(requestScopes); - parameters.set(SCOPE, scopeSet.printScopes()); -} -/** - * add clientId - * @param clientId - */ -function addClientId(parameters, clientId) { - parameters.set(CLIENT_ID, clientId); -} -/** - * add redirect_uri - * @param redirectUri - */ -function addRedirectUri(parameters, redirectUri) { - parameters.set(REDIRECT_URI, redirectUri); -} -/** - * add post logout redirectUri - * @param redirectUri - */ -function addPostLogoutRedirectUri(parameters, redirectUri) { - parameters.set(POST_LOGOUT_URI, redirectUri); -} -/** - * add id_token_hint to logout request - * @param idTokenHint - */ -function addIdTokenHint(parameters, idTokenHint) { - parameters.set(ID_TOKEN_HINT, idTokenHint); -} -/** - * add domain_hint - * @param domainHint - */ -function addDomainHint(parameters, domainHint) { - parameters.set(DOMAIN_HINT, domainHint); -} -/** - * add login_hint - * @param loginHint - */ -function addLoginHint(parameters, loginHint) { - parameters.set(LOGIN_HINT, loginHint); -} -/** - * Adds the CCS (Cache Credential Service) query parameter for login_hint - * @param loginHint - */ -function addCcsUpn(parameters, loginHint) { - parameters.set(HeaderNames.CCS_HEADER, `UPN:${loginHint}`); -} -/** - * Adds the CCS (Cache Credential Service) query parameter for account object - * @param loginHint - */ -function addCcsOid(parameters, clientInfo) { - parameters.set(HeaderNames.CCS_HEADER, `Oid:${clientInfo.uid}@${clientInfo.utid}`); -} -/** - * add sid - * @param sid - */ -function addSid(parameters, sid) { - parameters.set(SID, sid); -} -/** - * add claims - * @param claims - */ -function addClaims(parameters, claims, clientCapabilities) { - const mergedClaims = addClientCapabilitiesToClaims(claims, clientCapabilities); - try { - JSON.parse(mergedClaims); - } - catch (e) { - throw ClientConfigurationError_createClientConfigurationError(invalidClaims); - } - parameters.set(CLAIMS, mergedClaims); -} -/** - * add correlationId - * @param correlationId - */ -function addCorrelationId(parameters, correlationId) { - parameters.set(CLIENT_REQUEST_ID, correlationId); -} -/** - * add library info query params - * @param libraryInfo - */ -function addLibraryInfo(parameters, libraryInfo) { - // Telemetry Info - parameters.set(X_CLIENT_SKU, libraryInfo.sku); - parameters.set(X_CLIENT_VER, libraryInfo.version); - if (libraryInfo.os) { - parameters.set(X_CLIENT_OS, libraryInfo.os); - } - if (libraryInfo.cpu) { - parameters.set(X_CLIENT_CPU, libraryInfo.cpu); - } -} -/** - * Add client telemetry parameters - * @param appTelemetry - */ -function addApplicationTelemetry(parameters, appTelemetry) { - if (appTelemetry?.appName) { - parameters.set(X_APP_NAME, appTelemetry.appName); - } - if (appTelemetry?.appVersion) { - parameters.set(X_APP_VER, appTelemetry.appVersion); - } -} -/** - * add prompt - * @param prompt - */ -function addPrompt(parameters, prompt) { - parameters.set(PROMPT, prompt); -} -/** - * add state - * @param state - */ -function addState(parameters, state) { - if (state) { - parameters.set(STATE, state); - } -} -/** - * add nonce - * @param nonce - */ -function addNonce(parameters, nonce) { - parameters.set(NONCE, nonce); -} -/** - * add code_challenge and code_challenge_method - * - throw if either of them are not passed - * @param codeChallenge - * @param codeChallengeMethod - */ -function addCodeChallengeParams(parameters, codeChallenge, codeChallengeMethod) { - if (codeChallenge && codeChallengeMethod) { - parameters.set(CODE_CHALLENGE, codeChallenge); - parameters.set(CODE_CHALLENGE_METHOD, codeChallengeMethod); - } - else { - throw ClientConfigurationError_createClientConfigurationError(pkceParamsMissing); - } -} -/** - * add the `authorization_code` passed by the user to exchange for a token - * @param code - */ -function addAuthorizationCode(parameters, code) { - parameters.set(CODE, code); -} -/** - * add the `authorization_code` passed by the user to exchange for a token - * @param code - */ -function addDeviceCode(parameters, code) { - parameters.set(DEVICE_CODE, code); -} -/** - * add the `refreshToken` passed by the user - * @param refreshToken - */ -function addRefreshToken(parameters, refreshToken) { - parameters.set(REFRESH_TOKEN, refreshToken); -} -/** - * add the `code_verifier` passed by the user to exchange for a token - * @param codeVerifier - */ -function addCodeVerifier(parameters, codeVerifier) { - parameters.set(CODE_VERIFIER, codeVerifier); -} -/** - * add client_secret - * @param clientSecret - */ -function addClientSecret(parameters, clientSecret) { - parameters.set(CLIENT_SECRET, clientSecret); -} -/** - * add clientAssertion for confidential client flows - * @param clientAssertion - */ -function addClientAssertion(parameters, clientAssertion) { - if (clientAssertion) { - parameters.set(CLIENT_ASSERTION, clientAssertion); - } -} -/** - * add clientAssertionType for confidential client flows - * @param clientAssertionType - */ -function addClientAssertionType(parameters, clientAssertionType) { - if (clientAssertionType) { - parameters.set(CLIENT_ASSERTION_TYPE, clientAssertionType); - } -} -/** - * add OBO assertion for confidential client flows - * @param clientAssertion - */ -function addOboAssertion(parameters, oboAssertion) { - parameters.set(OBO_ASSERTION, oboAssertion); -} -/** - * add grant type - * @param grantType - */ -function addRequestTokenUse(parameters, tokenUse) { - parameters.set(REQUESTED_TOKEN_USE, tokenUse); -} -/** - * add grant type - * @param grantType - */ -function addGrantType(parameters, grantType) { - parameters.set(GRANT_TYPE, grantType); -} -/** - * add client info - * - */ -function addClientInfo(parameters) { - parameters.set(CLIENT_INFO, "1"); -} -function addInstanceAware(parameters) { - if (!parameters.has(INSTANCE_AWARE)) { - parameters.set(INSTANCE_AWARE, "true"); - } -} -/** - * Add extraParameters - * @param extraParams - String dictionary containing extra parameters to be added. - */ -function addExtraParameters(parameters, extraParams) { - Object.entries(extraParams).forEach(([key, value]) => { - if (!parameters.has(key) && value) { - parameters.set(key, value); - } - }); -} -function addClientCapabilitiesToClaims(claims, clientCapabilities) { - let mergedClaims; - // Parse provided claims into JSON object or initialize empty object - if (!claims) { - mergedClaims = {}; - } - else { - try { - mergedClaims = JSON.parse(claims); - } - catch (e) { - throw ClientConfigurationError_createClientConfigurationError(invalidClaims); - } - } - if (clientCapabilities && clientCapabilities.length > 0) { - if (!mergedClaims.hasOwnProperty(ClaimsRequestKeys.ACCESS_TOKEN)) { - // Add access_token key to claims object - mergedClaims[ClaimsRequestKeys.ACCESS_TOKEN] = {}; - } - // Add xms_cc claim with provided clientCapabilities to access_token key - mergedClaims[ClaimsRequestKeys.ACCESS_TOKEN][ClaimsRequestKeys.XMS_CC] = { - values: clientCapabilities, - }; - } - return JSON.stringify(mergedClaims); -} -/** - * adds `username` for Password Grant flow - * @param username - */ -function addUsername(parameters, username) { - parameters.set(PasswordGrantConstants.username, username); -} -/** - * adds `password` for Password Grant flow - * @param password - */ -function addPassword(parameters, password) { - parameters.set(PasswordGrantConstants.password, password); -} -/** - * add pop_jwk to query params - * @param cnfString - */ -function addPopToken(parameters, cnfString) { - if (cnfString) { - parameters.set(TOKEN_TYPE, AuthenticationScheme.POP); - parameters.set(REQ_CNF, cnfString); - } -} -/** - * add SSH JWK and key ID to query params - */ -function addSshJwk(parameters, sshJwkString) { - if (sshJwkString) { - parameters.set(TOKEN_TYPE, AuthenticationScheme.SSH); - parameters.set(REQ_CNF, sshJwkString); - } -} -/** - * add server telemetry fields - * @param serverTelemetryManager - */ -function addServerTelemetry(parameters, serverTelemetryManager) { - parameters.set(X_CLIENT_CURR_TELEM, serverTelemetryManager.generateCurrentRequestHeaderValue()); - parameters.set(X_CLIENT_LAST_TELEM, serverTelemetryManager.generateLastRequestHeaderValue()); -} -/** - * Adds parameter that indicates to the server that throttling is supported - */ -function addThrottling(parameters) { - parameters.set(X_MS_LIB_CAPABILITY, X_MS_LIB_CAPABILITY_VALUE); -} -/** - * Adds logout_hint parameter for "silent" logout which prevent server account picker - */ -function addLogoutHint(parameters, logoutHint) { - parameters.set(LOGOUT_HINT, logoutHint); -} -function addBrokerParameters(parameters, brokerClientId, brokerRedirectUri) { - if (!parameters.has(BROKER_CLIENT_ID)) { - parameters.set(BROKER_CLIENT_ID, brokerClientId); - } - if (!parameters.has(BROKER_REDIRECT_URI)) { - parameters.set(BROKER_REDIRECT_URI, brokerRedirectUri); - } -} -/** - * Add EAR (Encrypted Authorize Response) request parameters - * @param parameters - * @param jwk - */ -function addEARParameters(parameters, jwk) { - parameters.set(EAR_JWK, encodeURIComponent(jwk)); - // ear_jwe_crypto will always have value: {"alg":"dir","enc":"A256GCM"} so we can hardcode this - const jweCryptoB64Encoded = "eyJhbGciOiJkaXIiLCJlbmMiOiJBMjU2R0NNIn0"; - parameters.set(EAR_JWE_CRYPTO, jweCryptoB64Encoded); -} -function addResource(parameters, resource) { - if (resource) { - parameters.set(RESOURCE, resource); - } + + + + + + + +/* + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. + */ +const DEFAULT_SYSTEM_OPTIONS = { + tokenRenewalOffsetSeconds: DEFAULT_TOKEN_RENEWAL_OFFSET_SEC, + preventCorsPreflight: false, +}; +const DEFAULT_LOGGER_IMPLEMENTATION = { + loggerCallback: () => { + // allow users to not set loggerCallback + }, + piiLoggingEnabled: false, + logLevel: LogLevel.Info, + correlationId: "", +}; +const DEFAULT_NETWORK_IMPLEMENTATION = { + async sendGetRequestAsync() { + throw ClientAuthError_createClientAuthError(methodNotImplemented); + }, + async sendPostRequestAsync() { + throw ClientAuthError_createClientAuthError(methodNotImplemented); + }, +}; +const DEFAULT_LIBRARY_INFO = { + sku: SKU, + version: packageMetadata_version, + cpu: "", + os: "", +}; +const DEFAULT_CLIENT_CREDENTIALS = { + clientSecret: "", + clientAssertion: undefined, +}; +const DEFAULT_AZURE_CLOUD_OPTIONS = { + azureCloudInstance: AzureCloudInstance.None, + tenant: `${DEFAULT_COMMON_TENANT}`, +}; +const DEFAULT_TELEMETRY_OPTIONS = { + application: { + appName: "", + appVersion: "", + }, +}; +/** + * Function that sets the default options when not explicitly configured from app developer + * + * @param Configuration + * + * @returns Configuration + */ +function buildClientConfiguration({ authOptions: userAuthOptions, systemOptions: userSystemOptions, loggerOptions: userLoggerOption, storageInterface: storageImplementation, networkInterface: networkImplementation, cryptoInterface: cryptoImplementation, clientCredentials: clientCredentials, libraryInfo: libraryInfo, telemetry: telemetry, serverTelemetryManager: serverTelemetryManager, persistencePlugin: persistencePlugin, serializableCache: serializableCache, }) { + const loggerOptions = { + ...DEFAULT_LOGGER_IMPLEMENTATION, + ...userLoggerOption, + }; + return { + authOptions: buildAuthOptions(userAuthOptions), + systemOptions: { ...DEFAULT_SYSTEM_OPTIONS, ...userSystemOptions }, + loggerOptions: loggerOptions, + storageInterface: storageImplementation || + new DefaultStorageClass(userAuthOptions.clientId, ICrypto_DEFAULT_CRYPTO_IMPLEMENTATION, new Logger_Logger(loggerOptions), new StubPerformanceClient_StubPerformanceClient()), + networkInterface: networkImplementation || DEFAULT_NETWORK_IMPLEMENTATION, + cryptoInterface: cryptoImplementation || ICrypto_DEFAULT_CRYPTO_IMPLEMENTATION, + clientCredentials: clientCredentials || DEFAULT_CLIENT_CREDENTIALS, + libraryInfo: { ...DEFAULT_LIBRARY_INFO, ...libraryInfo }, + telemetry: { ...DEFAULT_TELEMETRY_OPTIONS, ...telemetry }, + serverTelemetryManager: serverTelemetryManager || null, + persistencePlugin: persistencePlugin || null, + serializableCache: serializableCache || null, + }; +} +/** + * Construct authoptions from the client and platform passed values + * @param authOptions + */ +function buildAuthOptions(authOptions) { + return { + clientCapabilities: [], + azureCloudOptions: DEFAULT_AZURE_CLOUD_OPTIONS, + instanceAware: false, + isMcp: false, + ...authOptions, + }; +} +/** + * Returns true if config has protocolMode set to ProtocolMode.OIDC, false otherwise + * @param ClientConfiguration + */ +function isOidcProtocolMode(config) { + return (config.authOptions.authority.options.protocolMode === ProtocolMode_ProtocolMode.OIDC); } -//# sourceMappingURL=RequestParameterBuilder.mjs.map +//# sourceMappingURL=ClientConfiguration.mjs.map -;// CONCATENATED MODULE: ./node_modules/@azure/msal-common/dist/utils/UrlUtils.mjs +;// CONCATENATED MODULE: ./node_modules/@azure/msal-common/dist/error/InteractionRequiredAuthErrorCodes.mjs +/*! @azure/msal-common v16.3.0 2026-03-13 */ + +/* + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. + */ +/** + * MSAL-defined interaction required error code indicating no tokens are found in cache. + * @public + */ +const noTokensFound = "no_tokens_found"; +/** + * MSAL-defined error code indicating a native account is unavailable on the platform. + * @public + */ +const nativeAccountUnavailable = "native_account_unavailable"; +/** + * MSAL-defined error code indicating the refresh token has expired and user interaction is needed. + * @public + */ +const refreshTokenExpired = "refresh_token_expired"; +/** + * MSAL-defined error code indicating UI/UX is not allowed (e.g., blocked by policy), requiring alternate interaction. + * @public + */ +const uxNotAllowed = "ux_not_allowed"; +/** + * Server-originated error code indicating interaction is required to complete the request. + * @public + */ +const interactionRequired = "interaction_required"; +/** + * Server-originated error code indicating user consent is required. + * @public + */ +const consentRequired = "consent_required"; +/** + * Server-originated error code indicating user login is required. + * @public + */ +const loginRequired = "login_required"; +/** + * Server-originated error code indicating the token is invalid or corrupted. + * @public + */ +const badToken = "bad_token"; +/** + * Server-originated error code indicating the user is in an interrupted state and interaction is required. + * @public + */ +const interruptedUser = "interrupted_user"; + + +//# sourceMappingURL=InteractionRequiredAuthErrorCodes.mjs.map + +;// CONCATENATED MODULE: ./node_modules/@azure/msal-common/dist/error/InteractionRequiredAuthError.mjs +/*! @azure/msal-common v16.3.0 2026-03-13 */ + + + + + + +/* + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. + */ +/** + * InteractionRequiredServerErrorMessage contains string constants used by error codes and messages returned by the server indicating interaction is required + */ +const InteractionRequiredServerErrorMessage = [ + interactionRequired, + consentRequired, + loginRequired, + badToken, + uxNotAllowed, + interruptedUser, +]; +const InteractionRequiredAuthSubErrorMessage = [ + "message_only", + "additional_action", + "basic_action", + "user_password_expired", + "consent_required", + "bad_token", + "ux_not_allowed", + "interrupted_user", +]; +/** + * Error thrown when user interaction is required. + */ +class InteractionRequiredAuthError_InteractionRequiredAuthError extends AuthError { + constructor(errorCode, errorMessage, subError, timestamp, traceId, correlationId, claims, errorNo) { + super(errorCode, errorMessage, subError); + Object.setPrototypeOf(this, InteractionRequiredAuthError_InteractionRequiredAuthError.prototype); + this.timestamp = timestamp || ""; + this.traceId = traceId || ""; + this.correlationId = correlationId || ""; + this.claims = claims || ""; + this.name = "InteractionRequiredAuthError"; + this.errorNo = errorNo; + } +} +/** + * Helper function used to determine if an error thrown by the server requires interaction to resolve + * @param errorCode + * @param errorString + * @param subError + */ +function InteractionRequiredAuthError_isInteractionRequiredError(errorCode, errorString, subError) { + const isInteractionRequiredErrorCode = !!errorCode && + InteractionRequiredServerErrorMessage.indexOf(errorCode) > -1; + const isInteractionRequiredSubError = !!subError && + InteractionRequiredAuthSubErrorMessage.indexOf(subError) > -1; + const isInteractionRequiredErrorDesc = !!errorString && + InteractionRequiredServerErrorMessage.some((irErrorCode) => { + return errorString.indexOf(irErrorCode) > -1; + }); + return (isInteractionRequiredErrorCode || + isInteractionRequiredErrorDesc || + isInteractionRequiredSubError); +} +/** + * Creates an InteractionRequiredAuthError + */ +function createInteractionRequiredAuthError(errorCode, errorMessage) { + return new InteractionRequiredAuthError_InteractionRequiredAuthError(errorCode, errorMessage); +} + + +//# sourceMappingURL=InteractionRequiredAuthError.mjs.map + +;// CONCATENATED MODULE: ./node_modules/@azure/msal-common/dist/utils/ProtocolUtils.mjs +/*! @azure/msal-common v16.3.0 2026-03-13 */ + + + + + +/* + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. + */ +/** + * Appends user state with random guid, or returns random guid. + * @param cryptoObj + * @param userState + * @param meta + */ +function setRequestState(cryptoObj, userState, meta) { + const libraryState = generateLibraryState(cryptoObj, meta); + return userState + ? `${libraryState}${RESOURCE_DELIM}${userState}` + : libraryState; +} +/** + * Generates the state value used by the common library. + * @param cryptoObj + * @param meta + */ +function generateLibraryState(cryptoObj, meta) { + if (!cryptoObj) { + throw createClientAuthError(noCryptoObject); + } + // Create a state object containing a unique id and the timestamp of the request creation + const stateObj = { + id: cryptoObj.createNewGuid(), + }; + if (meta) { + stateObj.meta = meta; + } + const stateString = JSON.stringify(stateObj); + return cryptoObj.base64Encode(stateString); +} +/** + * Parses the state into the RequestStateObject, which contains the LibraryState info and the state passed by the user. + * @param base64Decode + * @param state + */ +function parseRequestState(base64Decode, state) { + if (!base64Decode) { + throw ClientAuthError_createClientAuthError(ClientAuthErrorCodes_noCryptoObject); + } + if (!state) { + throw ClientAuthError_createClientAuthError(ClientAuthErrorCodes_invalidState); + } + try { + // Split the state between library state and user passed state and decode them separately + const splitState = state.split(Constants_RESOURCE_DELIM); + const libraryState = splitState[0]; + const userState = splitState.length > 1 + ? splitState.slice(1).join(Constants_RESOURCE_DELIM) + : ""; + const libraryStateString = base64Decode(libraryState); + const libraryStateObj = JSON.parse(libraryStateString); + return { + userRequestState: userState || "", + libraryState: libraryStateObj, + }; + } + catch (e) { + throw ClientAuthError_createClientAuthError(ClientAuthErrorCodes_invalidState); + } +} + + +//# sourceMappingURL=ProtocolUtils.mjs.map + +;// CONCATENATED MODULE: ./node_modules/@azure/msal-common/dist/crypto/PopTokenGenerator.mjs +/*! @azure/msal-common v16.3.0 2026-03-13 */ + + + + + + +/* + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. + */ +const KeyLocation = { + SW: "sw"}; +/** @internal */ +class PopTokenGenerator { + constructor(cryptoUtils, performanceClient) { + this.cryptoUtils = cryptoUtils; + this.performanceClient = performanceClient; + } + /** + * Generates the req_cnf validated at the RP in the POP protocol for SHR parameters + * and returns an object containing the keyid, the full req_cnf string and the req_cnf string hash + * @param request + * @returns + */ + async generateCnf(request, logger) { + const reqCnf = await invokeAsync(this.generateKid.bind(this), PopTokenGenerateCnf, logger, this.performanceClient, request.correlationId)(request); + const reqCnfString = this.cryptoUtils.base64UrlEncode(JSON.stringify(reqCnf)); + return { + kid: reqCnf.kid, + reqCnfString, + }; + } + /** + * Generates key_id for a SHR token request + * @param request + * @returns + */ + async generateKid(request) { + const kidThumbprint = await this.cryptoUtils.getPublicKeyThumbprint(request); + return { + kid: kidThumbprint, + xms_ksl: KeyLocation.SW, + }; + } + /** + * Signs the POP access_token with the local generated key-pair + * @param accessToken + * @param request + * @returns + */ + async signPopToken(accessToken, keyId, request) { + return this.signPayload(accessToken, keyId, request); + } + /** + * Utility function to generate the signed JWT for an access_token + * @param payload + * @param kid + * @param request + * @param claims + * @returns + */ + async signPayload(payload, keyId, request, claims) { + // Deconstruct request to extract SHR parameters + const { resourceRequestMethod, resourceRequestUri, shrClaims, shrNonce, shrOptions, } = request; + const resourceUrlString = resourceRequestUri + ? new UrlString(resourceRequestUri) + : undefined; + const resourceUrlComponents = resourceUrlString?.getUrlComponents(); + return this.cryptoUtils.signJwt({ + at: payload, + ts: nowSeconds(), + m: resourceRequestMethod?.toUpperCase(), + u: resourceUrlComponents?.HostNameAndPort, + nonce: shrNonce || this.cryptoUtils.createNewGuid(), + p: resourceUrlComponents?.AbsolutePath, + q: resourceUrlComponents?.QueryString + ? [[], resourceUrlComponents.QueryString] + : undefined, + client_claims: shrClaims || undefined, + ...claims, + }, keyId, shrOptions, request.correlationId); + } +} + + +//# sourceMappingURL=PopTokenGenerator.mjs.map + +;// CONCATENATED MODULE: ./node_modules/@azure/msal-common/dist/cache/persistence/TokenCacheContext.mjs +/*! @azure/msal-common v16.3.0 2026-03-13 */ + +/* + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. + */ +/** + * This class instance helps track the memory changes facilitating + * decisions to read from and write to the persistent cache + */ class TokenCacheContext { + constructor(tokenCache, hasChanged) { + this.cache = tokenCache; + this.hasChanged = hasChanged; + } + /** + * boolean which indicates the changes in cache + */ + get cacheHasChanged() { + return this.hasChanged; + } + /** + * function to retrieve the token cache + */ + get tokenCache() { + return this.cache; + } +} + + +//# sourceMappingURL=TokenCacheContext.mjs.map + +;// CONCATENATED MODULE: ./node_modules/@azure/msal-common/dist/response/ResponseHandler.mjs /*! @azure/msal-common v16.3.0 2026-03-13 */ -/* - * Copyright (c) Microsoft Corporation. All rights reserved. - * Licensed under the MIT License. - */ -/** - * Canonicalizes a URL by making it lowercase and ensuring it ends with / - * Inlined version of UrlString.canonicalizeUri to avoid circular dependency - * @param url - URL to canonicalize - * @returns Canonicalized URL - */ -function canonicalizeUrl(url) { - if (!url) { - return url; - } - let lowerCaseUrl = url.toLowerCase(); - if (StringUtils.endsWith(lowerCaseUrl, "?")) { - lowerCaseUrl = lowerCaseUrl.slice(0, -1); - } - else if (StringUtils.endsWith(lowerCaseUrl, "?/")) { - lowerCaseUrl = lowerCaseUrl.slice(0, -2); - } - if (!StringUtils.endsWith(lowerCaseUrl, "/")) { - lowerCaseUrl += "/"; - } - return lowerCaseUrl; -} -/** - * Parses hash string from given string. Returns empty string if no hash symbol is found. - * @param hashString - */ -function stripLeadingHashOrQuery(responseString) { - if (responseString.startsWith("#/")) { - return responseString.substring(2); - } - else if (responseString.startsWith("#") || - responseString.startsWith("?")) { - return responseString.substring(1); - } - return responseString; -} -/** - * Returns URL hash as server auth code response object. - */ -function getDeserializedResponse(responseString) { - // Check if given hash is empty - if (!responseString || responseString.indexOf("=") < 0) { - return null; - } - try { - // Strip the # or ? symbol if present - const normalizedResponse = stripLeadingHashOrQuery(responseString); - // If # symbol was not present, above will return empty string, so give original hash value - const deserializedHash = Object.fromEntries(new URLSearchParams(normalizedResponse)); - // Check for known response properties - if (deserializedHash.code || - deserializedHash.ear_jwe || - deserializedHash.error || - deserializedHash.error_description || - deserializedHash.state) { - return deserializedHash; - } - } - catch (e) { - throw ClientAuthError_createClientAuthError(hashNotDeserialized); - } - return null; -} -/** - * Utility to create a URL from the params map - */ -function mapToQueryString(parameters) { - const queryParameterArray = new Array(); - parameters.forEach((value, key) => { - queryParameterArray.push(`${key}=${encodeURIComponent(value)}`); - }); - return queryParameterArray.join("&"); -} -/** - * Normalizes URLs for comparison by removing hash, canonicalizing, - * and ensuring consistent URL encoding in query parameters. - * This fixes redirect loops when URLs contain encoded characters like apostrophes (%27). - * @param url - URL to normalize - * @returns Normalized URL string for comparison - */ -function normalizeUrlForComparison(url) { - if (!url) { - return url; - } - // Remove hash first - const urlWithoutHash = url.split("#")[0]; - try { - // Parse the URL to handle encoding consistently - const urlObj = new URL(urlWithoutHash); - /* - * Reconstruct the URL with properly decoded query parameters - * This ensures that %27 and ' are treated as equivalent - */ - const normalizedUrl = urlObj.origin + urlObj.pathname + urlObj.search; - // Apply canonicalization logic inline to avoid circular dependency - return canonicalizeUrl(normalizedUrl); - } - catch (e) { - // Fallback to original logic if URL parsing fails - return canonicalizeUrl(urlWithoutHash); - } + + + + + + + + + + + + +/* + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. + */ +/** + * Class that handles response parsing. + * @internal + */ +class ResponseHandler { + constructor(clientId, cacheStorage, cryptoObj, logger, performanceClient, serializableCache, persistencePlugin) { + this.clientId = clientId; + this.cacheStorage = cacheStorage; + this.cryptoObj = cryptoObj; + this.logger = logger; + this.performanceClient = performanceClient; + this.serializableCache = serializableCache; + this.persistencePlugin = persistencePlugin; + } + /** + * Function which validates server authorization token response. + * @param serverResponse + * @param correlationId + * @param refreshAccessToken + */ + validateTokenResponse(serverResponse, correlationId, refreshAccessToken) { + // Check for error + if (serverResponse.error || + serverResponse.error_description || + serverResponse.suberror) { + const errString = `Error(s): ${serverResponse.error_codes || NOT_AVAILABLE} - Timestamp: ${serverResponse.timestamp || NOT_AVAILABLE} - Description: ${serverResponse.error_description || NOT_AVAILABLE} - Correlation ID: ${serverResponse.correlation_id || NOT_AVAILABLE} - Trace ID: ${serverResponse.trace_id || NOT_AVAILABLE}`; + const serverErrorNo = serverResponse.error_codes?.length + ? serverResponse.error_codes[0] + : undefined; + const serverError = new ServerError_ServerError(serverResponse.error, errString, serverResponse.suberror, serverErrorNo, serverResponse.status); + // check if 500 error + if (refreshAccessToken && + serverResponse.status && + serverResponse.status >= + HTTP_SERVER_ERROR_RANGE_START && + serverResponse.status <= HTTP_SERVER_ERROR_RANGE_END) { + this.logger.warning(`executeTokenRequest:validateTokenResponse - AAD is currently unavailable and the access token is unable to be refreshed.\n${serverError}`, correlationId); + // don't throw an exception, but alert the user via a log that the token was unable to be refreshed + return; + // check if 400 error + } + else if (refreshAccessToken && + serverResponse.status && + serverResponse.status >= + HTTP_CLIENT_ERROR_RANGE_START && + serverResponse.status <= HTTP_CLIENT_ERROR_RANGE_END) { + this.logger.warning(`executeTokenRequest:validateTokenResponse - AAD is currently available but is unable to refresh the access token.\n${serverError}`, correlationId); + // don't throw an exception, but alert the user via a log that the token was unable to be refreshed + return; + } + if (InteractionRequiredAuthError_isInteractionRequiredError(serverResponse.error, serverResponse.error_description, serverResponse.suberror)) { + throw new InteractionRequiredAuthError_InteractionRequiredAuthError(serverResponse.error, serverResponse.error_description, serverResponse.suberror, serverResponse.timestamp || "", serverResponse.trace_id || "", serverResponse.correlation_id || "", serverResponse.claims || "", serverErrorNo); + } + throw serverError; + } + } + /** + * Returns a constructed token response based on given string. Also manages the cache updates and cleanups. + * @param serverTokenResponse + * @param authority + */ + async handleServerTokenResponse(serverTokenResponse, authority, reqTimestamp, request, apiId, authCodePayload, userAssertionHash, handlingRefreshTokenResponse, forceCacheRefreshTokenResponse, serverRequestId) { + // create an idToken object (not entity) + let idTokenClaims; + if (serverTokenResponse.id_token) { + idTokenClaims = extractTokenClaims(serverTokenResponse.id_token || "", this.cryptoObj.base64Decode); + // token nonce check (TODO: Add a warning if no nonce is given?) + if (authCodePayload && authCodePayload.nonce) { + if (idTokenClaims.nonce !== authCodePayload.nonce) { + throw ClientAuthError_createClientAuthError(nonceMismatch); + } + } + // token max_age check + if (request.maxAge || request.maxAge === 0) { + const authTime = idTokenClaims.auth_time; + if (!authTime) { + throw ClientAuthError_createClientAuthError(authTimeNotFound); + } + checkMaxAge(authTime, request.maxAge); + } + } + // generate homeAccountId + this.homeAccountIdentifier = generateHomeAccountId(serverTokenResponse.client_info || "", authority.authorityType, this.logger, this.cryptoObj, request.correlationId, idTokenClaims); + // save the response tokens + let requestStateObj; + if (!!authCodePayload && !!authCodePayload.state) { + requestStateObj = parseRequestState(this.cryptoObj.base64Decode, authCodePayload.state); + } + // Add keyId from request to serverTokenResponse if defined + serverTokenResponse.key_id = + serverTokenResponse.key_id || request.sshKid || undefined; + const cacheRecord = this.generateCacheRecord(serverTokenResponse, authority, reqTimestamp, request, idTokenClaims, userAssertionHash, authCodePayload); + let cacheContext; + try { + if (this.persistencePlugin && this.serializableCache) { + this.logger.verbose("Persistence enabled, calling beforeCacheAccess", request.correlationId); + cacheContext = new TokenCacheContext(this.serializableCache, true); + await this.persistencePlugin.beforeCacheAccess(cacheContext); + } + /* + * When saving a refreshed tokens to the cache, it is expected that the account that was used is present in the cache. + * If not present, we should return null, as it's the case that another application called removeAccount in between + * the calls to getAllAccounts and acquireTokenSilent. We should not overwrite that removal, unless explicitly flagged by + * the developer, as in the case of refresh token flow used in ADAL Node to MSAL Node migration. + */ + if (handlingRefreshTokenResponse && + !forceCacheRefreshTokenResponse && + cacheRecord.account) { + const cachedAccounts = this.cacheStorage.getAllAccounts({ + homeAccountId: cacheRecord.account.homeAccountId, + environment: cacheRecord.account.environment, + }, request.correlationId); + if (cachedAccounts.length < 1) { + this.logger.warning("Account used to refresh tokens not in persistence, refreshed tokens will not be stored in the cache", request.correlationId); + this.performanceClient?.addFields({ + acntLoggedOut: true, + }, request.correlationId); + return await ResponseHandler.generateAuthenticationResult(this.cryptoObj, authority, cacheRecord, false, request, this.performanceClient, idTokenClaims, requestStateObj, undefined, serverRequestId); + } + } + await this.cacheStorage.saveCacheRecord(cacheRecord, request.correlationId, isKmsi(idTokenClaims || {}), apiId, request.storeInCache); + } + finally { + if (this.persistencePlugin && + this.serializableCache && + cacheContext) { + this.logger.verbose("Persistence enabled, calling afterCacheAccess", request.correlationId); + await this.persistencePlugin.afterCacheAccess(cacheContext); + } + } + return ResponseHandler.generateAuthenticationResult(this.cryptoObj, authority, cacheRecord, false, request, this.performanceClient, idTokenClaims, requestStateObj, serverTokenResponse, serverRequestId); + } + /** + * Generates CacheRecord + * @param serverTokenResponse + * @param idTokenObj + * @param authority + */ + generateCacheRecord(serverTokenResponse, authority, reqTimestamp, request, idTokenClaims, userAssertionHash, authCodePayload) { + const env = authority.getPreferredCache(); + if (!env) { + throw ClientAuthError_createClientAuthError(invalidCacheEnvironment); + } + const claimsTenantId = getTenantIdFromIdTokenClaims(idTokenClaims); + // IdToken: non AAD scenarios can have empty realm + let cachedIdToken; + let cachedAccount; + if (serverTokenResponse.id_token && !!idTokenClaims) { + cachedIdToken = createIdTokenEntity(this.homeAccountIdentifier, env, serverTokenResponse.id_token, this.clientId, claimsTenantId || ""); + cachedAccount = buildAccountToCache(this.cacheStorage, authority, this.homeAccountIdentifier, this.cryptoObj.base64Decode, request.correlationId, idTokenClaims, serverTokenResponse.client_info, env, claimsTenantId, authCodePayload, undefined, // nativeAccountId + this.logger); + } + // AccessToken + let cachedAccessToken = null; + if (serverTokenResponse.access_token) { + // If scopes not returned in server response, use request scopes + const responseScopes = serverTokenResponse.scope + ? ScopeSet.fromString(serverTokenResponse.scope) + : new ScopeSet(request.scopes || []); + /* + * Use timestamp calculated before request + * Server may return timestamps as strings, parse to numbers if so. + */ + const expiresIn = (typeof serverTokenResponse.expires_in === "string" + ? parseInt(serverTokenResponse.expires_in, 10) + : serverTokenResponse.expires_in) || 0; + const extExpiresIn = (typeof serverTokenResponse.ext_expires_in === "string" + ? parseInt(serverTokenResponse.ext_expires_in, 10) + : serverTokenResponse.ext_expires_in) || 0; + const refreshIn = (typeof serverTokenResponse.refresh_in === "string" + ? parseInt(serverTokenResponse.refresh_in, 10) + : serverTokenResponse.refresh_in) || undefined; + const tokenExpirationSeconds = reqTimestamp + expiresIn; + const extendedTokenExpirationSeconds = tokenExpirationSeconds + extExpiresIn; + const refreshOnSeconds = refreshIn && refreshIn > 0 + ? reqTimestamp + refreshIn + : undefined; + // non AAD scenarios can have empty realm + cachedAccessToken = createAccessTokenEntity(this.homeAccountIdentifier, env, serverTokenResponse.access_token, this.clientId, claimsTenantId || authority.tenant || "", responseScopes.printScopes(), tokenExpirationSeconds, extendedTokenExpirationSeconds, this.cryptoObj.base64Decode, refreshOnSeconds, serverTokenResponse.token_type, userAssertionHash, serverTokenResponse.key_id); + // Set resource (to be used for MCP scenarios) + const resource = request.resource || null; + if (resource) { + cachedAccessToken.resource = resource; + } + } + // refreshToken + let cachedRefreshToken = null; + if (serverTokenResponse.refresh_token) { + let rtExpiresOn; + if (serverTokenResponse.refresh_token_expires_in) { + const rtExpiresIn = typeof serverTokenResponse.refresh_token_expires_in === + "string" + ? parseInt(serverTokenResponse.refresh_token_expires_in, 10) + : serverTokenResponse.refresh_token_expires_in; + rtExpiresOn = reqTimestamp + rtExpiresIn; + this.performanceClient?.addFields({ ntwkRtExpiresOnSeconds: rtExpiresOn }, request.correlationId); + } + cachedRefreshToken = createRefreshTokenEntity(this.homeAccountIdentifier, env, serverTokenResponse.refresh_token, this.clientId, serverTokenResponse.foci, userAssertionHash, rtExpiresOn); + } + // appMetadata + let cachedAppMetadata = null; + if (serverTokenResponse.foci) { + cachedAppMetadata = { + clientId: this.clientId, + environment: env, + familyId: serverTokenResponse.foci, + }; + } + return { + account: cachedAccount, + idToken: cachedIdToken, + accessToken: cachedAccessToken, + refreshToken: cachedRefreshToken, + appMetadata: cachedAppMetadata, + }; + } + /** + * Creates an @AuthenticationResult from @CacheRecord , @IdToken , and a boolean that states whether or not the result is from cache. + * + * Optionally takes a state string that is set as-is in the response. + * + * @param cacheRecord + * @param idTokenObj + * @param fromTokenCache + * @param stateString + */ + static async generateAuthenticationResult(cryptoObj, authority, cacheRecord, fromTokenCache, request, performanceClient, idTokenClaims, requestState, serverTokenResponse, requestId) { + let accessToken = ""; + let responseScopes = []; + let expiresOn = null; + let extExpiresOn; + let refreshOn; + let familyId = ""; + if (cacheRecord.accessToken) { + /* + * if the request object has `popKid` property, `signPopToken` will be set to false and + * the token will be returned unsigned + */ + if (cacheRecord.accessToken.tokenType === + AuthenticationScheme.POP && + !request.popKid) { + const popTokenGenerator = new PopTokenGenerator(cryptoObj, performanceClient); + const { secret, keyId } = cacheRecord.accessToken; + if (!keyId) { + throw ClientAuthError_createClientAuthError(keyIdMissing); + } + accessToken = await popTokenGenerator.signPopToken(secret, keyId, request); + } + else { + accessToken = cacheRecord.accessToken.secret; + } + responseScopes = ScopeSet.fromString(cacheRecord.accessToken.target).asArray(); + // Access token expiresOn cached in seconds, converting to Date for AuthenticationResult + expiresOn = toDateFromSeconds(cacheRecord.accessToken.expiresOn); + extExpiresOn = toDateFromSeconds(cacheRecord.accessToken.extendedExpiresOn); + if (cacheRecord.accessToken.refreshOn) { + refreshOn = toDateFromSeconds(cacheRecord.accessToken.refreshOn); + } + } + if (cacheRecord.appMetadata) { + familyId = + cacheRecord.appMetadata.familyId === THE_FAMILY_ID + ? THE_FAMILY_ID + : ""; + } + const uid = idTokenClaims?.oid || idTokenClaims?.sub || ""; + const tid = idTokenClaims?.tid || ""; + // for hybrid + native bridge enablement, send back the native account Id + if (serverTokenResponse?.spa_accountid && !!cacheRecord.account) { + cacheRecord.account.nativeAccountId = + serverTokenResponse?.spa_accountid; + } + const accountInfo = cacheRecord.account + ? updateAccountTenantProfileData(getAccountInfo(cacheRecord.account), undefined, // tenantProfile optional + idTokenClaims, cacheRecord.idToken?.secret) + : null; + return { + authority: authority.canonicalAuthority, + uniqueId: uid, + tenantId: tid, + scopes: responseScopes, + account: accountInfo, + idToken: cacheRecord?.idToken?.secret || "", + idTokenClaims: idTokenClaims || {}, + accessToken: accessToken, + fromCache: fromTokenCache, + expiresOn: expiresOn, + extExpiresOn: extExpiresOn, + refreshOn: refreshOn, + correlationId: request.correlationId, + requestId: requestId || "", + familyId: familyId, + tokenType: cacheRecord.accessToken?.tokenType || "", + state: requestState ? requestState.userRequestState : "", + cloudGraphHostName: cacheRecord.account?.cloudGraphHostName || "", + msGraphHost: cacheRecord.account?.msGraphHost || "", + code: serverTokenResponse?.spa_code, + fromPlatformBroker: false, + }; + } +} +function buildAccountToCache(cacheStorage, authority, homeAccountId, base64Decode, correlationId, idTokenClaims, clientInfo, environment, claimsTenantId, authCodePayload, nativeAccountId, logger) { + logger?.verbose("setCachedAccount called", correlationId); + // Check if base account is already cached + const accountKeys = cacheStorage.getAccountKeys(); + const baseAccountKey = accountKeys.find((accountKey) => { + return accountKey.startsWith(homeAccountId); + }); + let cachedAccount = null; + if (baseAccountKey) { + cachedAccount = cacheStorage.getAccount(baseAccountKey, correlationId); + } + const baseAccount = cachedAccount || + createAccountEntity({ + homeAccountId, + idTokenClaims, + clientInfo, + environment, + cloudGraphHostName: authCodePayload?.cloud_graph_host_name, + msGraphHost: authCodePayload?.msgraph_host, + nativeAccountId: nativeAccountId, + }, authority, base64Decode); + const tenantProfiles = baseAccount.tenantProfiles || []; + const tenantId = claimsTenantId || baseAccount.realm; + if (tenantId && + !tenantProfiles.find((tenantProfile) => { + return tenantProfile.tenantId === tenantId; + })) { + const newTenantProfile = AccountInfo_buildTenantProfile(homeAccountId, baseAccount.localAccountId, tenantId, idTokenClaims); + tenantProfiles.push(newTenantProfile); + } + baseAccount.tenantProfiles = tenantProfiles; + return baseAccount; } -//# sourceMappingURL=UrlUtils.mjs.map +//# sourceMappingURL=ResponseHandler.mjs.map -;// CONCATENATED MODULE: ./node_modules/@azure/msal-common/dist/crypto/ICrypto.mjs +;// CONCATENATED MODULE: ./node_modules/@azure/msal-common/dist/account/CcsCredential.mjs /*! @azure/msal-common v16.3.0 2026-03-13 */ - - - -/* - * Copyright (c) Microsoft Corporation. All rights reserved. - * Licensed under the MIT License. - */ -const ICrypto_DEFAULT_CRYPTO_IMPLEMENTATION = { - createNewGuid: () => { - throw ClientAuthError_createClientAuthError(methodNotImplemented); - }, - base64Decode: () => { - throw ClientAuthError_createClientAuthError(methodNotImplemented); - }, - base64Encode: () => { - throw ClientAuthError_createClientAuthError(methodNotImplemented); - }, - base64UrlEncode: () => { - throw ClientAuthError_createClientAuthError(methodNotImplemented); - }, - encodeKid: () => { - throw ClientAuthError_createClientAuthError(methodNotImplemented); - }, - async getPublicKeyThumbprint() { - throw ClientAuthError_createClientAuthError(methodNotImplemented); - }, - async removeTokenBindingKey() { - throw ClientAuthError_createClientAuthError(methodNotImplemented); - }, - async clearKeystore() { - throw ClientAuthError_createClientAuthError(methodNotImplemented); - }, - async signJwt() { - throw ClientAuthError_createClientAuthError(methodNotImplemented); - }, - async hashString() { - throw ClientAuthError_createClientAuthError(methodNotImplemented); - }, +/* + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. + */ +const CcsCredentialType = { + HOME_ACCOUNT_ID: "home_account_id", + UPN: "UPN", }; -//# sourceMappingURL=ICrypto.mjs.map - -;// CONCATENATED MODULE: ./node_modules/@azure/msal-common/dist/packageMetadata.mjs -/*! @azure/msal-common v16.3.0 2026-03-13 */ - -/* eslint-disable header/header */ -const packageMetadata_name = "@azure/msal-common"; -const packageMetadata_version = "16.3.0"; - - -//# sourceMappingURL=packageMetadata.mjs.map +//# sourceMappingURL=CcsCredential.mjs.map -;// CONCATENATED MODULE: ./node_modules/@azure/msal-common/dist/account/AccountInfo.mjs +;// CONCATENATED MODULE: ./node_modules/@azure/msal-common/dist/utils/ClientAssertionUtils.mjs /*! @azure/msal-common v16.3.0 2026-03-13 */ -/* - * Copyright (c) Microsoft Corporation. All rights reserved. - * Licensed under the MIT License. - */ -/** - * Returns true if tenantId matches the utid portion of homeAccountId - * @param tenantId - * @param homeAccountId - * @returns - */ -function tenantIdMatchesHomeTenant(tenantId, homeAccountId) { - return (!!tenantId && - !!homeAccountId && - tenantId === homeAccountId.split(".")[1]); -} -/** - * Build tenant profile - * @param homeAccountId - Home account identifier for this account object - * @param localAccountId - Local account identifer for this account object - * @param tenantId - Full tenant or organizational id that this account belongs to - * @param idTokenClaims - Claims from the ID token - * @returns - */ -function AccountInfo_buildTenantProfile(homeAccountId, localAccountId, tenantId, idTokenClaims) { - if (idTokenClaims) { - const { oid, sub, tid, name, tfp, acr, preferred_username, upn, login_hint, } = idTokenClaims; - /** - * Since there is no way to determine if the authority is AAD or B2C, we exhaust all the possible claims that can serve as tenant ID with the following precedence: - * tid - TenantID claim that identifies the tenant that issued the token in AAD. Expected in all AAD ID tokens, not present in B2C ID Tokens. - * tfp - Trust Framework Policy claim that identifies the policy that was used to authenticate the user. Functions as tenant for B2C scenarios. - * acr - Authentication Context Class Reference claim used only with older B2C policies. Fallback in case tfp is not present, but likely won't be present anyway. - */ - const tenantId = tid || tfp || acr || ""; - return { - tenantId: tenantId, - localAccountId: oid || sub || "", - name: name, - username: preferred_username || upn || "", - loginHint: login_hint, - isHomeTenant: tenantIdMatchesHomeTenant(tenantId, homeAccountId), - }; - } - else { - return { - tenantId, - localAccountId, - username: "", - isHomeTenant: tenantIdMatchesHomeTenant(tenantId, homeAccountId), - }; - } -} -/** - * Replaces account info that varies by tenant profile sourced from the ID token claims passed in with the tenant-specific account info - * @param baseAccountInfo - * @param idTokenClaims - * @returns - */ -function updateAccountTenantProfileData(baseAccountInfo, tenantProfile, idTokenClaims, idTokenSecret) { - let updatedAccountInfo = baseAccountInfo; - // Tenant Profile overrides passed in account info - if (tenantProfile) { - // eslint-disable-next-line @typescript-eslint/no-unused-vars - const { isHomeTenant, ...tenantProfileOverride } = tenantProfile; - updatedAccountInfo = { ...baseAccountInfo, ...tenantProfileOverride }; - } - // ID token claims override passed in account info and tenant profile - if (idTokenClaims) { - // Ignore isHomeTenant, loginHint, and sid which are part of tenant profile but not base account info - // eslint-disable-next-line @typescript-eslint/no-unused-vars - const { isHomeTenant, ...claimsSourcedTenantProfile } = AccountInfo_buildTenantProfile(baseAccountInfo.homeAccountId, baseAccountInfo.localAccountId, baseAccountInfo.tenantId, idTokenClaims); - updatedAccountInfo = { - ...updatedAccountInfo, - ...claimsSourcedTenantProfile, - idTokenClaims: idTokenClaims, - idToken: idTokenSecret, - }; - return updatedAccountInfo; - } - return updatedAccountInfo; +/* + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. + */ +async function getClientAssertion(clientAssertion, clientId, tokenEndpoint) { + if (typeof clientAssertion === "string") { + return clientAssertion; + } + else { + const config = { + clientId: clientId, + tokenEndpoint: tokenEndpoint, + }; + return clientAssertion(config); + } } -//# sourceMappingURL=AccountInfo.mjs.map +//# sourceMappingURL=ClientAssertionUtils.mjs.map -;// CONCATENATED MODULE: ./node_modules/@azure/msal-common/dist/error/CacheErrorCodes.mjs +;// CONCATENATED MODULE: ./node_modules/@azure/msal-common/dist/network/RequestThumbprint.mjs /*! @azure/msal-common v16.3.0 2026-03-13 */ -/* - * Copyright (c) Microsoft Corporation. All rights reserved. - * Licensed under the MIT License. - */ -const cacheQuotaExceeded = "cache_quota_exceeded"; -const cacheErrorUnknown = "cache_error_unknown"; +/* + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. + */ +function getRequestThumbprint(clientId, request, homeAccountId) { + return { + clientId: clientId, + authority: request.authority, + scopes: request.scopes, + homeAccountIdentifier: homeAccountId, + claims: request.claims, + authenticationScheme: request.authenticationScheme, + resourceRequestMethod: request.resourceRequestMethod, + resourceRequestUri: request.resourceRequestUri, + shrClaims: request.shrClaims, + sshKid: request.sshKid, + embeddedClientId: request.embeddedClientId || request.extraParameters?.clientId, + }; +} -//# sourceMappingURL=CacheErrorCodes.mjs.map +//# sourceMappingURL=RequestThumbprint.mjs.map -;// CONCATENATED MODULE: ./node_modules/@azure/msal-common/dist/error/CacheError.mjs +;// CONCATENATED MODULE: ./node_modules/@azure/msal-common/dist/network/ThrottlingUtils.mjs /*! @azure/msal-common v16.3.0 2026-03-13 */ - -/* - * Copyright (c) Microsoft Corporation. All rights reserved. - * Licensed under the MIT License. - */ -/** - * Error thrown when there is an error with the cache - */ -class CacheError extends Error { - constructor(errorCode, errorMessage) { - const message = errorMessage || getDefaultErrorMessage(errorCode); - super(message); - Object.setPrototypeOf(this, CacheError.prototype); - this.name = "CacheError"; - this.errorCode = errorCode; - this.errorMessage = message; - } -} -/** - * Helper function to wrap browser errors in a CacheError object - * @param e - * @returns - */ -function createCacheError(e) { - if (!(e instanceof Error)) { - return new CacheError(cacheErrorUnknown); - } - if (e.name === "QuotaExceededError" || - e.name === "NS_ERROR_DOM_QUOTA_REACHED" || - e.message.includes("exceeded the quota")) { - return new CacheError(cacheQuotaExceeded); - } - else { - return new CacheError(e.name, e.message); - } +/* + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. + */ +/** @internal */ +class ThrottlingUtils { + /** + * Prepares a RequestThumbprint to be stored as a key. + * @param thumbprint + */ + static generateThrottlingStorageKey(thumbprint) { + return `${THROTTLING_PREFIX}.${JSON.stringify(thumbprint)}`; + } + /** + * Performs necessary throttling checks before a network request. + * @param cacheManager + * @param thumbprint + */ + static preProcess(cacheManager, thumbprint, correlationId) { + const key = ThrottlingUtils.generateThrottlingStorageKey(thumbprint); + const value = cacheManager.getThrottlingCache(key, correlationId); + if (value) { + if (value.throttleTime < Date.now()) { + cacheManager.removeItem(key, correlationId); + return; + } + throw new ServerError_ServerError(value.errorCodes?.join(" ") || "", value.errorMessage, value.subError); + } + } + /** + * Performs necessary throttling checks after a network request. + * @param cacheManager + * @param thumbprint + * @param response + */ + static postProcess(cacheManager, thumbprint, response, correlationId) { + if (ThrottlingUtils.checkResponseStatus(response) || + ThrottlingUtils.checkResponseForRetryAfter(response)) { + const thumbprintValue = { + throttleTime: ThrottlingUtils.calculateThrottleTime(parseInt(response.headers[HeaderNames.RETRY_AFTER])), + error: response.body.error, + errorCodes: response.body.error_codes, + errorMessage: response.body.error_description, + subError: response.body.suberror, + }; + cacheManager.setThrottlingCache(ThrottlingUtils.generateThrottlingStorageKey(thumbprint), thumbprintValue, correlationId); + } + } + /** + * Checks a NetworkResponse object's status codes against 429 or 5xx + * @param response + */ + static checkResponseStatus(response) { + return (response.status === 429 || + (response.status >= 500 && response.status < 600)); + } + /** + * Checks a NetworkResponse object's RetryAfter header + * @param response + */ + static checkResponseForRetryAfter(response) { + if (response.headers) { + return (response.headers.hasOwnProperty(HeaderNames.RETRY_AFTER) && + (response.status < 200 || response.status >= 300)); + } + return false; + } + /** + * Calculates the Unix-time value for a throttle to expire given throttleTime in seconds. + * @param throttleTime + */ + static calculateThrottleTime(throttleTime) { + const time = throttleTime <= 0 ? 0 : throttleTime; + const currentSeconds = Date.now() / 1000; + return Math.floor(Math.min(currentSeconds + + (time || DEFAULT_THROTTLE_TIME_SECONDS), currentSeconds + DEFAULT_MAX_THROTTLE_TIME_SECONDS) * 1000); + } + static removeThrottle(cacheManager, clientId, request, homeAccountIdentifier) { + const thumbprint = getRequestThumbprint(clientId, request, homeAccountIdentifier); + const key = this.generateThrottlingStorageKey(thumbprint); + cacheManager.removeItem(key, request.correlationId); + } } -//# sourceMappingURL=CacheError.mjs.map +//# sourceMappingURL=ThrottlingUtils.mjs.map -;// CONCATENATED MODULE: ./node_modules/@azure/msal-common/dist/account/ClientInfo.mjs +;// CONCATENATED MODULE: ./node_modules/@azure/msal-common/dist/error/NetworkError.mjs /*! @azure/msal-common v16.3.0 2026-03-13 */ - - -/* - * Copyright (c) Microsoft Corporation. All rights reserved. - * Licensed under the MIT License. - */ -/** - * Function to build a client info object from server clientInfo string - * @param rawClientInfo - * @param crypto - */ -function buildClientInfo(rawClientInfo, base64Decode) { - if (!rawClientInfo) { - throw ClientAuthError_createClientAuthError(clientInfoEmptyError); - } - try { - const decodedClientInfo = base64Decode(rawClientInfo); - return JSON.parse(decodedClientInfo); - } - catch (e) { - throw ClientAuthError_createClientAuthError(clientInfoDecodingError); - } -} -/** - * Function to build a client info object from cached homeAccountId string - * @param homeAccountId - */ -function buildClientInfoFromHomeAccountId(homeAccountId) { - if (!homeAccountId) { - throw ClientAuthError_createClientAuthError(clientInfoDecodingError); - } - const clientInfoParts = homeAccountId.split(CLIENT_INFO_SEPARATOR, 2); - return { - uid: clientInfoParts[0], - utid: clientInfoParts.length < 2 ? "" : clientInfoParts[1], - }; +/* + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. + */ +/** + * Represents network related errors + */ +class NetworkError extends AuthError { + constructor(error, httpStatus, responseHeaders) { + super(error.errorCode, error.errorMessage, error.subError); + Object.setPrototypeOf(this, NetworkError.prototype); + this.name = "NetworkError"; + this.error = error; + this.httpStatus = httpStatus; + this.responseHeaders = responseHeaders; + } } - - -//# sourceMappingURL=ClientInfo.mjs.map - -;// CONCATENATED MODULE: ./node_modules/@azure/msal-common/dist/account/TokenClaims.mjs -/*! @azure/msal-common v16.3.0 2026-03-13 */ - -/* - * Copyright (c) Microsoft Corporation. All rights reserved. - * Licensed under the MIT License. - */ -/** - * Gets tenantId from available ID token claims to set as credential realm with the following precedence: - * 1. tid - if the token is acquired from an Azure AD tenant tid will be present - * 2. tfp - if the token is acquired from a modern B2C tenant tfp should be present - * 3. acr - if the token is acquired from a legacy B2C tenant acr should be present - * Downcased to match the realm case-insensitive comparison requirements - * @param idTokenClaims - * @returns - */ -function getTenantIdFromIdTokenClaims(idTokenClaims) { - if (idTokenClaims) { - const tenantId = idTokenClaims.tid || idTokenClaims.tfp || idTokenClaims.acr; - return tenantId || null; - } - return null; +/** + * Creates NetworkError object for a failed network request + * @param error - Error to be thrown back to the caller + * @param httpStatus - Status code of the network request + * @param responseHeaders - Response headers of the network request, when available + * @returns NetworkError object + */ +function createNetworkError(error, httpStatus, responseHeaders, additionalError) { + error.errorMessage = `${error.errorMessage}, additionalErrorInfo: error.name:${additionalError?.name}, error.message:${additionalError?.message}`; + return new NetworkError(error, httpStatus, responseHeaders); } -//# sourceMappingURL=TokenClaims.mjs.map +//# sourceMappingURL=NetworkError.mjs.map -;// CONCATENATED MODULE: ./node_modules/@azure/msal-common/dist/cache/utils/AccountEntityUtils.mjs +;// CONCATENATED MODULE: ./node_modules/@azure/msal-common/dist/protocol/Token.mjs /*! @azure/msal-common v16.3.0 2026-03-13 */ @@ -49129,1434 +51564,126 @@ function getTenantIdFromIdTokenClaims(idTokenClaims) { -/* - * Copyright (c) Microsoft Corporation. All rights reserved. - * Licensed under the MIT License. - */ -/** - * Generate Account Id key component as per the schema: - - */ -function generateAccountId(accountEntity) { - const accountId = [ - accountEntity.homeAccountId, - accountEntity.environment, - ]; - return accountId.join(CACHE_KEY_SEPARATOR).toLowerCase(); -} -/** - * Returns the AccountInfo interface for this account. - */ -function getAccountInfo(accountEntity) { - const tenantProfiles = accountEntity.tenantProfiles || []; - // Ensure at least the home tenant profile exists - if (tenantProfiles.length === 0 && - accountEntity.realm && - accountEntity.localAccountId) { - tenantProfiles.push(AccountInfo_buildTenantProfile(accountEntity.homeAccountId, accountEntity.localAccountId, accountEntity.realm)); - } - return { - homeAccountId: accountEntity.homeAccountId, - environment: accountEntity.environment, - tenantId: accountEntity.realm, - username: accountEntity.username, - localAccountId: accountEntity.localAccountId, - loginHint: accountEntity.loginHint, - name: accountEntity.name, - nativeAccountId: accountEntity.nativeAccountId, - authorityType: accountEntity.authorityType, - // Deserialize tenant profiles array into a Map - tenantProfiles: new Map(tenantProfiles.map((tenantProfile) => { - return [tenantProfile.tenantId, tenantProfile]; - })), - dataBoundary: accountEntity.dataBoundary, - }; -} -/** - * Returns true if the account entity is in single tenant format (outdated), false otherwise - */ -function isSingleTenant(accountEntity) { - return !accountEntity.tenantProfiles; -} -/** - * Build Account cache from IdToken, clientInfo and authority/policy. Associated with AAD. - * @param accountDetails - */ -function createAccountEntity(accountDetails, authority, base64Decode) { - let authorityType; - if (authority.authorityType === AuthorityType.Adfs) { - authorityType = CACHE_ACCOUNT_TYPE_ADFS; - } - else if (authority.protocolMode === ProtocolMode_ProtocolMode.OIDC) { - authorityType = Constants_CACHE_ACCOUNT_TYPE_GENERIC; - } - else { - authorityType = CACHE_ACCOUNT_TYPE_MSSTS; - } - let clientInfo; - let dataBoundary; - if (accountDetails.clientInfo && base64Decode) { - clientInfo = buildClientInfo(accountDetails.clientInfo, base64Decode); - if (clientInfo.xms_tdbr) { - dataBoundary = clientInfo.xms_tdbr === "EU" ? "EU" : "None"; - } - } - const env = accountDetails.environment || - (authority && authority.getPreferredCache()); - if (!env) { - throw ClientAuthError_createClientAuthError(invalidCacheEnvironment); - } - /* - * In B2C scenarios the emails claim is used instead of preferred_username and it is an array. - * In most cases it will contain a single email. This field should not be relied upon if a custom - * policy is configured to return more than 1 email. - */ - const preferredUsername = accountDetails.idTokenClaims?.preferred_username || - accountDetails.idTokenClaims?.upn; - const email = accountDetails.idTokenClaims?.emails - ? accountDetails.idTokenClaims.emails[0] - : null; - const username = preferredUsername || email || ""; - const loginHint = accountDetails.idTokenClaims?.login_hint; - const realm = clientInfo?.utid || - getTenantIdFromIdTokenClaims(accountDetails.idTokenClaims) || - ""; // non-AAD scenarios can have empty realm - // How do you account for MSA CID here? - const localAccountId = clientInfo?.uid || - accountDetails.idTokenClaims?.oid || - accountDetails.idTokenClaims?.sub || - ""; - let tenantProfiles; - if (accountDetails.tenantProfiles) { - tenantProfiles = accountDetails.tenantProfiles; - } - else { - const tenantProfile = AccountInfo_buildTenantProfile(accountDetails.homeAccountId, localAccountId, realm, accountDetails.idTokenClaims); - tenantProfiles = [tenantProfile]; - } - return { - homeAccountId: accountDetails.homeAccountId, - environment: env, - realm: realm, - localAccountId: localAccountId, - username: username, - authorityType: authorityType, - loginHint: loginHint, - clientInfo: accountDetails.clientInfo, - name: accountDetails.idTokenClaims?.name || "", - lastModificationTime: undefined, - lastModificationApp: undefined, - cloudGraphHostName: accountDetails.cloudGraphHostName, - msGraphHost: accountDetails.msGraphHost, - nativeAccountId: accountDetails.nativeAccountId, - tenantProfiles: tenantProfiles, - dataBoundary, - }; -} -/** - * Creates an AccountEntity object from AccountInfo - * @param accountInfo - * @param cloudGraphHostName - * @param msGraphHost - * @returns - */ -function createAccountEntityFromAccountInfo(accountInfo, cloudGraphHostName, msGraphHost) { - // Serialize tenant profiles map into an array - const tenantProfiles = Array.from(accountInfo.tenantProfiles?.values() || []); - // Ensure at least the home tenant profile exists - if (tenantProfiles.length === 0 && - accountInfo.tenantId && - accountInfo.localAccountId) { - tenantProfiles.push(buildTenantProfile(accountInfo.homeAccountId, accountInfo.localAccountId, accountInfo.tenantId, accountInfo.idTokenClaims)); - } - return { - authorityType: accountInfo.authorityType || CACHE_ACCOUNT_TYPE_GENERIC, - homeAccountId: accountInfo.homeAccountId, - localAccountId: accountInfo.localAccountId, - nativeAccountId: accountInfo.nativeAccountId, - realm: accountInfo.tenantId, - environment: accountInfo.environment, - username: accountInfo.username, - loginHint: accountInfo.loginHint, - name: accountInfo.name, - cloudGraphHostName: cloudGraphHostName, - msGraphHost: msGraphHost, - tenantProfiles: tenantProfiles, - dataBoundary: accountInfo.dataBoundary, - }; -} -/** - * Generate HomeAccountId from server response - * @param serverClientInfo - * @param authType - */ -function generateHomeAccountId(serverClientInfo, authType, logger, cryptoObj, correlationId, idTokenClaims) { - // since ADFS/DSTS do not have tid and does not set client_info - if (!(authType === AuthorityType.Adfs || authType === AuthorityType.Dsts)) { - // for cases where there is clientInfo - if (serverClientInfo) { - try { - const clientInfo = buildClientInfo(serverClientInfo, cryptoObj.base64Decode); - if (clientInfo.uid && clientInfo.utid) { - return `${clientInfo.uid}.${clientInfo.utid}`; - } - } - catch (e) { } - } - logger.warning("No client info in response", correlationId); - } - // default to "sub" claim - return idTokenClaims?.sub || ""; -} -/** - * Validates an entity: checks for all expected params - * @param entity - */ -function isAccountEntity(entity) { - if (!entity) { - return false; - } - return (entity.hasOwnProperty("homeAccountId") && - entity.hasOwnProperty("environment") && - entity.hasOwnProperty("realm") && - entity.hasOwnProperty("localAccountId") && - entity.hasOwnProperty("username") && - entity.hasOwnProperty("authorityType")); -} - - -//# sourceMappingURL=AccountEntityUtils.mjs.map - -;// CONCATENATED MODULE: ./node_modules/@azure/msal-common/dist/cache/CacheManager.mjs -/*! @azure/msal-common v16.3.0 2026-03-13 */ - - - - - - - - - -/* - * Copyright (c) Microsoft Corporation. All rights reserved. - * Licensed under the MIT License. - */ -/** - * Interface class which implement cache storage functions used by MSAL to perform validity checks, and store tokens. - * @internal - */ -class CacheManager { - constructor(clientId, cryptoImpl, logger, performanceClient, staticAuthorityOptions) { - this.clientId = clientId; - this.cryptoImpl = cryptoImpl; - this.commonLogger = logger.clone(packageMetadata_name, packageMetadata_version); - this.staticAuthorityOptions = staticAuthorityOptions; - this.performanceClient = performanceClient; - } - /** - * Returns all the accounts in the cache that match the optional filter. If no filter is provided, all accounts are returned. - * @param accountFilter - (Optional) filter to narrow down the accounts returned - * @returns Array of AccountInfo objects in cache - */ - getAllAccounts(accountFilter = {}, correlationId) { - return this.buildTenantProfiles(this.getAccountsFilteredBy(accountFilter, correlationId), correlationId, accountFilter); - } - /** - * Gets first tenanted AccountInfo object found based on provided filters - */ - getAccountInfoFilteredBy(accountFilter, correlationId) { - const allAccounts = this.getAllAccounts(accountFilter, correlationId); - if (allAccounts.length > 1) { - // If one or more accounts are found, prioritize accounts that have an ID token - const sortedAccounts = allAccounts.sort((account) => { - return account.idTokenClaims ? -1 : 1; - }); - return sortedAccounts[0]; - } - else if (allAccounts.length === 1) { - // If only one account is found, return it regardless of whether a matching ID token was found - return allAccounts[0]; - } - else { - return null; - } - } - /** - * Returns a single matching - * @param accountFilter - * @returns - */ - getBaseAccountInfo(accountFilter, correlationId) { - const accountEntities = this.getAccountsFilteredBy(accountFilter, correlationId); - if (accountEntities.length > 0) { - return getAccountInfo(accountEntities[0]); - } - else { - return null; - } - } - /** - * Matches filtered account entities with cached ID tokens that match the tenant profile-specific account filters - * and builds the account info objects from the matching ID token's claims - * @param cachedAccounts - * @param accountFilter - * @returns Array of AccountInfo objects that match account and tenant profile filters - */ - buildTenantProfiles(cachedAccounts, correlationId, accountFilter) { - return cachedAccounts.flatMap((accountEntity) => { - return this.getTenantProfilesFromAccountEntity(accountEntity, correlationId, accountFilter?.tenantId, accountFilter); - }); - } - getTenantedAccountInfoByFilter(accountInfo, tokenKeys, tenantProfile, correlationId, tenantProfileFilter) { - let tenantedAccountInfo = null; - let idTokenClaims; - if (tenantProfileFilter) { - if (!this.tenantProfileMatchesFilter(tenantProfile, tenantProfileFilter)) { - return null; - } - } - const idToken = this.getIdToken(accountInfo, correlationId, tokenKeys, tenantProfile.tenantId); - if (idToken) { - idTokenClaims = extractTokenClaims(idToken.secret, this.cryptoImpl.base64Decode); - if (!this.idTokenClaimsMatchTenantProfileFilter(idTokenClaims, tenantProfileFilter)) { - // ID token sourced claims don't match so this tenant profile is not a match - return null; - } - } - // Expand tenant profile into account info based on matching tenant profile and if available matching ID token claims - tenantedAccountInfo = updateAccountTenantProfileData(accountInfo, tenantProfile, idTokenClaims, idToken?.secret); - return tenantedAccountInfo; - } - getTenantProfilesFromAccountEntity(accountEntity, correlationId, targetTenantId, tenantProfileFilter) { - const accountInfo = getAccountInfo(accountEntity); - let searchTenantProfiles = accountInfo.tenantProfiles || new Map(); - const tokenKeys = this.getTokenKeys(); - // If a tenant ID was provided, only return the tenant profile for that tenant ID if it exists - if (targetTenantId) { - const tenantProfile = searchTenantProfiles.get(targetTenantId); - if (tenantProfile) { - // Reduce search field to just this tenant profile - searchTenantProfiles = new Map([ - [targetTenantId, tenantProfile], - ]); - } - else { - // No tenant profile for search tenant ID, return empty array - return []; - } - } - const matchingTenantProfiles = []; - searchTenantProfiles.forEach((tenantProfile) => { - const tenantedAccountInfo = this.getTenantedAccountInfoByFilter(accountInfo, tokenKeys, tenantProfile, correlationId, tenantProfileFilter); - if (tenantedAccountInfo) { - matchingTenantProfiles.push(tenantedAccountInfo); - } - }); - return matchingTenantProfiles; - } - tenantProfileMatchesFilter(tenantProfile, tenantProfileFilter) { - if (!!tenantProfileFilter.localAccountId && - !this.matchLocalAccountIdFromTenantProfile(tenantProfile, tenantProfileFilter.localAccountId)) { - return false; - } - if (!!tenantProfileFilter.name && - !(tenantProfile.name === tenantProfileFilter.name)) { - return false; - } - if (tenantProfileFilter.isHomeTenant !== undefined && - !(tenantProfile.isHomeTenant === tenantProfileFilter.isHomeTenant)) { - return false; - } - return true; - } - idTokenClaimsMatchTenantProfileFilter(idTokenClaims, tenantProfileFilter) { - // Tenant Profile filtering - if (tenantProfileFilter) { - if (!!tenantProfileFilter.localAccountId && - !this.matchLocalAccountIdFromTokenClaims(idTokenClaims, tenantProfileFilter.localAccountId)) { - return false; - } - if (!!tenantProfileFilter.loginHint && - !this.matchLoginHintFromTokenClaims(idTokenClaims, tenantProfileFilter.loginHint)) { - return false; - } - if (!!tenantProfileFilter.username && - !this.matchUsername(idTokenClaims.preferred_username, tenantProfileFilter.username)) { - return false; - } - if (!!tenantProfileFilter.name && - !this.matchName(idTokenClaims, tenantProfileFilter.name)) { - return false; - } - if (!!tenantProfileFilter.sid && - !this.matchSid(idTokenClaims, tenantProfileFilter.sid)) { - return false; - } - } - return true; - } - /** - * saves a cache record - * @param cacheRecord {CacheRecord} - * @param storeInCache {?StoreInCache} - * @param correlationId {?string} correlation id - */ - async saveCacheRecord(cacheRecord, correlationId, kmsi, apiId, storeInCache) { - if (!cacheRecord) { - throw ClientAuthError_createClientAuthError(invalidCacheRecord); - } - try { - if (!!cacheRecord.account) { - await this.setAccount(cacheRecord.account, correlationId, kmsi, apiId); - } - if (!!cacheRecord.idToken && storeInCache?.idToken !== false) { - await this.setIdTokenCredential(cacheRecord.idToken, correlationId, kmsi); - } - if (!!cacheRecord.accessToken && - storeInCache?.accessToken !== false) { - await this.saveAccessToken(cacheRecord.accessToken, correlationId, kmsi); - } - if (!!cacheRecord.refreshToken && - storeInCache?.refreshToken !== false) { - await this.setRefreshTokenCredential(cacheRecord.refreshToken, correlationId, kmsi); - } - if (!!cacheRecord.appMetadata) { - this.setAppMetadata(cacheRecord.appMetadata, correlationId); - } - } - catch (e) { - this.commonLogger?.error(`CacheManager.saveCacheRecord: failed`, correlationId); - if (e instanceof AuthError) { - throw e; - } - else { - throw createCacheError(e); - } - } - } - /** - * saves access token credential - * @param credential - */ - async saveAccessToken(credential, correlationId, kmsi) { - const accessTokenFilter = { - clientId: credential.clientId, - credentialType: credential.credentialType, - environment: credential.environment, - homeAccountId: credential.homeAccountId, - realm: credential.realm, - tokenType: credential.tokenType, - }; - const tokenKeys = this.getTokenKeys(); - const currentScopes = ScopeSet.fromString(credential.target); - tokenKeys.accessToken.forEach((key) => { - if (!this.accessTokenKeyMatchesFilter(key, accessTokenFilter, false)) { - return; - } - const tokenEntity = this.getAccessTokenCredential(key, correlationId); - if (tokenEntity && - this.credentialMatchesFilter(tokenEntity, accessTokenFilter, correlationId)) { - const tokenScopeSet = ScopeSet.fromString(tokenEntity.target); - if (tokenScopeSet.intersectingScopeSets(currentScopes)) { - this.removeAccessToken(key, correlationId); - } - } - }); - await this.setAccessTokenCredential(credential, correlationId, kmsi); - } - /** - * Retrieve account entities matching all provided tenant-agnostic filters; if no filter is set, get all account entities in the cache - * Not checking for casing as keys are all generated in lower case, remember to convert to lower case if object properties are compared - * @param accountFilter - An object containing Account properties to filter by - */ - getAccountsFilteredBy(accountFilter, correlationId) { - const allAccountKeys = this.getAccountKeys(); - const matchingAccounts = []; - allAccountKeys.forEach((cacheKey) => { - const entity = this.getAccount(cacheKey, correlationId); - // Match base account fields - if (!entity) { - return; - } - if (!!accountFilter.homeAccountId && - !this.matchHomeAccountId(entity, accountFilter.homeAccountId)) { - return; - } - if (!!accountFilter.username && - !this.matchUsername(entity.username, accountFilter.username)) { - return; - } - if (!!accountFilter.environment && - !this.matchEnvironment(entity, accountFilter.environment, correlationId)) { - return; - } - if (!!accountFilter.realm && - !this.matchRealm(entity, accountFilter.realm)) { - return; - } - if (!!accountFilter.nativeAccountId && - !this.matchNativeAccountId(entity, accountFilter.nativeAccountId)) { - return; - } - if (!!accountFilter.authorityType && - !this.matchAuthorityType(entity, accountFilter.authorityType)) { - return; - } - // If at least one tenant profile matches the tenant profile filter, add the account to the list of matching accounts - const tenantProfileFilter = { - localAccountId: accountFilter?.localAccountId, - name: accountFilter?.name, - }; - const matchingTenantProfiles = entity.tenantProfiles?.filter((tenantProfile) => { - return this.tenantProfileMatchesFilter(tenantProfile, tenantProfileFilter); - }); - if (matchingTenantProfiles && matchingTenantProfiles.length === 0) { - // No tenant profile for this account matches filter, don't add to list of matching accounts - return; - } - matchingAccounts.push(entity); - }); - return matchingAccounts; - } - /** - * Returns whether or not the given credential entity matches the filter - * @param entity - * @param filter - * @param correlationId - * @returns - */ - credentialMatchesFilter(entity, filter, correlationId) { - if (!!filter.clientId && !this.matchClientId(entity, filter.clientId)) { - return false; - } - if (!!filter.userAssertionHash && - !this.matchUserAssertionHash(entity, filter.userAssertionHash)) { - return false; - } - /* - * homeAccountId can be undefined, and we want to filter out cached items that have a homeAccountId of "" - * because we don't want a client_credential request to return a cached token that has a homeAccountId - */ - if (typeof filter.homeAccountId === "string" && - !this.matchHomeAccountId(entity, filter.homeAccountId)) { - return false; - } - if (!!filter.environment && - !this.matchEnvironment(entity, filter.environment, correlationId)) { - return false; - } - if (!!filter.realm && !this.matchRealm(entity, filter.realm)) { - return false; - } - if (!!filter.credentialType && - !this.matchCredentialType(entity, filter.credentialType)) { - return false; - } - if (!!filter.familyId && !this.matchFamilyId(entity, filter.familyId)) { - return false; - } - /* - * idTokens do not have "target", target specific refreshTokens do exist for some types of authentication - * Resource specific refresh tokens case will be added when the support is deemed necessary - */ - if (!!filter.target && !this.matchTarget(entity, filter.target)) { - return false; - } - // Access Token with Auth Scheme specific matching - if (entity.credentialType === - CredentialType.ACCESS_TOKEN_WITH_AUTH_SCHEME) { - if (!!filter.tokenType && - !this.matchTokenType(entity, filter.tokenType)) { - return false; - } - // KeyId (sshKid) in request must match cached SSH certificate keyId because SSH cert is bound to a specific key - if (filter.tokenType === AuthenticationScheme.SSH) { - if (filter.keyId && !this.matchKeyId(entity, filter.keyId)) { - return false; - } - } - } - return true; - } - /** - * retrieve appMetadata matching all provided filters; if no filter is set, get all appMetadata - * @param filter - * @param correlationId - */ - getAppMetadataFilteredBy(filter, correlationId) { - const allCacheKeys = this.getKeys(); - const matchingAppMetadata = {}; - allCacheKeys.forEach((cacheKey) => { - // don't parse any non-appMetadata type cache entities - if (!this.isAppMetadata(cacheKey)) { - return; - } - // Attempt retrieval - const entity = this.getAppMetadata(cacheKey, correlationId); - if (!entity) { - return; - } - if (!!filter.environment && - !this.matchEnvironment(entity, filter.environment, correlationId)) { - return; - } - if (!!filter.clientId && - !this.matchClientId(entity, filter.clientId)) { - return; - } - matchingAppMetadata[cacheKey] = entity; - }); - return matchingAppMetadata; - } - /** - * retrieve authorityMetadata that contains a matching alias - * @param host - * @param correlationId - */ - getAuthorityMetadataByAlias(host, correlationId) { - const allCacheKeys = this.getAuthorityMetadataKeys(); - let matchedEntity = null; - allCacheKeys.forEach((cacheKey) => { - // don't parse any non-authorityMetadata type cache entities - if (!this.isAuthorityMetadata(cacheKey) || - cacheKey.indexOf(this.clientId) === -1) { - return; - } - // Attempt retrieval - const entity = this.getAuthorityMetadata(cacheKey, correlationId); - if (!entity) { - return; - } - if (entity.aliases.indexOf(host) === -1) { - return; - } - matchedEntity = entity; - }); - return matchedEntity; - } - /** - * Removes all accounts and related tokens from cache. - */ - removeAllAccounts(correlationId) { - const accounts = this.getAllAccounts({}, correlationId); - accounts.forEach((account) => { - this.removeAccount(account, correlationId); - }); - } - /** - * Removes the account and related tokens for a given account key - * @param account - */ - removeAccount(account, correlationId) { - this.removeAccountContext(account, correlationId); - const accountKeys = this.getAccountKeys(); - const keyFilter = (key) => { - return (key.includes(account.homeAccountId) && - key.includes(account.environment)); - }; - accountKeys.filter(keyFilter).forEach((key) => { - this.removeItem(key, correlationId); - this.performanceClient.incrementFields({ accountsRemoved: 1 }, correlationId); - }); - } - /** - * Removes credentials associated with the provided account - * @param account - */ - removeAccountContext(account, correlationId) { - const allTokenKeys = this.getTokenKeys(); - const keyFilter = (key) => { - return (key.includes(account.homeAccountId) && - key.includes(account.environment)); - }; - allTokenKeys.idToken.filter(keyFilter).forEach((key) => { - this.removeIdToken(key, correlationId); - }); - allTokenKeys.accessToken.filter(keyFilter).forEach((key) => { - this.removeAccessToken(key, correlationId); - }); - allTokenKeys.refreshToken.filter(keyFilter).forEach((key) => { - this.removeRefreshToken(key, correlationId); - }); - } - /** - * returns a boolean if the given credential is removed - * @param key - * @param correlationId - */ - removeAccessToken(key, correlationId) { - const credential = this.getAccessTokenCredential(key, correlationId); - if (!credential) { - return; - } - this.removeItem(key, correlationId); - this.performanceClient.incrementFields({ accessTokensRemoved: 1 }, correlationId); - // Remove Token Binding Key from key store for PoP Tokens Credentials - if (credential.credentialType.toLowerCase() === - CredentialType.ACCESS_TOKEN_WITH_AUTH_SCHEME.toLowerCase()) { - if (credential.tokenType === AuthenticationScheme.POP) { - const accessTokenWithAuthSchemeEntity = credential; - const kid = accessTokenWithAuthSchemeEntity.keyId; - if (kid) { - void this.cryptoImpl - .removeTokenBindingKey(kid, correlationId) - .catch(() => { - this.commonLogger.error(`Failed to remove token binding key '${kid}'`, correlationId); - this.performanceClient?.incrementFields({ removeTokenBindingKeyFailure: 1 }, correlationId); - }); - } - } - } - } - /** - * Removes all app metadata objects from cache. - */ - removeAppMetadata(correlationId) { - const allCacheKeys = this.getKeys(); - allCacheKeys.forEach((cacheKey) => { - if (this.isAppMetadata(cacheKey)) { - this.removeItem(cacheKey, correlationId); - } - }); - return true; - } - /** - * Retrieve IdTokenEntity from cache - * @param account {AccountInfo} - * @param tokenKeys {?TokenKeys} - * @param targetRealm {?string} - * @param performanceClient {?IPerformanceClient} - * @param correlationId {?string} - */ - getIdToken(account, correlationId, tokenKeys, targetRealm) { - this.commonLogger.trace("CacheManager - getIdToken called", correlationId); - const idTokenFilter = { - homeAccountId: account.homeAccountId, - environment: account.environment, - credentialType: CredentialType.ID_TOKEN, - clientId: this.clientId, - realm: targetRealm, - }; - const idTokenMap = this.getIdTokensByFilter(idTokenFilter, correlationId, tokenKeys); - const numIdTokens = idTokenMap.size; - if (numIdTokens < 1) { - this.commonLogger.info("CacheManager:getIdToken - No token found", correlationId); - return null; - } - else if (numIdTokens > 1) { - let tokensToBeRemoved = idTokenMap; - // Multiple tenant profiles and no tenant specified, pick home account - if (!targetRealm) { - const homeIdTokenMap = new Map(); - idTokenMap.forEach((idToken, key) => { - if (idToken.realm === account.tenantId) { - homeIdTokenMap.set(key, idToken); - } - }); - const numHomeIdTokens = homeIdTokenMap.size; - if (numHomeIdTokens < 1) { - this.commonLogger.info("CacheManager:getIdToken - Multiple ID tokens found for account but none match account entity tenant id, returning first result", correlationId); - return idTokenMap.values().next().value; - } - else if (numHomeIdTokens === 1) { - this.commonLogger.info("CacheManager:getIdToken - Multiple ID tokens found for account, defaulting to home tenant profile", correlationId); - return homeIdTokenMap.values().next().value; - } - else { - // Multiple ID tokens for home tenant profile, remove all and return null - tokensToBeRemoved = homeIdTokenMap; - } - } - // Multiple tokens for a single tenant profile, remove all and return null - this.commonLogger.info("CacheManager:getIdToken - Multiple matching ID tokens found, clearing them", correlationId); - tokensToBeRemoved.forEach((idToken, key) => { - this.removeIdToken(key, correlationId); - }); - this.performanceClient.addFields({ multiMatchedID: idTokenMap.size }, correlationId); - return null; - } - this.commonLogger.info("CacheManager:getIdToken - Returning ID token", correlationId); - return idTokenMap.values().next().value; - } - /** - * Gets all idTokens matching the given filter - * @param filter - * @returns - */ - getIdTokensByFilter(filter, correlationId, tokenKeys) { - const idTokenKeys = (tokenKeys && tokenKeys.idToken) || this.getTokenKeys().idToken; - const idTokens = new Map(); - idTokenKeys.forEach((key) => { - if (!this.idTokenKeyMatchesFilter(key, { - clientId: this.clientId, - ...filter, - })) { - return; - } - const idToken = this.getIdTokenCredential(key, correlationId); - if (idToken && - this.credentialMatchesFilter(idToken, filter, correlationId)) { - idTokens.set(key, idToken); - } - }); - return idTokens; - } - /** - * Validate the cache key against filter before retrieving and parsing cache value - * @param key - * @param filter - * @returns - */ - idTokenKeyMatchesFilter(inputKey, filter) { - const key = inputKey.toLowerCase(); - if (filter.clientId && - key.indexOf(filter.clientId.toLowerCase()) === -1) { - return false; - } - if (filter.homeAccountId && - key.indexOf(filter.homeAccountId.toLowerCase()) === -1) { - return false; - } - return true; - } - /** - * Removes idToken from the cache - * @param key - */ - removeIdToken(key, correlationId) { - this.removeItem(key, correlationId); - } - /** - * Removes refresh token from the cache - * @param key - */ - removeRefreshToken(key, correlationId) { - this.removeItem(key, correlationId); - } - /** - * Retrieve AccessTokenEntity from cache - * @param account {AccountInfo} - * @param request {BaseAuthRequest} - * @param tokenKeys {?TokenKeys} - * @param performanceClient {?IPerformanceClient} - */ - getAccessToken(account, request, tokenKeys, targetRealm) { - const correlationId = request.correlationId; - this.commonLogger.trace("CacheManager - getAccessToken called", correlationId); - const scopes = ScopeSet.createSearchScopes(request.scopes); - const authScheme = request.authenticationScheme || - AuthenticationScheme.BEARER; - /* - * Distinguish between Bearer and PoP/SSH token cache types - * Cast to lowercase to handle "bearer" from ADFS - */ - const credentialType = authScheme && - authScheme.toLowerCase() !== - AuthenticationScheme.BEARER.toLowerCase() - ? CredentialType.ACCESS_TOKEN_WITH_AUTH_SCHEME - : CredentialType.ACCESS_TOKEN; - const accessTokenFilter = { - homeAccountId: account.homeAccountId, - environment: account.environment, - credentialType: credentialType, - clientId: this.clientId, - realm: targetRealm || account.tenantId, - target: scopes, - tokenType: authScheme, - keyId: request.sshKid, - }; - const accessTokenKeys = (tokenKeys && tokenKeys.accessToken) || - this.getTokenKeys().accessToken; - const accessTokens = []; - accessTokenKeys.forEach((key) => { - // Validate key - if (this.accessTokenKeyMatchesFilter(key, accessTokenFilter, true)) { - const accessToken = this.getAccessTokenCredential(key, correlationId); - // Validate value - if (accessToken && - this.credentialMatchesFilter(accessToken, accessTokenFilter, correlationId)) { - accessTokens.push(accessToken); - } - } - }); - const numAccessTokens = accessTokens.length; - if (numAccessTokens < 1) { - this.commonLogger.info("CacheManager:getAccessToken - No token found", correlationId); - return null; - } - else if (numAccessTokens > 1) { - this.commonLogger.info("CacheManager:getAccessToken - Multiple access tokens found, clearing them", correlationId); - accessTokens.forEach((accessToken) => { - this.removeAccessToken(this.generateCredentialKey(accessToken), correlationId); - }); - this.performanceClient.addFields({ multiMatchedAT: accessTokens.length }, correlationId); - return null; - } - this.commonLogger.info("CacheManager:getAccessToken - Returning access token", correlationId); - return accessTokens[0]; - } - /** - * Validate the cache key against filter before retrieving and parsing cache value - * @param key - * @param filter - * @param keyMustContainAllScopes - * @returns - */ - accessTokenKeyMatchesFilter(inputKey, filter, keyMustContainAllScopes) { - const key = inputKey.toLowerCase(); - if (filter.clientId && - key.indexOf(filter.clientId.toLowerCase()) === -1) { - return false; - } - if (filter.homeAccountId && - key.indexOf(filter.homeAccountId.toLowerCase()) === -1) { - return false; - } - if (filter.realm && key.indexOf(filter.realm.toLowerCase()) === -1) { - return false; - } - if (filter.target) { - const scopes = filter.target.asArray(); - for (let i = 0; i < scopes.length; i++) { - if (keyMustContainAllScopes && - !key.includes(scopes[i].toLowerCase())) { - // When performing a cache lookup a missing scope would be a cache miss - return false; - } - else if (!keyMustContainAllScopes && - key.includes(scopes[i].toLowerCase())) { - // When performing a cache write, any token with a subset of requested scopes should be replaced - return true; - } - } - } - return true; - } - /** - * Gets all access tokens matching the filter - * @param filter - * @returns - */ - getAccessTokensByFilter(filter, correlationId) { - const tokenKeys = this.getTokenKeys(); - const accessTokens = []; - tokenKeys.accessToken.forEach((key) => { - if (!this.accessTokenKeyMatchesFilter(key, filter, true)) { - return; - } - const accessToken = this.getAccessTokenCredential(key, correlationId); - if (accessToken && - this.credentialMatchesFilter(accessToken, filter, correlationId)) { - accessTokens.push(accessToken); - } - }); - return accessTokens; - } - /** - * Helper to retrieve the appropriate refresh token from cache - * @param account {AccountInfo} - * @param familyRT {boolean} - * @param tokenKeys {?TokenKeys} - * @param performanceClient {?IPerformanceClient} - * @param correlationId {?string} - */ - getRefreshToken(account, familyRT, correlationId, tokenKeys) { - this.commonLogger.trace("CacheManager - getRefreshToken called", correlationId); - const id = familyRT ? THE_FAMILY_ID : undefined; - const refreshTokenFilter = { - homeAccountId: account.homeAccountId, - environment: account.environment, - credentialType: CredentialType.REFRESH_TOKEN, - clientId: this.clientId, - familyId: id, - }; - const refreshTokenKeys = (tokenKeys && tokenKeys.refreshToken) || - this.getTokenKeys().refreshToken; - const refreshTokens = []; - refreshTokenKeys.forEach((key) => { - // Validate key - if (this.refreshTokenKeyMatchesFilter(key, refreshTokenFilter)) { - const refreshToken = this.getRefreshTokenCredential(key, correlationId); - // Validate value - if (refreshToken && - this.credentialMatchesFilter(refreshToken, refreshTokenFilter, correlationId)) { - refreshTokens.push(refreshToken); - } - } - }); - const numRefreshTokens = refreshTokens.length; - if (numRefreshTokens < 1) { - this.commonLogger.info("CacheManager:getRefreshToken - No refresh token found.", correlationId); - return null; - } - // address the else case after remove functions address environment aliases - if (numRefreshTokens > 1) { - this.performanceClient.addFields({ multiMatchedRT: numRefreshTokens }, correlationId); - } - this.commonLogger.info("CacheManager:getRefreshToken - returning refresh token", correlationId); - return refreshTokens[0]; - } - /** - * Validate the cache key against filter before retrieving and parsing cache value - * @param key - * @param filter - */ - refreshTokenKeyMatchesFilter(inputKey, filter) { - const key = inputKey.toLowerCase(); - if (filter.familyId && - key.indexOf(filter.familyId.toLowerCase()) === -1) { - return false; - } - // If familyId is used, clientId is not in the key - if (!filter.familyId && - filter.clientId && - key.indexOf(filter.clientId.toLowerCase()) === -1) { - return false; - } - if (filter.homeAccountId && - key.indexOf(filter.homeAccountId.toLowerCase()) === -1) { - return false; - } - return true; - } - /** - * Retrieve AppMetadataEntity from cache - */ - readAppMetadataFromCache(environment, correlationId) { - const appMetadataFilter = { - environment, - clientId: this.clientId, - }; - const appMetadata = this.getAppMetadataFilteredBy(appMetadataFilter, correlationId); - const appMetadataEntries = Object.keys(appMetadata).map((key) => appMetadata[key]); - const numAppMetadata = appMetadataEntries.length; - if (numAppMetadata < 1) { - return null; - } - else if (numAppMetadata > 1) { - throw ClientAuthError_createClientAuthError(multipleMatchingAppMetadata); - } - return appMetadataEntries[0]; - } - /** - * Return the family_id value associated with FOCI - * @param environment - * @param clientId - */ - isAppMetadataFOCI(environment, correlationId) { - const appMetadata = this.readAppMetadataFromCache(environment, correlationId); - return !!(appMetadata && appMetadata.familyId === THE_FAMILY_ID); - } - /** - * helper to match account ids - * @param value - * @param homeAccountId - */ - matchHomeAccountId(entity, homeAccountId) { - return !!(typeof entity.homeAccountId === "string" && - homeAccountId === entity.homeAccountId); - } - /** - * helper to match account ids - * @param entity - * @param localAccountId - * @returns - */ - matchLocalAccountIdFromTokenClaims(tokenClaims, localAccountId) { - const idTokenLocalAccountId = tokenClaims.oid || tokenClaims.sub; - return localAccountId === idTokenLocalAccountId; - } - matchLocalAccountIdFromTenantProfile(tenantProfile, localAccountId) { - return tenantProfile.localAccountId === localAccountId; - } - /** - * helper to match names - * @param entity - * @param name - * @returns true if the downcased name properties are present and match in the filter and the entity - */ - matchName(claims, name) { - return !!(name.toLowerCase() === claims.name?.toLowerCase()); - } - /** - * helper to match usernames - * @param entity - * @param username - * @returns - */ - matchUsername(cachedUsername, filterUsername) { - return !!(cachedUsername && - typeof cachedUsername === "string" && - filterUsername?.toLowerCase() === cachedUsername.toLowerCase()); - } - /** - * helper to match assertion - * @param value - * @param oboAssertion - */ - matchUserAssertionHash(entity, userAssertionHash) { - return !!(entity.userAssertionHash && - userAssertionHash === entity.userAssertionHash); - } - /** - * helper to match environment - * @param value - * @param environment - */ - matchEnvironment(entity, environment, correlationId) { - // Check static authority options first for cases where authority metadata has not been resolved and cached yet - if (this.staticAuthorityOptions) { - const staticAliases = getAliasesFromStaticSources(this.staticAuthorityOptions, this.commonLogger, correlationId); - if (staticAliases.includes(environment) && - staticAliases.includes(entity.environment)) { - return true; - } - } - // Query metadata cache if no static authority configuration has aliases that match enviroment - const cloudMetadata = this.getAuthorityMetadataByAlias(environment, correlationId); - if (cloudMetadata && - cloudMetadata.aliases.indexOf(entity.environment) > -1) { - return true; - } - return false; - } - /** - * helper to match credential type - * @param entity - * @param credentialType - */ - matchCredentialType(entity, credentialType) { - return (entity.credentialType && - credentialType.toLowerCase() === entity.credentialType.toLowerCase()); - } - /** - * helper to match client ids - * @param entity - * @param clientId - */ - matchClientId(entity, clientId) { - return !!(entity.clientId && clientId === entity.clientId); - } - /** - * helper to match family ids - * @param entity - * @param familyId - */ - matchFamilyId(entity, familyId) { - return !!(entity.familyId && familyId === entity.familyId); - } - /** - * helper to match realm - * @param entity - * @param realm - */ - matchRealm(entity, realm) { - return !!(entity.realm?.toLowerCase() === realm.toLowerCase()); - } - /** - * helper to match nativeAccountId - * @param entity - * @param nativeAccountId - * @returns boolean indicating the match result - */ - matchNativeAccountId(entity, nativeAccountId) { - return !!(entity.nativeAccountId && nativeAccountId === entity.nativeAccountId); - } - /** - * helper to match loginHint which can be either: - * 1. login_hint ID token claim - * 2. username in cached account object - * 3. upn in ID token claims - * @param entity - * @param loginHint - * @returns - */ - matchLoginHintFromTokenClaims(tokenClaims, loginHint) { - if (tokenClaims.login_hint === loginHint) { - return true; - } - if (tokenClaims.preferred_username === loginHint) { - return true; - } - if (tokenClaims.upn === loginHint) { - return true; - } - return false; - } - /** - * Helper to match sid - * @param entity - * @param sid - * @returns true if the sid claim is present and matches the filter - */ - matchSid(idTokenClaims, sid) { - return idTokenClaims.sid === sid; - } - matchAuthorityType(entity, authorityType) { - return !!(entity.authorityType && - authorityType.toLowerCase() === entity.authorityType.toLowerCase()); - } - /** - * Returns true if the target scopes are a subset of the current entity's scopes, false otherwise. - * @param entity - * @param target - */ - matchTarget(entity, target) { - const isNotAccessTokenCredential = entity.credentialType !== CredentialType.ACCESS_TOKEN && - entity.credentialType !== - CredentialType.ACCESS_TOKEN_WITH_AUTH_SCHEME; - if (isNotAccessTokenCredential || !entity.target) { - return false; - } - const entityScopeSet = ScopeSet.fromString(entity.target); - return entityScopeSet.containsScopeSet(target); - } - /** - * Returns true if the credential's tokenType or Authentication Scheme matches the one in the request, false otherwise - * @param entity - * @param tokenType - */ - matchTokenType(entity, tokenType) { - return !!(entity.tokenType && entity.tokenType === tokenType); - } - /** - * Returns true if the credential's keyId matches the one in the request, false otherwise - * @param entity - * @param keyId - */ - matchKeyId(entity, keyId) { - return !!(entity.keyId && entity.keyId === keyId); - } - /** - * returns if a given cache entity is of the type appmetadata - * @param key - */ - isAppMetadata(key) { - return key.indexOf(APP_METADATA) !== -1; - } - /** - * returns if a given cache entity is of the type authoritymetadata - * @param key - */ - isAuthorityMetadata(key) { - return key.indexOf(AUTHORITY_METADATA_CACHE_KEY) !== -1; - } - /** - * returns cache key used for cloud instance metadata - */ - generateAuthorityMetadataCacheKey(authority) { - return `${AUTHORITY_METADATA_CACHE_KEY}-${this.clientId}-${authority}`; - } - /** - * Helper to convert serialized data to object - * @param obj - * @param json - */ - static toObject(obj, json) { - for (const propertyName in json) { - obj[propertyName] = json[propertyName]; - } - return obj; - } -} -/** @internal */ -class DefaultStorageClass extends CacheManager { - async setAccount() { - throw ClientAuthError_createClientAuthError(methodNotImplemented); - } - getAccount() { - throw ClientAuthError_createClientAuthError(methodNotImplemented); - } - async setIdTokenCredential() { - throw ClientAuthError_createClientAuthError(methodNotImplemented); - } - getIdTokenCredential() { - throw ClientAuthError_createClientAuthError(methodNotImplemented); - } - async setAccessTokenCredential() { - throw ClientAuthError_createClientAuthError(methodNotImplemented); - } - getAccessTokenCredential() { - throw ClientAuthError_createClientAuthError(methodNotImplemented); - } - async setRefreshTokenCredential() { - throw ClientAuthError_createClientAuthError(methodNotImplemented); - } - getRefreshTokenCredential() { - throw ClientAuthError_createClientAuthError(methodNotImplemented); - } - setAppMetadata() { - throw ClientAuthError_createClientAuthError(methodNotImplemented); - } - getAppMetadata() { - throw ClientAuthError_createClientAuthError(methodNotImplemented); - } - setServerTelemetry() { - throw ClientAuthError_createClientAuthError(methodNotImplemented); - } - getServerTelemetry() { - throw ClientAuthError_createClientAuthError(methodNotImplemented); - } - setAuthorityMetadata() { - throw ClientAuthError_createClientAuthError(methodNotImplemented); - } - getAuthorityMetadata() { - throw ClientAuthError_createClientAuthError(methodNotImplemented); - } - getAuthorityMetadataKeys() { - throw ClientAuthError_createClientAuthError(methodNotImplemented); - } - setThrottlingCache() { - throw ClientAuthError_createClientAuthError(methodNotImplemented); - } - getThrottlingCache() { - throw ClientAuthError_createClientAuthError(methodNotImplemented); - } - removeItem() { - throw ClientAuthError_createClientAuthError(methodNotImplemented); - } - getKeys() { - throw ClientAuthError_createClientAuthError(methodNotImplemented); - } - getAccountKeys() { - throw ClientAuthError_createClientAuthError(methodNotImplemented); - } - getTokenKeys() { - throw ClientAuthError_createClientAuthError(methodNotImplemented); - } - generateCredentialKey() { - throw ClientAuthError_createClientAuthError(methodNotImplemented); - } - generateAccountKey() { - throw ClientAuthError_createClientAuthError(methodNotImplemented); - } +/* + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. + */ +/** + * Creates default headers for requests to token endpoint + */ +function createTokenRequestHeaders(logger, preventCorsPreflight, ccsCred) { + const headers = {}; + headers[HeaderNames.CONTENT_TYPE] = URL_FORM_CONTENT_TYPE; + if (!preventCorsPreflight && ccsCred) { + switch (ccsCred.type) { + case CcsCredentialType.HOME_ACCOUNT_ID: + try { + const clientInfo = buildClientInfoFromHomeAccountId(ccsCred.credential); + headers[HeaderNames.CCS_HEADER] = `Oid:${clientInfo.uid}@${clientInfo.utid}`; + } + catch (e) { + logger.verbose(`Could not parse home account ID for CCS Header: '${e}'`, ""); + } + break; + case CcsCredentialType.UPN: + headers[HeaderNames.CCS_HEADER] = `UPN: ${ccsCred.credential}`; + break; + } + } + return headers; } - - -//# sourceMappingURL=CacheManager.mjs.map - -;// CONCATENATED MODULE: ./node_modules/@azure/msal-common/dist/telemetry/performance/PerformanceEvent.mjs -/*! @azure/msal-common v16.3.0 2026-03-13 */ - -/* - * Copyright (c) Microsoft Corporation. All rights reserved. - * Licensed under the MIT License. - */ -/** - * State of the performance event. - * - * @export - * @enum {number} - */ -const PerformanceEventStatus = { - NotStarted: 0, - InProgress: 1, - Completed: 2, -}; -/** - * Prefix used to mark telemetry field names as dynamic. - * Fields with this prefix in addFields/incrementFields calls will be routed - * to the PerformanceEvent.ext sub-object. - */ -const EXT_FIELD_PREFIX = "ext."; -const IntFields = new Set([ - "accessTokenSize", - "durationMs", - "idTokenSize", - "matsSilentStatus", - "matsHttpStatus", - "refreshTokenSize", - "startTimeMs", - "status", - "multiMatchedAT", - "multiMatchedID", - "multiMatchedRT", - "unencryptedCacheCount", - "encryptedCacheExpiredCount", - "oldAccountCount", - "oldAccessCount", - "oldIdCount", - "oldRefreshCount", - "currAccountCount", - "currAccessCount", - "currIdCount", - "currRefreshCount", - "expiredCacheRemovedCount", - "upgradedCacheCount", - "networkRtt", - "redirectBridgeTimeoutMs", - "redirectBridgeMessageVersion", -]); - - -//# sourceMappingURL=PerformanceEvent.mjs.map - -;// CONCATENATED MODULE: ./node_modules/@azure/msal-common/dist/telemetry/performance/StubPerformanceClient.mjs -/*! @azure/msal-common v16.3.0 2026-03-13 */ - - - -/* - * Copyright (c) Microsoft Corporation. All rights reserved. - * Licensed under the MIT License. - */ -class StubPerformanceClient_StubPerformanceClient { - generateId() { - return "callback-id"; - } - startMeasurement(measureName, correlationId) { - return { - end: () => null, - discard: () => { }, - add: () => { }, - increment: () => { }, - event: { - eventId: this.generateId(), - status: PerformanceEventStatus.InProgress, - authority: "", - libraryName: "", - libraryVersion: "", - clientId: "", - name: measureName, - startTimeMs: Date.now(), - correlationId: correlationId || "", - }, - }; - } - endMeasurement() { - return null; - } - discardMeasurements() { - return; - } - removePerformanceCallback() { - return true; - } - addPerformanceCallback() { - return ""; - } - emitEvents() { - return; - } - addFields() { - return; - } - incrementFields() { - return; - } - cacheEventByCorrelationId() { - return; - } +/** + * Creates query string for the /token request + * @param request + */ +function createTokenQueryParameters(request, clientId, redirectUri, performanceClient) { + const parameters = new Map(); + if (request.embeddedClientId) { + addBrokerParameters(parameters, clientId, redirectUri); + } + if (request.extraQueryParameters) { + addExtraParameters(parameters, request.extraQueryParameters); + } + addCorrelationId(parameters, request.correlationId); + instrumentBrokerParams(parameters, request.correlationId, performanceClient); + return mapToQueryString(parameters); +} +/** + * Http post to token endpoint + * @param tokenEndpoint + * @param queryString + * @param headers + * @param thumbprint + */ +async function executePostToTokenEndpoint(tokenEndpoint, queryString, headers, thumbprint, correlationId, cacheManager, networkClient, logger, performanceClient, serverTelemetryManager) { + const response = await sendPostRequest(thumbprint, tokenEndpoint, { body: queryString, headers: headers }, correlationId, cacheManager, networkClient, logger, performanceClient); + if (serverTelemetryManager && + response.status < 500 && + response.status !== 429) { + // Telemetry data successfully logged by server, clear Telemetry cache + serverTelemetryManager.clearTelemetryCache(); + } + return response; +} +/** + * Wraps sendPostRequestAsync with necessary preflight and postflight logic + * @param thumbprint - Request thumbprint for throttling + * @param tokenEndpoint - Endpoint to make the POST to + * @param options - Body and Headers to include on the POST request + * @param correlationId - CorrelationId for telemetry + * @param cacheManager - Cache manager instance + * @param networkClient - Network module instance + * @param logger - Logger instance + * @param performanceClient - Performance client instance + */ +async function sendPostRequest(thumbprint, tokenEndpoint, options, correlationId, cacheManager, networkClient, logger, performanceClient) { + ThrottlingUtils.preProcess(cacheManager, thumbprint, correlationId); + let response; + try { + response = await invokeAsync((networkClient.sendPostRequestAsync.bind(networkClient)), NetworkClientSendPostRequestAsync, logger, performanceClient, correlationId)(tokenEndpoint, options); + const responseHeaders = response.headers || {}; + performanceClient?.addFields({ + refreshTokenSize: response.body.refresh_token?.length || 0, + httpVerToken: responseHeaders[HeaderNames.X_MS_HTTP_VERSION] || "", + requestId: responseHeaders[HeaderNames.X_MS_REQUEST_ID] || "", + }, correlationId); + } + catch (e) { + if (e instanceof NetworkError) { + const responseHeaders = e.responseHeaders; + if (responseHeaders) { + performanceClient?.addFields({ + httpVerToken: responseHeaders[HeaderNames.X_MS_HTTP_VERSION] || + "", + requestId: responseHeaders[HeaderNames.X_MS_REQUEST_ID] || "", + contentTypeHeader: responseHeaders[HeaderNames.CONTENT_TYPE] || + undefined, + contentLengthHeader: responseHeaders[HeaderNames.CONTENT_LENGTH] || + undefined, + httpStatus: e.httpStatus, + }, correlationId); + } + throw e.error; + } + if (e instanceof AuthError) { + throw e; + } + else { + throw ClientAuthError_createClientAuthError(networkError); + } + } + ThrottlingUtils.postProcess(cacheManager, thumbprint, response, correlationId); + return response; } -//# sourceMappingURL=StubPerformanceClient.mjs.map +//# sourceMappingURL=Token.mjs.map -;// CONCATENATED MODULE: ./node_modules/@azure/msal-common/dist/config/ClientConfiguration.mjs +;// CONCATENATED MODULE: ./node_modules/@azure/msal-common/dist/authority/AuthorityFactory.mjs /*! @azure/msal-common v16.3.0 2026-03-13 */ @@ -50565,439 +51692,336 @@ class StubPerformanceClient_StubPerformanceClient { - - - - - -/* - * Copyright (c) Microsoft Corporation. All rights reserved. - * Licensed under the MIT License. - */ -const DEFAULT_SYSTEM_OPTIONS = { - tokenRenewalOffsetSeconds: DEFAULT_TOKEN_RENEWAL_OFFSET_SEC, - preventCorsPreflight: false, -}; -const DEFAULT_LOGGER_IMPLEMENTATION = { - loggerCallback: () => { - // allow users to not set loggerCallback - }, - piiLoggingEnabled: false, - logLevel: LogLevel.Info, - correlationId: "", -}; -const DEFAULT_NETWORK_IMPLEMENTATION = { - async sendGetRequestAsync() { - throw ClientAuthError_createClientAuthError(methodNotImplemented); - }, - async sendPostRequestAsync() { - throw ClientAuthError_createClientAuthError(methodNotImplemented); - }, -}; -const DEFAULT_LIBRARY_INFO = { - sku: SKU, - version: packageMetadata_version, - cpu: "", - os: "", -}; -const DEFAULT_CLIENT_CREDENTIALS = { - clientSecret: "", - clientAssertion: undefined, -}; -const DEFAULT_AZURE_CLOUD_OPTIONS = { - azureCloudInstance: AzureCloudInstance.None, - tenant: `${DEFAULT_COMMON_TENANT}`, -}; -const DEFAULT_TELEMETRY_OPTIONS = { - application: { - appName: "", - appVersion: "", - }, -}; -/** - * Function that sets the default options when not explicitly configured from app developer - * - * @param Configuration - * - * @returns Configuration - */ -function buildClientConfiguration({ authOptions: userAuthOptions, systemOptions: userSystemOptions, loggerOptions: userLoggerOption, storageInterface: storageImplementation, networkInterface: networkImplementation, cryptoInterface: cryptoImplementation, clientCredentials: clientCredentials, libraryInfo: libraryInfo, telemetry: telemetry, serverTelemetryManager: serverTelemetryManager, persistencePlugin: persistencePlugin, serializableCache: serializableCache, }) { - const loggerOptions = { - ...DEFAULT_LOGGER_IMPLEMENTATION, - ...userLoggerOption, - }; - return { - authOptions: buildAuthOptions(userAuthOptions), - systemOptions: { ...DEFAULT_SYSTEM_OPTIONS, ...userSystemOptions }, - loggerOptions: loggerOptions, - storageInterface: storageImplementation || - new DefaultStorageClass(userAuthOptions.clientId, ICrypto_DEFAULT_CRYPTO_IMPLEMENTATION, new Logger_Logger(loggerOptions), new StubPerformanceClient_StubPerformanceClient()), - networkInterface: networkImplementation || DEFAULT_NETWORK_IMPLEMENTATION, - cryptoInterface: cryptoImplementation || ICrypto_DEFAULT_CRYPTO_IMPLEMENTATION, - clientCredentials: clientCredentials || DEFAULT_CLIENT_CREDENTIALS, - libraryInfo: { ...DEFAULT_LIBRARY_INFO, ...libraryInfo }, - telemetry: { ...DEFAULT_TELEMETRY_OPTIONS, ...telemetry }, - serverTelemetryManager: serverTelemetryManager || null, - persistencePlugin: persistencePlugin || null, - serializableCache: serializableCache || null, - }; -} -/** - * Construct authoptions from the client and platform passed values - * @param authOptions - */ -function buildAuthOptions(authOptions) { - return { - clientCapabilities: [], - azureCloudOptions: DEFAULT_AZURE_CLOUD_OPTIONS, - instanceAware: false, - isMcp: false, - ...authOptions, - }; -} -/** - * Returns true if config has protocolMode set to ProtocolMode.OIDC, false otherwise - * @param ClientConfiguration - */ -function isOidcProtocolMode(config) { - return (config.authOptions.authority.options.protocolMode === ProtocolMode_ProtocolMode.OIDC); +/* + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. + */ +/** + * Create an authority object of the correct type based on the url + * Performs basic authority validation - checks to see if the authority is of a valid type (i.e. aad, b2c, adfs) + * + * Also performs endpoint discovery. + * + * @param authorityUri + * @param networkClient + * @param cacheManager + * @param authorityOptions + * @param logger + * @param correlationId + * @param performanceClient + * @internal + */ +async function createDiscoveredInstance(authorityUri, networkClient, cacheManager, authorityOptions, logger, correlationId, performanceClient) { + const authorityUriFinal = Authority_Authority.transformCIAMAuthority(formatAuthorityUri(authorityUri)); + // Initialize authority and perform discovery endpoint check. + const acquireTokenAuthority = new Authority_Authority(authorityUriFinal, networkClient, cacheManager, authorityOptions, logger, correlationId, performanceClient); + try { + await invokeAsync(acquireTokenAuthority.resolveEndpointsAsync.bind(acquireTokenAuthority), AuthorityResolveEndpointsAsync, logger, performanceClient, correlationId)(); + return acquireTokenAuthority; + } + catch (e) { + throw ClientAuthError_createClientAuthError(endpointResolutionError); + } } -//# sourceMappingURL=ClientConfiguration.mjs.map +//# sourceMappingURL=AuthorityFactory.mjs.map -;// CONCATENATED MODULE: ./node_modules/@azure/msal-common/dist/error/InteractionRequiredAuthErrorCodes.mjs +;// CONCATENATED MODULE: ./node_modules/@azure/msal-common/dist/client/AuthorizationCodeClient.mjs /*! @azure/msal-common v16.3.0 2026-03-13 */ -/* - * Copyright (c) Microsoft Corporation. All rights reserved. - * Licensed under the MIT License. - */ -/** - * MSAL-defined interaction required error code indicating no tokens are found in cache. - * @public - */ -const noTokensFound = "no_tokens_found"; -/** - * MSAL-defined error code indicating a native account is unavailable on the platform. - * @public - */ -const nativeAccountUnavailable = "native_account_unavailable"; -/** - * MSAL-defined error code indicating the refresh token has expired and user interaction is needed. - * @public - */ -const refreshTokenExpired = "refresh_token_expired"; -/** - * MSAL-defined error code indicating UI/UX is not allowed (e.g., blocked by policy), requiring alternate interaction. - * @public - */ -const uxNotAllowed = "ux_not_allowed"; -/** - * Server-originated error code indicating interaction is required to complete the request. - * @public - */ -const interactionRequired = "interaction_required"; -/** - * Server-originated error code indicating user consent is required. - * @public - */ -const consentRequired = "consent_required"; -/** - * Server-originated error code indicating user login is required. - * @public - */ -const loginRequired = "login_required"; -/** - * Server-originated error code indicating the token is invalid or corrupted. - * @public - */ -const badToken = "bad_token"; -/** - * Server-originated error code indicating the user is in an interrupted state and interaction is required. - * @public - */ -const interruptedUser = "interrupted_user"; - -//# sourceMappingURL=InteractionRequiredAuthErrorCodes.mjs.map -;// CONCATENATED MODULE: ./node_modules/@azure/msal-common/dist/error/InteractionRequiredAuthError.mjs -/*! @azure/msal-common v16.3.0 2026-03-13 */ -/* - * Copyright (c) Microsoft Corporation. All rights reserved. - * Licensed under the MIT License. - */ -/** - * InteractionRequiredServerErrorMessage contains string constants used by error codes and messages returned by the server indicating interaction is required - */ -const InteractionRequiredServerErrorMessage = [ - interactionRequired, - consentRequired, - loginRequired, - badToken, - uxNotAllowed, - interruptedUser, -]; -const InteractionRequiredAuthSubErrorMessage = [ - "message_only", - "additional_action", - "basic_action", - "user_password_expired", - "consent_required", - "bad_token", - "ux_not_allowed", - "interrupted_user", -]; -/** - * Error thrown when user interaction is required. - */ -class InteractionRequiredAuthError_InteractionRequiredAuthError extends AuthError { - constructor(errorCode, errorMessage, subError, timestamp, traceId, correlationId, claims, errorNo) { - super(errorCode, errorMessage, subError); - Object.setPrototypeOf(this, InteractionRequiredAuthError_InteractionRequiredAuthError.prototype); - this.timestamp = timestamp || ""; - this.traceId = traceId || ""; - this.correlationId = correlationId || ""; - this.claims = claims || ""; - this.name = "InteractionRequiredAuthError"; - this.errorNo = errorNo; - } -} -/** - * Helper function used to determine if an error thrown by the server requires interaction to resolve - * @param errorCode - * @param errorString - * @param subError - */ -function InteractionRequiredAuthError_isInteractionRequiredError(errorCode, errorString, subError) { - const isInteractionRequiredErrorCode = !!errorCode && - InteractionRequiredServerErrorMessage.indexOf(errorCode) > -1; - const isInteractionRequiredSubError = !!subError && - InteractionRequiredAuthSubErrorMessage.indexOf(subError) > -1; - const isInteractionRequiredErrorDesc = !!errorString && - InteractionRequiredServerErrorMessage.some((irErrorCode) => { - return errorString.indexOf(irErrorCode) > -1; - }); - return (isInteractionRequiredErrorCode || - isInteractionRequiredErrorDesc || - isInteractionRequiredSubError); -} -/** - * Creates an InteractionRequiredAuthError - */ -function createInteractionRequiredAuthError(errorCode, errorMessage) { - return new InteractionRequiredAuthError_InteractionRequiredAuthError(errorCode, errorMessage); -} -//# sourceMappingURL=InteractionRequiredAuthError.mjs.map -;// CONCATENATED MODULE: ./node_modules/@azure/msal-common/dist/utils/ProtocolUtils.mjs -/*! @azure/msal-common v16.3.0 2026-03-13 */ -/* - * Copyright (c) Microsoft Corporation. All rights reserved. - * Licensed under the MIT License. - */ -/** - * Appends user state with random guid, or returns random guid. - * @param cryptoObj - * @param userState - * @param meta - */ -function setRequestState(cryptoObj, userState, meta) { - const libraryState = generateLibraryState(cryptoObj, meta); - return userState - ? `${libraryState}${RESOURCE_DELIM}${userState}` - : libraryState; -} -/** - * Generates the state value used by the common library. - * @param cryptoObj - * @param meta - */ -function generateLibraryState(cryptoObj, meta) { - if (!cryptoObj) { - throw createClientAuthError(noCryptoObject); - } - // Create a state object containing a unique id and the timestamp of the request creation - const stateObj = { - id: cryptoObj.createNewGuid(), - }; - if (meta) { - stateObj.meta = meta; - } - const stateString = JSON.stringify(stateObj); - return cryptoObj.base64Encode(stateString); -} -/** - * Parses the state into the RequestStateObject, which contains the LibraryState info and the state passed by the user. - * @param base64Decode - * @param state - */ -function parseRequestState(base64Decode, state) { - if (!base64Decode) { - throw ClientAuthError_createClientAuthError(ClientAuthErrorCodes_noCryptoObject); - } - if (!state) { - throw ClientAuthError_createClientAuthError(ClientAuthErrorCodes_invalidState); - } - try { - // Split the state between library state and user passed state and decode them separately - const splitState = state.split(Constants_RESOURCE_DELIM); - const libraryState = splitState[0]; - const userState = splitState.length > 1 - ? splitState.slice(1).join(Constants_RESOURCE_DELIM) - : ""; - const libraryStateString = base64Decode(libraryState); - const libraryStateObj = JSON.parse(libraryStateString); - return { - userRequestState: userState || "", - libraryState: libraryStateObj, - }; - } - catch (e) { - throw ClientAuthError_createClientAuthError(ClientAuthErrorCodes_invalidState); - } -} -//# sourceMappingURL=ProtocolUtils.mjs.map -;// CONCATENATED MODULE: ./node_modules/@azure/msal-common/dist/crypto/PopTokenGenerator.mjs -/*! @azure/msal-common v16.3.0 2026-03-13 */ -/* - * Copyright (c) Microsoft Corporation. All rights reserved. - * Licensed under the MIT License. - */ -const KeyLocation = { - SW: "sw"}; -/** @internal */ -class PopTokenGenerator { - constructor(cryptoUtils, performanceClient) { - this.cryptoUtils = cryptoUtils; - this.performanceClient = performanceClient; - } - /** - * Generates the req_cnf validated at the RP in the POP protocol for SHR parameters - * and returns an object containing the keyid, the full req_cnf string and the req_cnf string hash - * @param request - * @returns - */ - async generateCnf(request, logger) { - const reqCnf = await invokeAsync(this.generateKid.bind(this), PopTokenGenerateCnf, logger, this.performanceClient, request.correlationId)(request); - const reqCnfString = this.cryptoUtils.base64UrlEncode(JSON.stringify(reqCnf)); - return { - kid: reqCnf.kid, - reqCnfString, - }; - } - /** - * Generates key_id for a SHR token request - * @param request - * @returns - */ - async generateKid(request) { - const kidThumbprint = await this.cryptoUtils.getPublicKeyThumbprint(request); - return { - kid: kidThumbprint, - xms_ksl: KeyLocation.SW, - }; - } - /** - * Signs the POP access_token with the local generated key-pair - * @param accessToken - * @param request - * @returns - */ - async signPopToken(accessToken, keyId, request) { - return this.signPayload(accessToken, keyId, request); - } - /** - * Utility function to generate the signed JWT for an access_token - * @param payload - * @param kid - * @param request - * @param claims - * @returns - */ - async signPayload(payload, keyId, request, claims) { - // Deconstruct request to extract SHR parameters - const { resourceRequestMethod, resourceRequestUri, shrClaims, shrNonce, shrOptions, } = request; - const resourceUrlString = resourceRequestUri - ? new UrlString(resourceRequestUri) - : undefined; - const resourceUrlComponents = resourceUrlString?.getUrlComponents(); - return this.cryptoUtils.signJwt({ - at: payload, - ts: nowSeconds(), - m: resourceRequestMethod?.toUpperCase(), - u: resourceUrlComponents?.HostNameAndPort, - nonce: shrNonce || this.cryptoUtils.createNewGuid(), - p: resourceUrlComponents?.AbsolutePath, - q: resourceUrlComponents?.QueryString - ? [[], resourceUrlComponents.QueryString] - : undefined, - client_claims: shrClaims || undefined, - ...claims, - }, keyId, shrOptions, request.correlationId); - } +/* + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. + */ +/** + * Oauth2.0 Authorization Code client + * @internal + */ +class AuthorizationCodeClient { + constructor(configuration, performanceClient) { + // Flag to indicate if client is for hybrid spa auth code redemption + this.includeRedirectUri = true; + // Set the configuration + this.config = buildClientConfiguration(configuration); + // Initialize the logger + this.logger = new Logger_Logger(this.config.loggerOptions, packageMetadata_name, packageMetadata_version); + // Initialize crypto + this.cryptoUtils = this.config.cryptoInterface; + // Initialize storage interface + this.cacheManager = this.config.storageInterface; + // Set the network interface + this.networkClient = this.config.networkInterface; + // Set TelemetryManager + this.serverTelemetryManager = this.config.serverTelemetryManager; + // set Authority + this.authority = this.config.authOptions.authority; + // set performance telemetry client + this.performanceClient = performanceClient; + this.oidcDefaultScopes = + this.config.authOptions.authority.options.OIDCOptions?.defaultScopes; + } + /** + * API to acquire a token in exchange of 'authorization_code` acquired by the user in the first leg of the + * authorization_code_grant + * @param request + */ + async acquireToken(request, apiId, authCodePayload) { + if (!request.code) { + throw ClientAuthError_createClientAuthError(requestCannotBeMade); + } + // Check for new cloud instance + if (authCodePayload && authCodePayload.cloud_instance_host_name) { + await invokeAsync(this.updateTokenEndpointAuthority.bind(this), UpdateTokenEndpointAuthority, this.logger, this.performanceClient, request.correlationId)(authCodePayload.cloud_instance_host_name, request.correlationId); + } + const reqTimestamp = nowSeconds(); + const response = await invokeAsync(this.executeTokenRequest.bind(this), AuthClientExecuteTokenRequest, this.logger, this.performanceClient, request.correlationId)(this.authority, request, this.serverTelemetryManager); + // Retrieve requestId from response headers + const requestId = response.headers?.[HeaderNames.X_MS_REQUEST_ID]; + const responseHandler = new ResponseHandler(this.config.authOptions.clientId, this.cacheManager, this.cryptoUtils, this.logger, this.performanceClient, this.config.serializableCache, this.config.persistencePlugin); + // Validate response. This function throws a server error if an error is returned by the server. + responseHandler.validateTokenResponse(response.body, request.correlationId); + return invokeAsync(responseHandler.handleServerTokenResponse.bind(responseHandler), HandleServerTokenResponse, this.logger, this.performanceClient, request.correlationId)(response.body, this.authority, reqTimestamp, request, apiId, authCodePayload, undefined, undefined, undefined, requestId); + } + /** + * Used to log out the current user, and redirect the user to the postLogoutRedirectUri. + * Default behaviour is to redirect the user to `window.location.href`. + * @param authorityUri + */ + getLogoutUri(logoutRequest) { + // Throw error if logoutRequest is null/undefined + if (!logoutRequest) { + throw ClientConfigurationError_createClientConfigurationError(logoutRequestEmpty); + } + const queryString = this.createLogoutUrlQueryString(logoutRequest); + // Construct logout URI + return UrlString.appendQueryString(this.authority.endSessionEndpoint, queryString); + } + /** + * Executes POST request to token endpoint + * @param authority + * @param request + */ + async executeTokenRequest(authority, request, serverTelemetryManager) { + const queryParametersString = createTokenQueryParameters(request, this.config.authOptions.clientId, this.config.authOptions.redirectUri, this.performanceClient); + const endpoint = UrlString.appendQueryString(authority.tokenEndpoint, queryParametersString); + const requestBody = await invokeAsync(this.createTokenRequestBody.bind(this), AuthClientCreateTokenRequestBody, this.logger, this.performanceClient, request.correlationId)(request); + let ccsCredential = undefined; + if (request.clientInfo) { + try { + const clientInfo = buildClientInfo(request.clientInfo, this.cryptoUtils.base64Decode); + ccsCredential = { + credential: `${clientInfo.uid}${CLIENT_INFO_SEPARATOR}${clientInfo.utid}`, + type: CcsCredentialType.HOME_ACCOUNT_ID, + }; + } + catch (e) { + this.logger.verbose(`Could not parse client info for CCS Header: '${e}'`, request.correlationId); + } + } + const headers = createTokenRequestHeaders(this.logger, this.config.systemOptions.preventCorsPreflight, ccsCredential || request.ccsCredential); + const thumbprint = getRequestThumbprint(this.config.authOptions.clientId, request); + return invokeAsync(executePostToTokenEndpoint, AuthorizationCodeClientExecutePostToTokenEndpoint, this.logger, this.performanceClient, request.correlationId)(endpoint, requestBody, headers, thumbprint, request.correlationId, this.cacheManager, this.networkClient, this.logger, this.performanceClient, serverTelemetryManager); + } + /** + * Generates a map for all the params to be sent to the service + * @param request + */ + async createTokenRequestBody(request) { + const parameters = new Map(); + addClientId(parameters, request.embeddedClientId || + request.extraParameters?.[CLIENT_ID] || + this.config.authOptions.clientId); + /* + * For hybrid spa flow, there will be a code but no verifier + * In this scenario, don't include redirect uri as auth code will not be bound to redirect URI + */ + if (!this.includeRedirectUri) { + // Just validate + if (!request.redirectUri) { + throw ClientConfigurationError_createClientConfigurationError(redirectUriEmpty); + } + } + else { + // Validate and include redirect uri + addRedirectUri(parameters, request.redirectUri); + } + // Add scope array, parameter builder will add default scopes and dedupe + addScopes(parameters, request.scopes, true, this.oidcDefaultScopes); + addResource(parameters, request.resource); + // add code: user set, not validated + addAuthorizationCode(parameters, request.code); + // Add library metadata + addLibraryInfo(parameters, this.config.libraryInfo); + addApplicationTelemetry(parameters, this.config.telemetry.application); + addThrottling(parameters); + if (this.serverTelemetryManager && !isOidcProtocolMode(this.config)) { + addServerTelemetry(parameters, this.serverTelemetryManager); + } + // add code_verifier if passed + if (request.codeVerifier) { + addCodeVerifier(parameters, request.codeVerifier); + } + if (this.config.clientCredentials.clientSecret) { + addClientSecret(parameters, this.config.clientCredentials.clientSecret); + } + if (this.config.clientCredentials.clientAssertion) { + const clientAssertion = this.config.clientCredentials.clientAssertion; + addClientAssertion(parameters, await getClientAssertion(clientAssertion.assertion, this.config.authOptions.clientId, request.resourceRequestUri)); + addClientAssertionType(parameters, clientAssertion.assertionType); + } + addGrantType(parameters, GrantType.AUTHORIZATION_CODE_GRANT); + addClientInfo(parameters); + if (request.authenticationScheme === AuthenticationScheme.POP) { + const popTokenGenerator = new PopTokenGenerator(this.cryptoUtils, this.performanceClient); + let reqCnfData; + if (!request.popKid) { + const generatedReqCnfData = await invokeAsync(popTokenGenerator.generateCnf.bind(popTokenGenerator), PopTokenGenerateCnf, this.logger, this.performanceClient, request.correlationId)(request, this.logger); + reqCnfData = generatedReqCnfData.reqCnfString; + } + else { + reqCnfData = this.cryptoUtils.encodeKid(request.popKid); + } + // SPA PoP requires full Base64Url encoded req_cnf string (unhashed) + addPopToken(parameters, reqCnfData); + } + else if (request.authenticationScheme === AuthenticationScheme.SSH) { + if (request.sshJwk) { + addSshJwk(parameters, request.sshJwk); + } + else { + throw ClientConfigurationError_createClientConfigurationError(missingSshJwk); + } + } + if (!StringUtils_StringUtils.isEmptyObj(request.claims) || + (this.config.authOptions.clientCapabilities && + this.config.authOptions.clientCapabilities.length > 0)) { + addClaims(parameters, request.claims, this.config.authOptions.clientCapabilities); + } + let ccsCred = undefined; + if (request.clientInfo) { + try { + const clientInfo = buildClientInfo(request.clientInfo, this.cryptoUtils.base64Decode); + ccsCred = { + credential: `${clientInfo.uid}${CLIENT_INFO_SEPARATOR}${clientInfo.utid}`, + type: CcsCredentialType.HOME_ACCOUNT_ID, + }; + } + catch (e) { + this.logger.verbose(`Could not parse client info for CCS Header: '${e}'`, request.correlationId); + } + } + else { + ccsCred = request.ccsCredential; + } + // Adds these as parameters in the request instead of headers to prevent CORS preflight request + if (this.config.systemOptions.preventCorsPreflight && ccsCred) { + switch (ccsCred.type) { + case CcsCredentialType.HOME_ACCOUNT_ID: + try { + const clientInfo = buildClientInfoFromHomeAccountId(ccsCred.credential); + addCcsOid(parameters, clientInfo); + } + catch (e) { + this.logger.verbose(`Could not parse home account ID for CCS Header: '${e}'`, request.correlationId); + } + break; + case CcsCredentialType.UPN: + addCcsUpn(parameters, ccsCred.credential); + break; + } + } + if (request.embeddedClientId) { + addBrokerParameters(parameters, this.config.authOptions.clientId, this.config.authOptions.redirectUri); + } + if (request.extraParameters) { + addExtraParameters(parameters, request.extraParameters); + } + // Add hybrid spa parameters if not already provided + if (request.enableSpaAuthorizationCode && + (!request.extraParameters || + !request.extraParameters[RETURN_SPA_CODE])) { + addExtraParameters(parameters, { + [RETURN_SPA_CODE]: "1", + }); + } + instrumentBrokerParams(parameters, request.correlationId, this.performanceClient); + return mapToQueryString(parameters); + } + /** + * This API validates the `EndSessionRequest` and creates a URL + * @param request + */ + createLogoutUrlQueryString(request) { + const parameters = new Map(); + if (request.postLogoutRedirectUri) { + addPostLogoutRedirectUri(parameters, request.postLogoutRedirectUri); + } + if (request.correlationId) { + addCorrelationId(parameters, request.correlationId); + } + if (request.idTokenHint) { + addIdTokenHint(parameters, request.idTokenHint); + } + if (request.state) { + addState(parameters, request.state); + } + if (request.logoutHint) { + addLogoutHint(parameters, request.logoutHint); + } + if (request.extraQueryParameters) { + addExtraParameters(parameters, request.extraQueryParameters); + } + if (this.config.authOptions.instanceAware) { + addInstanceAware(parameters); + } + return mapToQueryString(parameters); + } + /** + * Updates the authority to the cloud instance provided in the authorization response + * @param cloudInstanceHostName - cloud instance host name from authorization code payload + * @param correlationId - request correlation id + */ + async updateTokenEndpointAuthority(cloudInstanceHostName, correlationId) { + const cloudInstanceAuthorityUri = `https://${cloudInstanceHostName}/${this.authority.tenant}/`; + const cloudInstanceAuthority = await createDiscoveredInstance(cloudInstanceAuthorityUri, this.networkClient, this.cacheManager, this.authority.options, this.logger, correlationId, this.performanceClient); + this.authority = cloudInstanceAuthority; + } } -//# sourceMappingURL=PopTokenGenerator.mjs.map +//# sourceMappingURL=AuthorizationCodeClient.mjs.map -;// CONCATENATED MODULE: ./node_modules/@azure/msal-common/dist/cache/persistence/TokenCacheContext.mjs +;// CONCATENATED MODULE: ./node_modules/@azure/msal-common/dist/client/RefreshTokenClient.mjs /*! @azure/msal-common v16.3.0 2026-03-13 */ -/* - * Copyright (c) Microsoft Corporation. All rights reserved. - * Licensed under the MIT License. - */ -/** - * This class instance helps track the memory changes facilitating - * decisions to read from and write to the persistent cache - */ class TokenCacheContext { - constructor(tokenCache, hasChanged) { - this.cache = tokenCache; - this.hasChanged = hasChanged; - } - /** - * boolean which indicates the changes in cache - */ - get cacheHasChanged() { - return this.hasChanged; - } - /** - * function to retrieve the token cache - */ - get tokenCache() { - return this.cache; - } -} - -//# sourceMappingURL=TokenCacheContext.mjs.map -;// CONCATENATED MODULE: ./node_modules/@azure/msal-common/dist/response/ResponseHandler.mjs -/*! @azure/msal-common v16.3.0 2026-03-13 */ @@ -51015,1031 +52039,1039 @@ class PopTokenGenerator { -/* - * Copyright (c) Microsoft Corporation. All rights reserved. - * Licensed under the MIT License. - */ -/** - * Class that handles response parsing. - * @internal - */ -class ResponseHandler { - constructor(clientId, cacheStorage, cryptoObj, logger, performanceClient, serializableCache, persistencePlugin) { - this.clientId = clientId; - this.cacheStorage = cacheStorage; - this.cryptoObj = cryptoObj; - this.logger = logger; - this.performanceClient = performanceClient; - this.serializableCache = serializableCache; - this.persistencePlugin = persistencePlugin; - } - /** - * Function which validates server authorization token response. - * @param serverResponse - * @param correlationId - * @param refreshAccessToken - */ - validateTokenResponse(serverResponse, correlationId, refreshAccessToken) { - // Check for error - if (serverResponse.error || - serverResponse.error_description || - serverResponse.suberror) { - const errString = `Error(s): ${serverResponse.error_codes || NOT_AVAILABLE} - Timestamp: ${serverResponse.timestamp || NOT_AVAILABLE} - Description: ${serverResponse.error_description || NOT_AVAILABLE} - Correlation ID: ${serverResponse.correlation_id || NOT_AVAILABLE} - Trace ID: ${serverResponse.trace_id || NOT_AVAILABLE}`; - const serverErrorNo = serverResponse.error_codes?.length - ? serverResponse.error_codes[0] - : undefined; - const serverError = new ServerError_ServerError(serverResponse.error, errString, serverResponse.suberror, serverErrorNo, serverResponse.status); - // check if 500 error - if (refreshAccessToken && - serverResponse.status && - serverResponse.status >= - HTTP_SERVER_ERROR_RANGE_START && - serverResponse.status <= HTTP_SERVER_ERROR_RANGE_END) { - this.logger.warning(`executeTokenRequest:validateTokenResponse - AAD is currently unavailable and the access token is unable to be refreshed.\n${serverError}`, correlationId); - // don't throw an exception, but alert the user via a log that the token was unable to be refreshed - return; - // check if 400 error - } - else if (refreshAccessToken && - serverResponse.status && - serverResponse.status >= - HTTP_CLIENT_ERROR_RANGE_START && - serverResponse.status <= HTTP_CLIENT_ERROR_RANGE_END) { - this.logger.warning(`executeTokenRequest:validateTokenResponse - AAD is currently available but is unable to refresh the access token.\n${serverError}`, correlationId); - // don't throw an exception, but alert the user via a log that the token was unable to be refreshed - return; - } - if (InteractionRequiredAuthError_isInteractionRequiredError(serverResponse.error, serverResponse.error_description, serverResponse.suberror)) { - throw new InteractionRequiredAuthError_InteractionRequiredAuthError(serverResponse.error, serverResponse.error_description, serverResponse.suberror, serverResponse.timestamp || "", serverResponse.trace_id || "", serverResponse.correlation_id || "", serverResponse.claims || "", serverErrorNo); - } - throw serverError; - } - } - /** - * Returns a constructed token response based on given string. Also manages the cache updates and cleanups. - * @param serverTokenResponse - * @param authority - */ - async handleServerTokenResponse(serverTokenResponse, authority, reqTimestamp, request, apiId, authCodePayload, userAssertionHash, handlingRefreshTokenResponse, forceCacheRefreshTokenResponse, serverRequestId) { - // create an idToken object (not entity) - let idTokenClaims; - if (serverTokenResponse.id_token) { - idTokenClaims = extractTokenClaims(serverTokenResponse.id_token || "", this.cryptoObj.base64Decode); - // token nonce check (TODO: Add a warning if no nonce is given?) - if (authCodePayload && authCodePayload.nonce) { - if (idTokenClaims.nonce !== authCodePayload.nonce) { - throw ClientAuthError_createClientAuthError(nonceMismatch); - } - } - // token max_age check - if (request.maxAge || request.maxAge === 0) { - const authTime = idTokenClaims.auth_time; - if (!authTime) { - throw ClientAuthError_createClientAuthError(authTimeNotFound); - } - checkMaxAge(authTime, request.maxAge); - } - } - // generate homeAccountId - this.homeAccountIdentifier = generateHomeAccountId(serverTokenResponse.client_info || "", authority.authorityType, this.logger, this.cryptoObj, request.correlationId, idTokenClaims); - // save the response tokens - let requestStateObj; - if (!!authCodePayload && !!authCodePayload.state) { - requestStateObj = parseRequestState(this.cryptoObj.base64Decode, authCodePayload.state); - } - // Add keyId from request to serverTokenResponse if defined - serverTokenResponse.key_id = - serverTokenResponse.key_id || request.sshKid || undefined; - const cacheRecord = this.generateCacheRecord(serverTokenResponse, authority, reqTimestamp, request, idTokenClaims, userAssertionHash, authCodePayload); - let cacheContext; - try { - if (this.persistencePlugin && this.serializableCache) { - this.logger.verbose("Persistence enabled, calling beforeCacheAccess", request.correlationId); - cacheContext = new TokenCacheContext(this.serializableCache, true); - await this.persistencePlugin.beforeCacheAccess(cacheContext); - } - /* - * When saving a refreshed tokens to the cache, it is expected that the account that was used is present in the cache. - * If not present, we should return null, as it's the case that another application called removeAccount in between - * the calls to getAllAccounts and acquireTokenSilent. We should not overwrite that removal, unless explicitly flagged by - * the developer, as in the case of refresh token flow used in ADAL Node to MSAL Node migration. - */ - if (handlingRefreshTokenResponse && - !forceCacheRefreshTokenResponse && - cacheRecord.account) { - const cachedAccounts = this.cacheStorage.getAllAccounts({ - homeAccountId: cacheRecord.account.homeAccountId, - environment: cacheRecord.account.environment, - }, request.correlationId); - if (cachedAccounts.length < 1) { - this.logger.warning("Account used to refresh tokens not in persistence, refreshed tokens will not be stored in the cache", request.correlationId); - this.performanceClient?.addFields({ - acntLoggedOut: true, - }, request.correlationId); - return await ResponseHandler.generateAuthenticationResult(this.cryptoObj, authority, cacheRecord, false, request, this.performanceClient, idTokenClaims, requestStateObj, undefined, serverRequestId); - } - } - await this.cacheStorage.saveCacheRecord(cacheRecord, request.correlationId, isKmsi(idTokenClaims || {}), apiId, request.storeInCache); - } - finally { - if (this.persistencePlugin && - this.serializableCache && - cacheContext) { - this.logger.verbose("Persistence enabled, calling afterCacheAccess", request.correlationId); - await this.persistencePlugin.afterCacheAccess(cacheContext); - } - } - return ResponseHandler.generateAuthenticationResult(this.cryptoObj, authority, cacheRecord, false, request, this.performanceClient, idTokenClaims, requestStateObj, serverTokenResponse, serverRequestId); - } - /** - * Generates CacheRecord - * @param serverTokenResponse - * @param idTokenObj - * @param authority - */ - generateCacheRecord(serverTokenResponse, authority, reqTimestamp, request, idTokenClaims, userAssertionHash, authCodePayload) { - const env = authority.getPreferredCache(); - if (!env) { - throw ClientAuthError_createClientAuthError(invalidCacheEnvironment); - } - const claimsTenantId = getTenantIdFromIdTokenClaims(idTokenClaims); - // IdToken: non AAD scenarios can have empty realm - let cachedIdToken; - let cachedAccount; - if (serverTokenResponse.id_token && !!idTokenClaims) { - cachedIdToken = createIdTokenEntity(this.homeAccountIdentifier, env, serverTokenResponse.id_token, this.clientId, claimsTenantId || ""); - cachedAccount = buildAccountToCache(this.cacheStorage, authority, this.homeAccountIdentifier, this.cryptoObj.base64Decode, request.correlationId, idTokenClaims, serverTokenResponse.client_info, env, claimsTenantId, authCodePayload, undefined, // nativeAccountId - this.logger); - } - // AccessToken - let cachedAccessToken = null; - if (serverTokenResponse.access_token) { - // If scopes not returned in server response, use request scopes - const responseScopes = serverTokenResponse.scope - ? ScopeSet.fromString(serverTokenResponse.scope) - : new ScopeSet(request.scopes || []); - /* - * Use timestamp calculated before request - * Server may return timestamps as strings, parse to numbers if so. - */ - const expiresIn = (typeof serverTokenResponse.expires_in === "string" - ? parseInt(serverTokenResponse.expires_in, 10) - : serverTokenResponse.expires_in) || 0; - const extExpiresIn = (typeof serverTokenResponse.ext_expires_in === "string" - ? parseInt(serverTokenResponse.ext_expires_in, 10) - : serverTokenResponse.ext_expires_in) || 0; - const refreshIn = (typeof serverTokenResponse.refresh_in === "string" - ? parseInt(serverTokenResponse.refresh_in, 10) - : serverTokenResponse.refresh_in) || undefined; - const tokenExpirationSeconds = reqTimestamp + expiresIn; - const extendedTokenExpirationSeconds = tokenExpirationSeconds + extExpiresIn; - const refreshOnSeconds = refreshIn && refreshIn > 0 - ? reqTimestamp + refreshIn - : undefined; - // non AAD scenarios can have empty realm - cachedAccessToken = createAccessTokenEntity(this.homeAccountIdentifier, env, serverTokenResponse.access_token, this.clientId, claimsTenantId || authority.tenant || "", responseScopes.printScopes(), tokenExpirationSeconds, extendedTokenExpirationSeconds, this.cryptoObj.base64Decode, refreshOnSeconds, serverTokenResponse.token_type, userAssertionHash, serverTokenResponse.key_id); - // Set resource (to be used for MCP scenarios) - const resource = request.resource || null; - if (resource) { - cachedAccessToken.resource = resource; - } - } - // refreshToken - let cachedRefreshToken = null; - if (serverTokenResponse.refresh_token) { - let rtExpiresOn; - if (serverTokenResponse.refresh_token_expires_in) { - const rtExpiresIn = typeof serverTokenResponse.refresh_token_expires_in === - "string" - ? parseInt(serverTokenResponse.refresh_token_expires_in, 10) - : serverTokenResponse.refresh_token_expires_in; - rtExpiresOn = reqTimestamp + rtExpiresIn; - this.performanceClient?.addFields({ ntwkRtExpiresOnSeconds: rtExpiresOn }, request.correlationId); - } - cachedRefreshToken = createRefreshTokenEntity(this.homeAccountIdentifier, env, serverTokenResponse.refresh_token, this.clientId, serverTokenResponse.foci, userAssertionHash, rtExpiresOn); - } - // appMetadata - let cachedAppMetadata = null; - if (serverTokenResponse.foci) { - cachedAppMetadata = { - clientId: this.clientId, - environment: env, - familyId: serverTokenResponse.foci, - }; - } - return { - account: cachedAccount, - idToken: cachedIdToken, - accessToken: cachedAccessToken, - refreshToken: cachedRefreshToken, - appMetadata: cachedAppMetadata, - }; - } - /** - * Creates an @AuthenticationResult from @CacheRecord , @IdToken , and a boolean that states whether or not the result is from cache. - * - * Optionally takes a state string that is set as-is in the response. - * - * @param cacheRecord - * @param idTokenObj - * @param fromTokenCache - * @param stateString - */ - static async generateAuthenticationResult(cryptoObj, authority, cacheRecord, fromTokenCache, request, performanceClient, idTokenClaims, requestState, serverTokenResponse, requestId) { - let accessToken = ""; - let responseScopes = []; - let expiresOn = null; - let extExpiresOn; - let refreshOn; - let familyId = ""; - if (cacheRecord.accessToken) { - /* - * if the request object has `popKid` property, `signPopToken` will be set to false and - * the token will be returned unsigned - */ - if (cacheRecord.accessToken.tokenType === - AuthenticationScheme.POP && - !request.popKid) { - const popTokenGenerator = new PopTokenGenerator(cryptoObj, performanceClient); - const { secret, keyId } = cacheRecord.accessToken; - if (!keyId) { - throw ClientAuthError_createClientAuthError(keyIdMissing); - } - accessToken = await popTokenGenerator.signPopToken(secret, keyId, request); - } - else { - accessToken = cacheRecord.accessToken.secret; - } - responseScopes = ScopeSet.fromString(cacheRecord.accessToken.target).asArray(); - // Access token expiresOn cached in seconds, converting to Date for AuthenticationResult - expiresOn = toDateFromSeconds(cacheRecord.accessToken.expiresOn); - extExpiresOn = toDateFromSeconds(cacheRecord.accessToken.extendedExpiresOn); - if (cacheRecord.accessToken.refreshOn) { - refreshOn = toDateFromSeconds(cacheRecord.accessToken.refreshOn); - } - } - if (cacheRecord.appMetadata) { - familyId = - cacheRecord.appMetadata.familyId === THE_FAMILY_ID - ? THE_FAMILY_ID - : ""; - } - const uid = idTokenClaims?.oid || idTokenClaims?.sub || ""; - const tid = idTokenClaims?.tid || ""; - // for hybrid + native bridge enablement, send back the native account Id - if (serverTokenResponse?.spa_accountid && !!cacheRecord.account) { - cacheRecord.account.nativeAccountId = - serverTokenResponse?.spa_accountid; - } - const accountInfo = cacheRecord.account - ? updateAccountTenantProfileData(getAccountInfo(cacheRecord.account), undefined, // tenantProfile optional - idTokenClaims, cacheRecord.idToken?.secret) - : null; - return { - authority: authority.canonicalAuthority, - uniqueId: uid, - tenantId: tid, - scopes: responseScopes, - account: accountInfo, - idToken: cacheRecord?.idToken?.secret || "", - idTokenClaims: idTokenClaims || {}, - accessToken: accessToken, - fromCache: fromTokenCache, - expiresOn: expiresOn, - extExpiresOn: extExpiresOn, - refreshOn: refreshOn, - correlationId: request.correlationId, - requestId: requestId || "", - familyId: familyId, - tokenType: cacheRecord.accessToken?.tokenType || "", - state: requestState ? requestState.userRequestState : "", - cloudGraphHostName: cacheRecord.account?.cloudGraphHostName || "", - msGraphHost: cacheRecord.account?.msGraphHost || "", - code: serverTokenResponse?.spa_code, - fromPlatformBroker: false, - }; - } -} -function buildAccountToCache(cacheStorage, authority, homeAccountId, base64Decode, correlationId, idTokenClaims, clientInfo, environment, claimsTenantId, authCodePayload, nativeAccountId, logger) { - logger?.verbose("setCachedAccount called", correlationId); - // Check if base account is already cached - const accountKeys = cacheStorage.getAccountKeys(); - const baseAccountKey = accountKeys.find((accountKey) => { - return accountKey.startsWith(homeAccountId); - }); - let cachedAccount = null; - if (baseAccountKey) { - cachedAccount = cacheStorage.getAccount(baseAccountKey, correlationId); - } - const baseAccount = cachedAccount || - createAccountEntity({ - homeAccountId, - idTokenClaims, - clientInfo, - environment, - cloudGraphHostName: authCodePayload?.cloud_graph_host_name, - msGraphHost: authCodePayload?.msgraph_host, - nativeAccountId: nativeAccountId, - }, authority, base64Decode); - const tenantProfiles = baseAccount.tenantProfiles || []; - const tenantId = claimsTenantId || baseAccount.realm; - if (tenantId && - !tenantProfiles.find((tenantProfile) => { - return tenantProfile.tenantId === tenantId; - })) { - const newTenantProfile = AccountInfo_buildTenantProfile(homeAccountId, baseAccount.localAccountId, tenantId, idTokenClaims); - tenantProfiles.push(newTenantProfile); - } - baseAccount.tenantProfiles = tenantProfiles; - return baseAccount; -} -//# sourceMappingURL=ResponseHandler.mjs.map -;// CONCATENATED MODULE: ./node_modules/@azure/msal-common/dist/account/CcsCredential.mjs -/*! @azure/msal-common v16.3.0 2026-03-13 */ -/* - * Copyright (c) Microsoft Corporation. All rights reserved. - * Licensed under the MIT License. - */ -const CcsCredentialType = { - HOME_ACCOUNT_ID: "home_account_id", - UPN: "UPN", -}; -//# sourceMappingURL=CcsCredential.mjs.map -;// CONCATENATED MODULE: ./node_modules/@azure/msal-common/dist/utils/ClientAssertionUtils.mjs -/*! @azure/msal-common v16.3.0 2026-03-13 */ -/* - * Copyright (c) Microsoft Corporation. All rights reserved. - * Licensed under the MIT License. - */ -async function getClientAssertion(clientAssertion, clientId, tokenEndpoint) { - if (typeof clientAssertion === "string") { - return clientAssertion; - } - else { - const config = { - clientId: clientId, - tokenEndpoint: tokenEndpoint, - }; - return clientAssertion(config); - } +/* + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. + */ +const DEFAULT_REFRESH_TOKEN_EXPIRATION_OFFSET_SECONDS = 300; // 5 Minutes +/** + * OAuth2.0 refresh token client + * @internal + */ +class RefreshTokenClient { + constructor(configuration, performanceClient) { + // Set the configuration + this.config = buildClientConfiguration(configuration); + // Initialize the logger + this.logger = new Logger_Logger(this.config.loggerOptions, packageMetadata_name, packageMetadata_version); + // Initialize crypto + this.cryptoUtils = this.config.cryptoInterface; + // Initialize storage interface + this.cacheManager = this.config.storageInterface; + // Set the network interface + this.networkClient = this.config.networkInterface; + // Set TelemetryManager + this.serverTelemetryManager = this.config.serverTelemetryManager; + // set Authority + this.authority = this.config.authOptions.authority; + // set performance telemetry client + this.performanceClient = performanceClient; + } + async acquireToken(request, apiId) { + const reqTimestamp = nowSeconds(); + const response = await invokeAsync(this.executeTokenRequest.bind(this), RefreshTokenClientExecuteTokenRequest, this.logger, this.performanceClient, request.correlationId)(request, this.authority); + // Retrieve requestId from response headers + const requestId = response.headers?.[HeaderNames.X_MS_REQUEST_ID]; + const responseHandler = new ResponseHandler(this.config.authOptions.clientId, this.cacheManager, this.cryptoUtils, this.logger, this.performanceClient, this.config.serializableCache, this.config.persistencePlugin); + responseHandler.validateTokenResponse(response.body, request.correlationId); + return invokeAsync(responseHandler.handleServerTokenResponse.bind(responseHandler), HandleServerTokenResponse, this.logger, this.performanceClient, request.correlationId)(response.body, this.authority, reqTimestamp, request, apiId, undefined, undefined, true, request.forceCache, requestId); + } + /** + * Gets cached refresh token and attaches to request, then calls acquireToken API + * @param request + */ + async acquireTokenByRefreshToken(request, apiId) { + // Cannot renew token if no request object is given. + if (!request) { + throw ClientConfigurationError_createClientConfigurationError(tokenRequestEmpty); + } + // We currently do not support silent flow for account === null use cases; This will be revisited for confidential flow usecases + if (!request.account) { + throw ClientAuthError_createClientAuthError(noAccountInSilentRequest); + } + // try checking if FOCI is enabled for the given application + const isFOCI = this.cacheManager.isAppMetadataFOCI(request.account.environment, request.correlationId); + // if the app is part of the family, retrive a Family refresh token if present and make a refreshTokenRequest + if (isFOCI) { + try { + return await invokeAsync(this.acquireTokenWithCachedRefreshToken.bind(this), RefreshTokenClientAcquireTokenWithCachedRefreshToken, this.logger, this.performanceClient, request.correlationId)(request, true, apiId); + } + catch (e) { + const noFamilyRTInCache = e instanceof InteractionRequiredAuthError_InteractionRequiredAuthError && + e.errorCode === + noTokensFound; + const clientMismatchErrorWithFamilyRT = e instanceof ServerError_ServerError && + e.errorCode === INVALID_GRANT_ERROR && + e.subError === CLIENT_MISMATCH_ERROR; + // if family Refresh Token (FRT) cache acquisition fails or if client_mismatch error is seen with FRT, reattempt with application Refresh Token (ART) + if (noFamilyRTInCache || clientMismatchErrorWithFamilyRT) { + return invokeAsync(this.acquireTokenWithCachedRefreshToken.bind(this), RefreshTokenClientAcquireTokenWithCachedRefreshToken, this.logger, this.performanceClient, request.correlationId)(request, false, apiId); + // throw in all other cases + } + else { + throw e; + } + } + } + // fall back to application refresh token acquisition + return invokeAsync(this.acquireTokenWithCachedRefreshToken.bind(this), RefreshTokenClientAcquireTokenWithCachedRefreshToken, this.logger, this.performanceClient, request.correlationId)(request, false, apiId); + } + /** + * makes a network call to acquire tokens by exchanging RefreshToken available in userCache; throws if refresh token is not cached + * @param request + */ + async acquireTokenWithCachedRefreshToken(request, foci, apiId) { + // fetches family RT or application RT based on FOCI value + const refreshToken = invoke(this.cacheManager.getRefreshToken.bind(this.cacheManager), CacheManagerGetRefreshToken, this.logger, this.performanceClient, request.correlationId)(request.account, foci, request.correlationId, undefined); + if (!refreshToken) { + throw createInteractionRequiredAuthError(noTokensFound); + } + if (refreshToken.expiresOn) { + const offset = request.refreshTokenExpirationOffsetSeconds || + DEFAULT_REFRESH_TOKEN_EXPIRATION_OFFSET_SECONDS; + this.performanceClient?.addFields({ + cacheRtExpiresOnSeconds: Number(refreshToken.expiresOn), + rtOffsetSeconds: offset, + }, request.correlationId); + if (isTokenExpired(refreshToken.expiresOn, offset)) { + throw createInteractionRequiredAuthError(refreshTokenExpired); + } + } + // attach cached RT size to the current measurement + const refreshTokenRequest = { + ...request, + refreshToken: refreshToken.secret, + authenticationScheme: request.authenticationScheme || + AuthenticationScheme.BEARER, + ccsCredential: { + credential: request.account.homeAccountId, + type: CcsCredentialType.HOME_ACCOUNT_ID, + }, + }; + try { + return await invokeAsync(this.acquireToken.bind(this), RefreshTokenClientAcquireToken, this.logger, this.performanceClient, request.correlationId)(refreshTokenRequest, apiId); + } + catch (e) { + if (e instanceof InteractionRequiredAuthError_InteractionRequiredAuthError) { + if (e.subError === badToken) { + // Remove bad refresh token from cache + this.logger.verbose("acquireTokenWithRefreshToken: bad refresh token, removing from cache", request.correlationId); + const badRefreshTokenKey = this.cacheManager.generateCredentialKey(refreshToken); + this.cacheManager.removeRefreshToken(badRefreshTokenKey, request.correlationId); + } + } + throw e; + } + } + /** + * Constructs the network message and makes a NW call to the underlying secure token service + * @param request + * @param authority + */ + async executeTokenRequest(request, authority) { + const queryParametersString = createTokenQueryParameters(request, this.config.authOptions.clientId, this.config.authOptions.redirectUri, this.performanceClient); + const endpoint = UrlString.appendQueryString(authority.tokenEndpoint, queryParametersString); + const requestBody = await invokeAsync(this.createTokenRequestBody.bind(this), RefreshTokenClientCreateTokenRequestBody, this.logger, this.performanceClient, request.correlationId)(request); + const headers = createTokenRequestHeaders(this.logger, this.config.systemOptions.preventCorsPreflight, request.ccsCredential); + const thumbprint = getRequestThumbprint(this.config.authOptions.clientId, request); + return invokeAsync(executePostToTokenEndpoint, RefreshTokenClientExecutePostToTokenEndpoint, this.logger, this.performanceClient, request.correlationId)(endpoint, requestBody, headers, thumbprint, request.correlationId, this.cacheManager, this.networkClient, this.logger, this.performanceClient, this.serverTelemetryManager); + } + /** + * Helper function to create the token request body + * @param request + */ + async createTokenRequestBody(request) { + const parameters = new Map(); + addClientId(parameters, request.embeddedClientId || + request.extraParameters?.[CLIENT_ID] || + this.config.authOptions.clientId); + if (request.redirectUri) { + addRedirectUri(parameters, request.redirectUri); + } + addScopes(parameters, request.scopes, true, this.config.authOptions.authority.options.OIDCOptions?.defaultScopes); + addGrantType(parameters, GrantType.REFRESH_TOKEN_GRANT); + addClientInfo(parameters); + addLibraryInfo(parameters, this.config.libraryInfo); + addApplicationTelemetry(parameters, this.config.telemetry.application); + addThrottling(parameters); + if (this.serverTelemetryManager && !isOidcProtocolMode(this.config)) { + addServerTelemetry(parameters, this.serverTelemetryManager); + } + addRefreshToken(parameters, request.refreshToken); + if (this.config.clientCredentials.clientSecret) { + addClientSecret(parameters, this.config.clientCredentials.clientSecret); + } + if (this.config.clientCredentials.clientAssertion) { + const clientAssertion = this.config.clientCredentials.clientAssertion; + addClientAssertion(parameters, await getClientAssertion(clientAssertion.assertion, this.config.authOptions.clientId, request.resourceRequestUri)); + addClientAssertionType(parameters, clientAssertion.assertionType); + } + if (request.authenticationScheme === AuthenticationScheme.POP) { + const popTokenGenerator = new PopTokenGenerator(this.cryptoUtils, this.performanceClient); + let reqCnfData; + if (!request.popKid) { + const generatedReqCnfData = await invokeAsync(popTokenGenerator.generateCnf.bind(popTokenGenerator), PopTokenGenerateCnf, this.logger, this.performanceClient, request.correlationId)(request, this.logger); + reqCnfData = generatedReqCnfData.reqCnfString; + } + else { + reqCnfData = this.cryptoUtils.encodeKid(request.popKid); + } + // SPA PoP requires full Base64Url encoded req_cnf string (unhashed) + addPopToken(parameters, reqCnfData); + } + else if (request.authenticationScheme === AuthenticationScheme.SSH) { + if (request.sshJwk) { + addSshJwk(parameters, request.sshJwk); + } + else { + throw ClientConfigurationError_createClientConfigurationError(missingSshJwk); + } + } + if (!StringUtils_StringUtils.isEmptyObj(request.claims) || + (this.config.authOptions.clientCapabilities && + this.config.authOptions.clientCapabilities.length > 0)) { + addClaims(parameters, request.claims, this.config.authOptions.clientCapabilities); + } + if (this.config.systemOptions.preventCorsPreflight && + request.ccsCredential) { + switch (request.ccsCredential.type) { + case CcsCredentialType.HOME_ACCOUNT_ID: + try { + const clientInfo = buildClientInfoFromHomeAccountId(request.ccsCredential.credential); + addCcsOid(parameters, clientInfo); + } + catch (e) { + this.logger.verbose(`Could not parse home account ID for CCS Header: '${e}'`, request.correlationId); + } + break; + case CcsCredentialType.UPN: + addCcsUpn(parameters, request.ccsCredential.credential); + break; + } + } + if (request.embeddedClientId) { + addBrokerParameters(parameters, this.config.authOptions.clientId, this.config.authOptions.redirectUri); + } + if (request.extraParameters) { + addExtraParameters(parameters, { + ...request.extraParameters, + }); + } + instrumentBrokerParams(parameters, request.correlationId, this.performanceClient); + return mapToQueryString(parameters); + } } -//# sourceMappingURL=ClientAssertionUtils.mjs.map +//# sourceMappingURL=RefreshTokenClient.mjs.map -;// CONCATENATED MODULE: ./node_modules/@azure/msal-common/dist/network/RequestThumbprint.mjs +;// CONCATENATED MODULE: ./node_modules/@azure/msal-common/dist/client/SilentFlowClient.mjs /*! @azure/msal-common v16.3.0 2026-03-13 */ -/* - * Copyright (c) Microsoft Corporation. All rights reserved. - * Licensed under the MIT License. - */ -function getRequestThumbprint(clientId, request, homeAccountId) { - return { - clientId: clientId, - authority: request.authority, - scopes: request.scopes, - homeAccountIdentifier: homeAccountId, - claims: request.claims, - authenticationScheme: request.authenticationScheme, - resourceRequestMethod: request.resourceRequestMethod, - resourceRequestUri: request.resourceRequestUri, - shrClaims: request.shrClaims, - sshKid: request.sshKid, - embeddedClientId: request.embeddedClientId || request.extraParameters?.clientId, - }; -} -//# sourceMappingURL=RequestThumbprint.mjs.map -;// CONCATENATED MODULE: ./node_modules/@azure/msal-common/dist/network/ThrottlingUtils.mjs -/*! @azure/msal-common v16.3.0 2026-03-13 */ -/* - * Copyright (c) Microsoft Corporation. All rights reserved. - * Licensed under the MIT License. - */ -/** @internal */ -class ThrottlingUtils { - /** - * Prepares a RequestThumbprint to be stored as a key. - * @param thumbprint - */ - static generateThrottlingStorageKey(thumbprint) { - return `${THROTTLING_PREFIX}.${JSON.stringify(thumbprint)}`; - } - /** - * Performs necessary throttling checks before a network request. - * @param cacheManager - * @param thumbprint - */ - static preProcess(cacheManager, thumbprint, correlationId) { - const key = ThrottlingUtils.generateThrottlingStorageKey(thumbprint); - const value = cacheManager.getThrottlingCache(key, correlationId); - if (value) { - if (value.throttleTime < Date.now()) { - cacheManager.removeItem(key, correlationId); - return; - } - throw new ServerError_ServerError(value.errorCodes?.join(" ") || "", value.errorMessage, value.subError); - } - } - /** - * Performs necessary throttling checks after a network request. - * @param cacheManager - * @param thumbprint - * @param response - */ - static postProcess(cacheManager, thumbprint, response, correlationId) { - if (ThrottlingUtils.checkResponseStatus(response) || - ThrottlingUtils.checkResponseForRetryAfter(response)) { - const thumbprintValue = { - throttleTime: ThrottlingUtils.calculateThrottleTime(parseInt(response.headers[HeaderNames.RETRY_AFTER])), - error: response.body.error, - errorCodes: response.body.error_codes, - errorMessage: response.body.error_description, - subError: response.body.suberror, - }; - cacheManager.setThrottlingCache(ThrottlingUtils.generateThrottlingStorageKey(thumbprint), thumbprintValue, correlationId); - } - } - /** - * Checks a NetworkResponse object's status codes against 429 or 5xx - * @param response - */ - static checkResponseStatus(response) { - return (response.status === 429 || - (response.status >= 500 && response.status < 600)); - } - /** - * Checks a NetworkResponse object's RetryAfter header - * @param response - */ - static checkResponseForRetryAfter(response) { - if (response.headers) { - return (response.headers.hasOwnProperty(HeaderNames.RETRY_AFTER) && - (response.status < 200 || response.status >= 300)); - } - return false; - } - /** - * Calculates the Unix-time value for a throttle to expire given throttleTime in seconds. - * @param throttleTime - */ - static calculateThrottleTime(throttleTime) { - const time = throttleTime <= 0 ? 0 : throttleTime; - const currentSeconds = Date.now() / 1000; - return Math.floor(Math.min(currentSeconds + - (time || DEFAULT_THROTTLE_TIME_SECONDS), currentSeconds + DEFAULT_MAX_THROTTLE_TIME_SECONDS) * 1000); - } - static removeThrottle(cacheManager, clientId, request, homeAccountIdentifier) { - const thumbprint = getRequestThumbprint(clientId, request, homeAccountIdentifier); - const key = this.generateThrottlingStorageKey(thumbprint); - cacheManager.removeItem(key, request.correlationId); - } -} -//# sourceMappingURL=ThrottlingUtils.mjs.map -;// CONCATENATED MODULE: ./node_modules/@azure/msal-common/dist/error/NetworkError.mjs -/*! @azure/msal-common v16.3.0 2026-03-13 */ -/* - * Copyright (c) Microsoft Corporation. All rights reserved. - * Licensed under the MIT License. - */ -/** - * Represents network related errors - */ -class NetworkError extends AuthError { - constructor(error, httpStatus, responseHeaders) { - super(error.errorCode, error.errorMessage, error.subError); - Object.setPrototypeOf(this, NetworkError.prototype); - this.name = "NetworkError"; - this.error = error; - this.httpStatus = httpStatus; - this.responseHeaders = responseHeaders; - } -} -/** - * Creates NetworkError object for a failed network request - * @param error - Error to be thrown back to the caller - * @param httpStatus - Status code of the network request - * @param responseHeaders - Response headers of the network request, when available - * @returns NetworkError object - */ -function createNetworkError(error, httpStatus, responseHeaders, additionalError) { - error.errorMessage = `${error.errorMessage}, additionalErrorInfo: error.name:${additionalError?.name}, error.message:${additionalError?.message}`; - return new NetworkError(error, httpStatus, responseHeaders); +/* + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. + */ +/** @internal */ +class SilentFlowClient { + constructor(configuration, performanceClient) { + // Set the configuration + this.config = buildClientConfiguration(configuration); + // Initialize the logger + this.logger = new Logger_Logger(this.config.loggerOptions, packageMetadata_name, packageMetadata_version); + // Initialize crypto + this.cryptoUtils = this.config.cryptoInterface; + // Initialize storage interface + this.cacheManager = this.config.storageInterface; + // Set the network interface + this.networkClient = this.config.networkInterface; + // Set TelemetryManager + this.serverTelemetryManager = this.config.serverTelemetryManager; + // set Authority + this.authority = this.config.authOptions.authority; + // set performance telemetry client + this.performanceClient = performanceClient; + } + /** + * Retrieves token from cache or throws an error if it must be refreshed. + * @param request + */ + async acquireCachedToken(request) { + let lastCacheOutcome = CacheOutcome.NOT_APPLICABLE; + if (request.forceRefresh || !StringUtils_StringUtils.isEmptyObj(request.claims)) { + // Must refresh due to present force_refresh flag. + this.setCacheOutcome(CacheOutcome.FORCE_REFRESH_OR_CLAIMS, request.correlationId); + throw ClientAuthError_createClientAuthError(tokenRefreshRequired); + } + // We currently do not support silent flow for account === null use cases; This will be revisited for confidential flow usecases + if (!request.account) { + throw ClientAuthError_createClientAuthError(noAccountInSilentRequest); + } + const requestTenantId = request.account.tenantId || + getTenantFromAuthorityString(request.authority); + const tokenKeys = this.cacheManager.getTokenKeys(); + const cachedAccessToken = this.cacheManager.getAccessToken(request.account, request, tokenKeys, requestTenantId); + if (!cachedAccessToken) { + // must refresh due to non-existent access_token + this.setCacheOutcome(CacheOutcome.NO_CACHED_ACCESS_TOKEN, request.correlationId); + throw ClientAuthError_createClientAuthError(tokenRefreshRequired); + } + else if (wasClockTurnedBack(cachedAccessToken.cachedAt) || + isTokenExpired(cachedAccessToken.expiresOn, this.config.systemOptions.tokenRenewalOffsetSeconds)) { + // must refresh due to the expires_in value + this.setCacheOutcome(CacheOutcome.CACHED_ACCESS_TOKEN_EXPIRED, request.correlationId); + throw ClientAuthError_createClientAuthError(tokenRefreshRequired); + } + else if (request.resource) { + // cached access token must have a resource that matches the request resource for MCP scenarios + if (cachedAccessToken.resource !== request.resource) { + this.setCacheOutcome(CacheOutcome.NO_CACHED_ACCESS_TOKEN, request.correlationId); + throw ClientAuthError_createClientAuthError(tokenRefreshRequired); + } + } + else if (cachedAccessToken.refreshOn && + isTokenExpired(cachedAccessToken.refreshOn, 0)) { + // must refresh (in the background) due to the refresh_in value + lastCacheOutcome = CacheOutcome.PROACTIVELY_REFRESHED; + // don't throw ClientAuthError.createRefreshRequiredError(), return cached token instead + } + const environment = request.authority || this.authority.getPreferredCache(); + const cacheRecord = { + account: this.cacheManager.getAccount(this.cacheManager.generateAccountKey(request.account), request.correlationId), + accessToken: cachedAccessToken, + idToken: this.cacheManager.getIdToken(request.account, request.correlationId, tokenKeys, requestTenantId), + refreshToken: null, + appMetadata: this.cacheManager.readAppMetadataFromCache(environment, request.correlationId), + }; + this.setCacheOutcome(lastCacheOutcome, request.correlationId); + if (this.config.serverTelemetryManager) { + this.config.serverTelemetryManager.incrementCacheHits(); + } + return [ + await invokeAsync(this.generateResultFromCacheRecord.bind(this), SilentFlowClientGenerateResultFromCacheRecord, this.logger, this.performanceClient, request.correlationId)(cacheRecord, request), + lastCacheOutcome, + ]; + } + setCacheOutcome(cacheOutcome, correlationId) { + this.serverTelemetryManager?.setCacheOutcome(cacheOutcome); + this.performanceClient?.addFields({ + cacheOutcome: cacheOutcome, + }, correlationId); + if (cacheOutcome !== CacheOutcome.NOT_APPLICABLE) { + this.logger.info(`Token refresh is required due to cache outcome: '${cacheOutcome}'`, correlationId); + } + } + /** + * Helper function to build response object from the CacheRecord + * @param cacheRecord + */ + async generateResultFromCacheRecord(cacheRecord, request) { + let idTokenClaims; + if (cacheRecord.idToken) { + idTokenClaims = extractTokenClaims(cacheRecord.idToken.secret, this.config.cryptoInterface.base64Decode); + } + // token max_age check + if (request.maxAge || request.maxAge === 0) { + const authTime = idTokenClaims?.auth_time; + if (!authTime) { + throw ClientAuthError_createClientAuthError(authTimeNotFound); + } + checkMaxAge(authTime, request.maxAge); + } + return ResponseHandler.generateAuthenticationResult(this.cryptoUtils, this.authority, cacheRecord, true, request, this.performanceClient, idTokenClaims); + } } -//# sourceMappingURL=NetworkError.mjs.map - -;// CONCATENATED MODULE: ./node_modules/@azure/msal-common/dist/protocol/Token.mjs -/*! @azure/msal-common v16.3.0 2026-03-13 */ - - - - - - - - - +//# sourceMappingURL=SilentFlowClient.mjs.map +;// CONCATENATED MODULE: ./node_modules/@azure/msal-node/dist/network/HttpClient.mjs +/*! @azure/msal-node v5.1.0 2026-03-13 */ -/* - * Copyright (c) Microsoft Corporation. All rights reserved. - * Licensed under the MIT License. - */ -/** - * Creates default headers for requests to token endpoint - */ -function createTokenRequestHeaders(logger, preventCorsPreflight, ccsCred) { - const headers = {}; - headers[HeaderNames.CONTENT_TYPE] = URL_FORM_CONTENT_TYPE; - if (!preventCorsPreflight && ccsCred) { - switch (ccsCred.type) { - case CcsCredentialType.HOME_ACCOUNT_ID: - try { - const clientInfo = buildClientInfoFromHomeAccountId(ccsCred.credential); - headers[HeaderNames.CCS_HEADER] = `Oid:${clientInfo.uid}@${clientInfo.utid}`; - } - catch (e) { - logger.verbose(`Could not parse home account ID for CCS Header: '${e}'`, ""); - } - break; - case CcsCredentialType.UPN: - headers[HeaderNames.CCS_HEADER] = `UPN: ${ccsCred.credential}`; - break; - } - } - return headers; -} -/** - * Creates query string for the /token request - * @param request - */ -function createTokenQueryParameters(request, clientId, redirectUri, performanceClient) { - const parameters = new Map(); - if (request.embeddedClientId) { - addBrokerParameters(parameters, clientId, redirectUri); - } - if (request.extraQueryParameters) { - addExtraParameters(parameters, request.extraQueryParameters); - } - addCorrelationId(parameters, request.correlationId); - instrumentBrokerParams(parameters, request.correlationId, performanceClient); - return mapToQueryString(parameters); -} -/** - * Http post to token endpoint - * @param tokenEndpoint - * @param queryString - * @param headers - * @param thumbprint - */ -async function executePostToTokenEndpoint(tokenEndpoint, queryString, headers, thumbprint, correlationId, cacheManager, networkClient, logger, performanceClient, serverTelemetryManager) { - const response = await sendPostRequest(thumbprint, tokenEndpoint, { body: queryString, headers: headers }, correlationId, cacheManager, networkClient, logger, performanceClient); - if (serverTelemetryManager && - response.status < 500 && - response.status !== 429) { - // Telemetry data successfully logged by server, clear Telemetry cache - serverTelemetryManager.clearTelemetryCache(); - } - return response; -} -/** - * Wraps sendPostRequestAsync with necessary preflight and postflight logic - * @param thumbprint - Request thumbprint for throttling - * @param tokenEndpoint - Endpoint to make the POST to - * @param options - Body and Headers to include on the POST request - * @param correlationId - CorrelationId for telemetry - * @param cacheManager - Cache manager instance - * @param networkClient - Network module instance - * @param logger - Logger instance - * @param performanceClient - Performance client instance - */ -async function sendPostRequest(thumbprint, tokenEndpoint, options, correlationId, cacheManager, networkClient, logger, performanceClient) { - ThrottlingUtils.preProcess(cacheManager, thumbprint, correlationId); - let response; - try { - response = await invokeAsync((networkClient.sendPostRequestAsync.bind(networkClient)), NetworkClientSendPostRequestAsync, logger, performanceClient, correlationId)(tokenEndpoint, options); - const responseHeaders = response.headers || {}; - performanceClient?.addFields({ - refreshTokenSize: response.body.refresh_token?.length || 0, - httpVerToken: responseHeaders[HeaderNames.X_MS_HTTP_VERSION] || "", - requestId: responseHeaders[HeaderNames.X_MS_REQUEST_ID] || "", - }, correlationId); - } - catch (e) { - if (e instanceof NetworkError) { - const responseHeaders = e.responseHeaders; - if (responseHeaders) { - performanceClient?.addFields({ - httpVerToken: responseHeaders[HeaderNames.X_MS_HTTP_VERSION] || - "", - requestId: responseHeaders[HeaderNames.X_MS_REQUEST_ID] || "", - contentTypeHeader: responseHeaders[HeaderNames.CONTENT_TYPE] || - undefined, - contentLengthHeader: responseHeaders[HeaderNames.CONTENT_LENGTH] || - undefined, - httpStatus: e.httpStatus, - }, correlationId); - } - throw e.error; - } - if (e instanceof AuthError) { - throw e; - } - else { - throw ClientAuthError_createClientAuthError(networkError); - } - } - ThrottlingUtils.postProcess(cacheManager, thumbprint, response, correlationId); - return response; +/* + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. + */ +/** + * HTTP client implementation using Node.js native fetch API. + * + * This class provides a clean interface for making HTTP requests using the modern + * fetch API available in Node.js 18+. It replaces the previous implementation that + * relied on custom proxy handling and the legacy http/https modules. + */ +class HttpClient_HttpClient { + /** + * Sends an HTTP GET request to the specified URL. + * + * This method handles GET requests with optional timeout support. The timeout + * is implemented using AbortController, which provides a clean way to cancel + * fetch requests that take too long to complete. + * + * @param url - The target URL for the GET request + * @param options - Optional request configuration including headers + * @param timeout - Optional timeout in milliseconds. If specified, the request + * will be aborted if it doesn't complete within this time + * @returns Promise that resolves to a NetworkResponse containing headers, body, and status + * @throws {AuthError} When the request times out or response parsing fails + * @throws {NetworkError} When the network request fails + */ + async sendGetRequestAsync(url, options, timeout) { + return this.sendRequest(url, Constants_HttpMethod.GET, options, timeout); + } + /** + * Sends an HTTP POST request to the specified URL. + * + * This method handles POST requests with request body support. Currently, + * timeout functionality is not exposed for POST requests, but the underlying + * implementation supports it through the shared sendRequest method. + * + * @param url - The target URL for the POST request + * @param options - Optional request configuration including headers and body + * @returns Promise that resolves to a NetworkResponse containing headers, body, and status + * @throws {AuthError} When the request times out or response parsing fails + * @throws {NetworkError} When the network request fails + */ + async sendPostRequestAsync(url, options) { + return this.sendRequest(url, Constants_HttpMethod.POST, options); + } + /** + * Core HTTP request implementation using native fetch API. + * + * This method handles GET and POST HTTP requests with comprehensive + * timeout support and error handling. The timeout mechanism works as follows: + * + * 1. An AbortController is created for each request + * 2. If a timeout is specified, setTimeout is used to call abort() after the delay + * 3. The abort signal is passed to fetch, which will reject the promise if aborted + * 4. Cleanup occurs in both success and error cases to prevent timer leaks + * + * Error handling priority: + * 1. Timeout errors (AbortError) are converted to "Request timeout" messages + * 2. Network/connection errors are wrapped with "Network request failed" prefix + * 3. JSON parsing errors are wrapped with "Failed to parse response" prefix + * + * @param url - The target URL for the request + * @param method - HTTP method (GET or POST) + * @param options - Optional request configuration (headers, body) + * @param timeout - Optional timeout in milliseconds for request cancellation + * @returns Promise resolving to NetworkResponse with parsed JSON body + * @throws {AuthError} For timeouts or JSON parsing errors + * @throws {NetworkError} For network failures + */ + async sendRequest(url, method, options, timeout) { + /* + * Setup timeout mechanism using AbortController + * This provides a standard way to cancel fetch requests + */ + const controller = new AbortController(); + let timeoutId; + /* + * Configure timeout if specified + * The setTimeout will trigger abort() if the request takes too long + */ + if (timeout) { + timeoutId = setTimeout(() => { + // Calling abort() will cause fetch to reject with AbortError + controller.abort(); + }, timeout); + } + const fetchOptions = { + method: method, + headers: getFetchHeaders(options), + signal: controller.signal, // Enable cancellation via AbortController + }; + if (method === Constants_HttpMethod.POST) { + fetchOptions.body = options?.body || ""; + } + let response; + try { + response = await fetch(url, fetchOptions); + } + catch (error) { + // Clean up timeout to prevent memory leaks + if (timeoutId) { + clearTimeout(timeoutId); + } + if (error instanceof Error && error.name === "AbortError") { + throw createAuthError(networkError, "Request timeout"); + } + const baseAuthError = createAuthError(networkError, `Network request failed: ${error instanceof Error ? error.message : "unknown"}`); + throw createNetworkError(baseAuthError, undefined, undefined, error instanceof Error ? error : undefined); + } + // Clean up timeout to prevent memory leaks + if (timeoutId) { + clearTimeout(timeoutId); + } + try { + return { + headers: getHeaderDict(response.headers), + body: (await response.json()), + status: response.status, + }; + } + catch (error) { + throw createAuthError(tokenParsingError, `Failed to parse response: ${error instanceof Error ? error.message : "unknown"}`); + } + } +} +/** + * Converts a fetch Headers object to a plain JavaScript object. + * + * The fetch API returns headers as a Headers object with methods like get(), has(), + * etc. However, the rest of the MSAL codebase expects headers as a simple key-value + * object. This function performs that conversion. + * + * @param headers - The Headers object returned by fetch response + * @returns A plain object with header names as keys and values as strings + */ +function getHeaderDict(headers) { + const headerDict = {}; + headers.forEach((value, key) => { + headerDict[key] = value; + }); + return headerDict; +} +/** + * Converts NetworkRequestOptions headers to a fetch-compatible Headers object. + * + * The MSAL library uses plain objects for headers in NetworkRequestOptions, + * but the fetch API expects either a Headers object, plain object, or array + * of arrays. Using the Headers constructor provides better compatibility + * and validation. + * + * @param options - Optional NetworkRequestOptions containing headers + * @returns A Headers object ready for use with fetch API + */ +function getFetchHeaders(options) { + const headers = new Headers(); + if (!(options && options.headers)) { + return headers; + } + Object.entries(options.headers).forEach(([key, value]) => { + headers.append(key, value); + }); + return headers; } -//# sourceMappingURL=Token.mjs.map - -;// CONCATENATED MODULE: ./node_modules/@azure/msal-common/dist/authority/AuthorityFactory.mjs -/*! @azure/msal-common v16.3.0 2026-03-13 */ - +//# sourceMappingURL=HttpClient.mjs.map +;// CONCATENATED MODULE: ./node_modules/@azure/msal-node/dist/error/ManagedIdentityErrorCodes.mjs +/*! @azure/msal-node v5.1.0 2026-03-13 */ +/* + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. + */ +const invalidFileExtension = "invalid_file_extension"; +const invalidFilePath = "invalid_file_path"; +const ManagedIdentityErrorCodes_invalidManagedIdentityIdType = "invalid_managed_identity_id_type"; +const invalidSecret = "invalid_secret"; +const missingId = "missing_client_id"; +const networkUnavailable = "network_unavailable"; +const platformNotSupported = "platform_not_supported"; +const unableToCreateAzureArc = "unable_to_create_azure_arc"; +const unableToCreateCloudShell = "unable_to_create_cloud_shell"; +const ManagedIdentityErrorCodes_unableToCreateSource = "unable_to_create_source"; +const unableToReadSecretFile = "unable_to_read_secret_file"; +const userAssignedNotAvailableAtRuntime = "user_assigned_not_available_at_runtime"; +const wwwAuthenticateHeaderMissing = "www_authenticate_header_missing"; +const wwwAuthenticateHeaderUnsupportedFormat = "www_authenticate_header_unsupported_format"; +const MsiEnvironmentVariableUrlMalformedErrorCodes = { + [ManagedIdentityEnvironmentVariableNames.AZURE_POD_IDENTITY_AUTHORITY_HOST]: "azure_pod_identity_authority_host_url_malformed", + [ManagedIdentityEnvironmentVariableNames.IDENTITY_ENDPOINT]: "identity_endpoint_url_malformed", + [ManagedIdentityEnvironmentVariableNames.IMDS_ENDPOINT]: "imds_endpoint_url_malformed", + [ManagedIdentityEnvironmentVariableNames.MSI_ENDPOINT]: "msi_endpoint_url_malformed", +}; -/* - * Copyright (c) Microsoft Corporation. All rights reserved. - * Licensed under the MIT License. - */ -/** - * Create an authority object of the correct type based on the url - * Performs basic authority validation - checks to see if the authority is of a valid type (i.e. aad, b2c, adfs) - * - * Also performs endpoint discovery. - * - * @param authorityUri - * @param networkClient - * @param cacheManager - * @param authorityOptions - * @param logger - * @param correlationId - * @param performanceClient - * @internal - */ -async function createDiscoveredInstance(authorityUri, networkClient, cacheManager, authorityOptions, logger, correlationId, performanceClient) { - const authorityUriFinal = Authority_Authority.transformCIAMAuthority(formatAuthorityUri(authorityUri)); - // Initialize authority and perform discovery endpoint check. - const acquireTokenAuthority = new Authority_Authority(authorityUriFinal, networkClient, cacheManager, authorityOptions, logger, correlationId, performanceClient); - try { - await invokeAsync(acquireTokenAuthority.resolveEndpointsAsync.bind(acquireTokenAuthority), AuthorityResolveEndpointsAsync, logger, performanceClient, correlationId)(); - return acquireTokenAuthority; - } - catch (e) { - throw ClientAuthError_createClientAuthError(endpointResolutionError); - } -} +//# sourceMappingURL=ManagedIdentityErrorCodes.mjs.map +;// CONCATENATED MODULE: ./node_modules/@azure/msal-node/dist/error/ManagedIdentityError.mjs +/*! @azure/msal-node v5.1.0 2026-03-13 */ -//# sourceMappingURL=AuthorityFactory.mjs.map -;// CONCATENATED MODULE: ./node_modules/@azure/msal-common/dist/client/AuthorizationCodeClient.mjs -/*! @azure/msal-common v16.3.0 2026-03-13 */ +/* + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. + */ +/** + * ManagedIdentityErrorMessage class containing string constants used by error codes and messages. + */ +const ManagedIdentityErrorMessages = { + [invalidFileExtension]: "The file path in the WWW-Authenticate header does not contain a .key file.", + [invalidFilePath]: "The file path in the WWW-Authenticate header is not in a valid Windows or Linux Format.", + [ManagedIdentityErrorCodes_invalidManagedIdentityIdType]: "More than one ManagedIdentityIdType was provided.", + [invalidSecret]: "The secret in the file on the file path in the WWW-Authenticate header is greater than 4096 bytes.", + [platformNotSupported]: "The platform is not supported by Azure Arc. Azure Arc only supports Windows and Linux.", + [missingId]: "A ManagedIdentityId id was not provided.", + [MsiEnvironmentVariableUrlMalformedErrorCodes + .AZURE_POD_IDENTITY_AUTHORITY_HOST]: `The Managed Identity's '${ManagedIdentityEnvironmentVariableNames.AZURE_POD_IDENTITY_AUTHORITY_HOST}' environment variable is malformed.`, + [MsiEnvironmentVariableUrlMalformedErrorCodes + .IDENTITY_ENDPOINT]: `The Managed Identity's '${ManagedIdentityEnvironmentVariableNames.IDENTITY_ENDPOINT}' environment variable is malformed.`, + [MsiEnvironmentVariableUrlMalformedErrorCodes + .IMDS_ENDPOINT]: `The Managed Identity's '${ManagedIdentityEnvironmentVariableNames.IMDS_ENDPOINT}' environment variable is malformed.`, + [MsiEnvironmentVariableUrlMalformedErrorCodes + .MSI_ENDPOINT]: `The Managed Identity's '${ManagedIdentityEnvironmentVariableNames.MSI_ENDPOINT}' environment variable is malformed.`, + [networkUnavailable]: "Authentication unavailable. The request to the managed identity endpoint timed out.", + [unableToCreateAzureArc]: "Azure Arc Managed Identities can only be system assigned.", + [unableToCreateCloudShell]: "Cloud Shell Managed Identities can only be system assigned.", + [ManagedIdentityErrorCodes_unableToCreateSource]: "Unable to create a Managed Identity source based on environment variables.", + [unableToReadSecretFile]: "Unable to read the secret file.", + [userAssignedNotAvailableAtRuntime]: "Service Fabric user assigned managed identity ClientId or ResourceId is not configurable at runtime.", + [wwwAuthenticateHeaderMissing]: "A 401 response was received form the Azure Arc Managed Identity, but the www-authenticate header is missing.", + [wwwAuthenticateHeaderUnsupportedFormat]: "A 401 response was received form the Azure Arc Managed Identity, but the www-authenticate header is in an unsupported format.", +}; +class ManagedIdentityError extends AuthError { + constructor(errorCode) { + super(errorCode, ManagedIdentityErrorMessages[errorCode]); + this.name = "ManagedIdentityError"; + Object.setPrototypeOf(this, ManagedIdentityError.prototype); + } +} +function ManagedIdentityError_createManagedIdentityError(errorCode) { + return new ManagedIdentityError(errorCode); +} +//# sourceMappingURL=ManagedIdentityError.mjs.map +;// CONCATENATED MODULE: ./node_modules/@azure/msal-node/dist/config/ManagedIdentityId.mjs +/*! @azure/msal-node v5.1.0 2026-03-13 */ +/* + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. + */ +class ManagedIdentityId_ManagedIdentityId { + get id() { + return this._id; + } + set id(value) { + this._id = value; + } + get idType() { + return this._idType; + } + set idType(value) { + this._idType = value; + } + constructor(managedIdentityIdParams) { + const userAssignedClientId = managedIdentityIdParams?.userAssignedClientId; + const userAssignedResourceId = managedIdentityIdParams?.userAssignedResourceId; + const userAssignedObjectId = managedIdentityIdParams?.userAssignedObjectId; + if (userAssignedClientId) { + if (userAssignedResourceId || userAssignedObjectId) { + throw createManagedIdentityError(invalidManagedIdentityIdType); + } + this.id = userAssignedClientId; + this.idType = ManagedIdentityIdType.USER_ASSIGNED_CLIENT_ID; + } + else if (userAssignedResourceId) { + if (userAssignedClientId || userAssignedObjectId) { + throw createManagedIdentityError(invalidManagedIdentityIdType); + } + this.id = userAssignedResourceId; + this.idType = ManagedIdentityIdType.USER_ASSIGNED_RESOURCE_ID; + } + else if (userAssignedObjectId) { + if (userAssignedClientId || userAssignedResourceId) { + throw createManagedIdentityError(invalidManagedIdentityIdType); + } + this.id = userAssignedObjectId; + this.idType = ManagedIdentityIdType.USER_ASSIGNED_OBJECT_ID; + } + else { + this.id = DEFAULT_MANAGED_IDENTITY_ID; + this.idType = ManagedIdentityIdType.SYSTEM_ASSIGNED; + } + } +} +//# sourceMappingURL=ManagedIdentityId.mjs.map +;// CONCATENATED MODULE: ./node_modules/@azure/msal-node/dist/error/NodeAuthError.mjs +/*! @azure/msal-node v5.1.0 2026-03-13 */ +/* + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. + */ +/** + * NodeAuthErrorMessage class containing string constants used by error codes and messages. + */ +const NodeAuthErrorMessage = { + invalidLoopbackAddressType: { + code: "invalid_loopback_server_address_type", + desc: "Loopback server address is not type string. This is unexpected.", + }, + unableToLoadRedirectUri: { + code: "unable_to_load_redirectUrl", + desc: "Loopback server callback was invoked without a url. This is unexpected.", + }, + noAuthCodeInResponse: { + code: "no_auth_code_in_response", + desc: "No auth code found in the server response. Please check your network trace to determine what happened.", + }, + noLoopbackServerExists: { + code: "no_loopback_server_exists", + desc: "No loopback server exists yet.", + }, + loopbackServerAlreadyExists: { + code: "loopback_server_already_exists", + desc: "Loopback server already exists. Cannot create another.", + }, + loopbackServerTimeout: { + code: "loopback_server_timeout", + desc: "Timed out waiting for auth code listener to be registered.", + }, + stateNotFoundError: { + code: "state_not_found", + desc: "State not found. Please verify that the request originated from msal.", + }, + thumbprintMissing: { + code: "thumbprint_missing_from_client_certificate", + desc: "Client certificate does not contain a SHA-1 or SHA-256 thumbprint.", + }, + redirectUriNotSupported: { + code: "redirect_uri_not_supported", + desc: "RedirectUri is not supported in this scenario. Please remove redirectUri from the request.", + }, +}; +class NodeAuthError extends AuthError { + constructor(errorCode, errorMessage) { + super(errorCode, errorMessage); + this.name = "NodeAuthError"; + } + /** + * Creates an error thrown if loopback server address is of type string. + */ + static createInvalidLoopbackAddressTypeError() { + return new NodeAuthError(NodeAuthErrorMessage.invalidLoopbackAddressType.code, `${NodeAuthErrorMessage.invalidLoopbackAddressType.desc}`); + } + /** + * Creates an error thrown if the loopback server is unable to get a url. + */ + static createUnableToLoadRedirectUrlError() { + return new NodeAuthError(NodeAuthErrorMessage.unableToLoadRedirectUri.code, `${NodeAuthErrorMessage.unableToLoadRedirectUri.desc}`); + } + /** + * Creates an error thrown if the server response does not contain an auth code. + */ + static createNoAuthCodeInResponseError() { + return new NodeAuthError(NodeAuthErrorMessage.noAuthCodeInResponse.code, `${NodeAuthErrorMessage.noAuthCodeInResponse.desc}`); + } + /** + * Creates an error thrown if the loopback server has not been spun up yet. + */ + static createNoLoopbackServerExistsError() { + return new NodeAuthError(NodeAuthErrorMessage.noLoopbackServerExists.code, `${NodeAuthErrorMessage.noLoopbackServerExists.desc}`); + } + /** + * Creates an error thrown if a loopback server already exists when attempting to create another one. + */ + static createLoopbackServerAlreadyExistsError() { + return new NodeAuthError(NodeAuthErrorMessage.loopbackServerAlreadyExists.code, `${NodeAuthErrorMessage.loopbackServerAlreadyExists.desc}`); + } + /** + * Creates an error thrown if the loopback server times out registering the auth code listener. + */ + static createLoopbackServerTimeoutError() { + return new NodeAuthError(NodeAuthErrorMessage.loopbackServerTimeout.code, `${NodeAuthErrorMessage.loopbackServerTimeout.desc}`); + } + /** + * Creates an error thrown when the state is not present. + */ + static createStateNotFoundError() { + return new NodeAuthError(NodeAuthErrorMessage.stateNotFoundError.code, NodeAuthErrorMessage.stateNotFoundError.desc); + } + /** + * Creates an error thrown when client certificate was provided, but neither the SHA-1 or SHA-256 thumbprints were provided + */ + static createThumbprintMissingError() { + return new NodeAuthError(NodeAuthErrorMessage.thumbprintMissing.code, NodeAuthErrorMessage.thumbprintMissing.desc); + } + /** + * Creates an error thrown when redirectUri is provided in an unsupported scenario + */ + static createRedirectUriNotSupportedError() { + return new NodeAuthError(NodeAuthErrorMessage.redirectUriNotSupported.code, NodeAuthErrorMessage.redirectUriNotSupported.desc); + } +} +//# sourceMappingURL=NodeAuthError.mjs.map +;// CONCATENATED MODULE: ./node_modules/@azure/msal-node/dist/config/Configuration.mjs +/*! @azure/msal-node v5.1.0 2026-03-13 */ -/* - * Copyright (c) Microsoft Corporation. All rights reserved. - * Licensed under the MIT License. - */ -/** - * Oauth2.0 Authorization Code client - * @internal - */ -class AuthorizationCodeClient { - constructor(configuration, performanceClient) { - // Flag to indicate if client is for hybrid spa auth code redemption - this.includeRedirectUri = true; - // Set the configuration - this.config = buildClientConfiguration(configuration); - // Initialize the logger - this.logger = new Logger_Logger(this.config.loggerOptions, packageMetadata_name, packageMetadata_version); - // Initialize crypto - this.cryptoUtils = this.config.cryptoInterface; - // Initialize storage interface - this.cacheManager = this.config.storageInterface; - // Set the network interface - this.networkClient = this.config.networkInterface; - // Set TelemetryManager - this.serverTelemetryManager = this.config.serverTelemetryManager; - // set Authority - this.authority = this.config.authOptions.authority; - // set performance telemetry client - this.performanceClient = performanceClient; - this.oidcDefaultScopes = - this.config.authOptions.authority.options.OIDCOptions?.defaultScopes; - } - /** - * API to acquire a token in exchange of 'authorization_code` acquired by the user in the first leg of the - * authorization_code_grant - * @param request - */ - async acquireToken(request, apiId, authCodePayload) { - if (!request.code) { - throw ClientAuthError_createClientAuthError(requestCannotBeMade); - } - // Check for new cloud instance - if (authCodePayload && authCodePayload.cloud_instance_host_name) { - await invokeAsync(this.updateTokenEndpointAuthority.bind(this), UpdateTokenEndpointAuthority, this.logger, this.performanceClient, request.correlationId)(authCodePayload.cloud_instance_host_name, request.correlationId); - } - const reqTimestamp = nowSeconds(); - const response = await invokeAsync(this.executeTokenRequest.bind(this), AuthClientExecuteTokenRequest, this.logger, this.performanceClient, request.correlationId)(this.authority, request, this.serverTelemetryManager); - // Retrieve requestId from response headers - const requestId = response.headers?.[HeaderNames.X_MS_REQUEST_ID]; - const responseHandler = new ResponseHandler(this.config.authOptions.clientId, this.cacheManager, this.cryptoUtils, this.logger, this.performanceClient, this.config.serializableCache, this.config.persistencePlugin); - // Validate response. This function throws a server error if an error is returned by the server. - responseHandler.validateTokenResponse(response.body, request.correlationId); - return invokeAsync(responseHandler.handleServerTokenResponse.bind(responseHandler), HandleServerTokenResponse, this.logger, this.performanceClient, request.correlationId)(response.body, this.authority, reqTimestamp, request, apiId, authCodePayload, undefined, undefined, undefined, requestId); - } - /** - * Used to log out the current user, and redirect the user to the postLogoutRedirectUri. - * Default behaviour is to redirect the user to `window.location.href`. - * @param authorityUri - */ - getLogoutUri(logoutRequest) { - // Throw error if logoutRequest is null/undefined - if (!logoutRequest) { - throw ClientConfigurationError_createClientConfigurationError(logoutRequestEmpty); - } - const queryString = this.createLogoutUrlQueryString(logoutRequest); - // Construct logout URI - return UrlString.appendQueryString(this.authority.endSessionEndpoint, queryString); - } - /** - * Executes POST request to token endpoint - * @param authority - * @param request - */ - async executeTokenRequest(authority, request, serverTelemetryManager) { - const queryParametersString = createTokenQueryParameters(request, this.config.authOptions.clientId, this.config.authOptions.redirectUri, this.performanceClient); - const endpoint = UrlString.appendQueryString(authority.tokenEndpoint, queryParametersString); - const requestBody = await invokeAsync(this.createTokenRequestBody.bind(this), AuthClientCreateTokenRequestBody, this.logger, this.performanceClient, request.correlationId)(request); - let ccsCredential = undefined; - if (request.clientInfo) { - try { - const clientInfo = buildClientInfo(request.clientInfo, this.cryptoUtils.base64Decode); - ccsCredential = { - credential: `${clientInfo.uid}${CLIENT_INFO_SEPARATOR}${clientInfo.utid}`, - type: CcsCredentialType.HOME_ACCOUNT_ID, - }; - } - catch (e) { - this.logger.verbose(`Could not parse client info for CCS Header: '${e}'`, request.correlationId); - } - } - const headers = createTokenRequestHeaders(this.logger, this.config.systemOptions.preventCorsPreflight, ccsCredential || request.ccsCredential); - const thumbprint = getRequestThumbprint(this.config.authOptions.clientId, request); - return invokeAsync(executePostToTokenEndpoint, AuthorizationCodeClientExecutePostToTokenEndpoint, this.logger, this.performanceClient, request.correlationId)(endpoint, requestBody, headers, thumbprint, request.correlationId, this.cacheManager, this.networkClient, this.logger, this.performanceClient, serverTelemetryManager); - } - /** - * Generates a map for all the params to be sent to the service - * @param request - */ - async createTokenRequestBody(request) { - const parameters = new Map(); - addClientId(parameters, request.embeddedClientId || - request.extraParameters?.[CLIENT_ID] || - this.config.authOptions.clientId); - /* - * For hybrid spa flow, there will be a code but no verifier - * In this scenario, don't include redirect uri as auth code will not be bound to redirect URI - */ - if (!this.includeRedirectUri) { - // Just validate - if (!request.redirectUri) { - throw ClientConfigurationError_createClientConfigurationError(redirectUriEmpty); - } - } - else { - // Validate and include redirect uri - addRedirectUri(parameters, request.redirectUri); - } - // Add scope array, parameter builder will add default scopes and dedupe - addScopes(parameters, request.scopes, true, this.oidcDefaultScopes); - addResource(parameters, request.resource); - // add code: user set, not validated - addAuthorizationCode(parameters, request.code); - // Add library metadata - addLibraryInfo(parameters, this.config.libraryInfo); - addApplicationTelemetry(parameters, this.config.telemetry.application); - addThrottling(parameters); - if (this.serverTelemetryManager && !isOidcProtocolMode(this.config)) { - addServerTelemetry(parameters, this.serverTelemetryManager); - } - // add code_verifier if passed - if (request.codeVerifier) { - addCodeVerifier(parameters, request.codeVerifier); - } - if (this.config.clientCredentials.clientSecret) { - addClientSecret(parameters, this.config.clientCredentials.clientSecret); - } - if (this.config.clientCredentials.clientAssertion) { - const clientAssertion = this.config.clientCredentials.clientAssertion; - addClientAssertion(parameters, await getClientAssertion(clientAssertion.assertion, this.config.authOptions.clientId, request.resourceRequestUri)); - addClientAssertionType(parameters, clientAssertion.assertionType); - } - addGrantType(parameters, GrantType.AUTHORIZATION_CODE_GRANT); - addClientInfo(parameters); - if (request.authenticationScheme === AuthenticationScheme.POP) { - const popTokenGenerator = new PopTokenGenerator(this.cryptoUtils, this.performanceClient); - let reqCnfData; - if (!request.popKid) { - const generatedReqCnfData = await invokeAsync(popTokenGenerator.generateCnf.bind(popTokenGenerator), PopTokenGenerateCnf, this.logger, this.performanceClient, request.correlationId)(request, this.logger); - reqCnfData = generatedReqCnfData.reqCnfString; - } - else { - reqCnfData = this.cryptoUtils.encodeKid(request.popKid); - } - // SPA PoP requires full Base64Url encoded req_cnf string (unhashed) - addPopToken(parameters, reqCnfData); - } - else if (request.authenticationScheme === AuthenticationScheme.SSH) { - if (request.sshJwk) { - addSshJwk(parameters, request.sshJwk); - } - else { - throw ClientConfigurationError_createClientConfigurationError(missingSshJwk); - } - } - if (!StringUtils_StringUtils.isEmptyObj(request.claims) || - (this.config.authOptions.clientCapabilities && - this.config.authOptions.clientCapabilities.length > 0)) { - addClaims(parameters, request.claims, this.config.authOptions.clientCapabilities); - } - let ccsCred = undefined; - if (request.clientInfo) { - try { - const clientInfo = buildClientInfo(request.clientInfo, this.cryptoUtils.base64Decode); - ccsCred = { - credential: `${clientInfo.uid}${CLIENT_INFO_SEPARATOR}${clientInfo.utid}`, - type: CcsCredentialType.HOME_ACCOUNT_ID, - }; - } - catch (e) { - this.logger.verbose(`Could not parse client info for CCS Header: '${e}'`, request.correlationId); - } - } - else { - ccsCred = request.ccsCredential; - } - // Adds these as parameters in the request instead of headers to prevent CORS preflight request - if (this.config.systemOptions.preventCorsPreflight && ccsCred) { - switch (ccsCred.type) { - case CcsCredentialType.HOME_ACCOUNT_ID: - try { - const clientInfo = buildClientInfoFromHomeAccountId(ccsCred.credential); - addCcsOid(parameters, clientInfo); - } - catch (e) { - this.logger.verbose(`Could not parse home account ID for CCS Header: '${e}'`, request.correlationId); - } - break; - case CcsCredentialType.UPN: - addCcsUpn(parameters, ccsCred.credential); - break; - } - } - if (request.embeddedClientId) { - addBrokerParameters(parameters, this.config.authOptions.clientId, this.config.authOptions.redirectUri); - } - if (request.extraParameters) { - addExtraParameters(parameters, request.extraParameters); - } - // Add hybrid spa parameters if not already provided - if (request.enableSpaAuthorizationCode && - (!request.extraParameters || - !request.extraParameters[RETURN_SPA_CODE])) { - addExtraParameters(parameters, { - [RETURN_SPA_CODE]: "1", - }); - } - instrumentBrokerParams(parameters, request.correlationId, this.performanceClient); - return mapToQueryString(parameters); - } - /** - * This API validates the `EndSessionRequest` and creates a URL - * @param request - */ - createLogoutUrlQueryString(request) { - const parameters = new Map(); - if (request.postLogoutRedirectUri) { - addPostLogoutRedirectUri(parameters, request.postLogoutRedirectUri); - } - if (request.correlationId) { - addCorrelationId(parameters, request.correlationId); - } - if (request.idTokenHint) { - addIdTokenHint(parameters, request.idTokenHint); - } - if (request.state) { - addState(parameters, request.state); - } - if (request.logoutHint) { - addLogoutHint(parameters, request.logoutHint); - } - if (request.extraQueryParameters) { - addExtraParameters(parameters, request.extraQueryParameters); - } - if (this.config.authOptions.instanceAware) { - addInstanceAware(parameters); - } - return mapToQueryString(parameters); - } - /** - * Updates the authority to the cloud instance provided in the authorization response - * @param cloudInstanceHostName - cloud instance host name from authorization code payload - * @param correlationId - request correlation id - */ - async updateTokenEndpointAuthority(cloudInstanceHostName, correlationId) { - const cloudInstanceAuthorityUri = `https://${cloudInstanceHostName}/${this.authority.tenant}/`; - const cloudInstanceAuthority = await createDiscoveredInstance(cloudInstanceAuthorityUri, this.networkClient, this.cacheManager, this.authority.options, this.logger, correlationId, this.performanceClient); - this.authority = cloudInstanceAuthority; - } +/* + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. + */ +const DEFAULT_AUTH_OPTIONS = { + clientId: "", + authority: DEFAULT_AUTHORITY, + clientSecret: "", + clientAssertion: "", + clientCertificate: { + thumbprint: "", + thumbprintSha256: "", + privateKey: "", + x5c: "", + }, + knownAuthorities: [], + cloudDiscoveryMetadata: "", + authorityMetadata: "", + clientCapabilities: [], + azureCloudOptions: { + azureCloudInstance: AzureCloudInstance.None, + tenant: "", + }, + isMcp: false, +}; +const DEFAULT_LOGGER_OPTIONS = { + loggerCallback: () => { + // allow users to not set logger call back + }, + piiLoggingEnabled: false, + logLevel: LogLevel.Info, +}; +const Configuration_DEFAULT_SYSTEM_OPTIONS = { + loggerOptions: DEFAULT_LOGGER_OPTIONS, + networkClient: new HttpClient_HttpClient(), + disableInternalRetries: false, + protocolMode: ProtocolMode_ProtocolMode.AAD, +}; +const Configuration_DEFAULT_TELEMETRY_OPTIONS = { + application: { + appName: "", + appVersion: "", + }, +}; +/** + * Sets the default options when not explicitly configured from app developer + * + * @param auth - Authentication options + * @param cache - Cache options + * @param system - System options + * @param telemetry - Telemetry options + * + * @returns Configuration + * @internal + */ +function buildAppConfiguration({ auth, broker, cache, system, telemetry, }) { + const systemOptions = { + ...Configuration_DEFAULT_SYSTEM_OPTIONS, + networkClient: new HttpClient_HttpClient(), + loggerOptions: system?.loggerOptions || DEFAULT_LOGGER_OPTIONS, + disableInternalRetries: system?.disableInternalRetries || false, + }; + // if client certificate was provided, ensure that at least one of the SHA-1 or SHA-256 thumbprints were provided + if (!!auth.clientCertificate && + !!!auth.clientCertificate.thumbprint && + !!!auth.clientCertificate.thumbprintSha256) { + throw NodeAuthError.createStateNotFoundError(); + } + return { + auth: { ...DEFAULT_AUTH_OPTIONS, ...auth }, + broker: { ...broker }, + cache: { ...cache }, + system: { ...systemOptions, ...system }, + telemetry: { ...Configuration_DEFAULT_TELEMETRY_OPTIONS, ...telemetry }, + }; +} +function Configuration_buildManagedIdentityConfiguration({ clientCapabilities, managedIdentityIdParams, system, }) { + const managedIdentityId = new ManagedIdentityId(managedIdentityIdParams); + const loggerOptions = system?.loggerOptions || DEFAULT_LOGGER_OPTIONS; + let networkClient; + // use developer provided network client if passed in + if (system?.networkClient) { + networkClient = system.networkClient; + // otherwise, create a new one + } + else { + networkClient = new HttpClient(); + } + return { + clientCapabilities: clientCapabilities || [], + managedIdentityId: managedIdentityId, + system: { + loggerOptions, + networkClient, + }, + disableInternalRetries: system?.disableInternalRetries || false, + }; } -//# sourceMappingURL=AuthorizationCodeClient.mjs.map +//# sourceMappingURL=Configuration.mjs.map -;// CONCATENATED MODULE: ./node_modules/@azure/msal-common/dist/client/RefreshTokenClient.mjs -/*! @azure/msal-common v16.3.0 2026-03-13 */ +// EXTERNAL MODULE: ./node_modules/uuid/dist/index.js +var dist = __nccwpck_require__(2048); +;// CONCATENATED MODULE: ./node_modules/uuid/wrapper.mjs +const v1 = dist.v1; +const v3 = dist.v3; +const v4 = dist.v4; +const v5 = dist.v5; +const NIL = dist/* NIL */.wD; +const wrapper_version = dist/* version */.rE; +const validate = dist/* validate */.tf; +const stringify = dist/* stringify */.As; +const wrapper_parse = dist/* parse */.qg; +;// CONCATENATED MODULE: ./node_modules/@azure/msal-node/dist/crypto/GuidGenerator.mjs +/*! @azure/msal-node v5.1.0 2026-03-13 */ +/* + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. + */ +class GuidGenerator { + /** + * + * RFC4122: The version 4 UUID is meant for generating UUIDs from truly-random or pseudo-random numbers. + * uuidv4 generates guids from cryprtographically-string random + */ + generateGuid() { + return v4(); + } + /** + * verifies if a string is GUID + * @param guid + */ + isGuid(guid) { + const regexGuid = /^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i; + return regexGuid.test(guid); + } +} +//# sourceMappingURL=GuidGenerator.mjs.map +;// CONCATENATED MODULE: ./node_modules/@azure/msal-node/dist/utils/EncodingUtils.mjs +/*! @azure/msal-node v5.1.0 2026-03-13 */ +/* + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. + */ +class EncodingUtils { + /** + * 'utf8': Multibyte encoded Unicode characters. Many web pages and other document formats use UTF-8. + * 'base64': Base64 encoding. + * + * @param str text + */ + static base64Encode(str, encoding) { + return Buffer.from(str, encoding).toString(EncodingTypes.BASE64); + } + /** + * encode a URL + * @param str + */ + static base64EncodeUrl(str, encoding) { + return EncodingUtils.base64Encode(str, encoding) + .replace(/=/g, "") + .replace(/\+/g, "-") + .replace(/\//g, "_"); + } + /** + * 'utf8': Multibyte encoded Unicode characters. Many web pages and other document formats use UTF-8. + * 'base64': Base64 encoding. + * + * @param base64Str Base64 encoded text + */ + static base64Decode(base64Str) { + return Buffer.from(base64Str, EncodingTypes.BASE64).toString("utf8"); + } + /** + * @param base64Str Base64 encoded Url + */ + static base64DecodeUrl(base64Str) { + let str = base64Str.replace(/-/g, "+").replace(/_/g, "/"); + while (str.length % 4) { + str += "="; + } + return EncodingUtils.base64Decode(str); + } +} +//# sourceMappingURL=EncodingUtils.mjs.map +;// CONCATENATED MODULE: ./node_modules/@azure/msal-node/dist/crypto/HashUtils.mjs +/*! @azure/msal-node v5.1.0 2026-03-13 */ +/* + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. + */ +class HashUtils_HashUtils { + /** + * generate 'SHA256' hash + * @param buffer + */ + sha256(buffer) { + return external_crypto_.createHash(Hash.SHA256).update(buffer).digest(); + } +} +//# sourceMappingURL=HashUtils.mjs.map +;// CONCATENATED MODULE: ./node_modules/@azure/msal-node/dist/crypto/PkceGenerator.mjs +/*! @azure/msal-node v5.1.0 2026-03-13 */ @@ -52047,242 +53079,63 @@ class AuthorizationCodeClient { -/* - * Copyright (c) Microsoft Corporation. All rights reserved. - * Licensed under the MIT License. - */ -const DEFAULT_REFRESH_TOKEN_EXPIRATION_OFFSET_SECONDS = 300; // 5 Minutes -/** - * OAuth2.0 refresh token client - * @internal - */ -class RefreshTokenClient { - constructor(configuration, performanceClient) { - // Set the configuration - this.config = buildClientConfiguration(configuration); - // Initialize the logger - this.logger = new Logger_Logger(this.config.loggerOptions, packageMetadata_name, packageMetadata_version); - // Initialize crypto - this.cryptoUtils = this.config.cryptoInterface; - // Initialize storage interface - this.cacheManager = this.config.storageInterface; - // Set the network interface - this.networkClient = this.config.networkInterface; - // Set TelemetryManager - this.serverTelemetryManager = this.config.serverTelemetryManager; - // set Authority - this.authority = this.config.authOptions.authority; - // set performance telemetry client - this.performanceClient = performanceClient; - } - async acquireToken(request, apiId) { - const reqTimestamp = nowSeconds(); - const response = await invokeAsync(this.executeTokenRequest.bind(this), RefreshTokenClientExecuteTokenRequest, this.logger, this.performanceClient, request.correlationId)(request, this.authority); - // Retrieve requestId from response headers - const requestId = response.headers?.[HeaderNames.X_MS_REQUEST_ID]; - const responseHandler = new ResponseHandler(this.config.authOptions.clientId, this.cacheManager, this.cryptoUtils, this.logger, this.performanceClient, this.config.serializableCache, this.config.persistencePlugin); - responseHandler.validateTokenResponse(response.body, request.correlationId); - return invokeAsync(responseHandler.handleServerTokenResponse.bind(responseHandler), HandleServerTokenResponse, this.logger, this.performanceClient, request.correlationId)(response.body, this.authority, reqTimestamp, request, apiId, undefined, undefined, true, request.forceCache, requestId); - } - /** - * Gets cached refresh token and attaches to request, then calls acquireToken API - * @param request - */ - async acquireTokenByRefreshToken(request, apiId) { - // Cannot renew token if no request object is given. - if (!request) { - throw ClientConfigurationError_createClientConfigurationError(tokenRequestEmpty); - } - // We currently do not support silent flow for account === null use cases; This will be revisited for confidential flow usecases - if (!request.account) { - throw ClientAuthError_createClientAuthError(noAccountInSilentRequest); - } - // try checking if FOCI is enabled for the given application - const isFOCI = this.cacheManager.isAppMetadataFOCI(request.account.environment, request.correlationId); - // if the app is part of the family, retrive a Family refresh token if present and make a refreshTokenRequest - if (isFOCI) { - try { - return await invokeAsync(this.acquireTokenWithCachedRefreshToken.bind(this), RefreshTokenClientAcquireTokenWithCachedRefreshToken, this.logger, this.performanceClient, request.correlationId)(request, true, apiId); - } - catch (e) { - const noFamilyRTInCache = e instanceof InteractionRequiredAuthError_InteractionRequiredAuthError && - e.errorCode === - noTokensFound; - const clientMismatchErrorWithFamilyRT = e instanceof ServerError_ServerError && - e.errorCode === INVALID_GRANT_ERROR && - e.subError === CLIENT_MISMATCH_ERROR; - // if family Refresh Token (FRT) cache acquisition fails or if client_mismatch error is seen with FRT, reattempt with application Refresh Token (ART) - if (noFamilyRTInCache || clientMismatchErrorWithFamilyRT) { - return invokeAsync(this.acquireTokenWithCachedRefreshToken.bind(this), RefreshTokenClientAcquireTokenWithCachedRefreshToken, this.logger, this.performanceClient, request.correlationId)(request, false, apiId); - // throw in all other cases - } - else { - throw e; - } - } - } - // fall back to application refresh token acquisition - return invokeAsync(this.acquireTokenWithCachedRefreshToken.bind(this), RefreshTokenClientAcquireTokenWithCachedRefreshToken, this.logger, this.performanceClient, request.correlationId)(request, false, apiId); - } - /** - * makes a network call to acquire tokens by exchanging RefreshToken available in userCache; throws if refresh token is not cached - * @param request - */ - async acquireTokenWithCachedRefreshToken(request, foci, apiId) { - // fetches family RT or application RT based on FOCI value - const refreshToken = invoke(this.cacheManager.getRefreshToken.bind(this.cacheManager), CacheManagerGetRefreshToken, this.logger, this.performanceClient, request.correlationId)(request.account, foci, request.correlationId, undefined); - if (!refreshToken) { - throw createInteractionRequiredAuthError(noTokensFound); - } - if (refreshToken.expiresOn) { - const offset = request.refreshTokenExpirationOffsetSeconds || - DEFAULT_REFRESH_TOKEN_EXPIRATION_OFFSET_SECONDS; - this.performanceClient?.addFields({ - cacheRtExpiresOnSeconds: Number(refreshToken.expiresOn), - rtOffsetSeconds: offset, - }, request.correlationId); - if (isTokenExpired(refreshToken.expiresOn, offset)) { - throw createInteractionRequiredAuthError(refreshTokenExpired); - } - } - // attach cached RT size to the current measurement - const refreshTokenRequest = { - ...request, - refreshToken: refreshToken.secret, - authenticationScheme: request.authenticationScheme || - AuthenticationScheme.BEARER, - ccsCredential: { - credential: request.account.homeAccountId, - type: CcsCredentialType.HOME_ACCOUNT_ID, - }, - }; - try { - return await invokeAsync(this.acquireToken.bind(this), RefreshTokenClientAcquireToken, this.logger, this.performanceClient, request.correlationId)(refreshTokenRequest, apiId); - } - catch (e) { - if (e instanceof InteractionRequiredAuthError_InteractionRequiredAuthError) { - if (e.subError === badToken) { - // Remove bad refresh token from cache - this.logger.verbose("acquireTokenWithRefreshToken: bad refresh token, removing from cache", request.correlationId); - const badRefreshTokenKey = this.cacheManager.generateCredentialKey(refreshToken); - this.cacheManager.removeRefreshToken(badRefreshTokenKey, request.correlationId); - } - } - throw e; - } - } - /** - * Constructs the network message and makes a NW call to the underlying secure token service - * @param request - * @param authority - */ - async executeTokenRequest(request, authority) { - const queryParametersString = createTokenQueryParameters(request, this.config.authOptions.clientId, this.config.authOptions.redirectUri, this.performanceClient); - const endpoint = UrlString.appendQueryString(authority.tokenEndpoint, queryParametersString); - const requestBody = await invokeAsync(this.createTokenRequestBody.bind(this), RefreshTokenClientCreateTokenRequestBody, this.logger, this.performanceClient, request.correlationId)(request); - const headers = createTokenRequestHeaders(this.logger, this.config.systemOptions.preventCorsPreflight, request.ccsCredential); - const thumbprint = getRequestThumbprint(this.config.authOptions.clientId, request); - return invokeAsync(executePostToTokenEndpoint, RefreshTokenClientExecutePostToTokenEndpoint, this.logger, this.performanceClient, request.correlationId)(endpoint, requestBody, headers, thumbprint, request.correlationId, this.cacheManager, this.networkClient, this.logger, this.performanceClient, this.serverTelemetryManager); - } - /** - * Helper function to create the token request body - * @param request - */ - async createTokenRequestBody(request) { - const parameters = new Map(); - addClientId(parameters, request.embeddedClientId || - request.extraParameters?.[CLIENT_ID] || - this.config.authOptions.clientId); - if (request.redirectUri) { - addRedirectUri(parameters, request.redirectUri); - } - addScopes(parameters, request.scopes, true, this.config.authOptions.authority.options.OIDCOptions?.defaultScopes); - addGrantType(parameters, GrantType.REFRESH_TOKEN_GRANT); - addClientInfo(parameters); - addLibraryInfo(parameters, this.config.libraryInfo); - addApplicationTelemetry(parameters, this.config.telemetry.application); - addThrottling(parameters); - if (this.serverTelemetryManager && !isOidcProtocolMode(this.config)) { - addServerTelemetry(parameters, this.serverTelemetryManager); - } - addRefreshToken(parameters, request.refreshToken); - if (this.config.clientCredentials.clientSecret) { - addClientSecret(parameters, this.config.clientCredentials.clientSecret); - } - if (this.config.clientCredentials.clientAssertion) { - const clientAssertion = this.config.clientCredentials.clientAssertion; - addClientAssertion(parameters, await getClientAssertion(clientAssertion.assertion, this.config.authOptions.clientId, request.resourceRequestUri)); - addClientAssertionType(parameters, clientAssertion.assertionType); - } - if (request.authenticationScheme === AuthenticationScheme.POP) { - const popTokenGenerator = new PopTokenGenerator(this.cryptoUtils, this.performanceClient); - let reqCnfData; - if (!request.popKid) { - const generatedReqCnfData = await invokeAsync(popTokenGenerator.generateCnf.bind(popTokenGenerator), PopTokenGenerateCnf, this.logger, this.performanceClient, request.correlationId)(request, this.logger); - reqCnfData = generatedReqCnfData.reqCnfString; - } - else { - reqCnfData = this.cryptoUtils.encodeKid(request.popKid); - } - // SPA PoP requires full Base64Url encoded req_cnf string (unhashed) - addPopToken(parameters, reqCnfData); - } - else if (request.authenticationScheme === AuthenticationScheme.SSH) { - if (request.sshJwk) { - addSshJwk(parameters, request.sshJwk); - } - else { - throw ClientConfigurationError_createClientConfigurationError(missingSshJwk); - } - } - if (!StringUtils_StringUtils.isEmptyObj(request.claims) || - (this.config.authOptions.clientCapabilities && - this.config.authOptions.clientCapabilities.length > 0)) { - addClaims(parameters, request.claims, this.config.authOptions.clientCapabilities); - } - if (this.config.systemOptions.preventCorsPreflight && - request.ccsCredential) { - switch (request.ccsCredential.type) { - case CcsCredentialType.HOME_ACCOUNT_ID: - try { - const clientInfo = buildClientInfoFromHomeAccountId(request.ccsCredential.credential); - addCcsOid(parameters, clientInfo); - } - catch (e) { - this.logger.verbose(`Could not parse home account ID for CCS Header: '${e}'`, request.correlationId); - } - break; - case CcsCredentialType.UPN: - addCcsUpn(parameters, request.ccsCredential.credential); - break; - } - } - if (request.embeddedClientId) { - addBrokerParameters(parameters, this.config.authOptions.clientId, this.config.authOptions.redirectUri); - } - if (request.extraParameters) { - addExtraParameters(parameters, { - ...request.extraParameters, - }); - } - instrumentBrokerParams(parameters, request.correlationId, this.performanceClient); - return mapToQueryString(parameters); - } +/* + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. + */ +/** + * https://tools.ietf.org/html/rfc7636#page-8 + */ +class PkceGenerator { + constructor() { + this.hashUtils = new HashUtils_HashUtils(); + } + /** + * generates the codeVerfier and the challenge from the codeVerfier + * reference: https://tools.ietf.org/html/rfc7636#section-4.1 and https://tools.ietf.org/html/rfc7636#section-4.2 + */ + async generatePkceCodes() { + const verifier = this.generateCodeVerifier(); + const challenge = this.generateCodeChallengeFromVerifier(verifier); + return { verifier, challenge }; + } + /** + * generates the codeVerfier; reference: https://tools.ietf.org/html/rfc7636#section-4.1 + */ + generateCodeVerifier() { + const charArr = []; + const maxNumber = 256 - (256 % CharSet.CV_CHARSET.length); + while (charArr.length <= RANDOM_OCTET_SIZE) { + const byte = external_crypto_.randomBytes(1)[0]; + if (byte >= maxNumber) { + /* + * Ignore this number to maintain randomness. + * Including it would result in an unequal distribution of characters after doing the modulo + */ + continue; + } + const index = byte % CharSet.CV_CHARSET.length; + charArr.push(CharSet.CV_CHARSET[index]); + } + const verifier = charArr.join(""); + return EncodingUtils.base64EncodeUrl(verifier); + } + /** + * generate the challenge from the codeVerfier; reference: https://tools.ietf.org/html/rfc7636#section-4.2 + * @param codeVerifier + */ + generateCodeChallengeFromVerifier(codeVerifier) { + return EncodingUtils.base64EncodeUrl(this.hashUtils + .sha256(codeVerifier) + .toString(EncodingTypes.BASE64), EncodingTypes.BASE64); + } } -//# sourceMappingURL=RefreshTokenClient.mjs.map - -;// CONCATENATED MODULE: ./node_modules/@azure/msal-common/dist/client/SilentFlowClient.mjs -/*! @azure/msal-common v16.3.0 2026-03-13 */ - - - - - - - +//# sourceMappingURL=PkceGenerator.mjs.map +;// CONCATENATED MODULE: ./node_modules/@azure/msal-node/dist/crypto/CryptoProvider.mjs +/*! @azure/msal-node v5.1.0 2026-03-13 */ @@ -52290,2655 +53143,1802 @@ class RefreshTokenClient { -/* - * Copyright (c) Microsoft Corporation. All rights reserved. - * Licensed under the MIT License. - */ -/** @internal */ -class SilentFlowClient { - constructor(configuration, performanceClient) { - // Set the configuration - this.config = buildClientConfiguration(configuration); - // Initialize the logger - this.logger = new Logger_Logger(this.config.loggerOptions, packageMetadata_name, packageMetadata_version); - // Initialize crypto - this.cryptoUtils = this.config.cryptoInterface; - // Initialize storage interface - this.cacheManager = this.config.storageInterface; - // Set the network interface - this.networkClient = this.config.networkInterface; - // Set TelemetryManager - this.serverTelemetryManager = this.config.serverTelemetryManager; - // set Authority - this.authority = this.config.authOptions.authority; - // set performance telemetry client - this.performanceClient = performanceClient; - } - /** - * Retrieves token from cache or throws an error if it must be refreshed. - * @param request - */ - async acquireCachedToken(request) { - let lastCacheOutcome = CacheOutcome.NOT_APPLICABLE; - if (request.forceRefresh || !StringUtils_StringUtils.isEmptyObj(request.claims)) { - // Must refresh due to present force_refresh flag. - this.setCacheOutcome(CacheOutcome.FORCE_REFRESH_OR_CLAIMS, request.correlationId); - throw ClientAuthError_createClientAuthError(tokenRefreshRequired); - } - // We currently do not support silent flow for account === null use cases; This will be revisited for confidential flow usecases - if (!request.account) { - throw ClientAuthError_createClientAuthError(noAccountInSilentRequest); - } - const requestTenantId = request.account.tenantId || - getTenantFromAuthorityString(request.authority); - const tokenKeys = this.cacheManager.getTokenKeys(); - const cachedAccessToken = this.cacheManager.getAccessToken(request.account, request, tokenKeys, requestTenantId); - if (!cachedAccessToken) { - // must refresh due to non-existent access_token - this.setCacheOutcome(CacheOutcome.NO_CACHED_ACCESS_TOKEN, request.correlationId); - throw ClientAuthError_createClientAuthError(tokenRefreshRequired); - } - else if (wasClockTurnedBack(cachedAccessToken.cachedAt) || - isTokenExpired(cachedAccessToken.expiresOn, this.config.systemOptions.tokenRenewalOffsetSeconds)) { - // must refresh due to the expires_in value - this.setCacheOutcome(CacheOutcome.CACHED_ACCESS_TOKEN_EXPIRED, request.correlationId); - throw ClientAuthError_createClientAuthError(tokenRefreshRequired); - } - else if (request.resource) { - // cached access token must have a resource that matches the request resource for MCP scenarios - if (cachedAccessToken.resource !== request.resource) { - this.setCacheOutcome(CacheOutcome.NO_CACHED_ACCESS_TOKEN, request.correlationId); - throw ClientAuthError_createClientAuthError(tokenRefreshRequired); - } - } - else if (cachedAccessToken.refreshOn && - isTokenExpired(cachedAccessToken.refreshOn, 0)) { - // must refresh (in the background) due to the refresh_in value - lastCacheOutcome = CacheOutcome.PROACTIVELY_REFRESHED; - // don't throw ClientAuthError.createRefreshRequiredError(), return cached token instead - } - const environment = request.authority || this.authority.getPreferredCache(); - const cacheRecord = { - account: this.cacheManager.getAccount(this.cacheManager.generateAccountKey(request.account), request.correlationId), - accessToken: cachedAccessToken, - idToken: this.cacheManager.getIdToken(request.account, request.correlationId, tokenKeys, requestTenantId), - refreshToken: null, - appMetadata: this.cacheManager.readAppMetadataFromCache(environment, request.correlationId), - }; - this.setCacheOutcome(lastCacheOutcome, request.correlationId); - if (this.config.serverTelemetryManager) { - this.config.serverTelemetryManager.incrementCacheHits(); - } - return [ - await invokeAsync(this.generateResultFromCacheRecord.bind(this), SilentFlowClientGenerateResultFromCacheRecord, this.logger, this.performanceClient, request.correlationId)(cacheRecord, request), - lastCacheOutcome, - ]; - } - setCacheOutcome(cacheOutcome, correlationId) { - this.serverTelemetryManager?.setCacheOutcome(cacheOutcome); - this.performanceClient?.addFields({ - cacheOutcome: cacheOutcome, - }, correlationId); - if (cacheOutcome !== CacheOutcome.NOT_APPLICABLE) { - this.logger.info(`Token refresh is required due to cache outcome: '${cacheOutcome}'`, correlationId); - } - } - /** - * Helper function to build response object from the CacheRecord - * @param cacheRecord - */ - async generateResultFromCacheRecord(cacheRecord, request) { - let idTokenClaims; - if (cacheRecord.idToken) { - idTokenClaims = extractTokenClaims(cacheRecord.idToken.secret, this.config.cryptoInterface.base64Decode); - } - // token max_age check - if (request.maxAge || request.maxAge === 0) { - const authTime = idTokenClaims?.auth_time; - if (!authTime) { - throw ClientAuthError_createClientAuthError(authTimeNotFound); - } - checkMaxAge(authTime, request.maxAge); - } - return ResponseHandler.generateAuthenticationResult(this.cryptoUtils, this.authority, cacheRecord, true, request, this.performanceClient, idTokenClaims); - } +/* + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. + */ +/** + * This class implements MSAL node's crypto interface, which allows it to perform base64 encoding and decoding, generating cryptographically random GUIDs and + * implementing Proof Key for Code Exchange specs for the OAuth Authorization Code Flow using PKCE (rfc here: https://tools.ietf.org/html/rfc7636). + * @public + */ +class CryptoProvider_CryptoProvider { + constructor() { + // Browser crypto needs to be validated first before any other classes can be set. + this.pkceGenerator = new PkceGenerator(); + this.guidGenerator = new GuidGenerator(); + this.hashUtils = new HashUtils_HashUtils(); + } + /** + * base64 URL safe encoded string + */ + base64UrlEncode() { + throw new Error("Method not implemented."); + } + /** + * Stringifies and base64Url encodes input public key + * @param inputKid - public key id + * @returns Base64Url encoded public key + */ + encodeKid() { + throw new Error("Method not implemented."); + } + /** + * Creates a new random GUID - used to populate state and nonce. + * @returns string (GUID) + */ + createNewGuid() { + return this.guidGenerator.generateGuid(); + } + /** + * Encodes input string to base64. + * @param input - string to be encoded + */ + base64Encode(input) { + return EncodingUtils.base64Encode(input); + } + /** + * Decodes input string from base64. + * @param input - string to be decoded + */ + base64Decode(input) { + return EncodingUtils.base64Decode(input); + } + /** + * Generates PKCE codes used in Authorization Code Flow. + */ + generatePkceCodes() { + return this.pkceGenerator.generatePkceCodes(); + } + /** + * Generates a keypair, stores it and returns a thumbprint - not yet implemented for node + */ + getPublicKeyThumbprint() { + throw new Error("Method not implemented."); + } + /** + * Removes cryptographic keypair from key store matching the keyId passed in + * @param kid - public key id + */ + removeTokenBindingKey() { + throw new Error("Method not implemented."); + } + /** + * Removes all cryptographic keys from Keystore + */ + clearKeystore() { + throw new Error("Method not implemented."); + } + /** + * Signs the given object as a jwt payload with private key retrieved by given kid - currently not implemented for node + */ + signJwt() { + throw new Error("Method not implemented."); + } + /** + * Returns the SHA-256 hash of an input string + */ + async hashString(plainText) { + return EncodingUtils.base64EncodeUrl(this.hashUtils + .sha256(plainText) + .toString(EncodingTypes.BASE64), EncodingTypes.BASE64); + } } -//# sourceMappingURL=SilentFlowClient.mjs.map +//# sourceMappingURL=CryptoProvider.mjs.map -;// CONCATENATED MODULE: ./node_modules/@azure/msal-node/dist/network/HttpClient.mjs +;// CONCATENATED MODULE: ./node_modules/@azure/msal-node/dist/cache/serializer/Deserializer.mjs /*! @azure/msal-node v5.1.0 2026-03-13 */ - -/* - * Copyright (c) Microsoft Corporation. All rights reserved. - * Licensed under the MIT License. - */ -/** - * HTTP client implementation using Node.js native fetch API. - * - * This class provides a clean interface for making HTTP requests using the modern - * fetch API available in Node.js 18+. It replaces the previous implementation that - * relied on custom proxy handling and the legacy http/https modules. - */ -class HttpClient_HttpClient { - /** - * Sends an HTTP GET request to the specified URL. - * - * This method handles GET requests with optional timeout support. The timeout - * is implemented using AbortController, which provides a clean way to cancel - * fetch requests that take too long to complete. - * - * @param url - The target URL for the GET request - * @param options - Optional request configuration including headers - * @param timeout - Optional timeout in milliseconds. If specified, the request - * will be aborted if it doesn't complete within this time - * @returns Promise that resolves to a NetworkResponse containing headers, body, and status - * @throws {AuthError} When the request times out or response parsing fails - * @throws {NetworkError} When the network request fails - */ - async sendGetRequestAsync(url, options, timeout) { - return this.sendRequest(url, Constants_HttpMethod.GET, options, timeout); - } - /** - * Sends an HTTP POST request to the specified URL. - * - * This method handles POST requests with request body support. Currently, - * timeout functionality is not exposed for POST requests, but the underlying - * implementation supports it through the shared sendRequest method. - * - * @param url - The target URL for the POST request - * @param options - Optional request configuration including headers and body - * @returns Promise that resolves to a NetworkResponse containing headers, body, and status - * @throws {AuthError} When the request times out or response parsing fails - * @throws {NetworkError} When the network request fails - */ - async sendPostRequestAsync(url, options) { - return this.sendRequest(url, Constants_HttpMethod.POST, options); - } - /** - * Core HTTP request implementation using native fetch API. - * - * This method handles GET and POST HTTP requests with comprehensive - * timeout support and error handling. The timeout mechanism works as follows: - * - * 1. An AbortController is created for each request - * 2. If a timeout is specified, setTimeout is used to call abort() after the delay - * 3. The abort signal is passed to fetch, which will reject the promise if aborted - * 4. Cleanup occurs in both success and error cases to prevent timer leaks - * - * Error handling priority: - * 1. Timeout errors (AbortError) are converted to "Request timeout" messages - * 2. Network/connection errors are wrapped with "Network request failed" prefix - * 3. JSON parsing errors are wrapped with "Failed to parse response" prefix - * - * @param url - The target URL for the request - * @param method - HTTP method (GET or POST) - * @param options - Optional request configuration (headers, body) - * @param timeout - Optional timeout in milliseconds for request cancellation - * @returns Promise resolving to NetworkResponse with parsed JSON body - * @throws {AuthError} For timeouts or JSON parsing errors - * @throws {NetworkError} For network failures - */ - async sendRequest(url, method, options, timeout) { - /* - * Setup timeout mechanism using AbortController - * This provides a standard way to cancel fetch requests - */ - const controller = new AbortController(); - let timeoutId; - /* - * Configure timeout if specified - * The setTimeout will trigger abort() if the request takes too long - */ - if (timeout) { - timeoutId = setTimeout(() => { - // Calling abort() will cause fetch to reject with AbortError - controller.abort(); - }, timeout); - } - const fetchOptions = { - method: method, - headers: getFetchHeaders(options), - signal: controller.signal, // Enable cancellation via AbortController - }; - if (method === Constants_HttpMethod.POST) { - fetchOptions.body = options?.body || ""; - } - let response; - try { - response = await fetch(url, fetchOptions); - } - catch (error) { - // Clean up timeout to prevent memory leaks - if (timeoutId) { - clearTimeout(timeoutId); - } - if (error instanceof Error && error.name === "AbortError") { - throw createAuthError(networkError, "Request timeout"); - } - const baseAuthError = createAuthError(networkError, `Network request failed: ${error instanceof Error ? error.message : "unknown"}`); - throw createNetworkError(baseAuthError, undefined, undefined, error instanceof Error ? error : undefined); - } - // Clean up timeout to prevent memory leaks - if (timeoutId) { - clearTimeout(timeoutId); - } - try { - return { - headers: getHeaderDict(response.headers), - body: (await response.json()), - status: response.status, - }; - } - catch (error) { - throw createAuthError(tokenParsingError, `Failed to parse response: ${error instanceof Error ? error.message : "unknown"}`); - } - } -} -/** - * Converts a fetch Headers object to a plain JavaScript object. - * - * The fetch API returns headers as a Headers object with methods like get(), has(), - * etc. However, the rest of the MSAL codebase expects headers as a simple key-value - * object. This function performs that conversion. - * - * @param headers - The Headers object returned by fetch response - * @returns A plain object with header names as keys and values as strings - */ -function getHeaderDict(headers) { - const headerDict = {}; - headers.forEach((value, key) => { - headerDict[key] = value; - }); - return headerDict; -} -/** - * Converts NetworkRequestOptions headers to a fetch-compatible Headers object. - * - * The MSAL library uses plain objects for headers in NetworkRequestOptions, - * but the fetch API expects either a Headers object, plain object, or array - * of arrays. Using the Headers constructor provides better compatibility - * and validation. - * - * @param options - Optional NetworkRequestOptions containing headers - * @returns A Headers object ready for use with fetch API - */ -function getFetchHeaders(options) { - const headers = new Headers(); - if (!(options && options.headers)) { - return headers; - } - Object.entries(options.headers).forEach(([key, value]) => { - headers.append(key, value); - }); - return headers; +/* + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. + */ +/** + * This class deserializes cache entities read from the file into in-memory object types defined internally + * @internal + */ +class Deserializer { + /** + * Parse the JSON blob in memory and deserialize the content + * @param cachedJson - JSON blob cache + */ + static deserializeJSONBlob(jsonFile) { + const deserializedCache = !jsonFile ? {} : JSON.parse(jsonFile); + return deserializedCache; + } + /** + * Deserializes accounts to AccountEntity objects + * @param accounts - accounts of type SerializedAccountEntity + */ + static deserializeAccounts(accounts) { + const accountObjects = {}; + if (accounts) { + Object.keys(accounts).map(function (key) { + const serializedAcc = accounts[key]; + const mappedAcc = { + homeAccountId: serializedAcc.home_account_id, + environment: serializedAcc.environment, + realm: serializedAcc.realm, + localAccountId: serializedAcc.local_account_id, + username: serializedAcc.username, + authorityType: serializedAcc.authority_type, + name: serializedAcc.name, + clientInfo: serializedAcc.client_info, + lastModificationTime: serializedAcc.last_modification_time, + lastModificationApp: serializedAcc.last_modification_app, + tenantProfiles: serializedAcc.tenantProfiles?.map((serializedTenantProfile) => { + return JSON.parse(serializedTenantProfile); + }), + lastUpdatedAt: Date.now().toString(), + }; + const account = {}; + CacheManager.toObject(account, mappedAcc); + accountObjects[key] = account; + }); + } + return accountObjects; + } + /** + * Deserializes id tokens to IdTokenEntity objects + * @param idTokens - credentials of type SerializedIdTokenEntity + */ + static deserializeIdTokens(idTokens) { + const idObjects = {}; + if (idTokens) { + Object.keys(idTokens).map(function (key) { + const serializedIdT = idTokens[key]; + const idToken = { + homeAccountId: serializedIdT.home_account_id, + environment: serializedIdT.environment, + credentialType: serializedIdT.credential_type, + clientId: serializedIdT.client_id, + secret: serializedIdT.secret, + realm: serializedIdT.realm, + lastUpdatedAt: Date.now().toString(), + }; + idObjects[key] = idToken; + }); + } + return idObjects; + } + /** + * Deserializes access tokens to AccessTokenEntity objects + * @param accessTokens - access tokens of type SerializedAccessTokenEntity + */ + static deserializeAccessTokens(accessTokens) { + const atObjects = {}; + if (accessTokens) { + Object.keys(accessTokens).map(function (key) { + const serializedAT = accessTokens[key]; + const accessToken = { + homeAccountId: serializedAT.home_account_id, + environment: serializedAT.environment, + credentialType: serializedAT.credential_type, + clientId: serializedAT.client_id, + secret: serializedAT.secret, + realm: serializedAT.realm, + target: serializedAT.target, + cachedAt: serializedAT.cached_at, + expiresOn: serializedAT.expires_on, + extendedExpiresOn: serializedAT.extended_expires_on, + refreshOn: serializedAT.refresh_on, + keyId: serializedAT.key_id, + tokenType: serializedAT.token_type, + userAssertionHash: serializedAT.userAssertionHash, + resource: serializedAT.resource, + lastUpdatedAt: Date.now().toString(), + }; + atObjects[key] = accessToken; + }); + } + return atObjects; + } + /** + * Deserializes refresh tokens to RefreshTokenEntity objects + * @param refreshTokens - refresh tokens of type SerializedRefreshTokenEntity + */ + static deserializeRefreshTokens(refreshTokens) { + const rtObjects = {}; + if (refreshTokens) { + Object.keys(refreshTokens).map(function (key) { + const serializedRT = refreshTokens[key]; + const refreshToken = { + homeAccountId: serializedRT.home_account_id, + environment: serializedRT.environment, + credentialType: serializedRT.credential_type, + clientId: serializedRT.client_id, + secret: serializedRT.secret, + familyId: serializedRT.family_id, + target: serializedRT.target, + realm: serializedRT.realm, + lastUpdatedAt: Date.now().toString(), + }; + rtObjects[key] = refreshToken; + }); + } + return rtObjects; + } + /** + * Deserializes appMetadata to AppMetaData objects + * @param appMetadata - app metadata of type SerializedAppMetadataEntity + */ + static deserializeAppMetadata(appMetadata) { + const appMetadataObjects = {}; + if (appMetadata) { + Object.keys(appMetadata).map(function (key) { + const serializedAmdt = appMetadata[key]; + appMetadataObjects[key] = { + clientId: serializedAmdt.client_id, + environment: serializedAmdt.environment, + familyId: serializedAmdt.family_id, + }; + }); + } + return appMetadataObjects; + } + /** + * Deserialize an inMemory Cache + * @param jsonCache - JSON blob cache + */ + static deserializeAllCache(jsonCache) { + return { + accounts: jsonCache.Account + ? this.deserializeAccounts(jsonCache.Account) + : {}, + idTokens: jsonCache.IdToken + ? this.deserializeIdTokens(jsonCache.IdToken) + : {}, + accessTokens: jsonCache.AccessToken + ? this.deserializeAccessTokens(jsonCache.AccessToken) + : {}, + refreshTokens: jsonCache.RefreshToken + ? this.deserializeRefreshTokens(jsonCache.RefreshToken) + : {}, + appMetadata: jsonCache.AppMetadata + ? this.deserializeAppMetadata(jsonCache.AppMetadata) + : {}, + }; + } } -//# sourceMappingURL=HttpClient.mjs.map +//# sourceMappingURL=Deserializer.mjs.map -;// CONCATENATED MODULE: ./node_modules/@azure/msal-node/dist/error/ManagedIdentityErrorCodes.mjs +;// CONCATENATED MODULE: ./node_modules/@azure/msal-node/dist/cache/serializer/Serializer.mjs /*! @azure/msal-node v5.1.0 2026-03-13 */ +/* + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. + */ +/** + * This class serializes cache entities to be saved into in-memory object types defined internally + * @internal + */ +class Serializer { + /** + * serialize the JSON blob + * @param data - JSON blob cache + */ + static serializeJSONBlob(data) { + return JSON.stringify(data); + } + /** + * Serialize Accounts + * @param accCache - cache of accounts + */ + static serializeAccounts(accCache) { + const accounts = {}; + Object.keys(accCache).map(function (key) { + const accountEntity = accCache[key]; + accounts[key] = { + home_account_id: accountEntity.homeAccountId, + environment: accountEntity.environment, + realm: accountEntity.realm, + local_account_id: accountEntity.localAccountId, + username: accountEntity.username, + authority_type: accountEntity.authorityType, + name: accountEntity.name, + client_info: accountEntity.clientInfo, + last_modification_time: accountEntity.lastModificationTime, + last_modification_app: accountEntity.lastModificationApp, + tenantProfiles: accountEntity.tenantProfiles?.map((tenantProfile) => { + return JSON.stringify(tenantProfile); + }), + }; + }); + return accounts; + } + /** + * Serialize IdTokens + * @param idTCache - cache of ID tokens + */ + static serializeIdTokens(idTCache) { + const idTokens = {}; + Object.keys(idTCache).map(function (key) { + const idTEntity = idTCache[key]; + idTokens[key] = { + home_account_id: idTEntity.homeAccountId, + environment: idTEntity.environment, + credential_type: idTEntity.credentialType, + client_id: idTEntity.clientId, + secret: idTEntity.secret, + realm: idTEntity.realm, + }; + }); + return idTokens; + } + /** + * Serializes AccessTokens + * @param atCache - cache of access tokens + */ + static serializeAccessTokens(atCache) { + const accessTokens = {}; + Object.keys(atCache).map(function (key) { + const atEntity = atCache[key]; + accessTokens[key] = { + home_account_id: atEntity.homeAccountId, + environment: atEntity.environment, + credential_type: atEntity.credentialType, + client_id: atEntity.clientId, + secret: atEntity.secret, + realm: atEntity.realm, + target: atEntity.target, + cached_at: atEntity.cachedAt, + expires_on: atEntity.expiresOn, + extended_expires_on: atEntity.extendedExpiresOn, + refresh_on: atEntity.refreshOn, + key_id: atEntity.keyId, + token_type: atEntity.tokenType, + userAssertionHash: atEntity.userAssertionHash, + resource: atEntity.resource, + }; + }); + return accessTokens; + } + /** + * Serialize refreshTokens + * @param rtCache - cache of refresh tokens + */ + static serializeRefreshTokens(rtCache) { + const refreshTokens = {}; + Object.keys(rtCache).map(function (key) { + const rtEntity = rtCache[key]; + refreshTokens[key] = { + home_account_id: rtEntity.homeAccountId, + environment: rtEntity.environment, + credential_type: rtEntity.credentialType, + client_id: rtEntity.clientId, + secret: rtEntity.secret, + family_id: rtEntity.familyId, + target: rtEntity.target, + realm: rtEntity.realm, + }; + }); + return refreshTokens; + } + /** + * Serialize amdtCache + * @param amdtCache - cache of app metadata + */ + static serializeAppMetadata(amdtCache) { + const appMetadata = {}; + Object.keys(amdtCache).map(function (key) { + const amdtEntity = amdtCache[key]; + appMetadata[key] = { + client_id: amdtEntity.clientId, + environment: amdtEntity.environment, + family_id: amdtEntity.familyId, + }; + }); + return appMetadata; + } + /** + * Serialize the cache + * @param inMemCache - itemised cache read from the JSON + */ + static serializeAllCache(inMemCache) { + return { + Account: this.serializeAccounts(inMemCache.accounts), + IdToken: this.serializeIdTokens(inMemCache.idTokens), + AccessToken: this.serializeAccessTokens(inMemCache.accessTokens), + RefreshToken: this.serializeRefreshTokens(inMemCache.refreshTokens), + AppMetadata: this.serializeAppMetadata(inMemCache.appMetadata), + }; + } +} -/* - * Copyright (c) Microsoft Corporation. All rights reserved. - * Licensed under the MIT License. - */ -const invalidFileExtension = "invalid_file_extension"; -const invalidFilePath = "invalid_file_path"; -const ManagedIdentityErrorCodes_invalidManagedIdentityIdType = "invalid_managed_identity_id_type"; -const invalidSecret = "invalid_secret"; -const missingId = "missing_client_id"; -const networkUnavailable = "network_unavailable"; -const platformNotSupported = "platform_not_supported"; -const unableToCreateAzureArc = "unable_to_create_azure_arc"; -const unableToCreateCloudShell = "unable_to_create_cloud_shell"; -const ManagedIdentityErrorCodes_unableToCreateSource = "unable_to_create_source"; -const unableToReadSecretFile = "unable_to_read_secret_file"; -const userAssignedNotAvailableAtRuntime = "user_assigned_not_available_at_runtime"; -const wwwAuthenticateHeaderMissing = "www_authenticate_header_missing"; -const wwwAuthenticateHeaderUnsupportedFormat = "www_authenticate_header_unsupported_format"; -const MsiEnvironmentVariableUrlMalformedErrorCodes = { - [ManagedIdentityEnvironmentVariableNames.AZURE_POD_IDENTITY_AUTHORITY_HOST]: "azure_pod_identity_authority_host_url_malformed", - [ManagedIdentityEnvironmentVariableNames.IDENTITY_ENDPOINT]: "identity_endpoint_url_malformed", - [ManagedIdentityEnvironmentVariableNames.IMDS_ENDPOINT]: "imds_endpoint_url_malformed", - [ManagedIdentityEnvironmentVariableNames.MSI_ENDPOINT]: "msi_endpoint_url_malformed", -}; - - -//# sourceMappingURL=ManagedIdentityErrorCodes.mjs.map +//# sourceMappingURL=Serializer.mjs.map -;// CONCATENATED MODULE: ./node_modules/@azure/msal-node/dist/error/ManagedIdentityError.mjs +;// CONCATENATED MODULE: ./node_modules/@azure/msal-node/dist/cache/CacheHelpers.mjs /*! @azure/msal-node v5.1.0 2026-03-13 */ - -/* - * Copyright (c) Microsoft Corporation. All rights reserved. - * Licensed under the MIT License. - */ -/** - * ManagedIdentityErrorMessage class containing string constants used by error codes and messages. - */ -const ManagedIdentityErrorMessages = { - [invalidFileExtension]: "The file path in the WWW-Authenticate header does not contain a .key file.", - [invalidFilePath]: "The file path in the WWW-Authenticate header is not in a valid Windows or Linux Format.", - [ManagedIdentityErrorCodes_invalidManagedIdentityIdType]: "More than one ManagedIdentityIdType was provided.", - [invalidSecret]: "The secret in the file on the file path in the WWW-Authenticate header is greater than 4096 bytes.", - [platformNotSupported]: "The platform is not supported by Azure Arc. Azure Arc only supports Windows and Linux.", - [missingId]: "A ManagedIdentityId id was not provided.", - [MsiEnvironmentVariableUrlMalformedErrorCodes - .AZURE_POD_IDENTITY_AUTHORITY_HOST]: `The Managed Identity's '${ManagedIdentityEnvironmentVariableNames.AZURE_POD_IDENTITY_AUTHORITY_HOST}' environment variable is malformed.`, - [MsiEnvironmentVariableUrlMalformedErrorCodes - .IDENTITY_ENDPOINT]: `The Managed Identity's '${ManagedIdentityEnvironmentVariableNames.IDENTITY_ENDPOINT}' environment variable is malformed.`, - [MsiEnvironmentVariableUrlMalformedErrorCodes - .IMDS_ENDPOINT]: `The Managed Identity's '${ManagedIdentityEnvironmentVariableNames.IMDS_ENDPOINT}' environment variable is malformed.`, - [MsiEnvironmentVariableUrlMalformedErrorCodes - .MSI_ENDPOINT]: `The Managed Identity's '${ManagedIdentityEnvironmentVariableNames.MSI_ENDPOINT}' environment variable is malformed.`, - [networkUnavailable]: "Authentication unavailable. The request to the managed identity endpoint timed out.", - [unableToCreateAzureArc]: "Azure Arc Managed Identities can only be system assigned.", - [unableToCreateCloudShell]: "Cloud Shell Managed Identities can only be system assigned.", - [ManagedIdentityErrorCodes_unableToCreateSource]: "Unable to create a Managed Identity source based on environment variables.", - [unableToReadSecretFile]: "Unable to read the secret file.", - [userAssignedNotAvailableAtRuntime]: "Service Fabric user assigned managed identity ClientId or ResourceId is not configurable at runtime.", - [wwwAuthenticateHeaderMissing]: "A 401 response was received form the Azure Arc Managed Identity, but the www-authenticate header is missing.", - [wwwAuthenticateHeaderUnsupportedFormat]: "A 401 response was received form the Azure Arc Managed Identity, but the www-authenticate header is in an unsupported format.", -}; -class ManagedIdentityError extends AuthError { - constructor(errorCode) { - super(errorCode, ManagedIdentityErrorMessages[errorCode]); - this.name = "ManagedIdentityError"; - Object.setPrototypeOf(this, ManagedIdentityError.prototype); - } -} -function ManagedIdentityError_createManagedIdentityError(errorCode) { - return new ManagedIdentityError(errorCode); +/* + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. + */ +function generateCredentialKey(credential) { + const familyId = (credential.credentialType === CredentialType.REFRESH_TOKEN && + credential.familyId) || + credential.clientId; + const scheme = credential.tokenType && + credential.tokenType.toLowerCase() !== + AuthenticationScheme.BEARER.toLowerCase() + ? credential.tokenType.toLowerCase() + : ""; + const credentialKey = [ + credential.homeAccountId, + credential.environment, + credential.credentialType, + familyId, + credential.realm || "", + credential.target || "", + scheme, + ]; + return credentialKey.join(CACHE.KEY_SEPARATOR).toLowerCase(); +} +function generateAccountKey(account) { + const homeTenantId = account.homeAccountId.split(".")[1]; + const accountKey = [ + account.homeAccountId, + account.environment, + homeTenantId || account.tenantId || "", + ]; + return accountKey.join(CACHE.KEY_SEPARATOR).toLowerCase(); } -//# sourceMappingURL=ManagedIdentityError.mjs.map +//# sourceMappingURL=CacheHelpers.mjs.map -;// CONCATENATED MODULE: ./node_modules/@azure/msal-node/dist/config/ManagedIdentityId.mjs +;// CONCATENATED MODULE: ./node_modules/@azure/msal-node/dist/cache/NodeStorage.mjs /*! @azure/msal-node v5.1.0 2026-03-13 */ -/* - * Copyright (c) Microsoft Corporation. All rights reserved. - * Licensed under the MIT License. - */ -class ManagedIdentityId_ManagedIdentityId { - get id() { - return this._id; - } - set id(value) { - this._id = value; - } - get idType() { - return this._idType; - } - set idType(value) { - this._idType = value; - } - constructor(managedIdentityIdParams) { - const userAssignedClientId = managedIdentityIdParams?.userAssignedClientId; - const userAssignedResourceId = managedIdentityIdParams?.userAssignedResourceId; - const userAssignedObjectId = managedIdentityIdParams?.userAssignedObjectId; - if (userAssignedClientId) { - if (userAssignedResourceId || userAssignedObjectId) { - throw createManagedIdentityError(invalidManagedIdentityIdType); - } - this.id = userAssignedClientId; - this.idType = ManagedIdentityIdType.USER_ASSIGNED_CLIENT_ID; - } - else if (userAssignedResourceId) { - if (userAssignedClientId || userAssignedObjectId) { - throw createManagedIdentityError(invalidManagedIdentityIdType); - } - this.id = userAssignedResourceId; - this.idType = ManagedIdentityIdType.USER_ASSIGNED_RESOURCE_ID; - } - else if (userAssignedObjectId) { - if (userAssignedClientId || userAssignedResourceId) { - throw createManagedIdentityError(invalidManagedIdentityIdType); - } - this.id = userAssignedObjectId; - this.idType = ManagedIdentityIdType.USER_ASSIGNED_OBJECT_ID; - } - else { - this.id = DEFAULT_MANAGED_IDENTITY_ID; - this.idType = ManagedIdentityIdType.SYSTEM_ASSIGNED; - } - } + +/* + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. + */ +/** + * This class implements Storage for node, reading cache from user specified storage location or an extension library + * @public + */ +class NodeStorage_NodeStorage extends CacheManager { + constructor(logger, clientId, cryptoImpl, staticAuthorityOptions) { + super(clientId, cryptoImpl, logger, new StubPerformanceClient_StubPerformanceClient(), staticAuthorityOptions); + this.cache = {}; + this.changeEmitters = []; + this.logger = logger; + } + /** + * Queue up callbacks + * @param func - a callback function for cache change indication + */ + registerChangeEmitter(func) { + this.changeEmitters.push(func); + } + /** + * Invoke the callback when cache changes + */ + emitChange() { + this.changeEmitters.forEach((func) => func.call(null)); + } + /** + * Converts cacheKVStore to InMemoryCache + * @param cache - key value store + */ + cacheToInMemoryCache(cache) { + const inMemoryCache = { + accounts: {}, + idTokens: {}, + accessTokens: {}, + refreshTokens: {}, + appMetadata: {}, + }; + for (const key in cache) { + const value = cache[key]; + if (typeof value !== "object") { + continue; + } + if (isAccountEntity(value)) { + inMemoryCache.accounts[key] = value; + } + else if (isIdTokenEntity(value)) { + inMemoryCache.idTokens[key] = value; + } + else if (isAccessTokenEntity(value)) { + inMemoryCache.accessTokens[key] = value; + } + else if (isRefreshTokenEntity(value)) { + inMemoryCache.refreshTokens[key] = value; + } + else if (isAppMetadataEntity(key, value)) { + inMemoryCache.appMetadata[key] = value; + } + else { + continue; + } + } + return inMemoryCache; + } + /** + * converts inMemoryCache to CacheKVStore + * @param inMemoryCache - kvstore map for inmemory + */ + inMemoryCacheToCache(inMemoryCache) { + // convert in memory cache to a flat Key-Value map + let cache = this.getCache(); + cache = { + ...cache, + ...inMemoryCache.accounts, + ...inMemoryCache.idTokens, + ...inMemoryCache.accessTokens, + ...inMemoryCache.refreshTokens, + ...inMemoryCache.appMetadata, + }; + // convert in memory cache to a flat Key-Value map + return cache; + } + /** + * gets the current in memory cache for the client + */ + getInMemoryCache() { + this.logger.trace("Getting in-memory cache", ""); + // convert the cache key value store to inMemoryCache + const inMemoryCache = this.cacheToInMemoryCache(this.getCache()); + return inMemoryCache; + } + /** + * sets the current in memory cache for the client + * @param inMemoryCache - key value map in memory + */ + setInMemoryCache(inMemoryCache) { + this.logger.trace("Setting in-memory cache", ""); + // convert and append the inMemoryCache to cacheKVStore + const cache = this.inMemoryCacheToCache(inMemoryCache); + this.setCache(cache); + this.emitChange(); + } + /** + * get the current cache key-value store + */ + getCache() { + this.logger.trace("Getting cache key-value store", ""); + return this.cache; + } + /** + * sets the current cache (key value store) + * @param cacheMap - key value map + */ + setCache(cache) { + this.logger.trace("Setting cache key value store", ""); + this.cache = cache; + // mark change in cache + this.emitChange(); + } + /** + * Gets cache item with given key. + * @param key - lookup key for the cache entry + */ + getItem(key) { + this.logger.tracePii(`Item key: ${key}`, ""); + // read cache + const cache = this.getCache(); + return cache[key]; + } + /** + * Gets cache item with given key-value + * @param key - lookup key for the cache entry + * @param value - value of the cache entry + */ + setItem(key, value) { + this.logger.tracePii(`Item key: ${key}`, ""); + // read cache + const cache = this.getCache(); + cache[key] = value; + // write to cache + this.setCache(cache); + } + generateCredentialKey(credential) { + return generateCredentialKey(credential); + } + generateAccountKey(account) { + return generateAccountKey(account); + } + getAccountKeys() { + const inMemoryCache = this.getInMemoryCache(); + const accountKeys = Object.keys(inMemoryCache.accounts); + return accountKeys; + } + getTokenKeys() { + const inMemoryCache = this.getInMemoryCache(); + const tokenKeys = { + idToken: Object.keys(inMemoryCache.idTokens), + accessToken: Object.keys(inMemoryCache.accessTokens), + refreshToken: Object.keys(inMemoryCache.refreshTokens), + }; + return tokenKeys; + } + /** + * Reads account from cache, builds it into an account entity and returns it. + * @param accountKey - lookup key to fetch cache type AccountEntity + * @returns + */ + getAccount(accountKey) { + const cachedAccount = this.getItem(accountKey); + return cachedAccount && typeof cachedAccount === "object" + ? { ...cachedAccount } + : null; + } + /** + * set account entity + * @param account - cache value to be set of type AccountEntity + */ + async setAccount(account) { + const accountKey = this.generateAccountKey(getAccountInfo(account)); + this.setItem(accountKey, account); + } + /** + * fetch the idToken credential + * @param idTokenKey - lookup key to fetch cache type IdTokenEntity + */ + getIdTokenCredential(idTokenKey) { + const idToken = this.getItem(idTokenKey); + if (isIdTokenEntity(idToken)) { + return idToken; + } + return null; + } + /** + * set idToken credential + * @param idToken - cache value to be set of type IdTokenEntity + */ + async setIdTokenCredential(idToken) { + const idTokenKey = this.generateCredentialKey(idToken); + this.setItem(idTokenKey, idToken); + } + /** + * fetch the accessToken credential + * @param accessTokenKey - lookup key to fetch cache type AccessTokenEntity + */ + getAccessTokenCredential(accessTokenKey) { + const accessToken = this.getItem(accessTokenKey); + if (isAccessTokenEntity(accessToken)) { + return accessToken; + } + return null; + } + /** + * set accessToken credential + * @param accessToken - cache value to be set of type AccessTokenEntity + */ + async setAccessTokenCredential(accessToken) { + const accessTokenKey = this.generateCredentialKey(accessToken); + this.setItem(accessTokenKey, accessToken); + } + /** + * fetch the refreshToken credential + * @param refreshTokenKey - lookup key to fetch cache type RefreshTokenEntity + */ + getRefreshTokenCredential(refreshTokenKey) { + const refreshToken = this.getItem(refreshTokenKey); + if (isRefreshTokenEntity(refreshToken)) { + return refreshToken; + } + return null; + } + /** + * set refreshToken credential + * @param refreshToken - cache value to be set of type RefreshTokenEntity + */ + async setRefreshTokenCredential(refreshToken) { + const refreshTokenKey = this.generateCredentialKey(refreshToken); + this.setItem(refreshTokenKey, refreshToken); + } + /** + * fetch appMetadata entity from the platform cache + * @param appMetadataKey - lookup key to fetch cache type AppMetadataEntity + */ + getAppMetadata(appMetadataKey) { + const appMetadata = this.getItem(appMetadataKey); + if (isAppMetadataEntity(appMetadataKey, appMetadata)) { + return appMetadata; + } + return null; + } + /** + * set appMetadata entity to the platform cache + * @param appMetadata - cache value to be set of type AppMetadataEntity + */ + setAppMetadata(appMetadata) { + const appMetadataKey = generateAppMetadataKey(appMetadata); + this.setItem(appMetadataKey, appMetadata); + } + /** + * fetch server telemetry entity from the platform cache + * @param serverTelemetrykey - lookup key to fetch cache type ServerTelemetryEntity + */ + getServerTelemetry(serverTelemetrykey) { + const serverTelemetryEntity = this.getItem(serverTelemetrykey); + if (serverTelemetryEntity && + isServerTelemetryEntity(serverTelemetrykey, serverTelemetryEntity)) { + return serverTelemetryEntity; + } + return null; + } + /** + * set server telemetry entity to the platform cache + * @param serverTelemetryKey - lookup key to fetch cache type ServerTelemetryEntity + * @param serverTelemetry - cache value to be set of type ServerTelemetryEntity + */ + setServerTelemetry(serverTelemetryKey, serverTelemetry) { + this.setItem(serverTelemetryKey, serverTelemetry); + } + /** + * fetch authority metadata entity from the platform cache + * @param key - lookup key to fetch cache type AuthorityMetadataEntity + */ + getAuthorityMetadata(key) { + const authorityMetadataEntity = this.getItem(key); + if (authorityMetadataEntity && + isAuthorityMetadataEntity(key, authorityMetadataEntity)) { + return authorityMetadataEntity; + } + return null; + } + /** + * Get all authority metadata keys + */ + getAuthorityMetadataKeys() { + return this.getKeys().filter((key) => { + return this.isAuthorityMetadata(key); + }); + } + /** + * set authority metadata entity to the platform cache + * @param key - lookup key to fetch cache type AuthorityMetadataEntity + * @param metadata - cache value to be set of type AuthorityMetadataEntity + */ + setAuthorityMetadata(key, metadata) { + this.setItem(key, metadata); + } + /** + * fetch throttling entity from the platform cache + * @param throttlingCacheKey - lookup key to fetch cache type ThrottlingEntity + */ + getThrottlingCache(throttlingCacheKey) { + const throttlingCache = this.getItem(throttlingCacheKey); + if (throttlingCache && + isThrottlingEntity(throttlingCacheKey, throttlingCache)) { + return throttlingCache; + } + return null; + } + /** + * set throttling entity to the platform cache + * @param throttlingCacheKey - lookup key to fetch cache type ThrottlingEntity + * @param throttlingCache - cache value to be set of type ThrottlingEntity + */ + setThrottlingCache(throttlingCacheKey, throttlingCache) { + this.setItem(throttlingCacheKey, throttlingCache); + } + /** + * Removes the cache item from memory with the given key. + * @param key - lookup key to remove a cache entity + * @param inMemory - key value map of the cache + */ + removeItem(key) { + this.logger.tracePii(`Item key: ${key}`, ""); + // read inMemoryCache + let result = false; + const cache = this.getCache(); + if (!!cache[key]) { + delete cache[key]; + result = true; + } + // write to the cache after removal + if (result) { + this.setCache(cache); + this.emitChange(); + } + return result; + } + /** + * Remove account entity from the platform cache if it's outdated + * @param accountKey - lookup key to fetch cache type AccountEntity + */ + removeOutdatedAccount(accountKey) { + this.removeItem(accountKey); + } + /** + * Checks whether key is in cache. + * @param key - look up key for a cache entity + */ + containsKey(key) { + return this.getKeys().includes(key); + } + /** + * Gets all keys in window. + */ + getKeys() { + this.logger.trace("Retrieving all cache keys", ""); + // read cache + const cache = this.getCache(); + return [...Object.keys(cache)]; + } + /** + * Clears all cache entries created by MSAL (except tokens). + */ + clear() { + this.logger.trace("Clearing cache entries created by MSAL", ""); + // read inMemoryCache + const cacheKeys = this.getKeys(); + // delete each element + cacheKeys.forEach((key) => { + this.removeItem(key); + }); + this.emitChange(); + } + /** + * Initialize in memory cache from an exisiting cache vault + * @param cache - blob formatted cache (JSON) + */ + static generateInMemoryCache(cache) { + return Deserializer.deserializeAllCache(Deserializer.deserializeJSONBlob(cache)); + } + /** + * retrieves the final JSON + * @param inMemoryCache - itemised cache read from the JSON + */ + static generateJsonCache(inMemoryCache) { + return Serializer.serializeAllCache(inMemoryCache); + } + /** + * Updates a credential's cache key if the current cache key is outdated + */ + updateCredentialCacheKey(currentCacheKey, credential) { + const updatedCacheKey = this.generateCredentialKey(credential); + if (currentCacheKey !== updatedCacheKey) { + const cacheItem = this.getItem(currentCacheKey); + if (cacheItem) { + this.removeItem(currentCacheKey); + this.setItem(updatedCacheKey, cacheItem); + this.logger.verbose(`Updated an outdated ${credential.credentialType} cache key`, ""); + return updatedCacheKey; + } + else { + this.logger.error(`Attempted to update an outdated ${credential.credentialType} cache key but no item matching the outdated key was found in storage`, ""); + } + } + return currentCacheKey; + } } -//# sourceMappingURL=ManagedIdentityId.mjs.map +//# sourceMappingURL=NodeStorage.mjs.map -;// CONCATENATED MODULE: ./node_modules/@azure/msal-node/dist/error/NodeAuthError.mjs +;// CONCATENATED MODULE: ./node_modules/@azure/msal-node/dist/cache/TokenCache.mjs /*! @azure/msal-node v5.1.0 2026-03-13 */ -/* - * Copyright (c) Microsoft Corporation. All rights reserved. - * Licensed under the MIT License. - */ -/** - * NodeAuthErrorMessage class containing string constants used by error codes and messages. - */ -const NodeAuthErrorMessage = { - invalidLoopbackAddressType: { - code: "invalid_loopback_server_address_type", - desc: "Loopback server address is not type string. This is unexpected.", - }, - unableToLoadRedirectUri: { - code: "unable_to_load_redirectUrl", - desc: "Loopback server callback was invoked without a url. This is unexpected.", - }, - noAuthCodeInResponse: { - code: "no_auth_code_in_response", - desc: "No auth code found in the server response. Please check your network trace to determine what happened.", - }, - noLoopbackServerExists: { - code: "no_loopback_server_exists", - desc: "No loopback server exists yet.", - }, - loopbackServerAlreadyExists: { - code: "loopback_server_already_exists", - desc: "Loopback server already exists. Cannot create another.", - }, - loopbackServerTimeout: { - code: "loopback_server_timeout", - desc: "Timed out waiting for auth code listener to be registered.", - }, - stateNotFoundError: { - code: "state_not_found", - desc: "State not found. Please verify that the request originated from msal.", - }, - thumbprintMissing: { - code: "thumbprint_missing_from_client_certificate", - desc: "Client certificate does not contain a SHA-1 or SHA-256 thumbprint.", - }, - redirectUriNotSupported: { - code: "redirect_uri_not_supported", - desc: "RedirectUri is not supported in this scenario. Please remove redirectUri from the request.", - }, -}; -class NodeAuthError extends AuthError { - constructor(errorCode, errorMessage) { - super(errorCode, errorMessage); - this.name = "NodeAuthError"; - } - /** - * Creates an error thrown if loopback server address is of type string. - */ - static createInvalidLoopbackAddressTypeError() { - return new NodeAuthError(NodeAuthErrorMessage.invalidLoopbackAddressType.code, `${NodeAuthErrorMessage.invalidLoopbackAddressType.desc}`); - } - /** - * Creates an error thrown if the loopback server is unable to get a url. - */ - static createUnableToLoadRedirectUrlError() { - return new NodeAuthError(NodeAuthErrorMessage.unableToLoadRedirectUri.code, `${NodeAuthErrorMessage.unableToLoadRedirectUri.desc}`); - } - /** - * Creates an error thrown if the server response does not contain an auth code. - */ - static createNoAuthCodeInResponseError() { - return new NodeAuthError(NodeAuthErrorMessage.noAuthCodeInResponse.code, `${NodeAuthErrorMessage.noAuthCodeInResponse.desc}`); - } - /** - * Creates an error thrown if the loopback server has not been spun up yet. - */ - static createNoLoopbackServerExistsError() { - return new NodeAuthError(NodeAuthErrorMessage.noLoopbackServerExists.code, `${NodeAuthErrorMessage.noLoopbackServerExists.desc}`); - } - /** - * Creates an error thrown if a loopback server already exists when attempting to create another one. - */ - static createLoopbackServerAlreadyExistsError() { - return new NodeAuthError(NodeAuthErrorMessage.loopbackServerAlreadyExists.code, `${NodeAuthErrorMessage.loopbackServerAlreadyExists.desc}`); - } - /** - * Creates an error thrown if the loopback server times out registering the auth code listener. - */ - static createLoopbackServerTimeoutError() { - return new NodeAuthError(NodeAuthErrorMessage.loopbackServerTimeout.code, `${NodeAuthErrorMessage.loopbackServerTimeout.desc}`); - } - /** - * Creates an error thrown when the state is not present. - */ - static createStateNotFoundError() { - return new NodeAuthError(NodeAuthErrorMessage.stateNotFoundError.code, NodeAuthErrorMessage.stateNotFoundError.desc); - } - /** - * Creates an error thrown when client certificate was provided, but neither the SHA-1 or SHA-256 thumbprints were provided - */ - static createThumbprintMissingError() { - return new NodeAuthError(NodeAuthErrorMessage.thumbprintMissing.code, NodeAuthErrorMessage.thumbprintMissing.desc); - } - /** - * Creates an error thrown when redirectUri is provided in an unsupported scenario - */ - static createRedirectUriNotSupportedError() { - return new NodeAuthError(NodeAuthErrorMessage.redirectUriNotSupported.code, NodeAuthErrorMessage.redirectUriNotSupported.desc); - } -} - - -//# sourceMappingURL=NodeAuthError.mjs.map - -;// CONCATENATED MODULE: ./node_modules/@azure/msal-node/dist/config/Configuration.mjs -/*! @azure/msal-node v5.1.0 2026-03-13 */ - -/* - * Copyright (c) Microsoft Corporation. All rights reserved. - * Licensed under the MIT License. - */ -const DEFAULT_AUTH_OPTIONS = { - clientId: "", - authority: DEFAULT_AUTHORITY, - clientSecret: "", - clientAssertion: "", - clientCertificate: { - thumbprint: "", - thumbprintSha256: "", - privateKey: "", - x5c: "", - }, - knownAuthorities: [], - cloudDiscoveryMetadata: "", - authorityMetadata: "", - clientCapabilities: [], - azureCloudOptions: { - azureCloudInstance: AzureCloudInstance.None, - tenant: "", - }, - isMcp: false, -}; -const DEFAULT_LOGGER_OPTIONS = { - loggerCallback: () => { - // allow users to not set logger call back - }, - piiLoggingEnabled: false, - logLevel: LogLevel.Info, -}; -const Configuration_DEFAULT_SYSTEM_OPTIONS = { - loggerOptions: DEFAULT_LOGGER_OPTIONS, - networkClient: new HttpClient_HttpClient(), - disableInternalRetries: false, - protocolMode: ProtocolMode_ProtocolMode.AAD, -}; -const Configuration_DEFAULT_TELEMETRY_OPTIONS = { - application: { - appName: "", - appVersion: "", - }, -}; -/** - * Sets the default options when not explicitly configured from app developer - * - * @param auth - Authentication options - * @param cache - Cache options - * @param system - System options - * @param telemetry - Telemetry options - * - * @returns Configuration - * @internal - */ -function buildAppConfiguration({ auth, broker, cache, system, telemetry, }) { - const systemOptions = { - ...Configuration_DEFAULT_SYSTEM_OPTIONS, - networkClient: new HttpClient_HttpClient(), - loggerOptions: system?.loggerOptions || DEFAULT_LOGGER_OPTIONS, - disableInternalRetries: system?.disableInternalRetries || false, - }; - // if client certificate was provided, ensure that at least one of the SHA-1 or SHA-256 thumbprints were provided - if (!!auth.clientCertificate && - !!!auth.clientCertificate.thumbprint && - !!!auth.clientCertificate.thumbprintSha256) { - throw NodeAuthError.createStateNotFoundError(); - } - return { - auth: { ...DEFAULT_AUTH_OPTIONS, ...auth }, - broker: { ...broker }, - cache: { ...cache }, - system: { ...systemOptions, ...system }, - telemetry: { ...Configuration_DEFAULT_TELEMETRY_OPTIONS, ...telemetry }, - }; -} -function Configuration_buildManagedIdentityConfiguration({ clientCapabilities, managedIdentityIdParams, system, }) { - const managedIdentityId = new ManagedIdentityId(managedIdentityIdParams); - const loggerOptions = system?.loggerOptions || DEFAULT_LOGGER_OPTIONS; - let networkClient; - // use developer provided network client if passed in - if (system?.networkClient) { - networkClient = system.networkClient; - // otherwise, create a new one - } - else { - networkClient = new HttpClient(); - } - return { - clientCapabilities: clientCapabilities || [], - managedIdentityId: managedIdentityId, - system: { - loggerOptions, - networkClient, - }, - disableInternalRetries: system?.disableInternalRetries || false, - }; +/* + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. + */ +const defaultSerializedCache = { + Account: {}, + IdToken: {}, + AccessToken: {}, + RefreshToken: {}, + AppMetadata: {}, +}; +/** + * In-memory token cache manager + * @public + */ +class TokenCache { + constructor(storage, logger, cachePlugin) { + this.cacheHasChanged = false; + this.storage = storage; + this.storage.registerChangeEmitter(this.handleChangeEvent.bind(this)); + if (cachePlugin) { + this.persistence = cachePlugin; + } + this.logger = logger; + } + /** + * Set to true if cache state has changed since last time serialize or writeToPersistence was called + */ + hasChanged() { + return this.cacheHasChanged; + } + /** + * Serializes in memory cache to JSON + */ + serialize() { + this.logger.trace("Serializing in-memory cache", ""); + let finalState = Serializer.serializeAllCache(this.storage.getInMemoryCache()); + // if cacheSnapshot not null or empty, merge + if (this.cacheSnapshot) { + this.logger.trace("Reading cache snapshot from disk", ""); + finalState = this.mergeState(JSON.parse(this.cacheSnapshot), finalState); + } + else { + this.logger.trace("No cache snapshot to merge", ""); + } + this.cacheHasChanged = false; + return JSON.stringify(finalState); + } + /** + * Deserializes JSON to in-memory cache. JSON should be in MSAL cache schema format + * @param cache - blob formatted cache + */ + deserialize(cache) { + this.logger.trace("Deserializing JSON to in-memory cache", ""); + this.cacheSnapshot = cache; + if (this.cacheSnapshot) { + this.logger.trace("Reading cache snapshot from disk", ""); + const deserializedCache = Deserializer.deserializeAllCache(this.overlayDefaults(JSON.parse(this.cacheSnapshot))); + this.storage.setInMemoryCache(deserializedCache); + } + else { + this.logger.trace("No cache snapshot to deserialize", ""); + } + } + /** + * Fetches the cache key-value map + */ + getKVStore() { + return this.storage.getCache(); + } + /** + * Gets cache snapshot in CacheKVStore format + */ + getCacheSnapshot() { + const deserializedPersistentStorage = NodeStorage_NodeStorage.generateInMemoryCache(this.cacheSnapshot); + return this.storage.inMemoryCacheToCache(deserializedPersistentStorage); + } + /** + * API that retrieves all accounts currently in cache to the user + */ + async getAllAccounts(correlationId = new CryptoProvider_CryptoProvider().createNewGuid()) { + this.logger.trace("getAllAccounts called", correlationId); + let cacheContext; + try { + if (this.persistence) { + cacheContext = new TokenCacheContext(this, false); + await this.persistence.beforeCacheAccess(cacheContext); + } + return this.storage.getAllAccounts({}, correlationId); + } + finally { + if (this.persistence && cacheContext) { + await this.persistence.afterCacheAccess(cacheContext); + } + } + } + /** + * Returns the signed in account matching homeAccountId. + * (the account object is created at the time of successful login) + * or null when no matching account is found + * @param homeAccountId - unique identifier for an account (uid.utid) + */ + async getAccountByHomeId(homeAccountId) { + const allAccounts = await this.getAllAccounts(); + if (homeAccountId && allAccounts && allAccounts.length) { + return (allAccounts.filter((accountObj) => accountObj.homeAccountId === homeAccountId)[0] || null); + } + else { + return null; + } + } + /** + * Returns the signed in account matching localAccountId. + * (the account object is created at the time of successful login) + * or null when no matching account is found + * @param localAccountId - unique identifier of an account (sub/obj when homeAccountId cannot be populated) + */ + async getAccountByLocalId(localAccountId) { + const allAccounts = await this.getAllAccounts(); + if (localAccountId && allAccounts && allAccounts.length) { + return (allAccounts.filter((accountObj) => accountObj.localAccountId === localAccountId)[0] || null); + } + else { + return null; + } + } + /** + * API to remove a specific account and the relevant data from cache + * @param account - AccountInfo passed by the user + */ + async removeAccount(account, correlationId) { + this.logger.trace("removeAccount called", correlationId || ""); + let cacheContext; + try { + if (this.persistence) { + cacheContext = new TokenCacheContext(this, true); + await this.persistence.beforeCacheAccess(cacheContext); + } + this.storage.removeAccount(account, correlationId || new GuidGenerator().generateGuid()); + } + finally { + if (this.persistence && cacheContext) { + await this.persistence.afterCacheAccess(cacheContext); + } + } + } + /** + * Overwrites in-memory cache with persistent cache + */ + async overwriteCache() { + if (!this.persistence) { + this.logger.info("No persistence layer specified, cache cannot be overwritten", ""); + return; + } + this.logger.info("Overwriting in-memory cache with persistent cache", ""); + this.storage.clear(); + const cacheContext = new TokenCacheContext(this, false); + await this.persistence.beforeCacheAccess(cacheContext); + const cacheSnapshot = this.getCacheSnapshot(); + this.storage.setCache(cacheSnapshot); + await this.persistence.afterCacheAccess(cacheContext); + } + /** + * Called when the cache has changed state. + */ + handleChangeEvent() { + this.cacheHasChanged = true; + } + /** + * Merge in memory cache with the cache snapshot. + * @param oldState - cache before changes + * @param currentState - current cache state in the library + */ + mergeState(oldState, currentState) { + this.logger.trace("Merging in-memory cache with cache snapshot", ""); + const stateAfterRemoval = this.mergeRemovals(oldState, currentState); + return this.mergeUpdates(stateAfterRemoval, currentState); + } + /** + * Deep update of oldState based on newState values + * @param oldState - cache before changes + * @param newState - updated cache + */ + mergeUpdates(oldState, newState) { + Object.keys(newState).forEach((newKey) => { + const newValue = newState[newKey]; + // if oldState does not contain value but newValue does, add it + if (!oldState.hasOwnProperty(newKey)) { + if (newValue !== null) { + oldState[newKey] = newValue; + } + } + else { + // both oldState and newState contain the key, do deep update + const newValueNotNull = newValue !== null; + const newValueIsObject = typeof newValue === "object"; + const newValueIsNotArray = !Array.isArray(newValue); + const oldStateNotUndefinedOrNull = typeof oldState[newKey] !== "undefined" && + oldState[newKey] !== null; + if (newValueNotNull && + newValueIsObject && + newValueIsNotArray && + oldStateNotUndefinedOrNull) { + this.mergeUpdates(oldState[newKey], newValue); + } + else { + oldState[newKey] = newValue; + } + } + }); + return oldState; + } + /** + * Removes entities in oldState that the were removed from newState. If there are any unknown values in root of + * oldState that are not recognized, they are left untouched. + * @param oldState - cache before changes + * @param newState - updated cache + */ + mergeRemovals(oldState, newState) { + this.logger.trace("Remove updated entries in cache", ""); + const accounts = oldState.Account + ? this.mergeRemovalsDict(oldState.Account, newState.Account) + : oldState.Account; + const accessTokens = oldState.AccessToken + ? this.mergeRemovalsDict(oldState.AccessToken, newState.AccessToken) + : oldState.AccessToken; + const refreshTokens = oldState.RefreshToken + ? this.mergeRemovalsDict(oldState.RefreshToken, newState.RefreshToken) + : oldState.RefreshToken; + const idTokens = oldState.IdToken + ? this.mergeRemovalsDict(oldState.IdToken, newState.IdToken) + : oldState.IdToken; + const appMetadata = oldState.AppMetadata + ? this.mergeRemovalsDict(oldState.AppMetadata, newState.AppMetadata) + : oldState.AppMetadata; + return { + ...oldState, + Account: accounts, + AccessToken: accessTokens, + RefreshToken: refreshTokens, + IdToken: idTokens, + AppMetadata: appMetadata, + }; + } + /** + * Helper to merge new cache with the old one + * @param oldState - cache before changes + * @param newState - updated cache + */ + mergeRemovalsDict(oldState, newState) { + const finalState = { ...oldState }; + Object.keys(oldState).forEach((oldKey) => { + if (!newState || !newState.hasOwnProperty(oldKey)) { + delete finalState[oldKey]; + } + }); + return finalState; + } + /** + * Helper to overlay as a part of cache merge + * @param passedInCache - cache read from the blob + */ + overlayDefaults(passedInCache) { + this.logger.trace("Overlaying input cache with the default cache", ""); + return { + Account: { + ...defaultSerializedCache.Account, + ...passedInCache.Account, + }, + IdToken: { + ...defaultSerializedCache.IdToken, + ...passedInCache.IdToken, + }, + AccessToken: { + ...defaultSerializedCache.AccessToken, + ...passedInCache.AccessToken, + }, + RefreshToken: { + ...defaultSerializedCache.RefreshToken, + ...passedInCache.RefreshToken, + }, + AppMetadata: { + ...defaultSerializedCache.AppMetadata, + ...passedInCache.AppMetadata, + }, + }; + } } -//# sourceMappingURL=Configuration.mjs.map - -// EXTERNAL MODULE: ./node_modules/uuid/dist/index.js -var dist = __nccwpck_require__(2048); -;// CONCATENATED MODULE: ./node_modules/uuid/wrapper.mjs - -const v1 = dist.v1; -const v3 = dist.v3; -const v4 = dist.v4; -const v5 = dist.v5; -const NIL = dist/* NIL */.wD; -const wrapper_version = dist/* version */.rE; -const validate = dist/* validate */.tf; -const stringify = dist/* stringify */.As; -const wrapper_parse = dist/* parse */.qg; +//# sourceMappingURL=TokenCache.mjs.map -;// CONCATENATED MODULE: ./node_modules/@azure/msal-node/dist/crypto/GuidGenerator.mjs +// EXTERNAL MODULE: ./node_modules/jsonwebtoken/index.js +var jsonwebtoken = __nccwpck_require__(9653); +;// CONCATENATED MODULE: ./node_modules/@azure/msal-node/dist/error/ClientAuthErrorCodes.mjs /*! @azure/msal-node v5.1.0 2026-03-13 */ +/* + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. + */ +const missingTenantIdError = "missing_tenant_id_error"; +const userTimeoutReached = "user_timeout_reached"; +const invalidAssertion = "invalid_assertion"; +const invalidClientCredential = "invalid_client_credential"; +const deviceCodePollingCancelled = "device_code_polling_cancelled"; +const deviceCodeExpired = "device_code_expired"; +const deviceCodeUnknownError = "device_code_unknown_error"; -/* - * Copyright (c) Microsoft Corporation. All rights reserved. - * Licensed under the MIT License. - */ -class GuidGenerator { - /** - * - * RFC4122: The version 4 UUID is meant for generating UUIDs from truly-random or pseudo-random numbers. - * uuidv4 generates guids from cryprtographically-string random - */ - generateGuid() { - return v4(); - } - /** - * verifies if a string is GUID - * @param guid - */ - isGuid(guid) { - const regexGuid = /^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i; - return regexGuid.test(guid); - } -} - - -//# sourceMappingURL=GuidGenerator.mjs.map +//# sourceMappingURL=ClientAuthErrorCodes.mjs.map -;// CONCATENATED MODULE: ./node_modules/@azure/msal-node/dist/utils/EncodingUtils.mjs +;// CONCATENATED MODULE: ./node_modules/@azure/msal-node/dist/client/ClientAssertion.mjs /*! @azure/msal-node v5.1.0 2026-03-13 */ -/* - * Copyright (c) Microsoft Corporation. All rights reserved. - * Licensed under the MIT License. - */ -class EncodingUtils { - /** - * 'utf8': Multibyte encoded Unicode characters. Many web pages and other document formats use UTF-8. - * 'base64': Base64 encoding. - * - * @param str text - */ - static base64Encode(str, encoding) { - return Buffer.from(str, encoding).toString(EncodingTypes.BASE64); - } - /** - * encode a URL - * @param str - */ - static base64EncodeUrl(str, encoding) { - return EncodingUtils.base64Encode(str, encoding) - .replace(/=/g, "") - .replace(/\+/g, "-") - .replace(/\//g, "_"); - } - /** - * 'utf8': Multibyte encoded Unicode characters. Many web pages and other document formats use UTF-8. - * 'base64': Base64 encoding. - * - * @param base64Str Base64 encoded text - */ - static base64Decode(base64Str) { - return Buffer.from(base64Str, EncodingTypes.BASE64).toString("utf8"); - } - /** - * @param base64Str Base64 encoded Url - */ - static base64DecodeUrl(base64Str) { - let str = base64Str.replace(/-/g, "+").replace(/_/g, "/"); - while (str.length % 4) { - str += "="; - } - return EncodingUtils.base64Decode(str); - } -} - - -//# sourceMappingURL=EncodingUtils.mjs.map - -;// CONCATENATED MODULE: ./node_modules/@azure/msal-node/dist/crypto/HashUtils.mjs -/*! @azure/msal-node v5.1.0 2026-03-13 */ -/* - * Copyright (c) Microsoft Corporation. All rights reserved. - * Licensed under the MIT License. - */ -class HashUtils_HashUtils { - /** - * generate 'SHA256' hash - * @param buffer - */ - sha256(buffer) { - return external_crypto_.createHash(Hash.SHA256).update(buffer).digest(); - } +/* + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. + */ +/** + * Client assertion of type jwt-bearer used in confidential client flows + * @public + */ +class ClientAssertion { + /** + * Initialize the ClientAssertion class from the clientAssertion passed by the user + * @param assertion - refer https://tools.ietf.org/html/rfc7521 + */ + static fromAssertion(assertion) { + const clientAssertion = new ClientAssertion(); + clientAssertion.jwt = assertion; + return clientAssertion; + } + /** + * @deprecated Use fromCertificateWithSha256Thumbprint instead, with a SHA-256 thumprint + * Initialize the ClientAssertion class from the certificate passed by the user + * @param thumbprint - identifier of a certificate + * @param privateKey - secret key + * @param publicCertificate - electronic document provided to prove the ownership of the public key + */ + static fromCertificate(thumbprint, privateKey, publicCertificate) { + const clientAssertion = new ClientAssertion(); + clientAssertion.privateKey = privateKey; + clientAssertion.thumbprint = thumbprint; + clientAssertion.useSha256 = false; + if (publicCertificate) { + clientAssertion.publicCertificate = + this.parseCertificate(publicCertificate); + } + return clientAssertion; + } + /** + * Initialize the ClientAssertion class from the certificate passed by the user + * @param thumbprint - identifier of a certificate + * @param privateKey - secret key + * @param publicCertificate - electronic document provided to prove the ownership of the public key + */ + static fromCertificateWithSha256Thumbprint(thumbprint, privateKey, publicCertificate) { + const clientAssertion = new ClientAssertion(); + clientAssertion.privateKey = privateKey; + clientAssertion.thumbprint = thumbprint; + clientAssertion.useSha256 = true; + if (publicCertificate) { + clientAssertion.publicCertificate = + this.parseCertificate(publicCertificate); + } + return clientAssertion; + } + /** + * Update JWT for certificate based clientAssertion, if passed by the user, uses it as is + * @param cryptoProvider - library's crypto helper + * @param issuer - iss claim + * @param jwtAudience - aud claim + */ + getJwt(cryptoProvider, issuer, jwtAudience) { + // if assertion was created from certificate, check if jwt is expired and create new one. + if (this.privateKey && this.thumbprint) { + if (this.jwt && + !this.isExpired() && + issuer === this.issuer && + jwtAudience === this.jwtAudience) { + return this.jwt; + } + return this.createJwt(cryptoProvider, issuer, jwtAudience); + } + /* + * if assertion was created by caller, then we just append it. It is up to the caller to + * ensure that it contains necessary claims and that it is not expired. + */ + if (this.jwt) { + return this.jwt; + } + throw ClientAuthError_createClientAuthError(invalidAssertion); + } + /** + * JWT format and required claims specified: https://tools.ietf.org/html/rfc7523#section-3 + */ + createJwt(cryptoProvider, issuer, jwtAudience) { + this.issuer = issuer; + this.jwtAudience = jwtAudience; + const issuedAt = nowSeconds(); + this.expirationTime = issuedAt + 600; + const algorithm = this.useSha256 + ? JwtConstants.PSS_256 + : JwtConstants.RSA_256; + const header = { + alg: algorithm, + }; + const thumbprintHeader = this.useSha256 + ? JwtConstants.X5T_256 + : JwtConstants.X5T; + Object.assign(header, { + [thumbprintHeader]: EncodingUtils.base64EncodeUrl(this.thumbprint, EncodingTypes.HEX), + }); + if (this.publicCertificate) { + Object.assign(header, { + [JwtConstants.X5C]: this.publicCertificate, + }); + } + const payload = { + [JwtConstants.AUDIENCE]: this.jwtAudience, + [JwtConstants.EXPIRATION_TIME]: this.expirationTime, + [JwtConstants.ISSUER]: this.issuer, + [JwtConstants.SUBJECT]: this.issuer, + [JwtConstants.NOT_BEFORE]: issuedAt, + [JwtConstants.JWT_ID]: cryptoProvider.createNewGuid(), + }; + this.jwt = jsonwebtoken.sign(payload, this.privateKey, { header }); + return this.jwt; + } + /** + * Utility API to check expiration + */ + isExpired() { + return this.expirationTime < nowSeconds(); + } + /** + * Extracts the raw certs from a given certificate string and returns them in an array. + * @param publicCertificate - electronic document provided to prove the ownership of the public key + */ + static parseCertificate(publicCertificate) { + /** + * This is regex to identify the certs in a given certificate string. + * We want to look for the contents between the BEGIN and END certificate strings, without the associated newlines. + * The information in parens "(.+?)" is the capture group to represent the cert we want isolated. + * "." means any string character, "+" means match 1 or more times, and "?" means the shortest match. + * The "g" at the end of the regex means search the string globally, and the "s" enables the "." to match newlines. + */ + const regexToFindCerts = /-----BEGIN CERTIFICATE-----\r*\n(.+?)\r*\n-----END CERTIFICATE-----/gs; + const certs = []; + let matches; + while ((matches = regexToFindCerts.exec(publicCertificate)) !== null) { + // matches[1] represents the first parens capture group in the regex. + certs.push(matches[1].replace(/\r*\n/g, "")); + } + return certs; + } } -//# sourceMappingURL=HashUtils.mjs.map +//# sourceMappingURL=ClientAssertion.mjs.map -;// CONCATENATED MODULE: ./node_modules/@azure/msal-node/dist/crypto/PkceGenerator.mjs +;// CONCATENATED MODULE: ./node_modules/@azure/msal-node/dist/packageMetadata.mjs /*! @azure/msal-node v5.1.0 2026-03-13 */ +/* eslint-disable header/header */ +const dist_packageMetadata_name = "@azure/msal-node"; +const dist_packageMetadata_version = "5.1.0"; +//# sourceMappingURL=packageMetadata.mjs.map - - - -/* - * Copyright (c) Microsoft Corporation. All rights reserved. - * Licensed under the MIT License. - */ -/** - * https://tools.ietf.org/html/rfc7636#page-8 - */ -class PkceGenerator { - constructor() { - this.hashUtils = new HashUtils_HashUtils(); - } - /** - * generates the codeVerfier and the challenge from the codeVerfier - * reference: https://tools.ietf.org/html/rfc7636#section-4.1 and https://tools.ietf.org/html/rfc7636#section-4.2 - */ - async generatePkceCodes() { - const verifier = this.generateCodeVerifier(); - const challenge = this.generateCodeChallengeFromVerifier(verifier); - return { verifier, challenge }; - } - /** - * generates the codeVerfier; reference: https://tools.ietf.org/html/rfc7636#section-4.1 - */ - generateCodeVerifier() { - const charArr = []; - const maxNumber = 256 - (256 % CharSet.CV_CHARSET.length); - while (charArr.length <= RANDOM_OCTET_SIZE) { - const byte = external_crypto_.randomBytes(1)[0]; - if (byte >= maxNumber) { - /* - * Ignore this number to maintain randomness. - * Including it would result in an unequal distribution of characters after doing the modulo - */ - continue; - } - const index = byte % CharSet.CV_CHARSET.length; - charArr.push(CharSet.CV_CHARSET[index]); - } - const verifier = charArr.join(""); - return EncodingUtils.base64EncodeUrl(verifier); - } - /** - * generate the challenge from the codeVerfier; reference: https://tools.ietf.org/html/rfc7636#section-4.2 - * @param codeVerifier - */ - generateCodeChallengeFromVerifier(codeVerifier) { - return EncodingUtils.base64EncodeUrl(this.hashUtils - .sha256(codeVerifier) - .toString(EncodingTypes.BASE64), EncodingTypes.BASE64); - } -} - - -//# sourceMappingURL=PkceGenerator.mjs.map - -;// CONCATENATED MODULE: ./node_modules/@azure/msal-node/dist/crypto/CryptoProvider.mjs +;// CONCATENATED MODULE: ./node_modules/@azure/msal-node/dist/client/BaseClient.mjs /*! @azure/msal-node v5.1.0 2026-03-13 */ - - - -/* - * Copyright (c) Microsoft Corporation. All rights reserved. - * Licensed under the MIT License. - */ -/** - * This class implements MSAL node's crypto interface, which allows it to perform base64 encoding and decoding, generating cryptographically random GUIDs and - * implementing Proof Key for Code Exchange specs for the OAuth Authorization Code Flow using PKCE (rfc here: https://tools.ietf.org/html/rfc7636). - * @public - */ -class CryptoProvider_CryptoProvider { - constructor() { - // Browser crypto needs to be validated first before any other classes can be set. - this.pkceGenerator = new PkceGenerator(); - this.guidGenerator = new GuidGenerator(); - this.hashUtils = new HashUtils_HashUtils(); - } - /** - * base64 URL safe encoded string - */ - base64UrlEncode() { - throw new Error("Method not implemented."); - } - /** - * Stringifies and base64Url encodes input public key - * @param inputKid - public key id - * @returns Base64Url encoded public key - */ - encodeKid() { - throw new Error("Method not implemented."); - } - /** - * Creates a new random GUID - used to populate state and nonce. - * @returns string (GUID) - */ - createNewGuid() { - return this.guidGenerator.generateGuid(); - } - /** - * Encodes input string to base64. - * @param input - string to be encoded - */ - base64Encode(input) { - return EncodingUtils.base64Encode(input); - } - /** - * Decodes input string from base64. - * @param input - string to be decoded - */ - base64Decode(input) { - return EncodingUtils.base64Decode(input); - } - /** - * Generates PKCE codes used in Authorization Code Flow. - */ - generatePkceCodes() { - return this.pkceGenerator.generatePkceCodes(); - } - /** - * Generates a keypair, stores it and returns a thumbprint - not yet implemented for node - */ - getPublicKeyThumbprint() { - throw new Error("Method not implemented."); - } - /** - * Removes cryptographic keypair from key store matching the keyId passed in - * @param kid - public key id - */ - removeTokenBindingKey() { - throw new Error("Method not implemented."); - } - /** - * Removes all cryptographic keys from Keystore - */ - clearKeystore() { - throw new Error("Method not implemented."); - } - /** - * Signs the given object as a jwt payload with private key retrieved by given kid - currently not implemented for node - */ - signJwt() { - throw new Error("Method not implemented."); - } - /** - * Returns the SHA-256 hash of an input string - */ - async hashString(plainText) { - return EncodingUtils.base64EncodeUrl(this.hashUtils - .sha256(plainText) - .toString(EncodingTypes.BASE64), EncodingTypes.BASE64); - } +/* + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. + */ +/** + * Base application class which will construct requests to send to and handle responses from the Microsoft STS using the authorization code flow. + * @internal + */ +class BaseClient { + constructor(configuration) { + // Set the configuration + this.config = buildClientConfiguration(configuration); + // Initialize the logger + this.logger = new Logger_Logger(this.config.loggerOptions, dist_packageMetadata_name, dist_packageMetadata_version); + // Initialize crypto + this.cryptoUtils = this.config.cryptoInterface; + // Initialize storage interface + this.cacheManager = this.config.storageInterface; + // Set the network interface + this.networkClient = this.config.networkInterface; + // Set TelemetryManager + this.serverTelemetryManager = this.config.serverTelemetryManager; + // set Authority + this.authority = this.config.authOptions.authority; + this.performanceClient = new StubPerformanceClient_StubPerformanceClient(); + } + /** + * Creates default headers for requests to token endpoint + */ + createTokenRequestHeaders(ccsCred) { + return createTokenRequestHeaders(this.logger, false, ccsCred); + } + /** + * Http post to token endpoint + * @param tokenEndpoint + * @param queryString + * @param headers + * @param thumbprint + */ + async executePostToTokenEndpoint(tokenEndpoint, queryString, headers, thumbprint, correlationId) { + return executePostToTokenEndpoint(tokenEndpoint, queryString, headers, thumbprint, correlationId, this.cacheManager, this.networkClient, this.logger, this.performanceClient, this.serverTelemetryManager); + } + /** + * Wraps sendPostRequestAsync with necessary preflight and postflight logic + * @param thumbprint - Request thumbprint for throttling + * @param tokenEndpoint - Endpoint to make the POST to + * @param options - Body and Headers to include on the POST request + * @param correlationId - CorrelationId for telemetry + */ + async sendPostRequest(thumbprint, tokenEndpoint, options, correlationId) { + return sendPostRequest(thumbprint, tokenEndpoint, options, correlationId, this.cacheManager, this.networkClient, this.logger, this.performanceClient); + } + /** + * Creates query string for the /token request + * @param request + */ + createTokenQueryParameters(request) { + return createTokenQueryParameters(request, this.config.authOptions.clientId, this.config.authOptions.redirectUri, this.performanceClient); + } } -//# sourceMappingURL=CryptoProvider.mjs.map +//# sourceMappingURL=BaseClient.mjs.map -;// CONCATENATED MODULE: ./node_modules/@azure/msal-node/dist/cache/serializer/Deserializer.mjs +;// CONCATENATED MODULE: ./node_modules/@azure/msal-node/dist/client/UsernamePasswordClient.mjs /*! @azure/msal-node v5.1.0 2026-03-13 */ -/* - * Copyright (c) Microsoft Corporation. All rights reserved. - * Licensed under the MIT License. - */ -/** - * This class deserializes cache entities read from the file into in-memory object types defined internally - * @internal - */ -class Deserializer { - /** - * Parse the JSON blob in memory and deserialize the content - * @param cachedJson - JSON blob cache - */ - static deserializeJSONBlob(jsonFile) { - const deserializedCache = !jsonFile ? {} : JSON.parse(jsonFile); - return deserializedCache; - } - /** - * Deserializes accounts to AccountEntity objects - * @param accounts - accounts of type SerializedAccountEntity - */ - static deserializeAccounts(accounts) { - const accountObjects = {}; - if (accounts) { - Object.keys(accounts).map(function (key) { - const serializedAcc = accounts[key]; - const mappedAcc = { - homeAccountId: serializedAcc.home_account_id, - environment: serializedAcc.environment, - realm: serializedAcc.realm, - localAccountId: serializedAcc.local_account_id, - username: serializedAcc.username, - authorityType: serializedAcc.authority_type, - name: serializedAcc.name, - clientInfo: serializedAcc.client_info, - lastModificationTime: serializedAcc.last_modification_time, - lastModificationApp: serializedAcc.last_modification_app, - tenantProfiles: serializedAcc.tenantProfiles?.map((serializedTenantProfile) => { - return JSON.parse(serializedTenantProfile); - }), - lastUpdatedAt: Date.now().toString(), - }; - const account = {}; - CacheManager.toObject(account, mappedAcc); - accountObjects[key] = account; - }); - } - return accountObjects; - } - /** - * Deserializes id tokens to IdTokenEntity objects - * @param idTokens - credentials of type SerializedIdTokenEntity - */ - static deserializeIdTokens(idTokens) { - const idObjects = {}; - if (idTokens) { - Object.keys(idTokens).map(function (key) { - const serializedIdT = idTokens[key]; - const idToken = { - homeAccountId: serializedIdT.home_account_id, - environment: serializedIdT.environment, - credentialType: serializedIdT.credential_type, - clientId: serializedIdT.client_id, - secret: serializedIdT.secret, - realm: serializedIdT.realm, - lastUpdatedAt: Date.now().toString(), - }; - idObjects[key] = idToken; - }); - } - return idObjects; - } - /** - * Deserializes access tokens to AccessTokenEntity objects - * @param accessTokens - access tokens of type SerializedAccessTokenEntity - */ - static deserializeAccessTokens(accessTokens) { - const atObjects = {}; - if (accessTokens) { - Object.keys(accessTokens).map(function (key) { - const serializedAT = accessTokens[key]; - const accessToken = { - homeAccountId: serializedAT.home_account_id, - environment: serializedAT.environment, - credentialType: serializedAT.credential_type, - clientId: serializedAT.client_id, - secret: serializedAT.secret, - realm: serializedAT.realm, - target: serializedAT.target, - cachedAt: serializedAT.cached_at, - expiresOn: serializedAT.expires_on, - extendedExpiresOn: serializedAT.extended_expires_on, - refreshOn: serializedAT.refresh_on, - keyId: serializedAT.key_id, - tokenType: serializedAT.token_type, - userAssertionHash: serializedAT.userAssertionHash, - resource: serializedAT.resource, - lastUpdatedAt: Date.now().toString(), - }; - atObjects[key] = accessToken; - }); - } - return atObjects; - } - /** - * Deserializes refresh tokens to RefreshTokenEntity objects - * @param refreshTokens - refresh tokens of type SerializedRefreshTokenEntity - */ - static deserializeRefreshTokens(refreshTokens) { - const rtObjects = {}; - if (refreshTokens) { - Object.keys(refreshTokens).map(function (key) { - const serializedRT = refreshTokens[key]; - const refreshToken = { - homeAccountId: serializedRT.home_account_id, - environment: serializedRT.environment, - credentialType: serializedRT.credential_type, - clientId: serializedRT.client_id, - secret: serializedRT.secret, - familyId: serializedRT.family_id, - target: serializedRT.target, - realm: serializedRT.realm, - lastUpdatedAt: Date.now().toString(), - }; - rtObjects[key] = refreshToken; - }); - } - return rtObjects; - } - /** - * Deserializes appMetadata to AppMetaData objects - * @param appMetadata - app metadata of type SerializedAppMetadataEntity - */ - static deserializeAppMetadata(appMetadata) { - const appMetadataObjects = {}; - if (appMetadata) { - Object.keys(appMetadata).map(function (key) { - const serializedAmdt = appMetadata[key]; - appMetadataObjects[key] = { - clientId: serializedAmdt.client_id, - environment: serializedAmdt.environment, - familyId: serializedAmdt.family_id, - }; - }); - } - return appMetadataObjects; - } - /** - * Deserialize an inMemory Cache - * @param jsonCache - JSON blob cache - */ - static deserializeAllCache(jsonCache) { - return { - accounts: jsonCache.Account - ? this.deserializeAccounts(jsonCache.Account) - : {}, - idTokens: jsonCache.IdToken - ? this.deserializeIdTokens(jsonCache.IdToken) - : {}, - accessTokens: jsonCache.AccessToken - ? this.deserializeAccessTokens(jsonCache.AccessToken) - : {}, - refreshTokens: jsonCache.RefreshToken - ? this.deserializeRefreshTokens(jsonCache.RefreshToken) - : {}, - appMetadata: jsonCache.AppMetadata - ? this.deserializeAppMetadata(jsonCache.AppMetadata) - : {}, - }; - } -} - - -//# sourceMappingURL=Deserializer.mjs.map -;// CONCATENATED MODULE: ./node_modules/@azure/msal-node/dist/cache/serializer/Serializer.mjs -/*! @azure/msal-node v5.1.0 2026-03-13 */ -/* - * Copyright (c) Microsoft Corporation. All rights reserved. - * Licensed under the MIT License. - */ -/** - * This class serializes cache entities to be saved into in-memory object types defined internally - * @internal - */ -class Serializer { - /** - * serialize the JSON blob - * @param data - JSON blob cache - */ - static serializeJSONBlob(data) { - return JSON.stringify(data); - } - /** - * Serialize Accounts - * @param accCache - cache of accounts - */ - static serializeAccounts(accCache) { - const accounts = {}; - Object.keys(accCache).map(function (key) { - const accountEntity = accCache[key]; - accounts[key] = { - home_account_id: accountEntity.homeAccountId, - environment: accountEntity.environment, - realm: accountEntity.realm, - local_account_id: accountEntity.localAccountId, - username: accountEntity.username, - authority_type: accountEntity.authorityType, - name: accountEntity.name, - client_info: accountEntity.clientInfo, - last_modification_time: accountEntity.lastModificationTime, - last_modification_app: accountEntity.lastModificationApp, - tenantProfiles: accountEntity.tenantProfiles?.map((tenantProfile) => { - return JSON.stringify(tenantProfile); - }), - }; - }); - return accounts; - } - /** - * Serialize IdTokens - * @param idTCache - cache of ID tokens - */ - static serializeIdTokens(idTCache) { - const idTokens = {}; - Object.keys(idTCache).map(function (key) { - const idTEntity = idTCache[key]; - idTokens[key] = { - home_account_id: idTEntity.homeAccountId, - environment: idTEntity.environment, - credential_type: idTEntity.credentialType, - client_id: idTEntity.clientId, - secret: idTEntity.secret, - realm: idTEntity.realm, - }; - }); - return idTokens; - } - /** - * Serializes AccessTokens - * @param atCache - cache of access tokens - */ - static serializeAccessTokens(atCache) { - const accessTokens = {}; - Object.keys(atCache).map(function (key) { - const atEntity = atCache[key]; - accessTokens[key] = { - home_account_id: atEntity.homeAccountId, - environment: atEntity.environment, - credential_type: atEntity.credentialType, - client_id: atEntity.clientId, - secret: atEntity.secret, - realm: atEntity.realm, - target: atEntity.target, - cached_at: atEntity.cachedAt, - expires_on: atEntity.expiresOn, - extended_expires_on: atEntity.extendedExpiresOn, - refresh_on: atEntity.refreshOn, - key_id: atEntity.keyId, - token_type: atEntity.tokenType, - userAssertionHash: atEntity.userAssertionHash, - resource: atEntity.resource, - }; - }); - return accessTokens; - } - /** - * Serialize refreshTokens - * @param rtCache - cache of refresh tokens - */ - static serializeRefreshTokens(rtCache) { - const refreshTokens = {}; - Object.keys(rtCache).map(function (key) { - const rtEntity = rtCache[key]; - refreshTokens[key] = { - home_account_id: rtEntity.homeAccountId, - environment: rtEntity.environment, - credential_type: rtEntity.credentialType, - client_id: rtEntity.clientId, - secret: rtEntity.secret, - family_id: rtEntity.familyId, - target: rtEntity.target, - realm: rtEntity.realm, - }; - }); - return refreshTokens; - } - /** - * Serialize amdtCache - * @param amdtCache - cache of app metadata - */ - static serializeAppMetadata(amdtCache) { - const appMetadata = {}; - Object.keys(amdtCache).map(function (key) { - const amdtEntity = amdtCache[key]; - appMetadata[key] = { - client_id: amdtEntity.clientId, - environment: amdtEntity.environment, - family_id: amdtEntity.familyId, - }; - }); - return appMetadata; - } - /** - * Serialize the cache - * @param inMemCache - itemised cache read from the JSON - */ - static serializeAllCache(inMemCache) { - return { - Account: this.serializeAccounts(inMemCache.accounts), - IdToken: this.serializeIdTokens(inMemCache.idTokens), - AccessToken: this.serializeAccessTokens(inMemCache.accessTokens), - RefreshToken: this.serializeRefreshTokens(inMemCache.refreshTokens), - AppMetadata: this.serializeAppMetadata(inMemCache.appMetadata), - }; - } +/* + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. + */ +/** + * Oauth2.0 Password grant client + * Note: We are only supporting public clients for password grant and for purely testing purposes + * @public + * @deprecated - Use a more secure flow instead + */ +class UsernamePasswordClient extends BaseClient { + constructor(configuration) { + super(configuration); + } + /** + * API to acquire a token by passing the username and password to the service in exchage of credentials + * password_grant + * @param request - CommonUsernamePasswordRequest + */ + async acquireToken(request) { + this.logger.info("in acquireToken call in username-password client", request.correlationId); + const reqTimestamp = nowSeconds(); + const response = await this.executeTokenRequest(this.authority, request); + const responseHandler = new ResponseHandler(this.config.authOptions.clientId, this.cacheManager, this.cryptoUtils, this.logger, this.performanceClient, this.config.serializableCache, this.config.persistencePlugin); + // Validate response. This function throws a server error if an error is returned by the server. + responseHandler.validateTokenResponse(response.body, request.correlationId); + const tokenResponse = responseHandler.handleServerTokenResponse(response.body, this.authority, reqTimestamp, request, ApiId.acquireTokenByUsernamePassword); + return tokenResponse; + } + /** + * Executes POST request to token endpoint + * @param authority - authority object + * @param request - CommonUsernamePasswordRequest provided by the developer + */ + async executeTokenRequest(authority, request) { + const queryParametersString = this.createTokenQueryParameters(request); + const endpoint = UrlString.appendQueryString(authority.tokenEndpoint, queryParametersString); + const requestBody = await this.createTokenRequestBody(request); + const headers = this.createTokenRequestHeaders({ + credential: request.username, + type: CcsCredentialType.UPN, + }); + const thumbprint = { + clientId: this.config.authOptions.clientId, + authority: authority.canonicalAuthority, + scopes: request.scopes, + claims: request.claims, + authenticationScheme: request.authenticationScheme, + resourceRequestMethod: request.resourceRequestMethod, + resourceRequestUri: request.resourceRequestUri, + shrClaims: request.shrClaims, + sshKid: request.sshKid, + }; + return this.executePostToTokenEndpoint(endpoint, requestBody, headers, thumbprint, request.correlationId); + } + /** + * Generates a map for all the params to be sent to the service + * @param request - CommonUsernamePasswordRequest provided by the developer + */ + async createTokenRequestBody(request) { + const parameters = new Map(); + addClientId(parameters, this.config.authOptions.clientId); + addUsername(parameters, request.username); + addPassword(parameters, request.password); + addScopes(parameters, request.scopes); + addResponseType(parameters, OAuthResponseType.IDTOKEN_TOKEN); + addGrantType(parameters, GrantType.RESOURCE_OWNER_PASSWORD_GRANT); + addClientInfo(parameters); + addLibraryInfo(parameters, this.config.libraryInfo); + addApplicationTelemetry(parameters, this.config.telemetry.application); + addThrottling(parameters); + if (this.serverTelemetryManager) { + addServerTelemetry(parameters, this.serverTelemetryManager); + } + const correlationId = request.correlationId || + this.config.cryptoInterface.createNewGuid(); + addCorrelationId(parameters, correlationId); + if (this.config.clientCredentials.clientSecret) { + addClientSecret(parameters, this.config.clientCredentials.clientSecret); + } + const clientAssertion = this.config.clientCredentials.clientAssertion; + if (clientAssertion) { + addClientAssertion(parameters, await getClientAssertion(clientAssertion.assertion, this.config.authOptions.clientId, request.resourceRequestUri)); + addClientAssertionType(parameters, clientAssertion.assertionType); + } + if (!StringUtils_StringUtils.isEmptyObj(request.claims) || + (this.config.authOptions.clientCapabilities && + this.config.authOptions.clientCapabilities.length > 0)) { + addClaims(parameters, request.claims, this.config.authOptions.clientCapabilities); + } + if (this.config.systemOptions.preventCorsPreflight && + request.username) { + addCcsUpn(parameters, request.username); + } + return mapToQueryString(parameters); + } } -//# sourceMappingURL=Serializer.mjs.map - -;// CONCATENATED MODULE: ./node_modules/@azure/msal-node/dist/cache/CacheHelpers.mjs -/*! @azure/msal-node v5.1.0 2026-03-13 */ +//# sourceMappingURL=UsernamePasswordClient.mjs.map +;// CONCATENATED MODULE: ./node_modules/@azure/msal-common/dist/protocol/Authorize.mjs +/*! @azure/msal-common v16.3.0 2026-03-13 */ -/* - * Copyright (c) Microsoft Corporation. All rights reserved. - * Licensed under the MIT License. - */ -function generateCredentialKey(credential) { - const familyId = (credential.credentialType === CredentialType.REFRESH_TOKEN && - credential.familyId) || - credential.clientId; - const scheme = credential.tokenType && - credential.tokenType.toLowerCase() !== - AuthenticationScheme.BEARER.toLowerCase() - ? credential.tokenType.toLowerCase() - : ""; - const credentialKey = [ - credential.homeAccountId, - credential.environment, - credential.credentialType, - familyId, - credential.realm || "", - credential.target || "", - scheme, - ]; - return credentialKey.join(CACHE.KEY_SEPARATOR).toLowerCase(); -} -function generateAccountKey(account) { - const homeTenantId = account.homeAccountId.split(".")[1]; - const accountKey = [ - account.homeAccountId, - account.environment, - homeTenantId || account.tenantId || "", - ]; - return accountKey.join(CACHE.KEY_SEPARATOR).toLowerCase(); -} -//# sourceMappingURL=CacheHelpers.mjs.map -;// CONCATENATED MODULE: ./node_modules/@azure/msal-node/dist/cache/NodeStorage.mjs -/*! @azure/msal-node v5.1.0 2026-03-13 */ -/* - * Copyright (c) Microsoft Corporation. All rights reserved. - * Licensed under the MIT License. - */ -/** - * This class implements Storage for node, reading cache from user specified storage location or an extension library - * @public - */ -class NodeStorage_NodeStorage extends CacheManager { - constructor(logger, clientId, cryptoImpl, staticAuthorityOptions) { - super(clientId, cryptoImpl, logger, new StubPerformanceClient_StubPerformanceClient(), staticAuthorityOptions); - this.cache = {}; - this.changeEmitters = []; - this.logger = logger; - } - /** - * Queue up callbacks - * @param func - a callback function for cache change indication - */ - registerChangeEmitter(func) { - this.changeEmitters.push(func); - } - /** - * Invoke the callback when cache changes - */ - emitChange() { - this.changeEmitters.forEach((func) => func.call(null)); - } - /** - * Converts cacheKVStore to InMemoryCache - * @param cache - key value store - */ - cacheToInMemoryCache(cache) { - const inMemoryCache = { - accounts: {}, - idTokens: {}, - accessTokens: {}, - refreshTokens: {}, - appMetadata: {}, - }; - for (const key in cache) { - const value = cache[key]; - if (typeof value !== "object") { - continue; - } - if (isAccountEntity(value)) { - inMemoryCache.accounts[key] = value; - } - else if (isIdTokenEntity(value)) { - inMemoryCache.idTokens[key] = value; - } - else if (isAccessTokenEntity(value)) { - inMemoryCache.accessTokens[key] = value; - } - else if (isRefreshTokenEntity(value)) { - inMemoryCache.refreshTokens[key] = value; - } - else if (isAppMetadataEntity(key, value)) { - inMemoryCache.appMetadata[key] = value; - } - else { - continue; - } - } - return inMemoryCache; - } - /** - * converts inMemoryCache to CacheKVStore - * @param inMemoryCache - kvstore map for inmemory - */ - inMemoryCacheToCache(inMemoryCache) { - // convert in memory cache to a flat Key-Value map - let cache = this.getCache(); - cache = { - ...cache, - ...inMemoryCache.accounts, - ...inMemoryCache.idTokens, - ...inMemoryCache.accessTokens, - ...inMemoryCache.refreshTokens, - ...inMemoryCache.appMetadata, - }; - // convert in memory cache to a flat Key-Value map - return cache; - } - /** - * gets the current in memory cache for the client - */ - getInMemoryCache() { - this.logger.trace("Getting in-memory cache", ""); - // convert the cache key value store to inMemoryCache - const inMemoryCache = this.cacheToInMemoryCache(this.getCache()); - return inMemoryCache; - } - /** - * sets the current in memory cache for the client - * @param inMemoryCache - key value map in memory - */ - setInMemoryCache(inMemoryCache) { - this.logger.trace("Setting in-memory cache", ""); - // convert and append the inMemoryCache to cacheKVStore - const cache = this.inMemoryCacheToCache(inMemoryCache); - this.setCache(cache); - this.emitChange(); - } - /** - * get the current cache key-value store - */ - getCache() { - this.logger.trace("Getting cache key-value store", ""); - return this.cache; - } - /** - * sets the current cache (key value store) - * @param cacheMap - key value map - */ - setCache(cache) { - this.logger.trace("Setting cache key value store", ""); - this.cache = cache; - // mark change in cache - this.emitChange(); - } - /** - * Gets cache item with given key. - * @param key - lookup key for the cache entry - */ - getItem(key) { - this.logger.tracePii(`Item key: ${key}`, ""); - // read cache - const cache = this.getCache(); - return cache[key]; - } - /** - * Gets cache item with given key-value - * @param key - lookup key for the cache entry - * @param value - value of the cache entry - */ - setItem(key, value) { - this.logger.tracePii(`Item key: ${key}`, ""); - // read cache - const cache = this.getCache(); - cache[key] = value; - // write to cache - this.setCache(cache); - } - generateCredentialKey(credential) { - return generateCredentialKey(credential); - } - generateAccountKey(account) { - return generateAccountKey(account); - } - getAccountKeys() { - const inMemoryCache = this.getInMemoryCache(); - const accountKeys = Object.keys(inMemoryCache.accounts); - return accountKeys; - } - getTokenKeys() { - const inMemoryCache = this.getInMemoryCache(); - const tokenKeys = { - idToken: Object.keys(inMemoryCache.idTokens), - accessToken: Object.keys(inMemoryCache.accessTokens), - refreshToken: Object.keys(inMemoryCache.refreshTokens), - }; - return tokenKeys; - } - /** - * Reads account from cache, builds it into an account entity and returns it. - * @param accountKey - lookup key to fetch cache type AccountEntity - * @returns - */ - getAccount(accountKey) { - const cachedAccount = this.getItem(accountKey); - return cachedAccount && typeof cachedAccount === "object" - ? { ...cachedAccount } - : null; - } - /** - * set account entity - * @param account - cache value to be set of type AccountEntity - */ - async setAccount(account) { - const accountKey = this.generateAccountKey(getAccountInfo(account)); - this.setItem(accountKey, account); - } - /** - * fetch the idToken credential - * @param idTokenKey - lookup key to fetch cache type IdTokenEntity - */ - getIdTokenCredential(idTokenKey) { - const idToken = this.getItem(idTokenKey); - if (isIdTokenEntity(idToken)) { - return idToken; - } - return null; - } - /** - * set idToken credential - * @param idToken - cache value to be set of type IdTokenEntity - */ - async setIdTokenCredential(idToken) { - const idTokenKey = this.generateCredentialKey(idToken); - this.setItem(idTokenKey, idToken); - } - /** - * fetch the accessToken credential - * @param accessTokenKey - lookup key to fetch cache type AccessTokenEntity - */ - getAccessTokenCredential(accessTokenKey) { - const accessToken = this.getItem(accessTokenKey); - if (isAccessTokenEntity(accessToken)) { - return accessToken; - } - return null; - } - /** - * set accessToken credential - * @param accessToken - cache value to be set of type AccessTokenEntity - */ - async setAccessTokenCredential(accessToken) { - const accessTokenKey = this.generateCredentialKey(accessToken); - this.setItem(accessTokenKey, accessToken); - } - /** - * fetch the refreshToken credential - * @param refreshTokenKey - lookup key to fetch cache type RefreshTokenEntity - */ - getRefreshTokenCredential(refreshTokenKey) { - const refreshToken = this.getItem(refreshTokenKey); - if (isRefreshTokenEntity(refreshToken)) { - return refreshToken; - } - return null; - } - /** - * set refreshToken credential - * @param refreshToken - cache value to be set of type RefreshTokenEntity - */ - async setRefreshTokenCredential(refreshToken) { - const refreshTokenKey = this.generateCredentialKey(refreshToken); - this.setItem(refreshTokenKey, refreshToken); - } - /** - * fetch appMetadata entity from the platform cache - * @param appMetadataKey - lookup key to fetch cache type AppMetadataEntity - */ - getAppMetadata(appMetadataKey) { - const appMetadata = this.getItem(appMetadataKey); - if (isAppMetadataEntity(appMetadataKey, appMetadata)) { - return appMetadata; - } - return null; - } - /** - * set appMetadata entity to the platform cache - * @param appMetadata - cache value to be set of type AppMetadataEntity - */ - setAppMetadata(appMetadata) { - const appMetadataKey = generateAppMetadataKey(appMetadata); - this.setItem(appMetadataKey, appMetadata); - } - /** - * fetch server telemetry entity from the platform cache - * @param serverTelemetrykey - lookup key to fetch cache type ServerTelemetryEntity - */ - getServerTelemetry(serverTelemetrykey) { - const serverTelemetryEntity = this.getItem(serverTelemetrykey); - if (serverTelemetryEntity && - isServerTelemetryEntity(serverTelemetrykey, serverTelemetryEntity)) { - return serverTelemetryEntity; - } - return null; - } - /** - * set server telemetry entity to the platform cache - * @param serverTelemetryKey - lookup key to fetch cache type ServerTelemetryEntity - * @param serverTelemetry - cache value to be set of type ServerTelemetryEntity - */ - setServerTelemetry(serverTelemetryKey, serverTelemetry) { - this.setItem(serverTelemetryKey, serverTelemetry); - } - /** - * fetch authority metadata entity from the platform cache - * @param key - lookup key to fetch cache type AuthorityMetadataEntity - */ - getAuthorityMetadata(key) { - const authorityMetadataEntity = this.getItem(key); - if (authorityMetadataEntity && - isAuthorityMetadataEntity(key, authorityMetadataEntity)) { - return authorityMetadataEntity; - } - return null; - } - /** - * Get all authority metadata keys - */ - getAuthorityMetadataKeys() { - return this.getKeys().filter((key) => { - return this.isAuthorityMetadata(key); - }); - } - /** - * set authority metadata entity to the platform cache - * @param key - lookup key to fetch cache type AuthorityMetadataEntity - * @param metadata - cache value to be set of type AuthorityMetadataEntity - */ - setAuthorityMetadata(key, metadata) { - this.setItem(key, metadata); - } - /** - * fetch throttling entity from the platform cache - * @param throttlingCacheKey - lookup key to fetch cache type ThrottlingEntity - */ - getThrottlingCache(throttlingCacheKey) { - const throttlingCache = this.getItem(throttlingCacheKey); - if (throttlingCache && - isThrottlingEntity(throttlingCacheKey, throttlingCache)) { - return throttlingCache; - } - return null; - } - /** - * set throttling entity to the platform cache - * @param throttlingCacheKey - lookup key to fetch cache type ThrottlingEntity - * @param throttlingCache - cache value to be set of type ThrottlingEntity - */ - setThrottlingCache(throttlingCacheKey, throttlingCache) { - this.setItem(throttlingCacheKey, throttlingCache); - } - /** - * Removes the cache item from memory with the given key. - * @param key - lookup key to remove a cache entity - * @param inMemory - key value map of the cache - */ - removeItem(key) { - this.logger.tracePii(`Item key: ${key}`, ""); - // read inMemoryCache - let result = false; - const cache = this.getCache(); - if (!!cache[key]) { - delete cache[key]; - result = true; - } - // write to the cache after removal - if (result) { - this.setCache(cache); - this.emitChange(); - } - return result; - } - /** - * Remove account entity from the platform cache if it's outdated - * @param accountKey - lookup key to fetch cache type AccountEntity - */ - removeOutdatedAccount(accountKey) { - this.removeItem(accountKey); - } - /** - * Checks whether key is in cache. - * @param key - look up key for a cache entity - */ - containsKey(key) { - return this.getKeys().includes(key); - } - /** - * Gets all keys in window. - */ - getKeys() { - this.logger.trace("Retrieving all cache keys", ""); - // read cache - const cache = this.getCache(); - return [...Object.keys(cache)]; - } - /** - * Clears all cache entries created by MSAL (except tokens). - */ - clear() { - this.logger.trace("Clearing cache entries created by MSAL", ""); - // read inMemoryCache - const cacheKeys = this.getKeys(); - // delete each element - cacheKeys.forEach((key) => { - this.removeItem(key); - }); - this.emitChange(); - } - /** - * Initialize in memory cache from an exisiting cache vault - * @param cache - blob formatted cache (JSON) - */ - static generateInMemoryCache(cache) { - return Deserializer.deserializeAllCache(Deserializer.deserializeJSONBlob(cache)); - } - /** - * retrieves the final JSON - * @param inMemoryCache - itemised cache read from the JSON - */ - static generateJsonCache(inMemoryCache) { - return Serializer.serializeAllCache(inMemoryCache); - } - /** - * Updates a credential's cache key if the current cache key is outdated - */ - updateCredentialCacheKey(currentCacheKey, credential) { - const updatedCacheKey = this.generateCredentialKey(credential); - if (currentCacheKey !== updatedCacheKey) { - const cacheItem = this.getItem(currentCacheKey); - if (cacheItem) { - this.removeItem(currentCacheKey); - this.setItem(updatedCacheKey, cacheItem); - this.logger.verbose(`Updated an outdated ${credential.credentialType} cache key`, ""); - return updatedCacheKey; - } - else { - this.logger.error(`Attempted to update an outdated ${credential.credentialType} cache key but no item matching the outdated key was found in storage`, ""); - } - } - return currentCacheKey; - } +/* + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. + */ +/** + * Returns map of parameters that are applicable to all calls to /authorize whether using PKCE or EAR + * @param config + * @param request + * @param logger + * @param performanceClient + * @returns + */ +function getStandardAuthorizeRequestParameters(authOptions, request, logger, performanceClient) { + // generate the correlationId if not set by the user and add + const correlationId = request.correlationId; + const parameters = new Map(); + addClientId(parameters, request.embeddedClientId || + request.extraQueryParameters?.[CLIENT_ID] || + authOptions.clientId); + const requestScopes = [ + ...(request.scopes || []), + ...(request.extraScopesToConsent || []), + ]; + addScopes(parameters, requestScopes, true, authOptions.authority.options.OIDCOptions?.defaultScopes); + addResource(parameters, request.resource); + addRedirectUri(parameters, request.redirectUri); + addCorrelationId(parameters, correlationId); + // add response_mode. If not passed in it defaults to query. + addResponseMode(parameters, request.responseMode); + // add client_info=1 + addClientInfo(parameters); + if (request.prompt) { + addPrompt(parameters, request.prompt); + performanceClient?.addFields({ prompt: request.prompt }, correlationId); + } + if (request.domainHint) { + addDomainHint(parameters, request.domainHint); + performanceClient?.addFields({ domainHintFromRequest: true }, correlationId); + } + // Add sid or loginHint with preference for login_hint claim (in request) -> sid -> loginHint (upn/email) -> username of AccountInfo object + if (request.prompt !== PromptValue.SELECT_ACCOUNT) { + // AAD will throw if prompt=select_account is passed with an account hint + if (request.sid && request.prompt === PromptValue.NONE) { + // SessionID is only used in silent calls + logger.verbose("createAuthCodeUrlQueryString: Prompt is none, adding sid from request", request.correlationId); + addSid(parameters, request.sid); + performanceClient?.addFields({ sidFromRequest: true }, correlationId); + } + else if (request.account) { + const accountSid = extractAccountSid(request.account); + let accountLoginHintClaim = extractLoginHint(request.account); + if (accountLoginHintClaim && request.domainHint) { + logger.warning(`AuthorizationCodeClient.createAuthCodeUrlQueryString: "domainHint" param is set, skipping opaque "login_hint" claim. Please consider not passing domainHint`, request.correlationId); + accountLoginHintClaim = null; + } + // If login_hint claim is present, use it over sid/username + if (accountLoginHintClaim) { + logger.verbose("createAuthCodeUrlQueryString: login_hint claim present on account", request.correlationId); + addLoginHint(parameters, accountLoginHintClaim); + performanceClient?.addFields({ loginHintFromClaim: true }, correlationId); + try { + const clientInfo = buildClientInfoFromHomeAccountId(request.account.homeAccountId); + addCcsOid(parameters, clientInfo); + } + catch (e) { + logger.verbose("createAuthCodeUrlQueryString: Could not parse home account ID for CCS Header", request.correlationId); + } + } + else if (accountSid && request.prompt === PromptValue.NONE) { + /* + * If account and loginHint are provided, we will check account first for sid before adding loginHint + * SessionId is only used in silent calls + */ + logger.verbose("createAuthCodeUrlQueryString: Prompt is none, adding sid from account", request.correlationId); + addSid(parameters, accountSid); + performanceClient?.addFields({ sidFromClaim: true }, correlationId); + try { + const clientInfo = buildClientInfoFromHomeAccountId(request.account.homeAccountId); + addCcsOid(parameters, clientInfo); + } + catch (e) { + logger.verbose("createAuthCodeUrlQueryString: Could not parse home account ID for CCS Header", request.correlationId); + } + } + else if (request.loginHint) { + logger.verbose("createAuthCodeUrlQueryString: Adding login_hint from request", request.correlationId); + addLoginHint(parameters, request.loginHint); + addCcsUpn(parameters, request.loginHint); + performanceClient?.addFields({ loginHintFromRequest: true }, correlationId); + } + else if (request.account.username) { + // Fallback to account username if provided + logger.verbose("createAuthCodeUrlQueryString: Adding login_hint from account", request.correlationId); + addLoginHint(parameters, request.account.username); + performanceClient?.addFields({ loginHintFromUpn: true }, correlationId); + try { + const clientInfo = buildClientInfoFromHomeAccountId(request.account.homeAccountId); + addCcsOid(parameters, clientInfo); + } + catch (e) { + logger.verbose("createAuthCodeUrlQueryString: Could not parse home account ID for CCS Header", request.correlationId); + } + } + } + else if (request.loginHint) { + logger.verbose("createAuthCodeUrlQueryString: No account, adding login_hint from request", request.correlationId); + addLoginHint(parameters, request.loginHint); + addCcsUpn(parameters, request.loginHint); + performanceClient?.addFields({ loginHintFromRequest: true }, correlationId); + } + } + else { + logger.verbose("createAuthCodeUrlQueryString: Prompt is select_account, ignoring account hints", request.correlationId); + } + if (request.nonce) { + addNonce(parameters, request.nonce); + } + if (request.state) { + addState(parameters, request.state); + } + if (request.claims || + (authOptions.clientCapabilities && + authOptions.clientCapabilities.length > 0)) { + addClaims(parameters, request.claims, authOptions.clientCapabilities); + } + if (request.embeddedClientId) { + addBrokerParameters(parameters, authOptions.clientId, authOptions.redirectUri); + } + // If extraQueryParameters includes instance_aware its value will be added when extraQueryParameters are added + if (authOptions.instanceAware && + (!request.extraQueryParameters || + !Object.keys(request.extraQueryParameters).includes(INSTANCE_AWARE))) { + addInstanceAware(parameters); + } + return parameters; } - - -//# sourceMappingURL=NodeStorage.mjs.map - -;// CONCATENATED MODULE: ./node_modules/@azure/msal-node/dist/cache/TokenCache.mjs -/*! @azure/msal-node v5.1.0 2026-03-13 */ - - - - - - - - -/* - * Copyright (c) Microsoft Corporation. All rights reserved. - * Licensed under the MIT License. - */ -const defaultSerializedCache = { - Account: {}, - IdToken: {}, - AccessToken: {}, - RefreshToken: {}, - AppMetadata: {}, -}; -/** - * In-memory token cache manager - * @public - */ -class TokenCache { - constructor(storage, logger, cachePlugin) { - this.cacheHasChanged = false; - this.storage = storage; - this.storage.registerChangeEmitter(this.handleChangeEvent.bind(this)); - if (cachePlugin) { - this.persistence = cachePlugin; - } - this.logger = logger; - } - /** - * Set to true if cache state has changed since last time serialize or writeToPersistence was called - */ - hasChanged() { - return this.cacheHasChanged; - } - /** - * Serializes in memory cache to JSON - */ - serialize() { - this.logger.trace("Serializing in-memory cache", ""); - let finalState = Serializer.serializeAllCache(this.storage.getInMemoryCache()); - // if cacheSnapshot not null or empty, merge - if (this.cacheSnapshot) { - this.logger.trace("Reading cache snapshot from disk", ""); - finalState = this.mergeState(JSON.parse(this.cacheSnapshot), finalState); - } - else { - this.logger.trace("No cache snapshot to merge", ""); - } - this.cacheHasChanged = false; - return JSON.stringify(finalState); - } - /** - * Deserializes JSON to in-memory cache. JSON should be in MSAL cache schema format - * @param cache - blob formatted cache - */ - deserialize(cache) { - this.logger.trace("Deserializing JSON to in-memory cache", ""); - this.cacheSnapshot = cache; - if (this.cacheSnapshot) { - this.logger.trace("Reading cache snapshot from disk", ""); - const deserializedCache = Deserializer.deserializeAllCache(this.overlayDefaults(JSON.parse(this.cacheSnapshot))); - this.storage.setInMemoryCache(deserializedCache); - } - else { - this.logger.trace("No cache snapshot to deserialize", ""); - } - } - /** - * Fetches the cache key-value map - */ - getKVStore() { - return this.storage.getCache(); - } - /** - * Gets cache snapshot in CacheKVStore format - */ - getCacheSnapshot() { - const deserializedPersistentStorage = NodeStorage_NodeStorage.generateInMemoryCache(this.cacheSnapshot); - return this.storage.inMemoryCacheToCache(deserializedPersistentStorage); - } - /** - * API that retrieves all accounts currently in cache to the user - */ - async getAllAccounts(correlationId = new CryptoProvider_CryptoProvider().createNewGuid()) { - this.logger.trace("getAllAccounts called", correlationId); - let cacheContext; - try { - if (this.persistence) { - cacheContext = new TokenCacheContext(this, false); - await this.persistence.beforeCacheAccess(cacheContext); - } - return this.storage.getAllAccounts({}, correlationId); - } - finally { - if (this.persistence && cacheContext) { - await this.persistence.afterCacheAccess(cacheContext); - } - } - } - /** - * Returns the signed in account matching homeAccountId. - * (the account object is created at the time of successful login) - * or null when no matching account is found - * @param homeAccountId - unique identifier for an account (uid.utid) - */ - async getAccountByHomeId(homeAccountId) { - const allAccounts = await this.getAllAccounts(); - if (homeAccountId && allAccounts && allAccounts.length) { - return (allAccounts.filter((accountObj) => accountObj.homeAccountId === homeAccountId)[0] || null); - } - else { - return null; - } - } - /** - * Returns the signed in account matching localAccountId. - * (the account object is created at the time of successful login) - * or null when no matching account is found - * @param localAccountId - unique identifier of an account (sub/obj when homeAccountId cannot be populated) - */ - async getAccountByLocalId(localAccountId) { - const allAccounts = await this.getAllAccounts(); - if (localAccountId && allAccounts && allAccounts.length) { - return (allAccounts.filter((accountObj) => accountObj.localAccountId === localAccountId)[0] || null); - } - else { - return null; - } - } - /** - * API to remove a specific account and the relevant data from cache - * @param account - AccountInfo passed by the user - */ - async removeAccount(account, correlationId) { - this.logger.trace("removeAccount called", correlationId || ""); - let cacheContext; - try { - if (this.persistence) { - cacheContext = new TokenCacheContext(this, true); - await this.persistence.beforeCacheAccess(cacheContext); - } - this.storage.removeAccount(account, correlationId || new GuidGenerator().generateGuid()); - } - finally { - if (this.persistence && cacheContext) { - await this.persistence.afterCacheAccess(cacheContext); - } - } - } - /** - * Overwrites in-memory cache with persistent cache - */ - async overwriteCache() { - if (!this.persistence) { - this.logger.info("No persistence layer specified, cache cannot be overwritten", ""); - return; - } - this.logger.info("Overwriting in-memory cache with persistent cache", ""); - this.storage.clear(); - const cacheContext = new TokenCacheContext(this, false); - await this.persistence.beforeCacheAccess(cacheContext); - const cacheSnapshot = this.getCacheSnapshot(); - this.storage.setCache(cacheSnapshot); - await this.persistence.afterCacheAccess(cacheContext); - } - /** - * Called when the cache has changed state. - */ - handleChangeEvent() { - this.cacheHasChanged = true; - } - /** - * Merge in memory cache with the cache snapshot. - * @param oldState - cache before changes - * @param currentState - current cache state in the library - */ - mergeState(oldState, currentState) { - this.logger.trace("Merging in-memory cache with cache snapshot", ""); - const stateAfterRemoval = this.mergeRemovals(oldState, currentState); - return this.mergeUpdates(stateAfterRemoval, currentState); - } - /** - * Deep update of oldState based on newState values - * @param oldState - cache before changes - * @param newState - updated cache - */ - mergeUpdates(oldState, newState) { - Object.keys(newState).forEach((newKey) => { - const newValue = newState[newKey]; - // if oldState does not contain value but newValue does, add it - if (!oldState.hasOwnProperty(newKey)) { - if (newValue !== null) { - oldState[newKey] = newValue; - } - } - else { - // both oldState and newState contain the key, do deep update - const newValueNotNull = newValue !== null; - const newValueIsObject = typeof newValue === "object"; - const newValueIsNotArray = !Array.isArray(newValue); - const oldStateNotUndefinedOrNull = typeof oldState[newKey] !== "undefined" && - oldState[newKey] !== null; - if (newValueNotNull && - newValueIsObject && - newValueIsNotArray && - oldStateNotUndefinedOrNull) { - this.mergeUpdates(oldState[newKey], newValue); - } - else { - oldState[newKey] = newValue; - } - } - }); - return oldState; - } - /** - * Removes entities in oldState that the were removed from newState. If there are any unknown values in root of - * oldState that are not recognized, they are left untouched. - * @param oldState - cache before changes - * @param newState - updated cache - */ - mergeRemovals(oldState, newState) { - this.logger.trace("Remove updated entries in cache", ""); - const accounts = oldState.Account - ? this.mergeRemovalsDict(oldState.Account, newState.Account) - : oldState.Account; - const accessTokens = oldState.AccessToken - ? this.mergeRemovalsDict(oldState.AccessToken, newState.AccessToken) - : oldState.AccessToken; - const refreshTokens = oldState.RefreshToken - ? this.mergeRemovalsDict(oldState.RefreshToken, newState.RefreshToken) - : oldState.RefreshToken; - const idTokens = oldState.IdToken - ? this.mergeRemovalsDict(oldState.IdToken, newState.IdToken) - : oldState.IdToken; - const appMetadata = oldState.AppMetadata - ? this.mergeRemovalsDict(oldState.AppMetadata, newState.AppMetadata) - : oldState.AppMetadata; - return { - ...oldState, - Account: accounts, - AccessToken: accessTokens, - RefreshToken: refreshTokens, - IdToken: idTokens, - AppMetadata: appMetadata, - }; - } - /** - * Helper to merge new cache with the old one - * @param oldState - cache before changes - * @param newState - updated cache - */ - mergeRemovalsDict(oldState, newState) { - const finalState = { ...oldState }; - Object.keys(oldState).forEach((oldKey) => { - if (!newState || !newState.hasOwnProperty(oldKey)) { - delete finalState[oldKey]; - } - }); - return finalState; - } - /** - * Helper to overlay as a part of cache merge - * @param passedInCache - cache read from the blob - */ - overlayDefaults(passedInCache) { - this.logger.trace("Overlaying input cache with the default cache", ""); - return { - Account: { - ...defaultSerializedCache.Account, - ...passedInCache.Account, - }, - IdToken: { - ...defaultSerializedCache.IdToken, - ...passedInCache.IdToken, - }, - AccessToken: { - ...defaultSerializedCache.AccessToken, - ...passedInCache.AccessToken, - }, - RefreshToken: { - ...defaultSerializedCache.RefreshToken, - ...passedInCache.RefreshToken, - }, - AppMetadata: { - ...defaultSerializedCache.AppMetadata, - ...passedInCache.AppMetadata, - }, - }; - } +/** + * Returns authorize endpoint with given request parameters in the query string + * @param authority + * @param requestParameters + * @returns + */ +function getAuthorizeUrl(authority, requestParameters) { + const queryString = mapToQueryString(requestParameters); + return UrlString.appendQueryString(authority.authorizationEndpoint, queryString); } - - -//# sourceMappingURL=TokenCache.mjs.map - -// EXTERNAL MODULE: ./node_modules/jsonwebtoken/index.js -var jsonwebtoken = __nccwpck_require__(9653); -;// CONCATENATED MODULE: ./node_modules/@azure/msal-node/dist/error/ClientAuthErrorCodes.mjs -/*! @azure/msal-node v5.1.0 2026-03-13 */ - -/* - * Copyright (c) Microsoft Corporation. All rights reserved. - * Licensed under the MIT License. - */ -const missingTenantIdError = "missing_tenant_id_error"; -const userTimeoutReached = "user_timeout_reached"; -const invalidAssertion = "invalid_assertion"; -const invalidClientCredential = "invalid_client_credential"; -const deviceCodePollingCancelled = "device_code_polling_cancelled"; -const deviceCodeExpired = "device_code_expired"; -const deviceCodeUnknownError = "device_code_unknown_error"; - - -//# sourceMappingURL=ClientAuthErrorCodes.mjs.map - -;// CONCATENATED MODULE: ./node_modules/@azure/msal-node/dist/client/ClientAssertion.mjs -/*! @azure/msal-node v5.1.0 2026-03-13 */ - - - - - - - -/* - * Copyright (c) Microsoft Corporation. All rights reserved. - * Licensed under the MIT License. - */ -/** - * Client assertion of type jwt-bearer used in confidential client flows - * @public - */ -class ClientAssertion { - /** - * Initialize the ClientAssertion class from the clientAssertion passed by the user - * @param assertion - refer https://tools.ietf.org/html/rfc7521 - */ - static fromAssertion(assertion) { - const clientAssertion = new ClientAssertion(); - clientAssertion.jwt = assertion; - return clientAssertion; - } - /** - * @deprecated Use fromCertificateWithSha256Thumbprint instead, with a SHA-256 thumprint - * Initialize the ClientAssertion class from the certificate passed by the user - * @param thumbprint - identifier of a certificate - * @param privateKey - secret key - * @param publicCertificate - electronic document provided to prove the ownership of the public key - */ - static fromCertificate(thumbprint, privateKey, publicCertificate) { - const clientAssertion = new ClientAssertion(); - clientAssertion.privateKey = privateKey; - clientAssertion.thumbprint = thumbprint; - clientAssertion.useSha256 = false; - if (publicCertificate) { - clientAssertion.publicCertificate = - this.parseCertificate(publicCertificate); - } - return clientAssertion; - } - /** - * Initialize the ClientAssertion class from the certificate passed by the user - * @param thumbprint - identifier of a certificate - * @param privateKey - secret key - * @param publicCertificate - electronic document provided to prove the ownership of the public key - */ - static fromCertificateWithSha256Thumbprint(thumbprint, privateKey, publicCertificate) { - const clientAssertion = new ClientAssertion(); - clientAssertion.privateKey = privateKey; - clientAssertion.thumbprint = thumbprint; - clientAssertion.useSha256 = true; - if (publicCertificate) { - clientAssertion.publicCertificate = - this.parseCertificate(publicCertificate); - } - return clientAssertion; - } - /** - * Update JWT for certificate based clientAssertion, if passed by the user, uses it as is - * @param cryptoProvider - library's crypto helper - * @param issuer - iss claim - * @param jwtAudience - aud claim - */ - getJwt(cryptoProvider, issuer, jwtAudience) { - // if assertion was created from certificate, check if jwt is expired and create new one. - if (this.privateKey && this.thumbprint) { - if (this.jwt && - !this.isExpired() && - issuer === this.issuer && - jwtAudience === this.jwtAudience) { - return this.jwt; - } - return this.createJwt(cryptoProvider, issuer, jwtAudience); - } - /* - * if assertion was created by caller, then we just append it. It is up to the caller to - * ensure that it contains necessary claims and that it is not expired. - */ - if (this.jwt) { - return this.jwt; - } - throw ClientAuthError_createClientAuthError(invalidAssertion); - } - /** - * JWT format and required claims specified: https://tools.ietf.org/html/rfc7523#section-3 - */ - createJwt(cryptoProvider, issuer, jwtAudience) { - this.issuer = issuer; - this.jwtAudience = jwtAudience; - const issuedAt = nowSeconds(); - this.expirationTime = issuedAt + 600; - const algorithm = this.useSha256 - ? JwtConstants.PSS_256 - : JwtConstants.RSA_256; - const header = { - alg: algorithm, - }; - const thumbprintHeader = this.useSha256 - ? JwtConstants.X5T_256 - : JwtConstants.X5T; - Object.assign(header, { - [thumbprintHeader]: EncodingUtils.base64EncodeUrl(this.thumbprint, EncodingTypes.HEX), - }); - if (this.publicCertificate) { - Object.assign(header, { - [JwtConstants.X5C]: this.publicCertificate, - }); - } - const payload = { - [JwtConstants.AUDIENCE]: this.jwtAudience, - [JwtConstants.EXPIRATION_TIME]: this.expirationTime, - [JwtConstants.ISSUER]: this.issuer, - [JwtConstants.SUBJECT]: this.issuer, - [JwtConstants.NOT_BEFORE]: issuedAt, - [JwtConstants.JWT_ID]: cryptoProvider.createNewGuid(), - }; - this.jwt = jsonwebtoken.sign(payload, this.privateKey, { header }); - return this.jwt; - } - /** - * Utility API to check expiration - */ - isExpired() { - return this.expirationTime < nowSeconds(); - } - /** - * Extracts the raw certs from a given certificate string and returns them in an array. - * @param publicCertificate - electronic document provided to prove the ownership of the public key - */ - static parseCertificate(publicCertificate) { - /** - * This is regex to identify the certs in a given certificate string. - * We want to look for the contents between the BEGIN and END certificate strings, without the associated newlines. - * The information in parens "(.+?)" is the capture group to represent the cert we want isolated. - * "." means any string character, "+" means match 1 or more times, and "?" means the shortest match. - * The "g" at the end of the regex means search the string globally, and the "s" enables the "." to match newlines. - */ - const regexToFindCerts = /-----BEGIN CERTIFICATE-----\r*\n(.+?)\r*\n-----END CERTIFICATE-----/gs; - const certs = []; - let matches; - while ((matches = regexToFindCerts.exec(publicCertificate)) !== null) { - // matches[1] represents the first parens capture group in the regex. - certs.push(matches[1].replace(/\r*\n/g, "")); - } - return certs; - } +/** + * Handles the hash fragment response from public client code request. Returns a code response used by + * the client to exchange for a token in acquireToken. + * @param serverParams + * @param cachedState + */ +function getAuthorizationCodePayload(serverParams, cachedState) { + // Get code response + validateAuthorizationResponse(serverParams, cachedState); + // throw when there is no auth code in the response + if (!serverParams.code) { + throw createClientAuthError(authorizationCodeMissingFromServerResponse); + } + return serverParams; } - - -//# sourceMappingURL=ClientAssertion.mjs.map - -;// CONCATENATED MODULE: ./node_modules/@azure/msal-node/dist/packageMetadata.mjs -/*! @azure/msal-node v5.1.0 2026-03-13 */ - -/* eslint-disable header/header */ -const dist_packageMetadata_name = "@azure/msal-node"; -const dist_packageMetadata_version = "5.1.0"; - - -//# sourceMappingURL=packageMetadata.mjs.map - -;// CONCATENATED MODULE: ./node_modules/@azure/msal-node/dist/client/BaseClient.mjs -/*! @azure/msal-node v5.1.0 2026-03-13 */ - - - - -/* - * Copyright (c) Microsoft Corporation. All rights reserved. - * Licensed under the MIT License. - */ -/** - * Base application class which will construct requests to send to and handle responses from the Microsoft STS using the authorization code flow. - * @internal - */ -class BaseClient { - constructor(configuration) { - // Set the configuration - this.config = buildClientConfiguration(configuration); - // Initialize the logger - this.logger = new Logger_Logger(this.config.loggerOptions, dist_packageMetadata_name, dist_packageMetadata_version); - // Initialize crypto - this.cryptoUtils = this.config.cryptoInterface; - // Initialize storage interface - this.cacheManager = this.config.storageInterface; - // Set the network interface - this.networkClient = this.config.networkInterface; - // Set TelemetryManager - this.serverTelemetryManager = this.config.serverTelemetryManager; - // set Authority - this.authority = this.config.authOptions.authority; - this.performanceClient = new StubPerformanceClient_StubPerformanceClient(); - } - /** - * Creates default headers for requests to token endpoint - */ - createTokenRequestHeaders(ccsCred) { - return createTokenRequestHeaders(this.logger, false, ccsCred); - } - /** - * Http post to token endpoint - * @param tokenEndpoint - * @param queryString - * @param headers - * @param thumbprint - */ - async executePostToTokenEndpoint(tokenEndpoint, queryString, headers, thumbprint, correlationId) { - return executePostToTokenEndpoint(tokenEndpoint, queryString, headers, thumbprint, correlationId, this.cacheManager, this.networkClient, this.logger, this.performanceClient, this.serverTelemetryManager); - } - /** - * Wraps sendPostRequestAsync with necessary preflight and postflight logic - * @param thumbprint - Request thumbprint for throttling - * @param tokenEndpoint - Endpoint to make the POST to - * @param options - Body and Headers to include on the POST request - * @param correlationId - CorrelationId for telemetry - */ - async sendPostRequest(thumbprint, tokenEndpoint, options, correlationId) { - return sendPostRequest(thumbprint, tokenEndpoint, options, correlationId, this.cacheManager, this.networkClient, this.logger, this.performanceClient); - } - /** - * Creates query string for the /token request - * @param request - */ - createTokenQueryParameters(request) { - return createTokenQueryParameters(request, this.config.authOptions.clientId, this.config.authOptions.redirectUri, this.performanceClient); - } +/** + * Function which validates server authorization code response. + * @param serverResponseHash + * @param requestState + */ +function validateAuthorizationResponse(serverResponse, requestState) { + if (!serverResponse.state || !requestState) { + throw serverResponse.state + ? createClientAuthError(stateNotFound, "Cached State") + : createClientAuthError(stateNotFound, "Server State"); + } + let decodedServerResponseState; + let decodedRequestState; + try { + decodedServerResponseState = decodeURIComponent(serverResponse.state); + } + catch (e) { + throw createClientAuthError(invalidState, serverResponse.state); + } + try { + decodedRequestState = decodeURIComponent(requestState); + } + catch (e) { + throw createClientAuthError(invalidState, serverResponse.state); + } + if (decodedServerResponseState !== decodedRequestState) { + throw createClientAuthError(stateMismatch); + } + // Check for error + if (serverResponse.error || + serverResponse.error_description || + serverResponse.suberror) { + const serverErrorNo = parseServerErrorNo(serverResponse); + if (isInteractionRequiredError(serverResponse.error, serverResponse.error_description, serverResponse.suberror)) { + throw new InteractionRequiredAuthError(serverResponse.error || "", serverResponse.error_description, serverResponse.suberror, serverResponse.timestamp || "", serverResponse.trace_id || "", serverResponse.correlation_id || "", serverResponse.claims || "", serverErrorNo); + } + throw new ServerError(serverResponse.error || "", serverResponse.error_description, serverResponse.suberror, serverErrorNo); + } } - - -//# sourceMappingURL=BaseClient.mjs.map - -;// CONCATENATED MODULE: ./node_modules/@azure/msal-node/dist/client/UsernamePasswordClient.mjs -/*! @azure/msal-node v5.1.0 2026-03-13 */ - - - - - -/* - * Copyright (c) Microsoft Corporation. All rights reserved. - * Licensed under the MIT License. - */ -/** - * Oauth2.0 Password grant client - * Note: We are only supporting public clients for password grant and for purely testing purposes - * @public - * @deprecated - Use a more secure flow instead - */ -class UsernamePasswordClient extends BaseClient { - constructor(configuration) { - super(configuration); - } - /** - * API to acquire a token by passing the username and password to the service in exchage of credentials - * password_grant - * @param request - CommonUsernamePasswordRequest - */ - async acquireToken(request) { - this.logger.info("in acquireToken call in username-password client", request.correlationId); - const reqTimestamp = nowSeconds(); - const response = await this.executeTokenRequest(this.authority, request); - const responseHandler = new ResponseHandler(this.config.authOptions.clientId, this.cacheManager, this.cryptoUtils, this.logger, this.performanceClient, this.config.serializableCache, this.config.persistencePlugin); - // Validate response. This function throws a server error if an error is returned by the server. - responseHandler.validateTokenResponse(response.body, request.correlationId); - const tokenResponse = responseHandler.handleServerTokenResponse(response.body, this.authority, reqTimestamp, request, ApiId.acquireTokenByUsernamePassword); - return tokenResponse; - } - /** - * Executes POST request to token endpoint - * @param authority - authority object - * @param request - CommonUsernamePasswordRequest provided by the developer - */ - async executeTokenRequest(authority, request) { - const queryParametersString = this.createTokenQueryParameters(request); - const endpoint = UrlString.appendQueryString(authority.tokenEndpoint, queryParametersString); - const requestBody = await this.createTokenRequestBody(request); - const headers = this.createTokenRequestHeaders({ - credential: request.username, - type: CcsCredentialType.UPN, - }); - const thumbprint = { - clientId: this.config.authOptions.clientId, - authority: authority.canonicalAuthority, - scopes: request.scopes, - claims: request.claims, - authenticationScheme: request.authenticationScheme, - resourceRequestMethod: request.resourceRequestMethod, - resourceRequestUri: request.resourceRequestUri, - shrClaims: request.shrClaims, - sshKid: request.sshKid, - }; - return this.executePostToTokenEndpoint(endpoint, requestBody, headers, thumbprint, request.correlationId); - } - /** - * Generates a map for all the params to be sent to the service - * @param request - CommonUsernamePasswordRequest provided by the developer - */ - async createTokenRequestBody(request) { - const parameters = new Map(); - addClientId(parameters, this.config.authOptions.clientId); - addUsername(parameters, request.username); - addPassword(parameters, request.password); - addScopes(parameters, request.scopes); - addResponseType(parameters, OAuthResponseType.IDTOKEN_TOKEN); - addGrantType(parameters, GrantType.RESOURCE_OWNER_PASSWORD_GRANT); - addClientInfo(parameters); - addLibraryInfo(parameters, this.config.libraryInfo); - addApplicationTelemetry(parameters, this.config.telemetry.application); - addThrottling(parameters); - if (this.serverTelemetryManager) { - addServerTelemetry(parameters, this.serverTelemetryManager); - } - const correlationId = request.correlationId || - this.config.cryptoInterface.createNewGuid(); - addCorrelationId(parameters, correlationId); - if (this.config.clientCredentials.clientSecret) { - addClientSecret(parameters, this.config.clientCredentials.clientSecret); - } - const clientAssertion = this.config.clientCredentials.clientAssertion; - if (clientAssertion) { - addClientAssertion(parameters, await getClientAssertion(clientAssertion.assertion, this.config.authOptions.clientId, request.resourceRequestUri)); - addClientAssertionType(parameters, clientAssertion.assertionType); - } - if (!StringUtils_StringUtils.isEmptyObj(request.claims) || - (this.config.authOptions.clientCapabilities && - this.config.authOptions.clientCapabilities.length > 0)) { - addClaims(parameters, request.claims, this.config.authOptions.clientCapabilities); - } - if (this.config.systemOptions.preventCorsPreflight && - request.username) { - addCcsUpn(parameters, request.username); - } - return mapToQueryString(parameters); - } +/** + * Get server error No from the error_uri + * @param serverResponse + * @returns + */ +function parseServerErrorNo(serverResponse) { + const errorCodePrefix = "code="; + const errorCodePrefixIndex = serverResponse.error_uri?.lastIndexOf(errorCodePrefix); + return errorCodePrefixIndex && errorCodePrefixIndex >= 0 + ? serverResponse.error_uri?.substring(errorCodePrefixIndex + errorCodePrefix.length) + : undefined; } - - -//# sourceMappingURL=UsernamePasswordClient.mjs.map - -;// CONCATENATED MODULE: ./node_modules/@azure/msal-common/dist/protocol/Authorize.mjs -/*! @azure/msal-common v16.3.0 2026-03-13 */ - - - - - - - - - - - - -/* - * Copyright (c) Microsoft Corporation. All rights reserved. - * Licensed under the MIT License. - */ -/** - * Returns map of parameters that are applicable to all calls to /authorize whether using PKCE or EAR - * @param config - * @param request - * @param logger - * @param performanceClient - * @returns - */ -function getStandardAuthorizeRequestParameters(authOptions, request, logger, performanceClient) { - // generate the correlationId if not set by the user and add - const correlationId = request.correlationId; - const parameters = new Map(); - addClientId(parameters, request.embeddedClientId || - request.extraQueryParameters?.[CLIENT_ID] || - authOptions.clientId); - const requestScopes = [ - ...(request.scopes || []), - ...(request.extraScopesToConsent || []), - ]; - addScopes(parameters, requestScopes, true, authOptions.authority.options.OIDCOptions?.defaultScopes); - addResource(parameters, request.resource); - addRedirectUri(parameters, request.redirectUri); - addCorrelationId(parameters, correlationId); - // add response_mode. If not passed in it defaults to query. - addResponseMode(parameters, request.responseMode); - // add client_info=1 - addClientInfo(parameters); - if (request.prompt) { - addPrompt(parameters, request.prompt); - performanceClient?.addFields({ prompt: request.prompt }, correlationId); - } - if (request.domainHint) { - addDomainHint(parameters, request.domainHint); - performanceClient?.addFields({ domainHintFromRequest: true }, correlationId); - } - // Add sid or loginHint with preference for login_hint claim (in request) -> sid -> loginHint (upn/email) -> username of AccountInfo object - if (request.prompt !== PromptValue.SELECT_ACCOUNT) { - // AAD will throw if prompt=select_account is passed with an account hint - if (request.sid && request.prompt === PromptValue.NONE) { - // SessionID is only used in silent calls - logger.verbose("createAuthCodeUrlQueryString: Prompt is none, adding sid from request", request.correlationId); - addSid(parameters, request.sid); - performanceClient?.addFields({ sidFromRequest: true }, correlationId); - } - else if (request.account) { - const accountSid = extractAccountSid(request.account); - let accountLoginHintClaim = extractLoginHint(request.account); - if (accountLoginHintClaim && request.domainHint) { - logger.warning(`AuthorizationCodeClient.createAuthCodeUrlQueryString: "domainHint" param is set, skipping opaque "login_hint" claim. Please consider not passing domainHint`, request.correlationId); - accountLoginHintClaim = null; - } - // If login_hint claim is present, use it over sid/username - if (accountLoginHintClaim) { - logger.verbose("createAuthCodeUrlQueryString: login_hint claim present on account", request.correlationId); - addLoginHint(parameters, accountLoginHintClaim); - performanceClient?.addFields({ loginHintFromClaim: true }, correlationId); - try { - const clientInfo = buildClientInfoFromHomeAccountId(request.account.homeAccountId); - addCcsOid(parameters, clientInfo); - } - catch (e) { - logger.verbose("createAuthCodeUrlQueryString: Could not parse home account ID for CCS Header", request.correlationId); - } - } - else if (accountSid && request.prompt === PromptValue.NONE) { - /* - * If account and loginHint are provided, we will check account first for sid before adding loginHint - * SessionId is only used in silent calls - */ - logger.verbose("createAuthCodeUrlQueryString: Prompt is none, adding sid from account", request.correlationId); - addSid(parameters, accountSid); - performanceClient?.addFields({ sidFromClaim: true }, correlationId); - try { - const clientInfo = buildClientInfoFromHomeAccountId(request.account.homeAccountId); - addCcsOid(parameters, clientInfo); - } - catch (e) { - logger.verbose("createAuthCodeUrlQueryString: Could not parse home account ID for CCS Header", request.correlationId); - } - } - else if (request.loginHint) { - logger.verbose("createAuthCodeUrlQueryString: Adding login_hint from request", request.correlationId); - addLoginHint(parameters, request.loginHint); - addCcsUpn(parameters, request.loginHint); - performanceClient?.addFields({ loginHintFromRequest: true }, correlationId); - } - else if (request.account.username) { - // Fallback to account username if provided - logger.verbose("createAuthCodeUrlQueryString: Adding login_hint from account", request.correlationId); - addLoginHint(parameters, request.account.username); - performanceClient?.addFields({ loginHintFromUpn: true }, correlationId); - try { - const clientInfo = buildClientInfoFromHomeAccountId(request.account.homeAccountId); - addCcsOid(parameters, clientInfo); - } - catch (e) { - logger.verbose("createAuthCodeUrlQueryString: Could not parse home account ID for CCS Header", request.correlationId); - } - } - } - else if (request.loginHint) { - logger.verbose("createAuthCodeUrlQueryString: No account, adding login_hint from request", request.correlationId); - addLoginHint(parameters, request.loginHint); - addCcsUpn(parameters, request.loginHint); - performanceClient?.addFields({ loginHintFromRequest: true }, correlationId); - } - } - else { - logger.verbose("createAuthCodeUrlQueryString: Prompt is select_account, ignoring account hints", request.correlationId); - } - if (request.nonce) { - addNonce(parameters, request.nonce); - } - if (request.state) { - addState(parameters, request.state); - } - if (request.claims || - (authOptions.clientCapabilities && - authOptions.clientCapabilities.length > 0)) { - addClaims(parameters, request.claims, authOptions.clientCapabilities); - } - if (request.embeddedClientId) { - addBrokerParameters(parameters, authOptions.clientId, authOptions.redirectUri); - } - // If extraQueryParameters includes instance_aware its value will be added when extraQueryParameters are added - if (authOptions.instanceAware && - (!request.extraQueryParameters || - !Object.keys(request.extraQueryParameters).includes(INSTANCE_AWARE))) { - addInstanceAware(parameters); - } - return parameters; -} -/** - * Returns authorize endpoint with given request parameters in the query string - * @param authority - * @param requestParameters - * @returns - */ -function getAuthorizeUrl(authority, requestParameters) { - const queryString = mapToQueryString(requestParameters); - return UrlString.appendQueryString(authority.authorizationEndpoint, queryString); -} -/** - * Handles the hash fragment response from public client code request. Returns a code response used by - * the client to exchange for a token in acquireToken. - * @param serverParams - * @param cachedState - */ -function getAuthorizationCodePayload(serverParams, cachedState) { - // Get code response - validateAuthorizationResponse(serverParams, cachedState); - // throw when there is no auth code in the response - if (!serverParams.code) { - throw createClientAuthError(authorizationCodeMissingFromServerResponse); - } - return serverParams; -} -/** - * Function which validates server authorization code response. - * @param serverResponseHash - * @param requestState - */ -function validateAuthorizationResponse(serverResponse, requestState) { - if (!serverResponse.state || !requestState) { - throw serverResponse.state - ? createClientAuthError(stateNotFound, "Cached State") - : createClientAuthError(stateNotFound, "Server State"); - } - let decodedServerResponseState; - let decodedRequestState; - try { - decodedServerResponseState = decodeURIComponent(serverResponse.state); - } - catch (e) { - throw createClientAuthError(invalidState, serverResponse.state); - } - try { - decodedRequestState = decodeURIComponent(requestState); - } - catch (e) { - throw createClientAuthError(invalidState, serverResponse.state); - } - if (decodedServerResponseState !== decodedRequestState) { - throw createClientAuthError(stateMismatch); - } - // Check for error - if (serverResponse.error || - serverResponse.error_description || - serverResponse.suberror) { - const serverErrorNo = parseServerErrorNo(serverResponse); - if (isInteractionRequiredError(serverResponse.error, serverResponse.error_description, serverResponse.suberror)) { - throw new InteractionRequiredAuthError(serverResponse.error || "", serverResponse.error_description, serverResponse.suberror, serverResponse.timestamp || "", serverResponse.trace_id || "", serverResponse.correlation_id || "", serverResponse.claims || "", serverErrorNo); - } - throw new ServerError(serverResponse.error || "", serverResponse.error_description, serverResponse.suberror, serverErrorNo); - } -} -/** - * Get server error No from the error_uri - * @param serverResponse - * @returns - */ -function parseServerErrorNo(serverResponse) { - const errorCodePrefix = "code="; - const errorCodePrefixIndex = serverResponse.error_uri?.lastIndexOf(errorCodePrefix); - return errorCodePrefixIndex && errorCodePrefixIndex >= 0 - ? serverResponse.error_uri?.substring(errorCodePrefixIndex + errorCodePrefix.length) - : undefined; -} -/** - * Helper to get sid from account. Returns null if idTokenClaims are not present or sid is not present. - * @param account - */ -function extractAccountSid(account) { - return account.idTokenClaims?.sid || null; -} -function extractLoginHint(account) { - return account.loginHint || account.idTokenClaims?.login_hint || null; +/** + * Helper to get sid from account. Returns null if idTokenClaims are not present or sid is not present. + * @param account + */ +function extractAccountSid(account) { + return account.idTokenClaims?.sid || null; +} +function extractLoginHint(account) { + return account.loginHint || account.idTokenClaims?.login_hint || null; } @@ -54951,39 +54951,39 @@ function extractLoginHint(account) { -/* - * Copyright (c) Microsoft Corporation. All rights reserved. - * Licensed under the MIT License. - */ -/** - * Constructs the full /authorize URL with request parameters - * @param config - * @param authority - * @param request - * @param logger - * @returns - */ -function getAuthCodeRequestUrl(config, authority, request, logger) { - const parameters = getStandardAuthorizeRequestParameters({ - ...config.auth, - authority: authority, - redirectUri: request.redirectUri || "", - }, request, logger); - addLibraryInfo(parameters, { - sku: Constants_Constants.MSAL_SKU, - version: dist_packageMetadata_version, - cpu: process.arch || "", - os: process.platform || "", - }); - if (config.system.protocolMode !== ProtocolMode_ProtocolMode.OIDC) { - addApplicationTelemetry(parameters, config.telemetry.application); - } - addResponseType(parameters, OAuthResponseType.CODE); - if (request.codeChallenge && request.codeChallengeMethod) { - addCodeChallengeParams(parameters, request.codeChallenge, request.codeChallengeMethod); - } - addExtraParameters(parameters, request.extraQueryParameters || {}); - return getAuthorizeUrl(authority, parameters); +/* + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. + */ +/** + * Constructs the full /authorize URL with request parameters + * @param config + * @param authority + * @param request + * @param logger + * @returns + */ +function getAuthCodeRequestUrl(config, authority, request, logger) { + const parameters = getStandardAuthorizeRequestParameters({ + ...config.auth, + authority: authority, + redirectUri: request.redirectUri || "", + }, request, logger); + addLibraryInfo(parameters, { + sku: Constants_Constants.MSAL_SKU, + version: dist_packageMetadata_version, + cpu: process.arch || "", + os: process.platform || "", + }); + if (config.system.protocolMode !== ProtocolMode_ProtocolMode.OIDC) { + addApplicationTelemetry(parameters, config.telemetry.application); + } + addResponseType(parameters, OAuthResponseType.CODE); + if (request.codeChallenge && request.codeChallengeMethod) { + addCodeChallengeParams(parameters, request.codeChallenge, request.codeChallengeMethod); + } + addExtraParameters(parameters, request.extraQueryParameters || {}); + return getAuthorizeUrl(authority, parameters); } @@ -55004,364 +55004,364 @@ function getAuthCodeRequestUrl(config, authority, request, logger) { -/* - * Copyright (c) Microsoft Corporation. All rights reserved. - * Licensed under the MIT License. - */ -/** - * Base abstract class for all ClientApplications - public and confidential - * @public - */ -class ClientApplication { - /** - * Constructor for the ClientApplication - */ - constructor(configuration) { - this.config = buildAppConfiguration(configuration); - this.cryptoProvider = new CryptoProvider_CryptoProvider(); - this.logger = new Logger_Logger(this.config.system.loggerOptions, dist_packageMetadata_name, dist_packageMetadata_version); - this.storage = new NodeStorage_NodeStorage(this.logger, this.config.auth.clientId, this.cryptoProvider, buildStaticAuthorityOptions(this.config.auth)); - this.tokenCache = new TokenCache(this.storage, this.logger, this.config.cache.cachePlugin); - } - /** - * Creates the URL of the authorization request, letting the user input credentials and consent to the - * application. The URL targets the /authorize endpoint of the authority configured in the - * application object. - * - * Once the user inputs their credentials and consents, the authority will send a response to the redirect URI - * sent in the request and should contain an authorization code, which can then be used to acquire tokens via - * `acquireTokenByCode(AuthorizationCodeRequest)`. - */ - async getAuthCodeUrl(request) { - this.logger.info("getAuthCodeUrl called", request.correlationId || ""); - const validRequest = { - ...request, - ...(await this.initializeBaseRequest(request)), - responseMode: request.responseMode || ResponseMode.QUERY, - authenticationScheme: AuthenticationScheme.BEARER, - state: request.state || "", - nonce: request.nonce || "", - }; - const discoveredAuthority = await this.createAuthority(validRequest.authority, validRequest.correlationId, undefined, request.azureCloudOptions); - return getAuthCodeRequestUrl(this.config, discoveredAuthority, validRequest, this.logger); - } - /** - * Acquires a token by exchanging the Authorization Code received from the first step of OAuth2.0 - * Authorization Code flow. - * - * `getAuthCodeUrl(AuthorizationCodeUrlRequest)` can be used to create the URL for the first step of OAuth2.0 - * Authorization Code flow. Ensure that values for redirectUri and scopes in AuthorizationCodeUrlRequest and - * AuthorizationCodeRequest are the same. - */ - async acquireTokenByCode(request, authCodePayLoad) { - this.logger.info("acquireTokenByCode called", request.correlationId || ""); - if (request.state && authCodePayLoad) { - this.logger.info("acquireTokenByCode - validating state", request.correlationId || ""); - this.validateState(request.state, authCodePayLoad.state || ""); - // eslint-disable-next-line no-param-reassign - authCodePayLoad = { ...authCodePayLoad, state: "" }; - } - const validRequest = { - ...request, - ...(await this.initializeBaseRequest(request)), - authenticationScheme: AuthenticationScheme.BEARER, - }; - const serverTelemetryManager = this.initializeServerTelemetryManager(ApiId.acquireTokenByCode, validRequest.correlationId); - try { - const discoveredAuthority = await this.createAuthority(validRequest.authority, validRequest.correlationId, undefined, request.azureCloudOptions); - const authClientConfig = await this.buildOauthClientConfiguration(discoveredAuthority, validRequest.correlationId, validRequest.redirectUri, serverTelemetryManager); - const authorizationCodeClient = new AuthorizationCodeClient(authClientConfig, new StubPerformanceClient_StubPerformanceClient()); - this.logger.verbose("Auth code client created", validRequest.correlationId); - return await authorizationCodeClient.acquireToken(validRequest, ApiId.acquireTokenByCode, authCodePayLoad); - } - catch (e) { - if (e instanceof AuthError) { - e.setCorrelationId(validRequest.correlationId); - } - serverTelemetryManager.cacheFailedRequest(e); - throw e; - } - } - /** - * Acquires a token by exchanging the refresh token provided for a new set of tokens. - * - * This API is provided only for scenarios where you would like to migrate from ADAL to MSAL. Otherwise, it is - * recommended that you use `acquireTokenSilent()` for silent scenarios. When using `acquireTokenSilent()`, MSAL will - * handle the caching and refreshing of tokens automatically. - */ - async acquireTokenByRefreshToken(request) { - this.logger.info("acquireTokenByRefreshToken called", request.correlationId || ""); - const validRequest = { - ...request, - ...(await this.initializeBaseRequest(request)), - authenticationScheme: AuthenticationScheme.BEARER, - }; - const serverTelemetryManager = this.initializeServerTelemetryManager(ApiId.acquireTokenByRefreshToken, validRequest.correlationId); - try { - const discoveredAuthority = await this.createAuthority(validRequest.authority, validRequest.correlationId, undefined, request.azureCloudOptions); - const refreshTokenClientConfig = await this.buildOauthClientConfiguration(discoveredAuthority, validRequest.correlationId, validRequest.redirectUri || "", serverTelemetryManager); - const refreshTokenClient = new RefreshTokenClient(refreshTokenClientConfig, new StubPerformanceClient_StubPerformanceClient()); - this.logger.verbose("Refresh token client created", validRequest.correlationId); - return await refreshTokenClient.acquireToken(validRequest, ApiId.acquireTokenByRefreshToken); - } - catch (e) { - if (e instanceof AuthError) { - e.setCorrelationId(validRequest.correlationId); - } - serverTelemetryManager.cacheFailedRequest(e); - throw e; - } - } - /** - * Acquires a token silently when a user specifies the account the token is requested for. - * - * This API expects the user to provide an account object and looks into the cache to retrieve the token if present. - * There is also an optional "forceRefresh" boolean the user can send to bypass the cache for access_token and id_token. - * In case the refresh_token is expired or not found, an error is thrown - * and the guidance is for the user to call any interactive token acquisition API (eg: `acquireTokenByCode()`). - */ - async acquireTokenSilent(request) { - const validRequest = { - ...request, - ...(await this.initializeBaseRequest(request)), - forceRefresh: request.forceRefresh || false, - }; - const serverTelemetryManager = this.initializeServerTelemetryManager(ApiId.acquireTokenSilent, validRequest.correlationId, validRequest.forceRefresh); - try { - const discoveredAuthority = await this.createAuthority(validRequest.authority, validRequest.correlationId, undefined, request.azureCloudOptions); - const clientConfiguration = await this.buildOauthClientConfiguration(discoveredAuthority, validRequest.correlationId, validRequest.redirectUri || "", serverTelemetryManager); - const silentFlowClient = new SilentFlowClient(clientConfiguration, new StubPerformanceClient_StubPerformanceClient()); - this.logger.verbose("Silent flow client created", validRequest.correlationId); - try { - // always overwrite the in-memory cache with the persistence cache (if it exists) before a cache lookup - await this.tokenCache.overwriteCache(); - return await this.acquireCachedTokenSilent(validRequest, silentFlowClient, clientConfiguration); - } - catch (error) { - if (error instanceof ClientAuthError && - error.errorCode === - tokenRefreshRequired) { - const refreshTokenClient = new RefreshTokenClient(clientConfiguration, new StubPerformanceClient_StubPerformanceClient()); - return refreshTokenClient.acquireTokenByRefreshToken(validRequest, ApiId.acquireTokenSilent); - } - throw error; - } - } - catch (error) { - if (error instanceof AuthError) { - error.setCorrelationId(validRequest.correlationId); - } - serverTelemetryManager.cacheFailedRequest(error); - throw error; - } - } - async acquireCachedTokenSilent(validRequest, silentFlowClient, clientConfiguration) { - const [authResponse, cacheOutcome] = await silentFlowClient.acquireCachedToken({ - ...validRequest, - scopes: validRequest.scopes?.length - ? validRequest.scopes - : [...OIDC_DEFAULT_SCOPES], - }); - if (cacheOutcome === CacheOutcome.PROACTIVELY_REFRESHED) { - this.logger.info("ClientApplication:acquireCachedTokenSilent - Cached access token's refreshOn property has been exceeded'. It's not expired, but must be refreshed.", validRequest.correlationId); - // refresh the access token in the background - const refreshTokenClient = new RefreshTokenClient(clientConfiguration, new StubPerformanceClient_StubPerformanceClient()); - try { - await refreshTokenClient.acquireTokenByRefreshToken(validRequest, ApiId.acquireTokenSilent); - } - catch { - // do nothing, this is running in the background and no action is to be taken upon success or failure - } - } - // return the cached token - return authResponse; - } - /** - * Acquires tokens with password grant by exchanging client applications username and password for credentials - * - * The latest OAuth 2.0 Security Best Current Practice disallows the password grant entirely. - * More details on this recommendation at https://tools.ietf.org/html/draft-ietf-oauth-security-topics-13#section-3.4 - * Microsoft's documentation and recommendations are at: - * https://docs.microsoft.com/en-us/azure/active-directory/develop/msal-authentication-flows#usernamepassword - * - * @param request - UsenamePasswordRequest - * @deprecated - Use a more secure flow instead - */ - async acquireTokenByUsernamePassword(request) { - this.logger.info("acquireTokenByUsernamePassword called", request.correlationId || ""); - const validRequest = { - ...request, - ...(await this.initializeBaseRequest(request)), - }; - const serverTelemetryManager = this.initializeServerTelemetryManager(ApiId.acquireTokenByUsernamePassword, validRequest.correlationId); - try { - const discoveredAuthority = await this.createAuthority(validRequest.authority, validRequest.correlationId, undefined, request.azureCloudOptions); - const usernamePasswordClientConfig = await this.buildOauthClientConfiguration(discoveredAuthority, validRequest.correlationId, "", serverTelemetryManager); - const usernamePasswordClient = new UsernamePasswordClient(usernamePasswordClientConfig); - this.logger.verbose("Username password client created", validRequest.correlationId); - return await usernamePasswordClient.acquireToken(validRequest); - } - catch (e) { - if (e instanceof AuthError) { - e.setCorrelationId(validRequest.correlationId); - } - serverTelemetryManager.cacheFailedRequest(e); - throw e; - } - } - /** - * Gets the token cache for the application. - */ - getTokenCache() { - this.logger.info("getTokenCache called", ""); - return this.tokenCache; - } - /** - * Validates OIDC state by comparing the user cached state with the state received from the server. - * - * This API is provided for scenarios where you would use OAuth2.0 state parameter to mitigate against - * CSRF attacks. - * For more information about state, visit https://datatracker.ietf.org/doc/html/rfc6819#section-3.6. - * @param state - Unique GUID generated by the user that is cached by the user and sent to the server during the first leg of the flow - * @param cachedState - This string is sent back by the server with the authorization code - */ - validateState(state, cachedState) { - if (!state) { - throw NodeAuthError.createStateNotFoundError(); - } - if (state !== cachedState) { - throw ClientAuthError_createClientAuthError(ClientAuthErrorCodes_stateMismatch); - } - } - /** - * Returns the logger instance - */ - getLogger() { - return this.logger; - } - /** - * Replaces the default logger set in configurations with new Logger with new configurations - * @param logger - Logger instance - */ - setLogger(logger) { - this.logger = logger; - } - /** - * Builds the common configuration to be passed to the common component based on the platform configurarion - * @param authority - user passed authority in configuration - * @param serverTelemetryManager - initializes servertelemetry if passed - */ - async buildOauthClientConfiguration(discoveredAuthority, requestCorrelationId, redirectUri, serverTelemetryManager) { - this.logger.verbose("buildOauthClientConfiguration called", requestCorrelationId); - this.logger.info(`Building oauth client configuration with the following authority: ${discoveredAuthority.tokenEndpoint}.`, requestCorrelationId); - serverTelemetryManager?.updateRegionDiscoveryMetadata(discoveredAuthority.regionDiscoveryMetadata); - const clientConfiguration = { - authOptions: { - clientId: this.config.auth.clientId, - authority: discoveredAuthority, - clientCapabilities: this.config.auth.clientCapabilities, - redirectUri, - isMcp: this.config.auth.isMcp, - }, - loggerOptions: { - logLevel: this.config.system.loggerOptions.logLevel, - loggerCallback: this.config.system.loggerOptions.loggerCallback, - piiLoggingEnabled: this.config.system.loggerOptions.piiLoggingEnabled, - correlationId: requestCorrelationId, - }, - cryptoInterface: this.cryptoProvider, - networkInterface: this.config.system.networkClient, - storageInterface: this.storage, - serverTelemetryManager: serverTelemetryManager, - clientCredentials: { - clientSecret: this.clientSecret, - clientAssertion: await this.getClientAssertion(discoveredAuthority), - }, - libraryInfo: { - sku: Constants_Constants.MSAL_SKU, - version: dist_packageMetadata_version, - cpu: process.arch || "", - os: process.platform || "", - }, - telemetry: this.config.telemetry, - persistencePlugin: this.config.cache.cachePlugin, - serializableCache: this.tokenCache, - }; - return clientConfiguration; - } - async getClientAssertion(authority) { - if (this.developerProvidedClientAssertion) { - this.clientAssertion = ClientAssertion.fromAssertion(await getClientAssertion(this.developerProvidedClientAssertion, this.config.auth.clientId, authority.tokenEndpoint)); - } - return (this.clientAssertion && { - assertion: this.clientAssertion.getJwt(this.cryptoProvider, this.config.auth.clientId, authority.tokenEndpoint), - assertionType: Constants_Constants.JWT_BEARER_ASSERTION_TYPE, - }); - } - /** - * Generates a request with the default scopes & generates a correlationId. - * @param authRequest - BaseAuthRequest for initialization - */ - async initializeBaseRequest(authRequest) { - const correlationId = authRequest.correlationId || this.cryptoProvider.createNewGuid(); - this.logger.verbose("initializeRequestScopes called", correlationId); - // Default authenticationScheme to Bearer, log that POP isn't supported yet - if (authRequest.authenticationScheme && - authRequest.authenticationScheme === - AuthenticationScheme.POP) { - this.logger.verbose("Authentication Scheme 'pop' is not supported yet, setting Authentication Scheme to 'Bearer' for request", correlationId); - } - authRequest.authenticationScheme = - AuthenticationScheme.BEARER; - return { - ...authRequest, - scopes: [ - ...((authRequest && authRequest.scopes) || []), - ...OIDC_DEFAULT_SCOPES, - ], - correlationId, - authority: authRequest.authority || this.config.auth.authority, - }; - } - /** - * Initializes the server telemetry payload - * @param apiId - Id for a specific request - * @param correlationId - GUID - * @param forceRefresh - boolean to indicate network call - */ - initializeServerTelemetryManager(apiId, correlationId, forceRefresh) { - const telemetryPayload = { - clientId: this.config.auth.clientId, - correlationId: correlationId, - apiId: apiId, - forceRefresh: forceRefresh || false, - }; - return new ServerTelemetryManager(telemetryPayload, this.storage); - } - /** - * Create authority instance. If authority not passed in request, default to authority set on the application - * object. If no authority set in application object, then default to common authority. - * @param authorityString - authority from user configuration - */ - async createAuthority(authorityString, requestCorrelationId, azureRegionConfiguration, azureCloudOptions) { - this.logger.verbose("createAuthority called", requestCorrelationId); - // build authority string based on auth params - azureCloudInstance is prioritized if provided - const authorityUrl = Authority_Authority.generateAuthority(authorityString, azureCloudOptions || this.config.auth.azureCloudOptions); - const authorityOptions = { - protocolMode: this.config.system.protocolMode, - knownAuthorities: this.config.auth.knownAuthorities, - cloudDiscoveryMetadata: this.config.auth.cloudDiscoveryMetadata, - authorityMetadata: this.config.auth.authorityMetadata, - azureRegionConfiguration, - }; - return createDiscoveredInstance(authorityUrl, this.config.system.networkClient, this.storage, authorityOptions, this.logger, requestCorrelationId, new StubPerformanceClient_StubPerformanceClient()); - } - /** - * Clear the cache - */ - clearCache() { - this.storage.clear(); - } +/* + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. + */ +/** + * Base abstract class for all ClientApplications - public and confidential + * @public + */ +class ClientApplication { + /** + * Constructor for the ClientApplication + */ + constructor(configuration) { + this.config = buildAppConfiguration(configuration); + this.cryptoProvider = new CryptoProvider_CryptoProvider(); + this.logger = new Logger_Logger(this.config.system.loggerOptions, dist_packageMetadata_name, dist_packageMetadata_version); + this.storage = new NodeStorage_NodeStorage(this.logger, this.config.auth.clientId, this.cryptoProvider, buildStaticAuthorityOptions(this.config.auth)); + this.tokenCache = new TokenCache(this.storage, this.logger, this.config.cache.cachePlugin); + } + /** + * Creates the URL of the authorization request, letting the user input credentials and consent to the + * application. The URL targets the /authorize endpoint of the authority configured in the + * application object. + * + * Once the user inputs their credentials and consents, the authority will send a response to the redirect URI + * sent in the request and should contain an authorization code, which can then be used to acquire tokens via + * `acquireTokenByCode(AuthorizationCodeRequest)`. + */ + async getAuthCodeUrl(request) { + this.logger.info("getAuthCodeUrl called", request.correlationId || ""); + const validRequest = { + ...request, + ...(await this.initializeBaseRequest(request)), + responseMode: request.responseMode || ResponseMode.QUERY, + authenticationScheme: AuthenticationScheme.BEARER, + state: request.state || "", + nonce: request.nonce || "", + }; + const discoveredAuthority = await this.createAuthority(validRequest.authority, validRequest.correlationId, undefined, request.azureCloudOptions); + return getAuthCodeRequestUrl(this.config, discoveredAuthority, validRequest, this.logger); + } + /** + * Acquires a token by exchanging the Authorization Code received from the first step of OAuth2.0 + * Authorization Code flow. + * + * `getAuthCodeUrl(AuthorizationCodeUrlRequest)` can be used to create the URL for the first step of OAuth2.0 + * Authorization Code flow. Ensure that values for redirectUri and scopes in AuthorizationCodeUrlRequest and + * AuthorizationCodeRequest are the same. + */ + async acquireTokenByCode(request, authCodePayLoad) { + this.logger.info("acquireTokenByCode called", request.correlationId || ""); + if (request.state && authCodePayLoad) { + this.logger.info("acquireTokenByCode - validating state", request.correlationId || ""); + this.validateState(request.state, authCodePayLoad.state || ""); + // eslint-disable-next-line no-param-reassign + authCodePayLoad = { ...authCodePayLoad, state: "" }; + } + const validRequest = { + ...request, + ...(await this.initializeBaseRequest(request)), + authenticationScheme: AuthenticationScheme.BEARER, + }; + const serverTelemetryManager = this.initializeServerTelemetryManager(ApiId.acquireTokenByCode, validRequest.correlationId); + try { + const discoveredAuthority = await this.createAuthority(validRequest.authority, validRequest.correlationId, undefined, request.azureCloudOptions); + const authClientConfig = await this.buildOauthClientConfiguration(discoveredAuthority, validRequest.correlationId, validRequest.redirectUri, serverTelemetryManager); + const authorizationCodeClient = new AuthorizationCodeClient(authClientConfig, new StubPerformanceClient_StubPerformanceClient()); + this.logger.verbose("Auth code client created", validRequest.correlationId); + return await authorizationCodeClient.acquireToken(validRequest, ApiId.acquireTokenByCode, authCodePayLoad); + } + catch (e) { + if (e instanceof AuthError) { + e.setCorrelationId(validRequest.correlationId); + } + serverTelemetryManager.cacheFailedRequest(e); + throw e; + } + } + /** + * Acquires a token by exchanging the refresh token provided for a new set of tokens. + * + * This API is provided only for scenarios where you would like to migrate from ADAL to MSAL. Otherwise, it is + * recommended that you use `acquireTokenSilent()` for silent scenarios. When using `acquireTokenSilent()`, MSAL will + * handle the caching and refreshing of tokens automatically. + */ + async acquireTokenByRefreshToken(request) { + this.logger.info("acquireTokenByRefreshToken called", request.correlationId || ""); + const validRequest = { + ...request, + ...(await this.initializeBaseRequest(request)), + authenticationScheme: AuthenticationScheme.BEARER, + }; + const serverTelemetryManager = this.initializeServerTelemetryManager(ApiId.acquireTokenByRefreshToken, validRequest.correlationId); + try { + const discoveredAuthority = await this.createAuthority(validRequest.authority, validRequest.correlationId, undefined, request.azureCloudOptions); + const refreshTokenClientConfig = await this.buildOauthClientConfiguration(discoveredAuthority, validRequest.correlationId, validRequest.redirectUri || "", serverTelemetryManager); + const refreshTokenClient = new RefreshTokenClient(refreshTokenClientConfig, new StubPerformanceClient_StubPerformanceClient()); + this.logger.verbose("Refresh token client created", validRequest.correlationId); + return await refreshTokenClient.acquireToken(validRequest, ApiId.acquireTokenByRefreshToken); + } + catch (e) { + if (e instanceof AuthError) { + e.setCorrelationId(validRequest.correlationId); + } + serverTelemetryManager.cacheFailedRequest(e); + throw e; + } + } + /** + * Acquires a token silently when a user specifies the account the token is requested for. + * + * This API expects the user to provide an account object and looks into the cache to retrieve the token if present. + * There is also an optional "forceRefresh" boolean the user can send to bypass the cache for access_token and id_token. + * In case the refresh_token is expired or not found, an error is thrown + * and the guidance is for the user to call any interactive token acquisition API (eg: `acquireTokenByCode()`). + */ + async acquireTokenSilent(request) { + const validRequest = { + ...request, + ...(await this.initializeBaseRequest(request)), + forceRefresh: request.forceRefresh || false, + }; + const serverTelemetryManager = this.initializeServerTelemetryManager(ApiId.acquireTokenSilent, validRequest.correlationId, validRequest.forceRefresh); + try { + const discoveredAuthority = await this.createAuthority(validRequest.authority, validRequest.correlationId, undefined, request.azureCloudOptions); + const clientConfiguration = await this.buildOauthClientConfiguration(discoveredAuthority, validRequest.correlationId, validRequest.redirectUri || "", serverTelemetryManager); + const silentFlowClient = new SilentFlowClient(clientConfiguration, new StubPerformanceClient_StubPerformanceClient()); + this.logger.verbose("Silent flow client created", validRequest.correlationId); + try { + // always overwrite the in-memory cache with the persistence cache (if it exists) before a cache lookup + await this.tokenCache.overwriteCache(); + return await this.acquireCachedTokenSilent(validRequest, silentFlowClient, clientConfiguration); + } + catch (error) { + if (error instanceof ClientAuthError && + error.errorCode === + tokenRefreshRequired) { + const refreshTokenClient = new RefreshTokenClient(clientConfiguration, new StubPerformanceClient_StubPerformanceClient()); + return refreshTokenClient.acquireTokenByRefreshToken(validRequest, ApiId.acquireTokenSilent); + } + throw error; + } + } + catch (error) { + if (error instanceof AuthError) { + error.setCorrelationId(validRequest.correlationId); + } + serverTelemetryManager.cacheFailedRequest(error); + throw error; + } + } + async acquireCachedTokenSilent(validRequest, silentFlowClient, clientConfiguration) { + const [authResponse, cacheOutcome] = await silentFlowClient.acquireCachedToken({ + ...validRequest, + scopes: validRequest.scopes?.length + ? validRequest.scopes + : [...OIDC_DEFAULT_SCOPES], + }); + if (cacheOutcome === CacheOutcome.PROACTIVELY_REFRESHED) { + this.logger.info("ClientApplication:acquireCachedTokenSilent - Cached access token's refreshOn property has been exceeded'. It's not expired, but must be refreshed.", validRequest.correlationId); + // refresh the access token in the background + const refreshTokenClient = new RefreshTokenClient(clientConfiguration, new StubPerformanceClient_StubPerformanceClient()); + try { + await refreshTokenClient.acquireTokenByRefreshToken(validRequest, ApiId.acquireTokenSilent); + } + catch { + // do nothing, this is running in the background and no action is to be taken upon success or failure + } + } + // return the cached token + return authResponse; + } + /** + * Acquires tokens with password grant by exchanging client applications username and password for credentials + * + * The latest OAuth 2.0 Security Best Current Practice disallows the password grant entirely. + * More details on this recommendation at https://tools.ietf.org/html/draft-ietf-oauth-security-topics-13#section-3.4 + * Microsoft's documentation and recommendations are at: + * https://docs.microsoft.com/en-us/azure/active-directory/develop/msal-authentication-flows#usernamepassword + * + * @param request - UsenamePasswordRequest + * @deprecated - Use a more secure flow instead + */ + async acquireTokenByUsernamePassword(request) { + this.logger.info("acquireTokenByUsernamePassword called", request.correlationId || ""); + const validRequest = { + ...request, + ...(await this.initializeBaseRequest(request)), + }; + const serverTelemetryManager = this.initializeServerTelemetryManager(ApiId.acquireTokenByUsernamePassword, validRequest.correlationId); + try { + const discoveredAuthority = await this.createAuthority(validRequest.authority, validRequest.correlationId, undefined, request.azureCloudOptions); + const usernamePasswordClientConfig = await this.buildOauthClientConfiguration(discoveredAuthority, validRequest.correlationId, "", serverTelemetryManager); + const usernamePasswordClient = new UsernamePasswordClient(usernamePasswordClientConfig); + this.logger.verbose("Username password client created", validRequest.correlationId); + return await usernamePasswordClient.acquireToken(validRequest); + } + catch (e) { + if (e instanceof AuthError) { + e.setCorrelationId(validRequest.correlationId); + } + serverTelemetryManager.cacheFailedRequest(e); + throw e; + } + } + /** + * Gets the token cache for the application. + */ + getTokenCache() { + this.logger.info("getTokenCache called", ""); + return this.tokenCache; + } + /** + * Validates OIDC state by comparing the user cached state with the state received from the server. + * + * This API is provided for scenarios where you would use OAuth2.0 state parameter to mitigate against + * CSRF attacks. + * For more information about state, visit https://datatracker.ietf.org/doc/html/rfc6819#section-3.6. + * @param state - Unique GUID generated by the user that is cached by the user and sent to the server during the first leg of the flow + * @param cachedState - This string is sent back by the server with the authorization code + */ + validateState(state, cachedState) { + if (!state) { + throw NodeAuthError.createStateNotFoundError(); + } + if (state !== cachedState) { + throw ClientAuthError_createClientAuthError(ClientAuthErrorCodes_stateMismatch); + } + } + /** + * Returns the logger instance + */ + getLogger() { + return this.logger; + } + /** + * Replaces the default logger set in configurations with new Logger with new configurations + * @param logger - Logger instance + */ + setLogger(logger) { + this.logger = logger; + } + /** + * Builds the common configuration to be passed to the common component based on the platform configurarion + * @param authority - user passed authority in configuration + * @param serverTelemetryManager - initializes servertelemetry if passed + */ + async buildOauthClientConfiguration(discoveredAuthority, requestCorrelationId, redirectUri, serverTelemetryManager) { + this.logger.verbose("buildOauthClientConfiguration called", requestCorrelationId); + this.logger.info(`Building oauth client configuration with the following authority: ${discoveredAuthority.tokenEndpoint}.`, requestCorrelationId); + serverTelemetryManager?.updateRegionDiscoveryMetadata(discoveredAuthority.regionDiscoveryMetadata); + const clientConfiguration = { + authOptions: { + clientId: this.config.auth.clientId, + authority: discoveredAuthority, + clientCapabilities: this.config.auth.clientCapabilities, + redirectUri, + isMcp: this.config.auth.isMcp, + }, + loggerOptions: { + logLevel: this.config.system.loggerOptions.logLevel, + loggerCallback: this.config.system.loggerOptions.loggerCallback, + piiLoggingEnabled: this.config.system.loggerOptions.piiLoggingEnabled, + correlationId: requestCorrelationId, + }, + cryptoInterface: this.cryptoProvider, + networkInterface: this.config.system.networkClient, + storageInterface: this.storage, + serverTelemetryManager: serverTelemetryManager, + clientCredentials: { + clientSecret: this.clientSecret, + clientAssertion: await this.getClientAssertion(discoveredAuthority), + }, + libraryInfo: { + sku: Constants_Constants.MSAL_SKU, + version: dist_packageMetadata_version, + cpu: process.arch || "", + os: process.platform || "", + }, + telemetry: this.config.telemetry, + persistencePlugin: this.config.cache.cachePlugin, + serializableCache: this.tokenCache, + }; + return clientConfiguration; + } + async getClientAssertion(authority) { + if (this.developerProvidedClientAssertion) { + this.clientAssertion = ClientAssertion.fromAssertion(await getClientAssertion(this.developerProvidedClientAssertion, this.config.auth.clientId, authority.tokenEndpoint)); + } + return (this.clientAssertion && { + assertion: this.clientAssertion.getJwt(this.cryptoProvider, this.config.auth.clientId, authority.tokenEndpoint), + assertionType: Constants_Constants.JWT_BEARER_ASSERTION_TYPE, + }); + } + /** + * Generates a request with the default scopes & generates a correlationId. + * @param authRequest - BaseAuthRequest for initialization + */ + async initializeBaseRequest(authRequest) { + const correlationId = authRequest.correlationId || this.cryptoProvider.createNewGuid(); + this.logger.verbose("initializeRequestScopes called", correlationId); + // Default authenticationScheme to Bearer, log that POP isn't supported yet + if (authRequest.authenticationScheme && + authRequest.authenticationScheme === + AuthenticationScheme.POP) { + this.logger.verbose("Authentication Scheme 'pop' is not supported yet, setting Authentication Scheme to 'Bearer' for request", correlationId); + } + authRequest.authenticationScheme = + AuthenticationScheme.BEARER; + return { + ...authRequest, + scopes: [ + ...((authRequest && authRequest.scopes) || []), + ...OIDC_DEFAULT_SCOPES, + ], + correlationId, + authority: authRequest.authority || this.config.auth.authority, + }; + } + /** + * Initializes the server telemetry payload + * @param apiId - Id for a specific request + * @param correlationId - GUID + * @param forceRefresh - boolean to indicate network call + */ + initializeServerTelemetryManager(apiId, correlationId, forceRefresh) { + const telemetryPayload = { + clientId: this.config.auth.clientId, + correlationId: correlationId, + apiId: apiId, + forceRefresh: forceRefresh || false, + }; + return new ServerTelemetryManager(telemetryPayload, this.storage); + } + /** + * Create authority instance. If authority not passed in request, default to authority set on the application + * object. If no authority set in application object, then default to common authority. + * @param authorityString - authority from user configuration + */ + async createAuthority(authorityString, requestCorrelationId, azureRegionConfiguration, azureCloudOptions) { + this.logger.verbose("createAuthority called", requestCorrelationId); + // build authority string based on auth params - azureCloudInstance is prioritized if provided + const authorityUrl = Authority_Authority.generateAuthority(authorityString, azureCloudOptions || this.config.auth.azureCloudOptions); + const authorityOptions = { + protocolMode: this.config.system.protocolMode, + knownAuthorities: this.config.auth.knownAuthorities, + cloudDiscoveryMetadata: this.config.auth.cloudDiscoveryMetadata, + authorityMetadata: this.config.auth.authorityMetadata, + azureRegionConfiguration, + }; + return createDiscoveredInstance(authorityUrl, this.config.system.networkClient, this.storage, authorityOptions, this.logger, requestCorrelationId, new StubPerformanceClient_StubPerformanceClient()); + } + /** + * Clear the cache + */ + clearCache() { + this.storage.clear(); + } } @@ -55375,87 +55375,87 @@ class ClientApplication { -/* - * Copyright (c) Microsoft Corporation. All rights reserved. - * Licensed under the MIT License. - */ -class LoopbackClient { - /** - * Spins up a loopback server which returns the server response when the localhost redirectUri is hit - * @param successTemplate - * @param errorTemplate - * @returns - */ - async listenForAuthCode(successTemplate, errorTemplate) { - if (this.server) { - throw NodeAuthError.createLoopbackServerAlreadyExistsError(); - } - return new Promise((resolve, reject) => { - this.server = external_http_.createServer((req, res) => { - const url = req.url; - if (!url) { - res.end(errorTemplate || - "Error occurred loading redirectUrl"); - reject(NodeAuthError.createUnableToLoadRedirectUrlError()); - return; - } - else if (url === FORWARD_SLASH) { - res.end(successTemplate || - "Auth code was successfully acquired. You can close this window now."); - return; - } - const redirectUri = this.getRedirectUri(); - const parsedUrl = new URL(url, redirectUri); - const authCodeResponse = getDeserializedResponse(parsedUrl.search) || - {}; - if (authCodeResponse.code) { - res.writeHead(HTTP_REDIRECT, { - location: redirectUri, - }); // Prevent auth code from being saved in the browser history - res.end(); - } - if (authCodeResponse.error) { - res.end(errorTemplate || - `Error occurred: ${authCodeResponse.error}`); - } - resolve(authCodeResponse); - }); - this.server.listen(0, "127.0.0.1"); // Listen on any available port - }); - } - /** - * Get the port that the loopback server is running on - * @returns - */ - getRedirectUri() { - if (!this.server || !this.server.listening) { - throw NodeAuthError.createNoLoopbackServerExistsError(); - } - const address = this.server.address(); - if (!address || typeof address === "string" || !address.port) { - this.closeServer(); - throw NodeAuthError.createInvalidLoopbackAddressTypeError(); - } - const port = address && address.port; - return `${Constants_Constants.HTTP_PROTOCOL}${Constants_Constants.LOCALHOST}:${port}`; - } - /** - * Close the loopback server - */ - closeServer() { - if (this.server) { - // Only stops accepting new connections, server will close once open/idle connections are closed. - this.server.close(); - if (typeof this.server.closeAllConnections === "function") { - /* - * Close open/idle connections. This API is available in Node versions 18.2 and higher - */ - this.server.closeAllConnections(); - } - this.server.unref(); - this.server = undefined; - } - } +/* + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. + */ +class LoopbackClient { + /** + * Spins up a loopback server which returns the server response when the localhost redirectUri is hit + * @param successTemplate + * @param errorTemplate + * @returns + */ + async listenForAuthCode(successTemplate, errorTemplate) { + if (this.server) { + throw NodeAuthError.createLoopbackServerAlreadyExistsError(); + } + return new Promise((resolve, reject) => { + this.server = external_http_.createServer((req, res) => { + const url = req.url; + if (!url) { + res.end(errorTemplate || + "Error occurred loading redirectUrl"); + reject(NodeAuthError.createUnableToLoadRedirectUrlError()); + return; + } + else if (url === FORWARD_SLASH) { + res.end(successTemplate || + "Auth code was successfully acquired. You can close this window now."); + return; + } + const redirectUri = this.getRedirectUri(); + const parsedUrl = new URL(url, redirectUri); + const authCodeResponse = getDeserializedResponse(parsedUrl.search) || + {}; + if (authCodeResponse.code) { + res.writeHead(HTTP_REDIRECT, { + location: redirectUri, + }); // Prevent auth code from being saved in the browser history + res.end(); + } + if (authCodeResponse.error) { + res.end(errorTemplate || + `Error occurred: ${authCodeResponse.error}`); + } + resolve(authCodeResponse); + }); + this.server.listen(0, "127.0.0.1"); // Listen on any available port + }); + } + /** + * Get the port that the loopback server is running on + * @returns + */ + getRedirectUri() { + if (!this.server || !this.server.listening) { + throw NodeAuthError.createNoLoopbackServerExistsError(); + } + const address = this.server.address(); + if (!address || typeof address === "string" || !address.port) { + this.closeServer(); + throw NodeAuthError.createInvalidLoopbackAddressTypeError(); + } + const port = address && address.port; + return `${Constants_Constants.HTTP_PROTOCOL}${Constants_Constants.LOCALHOST}:${port}`; + } + /** + * Close the loopback server + */ + closeServer() { + if (this.server) { + // Only stops accepting new connections, server will close once open/idle connections are closed. + this.server.close(); + if (typeof this.server.closeAllConnections === "function") { + /* + * Close open/idle connections. This API is available in Node versions 18.2 and higher + */ + this.server.closeAllConnections(); + } + this.server.unref(); + this.server = undefined; + } + } } @@ -55464,14 +55464,14 @@ class LoopbackClient { ;// CONCATENATED MODULE: ./node_modules/@azure/msal-common/dist/error/AuthErrorCodes.mjs /*! @azure/msal-common v16.3.0 2026-03-13 */ -/* - * Copyright (c) Microsoft Corporation. All rights reserved. - * Licensed under the MIT License. - */ -/** - * AuthErrorMessage class containing string constants used by error codes and messages. - */ -const unexpectedError = "unexpected_error"; +/* + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. + */ +/** + * AuthErrorMessage class containing string constants used by error codes and messages. + */ +const unexpectedError = "unexpected_error"; const postRequestFailed = "post_request_failed"; @@ -55485,216 +55485,216 @@ const postRequestFailed = "post_request_failed"; -/* - * Copyright (c) Microsoft Corporation. All rights reserved. - * Licensed under the MIT License. - */ -/** - * OAuth2.0 Device code client - * @public - */ -class DeviceCodeClient extends BaseClient { - constructor(configuration) { - super(configuration); - } - /** - * Gets device code from device code endpoint, calls back to with device code response, and - * polls token endpoint to exchange device code for tokens - * @param request - developer provided CommonDeviceCodeRequest - */ - async acquireToken(request) { - const deviceCodeResponse = await this.getDeviceCode(request); - request.deviceCodeCallback(deviceCodeResponse); - const reqTimestamp = nowSeconds(); - const response = await this.acquireTokenWithDeviceCode(request, deviceCodeResponse); - const responseHandler = new ResponseHandler(this.config.authOptions.clientId, this.cacheManager, this.cryptoUtils, this.logger, this.performanceClient, this.config.serializableCache, this.config.persistencePlugin); - // Validate response. This function throws a server error if an error is returned by the server. - responseHandler.validateTokenResponse(response, request.correlationId); - return responseHandler.handleServerTokenResponse(response, this.authority, reqTimestamp, request, ApiId.acquireTokenByDeviceCode); - } - /** - * Creates device code request and executes http GET - * @param request - developer provided CommonDeviceCodeRequest - */ - async getDeviceCode(request) { - const queryParametersString = this.createExtraQueryParameters(request); - const endpoint = UrlString.appendQueryString(this.authority.deviceCodeEndpoint, queryParametersString); - const queryString = this.createQueryString(request); - const headers = this.createTokenRequestHeaders(); - const thumbprint = { - clientId: this.config.authOptions.clientId, - authority: request.authority, - scopes: request.scopes, - claims: request.claims, - authenticationScheme: request.authenticationScheme, - resourceRequestMethod: request.resourceRequestMethod, - resourceRequestUri: request.resourceRequestUri, - shrClaims: request.shrClaims, - sshKid: request.sshKid, - }; - return this.executePostRequestToDeviceCodeEndpoint(endpoint, queryString, headers, thumbprint, request.correlationId); - } - /** - * Creates query string for the device code request - * @param request - developer provided CommonDeviceCodeRequest - */ - createExtraQueryParameters(request) { - const parameters = new Map(); - if (request.extraQueryParameters) { - addExtraParameters(parameters, request.extraQueryParameters); - } - return mapToQueryString(parameters); - } - /** - * Executes POST request to device code endpoint - * @param deviceCodeEndpoint - token endpoint - * @param queryString - string to be used in the body of the request - * @param headers - headers for the request - * @param thumbprint - unique request thumbprint - * @param correlationId - correlation id to be used in the request - */ - async executePostRequestToDeviceCodeEndpoint(deviceCodeEndpoint, queryString, headers, thumbprint, correlationId) { - const { body: { user_code: userCode, device_code: deviceCode, verification_uri: verificationUri, expires_in: expiresIn, interval, message, }, } = await this.sendPostRequest(thumbprint, deviceCodeEndpoint, { - body: queryString, - headers: headers, - }, correlationId); - return { - userCode, - deviceCode, - verificationUri, - expiresIn, - interval, - message, - }; - } - /** - * Create device code endpoint query parameters and returns string - * @param request - developer provided CommonDeviceCodeRequest - */ - createQueryString(request) { - const parameters = new Map(); - addScopes(parameters, request.scopes); - addClientId(parameters, this.config.authOptions.clientId); - if (request.extraQueryParameters) { - addExtraParameters(parameters, request.extraQueryParameters); - } - if (request.claims || - (this.config.authOptions.clientCapabilities && - this.config.authOptions.clientCapabilities.length > 0)) { - addClaims(parameters, request.claims, this.config.authOptions.clientCapabilities); - } - return mapToQueryString(parameters); - } - /** - * Breaks the polling with specific conditions - * @param deviceCodeExpirationTime - expiration time for the device code request - * @param userSpecifiedTimeout - developer provided timeout, to be compared against deviceCodeExpirationTime - * @param userSpecifiedCancelFlag - boolean indicating the developer would like to cancel the request - */ - continuePolling(deviceCodeExpirationTime, userSpecifiedTimeout, userSpecifiedCancelFlag) { - if (userSpecifiedCancelFlag) { - this.logger.error("Token request cancelled by setting DeviceCodeRequest.cancel = true", ""); - throw ClientAuthError_createClientAuthError(deviceCodePollingCancelled); - } - else if (userSpecifiedTimeout && - userSpecifiedTimeout < deviceCodeExpirationTime && - nowSeconds() > userSpecifiedTimeout) { - this.logger.error(`User defined timeout for device code polling reached. The timeout was set for ${userSpecifiedTimeout}`, ""); - throw ClientAuthError_createClientAuthError(userTimeoutReached); - } - else if (nowSeconds() > deviceCodeExpirationTime) { - if (userSpecifiedTimeout) { - this.logger.verbose(`User specified timeout ignored as the device code has expired before the timeout elapsed. The user specified timeout was set for ${userSpecifiedTimeout}`, ""); - } - this.logger.error(`Device code expired. Expiration time of device code was ${deviceCodeExpirationTime}`, ""); - throw ClientAuthError_createClientAuthError(deviceCodeExpired); - } - return true; - } - /** - * Creates token request with device code response and polls token endpoint at interval set by the device code response - * @param request - developer provided CommonDeviceCodeRequest - * @param deviceCodeResponse - DeviceCodeResponse returned by the security token service device code endpoint - */ - async acquireTokenWithDeviceCode(request, deviceCodeResponse) { - const queryParametersString = this.createTokenQueryParameters(request); - const endpoint = UrlString.appendQueryString(this.authority.tokenEndpoint, queryParametersString); - const requestBody = this.createTokenRequestBody(request, deviceCodeResponse); - const headers = this.createTokenRequestHeaders(); - const userSpecifiedTimeout = request.timeout - ? nowSeconds() + request.timeout - : undefined; - const deviceCodeExpirationTime = nowSeconds() + deviceCodeResponse.expiresIn; - const pollingIntervalMilli = deviceCodeResponse.interval * 1000; - /* - * Poll token endpoint while (device code is not expired AND operation has not been cancelled by - * setting CancellationToken.cancel = true). POST request is sent at interval set by pollingIntervalMilli - */ - while (this.continuePolling(deviceCodeExpirationTime, userSpecifiedTimeout, request.cancel)) { - const thumbprint = { - clientId: this.config.authOptions.clientId, - authority: request.authority, - scopes: request.scopes, - claims: request.claims, - authenticationScheme: request.authenticationScheme, - resourceRequestMethod: request.resourceRequestMethod, - resourceRequestUri: request.resourceRequestUri, - shrClaims: request.shrClaims, - sshKid: request.sshKid, - }; - const response = await this.executePostToTokenEndpoint(endpoint, requestBody, headers, thumbprint, request.correlationId); - if (response.body && response.body.error) { - // user authorization is pending. Sleep for polling interval and try again - if (response.body.error === AUTHORIZATION_PENDING) { - this.logger.info("Authorization pending. Continue polling.", request.correlationId); - await delay(pollingIntervalMilli); - } - else { - // for any other error, throw - this.logger.info("Unexpected error in polling from the server", request.correlationId); - throw createAuthError(postRequestFailed, response.body.error); - } - } - else { - this.logger.verbose("Authorization completed successfully. Polling stopped.", request.correlationId); - return response.body; - } - } - /* - * The above code should've thrown by this point, but to satisfy TypeScript, - * and in the rare case the conditionals in continuePolling() may not catch everything... - */ - this.logger.error("Polling stopped for unknown reasons.", request.correlationId); - throw ClientAuthError_createClientAuthError(deviceCodeUnknownError); - } - /** - * Creates query parameters and converts to string. - * @param request - developer provided CommonDeviceCodeRequest - * @param deviceCodeResponse - DeviceCodeResponse returned by the security token service device code endpoint - */ - createTokenRequestBody(request, deviceCodeResponse) { - const parameters = new Map(); - addScopes(parameters, request.scopes); - addClientId(parameters, this.config.authOptions.clientId); - addGrantType(parameters, GrantType.DEVICE_CODE_GRANT); - addDeviceCode(parameters, deviceCodeResponse.deviceCode); - const correlationId = request.correlationId || - this.config.cryptoInterface.createNewGuid(); - addCorrelationId(parameters, correlationId); - addClientInfo(parameters); - addLibraryInfo(parameters, this.config.libraryInfo); - addApplicationTelemetry(parameters, this.config.telemetry.application); - addThrottling(parameters); - if (this.serverTelemetryManager) { - addServerTelemetry(parameters, this.serverTelemetryManager); - } - if (!StringUtils_StringUtils.isEmptyObj(request.claims) || - (this.config.authOptions.clientCapabilities && - this.config.authOptions.clientCapabilities.length > 0)) { - addClaims(parameters, request.claims, this.config.authOptions.clientCapabilities); - } - return mapToQueryString(parameters); - } +/* + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. + */ +/** + * OAuth2.0 Device code client + * @public + */ +class DeviceCodeClient extends BaseClient { + constructor(configuration) { + super(configuration); + } + /** + * Gets device code from device code endpoint, calls back to with device code response, and + * polls token endpoint to exchange device code for tokens + * @param request - developer provided CommonDeviceCodeRequest + */ + async acquireToken(request) { + const deviceCodeResponse = await this.getDeviceCode(request); + request.deviceCodeCallback(deviceCodeResponse); + const reqTimestamp = nowSeconds(); + const response = await this.acquireTokenWithDeviceCode(request, deviceCodeResponse); + const responseHandler = new ResponseHandler(this.config.authOptions.clientId, this.cacheManager, this.cryptoUtils, this.logger, this.performanceClient, this.config.serializableCache, this.config.persistencePlugin); + // Validate response. This function throws a server error if an error is returned by the server. + responseHandler.validateTokenResponse(response, request.correlationId); + return responseHandler.handleServerTokenResponse(response, this.authority, reqTimestamp, request, ApiId.acquireTokenByDeviceCode); + } + /** + * Creates device code request and executes http GET + * @param request - developer provided CommonDeviceCodeRequest + */ + async getDeviceCode(request) { + const queryParametersString = this.createExtraQueryParameters(request); + const endpoint = UrlString.appendQueryString(this.authority.deviceCodeEndpoint, queryParametersString); + const queryString = this.createQueryString(request); + const headers = this.createTokenRequestHeaders(); + const thumbprint = { + clientId: this.config.authOptions.clientId, + authority: request.authority, + scopes: request.scopes, + claims: request.claims, + authenticationScheme: request.authenticationScheme, + resourceRequestMethod: request.resourceRequestMethod, + resourceRequestUri: request.resourceRequestUri, + shrClaims: request.shrClaims, + sshKid: request.sshKid, + }; + return this.executePostRequestToDeviceCodeEndpoint(endpoint, queryString, headers, thumbprint, request.correlationId); + } + /** + * Creates query string for the device code request + * @param request - developer provided CommonDeviceCodeRequest + */ + createExtraQueryParameters(request) { + const parameters = new Map(); + if (request.extraQueryParameters) { + addExtraParameters(parameters, request.extraQueryParameters); + } + return mapToQueryString(parameters); + } + /** + * Executes POST request to device code endpoint + * @param deviceCodeEndpoint - token endpoint + * @param queryString - string to be used in the body of the request + * @param headers - headers for the request + * @param thumbprint - unique request thumbprint + * @param correlationId - correlation id to be used in the request + */ + async executePostRequestToDeviceCodeEndpoint(deviceCodeEndpoint, queryString, headers, thumbprint, correlationId) { + const { body: { user_code: userCode, device_code: deviceCode, verification_uri: verificationUri, expires_in: expiresIn, interval, message, }, } = await this.sendPostRequest(thumbprint, deviceCodeEndpoint, { + body: queryString, + headers: headers, + }, correlationId); + return { + userCode, + deviceCode, + verificationUri, + expiresIn, + interval, + message, + }; + } + /** + * Create device code endpoint query parameters and returns string + * @param request - developer provided CommonDeviceCodeRequest + */ + createQueryString(request) { + const parameters = new Map(); + addScopes(parameters, request.scopes); + addClientId(parameters, this.config.authOptions.clientId); + if (request.extraQueryParameters) { + addExtraParameters(parameters, request.extraQueryParameters); + } + if (request.claims || + (this.config.authOptions.clientCapabilities && + this.config.authOptions.clientCapabilities.length > 0)) { + addClaims(parameters, request.claims, this.config.authOptions.clientCapabilities); + } + return mapToQueryString(parameters); + } + /** + * Breaks the polling with specific conditions + * @param deviceCodeExpirationTime - expiration time for the device code request + * @param userSpecifiedTimeout - developer provided timeout, to be compared against deviceCodeExpirationTime + * @param userSpecifiedCancelFlag - boolean indicating the developer would like to cancel the request + */ + continuePolling(deviceCodeExpirationTime, userSpecifiedTimeout, userSpecifiedCancelFlag) { + if (userSpecifiedCancelFlag) { + this.logger.error("Token request cancelled by setting DeviceCodeRequest.cancel = true", ""); + throw ClientAuthError_createClientAuthError(deviceCodePollingCancelled); + } + else if (userSpecifiedTimeout && + userSpecifiedTimeout < deviceCodeExpirationTime && + nowSeconds() > userSpecifiedTimeout) { + this.logger.error(`User defined timeout for device code polling reached. The timeout was set for ${userSpecifiedTimeout}`, ""); + throw ClientAuthError_createClientAuthError(userTimeoutReached); + } + else if (nowSeconds() > deviceCodeExpirationTime) { + if (userSpecifiedTimeout) { + this.logger.verbose(`User specified timeout ignored as the device code has expired before the timeout elapsed. The user specified timeout was set for ${userSpecifiedTimeout}`, ""); + } + this.logger.error(`Device code expired. Expiration time of device code was ${deviceCodeExpirationTime}`, ""); + throw ClientAuthError_createClientAuthError(deviceCodeExpired); + } + return true; + } + /** + * Creates token request with device code response and polls token endpoint at interval set by the device code response + * @param request - developer provided CommonDeviceCodeRequest + * @param deviceCodeResponse - DeviceCodeResponse returned by the security token service device code endpoint + */ + async acquireTokenWithDeviceCode(request, deviceCodeResponse) { + const queryParametersString = this.createTokenQueryParameters(request); + const endpoint = UrlString.appendQueryString(this.authority.tokenEndpoint, queryParametersString); + const requestBody = this.createTokenRequestBody(request, deviceCodeResponse); + const headers = this.createTokenRequestHeaders(); + const userSpecifiedTimeout = request.timeout + ? nowSeconds() + request.timeout + : undefined; + const deviceCodeExpirationTime = nowSeconds() + deviceCodeResponse.expiresIn; + const pollingIntervalMilli = deviceCodeResponse.interval * 1000; + /* + * Poll token endpoint while (device code is not expired AND operation has not been cancelled by + * setting CancellationToken.cancel = true). POST request is sent at interval set by pollingIntervalMilli + */ + while (this.continuePolling(deviceCodeExpirationTime, userSpecifiedTimeout, request.cancel)) { + const thumbprint = { + clientId: this.config.authOptions.clientId, + authority: request.authority, + scopes: request.scopes, + claims: request.claims, + authenticationScheme: request.authenticationScheme, + resourceRequestMethod: request.resourceRequestMethod, + resourceRequestUri: request.resourceRequestUri, + shrClaims: request.shrClaims, + sshKid: request.sshKid, + }; + const response = await this.executePostToTokenEndpoint(endpoint, requestBody, headers, thumbprint, request.correlationId); + if (response.body && response.body.error) { + // user authorization is pending. Sleep for polling interval and try again + if (response.body.error === AUTHORIZATION_PENDING) { + this.logger.info("Authorization pending. Continue polling.", request.correlationId); + await delay(pollingIntervalMilli); + } + else { + // for any other error, throw + this.logger.info("Unexpected error in polling from the server", request.correlationId); + throw createAuthError(postRequestFailed, response.body.error); + } + } + else { + this.logger.verbose("Authorization completed successfully. Polling stopped.", request.correlationId); + return response.body; + } + } + /* + * The above code should've thrown by this point, but to satisfy TypeScript, + * and in the rare case the conditionals in continuePolling() may not catch everything... + */ + this.logger.error("Polling stopped for unknown reasons.", request.correlationId); + throw ClientAuthError_createClientAuthError(deviceCodeUnknownError); + } + /** + * Creates query parameters and converts to string. + * @param request - developer provided CommonDeviceCodeRequest + * @param deviceCodeResponse - DeviceCodeResponse returned by the security token service device code endpoint + */ + createTokenRequestBody(request, deviceCodeResponse) { + const parameters = new Map(); + addScopes(parameters, request.scopes); + addClientId(parameters, this.config.authOptions.clientId); + addGrantType(parameters, GrantType.DEVICE_CODE_GRANT); + addDeviceCode(parameters, deviceCodeResponse.deviceCode); + const correlationId = request.correlationId || + this.config.cryptoInterface.createNewGuid(); + addCorrelationId(parameters, correlationId); + addClientInfo(parameters); + addLibraryInfo(parameters, this.config.libraryInfo); + addApplicationTelemetry(parameters, this.config.telemetry.application); + addThrottling(parameters); + if (this.serverTelemetryManager) { + addServerTelemetry(parameters, this.serverTelemetryManager); + } + if (!StringUtils_StringUtils.isEmptyObj(request.claims) || + (this.config.authOptions.clientCapabilities && + this.config.authOptions.clientCapabilities.length > 0)) { + addClaims(parameters, request.claims, this.config.authOptions.clientCapabilities); + } + return mapToQueryString(parameters); + } } @@ -55711,278 +55711,278 @@ class DeviceCodeClient extends BaseClient { -/* - * Copyright (c) Microsoft Corporation. All rights reserved. - * Licensed under the MIT License. - */ -/** - * This class is to be used to acquire tokens for public client applications (desktop, mobile). Public client applications - * are not trusted to safely store application secrets, and therefore can only request tokens in the name of an user. - * @public - */ -class PublicClientApplication extends ClientApplication { - /** - * Important attributes in the Configuration object for auth are: - * - clientID: the application ID of your application. You can obtain one by registering your application with our Application registration portal. - * - authority: the authority URL for your application. - * - * AAD authorities are of the form https://login.microsoftonline.com/\{Enter_the_Tenant_Info_Here\}. - * - If your application supports Accounts in one organizational directory, replace "Enter_the_Tenant_Info_Here" value with the Tenant Id or Tenant name (for example, contoso.microsoft.com). - * - If your application supports Accounts in any organizational directory, replace "Enter_the_Tenant_Info_Here" value with organizations. - * - If your application supports Accounts in any organizational directory and personal Microsoft accounts, replace "Enter_the_Tenant_Info_Here" value with common. - * - To restrict support to Personal Microsoft accounts only, replace "Enter_the_Tenant_Info_Here" value with consumers. - * - * Azure B2C authorities are of the form https://\{instance\}/\{tenant\}/\{policy\}. Each policy is considered - * its own authority. You will have to set the all of the knownAuthorities at the time of the client application - * construction. - * - * ADFS authorities are of the form https://\{instance\}/adfs. - */ - constructor(configuration) { - super(configuration); - if (this.config.broker.nativeBrokerPlugin) { - if (this.config.broker.nativeBrokerPlugin.isBrokerAvailable) { - this.nativeBrokerPlugin = this.config.broker.nativeBrokerPlugin; - this.nativeBrokerPlugin.setLogger(this.config.system.loggerOptions); - } - else { - this.logger.warning("NativeBroker implementation was provided but the broker is unavailable.", ""); - } - } - this.skus = ServerTelemetryManager.makeExtraSkuString({ - libraryName: Constants_Constants.MSAL_SKU, - libraryVersion: dist_packageMetadata_version, - }); - } - /** - * Acquires a token from the authority using OAuth2.0 device code flow. - * This flow is designed for devices that do not have access to a browser or have input constraints. - * The authorization server issues a DeviceCode object with a verification code, an end-user code, - * and the end-user verification URI. The DeviceCode object is provided through a callback, and the end-user should be - * instructed to use another device to navigate to the verification URI to input credentials. - * Since the client cannot receive incoming requests, it polls the authorization server repeatedly - * until the end-user completes input of credentials. - */ - async acquireTokenByDeviceCode(request) { - this.logger.info("acquireTokenByDeviceCode called", request.correlationId || ""); - enforceResourceParameter(this.config.auth.isMcp, request); - const validRequest = Object.assign(request, await this.initializeBaseRequest(request)); - const serverTelemetryManager = this.initializeServerTelemetryManager(ApiId.acquireTokenByDeviceCode, validRequest.correlationId); - try { - const discoveredAuthority = await this.createAuthority(validRequest.authority, validRequest.correlationId, undefined, request.azureCloudOptions); - const deviceCodeConfig = await this.buildOauthClientConfiguration(discoveredAuthority, validRequest.correlationId, "", serverTelemetryManager); - const deviceCodeClient = new DeviceCodeClient(deviceCodeConfig); - this.logger.verbose("Device code client created", validRequest.correlationId); - return await deviceCodeClient.acquireToken(validRequest); - } - catch (e) { - if (e instanceof AuthError) { - e.setCorrelationId(validRequest.correlationId); - } - serverTelemetryManager.cacheFailedRequest(e); - throw e; - } - } - /** - * Acquires a token interactively via the browser by requesting an authorization code then exchanging it for a token. - */ - async acquireTokenInteractive(request) { - const correlationId = request.correlationId || this.cryptoProvider.createNewGuid(); - this.logger.trace("acquireTokenInteractive called", correlationId); - enforceResourceParameter(this.config.auth.isMcp, request); - const { openBrowser, successTemplate, errorTemplate, windowHandle, loopbackClient: customLoopbackClient, ...remainingProperties } = request; - if (this.nativeBrokerPlugin) { - const brokerRequest = { - ...remainingProperties, - clientId: this.config.auth.clientId, - scopes: request.scopes || OIDC_DEFAULT_SCOPES, - redirectUri: request.redirectUri || "", - authority: request.authority || this.config.auth.authority, - correlationId: correlationId, - extraParameters: { - ...remainingProperties.extraQueryParameters, - ...remainingProperties.extraParameters, - [X_CLIENT_EXTRA_SKU]: this.skus, - }, - accountId: remainingProperties.account?.nativeAccountId, - }; - return this.nativeBrokerPlugin.acquireTokenInteractive(brokerRequest, windowHandle); - } - if (request.redirectUri) { - // If it's not a broker fallback scenario, we throw an error - if (!this.config.broker.nativeBrokerPlugin) { - throw NodeAuthError.createRedirectUriNotSupportedError(); - } - // If a redirect URI is provided for a broker flow but MSAL runtime startup failed, we fall back to the browser flow and will ignore the redirect URI provided for the broker flow - request.redirectUri = ""; - } - const { verifier, challenge } = await this.cryptoProvider.generatePkceCodes(); - const loopbackClient = customLoopbackClient || new LoopbackClient(); - let authCodeResponse = {}; - let authCodeListenerError = null; - try { - const authCodeListener = loopbackClient - .listenForAuthCode(successTemplate, errorTemplate) - .then((response) => { - authCodeResponse = response; - }) - .catch((e) => { - // Store the promise instead of throwing so we can control when its thrown - authCodeListenerError = e; - }); - // Wait for server to be listening - const redirectUri = await this.waitForRedirectUri(loopbackClient); - const validRequest = { - ...remainingProperties, - correlationId: correlationId, - scopes: request.scopes || OIDC_DEFAULT_SCOPES, - redirectUri: redirectUri, - responseMode: ResponseMode.QUERY, - codeChallenge: challenge, - codeChallengeMethod: CodeChallengeMethodValues.S256, - }; - const authCodeUrl = await this.getAuthCodeUrl(validRequest); - await openBrowser(authCodeUrl); - await authCodeListener; - if (authCodeListenerError) { - throw authCodeListenerError; - } - if (authCodeResponse.error) { - throw new ServerError_ServerError(authCodeResponse.error, authCodeResponse.error_description, authCodeResponse.suberror); - } - else if (!authCodeResponse.code) { - throw NodeAuthError.createNoAuthCodeInResponseError(); - } - const clientInfo = authCodeResponse.client_info; - const tokenRequest = { - code: authCodeResponse.code, - codeVerifier: verifier, - clientInfo: clientInfo || "", - ...validRequest, - }; - return await this.acquireTokenByCode(tokenRequest); // Await this so the server doesn't close prematurely - } - finally { - loopbackClient.closeServer(); - } - } - /** - * Returns a token retrieved either from the cache or by exchanging the refresh token for a fresh access token. If brokering is enabled the token request will be serviced by the broker. - * @param request - developer provided SilentFlowRequest - * @returns - */ - async acquireTokenSilent(request) { - const correlationId = request.correlationId || this.cryptoProvider.createNewGuid(); - this.logger.trace("acquireTokenSilent called", correlationId); - enforceResourceParameter(this.config.auth.isMcp, request); - if (this.nativeBrokerPlugin) { - const brokerRequest = { - ...request, - clientId: this.config.auth.clientId, - scopes: request.scopes || OIDC_DEFAULT_SCOPES, - redirectUri: request.redirectUri || "", - authority: request.authority || this.config.auth.authority, - correlationId: correlationId, - extraParameters: { - ...request.extraQueryParameters, - ...request.extraParameters, - [X_CLIENT_EXTRA_SKU]: this.skus, - }, - accountId: request.account.nativeAccountId, - forceRefresh: request.forceRefresh || false, - }; - return this.nativeBrokerPlugin.acquireTokenSilent(brokerRequest); - } - if (request.redirectUri) { - // If it's not a broker fallback scenario, we throw an error - if (!this.config.broker.nativeBrokerPlugin) { - throw NodeAuthError.createRedirectUriNotSupportedError(); - } - request.redirectUri = ""; - } - return super.acquireTokenSilent(request); - } - /** - * Acquires a token by exchanging the authorization code received from the first step of OAuth 2.0 Authorization Code Flow. - * In MCP mode, a resource parameter is required on the request. - */ - async acquireTokenByCode(request, authCodePayLoad) { - enforceResourceParameter(this.config.auth.isMcp, request); - return super.acquireTokenByCode(request, authCodePayLoad); - } - /** - * Acquires a token by exchanging the refresh token provided for a new set of tokens. - * In MCP mode, a resource parameter is required on the request. - */ - async acquireTokenByRefreshToken(request) { - enforceResourceParameter(this.config.auth.isMcp, request); - return super.acquireTokenByRefreshToken(request); - } - /** - * Removes cache artifacts associated with the given account - * @param request - developer provided SignOutRequest - * @returns - */ - async signOut(request) { - if (this.nativeBrokerPlugin && request.account.nativeAccountId) { - const signoutRequest = { - clientId: this.config.auth.clientId, - accountId: request.account.nativeAccountId, - correlationId: request.correlationId || - this.cryptoProvider.createNewGuid(), - }; - await this.nativeBrokerPlugin.signOut(signoutRequest); - } - await this.getTokenCache().removeAccount(request.account, request.correlationId); - } - /** - * Returns all cached accounts for this application. If brokering is enabled this request will be serviced by the broker. - * @returns - */ - async getAllAccounts() { - if (this.nativeBrokerPlugin) { - const correlationId = this.cryptoProvider.createNewGuid(); - return this.nativeBrokerPlugin.getAllAccounts(this.config.auth.clientId, correlationId); - } - return this.getTokenCache().getAllAccounts(); - } - /** - * Attempts to retrieve the redirectUri from the loopback server. If the loopback server does not start listening for requests within the timeout this will throw. - * @param loopbackClient - developer provided custom loopback server implementation - * @returns - */ - async waitForRedirectUri(loopbackClient) { - return new Promise((resolve, reject) => { - let ticks = 0; - const id = setInterval(() => { - if (LOOPBACK_SERVER_CONSTANTS.TIMEOUT_MS / - LOOPBACK_SERVER_CONSTANTS.INTERVAL_MS < - ticks) { - clearInterval(id); - reject(NodeAuthError.createLoopbackServerTimeoutError()); - return; - } - try { - const r = loopbackClient.getRedirectUri(); - clearInterval(id); - resolve(r); - return; - } - catch (e) { - if (e instanceof AuthError && - e.errorCode === - NodeAuthErrorMessage.noLoopbackServerExists.code) { - // Loopback server is not listening yet - ticks++; - return; - } - clearInterval(id); - reject(e); - return; - } - }, LOOPBACK_SERVER_CONSTANTS.INTERVAL_MS); - }); - } +/* + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. + */ +/** + * This class is to be used to acquire tokens for public client applications (desktop, mobile). Public client applications + * are not trusted to safely store application secrets, and therefore can only request tokens in the name of an user. + * @public + */ +class PublicClientApplication extends ClientApplication { + /** + * Important attributes in the Configuration object for auth are: + * - clientID: the application ID of your application. You can obtain one by registering your application with our Application registration portal. + * - authority: the authority URL for your application. + * + * AAD authorities are of the form https://login.microsoftonline.com/\{Enter_the_Tenant_Info_Here\}. + * - If your application supports Accounts in one organizational directory, replace "Enter_the_Tenant_Info_Here" value with the Tenant Id or Tenant name (for example, contoso.microsoft.com). + * - If your application supports Accounts in any organizational directory, replace "Enter_the_Tenant_Info_Here" value with organizations. + * - If your application supports Accounts in any organizational directory and personal Microsoft accounts, replace "Enter_the_Tenant_Info_Here" value with common. + * - To restrict support to Personal Microsoft accounts only, replace "Enter_the_Tenant_Info_Here" value with consumers. + * + * Azure B2C authorities are of the form https://\{instance\}/\{tenant\}/\{policy\}. Each policy is considered + * its own authority. You will have to set the all of the knownAuthorities at the time of the client application + * construction. + * + * ADFS authorities are of the form https://\{instance\}/adfs. + */ + constructor(configuration) { + super(configuration); + if (this.config.broker.nativeBrokerPlugin) { + if (this.config.broker.nativeBrokerPlugin.isBrokerAvailable) { + this.nativeBrokerPlugin = this.config.broker.nativeBrokerPlugin; + this.nativeBrokerPlugin.setLogger(this.config.system.loggerOptions); + } + else { + this.logger.warning("NativeBroker implementation was provided but the broker is unavailable.", ""); + } + } + this.skus = ServerTelemetryManager.makeExtraSkuString({ + libraryName: Constants_Constants.MSAL_SKU, + libraryVersion: dist_packageMetadata_version, + }); + } + /** + * Acquires a token from the authority using OAuth2.0 device code flow. + * This flow is designed for devices that do not have access to a browser or have input constraints. + * The authorization server issues a DeviceCode object with a verification code, an end-user code, + * and the end-user verification URI. The DeviceCode object is provided through a callback, and the end-user should be + * instructed to use another device to navigate to the verification URI to input credentials. + * Since the client cannot receive incoming requests, it polls the authorization server repeatedly + * until the end-user completes input of credentials. + */ + async acquireTokenByDeviceCode(request) { + this.logger.info("acquireTokenByDeviceCode called", request.correlationId || ""); + enforceResourceParameter(this.config.auth.isMcp, request); + const validRequest = Object.assign(request, await this.initializeBaseRequest(request)); + const serverTelemetryManager = this.initializeServerTelemetryManager(ApiId.acquireTokenByDeviceCode, validRequest.correlationId); + try { + const discoveredAuthority = await this.createAuthority(validRequest.authority, validRequest.correlationId, undefined, request.azureCloudOptions); + const deviceCodeConfig = await this.buildOauthClientConfiguration(discoveredAuthority, validRequest.correlationId, "", serverTelemetryManager); + const deviceCodeClient = new DeviceCodeClient(deviceCodeConfig); + this.logger.verbose("Device code client created", validRequest.correlationId); + return await deviceCodeClient.acquireToken(validRequest); + } + catch (e) { + if (e instanceof AuthError) { + e.setCorrelationId(validRequest.correlationId); + } + serverTelemetryManager.cacheFailedRequest(e); + throw e; + } + } + /** + * Acquires a token interactively via the browser by requesting an authorization code then exchanging it for a token. + */ + async acquireTokenInteractive(request) { + const correlationId = request.correlationId || this.cryptoProvider.createNewGuid(); + this.logger.trace("acquireTokenInteractive called", correlationId); + enforceResourceParameter(this.config.auth.isMcp, request); + const { openBrowser, successTemplate, errorTemplate, windowHandle, loopbackClient: customLoopbackClient, ...remainingProperties } = request; + if (this.nativeBrokerPlugin) { + const brokerRequest = { + ...remainingProperties, + clientId: this.config.auth.clientId, + scopes: request.scopes || OIDC_DEFAULT_SCOPES, + redirectUri: request.redirectUri || "", + authority: request.authority || this.config.auth.authority, + correlationId: correlationId, + extraParameters: { + ...remainingProperties.extraQueryParameters, + ...remainingProperties.extraParameters, + [X_CLIENT_EXTRA_SKU]: this.skus, + }, + accountId: remainingProperties.account?.nativeAccountId, + }; + return this.nativeBrokerPlugin.acquireTokenInteractive(brokerRequest, windowHandle); + } + if (request.redirectUri) { + // If it's not a broker fallback scenario, we throw an error + if (!this.config.broker.nativeBrokerPlugin) { + throw NodeAuthError.createRedirectUriNotSupportedError(); + } + // If a redirect URI is provided for a broker flow but MSAL runtime startup failed, we fall back to the browser flow and will ignore the redirect URI provided for the broker flow + request.redirectUri = ""; + } + const { verifier, challenge } = await this.cryptoProvider.generatePkceCodes(); + const loopbackClient = customLoopbackClient || new LoopbackClient(); + let authCodeResponse = {}; + let authCodeListenerError = null; + try { + const authCodeListener = loopbackClient + .listenForAuthCode(successTemplate, errorTemplate) + .then((response) => { + authCodeResponse = response; + }) + .catch((e) => { + // Store the promise instead of throwing so we can control when its thrown + authCodeListenerError = e; + }); + // Wait for server to be listening + const redirectUri = await this.waitForRedirectUri(loopbackClient); + const validRequest = { + ...remainingProperties, + correlationId: correlationId, + scopes: request.scopes || OIDC_DEFAULT_SCOPES, + redirectUri: redirectUri, + responseMode: ResponseMode.QUERY, + codeChallenge: challenge, + codeChallengeMethod: CodeChallengeMethodValues.S256, + }; + const authCodeUrl = await this.getAuthCodeUrl(validRequest); + await openBrowser(authCodeUrl); + await authCodeListener; + if (authCodeListenerError) { + throw authCodeListenerError; + } + if (authCodeResponse.error) { + throw new ServerError_ServerError(authCodeResponse.error, authCodeResponse.error_description, authCodeResponse.suberror); + } + else if (!authCodeResponse.code) { + throw NodeAuthError.createNoAuthCodeInResponseError(); + } + const clientInfo = authCodeResponse.client_info; + const tokenRequest = { + code: authCodeResponse.code, + codeVerifier: verifier, + clientInfo: clientInfo || "", + ...validRequest, + }; + return await this.acquireTokenByCode(tokenRequest); // Await this so the server doesn't close prematurely + } + finally { + loopbackClient.closeServer(); + } + } + /** + * Returns a token retrieved either from the cache or by exchanging the refresh token for a fresh access token. If brokering is enabled the token request will be serviced by the broker. + * @param request - developer provided SilentFlowRequest + * @returns + */ + async acquireTokenSilent(request) { + const correlationId = request.correlationId || this.cryptoProvider.createNewGuid(); + this.logger.trace("acquireTokenSilent called", correlationId); + enforceResourceParameter(this.config.auth.isMcp, request); + if (this.nativeBrokerPlugin) { + const brokerRequest = { + ...request, + clientId: this.config.auth.clientId, + scopes: request.scopes || OIDC_DEFAULT_SCOPES, + redirectUri: request.redirectUri || "", + authority: request.authority || this.config.auth.authority, + correlationId: correlationId, + extraParameters: { + ...request.extraQueryParameters, + ...request.extraParameters, + [X_CLIENT_EXTRA_SKU]: this.skus, + }, + accountId: request.account.nativeAccountId, + forceRefresh: request.forceRefresh || false, + }; + return this.nativeBrokerPlugin.acquireTokenSilent(brokerRequest); + } + if (request.redirectUri) { + // If it's not a broker fallback scenario, we throw an error + if (!this.config.broker.nativeBrokerPlugin) { + throw NodeAuthError.createRedirectUriNotSupportedError(); + } + request.redirectUri = ""; + } + return super.acquireTokenSilent(request); + } + /** + * Acquires a token by exchanging the authorization code received from the first step of OAuth 2.0 Authorization Code Flow. + * In MCP mode, a resource parameter is required on the request. + */ + async acquireTokenByCode(request, authCodePayLoad) { + enforceResourceParameter(this.config.auth.isMcp, request); + return super.acquireTokenByCode(request, authCodePayLoad); + } + /** + * Acquires a token by exchanging the refresh token provided for a new set of tokens. + * In MCP mode, a resource parameter is required on the request. + */ + async acquireTokenByRefreshToken(request) { + enforceResourceParameter(this.config.auth.isMcp, request); + return super.acquireTokenByRefreshToken(request); + } + /** + * Removes cache artifacts associated with the given account + * @param request - developer provided SignOutRequest + * @returns + */ + async signOut(request) { + if (this.nativeBrokerPlugin && request.account.nativeAccountId) { + const signoutRequest = { + clientId: this.config.auth.clientId, + accountId: request.account.nativeAccountId, + correlationId: request.correlationId || + this.cryptoProvider.createNewGuid(), + }; + await this.nativeBrokerPlugin.signOut(signoutRequest); + } + await this.getTokenCache().removeAccount(request.account, request.correlationId); + } + /** + * Returns all cached accounts for this application. If brokering is enabled this request will be serviced by the broker. + * @returns + */ + async getAllAccounts() { + if (this.nativeBrokerPlugin) { + const correlationId = this.cryptoProvider.createNewGuid(); + return this.nativeBrokerPlugin.getAllAccounts(this.config.auth.clientId, correlationId); + } + return this.getTokenCache().getAllAccounts(); + } + /** + * Attempts to retrieve the redirectUri from the loopback server. If the loopback server does not start listening for requests within the timeout this will throw. + * @param loopbackClient - developer provided custom loopback server implementation + * @returns + */ + async waitForRedirectUri(loopbackClient) { + return new Promise((resolve, reject) => { + let ticks = 0; + const id = setInterval(() => { + if (LOOPBACK_SERVER_CONSTANTS.TIMEOUT_MS / + LOOPBACK_SERVER_CONSTANTS.INTERVAL_MS < + ticks) { + clearInterval(id); + reject(NodeAuthError.createLoopbackServerTimeoutError()); + return; + } + try { + const r = loopbackClient.getRedirectUri(); + clearInterval(id); + resolve(r); + return; + } + catch (e) { + if (e instanceof AuthError && + e.errorCode === + NodeAuthErrorMessage.noLoopbackServerExists.code) { + // Loopback server is not listening yet + ticks++; + return; + } + clearInterval(id); + reject(e); + return; + } + }, LOOPBACK_SERVER_CONSTANTS.INTERVAL_MS); + }); + } } @@ -55995,201 +55995,201 @@ class PublicClientApplication extends ClientApplication { -/* - * Copyright (c) Microsoft Corporation. All rights reserved. - * Licensed under the MIT License. - */ -/** - * OAuth2.0 client credential grant - * @public - */ -class ClientCredentialClient_ClientCredentialClient extends BaseClient { - constructor(configuration, appTokenProvider) { - super(configuration); - this.appTokenProvider = appTokenProvider; - } - /** - * Public API to acquire a token with ClientCredential Flow for Confidential clients - * @param request - CommonClientCredentialRequest provided by the developer - */ - async acquireToken(request) { - if (request.skipCache || request.claims) { - return this.executeTokenRequest(request, this.authority); - } - const [cachedAuthenticationResult, lastCacheOutcome] = await this.getCachedAuthenticationResult(request, this.config, this.cryptoUtils, this.authority, this.cacheManager, this.serverTelemetryManager); - if (cachedAuthenticationResult) { - // if the token is not expired but must be refreshed; get a new one in the background - if (lastCacheOutcome === - CacheOutcome.PROACTIVELY_REFRESHED) { - this.logger.info("ClientCredentialClient:getCachedAuthenticationResult - Cached access token's refreshOn property has been exceeded'. It's not expired, but must be refreshed.", request.correlationId); - // refresh the access token in the background - const refreshAccessToken = true; - await this.executeTokenRequest(request, this.authority, refreshAccessToken); - } - // return the cached token - return cachedAuthenticationResult; - } - else { - return this.executeTokenRequest(request, this.authority); - } - } - /** - * looks up cache if the tokens are cached already - */ - async getCachedAuthenticationResult(request, config, cryptoUtils, authority, cacheManager, serverTelemetryManager) { - const clientConfiguration = config; - const managedIdentityConfiguration = config; - let lastCacheOutcome = CacheOutcome.NOT_APPLICABLE; - // read the user-supplied cache into memory, if applicable - let cacheContext; - if (clientConfiguration.serializableCache && - clientConfiguration.persistencePlugin) { - cacheContext = new TokenCacheContext(clientConfiguration.serializableCache, false); - await clientConfiguration.persistencePlugin.beforeCacheAccess(cacheContext); - } - const cachedAccessToken = this.readAccessTokenFromCache(authority, managedIdentityConfiguration.managedIdentityId?.id || - clientConfiguration.authOptions.clientId, new ScopeSet(request.scopes || []), cacheManager, request.correlationId); - if (clientConfiguration.serializableCache && - clientConfiguration.persistencePlugin && - cacheContext) { - await clientConfiguration.persistencePlugin.afterCacheAccess(cacheContext); - } - // must refresh due to non-existent access_token - if (!cachedAccessToken) { - serverTelemetryManager?.setCacheOutcome(CacheOutcome.NO_CACHED_ACCESS_TOKEN); - return [null, CacheOutcome.NO_CACHED_ACCESS_TOKEN]; - } - // must refresh due to the expires_in value - if (isTokenExpired(cachedAccessToken.expiresOn, clientConfiguration.systemOptions?.tokenRenewalOffsetSeconds || - DEFAULT_TOKEN_RENEWAL_OFFSET_SEC)) { - serverTelemetryManager?.setCacheOutcome(CacheOutcome.CACHED_ACCESS_TOKEN_EXPIRED); - return [null, CacheOutcome.CACHED_ACCESS_TOKEN_EXPIRED]; - } - // must refresh (in the background) due to the refresh_in value - if (cachedAccessToken.refreshOn && - isTokenExpired(cachedAccessToken.refreshOn.toString(), 0)) { - lastCacheOutcome = CacheOutcome.PROACTIVELY_REFRESHED; - serverTelemetryManager?.setCacheOutcome(CacheOutcome.PROACTIVELY_REFRESHED); - } - return [ - await ResponseHandler.generateAuthenticationResult(cryptoUtils, authority, { - account: null, - idToken: null, - accessToken: cachedAccessToken, - refreshToken: null, - appMetadata: null, - }, true, request, this.performanceClient), - lastCacheOutcome, - ]; - } - /** - * Reads access token from the cache - */ - readAccessTokenFromCache(authority, id, scopeSet, cacheManager, correlationId) { - const accessTokenFilter = { - homeAccountId: "", - environment: authority.canonicalAuthorityUrlComponents.HostNameAndPort, - credentialType: CredentialType.ACCESS_TOKEN, - clientId: id, - realm: authority.tenant, - target: ScopeSet.createSearchScopes(scopeSet.asArray()), - }; - const accessTokens = cacheManager.getAccessTokensByFilter(accessTokenFilter, correlationId); - if (accessTokens.length < 1) { - return null; - } - else if (accessTokens.length > 1) { - throw ClientAuthError_createClientAuthError(multipleMatchingTokens); - } - return accessTokens[0]; - } - /** - * Makes a network call to request the token from the service - * @param request - CommonClientCredentialRequest provided by the developer - * @param authority - authority object - */ - async executeTokenRequest(request, authority, refreshAccessToken) { - let serverTokenResponse; - let reqTimestamp; - if (this.appTokenProvider) { - this.logger.info("Using appTokenProvider extensibility.", request.correlationId); - const appTokenPropviderParameters = { - correlationId: request.correlationId, - tenantId: this.config.authOptions.authority.tenant, - scopes: request.scopes, - claims: request.claims, - }; - reqTimestamp = nowSeconds(); - const appTokenProviderResult = await this.appTokenProvider(appTokenPropviderParameters); - serverTokenResponse = { - access_token: appTokenProviderResult.accessToken, - expires_in: appTokenProviderResult.expiresInSeconds, - refresh_in: appTokenProviderResult.refreshInSeconds, - token_type: AuthenticationScheme.BEARER, - }; - } - else { - const queryParametersString = this.createTokenQueryParameters(request); - const endpoint = UrlString.appendQueryString(authority.tokenEndpoint, queryParametersString); - const requestBody = await this.createTokenRequestBody(request); - const headers = this.createTokenRequestHeaders(); - const thumbprint = { - clientId: this.config.authOptions.clientId, - authority: request.authority, - scopes: request.scopes, - claims: request.claims, - authenticationScheme: request.authenticationScheme, - resourceRequestMethod: request.resourceRequestMethod, - resourceRequestUri: request.resourceRequestUri, - shrClaims: request.shrClaims, - sshKid: request.sshKid, - }; - this.logger.info("Sending token request to endpoint: " + authority.tokenEndpoint, request.correlationId); - reqTimestamp = nowSeconds(); - const response = await this.executePostToTokenEndpoint(endpoint, requestBody, headers, thumbprint, request.correlationId); - serverTokenResponse = response.body; - serverTokenResponse.status = response.status; - } - const responseHandler = new ResponseHandler(this.config.authOptions.clientId, this.cacheManager, this.cryptoUtils, this.logger, this.performanceClient, this.config.serializableCache, this.config.persistencePlugin); - responseHandler.validateTokenResponse(serverTokenResponse, request.correlationId, refreshAccessToken); - const tokenResponse = await responseHandler.handleServerTokenResponse(serverTokenResponse, this.authority, reqTimestamp, request, ApiId.acquireTokenByClientCredential); - return tokenResponse; - } - /** - * generate the request to the server in the acceptable format - * @param request - CommonClientCredentialRequest provided by the developer - */ - async createTokenRequestBody(request) { - const parameters = new Map(); - addClientId(parameters, this.config.authOptions.clientId); - addScopes(parameters, request.scopes, false); - addGrantType(parameters, GrantType.CLIENT_CREDENTIALS_GRANT); - addLibraryInfo(parameters, this.config.libraryInfo); - addApplicationTelemetry(parameters, this.config.telemetry.application); - addThrottling(parameters); - if (this.serverTelemetryManager) { - addServerTelemetry(parameters, this.serverTelemetryManager); - } - const correlationId = request.correlationId || - this.config.cryptoInterface.createNewGuid(); - addCorrelationId(parameters, correlationId); - if (this.config.clientCredentials.clientSecret) { - addClientSecret(parameters, this.config.clientCredentials.clientSecret); - } - // Use clientAssertion from request, fallback to client assertion in base configuration - const clientAssertion = request.clientAssertion || - this.config.clientCredentials.clientAssertion; - if (clientAssertion) { - addClientAssertion(parameters, await getClientAssertion(clientAssertion.assertion, this.config.authOptions.clientId, request.resourceRequestUri)); - addClientAssertionType(parameters, clientAssertion.assertionType); - } - if (!StringUtils_StringUtils.isEmptyObj(request.claims) || - (this.config.authOptions.clientCapabilities && - this.config.authOptions.clientCapabilities.length > 0)) { - addClaims(parameters, request.claims, this.config.authOptions.clientCapabilities); - } - return mapToQueryString(parameters); - } +/* + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. + */ +/** + * OAuth2.0 client credential grant + * @public + */ +class ClientCredentialClient_ClientCredentialClient extends BaseClient { + constructor(configuration, appTokenProvider) { + super(configuration); + this.appTokenProvider = appTokenProvider; + } + /** + * Public API to acquire a token with ClientCredential Flow for Confidential clients + * @param request - CommonClientCredentialRequest provided by the developer + */ + async acquireToken(request) { + if (request.skipCache || request.claims) { + return this.executeTokenRequest(request, this.authority); + } + const [cachedAuthenticationResult, lastCacheOutcome] = await this.getCachedAuthenticationResult(request, this.config, this.cryptoUtils, this.authority, this.cacheManager, this.serverTelemetryManager); + if (cachedAuthenticationResult) { + // if the token is not expired but must be refreshed; get a new one in the background + if (lastCacheOutcome === + CacheOutcome.PROACTIVELY_REFRESHED) { + this.logger.info("ClientCredentialClient:getCachedAuthenticationResult - Cached access token's refreshOn property has been exceeded'. It's not expired, but must be refreshed.", request.correlationId); + // refresh the access token in the background + const refreshAccessToken = true; + await this.executeTokenRequest(request, this.authority, refreshAccessToken); + } + // return the cached token + return cachedAuthenticationResult; + } + else { + return this.executeTokenRequest(request, this.authority); + } + } + /** + * looks up cache if the tokens are cached already + */ + async getCachedAuthenticationResult(request, config, cryptoUtils, authority, cacheManager, serverTelemetryManager) { + const clientConfiguration = config; + const managedIdentityConfiguration = config; + let lastCacheOutcome = CacheOutcome.NOT_APPLICABLE; + // read the user-supplied cache into memory, if applicable + let cacheContext; + if (clientConfiguration.serializableCache && + clientConfiguration.persistencePlugin) { + cacheContext = new TokenCacheContext(clientConfiguration.serializableCache, false); + await clientConfiguration.persistencePlugin.beforeCacheAccess(cacheContext); + } + const cachedAccessToken = this.readAccessTokenFromCache(authority, managedIdentityConfiguration.managedIdentityId?.id || + clientConfiguration.authOptions.clientId, new ScopeSet(request.scopes || []), cacheManager, request.correlationId); + if (clientConfiguration.serializableCache && + clientConfiguration.persistencePlugin && + cacheContext) { + await clientConfiguration.persistencePlugin.afterCacheAccess(cacheContext); + } + // must refresh due to non-existent access_token + if (!cachedAccessToken) { + serverTelemetryManager?.setCacheOutcome(CacheOutcome.NO_CACHED_ACCESS_TOKEN); + return [null, CacheOutcome.NO_CACHED_ACCESS_TOKEN]; + } + // must refresh due to the expires_in value + if (isTokenExpired(cachedAccessToken.expiresOn, clientConfiguration.systemOptions?.tokenRenewalOffsetSeconds || + DEFAULT_TOKEN_RENEWAL_OFFSET_SEC)) { + serverTelemetryManager?.setCacheOutcome(CacheOutcome.CACHED_ACCESS_TOKEN_EXPIRED); + return [null, CacheOutcome.CACHED_ACCESS_TOKEN_EXPIRED]; + } + // must refresh (in the background) due to the refresh_in value + if (cachedAccessToken.refreshOn && + isTokenExpired(cachedAccessToken.refreshOn.toString(), 0)) { + lastCacheOutcome = CacheOutcome.PROACTIVELY_REFRESHED; + serverTelemetryManager?.setCacheOutcome(CacheOutcome.PROACTIVELY_REFRESHED); + } + return [ + await ResponseHandler.generateAuthenticationResult(cryptoUtils, authority, { + account: null, + idToken: null, + accessToken: cachedAccessToken, + refreshToken: null, + appMetadata: null, + }, true, request, this.performanceClient), + lastCacheOutcome, + ]; + } + /** + * Reads access token from the cache + */ + readAccessTokenFromCache(authority, id, scopeSet, cacheManager, correlationId) { + const accessTokenFilter = { + homeAccountId: "", + environment: authority.canonicalAuthorityUrlComponents.HostNameAndPort, + credentialType: CredentialType.ACCESS_TOKEN, + clientId: id, + realm: authority.tenant, + target: ScopeSet.createSearchScopes(scopeSet.asArray()), + }; + const accessTokens = cacheManager.getAccessTokensByFilter(accessTokenFilter, correlationId); + if (accessTokens.length < 1) { + return null; + } + else if (accessTokens.length > 1) { + throw ClientAuthError_createClientAuthError(multipleMatchingTokens); + } + return accessTokens[0]; + } + /** + * Makes a network call to request the token from the service + * @param request - CommonClientCredentialRequest provided by the developer + * @param authority - authority object + */ + async executeTokenRequest(request, authority, refreshAccessToken) { + let serverTokenResponse; + let reqTimestamp; + if (this.appTokenProvider) { + this.logger.info("Using appTokenProvider extensibility.", request.correlationId); + const appTokenPropviderParameters = { + correlationId: request.correlationId, + tenantId: this.config.authOptions.authority.tenant, + scopes: request.scopes, + claims: request.claims, + }; + reqTimestamp = nowSeconds(); + const appTokenProviderResult = await this.appTokenProvider(appTokenPropviderParameters); + serverTokenResponse = { + access_token: appTokenProviderResult.accessToken, + expires_in: appTokenProviderResult.expiresInSeconds, + refresh_in: appTokenProviderResult.refreshInSeconds, + token_type: AuthenticationScheme.BEARER, + }; + } + else { + const queryParametersString = this.createTokenQueryParameters(request); + const endpoint = UrlString.appendQueryString(authority.tokenEndpoint, queryParametersString); + const requestBody = await this.createTokenRequestBody(request); + const headers = this.createTokenRequestHeaders(); + const thumbprint = { + clientId: this.config.authOptions.clientId, + authority: request.authority, + scopes: request.scopes, + claims: request.claims, + authenticationScheme: request.authenticationScheme, + resourceRequestMethod: request.resourceRequestMethod, + resourceRequestUri: request.resourceRequestUri, + shrClaims: request.shrClaims, + sshKid: request.sshKid, + }; + this.logger.info("Sending token request to endpoint: " + authority.tokenEndpoint, request.correlationId); + reqTimestamp = nowSeconds(); + const response = await this.executePostToTokenEndpoint(endpoint, requestBody, headers, thumbprint, request.correlationId); + serverTokenResponse = response.body; + serverTokenResponse.status = response.status; + } + const responseHandler = new ResponseHandler(this.config.authOptions.clientId, this.cacheManager, this.cryptoUtils, this.logger, this.performanceClient, this.config.serializableCache, this.config.persistencePlugin); + responseHandler.validateTokenResponse(serverTokenResponse, request.correlationId, refreshAccessToken); + const tokenResponse = await responseHandler.handleServerTokenResponse(serverTokenResponse, this.authority, reqTimestamp, request, ApiId.acquireTokenByClientCredential); + return tokenResponse; + } + /** + * generate the request to the server in the acceptable format + * @param request - CommonClientCredentialRequest provided by the developer + */ + async createTokenRequestBody(request) { + const parameters = new Map(); + addClientId(parameters, this.config.authOptions.clientId); + addScopes(parameters, request.scopes, false); + addGrantType(parameters, GrantType.CLIENT_CREDENTIALS_GRANT); + addLibraryInfo(parameters, this.config.libraryInfo); + addApplicationTelemetry(parameters, this.config.telemetry.application); + addThrottling(parameters); + if (this.serverTelemetryManager) { + addServerTelemetry(parameters, this.serverTelemetryManager); + } + const correlationId = request.correlationId || + this.config.cryptoInterface.createNewGuid(); + addCorrelationId(parameters, correlationId); + if (this.config.clientCredentials.clientSecret) { + addClientSecret(parameters, this.config.clientCredentials.clientSecret); + } + // Use clientAssertion from request, fallback to client assertion in base configuration + const clientAssertion = request.clientAssertion || + this.config.clientCredentials.clientAssertion; + if (clientAssertion) { + addClientAssertion(parameters, await getClientAssertion(clientAssertion.assertion, this.config.authOptions.clientId, request.resourceRequestUri)); + addClientAssertionType(parameters, clientAssertion.assertionType); + } + if (!StringUtils_StringUtils.isEmptyObj(request.claims) || + (this.config.authOptions.clientCapabilities && + this.config.authOptions.clientCapabilities.length > 0)) { + addClaims(parameters, request.claims, this.config.authOptions.clientCapabilities); + } + return mapToQueryString(parameters); + } } @@ -56203,207 +56203,207 @@ class ClientCredentialClient_ClientCredentialClient extends BaseClient { -/* - * Copyright (c) Microsoft Corporation. All rights reserved. - * Licensed under the MIT License. - */ -/** - * On-Behalf-Of client - * @public - */ -class OnBehalfOfClient extends BaseClient { - constructor(configuration) { - super(configuration); - } - /** - * Public API to acquire tokens with on behalf of flow - * @param request - developer provided CommonOnBehalfOfRequest - */ - async acquireToken(request) { - this.scopeSet = new ScopeSet(request.scopes || []); - // generate the user_assertion_hash for OBOAssertion - this.userAssertionHash = await this.cryptoUtils.hashString(request.oboAssertion); - if (request.skipCache || request.claims) { - return this.executeTokenRequest(request, this.authority, this.userAssertionHash); - } - try { - return await this.getCachedAuthenticationResult(request); - } - catch (e) { - // Any failure falls back to interactive request, once we implement distributed cache, we plan to handle `createRefreshRequiredError` to refresh using the RT - return await this.executeTokenRequest(request, this.authority, this.userAssertionHash); - } - } - /** - * look up cache for tokens - * Find idtoken in the cache - * Find accessToken based on user assertion and account info in the cache - * Please note we are not yet supported OBO tokens refreshed with long lived RT. User will have to send a new assertion if the current access token expires - * This is to prevent security issues when the assertion changes over time, however, longlived RT helps retaining the session - * @param request - developer provided CommonOnBehalfOfRequest - */ - async getCachedAuthenticationResult(request) { - // look in the cache for the access_token which matches the incoming_assertion - const cachedAccessToken = this.readAccessTokenFromCacheForOBO(this.config.authOptions.clientId, request); - if (!cachedAccessToken) { - // Must refresh due to non-existent access_token. - this.serverTelemetryManager?.setCacheOutcome(CacheOutcome.NO_CACHED_ACCESS_TOKEN); - this.logger.info("SilentFlowClient:acquireCachedToken - No access token found in cache for the given properties.", request.correlationId); - throw ClientAuthError_createClientAuthError(tokenRefreshRequired); - } - else if (isTokenExpired(cachedAccessToken.expiresOn, this.config.systemOptions.tokenRenewalOffsetSeconds)) { - // Access token expired, will need to renewed - this.serverTelemetryManager?.setCacheOutcome(CacheOutcome.CACHED_ACCESS_TOKEN_EXPIRED); - this.logger.info(`OnbehalfofFlow:getCachedAuthenticationResult - Cached access token is expired or will expire within ${this.config.systemOptions.tokenRenewalOffsetSeconds} seconds.`, request.correlationId); - throw ClientAuthError_createClientAuthError(tokenRefreshRequired); - } - // fetch the idToken from cache - const cachedIdToken = this.readIdTokenFromCacheForOBO(cachedAccessToken.homeAccountId, request.correlationId); - let idTokenClaims; - let cachedAccount = null; - if (cachedIdToken) { - idTokenClaims = extractTokenClaims(cachedIdToken.secret, EncodingUtils.base64Decode); - const localAccountId = idTokenClaims.oid || idTokenClaims.sub; - const accountInfo = { - homeAccountId: cachedIdToken.homeAccountId, - environment: cachedIdToken.environment, - tenantId: cachedIdToken.realm, - username: "", - localAccountId: localAccountId || "", - }; - cachedAccount = this.cacheManager.getAccount(this.cacheManager.generateAccountKey(accountInfo), request.correlationId); - } - // increment telemetry cache hit counter - if (this.config.serverTelemetryManager) { - this.config.serverTelemetryManager.incrementCacheHits(); - } - return ResponseHandler.generateAuthenticationResult(this.cryptoUtils, this.authority, { - account: cachedAccount, - accessToken: cachedAccessToken, - idToken: cachedIdToken, - refreshToken: null, - appMetadata: null, - }, true, request, this.performanceClient, idTokenClaims); - } - /** - * read idtoken from cache, this is a specific implementation for OBO as the requirements differ from a generic lookup in the cacheManager - * Certain use cases of OBO flow do not expect an idToken in the cache/or from the service - * @param atHomeAccountId - account id - */ - readIdTokenFromCacheForOBO(atHomeAccountId, correlationId) { - const idTokenFilter = { - homeAccountId: atHomeAccountId, - environment: this.authority.canonicalAuthorityUrlComponents.HostNameAndPort, - credentialType: CredentialType.ID_TOKEN, - clientId: this.config.authOptions.clientId, - realm: this.authority.tenant, - }; - const idTokenMap = this.cacheManager.getIdTokensByFilter(idTokenFilter, correlationId); - // When acquiring a token on behalf of an application, there might not be an id token in the cache - if (Object.values(idTokenMap).length < 1) { - return null; - } - return Object.values(idTokenMap)[0]; - } - /** - * Fetches the cached access token based on incoming assertion - * @param clientId - client id - * @param request - developer provided CommonOnBehalfOfRequest - */ - readAccessTokenFromCacheForOBO(clientId, request) { - const authScheme = request.authenticationScheme || - AuthenticationScheme.BEARER; - /* - * Distinguish between Bearer and PoP/SSH token cache types - * Cast to lowercase to handle "bearer" from ADFS - */ - const credentialType = authScheme && - authScheme.toLowerCase() !== - AuthenticationScheme.BEARER.toLowerCase() - ? CredentialType.ACCESS_TOKEN_WITH_AUTH_SCHEME - : CredentialType.ACCESS_TOKEN; - const accessTokenFilter = { - credentialType: credentialType, - clientId, - target: ScopeSet.createSearchScopes(this.scopeSet.asArray()), - tokenType: authScheme, - keyId: request.sshKid, - userAssertionHash: this.userAssertionHash, - }; - const accessTokens = this.cacheManager.getAccessTokensByFilter(accessTokenFilter, request.correlationId); - const numAccessTokens = accessTokens.length; - if (numAccessTokens < 1) { - return null; - } - else if (numAccessTokens > 1) { - throw ClientAuthError_createClientAuthError(multipleMatchingTokens); - } - return accessTokens[0]; - } - /** - * Make a network call to the server requesting credentials - * @param request - developer provided CommonOnBehalfOfRequest - * @param authority - authority object - */ - async executeTokenRequest(request, authority, userAssertionHash) { - const queryParametersString = this.createTokenQueryParameters(request); - const endpoint = UrlString.appendQueryString(authority.tokenEndpoint, queryParametersString); - const requestBody = await this.createTokenRequestBody(request); - const headers = this.createTokenRequestHeaders(); - const thumbprint = { - clientId: this.config.authOptions.clientId, - authority: request.authority, - scopes: request.scopes, - claims: request.claims, - authenticationScheme: request.authenticationScheme, - resourceRequestMethod: request.resourceRequestMethod, - resourceRequestUri: request.resourceRequestUri, - shrClaims: request.shrClaims, - sshKid: request.sshKid, - }; - const reqTimestamp = nowSeconds(); - const response = await this.executePostToTokenEndpoint(endpoint, requestBody, headers, thumbprint, request.correlationId); - const responseHandler = new ResponseHandler(this.config.authOptions.clientId, this.cacheManager, this.cryptoUtils, this.logger, this.performanceClient, this.config.serializableCache, this.config.persistencePlugin); - responseHandler.validateTokenResponse(response.body, request.correlationId); - const tokenResponse = await responseHandler.handleServerTokenResponse(response.body, this.authority, reqTimestamp, request, ApiId.acquireTokenByOBO, undefined, userAssertionHash); - return tokenResponse; - } - /** - * generate a server request in accepable format - * @param request - developer provided CommonOnBehalfOfRequest - */ - async createTokenRequestBody(request) { - const parameters = new Map(); - addClientId(parameters, this.config.authOptions.clientId); - addScopes(parameters, request.scopes); - addGrantType(parameters, GrantType.JWT_BEARER); - addClientInfo(parameters); - addLibraryInfo(parameters, this.config.libraryInfo); - addApplicationTelemetry(parameters, this.config.telemetry.application); - addThrottling(parameters); - if (this.serverTelemetryManager) { - addServerTelemetry(parameters, this.serverTelemetryManager); - } - const correlationId = request.correlationId || - this.config.cryptoInterface.createNewGuid(); - addCorrelationId(parameters, correlationId); - addRequestTokenUse(parameters, ON_BEHALF_OF); - addOboAssertion(parameters, request.oboAssertion); - if (this.config.clientCredentials.clientSecret) { - addClientSecret(parameters, this.config.clientCredentials.clientSecret); - } - const clientAssertion = this.config.clientCredentials.clientAssertion; - if (clientAssertion) { - addClientAssertion(parameters, await getClientAssertion(clientAssertion.assertion, this.config.authOptions.clientId, request.resourceRequestUri)); - addClientAssertionType(parameters, clientAssertion.assertionType); - } - if (request.claims || - (this.config.authOptions.clientCapabilities && - this.config.authOptions.clientCapabilities.length > 0)) { - addClaims(parameters, request.claims, this.config.authOptions.clientCapabilities); - } - return mapToQueryString(parameters); - } +/* + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. + */ +/** + * On-Behalf-Of client + * @public + */ +class OnBehalfOfClient extends BaseClient { + constructor(configuration) { + super(configuration); + } + /** + * Public API to acquire tokens with on behalf of flow + * @param request - developer provided CommonOnBehalfOfRequest + */ + async acquireToken(request) { + this.scopeSet = new ScopeSet(request.scopes || []); + // generate the user_assertion_hash for OBOAssertion + this.userAssertionHash = await this.cryptoUtils.hashString(request.oboAssertion); + if (request.skipCache || request.claims) { + return this.executeTokenRequest(request, this.authority, this.userAssertionHash); + } + try { + return await this.getCachedAuthenticationResult(request); + } + catch (e) { + // Any failure falls back to interactive request, once we implement distributed cache, we plan to handle `createRefreshRequiredError` to refresh using the RT + return await this.executeTokenRequest(request, this.authority, this.userAssertionHash); + } + } + /** + * look up cache for tokens + * Find idtoken in the cache + * Find accessToken based on user assertion and account info in the cache + * Please note we are not yet supported OBO tokens refreshed with long lived RT. User will have to send a new assertion if the current access token expires + * This is to prevent security issues when the assertion changes over time, however, longlived RT helps retaining the session + * @param request - developer provided CommonOnBehalfOfRequest + */ + async getCachedAuthenticationResult(request) { + // look in the cache for the access_token which matches the incoming_assertion + const cachedAccessToken = this.readAccessTokenFromCacheForOBO(this.config.authOptions.clientId, request); + if (!cachedAccessToken) { + // Must refresh due to non-existent access_token. + this.serverTelemetryManager?.setCacheOutcome(CacheOutcome.NO_CACHED_ACCESS_TOKEN); + this.logger.info("SilentFlowClient:acquireCachedToken - No access token found in cache for the given properties.", request.correlationId); + throw ClientAuthError_createClientAuthError(tokenRefreshRequired); + } + else if (isTokenExpired(cachedAccessToken.expiresOn, this.config.systemOptions.tokenRenewalOffsetSeconds)) { + // Access token expired, will need to renewed + this.serverTelemetryManager?.setCacheOutcome(CacheOutcome.CACHED_ACCESS_TOKEN_EXPIRED); + this.logger.info(`OnbehalfofFlow:getCachedAuthenticationResult - Cached access token is expired or will expire within ${this.config.systemOptions.tokenRenewalOffsetSeconds} seconds.`, request.correlationId); + throw ClientAuthError_createClientAuthError(tokenRefreshRequired); + } + // fetch the idToken from cache + const cachedIdToken = this.readIdTokenFromCacheForOBO(cachedAccessToken.homeAccountId, request.correlationId); + let idTokenClaims; + let cachedAccount = null; + if (cachedIdToken) { + idTokenClaims = extractTokenClaims(cachedIdToken.secret, EncodingUtils.base64Decode); + const localAccountId = idTokenClaims.oid || idTokenClaims.sub; + const accountInfo = { + homeAccountId: cachedIdToken.homeAccountId, + environment: cachedIdToken.environment, + tenantId: cachedIdToken.realm, + username: "", + localAccountId: localAccountId || "", + }; + cachedAccount = this.cacheManager.getAccount(this.cacheManager.generateAccountKey(accountInfo), request.correlationId); + } + // increment telemetry cache hit counter + if (this.config.serverTelemetryManager) { + this.config.serverTelemetryManager.incrementCacheHits(); + } + return ResponseHandler.generateAuthenticationResult(this.cryptoUtils, this.authority, { + account: cachedAccount, + accessToken: cachedAccessToken, + idToken: cachedIdToken, + refreshToken: null, + appMetadata: null, + }, true, request, this.performanceClient, idTokenClaims); + } + /** + * read idtoken from cache, this is a specific implementation for OBO as the requirements differ from a generic lookup in the cacheManager + * Certain use cases of OBO flow do not expect an idToken in the cache/or from the service + * @param atHomeAccountId - account id + */ + readIdTokenFromCacheForOBO(atHomeAccountId, correlationId) { + const idTokenFilter = { + homeAccountId: atHomeAccountId, + environment: this.authority.canonicalAuthorityUrlComponents.HostNameAndPort, + credentialType: CredentialType.ID_TOKEN, + clientId: this.config.authOptions.clientId, + realm: this.authority.tenant, + }; + const idTokenMap = this.cacheManager.getIdTokensByFilter(idTokenFilter, correlationId); + // When acquiring a token on behalf of an application, there might not be an id token in the cache + if (Object.values(idTokenMap).length < 1) { + return null; + } + return Object.values(idTokenMap)[0]; + } + /** + * Fetches the cached access token based on incoming assertion + * @param clientId - client id + * @param request - developer provided CommonOnBehalfOfRequest + */ + readAccessTokenFromCacheForOBO(clientId, request) { + const authScheme = request.authenticationScheme || + AuthenticationScheme.BEARER; + /* + * Distinguish between Bearer and PoP/SSH token cache types + * Cast to lowercase to handle "bearer" from ADFS + */ + const credentialType = authScheme && + authScheme.toLowerCase() !== + AuthenticationScheme.BEARER.toLowerCase() + ? CredentialType.ACCESS_TOKEN_WITH_AUTH_SCHEME + : CredentialType.ACCESS_TOKEN; + const accessTokenFilter = { + credentialType: credentialType, + clientId, + target: ScopeSet.createSearchScopes(this.scopeSet.asArray()), + tokenType: authScheme, + keyId: request.sshKid, + userAssertionHash: this.userAssertionHash, + }; + const accessTokens = this.cacheManager.getAccessTokensByFilter(accessTokenFilter, request.correlationId); + const numAccessTokens = accessTokens.length; + if (numAccessTokens < 1) { + return null; + } + else if (numAccessTokens > 1) { + throw ClientAuthError_createClientAuthError(multipleMatchingTokens); + } + return accessTokens[0]; + } + /** + * Make a network call to the server requesting credentials + * @param request - developer provided CommonOnBehalfOfRequest + * @param authority - authority object + */ + async executeTokenRequest(request, authority, userAssertionHash) { + const queryParametersString = this.createTokenQueryParameters(request); + const endpoint = UrlString.appendQueryString(authority.tokenEndpoint, queryParametersString); + const requestBody = await this.createTokenRequestBody(request); + const headers = this.createTokenRequestHeaders(); + const thumbprint = { + clientId: this.config.authOptions.clientId, + authority: request.authority, + scopes: request.scopes, + claims: request.claims, + authenticationScheme: request.authenticationScheme, + resourceRequestMethod: request.resourceRequestMethod, + resourceRequestUri: request.resourceRequestUri, + shrClaims: request.shrClaims, + sshKid: request.sshKid, + }; + const reqTimestamp = nowSeconds(); + const response = await this.executePostToTokenEndpoint(endpoint, requestBody, headers, thumbprint, request.correlationId); + const responseHandler = new ResponseHandler(this.config.authOptions.clientId, this.cacheManager, this.cryptoUtils, this.logger, this.performanceClient, this.config.serializableCache, this.config.persistencePlugin); + responseHandler.validateTokenResponse(response.body, request.correlationId); + const tokenResponse = await responseHandler.handleServerTokenResponse(response.body, this.authority, reqTimestamp, request, ApiId.acquireTokenByOBO, undefined, userAssertionHash); + return tokenResponse; + } + /** + * generate a server request in accepable format + * @param request - developer provided CommonOnBehalfOfRequest + */ + async createTokenRequestBody(request) { + const parameters = new Map(); + addClientId(parameters, this.config.authOptions.clientId); + addScopes(parameters, request.scopes); + addGrantType(parameters, GrantType.JWT_BEARER); + addClientInfo(parameters); + addLibraryInfo(parameters, this.config.libraryInfo); + addApplicationTelemetry(parameters, this.config.telemetry.application); + addThrottling(parameters); + if (this.serverTelemetryManager) { + addServerTelemetry(parameters, this.serverTelemetryManager); + } + const correlationId = request.correlationId || + this.config.cryptoInterface.createNewGuid(); + addCorrelationId(parameters, correlationId); + addRequestTokenUse(parameters, ON_BEHALF_OF); + addOboAssertion(parameters, request.oboAssertion); + if (this.config.clientCredentials.clientSecret) { + addClientSecret(parameters, this.config.clientCredentials.clientSecret); + } + const clientAssertion = this.config.clientCredentials.clientAssertion; + if (clientAssertion) { + addClientAssertion(parameters, await getClientAssertion(clientAssertion.assertion, this.config.authOptions.clientId, request.resourceRequestUri)); + addClientAssertionType(parameters, clientAssertion.assertionType); + } + if (request.claims || + (this.config.authOptions.clientCapabilities && + this.config.authOptions.clientCapabilities.length > 0)) { + addClaims(parameters, request.claims, this.config.authOptions.clientCapabilities); + } + return mapToQueryString(parameters); + } } @@ -56420,187 +56420,187 @@ class OnBehalfOfClient extends BaseClient { -/* - * Copyright (c) Microsoft Corporation. All rights reserved. - * Licensed under the MIT License. - */ -// AADAuthorityConstants -/** - * This class is to be used to acquire tokens for confidential client applications (webApp, webAPI). Confidential client applications - * will configure application secrets, client certificates/assertions as applicable - * @public - */ -class ConfidentialClientApplication extends ClientApplication { - /** - * Constructor for the ConfidentialClientApplication - * - * Required attributes in the Configuration object are: - * - clientID: the application ID of your application. You can obtain one by registering your application with our application registration portal - * - authority: the authority URL for your application. - * - client credential: Must set either client secret, certificate, or assertion for confidential clients. You can obtain a client secret from the application registration portal. - * - * In Azure AD, authority is a URL indicating of the form https://login.microsoftonline.com/\{Enter_the_Tenant_Info_Here\}. - * If your application supports Accounts in one organizational directory, replace "Enter_the_Tenant_Info_Here" value with the Tenant Id or Tenant name (for example, contoso.microsoft.com). - * If your application supports Accounts in any organizational directory, replace "Enter_the_Tenant_Info_Here" value with organizations. - * If your application supports Accounts in any organizational directory and personal Microsoft accounts, replace "Enter_the_Tenant_Info_Here" value with common. - * To restrict support to Personal Microsoft accounts only, replace "Enter_the_Tenant_Info_Here" value with consumers. - * - * In Azure B2C, authority is of the form https://\{instance\}/tfp/\{tenant\}/\{policyName\}/ - * Full B2C functionality will be available in this library in future versions. - * - * @param Configuration - configuration object for the MSAL ConfidentialClientApplication instance - */ - constructor(configuration) { - super(configuration); - const clientSecretNotEmpty = !!this.config.auth.clientSecret; - const clientAssertionNotEmpty = !!this.config.auth.clientAssertion; - const certificateNotEmpty = (!!this.config.auth.clientCertificate?.thumbprint || - !!this.config.auth.clientCertificate?.thumbprintSha256) && - !!this.config.auth.clientCertificate?.privateKey; - /* - * If app developer configures this callback, they don't need a credential - * i.e. AzureSDK can get token from Managed Identity without a cert / secret - */ - if (this.appTokenProvider) { - return; - } - // Check that at most one credential is set on the application - if ((clientSecretNotEmpty && clientAssertionNotEmpty) || - (clientAssertionNotEmpty && certificateNotEmpty) || - (clientSecretNotEmpty && certificateNotEmpty)) { - throw ClientAuthError_createClientAuthError(invalidClientCredential); - } - if (this.config.auth.clientSecret) { - this.clientSecret = this.config.auth.clientSecret; - return; - } - if (this.config.auth.clientAssertion) { - this.developerProvidedClientAssertion = - this.config.auth.clientAssertion; - return; - } - if (!certificateNotEmpty) { - throw ClientAuthError_createClientAuthError(invalidClientCredential); - } - else { - this.clientAssertion = !!this.config.auth.clientCertificate - .thumbprintSha256 - ? ClientAssertion.fromCertificateWithSha256Thumbprint(this.config.auth.clientCertificate.thumbprintSha256, this.config.auth.clientCertificate.privateKey, this.config.auth.clientCertificate.x5c) - : ClientAssertion.fromCertificate( - // guaranteed to be a string, due to prior error checking in this function - this.config.auth.clientCertificate.thumbprint, this.config.auth.clientCertificate.privateKey, this.config.auth.clientCertificate.x5c); - } - this.appTokenProvider = undefined; - } - /** - * This extensibility point only works for the client_credential flow, i.e. acquireTokenByClientCredential and - * is meant for Azure SDK to enhance Managed Identity support. - * - * @param IAppTokenProvider - Extensibility interface, which allows the app developer to return a token from a custom source. - */ - SetAppTokenProvider(provider) { - this.appTokenProvider = provider; - } - /** - * Acquires tokens from the authority for the application (not for an end user). - */ - async acquireTokenByClientCredential(request) { - this.logger.info("acquireTokenByClientCredential called", request.correlationId || ""); - // If there is a client assertion present in the request, it overrides the one present in the client configuration - let clientAssertion; - if (request.clientAssertion) { - clientAssertion = { - assertion: await getClientAssertion(request.clientAssertion, this.config.auth.clientId - // tokenEndpoint will be undefined. resourceRequestUri is omitted in ClientCredentialRequest - ), - assertionType: Constants_Constants.JWT_BEARER_ASSERTION_TYPE, - }; - } - const baseRequest = await this.initializeBaseRequest(request); - // valid base request should not contain oidc scopes in this grant type - const validBaseRequest = { - ...baseRequest, - scopes: baseRequest.scopes.filter((scope) => !OIDC_DEFAULT_SCOPES.includes(scope)), - }; - const validRequest = { - ...request, - ...validBaseRequest, - clientAssertion, - }; - /* - * valid request should not have "common" or "organizations" in lieu of the tenant_id in the authority in the auth configuration - * example authority: "https://login.microsoftonline.com/TenantId", - */ - const authority = new UrlString(validRequest.authority); - const tenantId = authority.getUrlComponents().PathSegments[0]; - if (Object.values(AADAuthority).includes(tenantId)) { - throw ClientAuthError_createClientAuthError(missingTenantIdError); - } - /* - * if this env variable is set, and the developer provided region isn't defined and isn't "DisableMsalForceRegion", - * MSAL shall opt-in to ESTS-R with the value of this variable - */ - const ENV_MSAL_FORCE_REGION = process.env[MSAL_FORCE_REGION]; - let region; - if (validRequest.azureRegion !== "DisableMsalForceRegion") { - if (!validRequest.azureRegion && ENV_MSAL_FORCE_REGION) { - region = ENV_MSAL_FORCE_REGION; - } - else { - region = validRequest.azureRegion; - } - } - const azureRegionConfiguration = { - azureRegion: region, - environmentRegion: process.env[REGION_ENVIRONMENT_VARIABLE], - }; - const serverTelemetryManager = this.initializeServerTelemetryManager(ApiId.acquireTokenByClientCredential, validRequest.correlationId, validRequest.skipCache); - try { - const discoveredAuthority = await this.createAuthority(validRequest.authority, validRequest.correlationId, azureRegionConfiguration, request.azureCloudOptions); - const clientCredentialConfig = await this.buildOauthClientConfiguration(discoveredAuthority, validRequest.correlationId, "", serverTelemetryManager); - const clientCredentialClient = new ClientCredentialClient_ClientCredentialClient(clientCredentialConfig, this.appTokenProvider); - this.logger.verbose("Client credential client created", validRequest.correlationId); - return await clientCredentialClient.acquireToken(validRequest); - } - catch (e) { - if (e instanceof AuthError) { - e.setCorrelationId(validRequest.correlationId); - } - serverTelemetryManager.cacheFailedRequest(e); - throw e; - } - } - /** - * Acquires tokens from the authority for the application. - * - * Used in scenarios where the current app is a middle-tier service which was called with a token - * representing an end user. The current app can use the token (oboAssertion) to request another - * token to access downstream web API, on behalf of that user. - * - * The current middle-tier app has no user interaction to obtain consent. - * See how to gain consent upfront for your middle-tier app from this article. - * https://docs.microsoft.com/en-us/azure/active-directory/develop/v2-oauth2-on-behalf-of-flow#gaining-consent-for-the-middle-tier-application - */ - async acquireTokenOnBehalfOf(request) { - this.logger.info("acquireTokenOnBehalfOf called", request.correlationId || ""); - const validRequest = { - ...request, - ...(await this.initializeBaseRequest(request)), - }; - try { - const discoveredAuthority = await this.createAuthority(validRequest.authority, validRequest.correlationId, undefined, request.azureCloudOptions); - const onBehalfOfConfig = await this.buildOauthClientConfiguration(discoveredAuthority, validRequest.correlationId, "", undefined); - const oboClient = new OnBehalfOfClient(onBehalfOfConfig); - this.logger.verbose("On behalf of client created", validRequest.correlationId); - return await oboClient.acquireToken(validRequest); - } - catch (e) { - if (e instanceof AuthError) { - e.setCorrelationId(validRequest.correlationId); - } - throw e; - } - } +/* + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. + */ +// AADAuthorityConstants +/** + * This class is to be used to acquire tokens for confidential client applications (webApp, webAPI). Confidential client applications + * will configure application secrets, client certificates/assertions as applicable + * @public + */ +class ConfidentialClientApplication extends ClientApplication { + /** + * Constructor for the ConfidentialClientApplication + * + * Required attributes in the Configuration object are: + * - clientID: the application ID of your application. You can obtain one by registering your application with our application registration portal + * - authority: the authority URL for your application. + * - client credential: Must set either client secret, certificate, or assertion for confidential clients. You can obtain a client secret from the application registration portal. + * + * In Azure AD, authority is a URL indicating of the form https://login.microsoftonline.com/\{Enter_the_Tenant_Info_Here\}. + * If your application supports Accounts in one organizational directory, replace "Enter_the_Tenant_Info_Here" value with the Tenant Id or Tenant name (for example, contoso.microsoft.com). + * If your application supports Accounts in any organizational directory, replace "Enter_the_Tenant_Info_Here" value with organizations. + * If your application supports Accounts in any organizational directory and personal Microsoft accounts, replace "Enter_the_Tenant_Info_Here" value with common. + * To restrict support to Personal Microsoft accounts only, replace "Enter_the_Tenant_Info_Here" value with consumers. + * + * In Azure B2C, authority is of the form https://\{instance\}/tfp/\{tenant\}/\{policyName\}/ + * Full B2C functionality will be available in this library in future versions. + * + * @param Configuration - configuration object for the MSAL ConfidentialClientApplication instance + */ + constructor(configuration) { + super(configuration); + const clientSecretNotEmpty = !!this.config.auth.clientSecret; + const clientAssertionNotEmpty = !!this.config.auth.clientAssertion; + const certificateNotEmpty = (!!this.config.auth.clientCertificate?.thumbprint || + !!this.config.auth.clientCertificate?.thumbprintSha256) && + !!this.config.auth.clientCertificate?.privateKey; + /* + * If app developer configures this callback, they don't need a credential + * i.e. AzureSDK can get token from Managed Identity without a cert / secret + */ + if (this.appTokenProvider) { + return; + } + // Check that at most one credential is set on the application + if ((clientSecretNotEmpty && clientAssertionNotEmpty) || + (clientAssertionNotEmpty && certificateNotEmpty) || + (clientSecretNotEmpty && certificateNotEmpty)) { + throw ClientAuthError_createClientAuthError(invalidClientCredential); + } + if (this.config.auth.clientSecret) { + this.clientSecret = this.config.auth.clientSecret; + return; + } + if (this.config.auth.clientAssertion) { + this.developerProvidedClientAssertion = + this.config.auth.clientAssertion; + return; + } + if (!certificateNotEmpty) { + throw ClientAuthError_createClientAuthError(invalidClientCredential); + } + else { + this.clientAssertion = !!this.config.auth.clientCertificate + .thumbprintSha256 + ? ClientAssertion.fromCertificateWithSha256Thumbprint(this.config.auth.clientCertificate.thumbprintSha256, this.config.auth.clientCertificate.privateKey, this.config.auth.clientCertificate.x5c) + : ClientAssertion.fromCertificate( + // guaranteed to be a string, due to prior error checking in this function + this.config.auth.clientCertificate.thumbprint, this.config.auth.clientCertificate.privateKey, this.config.auth.clientCertificate.x5c); + } + this.appTokenProvider = undefined; + } + /** + * This extensibility point only works for the client_credential flow, i.e. acquireTokenByClientCredential and + * is meant for Azure SDK to enhance Managed Identity support. + * + * @param IAppTokenProvider - Extensibility interface, which allows the app developer to return a token from a custom source. + */ + SetAppTokenProvider(provider) { + this.appTokenProvider = provider; + } + /** + * Acquires tokens from the authority for the application (not for an end user). + */ + async acquireTokenByClientCredential(request) { + this.logger.info("acquireTokenByClientCredential called", request.correlationId || ""); + // If there is a client assertion present in the request, it overrides the one present in the client configuration + let clientAssertion; + if (request.clientAssertion) { + clientAssertion = { + assertion: await getClientAssertion(request.clientAssertion, this.config.auth.clientId + // tokenEndpoint will be undefined. resourceRequestUri is omitted in ClientCredentialRequest + ), + assertionType: Constants_Constants.JWT_BEARER_ASSERTION_TYPE, + }; + } + const baseRequest = await this.initializeBaseRequest(request); + // valid base request should not contain oidc scopes in this grant type + const validBaseRequest = { + ...baseRequest, + scopes: baseRequest.scopes.filter((scope) => !OIDC_DEFAULT_SCOPES.includes(scope)), + }; + const validRequest = { + ...request, + ...validBaseRequest, + clientAssertion, + }; + /* + * valid request should not have "common" or "organizations" in lieu of the tenant_id in the authority in the auth configuration + * example authority: "https://login.microsoftonline.com/TenantId", + */ + const authority = new UrlString(validRequest.authority); + const tenantId = authority.getUrlComponents().PathSegments[0]; + if (Object.values(AADAuthority).includes(tenantId)) { + throw ClientAuthError_createClientAuthError(missingTenantIdError); + } + /* + * if this env variable is set, and the developer provided region isn't defined and isn't "DisableMsalForceRegion", + * MSAL shall opt-in to ESTS-R with the value of this variable + */ + const ENV_MSAL_FORCE_REGION = process.env[MSAL_FORCE_REGION]; + let region; + if (validRequest.azureRegion !== "DisableMsalForceRegion") { + if (!validRequest.azureRegion && ENV_MSAL_FORCE_REGION) { + region = ENV_MSAL_FORCE_REGION; + } + else { + region = validRequest.azureRegion; + } + } + const azureRegionConfiguration = { + azureRegion: region, + environmentRegion: process.env[REGION_ENVIRONMENT_VARIABLE], + }; + const serverTelemetryManager = this.initializeServerTelemetryManager(ApiId.acquireTokenByClientCredential, validRequest.correlationId, validRequest.skipCache); + try { + const discoveredAuthority = await this.createAuthority(validRequest.authority, validRequest.correlationId, azureRegionConfiguration, request.azureCloudOptions); + const clientCredentialConfig = await this.buildOauthClientConfiguration(discoveredAuthority, validRequest.correlationId, "", serverTelemetryManager); + const clientCredentialClient = new ClientCredentialClient_ClientCredentialClient(clientCredentialConfig, this.appTokenProvider); + this.logger.verbose("Client credential client created", validRequest.correlationId); + return await clientCredentialClient.acquireToken(validRequest); + } + catch (e) { + if (e instanceof AuthError) { + e.setCorrelationId(validRequest.correlationId); + } + serverTelemetryManager.cacheFailedRequest(e); + throw e; + } + } + /** + * Acquires tokens from the authority for the application. + * + * Used in scenarios where the current app is a middle-tier service which was called with a token + * representing an end user. The current app can use the token (oboAssertion) to request another + * token to access downstream web API, on behalf of that user. + * + * The current middle-tier app has no user interaction to obtain consent. + * See how to gain consent upfront for your middle-tier app from this article. + * https://docs.microsoft.com/en-us/azure/active-directory/develop/v2-oauth2-on-behalf-of-flow#gaining-consent-for-the-middle-tier-application + */ + async acquireTokenOnBehalfOf(request) { + this.logger.info("acquireTokenOnBehalfOf called", request.correlationId || ""); + const validRequest = { + ...request, + ...(await this.initializeBaseRequest(request)), + }; + try { + const discoveredAuthority = await this.createAuthority(validRequest.authority, validRequest.correlationId, undefined, request.azureCloudOptions); + const onBehalfOfConfig = await this.buildOauthClientConfiguration(discoveredAuthority, validRequest.correlationId, "", undefined); + const oboClient = new OnBehalfOfClient(onBehalfOfConfig); + this.logger.verbose("On behalf of client created", validRequest.correlationId); + return await oboClient.acquireToken(validRequest); + } + catch (e) { + if (e instanceof AuthError) { + e.setCorrelationId(validRequest.correlationId); + } + throw e; + } + } } @@ -56609,23 +56609,23 @@ class ConfidentialClientApplication extends ClientApplication { ;// CONCATENATED MODULE: ./node_modules/@azure/msal-node/dist/utils/TimeUtils.mjs /*! @azure/msal-node v5.1.0 2026-03-13 */ -/* - * Copyright (c) Microsoft Corporation. All rights reserved. - * Licensed under the MIT License. - */ -/** - * @internal - * Checks if a given date string is in ISO 8601 format. - * - * @param dateString - The date string to be checked. - * @returns boolean - Returns true if the date string is in ISO 8601 format, otherwise false. - */ -function isIso8601(dateString) { - if (typeof dateString !== "string") { - return false; - } - const date = new Date(dateString); - return !isNaN(date.getTime()) && date.toISOString() === dateString; +/* + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. + */ +/** + * @internal + * Checks if a given date string is in ISO 8601 format. + * + * @param dateString - The date string to be checked. + * @returns boolean - Returns true if the date string is in ISO 8601 format, otherwise false. + */ +function isIso8601(dateString) { + if (typeof dateString !== "string") { + return false; + } + const date = new Date(dateString); + return !isNaN(date.getTime()) && date.toISOString() === dateString; } @@ -56637,43 +56637,43 @@ function isIso8601(dateString) { -/* - * Copyright (c) Microsoft Corporation. All rights reserved. - * Licensed under the MIT License. - */ -class HttpClientWithRetries { - constructor(httpClientNoRetries, retryPolicy, logger) { - this.httpClientNoRetries = httpClientNoRetries; - this.retryPolicy = retryPolicy; - this.logger = logger; - } - async sendNetworkRequestAsyncHelper(httpMethod, url, options) { - if (httpMethod === Constants_HttpMethod.GET) { - return this.httpClientNoRetries.sendGetRequestAsync(url, options); - } - else { - return this.httpClientNoRetries.sendPostRequestAsync(url, options); - } - } - async sendNetworkRequestAsync(httpMethod, url, options) { - // the underlying network module (custom or HttpClient) will make the call - let response = await this.sendNetworkRequestAsyncHelper(httpMethod, url, options); - if ("isNewRequest" in this.retryPolicy) { - this.retryPolicy.isNewRequest = true; - } - let currentRetry = 0; - while (await this.retryPolicy.pauseForRetry(response.status, currentRetry, this.logger, response.headers[HeaderNames.RETRY_AFTER])) { - response = await this.sendNetworkRequestAsyncHelper(httpMethod, url, options); - currentRetry++; - } - return response; - } - async sendGetRequestAsync(url, options) { - return this.sendNetworkRequestAsync(Constants_HttpMethod.GET, url, options); - } - async sendPostRequestAsync(url, options) { - return this.sendNetworkRequestAsync(Constants_HttpMethod.POST, url, options); - } +/* + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. + */ +class HttpClientWithRetries { + constructor(httpClientNoRetries, retryPolicy, logger) { + this.httpClientNoRetries = httpClientNoRetries; + this.retryPolicy = retryPolicy; + this.logger = logger; + } + async sendNetworkRequestAsyncHelper(httpMethod, url, options) { + if (httpMethod === Constants_HttpMethod.GET) { + return this.httpClientNoRetries.sendGetRequestAsync(url, options); + } + else { + return this.httpClientNoRetries.sendPostRequestAsync(url, options); + } + } + async sendNetworkRequestAsync(httpMethod, url, options) { + // the underlying network module (custom or HttpClient) will make the call + let response = await this.sendNetworkRequestAsyncHelper(httpMethod, url, options); + if ("isNewRequest" in this.retryPolicy) { + this.retryPolicy.isNewRequest = true; + } + let currentRetry = 0; + while (await this.retryPolicy.pauseForRetry(response.status, currentRetry, this.logger, response.headers[HeaderNames.RETRY_AFTER])) { + response = await this.sendNetworkRequestAsyncHelper(httpMethod, url, options); + currentRetry++; + } + return response; + } + async sendGetRequestAsync(url, options) { + return this.sendNetworkRequestAsync(Constants_HttpMethod.GET, url, options); + } + async sendPostRequestAsync(url, options) { + return this.sendNetworkRequestAsync(Constants_HttpMethod.POST, url, options); + } } @@ -56689,238 +56689,238 @@ class HttpClientWithRetries { -/* - * Copyright (c) Microsoft Corporation. All rights reserved. - * Licensed under the MIT License. - */ -/** - * Managed Identity User Assigned Id Query Parameter Names - */ -const ManagedIdentityUserAssignedIdQueryParameterNames = { - MANAGED_IDENTITY_CLIENT_ID_2017: "clientid", - MANAGED_IDENTITY_CLIENT_ID: "client_id", - MANAGED_IDENTITY_OBJECT_ID: "object_id", - MANAGED_IDENTITY_RESOURCE_ID_IMDS: "msi_res_id", - MANAGED_IDENTITY_RESOURCE_ID_NON_IMDS: "mi_res_id", -}; -/** - * Base class for all Managed Identity sources. Provides common functionality for - * authenticating with Azure Managed Identity endpoints across different Azure services - * including IMDS, App Service, Azure Arc, Service Fabric, Cloud Shell, and Machine Learning. - * - * This abstract class handles token acquisition, response processing, and network communication - * while allowing concrete implementations to define source-specific request creation logic. - */ -class BaseManagedIdentitySource { - /** - * Creates an instance of BaseManagedIdentitySource. - * - * @param logger - Logger instance for diagnostic information - * @param nodeStorage - Storage interface for caching tokens - * @param networkClient - Network client for making HTTP requests - * @param cryptoProvider - Cryptographic provider for token operations - * @param disableInternalRetries - Whether to disable automatic retry logic - */ - constructor(logger, nodeStorage, networkClient, cryptoProvider, disableInternalRetries) { - this.logger = logger; - this.nodeStorage = nodeStorage; - this.networkClient = networkClient; - this.cryptoProvider = cryptoProvider; - this.disableInternalRetries = disableInternalRetries; - } - /** - * Processes the network response and converts it to a standardized server token response. - * This async version allows for source-specific response processing logic while maintaining - * backward compatibility with the synchronous version. - * - * @param response - The network response containing the managed identity token - * @param _networkClient - Network client used for the request (unused in base implementation) - * @param _networkRequest - The original network request parameters (unused in base implementation) - * @param _networkRequestOptions - The network request options (unused in base implementation) - * - * @returns Promise resolving to a standardized server authorization token response - */ - async getServerTokenResponseAsync(response, - // eslint-disable-next-line @typescript-eslint/no-unused-vars - _networkClient, - // eslint-disable-next-line @typescript-eslint/no-unused-vars - _networkRequest, - // eslint-disable-next-line @typescript-eslint/no-unused-vars - _networkRequestOptions) { - return this.getServerTokenResponse(response); - } - /** - * Converts a managed identity token response to a standardized server authorization token response. - * Handles time format conversion, expiration calculation, and error mapping to ensure - * compatibility with the MSAL response handling pipeline. - * - * @param response - The network response containing the managed identity token - * - * @returns Standardized server authorization token response with normalized fields - */ - getServerTokenResponse(response) { - let refreshIn, expiresIn; - if (response.body.expires_on) { - // if the expires_on field in the response body is a string and in ISO 8601 format, convert it to a Unix timestamp (seconds since epoch) - if (isIso8601(response.body.expires_on)) { - response.body.expires_on = - new Date(response.body.expires_on).getTime() / 1000; - } - expiresIn = response.body.expires_on - nowSeconds(); - // compute refresh_in as 1/2 of expires_in, but only if expires_in > 2h - if (expiresIn > 2 * 3600) { - refreshIn = expiresIn / 2; - } - } - const serverTokenResponse = { - status: response.status, - // success - access_token: response.body.access_token, - expires_in: expiresIn, - scope: response.body.resource, - token_type: response.body.token_type, - refresh_in: refreshIn, - // error - correlation_id: response.body.correlation_id || response.body.correlationId, - error: typeof response.body.error === "string" - ? response.body.error - : response.body.error?.code, - error_description: response.body.message || - (typeof response.body.error === "string" - ? response.body.error_description - : response.body.error?.message), - error_codes: response.body.error_codes, - timestamp: response.body.timestamp, - trace_id: response.body.trace_id, - }; - return serverTokenResponse; - } - /** - * Acquires an access token using the managed identity endpoint for the specified resource. - * This is the primary method for token acquisition, handling the complete flow from - * request creation through response processing and token caching. - * - * @param managedIdentityRequest - The managed identity request containing resource and optional parameters - * @param managedIdentityId - The managed identity configuration (system or user-assigned) - * @param fakeAuthority - Authority instance used for token caching (managed identity uses a placeholder authority) - * @param refreshAccessToken - Whether this is a token refresh operation - * - * @returns Promise resolving to an authentication result containing the access token and metadata - * - * @throws {AuthError} When network requests fail or token validation fails - * @throws {ClientAuthError} When network errors occur during the request - */ - async acquireTokenWithManagedIdentity(managedIdentityRequest, managedIdentityId, fakeAuthority, refreshAccessToken) { - const networkRequest = this.createRequest(managedIdentityRequest.resource, managedIdentityId); - if (managedIdentityRequest.revokedTokenSha256Hash) { - this.logger.info(`[Managed Identity] The following claims are present in the request: ${managedIdentityRequest.claims}`, ""); - networkRequest.queryParameters[ManagedIdentityQueryParameters.SHA256_TOKEN_TO_REFRESH] = managedIdentityRequest.revokedTokenSha256Hash; - } - if (managedIdentityRequest.clientCapabilities?.length) { - const clientCapabilities = managedIdentityRequest.clientCapabilities.toString(); - this.logger.info(`[Managed Identity] The following client capabilities are present in the request: ${clientCapabilities}`, ""); - networkRequest.queryParameters[ManagedIdentityQueryParameters.XMS_CC] = clientCapabilities; - } - const headers = networkRequest.headers; - headers[HeaderNames.CONTENT_TYPE] = - URL_FORM_CONTENT_TYPE; - const networkRequestOptions = { headers }; - if (Object.keys(networkRequest.bodyParameters).length) { - networkRequestOptions.body = - networkRequest.computeParametersBodyString(); - } - /** - * Initializes the network client helper based on the retry policy configuration. - * If internal retries are disabled, it uses the provided network client directly. - * Otherwise, it wraps the network client with an HTTP client that supports retries. - */ - const networkClientHelper = this.disableInternalRetries - ? this.networkClient - : new HttpClientWithRetries(this.networkClient, networkRequest.retryPolicy, this.logger); - const reqTimestamp = nowSeconds(); - let response; - try { - // Sources that send POST requests: Cloud Shell - if (networkRequest.httpMethod === Constants_HttpMethod.POST) { - response = - await networkClientHelper.sendPostRequestAsync(networkRequest.computeUri(), networkRequestOptions); - // Sources that send GET requests: App Service, Azure Arc, IMDS, Service Fabric - } - else { - response = - await networkClientHelper.sendGetRequestAsync(networkRequest.computeUri(), networkRequestOptions); - } - } - catch (error) { - if (error instanceof AuthError) { - throw error; - } - else { - throw ClientAuthError_createClientAuthError(networkError); - } - } - const responseHandler = new ResponseHandler(managedIdentityId.id, this.nodeStorage, this.cryptoProvider, this.logger, new StubPerformanceClient_StubPerformanceClient(), null, null); - const serverTokenResponse = await this.getServerTokenResponseAsync(response, networkClientHelper, networkRequest, networkRequestOptions); - responseHandler.validateTokenResponse(serverTokenResponse, serverTokenResponse.correlation_id || "", refreshAccessToken); - // caches the token - return responseHandler.handleServerTokenResponse(serverTokenResponse, fakeAuthority, reqTimestamp, managedIdentityRequest, ApiId.acquireTokenWithManagedIdentity); - } - /** - * Determines the appropriate query parameter name for user-assigned managed identity - * based on the identity type, API version, and endpoint characteristics. - * Different Azure services and API versions use different parameter names for the same identity types. - * - * @param managedIdentityIdType - The type of user-assigned managed identity (client ID, object ID, or resource ID) - * @param isImds - Whether the request is being made to the IMDS (Instance Metadata Service) endpoint - * @param usesApi2017 - Whether the endpoint uses the 2017-09-01 API version (affects client ID parameter name) - * - * @returns The correct query parameter name for the specified identity type and endpoint - * - * @throws {ManagedIdentityError} When an invalid managed identity ID type is provided - */ - getManagedIdentityUserAssignedIdQueryParameterKey(managedIdentityIdType, isImds, usesApi2017) { - switch (managedIdentityIdType) { - case Constants_ManagedIdentityIdType.USER_ASSIGNED_CLIENT_ID: - this.logger.info(`[Managed Identity] [API version ${usesApi2017 ? "2017+" : "2019+"}] Adding user assigned client id to the request.`, ""); - // The Machine Learning source uses the 2017-09-01 API version, which uses "clientid" instead of "client_id" - return usesApi2017 - ? ManagedIdentityUserAssignedIdQueryParameterNames.MANAGED_IDENTITY_CLIENT_ID_2017 - : ManagedIdentityUserAssignedIdQueryParameterNames.MANAGED_IDENTITY_CLIENT_ID; - case Constants_ManagedIdentityIdType.USER_ASSIGNED_RESOURCE_ID: - this.logger.info("[Managed Identity] Adding user assigned resource id to the request.", ""); - return isImds - ? ManagedIdentityUserAssignedIdQueryParameterNames.MANAGED_IDENTITY_RESOURCE_ID_IMDS - : ManagedIdentityUserAssignedIdQueryParameterNames.MANAGED_IDENTITY_RESOURCE_ID_NON_IMDS; - case Constants_ManagedIdentityIdType.USER_ASSIGNED_OBJECT_ID: - this.logger.info("[Managed Identity] Adding user assigned object id to the request.", ""); - return ManagedIdentityUserAssignedIdQueryParameterNames.MANAGED_IDENTITY_OBJECT_ID; - default: - throw ManagedIdentityError_createManagedIdentityError(ManagedIdentityErrorCodes_invalidManagedIdentityIdType); - } - } -} -/** - * Validates and normalizes an environment variable containing a URL string. - * This static utility method ensures that environment variables used for managed identity - * endpoints contain properly formatted URLs and provides informative error messages when validation fails. - * - * @param envVariableStringName - The name of the environment variable being validated (for error reporting) - * @param envVariable - The environment variable value containing the URL string - * @param sourceName - The name of the managed identity source (for error reporting) - * @param logger - Logger instance for diagnostic information - * - * @returns The validated and normalized URL string - * - * @throws {ManagedIdentityError} When the environment variable contains a malformed URL - */ -BaseManagedIdentitySource.getValidatedEnvVariableUrlString = (envVariableStringName, envVariable, sourceName, logger) => { - try { - return new UrlString(envVariable).urlString; - } - catch (error) { - logger.info(`[Managed Identity] ${sourceName} managed identity is unavailable because the '${envVariableStringName}' environment variable is malformed.`, ""); - throw ManagedIdentityError_createManagedIdentityError(MsiEnvironmentVariableUrlMalformedErrorCodes[envVariableStringName]); - } +/* + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. + */ +/** + * Managed Identity User Assigned Id Query Parameter Names + */ +const ManagedIdentityUserAssignedIdQueryParameterNames = { + MANAGED_IDENTITY_CLIENT_ID_2017: "clientid", + MANAGED_IDENTITY_CLIENT_ID: "client_id", + MANAGED_IDENTITY_OBJECT_ID: "object_id", + MANAGED_IDENTITY_RESOURCE_ID_IMDS: "msi_res_id", + MANAGED_IDENTITY_RESOURCE_ID_NON_IMDS: "mi_res_id", +}; +/** + * Base class for all Managed Identity sources. Provides common functionality for + * authenticating with Azure Managed Identity endpoints across different Azure services + * including IMDS, App Service, Azure Arc, Service Fabric, Cloud Shell, and Machine Learning. + * + * This abstract class handles token acquisition, response processing, and network communication + * while allowing concrete implementations to define source-specific request creation logic. + */ +class BaseManagedIdentitySource { + /** + * Creates an instance of BaseManagedIdentitySource. + * + * @param logger - Logger instance for diagnostic information + * @param nodeStorage - Storage interface for caching tokens + * @param networkClient - Network client for making HTTP requests + * @param cryptoProvider - Cryptographic provider for token operations + * @param disableInternalRetries - Whether to disable automatic retry logic + */ + constructor(logger, nodeStorage, networkClient, cryptoProvider, disableInternalRetries) { + this.logger = logger; + this.nodeStorage = nodeStorage; + this.networkClient = networkClient; + this.cryptoProvider = cryptoProvider; + this.disableInternalRetries = disableInternalRetries; + } + /** + * Processes the network response and converts it to a standardized server token response. + * This async version allows for source-specific response processing logic while maintaining + * backward compatibility with the synchronous version. + * + * @param response - The network response containing the managed identity token + * @param _networkClient - Network client used for the request (unused in base implementation) + * @param _networkRequest - The original network request parameters (unused in base implementation) + * @param _networkRequestOptions - The network request options (unused in base implementation) + * + * @returns Promise resolving to a standardized server authorization token response + */ + async getServerTokenResponseAsync(response, + // eslint-disable-next-line @typescript-eslint/no-unused-vars + _networkClient, + // eslint-disable-next-line @typescript-eslint/no-unused-vars + _networkRequest, + // eslint-disable-next-line @typescript-eslint/no-unused-vars + _networkRequestOptions) { + return this.getServerTokenResponse(response); + } + /** + * Converts a managed identity token response to a standardized server authorization token response. + * Handles time format conversion, expiration calculation, and error mapping to ensure + * compatibility with the MSAL response handling pipeline. + * + * @param response - The network response containing the managed identity token + * + * @returns Standardized server authorization token response with normalized fields + */ + getServerTokenResponse(response) { + let refreshIn, expiresIn; + if (response.body.expires_on) { + // if the expires_on field in the response body is a string and in ISO 8601 format, convert it to a Unix timestamp (seconds since epoch) + if (isIso8601(response.body.expires_on)) { + response.body.expires_on = + new Date(response.body.expires_on).getTime() / 1000; + } + expiresIn = response.body.expires_on - nowSeconds(); + // compute refresh_in as 1/2 of expires_in, but only if expires_in > 2h + if (expiresIn > 2 * 3600) { + refreshIn = expiresIn / 2; + } + } + const serverTokenResponse = { + status: response.status, + // success + access_token: response.body.access_token, + expires_in: expiresIn, + scope: response.body.resource, + token_type: response.body.token_type, + refresh_in: refreshIn, + // error + correlation_id: response.body.correlation_id || response.body.correlationId, + error: typeof response.body.error === "string" + ? response.body.error + : response.body.error?.code, + error_description: response.body.message || + (typeof response.body.error === "string" + ? response.body.error_description + : response.body.error?.message), + error_codes: response.body.error_codes, + timestamp: response.body.timestamp, + trace_id: response.body.trace_id, + }; + return serverTokenResponse; + } + /** + * Acquires an access token using the managed identity endpoint for the specified resource. + * This is the primary method for token acquisition, handling the complete flow from + * request creation through response processing and token caching. + * + * @param managedIdentityRequest - The managed identity request containing resource and optional parameters + * @param managedIdentityId - The managed identity configuration (system or user-assigned) + * @param fakeAuthority - Authority instance used for token caching (managed identity uses a placeholder authority) + * @param refreshAccessToken - Whether this is a token refresh operation + * + * @returns Promise resolving to an authentication result containing the access token and metadata + * + * @throws {AuthError} When network requests fail or token validation fails + * @throws {ClientAuthError} When network errors occur during the request + */ + async acquireTokenWithManagedIdentity(managedIdentityRequest, managedIdentityId, fakeAuthority, refreshAccessToken) { + const networkRequest = this.createRequest(managedIdentityRequest.resource, managedIdentityId); + if (managedIdentityRequest.revokedTokenSha256Hash) { + this.logger.info(`[Managed Identity] The following claims are present in the request: ${managedIdentityRequest.claims}`, ""); + networkRequest.queryParameters[ManagedIdentityQueryParameters.SHA256_TOKEN_TO_REFRESH] = managedIdentityRequest.revokedTokenSha256Hash; + } + if (managedIdentityRequest.clientCapabilities?.length) { + const clientCapabilities = managedIdentityRequest.clientCapabilities.toString(); + this.logger.info(`[Managed Identity] The following client capabilities are present in the request: ${clientCapabilities}`, ""); + networkRequest.queryParameters[ManagedIdentityQueryParameters.XMS_CC] = clientCapabilities; + } + const headers = networkRequest.headers; + headers[HeaderNames.CONTENT_TYPE] = + URL_FORM_CONTENT_TYPE; + const networkRequestOptions = { headers }; + if (Object.keys(networkRequest.bodyParameters).length) { + networkRequestOptions.body = + networkRequest.computeParametersBodyString(); + } + /** + * Initializes the network client helper based on the retry policy configuration. + * If internal retries are disabled, it uses the provided network client directly. + * Otherwise, it wraps the network client with an HTTP client that supports retries. + */ + const networkClientHelper = this.disableInternalRetries + ? this.networkClient + : new HttpClientWithRetries(this.networkClient, networkRequest.retryPolicy, this.logger); + const reqTimestamp = nowSeconds(); + let response; + try { + // Sources that send POST requests: Cloud Shell + if (networkRequest.httpMethod === Constants_HttpMethod.POST) { + response = + await networkClientHelper.sendPostRequestAsync(networkRequest.computeUri(), networkRequestOptions); + // Sources that send GET requests: App Service, Azure Arc, IMDS, Service Fabric + } + else { + response = + await networkClientHelper.sendGetRequestAsync(networkRequest.computeUri(), networkRequestOptions); + } + } + catch (error) { + if (error instanceof AuthError) { + throw error; + } + else { + throw ClientAuthError_createClientAuthError(networkError); + } + } + const responseHandler = new ResponseHandler(managedIdentityId.id, this.nodeStorage, this.cryptoProvider, this.logger, new StubPerformanceClient_StubPerformanceClient(), null, null); + const serverTokenResponse = await this.getServerTokenResponseAsync(response, networkClientHelper, networkRequest, networkRequestOptions); + responseHandler.validateTokenResponse(serverTokenResponse, serverTokenResponse.correlation_id || "", refreshAccessToken); + // caches the token + return responseHandler.handleServerTokenResponse(serverTokenResponse, fakeAuthority, reqTimestamp, managedIdentityRequest, ApiId.acquireTokenWithManagedIdentity); + } + /** + * Determines the appropriate query parameter name for user-assigned managed identity + * based on the identity type, API version, and endpoint characteristics. + * Different Azure services and API versions use different parameter names for the same identity types. + * + * @param managedIdentityIdType - The type of user-assigned managed identity (client ID, object ID, or resource ID) + * @param isImds - Whether the request is being made to the IMDS (Instance Metadata Service) endpoint + * @param usesApi2017 - Whether the endpoint uses the 2017-09-01 API version (affects client ID parameter name) + * + * @returns The correct query parameter name for the specified identity type and endpoint + * + * @throws {ManagedIdentityError} When an invalid managed identity ID type is provided + */ + getManagedIdentityUserAssignedIdQueryParameterKey(managedIdentityIdType, isImds, usesApi2017) { + switch (managedIdentityIdType) { + case Constants_ManagedIdentityIdType.USER_ASSIGNED_CLIENT_ID: + this.logger.info(`[Managed Identity] [API version ${usesApi2017 ? "2017+" : "2019+"}] Adding user assigned client id to the request.`, ""); + // The Machine Learning source uses the 2017-09-01 API version, which uses "clientid" instead of "client_id" + return usesApi2017 + ? ManagedIdentityUserAssignedIdQueryParameterNames.MANAGED_IDENTITY_CLIENT_ID_2017 + : ManagedIdentityUserAssignedIdQueryParameterNames.MANAGED_IDENTITY_CLIENT_ID; + case Constants_ManagedIdentityIdType.USER_ASSIGNED_RESOURCE_ID: + this.logger.info("[Managed Identity] Adding user assigned resource id to the request.", ""); + return isImds + ? ManagedIdentityUserAssignedIdQueryParameterNames.MANAGED_IDENTITY_RESOURCE_ID_IMDS + : ManagedIdentityUserAssignedIdQueryParameterNames.MANAGED_IDENTITY_RESOURCE_ID_NON_IMDS; + case Constants_ManagedIdentityIdType.USER_ASSIGNED_OBJECT_ID: + this.logger.info("[Managed Identity] Adding user assigned object id to the request.", ""); + return ManagedIdentityUserAssignedIdQueryParameterNames.MANAGED_IDENTITY_OBJECT_ID; + default: + throw ManagedIdentityError_createManagedIdentityError(ManagedIdentityErrorCodes_invalidManagedIdentityIdType); + } + } +} +/** + * Validates and normalizes an environment variable containing a URL string. + * This static utility method ensures that environment variables used for managed identity + * endpoints contain properly formatted URLs and provides informative error messages when validation fails. + * + * @param envVariableStringName - The name of the environment variable being validated (for error reporting) + * @param envVariable - The environment variable value containing the URL string + * @param sourceName - The name of the managed identity source (for error reporting) + * @param logger - Logger instance for diagnostic information + * + * @returns The validated and normalized URL string + * + * @throws {ManagedIdentityError} When the environment variable contains a malformed URL + */ +BaseManagedIdentitySource.getValidatedEnvVariableUrlString = (envVariableStringName, envVariable, sourceName, logger) => { + try { + return new UrlString(envVariable).urlString; + } + catch (error) { + logger.info(`[Managed Identity] ${sourceName} managed identity is unavailable because the '${envVariableStringName}' environment variable is malformed.`, ""); + throw ManagedIdentityError_createManagedIdentityError(MsiEnvironmentVariableUrlMalformedErrorCodes[envVariableStringName]); + } }; @@ -56929,36 +56929,36 @@ BaseManagedIdentitySource.getValidatedEnvVariableUrlString = (envVariableStringN ;// CONCATENATED MODULE: ./node_modules/@azure/msal-node/dist/retry/LinearRetryStrategy.mjs /*! @azure/msal-node v5.1.0 2026-03-13 */ -/* - * Copyright (c) Microsoft Corporation. All rights reserved. - * Licensed under the MIT License. - */ -class LinearRetryStrategy { - /** - * Calculates the number of milliseconds to sleep based on the `retry-after` HTTP header. - * - * @param retryHeader - The value of the `retry-after` HTTP header. This can be either a number of seconds - * or an HTTP date string. - * @returns The number of milliseconds to sleep before retrying the request. If the `retry-after` header is not - * present or cannot be parsed, returns 0. - */ - calculateDelay(retryHeader, minimumDelay) { - if (!retryHeader) { - return minimumDelay; - } - // retry-after header is in seconds - let millisToSleep = Math.round(parseFloat(retryHeader) * 1000); - /* - * retry-after header is in HTTP Date format - * , :: GMT - */ - if (isNaN(millisToSleep)) { - // .valueOf() is needed to subtract dates in TypeScript - millisToSleep = - new Date(retryHeader).valueOf() - new Date().valueOf(); - } - return Math.max(minimumDelay, millisToSleep); - } +/* + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. + */ +class LinearRetryStrategy { + /** + * Calculates the number of milliseconds to sleep based on the `retry-after` HTTP header. + * + * @param retryHeader - The value of the `retry-after` HTTP header. This can be either a number of seconds + * or an HTTP date string. + * @returns The number of milliseconds to sleep before retrying the request. If the `retry-after` header is not + * present or cannot be parsed, returns 0. + */ + calculateDelay(retryHeader, minimumDelay) { + if (!retryHeader) { + return minimumDelay; + } + // retry-after header is in seconds + let millisToSleep = Math.round(parseFloat(retryHeader) * 1000); + /* + * retry-after header is in HTTP Date format + * , :: GMT + */ + if (isNaN(millisToSleep)) { + // .valueOf() is needed to subtract dates in TypeScript + millisToSleep = + new Date(retryHeader).valueOf() - new Date().valueOf(); + } + return Math.max(minimumDelay, millisToSleep); + } } @@ -56970,46 +56970,46 @@ class LinearRetryStrategy { -/* - * Copyright (c) Microsoft Corporation. All rights reserved. - * Licensed under the MIT License. - */ -const DEFAULT_MANAGED_IDENTITY_MAX_RETRIES = 3; // referenced in unit test -const DEFAULT_MANAGED_IDENTITY_RETRY_DELAY_MS = 1000; -const DEFAULT_MANAGED_IDENTITY_HTTP_STATUS_CODES_TO_RETRY_ON = [ - HTTP_NOT_FOUND, - HTTP_REQUEST_TIMEOUT, - HTTP_TOO_MANY_REQUESTS, - HTTP_SERVER_ERROR, - HTTP_SERVICE_UNAVAILABLE, - HTTP_GATEWAY_TIMEOUT, -]; -class DefaultManagedIdentityRetryPolicy { - constructor() { - this.linearRetryStrategy = new LinearRetryStrategy(); - } - /* - * this is defined here as a static variable despite being defined as a constant outside of the - * class because it needs to be overridden in the unit tests so that the unit tests run faster - */ - static get DEFAULT_MANAGED_IDENTITY_RETRY_DELAY_MS() { - return DEFAULT_MANAGED_IDENTITY_RETRY_DELAY_MS; - } - async pauseForRetry(httpStatusCode, currentRetry, logger, retryAfterHeader) { - if (DEFAULT_MANAGED_IDENTITY_HTTP_STATUS_CODES_TO_RETRY_ON.includes(httpStatusCode) && - currentRetry < DEFAULT_MANAGED_IDENTITY_MAX_RETRIES) { - const retryAfterDelay = this.linearRetryStrategy.calculateDelay(retryAfterHeader, DefaultManagedIdentityRetryPolicy.DEFAULT_MANAGED_IDENTITY_RETRY_DELAY_MS); - logger.verbose(`Retrying request in ${retryAfterDelay}ms (retry attempt: ${currentRetry + 1})`, ""); - // pause execution for the calculated delay - await new Promise((resolve) => { - // retryAfterHeader value of 0 evaluates to false, and DEFAULT_MANAGED_IDENTITY_RETRY_DELAY_MS will be used - return setTimeout(resolve, retryAfterDelay); - }); - return true; - } - // if the status code is not retriable or max retries have been reached, do not retry - return false; - } +/* + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. + */ +const DEFAULT_MANAGED_IDENTITY_MAX_RETRIES = 3; // referenced in unit test +const DEFAULT_MANAGED_IDENTITY_RETRY_DELAY_MS = 1000; +const DEFAULT_MANAGED_IDENTITY_HTTP_STATUS_CODES_TO_RETRY_ON = [ + HTTP_NOT_FOUND, + HTTP_REQUEST_TIMEOUT, + HTTP_TOO_MANY_REQUESTS, + HTTP_SERVER_ERROR, + HTTP_SERVICE_UNAVAILABLE, + HTTP_GATEWAY_TIMEOUT, +]; +class DefaultManagedIdentityRetryPolicy { + constructor() { + this.linearRetryStrategy = new LinearRetryStrategy(); + } + /* + * this is defined here as a static variable despite being defined as a constant outside of the + * class because it needs to be overridden in the unit tests so that the unit tests run faster + */ + static get DEFAULT_MANAGED_IDENTITY_RETRY_DELAY_MS() { + return DEFAULT_MANAGED_IDENTITY_RETRY_DELAY_MS; + } + async pauseForRetry(httpStatusCode, currentRetry, logger, retryAfterHeader) { + if (DEFAULT_MANAGED_IDENTITY_HTTP_STATUS_CODES_TO_RETRY_ON.includes(httpStatusCode) && + currentRetry < DEFAULT_MANAGED_IDENTITY_MAX_RETRIES) { + const retryAfterDelay = this.linearRetryStrategy.calculateDelay(retryAfterHeader, DefaultManagedIdentityRetryPolicy.DEFAULT_MANAGED_IDENTITY_RETRY_DELAY_MS); + logger.verbose(`Retrying request in ${retryAfterDelay}ms (retry attempt: ${currentRetry + 1})`, ""); + // pause execution for the calculated delay + await new Promise((resolve) => { + // retryAfterHeader value of 0 evaluates to false, and DEFAULT_MANAGED_IDENTITY_RETRY_DELAY_MS will be used + return setTimeout(resolve, retryAfterDelay); + }); + return true; + } + // if the status code is not retriable or max retries have been reached, do not retry + return false; + } } @@ -57021,35 +57021,35 @@ class DefaultManagedIdentityRetryPolicy { -/* - * Copyright (c) Microsoft Corporation. All rights reserved. - * Licensed under the MIT License. - */ -class ManagedIdentityRequestParameters { - constructor(httpMethod, endpoint, retryPolicy) { - this.httpMethod = httpMethod; - this._baseEndpoint = endpoint; - this.headers = {}; - this.bodyParameters = {}; - this.queryParameters = {}; - this.retryPolicy = - retryPolicy || new DefaultManagedIdentityRetryPolicy(); - } - computeUri() { - const parameters = new Map(); - if (this.queryParameters) { - addExtraParameters(parameters, this.queryParameters); - } - const queryParametersString = mapToQueryString(parameters); - return UrlString.appendQueryString(this._baseEndpoint, queryParametersString); - } - computeParametersBodyString() { - const parameters = new Map(); - if (this.bodyParameters) { - addExtraParameters(parameters, this.bodyParameters); - } - return mapToQueryString(parameters); - } +/* + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. + */ +class ManagedIdentityRequestParameters { + constructor(httpMethod, endpoint, retryPolicy) { + this.httpMethod = httpMethod; + this._baseEndpoint = endpoint; + this.headers = {}; + this.bodyParameters = {}; + this.queryParameters = {}; + this.retryPolicy = + retryPolicy || new DefaultManagedIdentityRetryPolicy(); + } + computeUri() { + const parameters = new Map(); + if (this.queryParameters) { + addExtraParameters(parameters, this.queryParameters); + } + const queryParametersString = mapToQueryString(parameters); + return UrlString.appendQueryString(this._baseEndpoint, queryParametersString); + } + computeParametersBodyString() { + const parameters = new Map(); + if (this.bodyParameters) { + addExtraParameters(parameters, this.bodyParameters); + } + return mapToQueryString(parameters); + } } @@ -57062,105 +57062,105 @@ class ManagedIdentityRequestParameters { -/* - * Copyright (c) Microsoft Corporation. All rights reserved. - * Licensed under the MIT License. - */ -// MSI Constants. Docs for MSI are available here https://docs.microsoft.com/azure/app-service/overview-managed-identity -const APP_SERVICE_MSI_API_VERSION = "2019-08-01"; -/** - * Azure App Service Managed Identity Source implementation. - * - * This class provides managed identity authentication for applications running in Azure App Service. - * It uses the local metadata service endpoint available within App Service environments to obtain - * access tokens without requiring explicit credentials. - * - * Original source of code: https://github.com/Azure/azure-sdk-for-net/blob/main/sdk/identity/Azure.Identity/src/AppServiceManagedIdentitySource.cs - */ -class AppService_AppService extends BaseManagedIdentitySource { - /** - * Creates a new instance of the AppService managed identity source. - * - * @param logger - Logger instance for diagnostic output - * @param nodeStorage - Node.js storage implementation for caching - * @param networkClient - Network client for making HTTP requests - * @param cryptoProvider - Cryptographic operations provider - * @param disableInternalRetries - Whether to disable internal retry logic - * @param identityEndpoint - The App Service identity endpoint URL - * @param identityHeader - The secret header value required for authentication - */ - constructor(logger, nodeStorage, networkClient, cryptoProvider, disableInternalRetries, identityEndpoint, identityHeader) { - super(logger, nodeStorage, networkClient, cryptoProvider, disableInternalRetries); - this.identityEndpoint = identityEndpoint; - this.identityHeader = identityHeader; - } - /** - * Retrieves the required environment variables for App Service managed identity. - * - * App Service managed identity requires two environment variables: - * - IDENTITY_ENDPOINT: The URL of the local metadata service - * - IDENTITY_HEADER: A secret header value for authentication - * - * @returns An array containing [identityEndpoint, identityHeader] values from environment variables. - * Either value may be undefined if the environment variable is not set. - */ - static getEnvironmentVariables() { - const identityEndpoint = process.env[ManagedIdentityEnvironmentVariableNames.IDENTITY_ENDPOINT]; - const identityHeader = process.env[ManagedIdentityEnvironmentVariableNames.IDENTITY_HEADER]; - return [identityEndpoint, identityHeader]; - } - /** - * Attempts to create an AppService managed identity source if the environment supports it. - * - * This method checks for the presence of required environment variables and validates - * the identity endpoint URL. If the environment is not suitable for App Service managed - * identity (missing environment variables or invalid endpoint), it returns null. - * - * @param logger - Logger instance for diagnostic output - * @param nodeStorage - Node.js storage implementation for caching - * @param networkClient - Network client for making HTTP requests - * @param cryptoProvider - Cryptographic operations provider - * @param disableInternalRetries - Whether to disable internal retry logic - * - * @returns A new AppService instance if the environment is suitable, null otherwise - */ - static tryCreate(logger, nodeStorage, networkClient, cryptoProvider, disableInternalRetries) { - const [identityEndpoint, identityHeader] = AppService_AppService.getEnvironmentVariables(); - // if either of the identity endpoint or identity header variables are undefined, this MSI provider is unavailable. - if (!identityEndpoint || !identityHeader) { - logger.info(`[Managed Identity] ${Constants_ManagedIdentitySourceNames.APP_SERVICE} managed identity is unavailable because one or both of the '${ManagedIdentityEnvironmentVariableNames.IDENTITY_HEADER}' and '${ManagedIdentityEnvironmentVariableNames.IDENTITY_ENDPOINT}' environment variables are not defined.`, ""); - return null; - } - const validatedIdentityEndpoint = AppService_AppService.getValidatedEnvVariableUrlString(ManagedIdentityEnvironmentVariableNames.IDENTITY_ENDPOINT, identityEndpoint, Constants_ManagedIdentitySourceNames.APP_SERVICE, logger); - logger.info(`[Managed Identity] Environment variables validation passed for ${Constants_ManagedIdentitySourceNames.APP_SERVICE} managed identity. Endpoint URI: ${validatedIdentityEndpoint}. Creating ${Constants_ManagedIdentitySourceNames.APP_SERVICE} managed identity.`, ""); - return new AppService_AppService(logger, nodeStorage, networkClient, cryptoProvider, disableInternalRetries, identityEndpoint, identityHeader); - } - /** - * Creates a managed identity token request for the App Service environment. - * - * This method constructs an HTTP GET request to the App Service identity endpoint - * with the required headers, query parameters, and managed identity configuration. - * The request includes the secret header for authentication and appropriate API version. - * - * @param resource - The target resource/scope for which to request an access token (e.g., "https://graph.microsoft.com/.default") - * @param managedIdentityId - The managed identity configuration specifying whether to use system-assigned or user-assigned identity - * - * @returns A configured ManagedIdentityRequestParameters object ready for network execution - */ - createRequest(resource, managedIdentityId) { - const request = new ManagedIdentityRequestParameters(Constants_HttpMethod.GET, this.identityEndpoint); - request.headers[ManagedIdentityHeaders.APP_SERVICE_SECRET_HEADER_NAME] = - this.identityHeader; - request.queryParameters[ManagedIdentityQueryParameters.API_VERSION] = - APP_SERVICE_MSI_API_VERSION; - request.queryParameters[ManagedIdentityQueryParameters.RESOURCE] = - resource; - if (managedIdentityId.idType !== Constants_ManagedIdentityIdType.SYSTEM_ASSIGNED) { - request.queryParameters[this.getManagedIdentityUserAssignedIdQueryParameterKey(managedIdentityId.idType)] = managedIdentityId.id; - } - // bodyParameters calculated in BaseManagedIdentity.acquireTokenWithManagedIdentity - return request; - } +/* + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. + */ +// MSI Constants. Docs for MSI are available here https://docs.microsoft.com/azure/app-service/overview-managed-identity +const APP_SERVICE_MSI_API_VERSION = "2019-08-01"; +/** + * Azure App Service Managed Identity Source implementation. + * + * This class provides managed identity authentication for applications running in Azure App Service. + * It uses the local metadata service endpoint available within App Service environments to obtain + * access tokens without requiring explicit credentials. + * + * Original source of code: https://github.com/Azure/azure-sdk-for-net/blob/main/sdk/identity/Azure.Identity/src/AppServiceManagedIdentitySource.cs + */ +class AppService_AppService extends BaseManagedIdentitySource { + /** + * Creates a new instance of the AppService managed identity source. + * + * @param logger - Logger instance for diagnostic output + * @param nodeStorage - Node.js storage implementation for caching + * @param networkClient - Network client for making HTTP requests + * @param cryptoProvider - Cryptographic operations provider + * @param disableInternalRetries - Whether to disable internal retry logic + * @param identityEndpoint - The App Service identity endpoint URL + * @param identityHeader - The secret header value required for authentication + */ + constructor(logger, nodeStorage, networkClient, cryptoProvider, disableInternalRetries, identityEndpoint, identityHeader) { + super(logger, nodeStorage, networkClient, cryptoProvider, disableInternalRetries); + this.identityEndpoint = identityEndpoint; + this.identityHeader = identityHeader; + } + /** + * Retrieves the required environment variables for App Service managed identity. + * + * App Service managed identity requires two environment variables: + * - IDENTITY_ENDPOINT: The URL of the local metadata service + * - IDENTITY_HEADER: A secret header value for authentication + * + * @returns An array containing [identityEndpoint, identityHeader] values from environment variables. + * Either value may be undefined if the environment variable is not set. + */ + static getEnvironmentVariables() { + const identityEndpoint = process.env[ManagedIdentityEnvironmentVariableNames.IDENTITY_ENDPOINT]; + const identityHeader = process.env[ManagedIdentityEnvironmentVariableNames.IDENTITY_HEADER]; + return [identityEndpoint, identityHeader]; + } + /** + * Attempts to create an AppService managed identity source if the environment supports it. + * + * This method checks for the presence of required environment variables and validates + * the identity endpoint URL. If the environment is not suitable for App Service managed + * identity (missing environment variables or invalid endpoint), it returns null. + * + * @param logger - Logger instance for diagnostic output + * @param nodeStorage - Node.js storage implementation for caching + * @param networkClient - Network client for making HTTP requests + * @param cryptoProvider - Cryptographic operations provider + * @param disableInternalRetries - Whether to disable internal retry logic + * + * @returns A new AppService instance if the environment is suitable, null otherwise + */ + static tryCreate(logger, nodeStorage, networkClient, cryptoProvider, disableInternalRetries) { + const [identityEndpoint, identityHeader] = AppService_AppService.getEnvironmentVariables(); + // if either of the identity endpoint or identity header variables are undefined, this MSI provider is unavailable. + if (!identityEndpoint || !identityHeader) { + logger.info(`[Managed Identity] ${Constants_ManagedIdentitySourceNames.APP_SERVICE} managed identity is unavailable because one or both of the '${ManagedIdentityEnvironmentVariableNames.IDENTITY_HEADER}' and '${ManagedIdentityEnvironmentVariableNames.IDENTITY_ENDPOINT}' environment variables are not defined.`, ""); + return null; + } + const validatedIdentityEndpoint = AppService_AppService.getValidatedEnvVariableUrlString(ManagedIdentityEnvironmentVariableNames.IDENTITY_ENDPOINT, identityEndpoint, Constants_ManagedIdentitySourceNames.APP_SERVICE, logger); + logger.info(`[Managed Identity] Environment variables validation passed for ${Constants_ManagedIdentitySourceNames.APP_SERVICE} managed identity. Endpoint URI: ${validatedIdentityEndpoint}. Creating ${Constants_ManagedIdentitySourceNames.APP_SERVICE} managed identity.`, ""); + return new AppService_AppService(logger, nodeStorage, networkClient, cryptoProvider, disableInternalRetries, identityEndpoint, identityHeader); + } + /** + * Creates a managed identity token request for the App Service environment. + * + * This method constructs an HTTP GET request to the App Service identity endpoint + * with the required headers, query parameters, and managed identity configuration. + * The request includes the secret header for authentication and appropriate API version. + * + * @param resource - The target resource/scope for which to request an access token (e.g., "https://graph.microsoft.com/.default") + * @param managedIdentityId - The managed identity configuration specifying whether to use system-assigned or user-assigned identity + * + * @returns A configured ManagedIdentityRequestParameters object ready for network execution + */ + createRequest(resource, managedIdentityId) { + const request = new ManagedIdentityRequestParameters(Constants_HttpMethod.GET, this.identityEndpoint); + request.headers[ManagedIdentityHeaders.APP_SERVICE_SECRET_HEADER_NAME] = + this.identityHeader; + request.queryParameters[ManagedIdentityQueryParameters.API_VERSION] = + APP_SERVICE_MSI_API_VERSION; + request.queryParameters[ManagedIdentityQueryParameters.RESOURCE] = + resource; + if (managedIdentityId.idType !== Constants_ManagedIdentityIdType.SYSTEM_ASSIGNED) { + request.queryParameters[this.getManagedIdentityUserAssignedIdQueryParameterKey(managedIdentityId.idType)] = managedIdentityId.id; + } + // bodyParameters calculated in BaseManagedIdentity.acquireTokenWithManagedIdentity + return request; + } } @@ -57178,239 +57178,239 @@ class AppService_AppService extends BaseManagedIdentitySource { -/* - * Copyright (c) Microsoft Corporation. All rights reserved. - * Licensed under the MIT License. - */ -const ARC_API_VERSION = "2019-11-01"; -const DEFAULT_AZURE_ARC_IDENTITY_ENDPOINT = "http://127.0.0.1:40342/metadata/identity/oauth2/token"; -const HIMDS_EXECUTABLE_HELPER_STRING = "N/A: himds executable exists"; -const SUPPORTED_AZURE_ARC_PLATFORMS = { - win32: `${process.env["ProgramData"]}\\AzureConnectedMachineAgent\\Tokens\\`, - linux: "/var/opt/azcmagent/tokens/", -}; -const AZURE_ARC_FILE_DETECTION = { - win32: `${process.env["ProgramFiles"]}\\AzureConnectedMachineAgent\\himds.exe`, - linux: "/opt/azcmagent/bin/himds", -}; -/** - * Azure Arc managed identity source implementation for acquiring tokens from Azure Arc-enabled servers. - * - * This class provides managed identity authentication for applications running on Azure Arc-enabled servers - * by communicating with the local Hybrid Instance Metadata Service (HIMDS). It supports both environment - * variable-based configuration and automatic detection through the HIMDS executable. - * - * Original source of code: https://github.com/Azure/azure-sdk-for-net/blob/main/sdk/identity/Azure.Identity/src/AzureArcManagedIdentitySource.cs - */ -class AzureArc_AzureArc extends BaseManagedIdentitySource { - /** - * Creates a new instance of the AzureArc managed identity source. - * - * @param logger - Logger instance for capturing telemetry and diagnostic information - * @param nodeStorage - Storage implementation for caching tokens and metadata - * @param networkClient - Network client for making HTTP requests to the identity endpoint - * @param cryptoProvider - Cryptographic operations provider for token validation and encryption - * @param disableInternalRetries - Flag to disable automatic retry logic for failed requests - * @param identityEndpoint - The Azure Arc identity endpoint URL for token requests - */ - constructor(logger, nodeStorage, networkClient, cryptoProvider, disableInternalRetries, identityEndpoint) { - super(logger, nodeStorage, networkClient, cryptoProvider, disableInternalRetries); - this.identityEndpoint = identityEndpoint; - } - /** - * Retrieves and validates Azure Arc environment variables for managed identity configuration. - * - * This method checks for IDENTITY_ENDPOINT and IMDS_ENDPOINT environment variables. - * If either is missing, it attempts to detect the Azure Arc environment by checking for - * the HIMDS executable at platform-specific paths. On successful detection, it returns - * the default identity endpoint and a helper string indicating file-based detection. - * - * @returns An array containing [identityEndpoint, imdsEndpoint] where both values are - * strings if Azure Arc is available, or undefined if not available. - */ - static getEnvironmentVariables() { - let identityEndpoint = process.env[ManagedIdentityEnvironmentVariableNames.IDENTITY_ENDPOINT]; - let imdsEndpoint = process.env[ManagedIdentityEnvironmentVariableNames.IMDS_ENDPOINT]; - // if either of the identity or imds endpoints are undefined, check if the himds executable exists - if (!identityEndpoint || !imdsEndpoint) { - // get the expected Windows or Linux file path of the himds executable - const fileDetectionPath = AZURE_ARC_FILE_DETECTION[process.platform]; - try { - /* - * check if the himds executable exists and its permissions allow it to be read - * returns undefined if true, throws an error otherwise - */ - (0,external_fs_.accessSync)(fileDetectionPath, external_fs_.constants.F_OK | external_fs_.constants.R_OK); - identityEndpoint = DEFAULT_AZURE_ARC_IDENTITY_ENDPOINT; - imdsEndpoint = HIMDS_EXECUTABLE_HELPER_STRING; - } - catch (err) { - /* - * do nothing - * accessSync returns undefined on success, and throws an error on failure - */ - } - } - return [identityEndpoint, imdsEndpoint]; - } - /** - * Attempts to create an AzureArc managed identity source instance. - * - * Validates the Azure Arc environment by checking environment variables - * and performing file-based detection. It ensures that only system-assigned managed identities - * are supported for Azure Arc scenarios. The method performs comprehensive validation of - * endpoint URLs and logs detailed information about the detection process. - * - * @param logger - Logger instance for capturing creation and validation steps - * @param nodeStorage - Storage implementation for the managed identity source - * @param networkClient - Network client for HTTP communication - * @param cryptoProvider - Cryptographic operations provider - * @param disableInternalRetries - Whether to disable automatic retry mechanisms - * @param managedIdentityId - The managed identity configuration, must be system-assigned - * - * @returns AzureArc instance if the environment supports Azure Arc managed identity, null otherwise - * - * @throws {ManagedIdentityError} When a user-assigned managed identity is specified (not supported for Azure Arc) - */ - static tryCreate(logger, nodeStorage, networkClient, cryptoProvider, disableInternalRetries, managedIdentityId) { - const [identityEndpoint, imdsEndpoint] = AzureArc_AzureArc.getEnvironmentVariables(); - // if either of the identity or imds endpoints are undefined (even after himds file detection) - if (!identityEndpoint || !imdsEndpoint) { - logger.info(`[Managed Identity] ${Constants_ManagedIdentitySourceNames.AZURE_ARC} managed identity is unavailable through environment variables because one or both of '${ManagedIdentityEnvironmentVariableNames.IDENTITY_ENDPOINT}' and '${ManagedIdentityEnvironmentVariableNames.IMDS_ENDPOINT}' are not defined. ${Constants_ManagedIdentitySourceNames.AZURE_ARC} managed identity is also unavailable through file detection.`, ""); - return null; - } - // check if the imds endpoint is set to the default for file detection - if (imdsEndpoint === HIMDS_EXECUTABLE_HELPER_STRING) { - logger.info(`[Managed Identity] ${Constants_ManagedIdentitySourceNames.AZURE_ARC} managed identity is available through file detection. Defaulting to known ${Constants_ManagedIdentitySourceNames.AZURE_ARC} endpoint: ${DEFAULT_AZURE_ARC_IDENTITY_ENDPOINT}. Creating ${Constants_ManagedIdentitySourceNames.AZURE_ARC} managed identity.`, ""); - } - else { - // otherwise, both the identity and imds endpoints are defined without file detection; validate them - const validatedIdentityEndpoint = AzureArc_AzureArc.getValidatedEnvVariableUrlString(ManagedIdentityEnvironmentVariableNames.IDENTITY_ENDPOINT, identityEndpoint, Constants_ManagedIdentitySourceNames.AZURE_ARC, logger); - // remove trailing slash - validatedIdentityEndpoint.endsWith("/") - ? validatedIdentityEndpoint.slice(0, -1) - : validatedIdentityEndpoint; - AzureArc_AzureArc.getValidatedEnvVariableUrlString(ManagedIdentityEnvironmentVariableNames.IMDS_ENDPOINT, imdsEndpoint, Constants_ManagedIdentitySourceNames.AZURE_ARC, logger); - logger.info(`[Managed Identity] Environment variables validation passed for ${Constants_ManagedIdentitySourceNames.AZURE_ARC} managed identity. Endpoint URI: ${validatedIdentityEndpoint}. Creating ${Constants_ManagedIdentitySourceNames.AZURE_ARC} managed identity.`, ""); - } - if (managedIdentityId.idType !== Constants_ManagedIdentityIdType.SYSTEM_ASSIGNED) { - throw ManagedIdentityError_createManagedIdentityError(unableToCreateAzureArc); - } - return new AzureArc_AzureArc(logger, nodeStorage, networkClient, cryptoProvider, disableInternalRetries, identityEndpoint); - } - /** - * Creates a properly formatted HTTP request for acquiring tokens from the Azure Arc identity endpoint. - * - * This method constructs a GET request to the Azure Arc HIMDS endpoint with the required metadata header - * and query parameters. The endpoint URL is normalized to use 127.0.0.1 instead of localhost for - * consistency. Additional body parameters are calculated by the base class during token acquisition. - * - * @param resource - The target resource/scope for which to request an access token (e.g., "https://graph.microsoft.com/.default") - * - * @returns A configured ManagedIdentityRequestParameters object ready for network execution - */ - createRequest(resource) { - const request = new ManagedIdentityRequestParameters(Constants_HttpMethod.GET, this.identityEndpoint.replace("localhost", "127.0.0.1")); - request.headers[ManagedIdentityHeaders.METADATA_HEADER_NAME] = "true"; - request.queryParameters[ManagedIdentityQueryParameters.API_VERSION] = - ARC_API_VERSION; - request.queryParameters[ManagedIdentityQueryParameters.RESOURCE] = - resource; - // bodyParameters calculated in BaseManagedIdentity.acquireTokenWithManagedIdentity - return request; - } - /** - * Processes the server response and handles Azure Arc-specific authentication challenges. - * - * This method implements the Azure Arc authentication flow which may require reading a secret file - * for authorization. When the initial request returns HTTP 401 Unauthorized, it extracts the file - * path from the WWW-Authenticate header, validates the file location and size, reads the secret, - * and retries the request with Basic authentication. The method includes comprehensive security - * validations to prevent path traversal and ensure file integrity. - * - * @param originalResponse - The initial HTTP response from the identity endpoint - * @param networkClient - Network client for making the retry request if needed - * @param networkRequest - The original request parameters (modified with auth header for retry) - * @param networkRequestOptions - Additional options for network requests - * - * @returns A promise that resolves to the server token response with access token and metadata - * - * @throws {ManagedIdentityError} When: - * - WWW-Authenticate header is missing or has unsupported format - * - Platform is not supported (not Windows or Linux) - * - Secret file has invalid extension (not .key) - * - Secret file path doesn't match expected platform path - * - Secret file cannot be read or is too large (>4096 bytes) - * @throws {ClientAuthError} When network errors occur during retry request - */ - async getServerTokenResponseAsync(originalResponse, networkClient, networkRequest, networkRequestOptions) { - let retryResponse; - if (originalResponse.status === HTTP_UNAUTHORIZED) { - const wwwAuthHeader = originalResponse.headers["www-authenticate"]; - if (!wwwAuthHeader) { - throw ManagedIdentityError_createManagedIdentityError(wwwAuthenticateHeaderMissing); - } - if (!wwwAuthHeader.includes("Basic realm=")) { - throw ManagedIdentityError_createManagedIdentityError(wwwAuthenticateHeaderUnsupportedFormat); - } - const secretFilePath = wwwAuthHeader.split("Basic realm=")[1]; - // throw an error if the managed identity application is not being run on Windows or Linux - if (!SUPPORTED_AZURE_ARC_PLATFORMS.hasOwnProperty(process.platform)) { - throw ManagedIdentityError_createManagedIdentityError(platformNotSupported); - } - // get the expected Windows or Linux file path - const expectedSecretFilePath = SUPPORTED_AZURE_ARC_PLATFORMS[process.platform]; - // throw an error if the file in the file path is not a .key file - const fileName = external_path_.basename(secretFilePath); - if (!fileName.endsWith(".key")) { - throw ManagedIdentityError_createManagedIdentityError(invalidFileExtension); - } - /* - * throw an error if the file path from the www-authenticate header does not match the - * expected file path for the platform (Windows or Linux) the managed identity application - * is running on - */ - if (expectedSecretFilePath + fileName !== secretFilePath) { - throw ManagedIdentityError_createManagedIdentityError(invalidFilePath); - } - let secretFileSize; - // attempt to get the secret file's size, in bytes - try { - secretFileSize = await (0,external_fs_.statSync)(secretFilePath).size; - } - catch (e) { - throw ManagedIdentityError_createManagedIdentityError(unableToReadSecretFile); - } - // throw an error if the secret file's size is greater than 4096 bytes - if (secretFileSize > AZURE_ARC_SECRET_FILE_MAX_SIZE_BYTES) { - throw ManagedIdentityError_createManagedIdentityError(invalidSecret); - } - // attempt to read the contents of the secret file - let secret; - try { - secret = (0,external_fs_.readFileSync)(secretFilePath, EncodingTypes.UTF8); - } - catch (e) { - throw ManagedIdentityError_createManagedIdentityError(unableToReadSecretFile); - } - const authHeaderValue = `Basic ${secret}`; - this.logger.info(`[Managed Identity] Adding authorization header to the request.`, ""); - networkRequest.headers[ManagedIdentityHeaders.AUTHORIZATION_HEADER_NAME] = authHeaderValue; - try { - retryResponse = - await networkClient.sendGetRequestAsync(networkRequest.computeUri(), networkRequestOptions); - } - catch (error) { - if (error instanceof AuthError) { - throw error; - } - else { - throw ClientAuthError_createClientAuthError(networkError); - } - } - } - return this.getServerTokenResponse(retryResponse || originalResponse); - } +/* + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. + */ +const ARC_API_VERSION = "2019-11-01"; +const DEFAULT_AZURE_ARC_IDENTITY_ENDPOINT = "http://127.0.0.1:40342/metadata/identity/oauth2/token"; +const HIMDS_EXECUTABLE_HELPER_STRING = "N/A: himds executable exists"; +const SUPPORTED_AZURE_ARC_PLATFORMS = { + win32: `${process.env["ProgramData"]}\\AzureConnectedMachineAgent\\Tokens\\`, + linux: "/var/opt/azcmagent/tokens/", +}; +const AZURE_ARC_FILE_DETECTION = { + win32: `${process.env["ProgramFiles"]}\\AzureConnectedMachineAgent\\himds.exe`, + linux: "/opt/azcmagent/bin/himds", +}; +/** + * Azure Arc managed identity source implementation for acquiring tokens from Azure Arc-enabled servers. + * + * This class provides managed identity authentication for applications running on Azure Arc-enabled servers + * by communicating with the local Hybrid Instance Metadata Service (HIMDS). It supports both environment + * variable-based configuration and automatic detection through the HIMDS executable. + * + * Original source of code: https://github.com/Azure/azure-sdk-for-net/blob/main/sdk/identity/Azure.Identity/src/AzureArcManagedIdentitySource.cs + */ +class AzureArc_AzureArc extends BaseManagedIdentitySource { + /** + * Creates a new instance of the AzureArc managed identity source. + * + * @param logger - Logger instance for capturing telemetry and diagnostic information + * @param nodeStorage - Storage implementation for caching tokens and metadata + * @param networkClient - Network client for making HTTP requests to the identity endpoint + * @param cryptoProvider - Cryptographic operations provider for token validation and encryption + * @param disableInternalRetries - Flag to disable automatic retry logic for failed requests + * @param identityEndpoint - The Azure Arc identity endpoint URL for token requests + */ + constructor(logger, nodeStorage, networkClient, cryptoProvider, disableInternalRetries, identityEndpoint) { + super(logger, nodeStorage, networkClient, cryptoProvider, disableInternalRetries); + this.identityEndpoint = identityEndpoint; + } + /** + * Retrieves and validates Azure Arc environment variables for managed identity configuration. + * + * This method checks for IDENTITY_ENDPOINT and IMDS_ENDPOINT environment variables. + * If either is missing, it attempts to detect the Azure Arc environment by checking for + * the HIMDS executable at platform-specific paths. On successful detection, it returns + * the default identity endpoint and a helper string indicating file-based detection. + * + * @returns An array containing [identityEndpoint, imdsEndpoint] where both values are + * strings if Azure Arc is available, or undefined if not available. + */ + static getEnvironmentVariables() { + let identityEndpoint = process.env[ManagedIdentityEnvironmentVariableNames.IDENTITY_ENDPOINT]; + let imdsEndpoint = process.env[ManagedIdentityEnvironmentVariableNames.IMDS_ENDPOINT]; + // if either of the identity or imds endpoints are undefined, check if the himds executable exists + if (!identityEndpoint || !imdsEndpoint) { + // get the expected Windows or Linux file path of the himds executable + const fileDetectionPath = AZURE_ARC_FILE_DETECTION[process.platform]; + try { + /* + * check if the himds executable exists and its permissions allow it to be read + * returns undefined if true, throws an error otherwise + */ + (0,external_fs_.accessSync)(fileDetectionPath, external_fs_.constants.F_OK | external_fs_.constants.R_OK); + identityEndpoint = DEFAULT_AZURE_ARC_IDENTITY_ENDPOINT; + imdsEndpoint = HIMDS_EXECUTABLE_HELPER_STRING; + } + catch (err) { + /* + * do nothing + * accessSync returns undefined on success, and throws an error on failure + */ + } + } + return [identityEndpoint, imdsEndpoint]; + } + /** + * Attempts to create an AzureArc managed identity source instance. + * + * Validates the Azure Arc environment by checking environment variables + * and performing file-based detection. It ensures that only system-assigned managed identities + * are supported for Azure Arc scenarios. The method performs comprehensive validation of + * endpoint URLs and logs detailed information about the detection process. + * + * @param logger - Logger instance for capturing creation and validation steps + * @param nodeStorage - Storage implementation for the managed identity source + * @param networkClient - Network client for HTTP communication + * @param cryptoProvider - Cryptographic operations provider + * @param disableInternalRetries - Whether to disable automatic retry mechanisms + * @param managedIdentityId - The managed identity configuration, must be system-assigned + * + * @returns AzureArc instance if the environment supports Azure Arc managed identity, null otherwise + * + * @throws {ManagedIdentityError} When a user-assigned managed identity is specified (not supported for Azure Arc) + */ + static tryCreate(logger, nodeStorage, networkClient, cryptoProvider, disableInternalRetries, managedIdentityId) { + const [identityEndpoint, imdsEndpoint] = AzureArc_AzureArc.getEnvironmentVariables(); + // if either of the identity or imds endpoints are undefined (even after himds file detection) + if (!identityEndpoint || !imdsEndpoint) { + logger.info(`[Managed Identity] ${Constants_ManagedIdentitySourceNames.AZURE_ARC} managed identity is unavailable through environment variables because one or both of '${ManagedIdentityEnvironmentVariableNames.IDENTITY_ENDPOINT}' and '${ManagedIdentityEnvironmentVariableNames.IMDS_ENDPOINT}' are not defined. ${Constants_ManagedIdentitySourceNames.AZURE_ARC} managed identity is also unavailable through file detection.`, ""); + return null; + } + // check if the imds endpoint is set to the default for file detection + if (imdsEndpoint === HIMDS_EXECUTABLE_HELPER_STRING) { + logger.info(`[Managed Identity] ${Constants_ManagedIdentitySourceNames.AZURE_ARC} managed identity is available through file detection. Defaulting to known ${Constants_ManagedIdentitySourceNames.AZURE_ARC} endpoint: ${DEFAULT_AZURE_ARC_IDENTITY_ENDPOINT}. Creating ${Constants_ManagedIdentitySourceNames.AZURE_ARC} managed identity.`, ""); + } + else { + // otherwise, both the identity and imds endpoints are defined without file detection; validate them + const validatedIdentityEndpoint = AzureArc_AzureArc.getValidatedEnvVariableUrlString(ManagedIdentityEnvironmentVariableNames.IDENTITY_ENDPOINT, identityEndpoint, Constants_ManagedIdentitySourceNames.AZURE_ARC, logger); + // remove trailing slash + validatedIdentityEndpoint.endsWith("/") + ? validatedIdentityEndpoint.slice(0, -1) + : validatedIdentityEndpoint; + AzureArc_AzureArc.getValidatedEnvVariableUrlString(ManagedIdentityEnvironmentVariableNames.IMDS_ENDPOINT, imdsEndpoint, Constants_ManagedIdentitySourceNames.AZURE_ARC, logger); + logger.info(`[Managed Identity] Environment variables validation passed for ${Constants_ManagedIdentitySourceNames.AZURE_ARC} managed identity. Endpoint URI: ${validatedIdentityEndpoint}. Creating ${Constants_ManagedIdentitySourceNames.AZURE_ARC} managed identity.`, ""); + } + if (managedIdentityId.idType !== Constants_ManagedIdentityIdType.SYSTEM_ASSIGNED) { + throw ManagedIdentityError_createManagedIdentityError(unableToCreateAzureArc); + } + return new AzureArc_AzureArc(logger, nodeStorage, networkClient, cryptoProvider, disableInternalRetries, identityEndpoint); + } + /** + * Creates a properly formatted HTTP request for acquiring tokens from the Azure Arc identity endpoint. + * + * This method constructs a GET request to the Azure Arc HIMDS endpoint with the required metadata header + * and query parameters. The endpoint URL is normalized to use 127.0.0.1 instead of localhost for + * consistency. Additional body parameters are calculated by the base class during token acquisition. + * + * @param resource - The target resource/scope for which to request an access token (e.g., "https://graph.microsoft.com/.default") + * + * @returns A configured ManagedIdentityRequestParameters object ready for network execution + */ + createRequest(resource) { + const request = new ManagedIdentityRequestParameters(Constants_HttpMethod.GET, this.identityEndpoint.replace("localhost", "127.0.0.1")); + request.headers[ManagedIdentityHeaders.METADATA_HEADER_NAME] = "true"; + request.queryParameters[ManagedIdentityQueryParameters.API_VERSION] = + ARC_API_VERSION; + request.queryParameters[ManagedIdentityQueryParameters.RESOURCE] = + resource; + // bodyParameters calculated in BaseManagedIdentity.acquireTokenWithManagedIdentity + return request; + } + /** + * Processes the server response and handles Azure Arc-specific authentication challenges. + * + * This method implements the Azure Arc authentication flow which may require reading a secret file + * for authorization. When the initial request returns HTTP 401 Unauthorized, it extracts the file + * path from the WWW-Authenticate header, validates the file location and size, reads the secret, + * and retries the request with Basic authentication. The method includes comprehensive security + * validations to prevent path traversal and ensure file integrity. + * + * @param originalResponse - The initial HTTP response from the identity endpoint + * @param networkClient - Network client for making the retry request if needed + * @param networkRequest - The original request parameters (modified with auth header for retry) + * @param networkRequestOptions - Additional options for network requests + * + * @returns A promise that resolves to the server token response with access token and metadata + * + * @throws {ManagedIdentityError} When: + * - WWW-Authenticate header is missing or has unsupported format + * - Platform is not supported (not Windows or Linux) + * - Secret file has invalid extension (not .key) + * - Secret file path doesn't match expected platform path + * - Secret file cannot be read or is too large (>4096 bytes) + * @throws {ClientAuthError} When network errors occur during retry request + */ + async getServerTokenResponseAsync(originalResponse, networkClient, networkRequest, networkRequestOptions) { + let retryResponse; + if (originalResponse.status === HTTP_UNAUTHORIZED) { + const wwwAuthHeader = originalResponse.headers["www-authenticate"]; + if (!wwwAuthHeader) { + throw ManagedIdentityError_createManagedIdentityError(wwwAuthenticateHeaderMissing); + } + if (!wwwAuthHeader.includes("Basic realm=")) { + throw ManagedIdentityError_createManagedIdentityError(wwwAuthenticateHeaderUnsupportedFormat); + } + const secretFilePath = wwwAuthHeader.split("Basic realm=")[1]; + // throw an error if the managed identity application is not being run on Windows or Linux + if (!SUPPORTED_AZURE_ARC_PLATFORMS.hasOwnProperty(process.platform)) { + throw ManagedIdentityError_createManagedIdentityError(platformNotSupported); + } + // get the expected Windows or Linux file path + const expectedSecretFilePath = SUPPORTED_AZURE_ARC_PLATFORMS[process.platform]; + // throw an error if the file in the file path is not a .key file + const fileName = external_path_.basename(secretFilePath); + if (!fileName.endsWith(".key")) { + throw ManagedIdentityError_createManagedIdentityError(invalidFileExtension); + } + /* + * throw an error if the file path from the www-authenticate header does not match the + * expected file path for the platform (Windows or Linux) the managed identity application + * is running on + */ + if (expectedSecretFilePath + fileName !== secretFilePath) { + throw ManagedIdentityError_createManagedIdentityError(invalidFilePath); + } + let secretFileSize; + // attempt to get the secret file's size, in bytes + try { + secretFileSize = await (0,external_fs_.statSync)(secretFilePath).size; + } + catch (e) { + throw ManagedIdentityError_createManagedIdentityError(unableToReadSecretFile); + } + // throw an error if the secret file's size is greater than 4096 bytes + if (secretFileSize > AZURE_ARC_SECRET_FILE_MAX_SIZE_BYTES) { + throw ManagedIdentityError_createManagedIdentityError(invalidSecret); + } + // attempt to read the contents of the secret file + let secret; + try { + secret = (0,external_fs_.readFileSync)(secretFilePath, EncodingTypes.UTF8); + } + catch (e) { + throw ManagedIdentityError_createManagedIdentityError(unableToReadSecretFile); + } + const authHeaderValue = `Basic ${secret}`; + this.logger.info(`[Managed Identity] Adding authorization header to the request.`, ""); + networkRequest.headers[ManagedIdentityHeaders.AUTHORIZATION_HEADER_NAME] = authHeaderValue; + try { + retryResponse = + await networkClient.sendGetRequestAsync(networkRequest.computeUri(), networkRequestOptions); + } + catch (error) { + if (error instanceof AuthError) { + throw error; + } + else { + throw ClientAuthError_createClientAuthError(networkError); + } + } + } + return this.getServerTokenResponse(retryResponse || originalResponse); + } } @@ -57425,97 +57425,97 @@ class AzureArc_AzureArc extends BaseManagedIdentitySource { -/* - * Copyright (c) Microsoft Corporation. All rights reserved. - * Licensed under the MIT License. - */ -/** - * Azure Cloud Shell managed identity source implementation. - * - * This class handles authentication for applications running in Azure Cloud Shell environment. - * Cloud Shell provides a browser-accessible shell for managing Azure resources and includes - * a pre-configured managed identity for authentication. - * - * Original source of code: https://github.com/Azure/azure-sdk-for-net/blob/main/sdk/identity/Azure.Identity/src/CloudShellManagedIdentitySource.cs - */ -class CloudShell_CloudShell extends BaseManagedIdentitySource { - /** - * Creates a new CloudShell managed identity source instance. - * - * @param logger - Logger instance for diagnostic logging - * @param nodeStorage - Node.js storage implementation for caching - * @param networkClient - HTTP client for making requests to the managed identity endpoint - * @param cryptoProvider - Cryptographic operations provider - * @param disableInternalRetries - Whether to disable automatic retry logic for failed requests - * @param msiEndpoint - The MSI endpoint URL obtained from environment variables - */ - constructor(logger, nodeStorage, networkClient, cryptoProvider, disableInternalRetries, msiEndpoint) { - super(logger, nodeStorage, networkClient, cryptoProvider, disableInternalRetries); - this.msiEndpoint = msiEndpoint; - } - /** - * Retrieves the required environment variables for Cloud Shell managed identity. - * - * Cloud Shell requires the MSI_ENDPOINT environment variable to be set, which - * contains the URL of the managed identity service endpoint. - * - * @returns An array containing the MSI_ENDPOINT environment variable value (or undefined if not set) - */ - static getEnvironmentVariables() { - const msiEndpoint = process.env[ManagedIdentityEnvironmentVariableNames.MSI_ENDPOINT]; - return [msiEndpoint]; - } - /** - * Attempts to create a CloudShell managed identity source instance. - * - * This method validates that the required environment variables are present and - * creates a CloudShell instance if the environment is properly configured. - * Cloud Shell only supports system-assigned managed identities. - * - * @param logger - Logger instance for diagnostic logging - * @param nodeStorage - Node.js storage implementation for caching - * @param networkClient - HTTP client for making requests - * @param cryptoProvider - Cryptographic operations provider - * @param disableInternalRetries - Whether to disable automatic retry logic - * @param managedIdentityId - The managed identity configuration (must be system-assigned) - * - * @returns A CloudShell instance if the environment is valid, null otherwise - * - * @throws {ManagedIdentityError} When a user-assigned managed identity is requested, - * as Cloud Shell only supports system-assigned identities - */ - static tryCreate(logger, nodeStorage, networkClient, cryptoProvider, disableInternalRetries, managedIdentityId) { - const [msiEndpoint] = CloudShell_CloudShell.getEnvironmentVariables(); - // if the msi endpoint environment variable is undefined, this MSI provider is unavailable. - if (!msiEndpoint) { - logger.info(`[Managed Identity] ${Constants_ManagedIdentitySourceNames.CLOUD_SHELL} managed identity is unavailable because the '${ManagedIdentityEnvironmentVariableNames.MSI_ENDPOINT} environment variable is not defined.`, ""); - return null; - } - const validatedMsiEndpoint = CloudShell_CloudShell.getValidatedEnvVariableUrlString(ManagedIdentityEnvironmentVariableNames.MSI_ENDPOINT, msiEndpoint, Constants_ManagedIdentitySourceNames.CLOUD_SHELL, logger); - logger.info(`[Managed Identity] Environment variable validation passed for ${Constants_ManagedIdentitySourceNames.CLOUD_SHELL} managed identity. Endpoint URI: ${validatedMsiEndpoint}. Creating ${Constants_ManagedIdentitySourceNames.CLOUD_SHELL} managed identity.`, ""); - if (managedIdentityId.idType !== Constants_ManagedIdentityIdType.SYSTEM_ASSIGNED) { - throw ManagedIdentityError_createManagedIdentityError(unableToCreateCloudShell); - } - return new CloudShell_CloudShell(logger, nodeStorage, networkClient, cryptoProvider, disableInternalRetries, msiEndpoint); - } - /** - * Creates an HTTP request to acquire an access token from the Cloud Shell managed identity endpoint. - * - * This method constructs a POST request to the MSI endpoint with the required headers and - * body parameters for Cloud Shell authentication. The request includes the target resource - * for which the access token is being requested. - * - * @param resource - The target resource/scope for which to request an access token (e.g., "https://graph.microsoft.com/.default") - * - * @returns A configured ManagedIdentityRequestParameters object ready for network execution - */ - createRequest(resource) { - const request = new ManagedIdentityRequestParameters(Constants_HttpMethod.POST, this.msiEndpoint); - request.headers[ManagedIdentityHeaders.METADATA_HEADER_NAME] = "true"; - request.bodyParameters[ManagedIdentityQueryParameters.RESOURCE] = - resource; - return request; - } +/* + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. + */ +/** + * Azure Cloud Shell managed identity source implementation. + * + * This class handles authentication for applications running in Azure Cloud Shell environment. + * Cloud Shell provides a browser-accessible shell for managing Azure resources and includes + * a pre-configured managed identity for authentication. + * + * Original source of code: https://github.com/Azure/azure-sdk-for-net/blob/main/sdk/identity/Azure.Identity/src/CloudShellManagedIdentitySource.cs + */ +class CloudShell_CloudShell extends BaseManagedIdentitySource { + /** + * Creates a new CloudShell managed identity source instance. + * + * @param logger - Logger instance for diagnostic logging + * @param nodeStorage - Node.js storage implementation for caching + * @param networkClient - HTTP client for making requests to the managed identity endpoint + * @param cryptoProvider - Cryptographic operations provider + * @param disableInternalRetries - Whether to disable automatic retry logic for failed requests + * @param msiEndpoint - The MSI endpoint URL obtained from environment variables + */ + constructor(logger, nodeStorage, networkClient, cryptoProvider, disableInternalRetries, msiEndpoint) { + super(logger, nodeStorage, networkClient, cryptoProvider, disableInternalRetries); + this.msiEndpoint = msiEndpoint; + } + /** + * Retrieves the required environment variables for Cloud Shell managed identity. + * + * Cloud Shell requires the MSI_ENDPOINT environment variable to be set, which + * contains the URL of the managed identity service endpoint. + * + * @returns An array containing the MSI_ENDPOINT environment variable value (or undefined if not set) + */ + static getEnvironmentVariables() { + const msiEndpoint = process.env[ManagedIdentityEnvironmentVariableNames.MSI_ENDPOINT]; + return [msiEndpoint]; + } + /** + * Attempts to create a CloudShell managed identity source instance. + * + * This method validates that the required environment variables are present and + * creates a CloudShell instance if the environment is properly configured. + * Cloud Shell only supports system-assigned managed identities. + * + * @param logger - Logger instance for diagnostic logging + * @param nodeStorage - Node.js storage implementation for caching + * @param networkClient - HTTP client for making requests + * @param cryptoProvider - Cryptographic operations provider + * @param disableInternalRetries - Whether to disable automatic retry logic + * @param managedIdentityId - The managed identity configuration (must be system-assigned) + * + * @returns A CloudShell instance if the environment is valid, null otherwise + * + * @throws {ManagedIdentityError} When a user-assigned managed identity is requested, + * as Cloud Shell only supports system-assigned identities + */ + static tryCreate(logger, nodeStorage, networkClient, cryptoProvider, disableInternalRetries, managedIdentityId) { + const [msiEndpoint] = CloudShell_CloudShell.getEnvironmentVariables(); + // if the msi endpoint environment variable is undefined, this MSI provider is unavailable. + if (!msiEndpoint) { + logger.info(`[Managed Identity] ${Constants_ManagedIdentitySourceNames.CLOUD_SHELL} managed identity is unavailable because the '${ManagedIdentityEnvironmentVariableNames.MSI_ENDPOINT} environment variable is not defined.`, ""); + return null; + } + const validatedMsiEndpoint = CloudShell_CloudShell.getValidatedEnvVariableUrlString(ManagedIdentityEnvironmentVariableNames.MSI_ENDPOINT, msiEndpoint, Constants_ManagedIdentitySourceNames.CLOUD_SHELL, logger); + logger.info(`[Managed Identity] Environment variable validation passed for ${Constants_ManagedIdentitySourceNames.CLOUD_SHELL} managed identity. Endpoint URI: ${validatedMsiEndpoint}. Creating ${Constants_ManagedIdentitySourceNames.CLOUD_SHELL} managed identity.`, ""); + if (managedIdentityId.idType !== Constants_ManagedIdentityIdType.SYSTEM_ASSIGNED) { + throw ManagedIdentityError_createManagedIdentityError(unableToCreateCloudShell); + } + return new CloudShell_CloudShell(logger, nodeStorage, networkClient, cryptoProvider, disableInternalRetries, msiEndpoint); + } + /** + * Creates an HTTP request to acquire an access token from the Cloud Shell managed identity endpoint. + * + * This method constructs a POST request to the MSI endpoint with the required headers and + * body parameters for Cloud Shell authentication. The request includes the target resource + * for which the access token is being requested. + * + * @param resource - The target resource/scope for which to request an access token (e.g., "https://graph.microsoft.com/.default") + * + * @returns A configured ManagedIdentityRequestParameters object ready for network execution + */ + createRequest(resource) { + const request = new ManagedIdentityRequestParameters(Constants_HttpMethod.POST, this.msiEndpoint); + request.headers[ManagedIdentityHeaders.METADATA_HEADER_NAME] = "true"; + request.bodyParameters[ManagedIdentityQueryParameters.RESOURCE] = + resource; + return request; + } } @@ -57524,40 +57524,40 @@ class CloudShell_CloudShell extends BaseManagedIdentitySource { ;// CONCATENATED MODULE: ./node_modules/@azure/msal-node/dist/retry/ExponentialRetryStrategy.mjs /*! @azure/msal-node v5.1.0 2026-03-13 */ -/* - * Copyright (c) Microsoft Corporation. All rights reserved. - * Licensed under the MIT License. - */ -class ExponentialRetryStrategy { - constructor(minExponentialBackoff, maxExponentialBackoff, exponentialDeltaBackoff) { - this.minExponentialBackoff = minExponentialBackoff; - this.maxExponentialBackoff = maxExponentialBackoff; - this.exponentialDeltaBackoff = exponentialDeltaBackoff; - } - /** - * Calculates the exponential delay based on the current retry attempt. - * - * @param {number} currentRetry - The current retry attempt number. - * @returns {number} - The calculated exponential delay in milliseconds. - * - * The delay is calculated using the formula: - * - If `currentRetry` is 0, it returns the minimum backoff time. - * - Otherwise, it calculates the delay as the minimum of: - * - `(2^(currentRetry - 1)) * deltaBackoff` - * - `maxBackoff` - * - * This ensures that the delay increases exponentially with each retry attempt, - * but does not exceed the maximum backoff time. - */ - calculateDelay(currentRetry) { - // Attempt 1 - if (currentRetry === 0) { - return this.minExponentialBackoff; - } - // Attempt 2+ - const exponentialDelay = Math.min(Math.pow(2, currentRetry - 1) * this.exponentialDeltaBackoff, this.maxExponentialBackoff); - return exponentialDelay; - } +/* + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. + */ +class ExponentialRetryStrategy { + constructor(minExponentialBackoff, maxExponentialBackoff, exponentialDeltaBackoff) { + this.minExponentialBackoff = minExponentialBackoff; + this.maxExponentialBackoff = maxExponentialBackoff; + this.exponentialDeltaBackoff = exponentialDeltaBackoff; + } + /** + * Calculates the exponential delay based on the current retry attempt. + * + * @param {number} currentRetry - The current retry attempt number. + * @returns {number} - The calculated exponential delay in milliseconds. + * + * The delay is calculated using the formula: + * - If `currentRetry` is 0, it returns the minimum backoff time. + * - Otherwise, it calculates the delay as the minimum of: + * - `(2^(currentRetry - 1)) * deltaBackoff` + * - `maxBackoff` + * + * This ensures that the delay increases exponentially with each retry attempt, + * but does not exceed the maximum backoff time. + */ + calculateDelay(currentRetry) { + // Attempt 1 + if (currentRetry === 0) { + return this.minExponentialBackoff; + } + // Attempt 2+ + const exponentialDelay = Math.min(Math.pow(2, currentRetry - 1) * this.exponentialDeltaBackoff, this.maxExponentialBackoff); + return exponentialDelay; + } } @@ -57569,87 +57569,87 @@ class ExponentialRetryStrategy { -/* - * Copyright (c) Microsoft Corporation. All rights reserved. - * Licensed under the MIT License. - */ -const HTTP_STATUS_400_CODES_FOR_EXPONENTIAL_STRATEGY = [ - HTTP_NOT_FOUND, - HTTP_REQUEST_TIMEOUT, - HTTP_GONE, - HTTP_TOO_MANY_REQUESTS, -]; -const EXPONENTIAL_STRATEGY_NUM_RETRIES = 3; -const LINEAR_STRATEGY_NUM_RETRIES = 7; -const MIN_EXPONENTIAL_BACKOFF_MS = 1000; -const MAX_EXPONENTIAL_BACKOFF_MS = 4000; -const EXPONENTIAL_DELTA_BACKOFF_MS = 2000; -const HTTP_STATUS_GONE_RETRY_AFTER_MS = 10 * 1000; // 10 seconds -class ImdsRetryPolicy { - constructor() { - this.exponentialRetryStrategy = new ExponentialRetryStrategy(ImdsRetryPolicy.MIN_EXPONENTIAL_BACKOFF_MS, ImdsRetryPolicy.MAX_EXPONENTIAL_BACKOFF_MS, ImdsRetryPolicy.EXPONENTIAL_DELTA_BACKOFF_MS); - } - /* - * these are defined here as static variables despite being defined as constants outside of the - * class because they need to be overridden in the unit tests so that the unit tests run faster - */ - static get MIN_EXPONENTIAL_BACKOFF_MS() { - return MIN_EXPONENTIAL_BACKOFF_MS; - } - static get MAX_EXPONENTIAL_BACKOFF_MS() { - return MAX_EXPONENTIAL_BACKOFF_MS; - } - static get EXPONENTIAL_DELTA_BACKOFF_MS() { - return EXPONENTIAL_DELTA_BACKOFF_MS; - } - static get HTTP_STATUS_GONE_RETRY_AFTER_MS() { - return HTTP_STATUS_GONE_RETRY_AFTER_MS; - } - set isNewRequest(value) { - this._isNewRequest = value; - } - /** - * Pauses execution for a calculated delay before retrying a request. - * - * @param httpStatusCode - The HTTP status code of the response. - * @param currentRetry - The current retry attempt number. - * @param retryAfterHeader - The value of the "retry-after" header from the response. - * @returns A promise that resolves to a boolean indicating whether a retry should be attempted. - */ - async pauseForRetry(httpStatusCode, currentRetry, logger) { - if (this._isNewRequest) { - this._isNewRequest = false; - // calculate the maxRetries based on the status code, once per request - this.maxRetries = - httpStatusCode === HTTP_GONE - ? LINEAR_STRATEGY_NUM_RETRIES - : EXPONENTIAL_STRATEGY_NUM_RETRIES; - } - /** - * (status code is one of the retriable 400 status code - * or - * status code is >= 500 and <= 599) - * and - * current count of retries is less than the max number of retries - */ - if ((HTTP_STATUS_400_CODES_FOR_EXPONENTIAL_STRATEGY.includes(httpStatusCode) || - (httpStatusCode >= HTTP_SERVER_ERROR_RANGE_START && - httpStatusCode <= HTTP_SERVER_ERROR_RANGE_END && - currentRetry < this.maxRetries)) && - currentRetry < this.maxRetries) { - const retryAfterDelay = httpStatusCode === HTTP_GONE - ? ImdsRetryPolicy.HTTP_STATUS_GONE_RETRY_AFTER_MS - : this.exponentialRetryStrategy.calculateDelay(currentRetry); - logger.verbose(`Retrying request in ${retryAfterDelay}ms (retry attempt: ${currentRetry + 1})`, ""); - // pause execution for the calculated delay - await new Promise((resolve) => { - return setTimeout(resolve, retryAfterDelay); - }); - return true; - } - // if the status code is not retriable or max retries have been reached, do not retry - return false; - } +/* + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. + */ +const HTTP_STATUS_400_CODES_FOR_EXPONENTIAL_STRATEGY = [ + HTTP_NOT_FOUND, + HTTP_REQUEST_TIMEOUT, + HTTP_GONE, + HTTP_TOO_MANY_REQUESTS, +]; +const EXPONENTIAL_STRATEGY_NUM_RETRIES = 3; +const LINEAR_STRATEGY_NUM_RETRIES = 7; +const MIN_EXPONENTIAL_BACKOFF_MS = 1000; +const MAX_EXPONENTIAL_BACKOFF_MS = 4000; +const EXPONENTIAL_DELTA_BACKOFF_MS = 2000; +const HTTP_STATUS_GONE_RETRY_AFTER_MS = 10 * 1000; // 10 seconds +class ImdsRetryPolicy { + constructor() { + this.exponentialRetryStrategy = new ExponentialRetryStrategy(ImdsRetryPolicy.MIN_EXPONENTIAL_BACKOFF_MS, ImdsRetryPolicy.MAX_EXPONENTIAL_BACKOFF_MS, ImdsRetryPolicy.EXPONENTIAL_DELTA_BACKOFF_MS); + } + /* + * these are defined here as static variables despite being defined as constants outside of the + * class because they need to be overridden in the unit tests so that the unit tests run faster + */ + static get MIN_EXPONENTIAL_BACKOFF_MS() { + return MIN_EXPONENTIAL_BACKOFF_MS; + } + static get MAX_EXPONENTIAL_BACKOFF_MS() { + return MAX_EXPONENTIAL_BACKOFF_MS; + } + static get EXPONENTIAL_DELTA_BACKOFF_MS() { + return EXPONENTIAL_DELTA_BACKOFF_MS; + } + static get HTTP_STATUS_GONE_RETRY_AFTER_MS() { + return HTTP_STATUS_GONE_RETRY_AFTER_MS; + } + set isNewRequest(value) { + this._isNewRequest = value; + } + /** + * Pauses execution for a calculated delay before retrying a request. + * + * @param httpStatusCode - The HTTP status code of the response. + * @param currentRetry - The current retry attempt number. + * @param retryAfterHeader - The value of the "retry-after" header from the response. + * @returns A promise that resolves to a boolean indicating whether a retry should be attempted. + */ + async pauseForRetry(httpStatusCode, currentRetry, logger) { + if (this._isNewRequest) { + this._isNewRequest = false; + // calculate the maxRetries based on the status code, once per request + this.maxRetries = + httpStatusCode === HTTP_GONE + ? LINEAR_STRATEGY_NUM_RETRIES + : EXPONENTIAL_STRATEGY_NUM_RETRIES; + } + /** + * (status code is one of the retriable 400 status code + * or + * status code is >= 500 and <= 599) + * and + * current count of retries is less than the max number of retries + */ + if ((HTTP_STATUS_400_CODES_FOR_EXPONENTIAL_STRATEGY.includes(httpStatusCode) || + (httpStatusCode >= HTTP_SERVER_ERROR_RANGE_START && + httpStatusCode <= HTTP_SERVER_ERROR_RANGE_END && + currentRetry < this.maxRetries)) && + currentRetry < this.maxRetries) { + const retryAfterDelay = httpStatusCode === HTTP_GONE + ? ImdsRetryPolicy.HTTP_STATUS_GONE_RETRY_AFTER_MS + : this.exponentialRetryStrategy.calculateDelay(currentRetry); + logger.verbose(`Retrying request in ${retryAfterDelay}ms (retry attempt: ${currentRetry + 1})`, ""); + // pause execution for the calculated delay + await new Promise((resolve) => { + return setTimeout(resolve, retryAfterDelay); + }); + return true; + } + // if the status code is not retriable or max retries have been reached, do not retry + return false; + } } @@ -57663,103 +57663,103 @@ class ImdsRetryPolicy { -/* - * Copyright (c) Microsoft Corporation. All rights reserved. - * Licensed under the MIT License. - */ -// Documentation for IMDS is available at https://docs.microsoft.com/azure/active-directory/managed-identities-azure-resources/how-to-use-vm-token#get-a-token-using-http -const IMDS_TOKEN_PATH = "/metadata/identity/oauth2/token"; -const DEFAULT_IMDS_ENDPOINT = `http://169.254.169.254${IMDS_TOKEN_PATH}`; -const IMDS_API_VERSION = "2018-02-01"; -/** - * Managed Identity source implementation for Azure Instance Metadata Service (IMDS). - * - * IMDS is available on Azure Virtual Machines and Virtual Machine Scale Sets and provides - * a REST endpoint to obtain OAuth tokens for managed identities. This implementation - * handles both system-assigned and user-assigned managed identities. - * - * Original source of code: https://github.com/Azure/azure-sdk-for-net/blob/main/sdk/identity/Azure.Identity/src/ImdsManagedIdentitySource.cs - */ -class Imds_Imds extends BaseManagedIdentitySource { - /** - * Constructs an Imds instance with the specified configuration. - * - * @param logger - Logger instance for recording debug information and errors - * @param nodeStorage - NodeStorage instance used for token caching operations - * @param networkClient - Network client implementation for making HTTP requests to IMDS - * @param cryptoProvider - CryptoProvider for generating correlation IDs and other cryptographic operations - * @param disableInternalRetries - When true, disables the built-in retry logic for IMDS requests - * @param identityEndpoint - The complete IMDS endpoint URL including the token path - */ - constructor(logger, nodeStorage, networkClient, cryptoProvider, disableInternalRetries, identityEndpoint) { - super(logger, nodeStorage, networkClient, cryptoProvider, disableInternalRetries); - this.identityEndpoint = identityEndpoint; - } - /** - * Creates an Imds instance with the appropriate endpoint configuration. - * - * This method checks for the presence of the AZURE_POD_IDENTITY_AUTHORITY_HOST environment - * variable, which is used in Azure Kubernetes Service (AKS) environments with Azure AD - * Pod Identity. If found, it uses that endpoint; otherwise, it falls back to the standard - * IMDS endpoint (169.254.169.254). - * - * @param logger - Logger instance for recording endpoint discovery and validation - * @param nodeStorage - NodeStorage instance for token caching - * @param networkClient - Network client for HTTP requests - * @param cryptoProvider - CryptoProvider for cryptographic operations - * @param disableInternalRetries - Whether to disable built-in retry logic - * - * @returns A configured Imds instance ready to make token requests - */ - static tryCreate(logger, nodeStorage, networkClient, cryptoProvider, disableInternalRetries) { - let validatedIdentityEndpoint; - if (process.env[ManagedIdentityEnvironmentVariableNames - .AZURE_POD_IDENTITY_AUTHORITY_HOST]) { - logger.info(`[Managed Identity] Environment variable ${ManagedIdentityEnvironmentVariableNames.AZURE_POD_IDENTITY_AUTHORITY_HOST} for ${Constants_ManagedIdentitySourceNames.IMDS} returned endpoint: ${process.env[ManagedIdentityEnvironmentVariableNames - .AZURE_POD_IDENTITY_AUTHORITY_HOST]}`, ""); - validatedIdentityEndpoint = Imds_Imds.getValidatedEnvVariableUrlString(ManagedIdentityEnvironmentVariableNames.AZURE_POD_IDENTITY_AUTHORITY_HOST, `${process.env[ManagedIdentityEnvironmentVariableNames - .AZURE_POD_IDENTITY_AUTHORITY_HOST]}${IMDS_TOKEN_PATH}`, Constants_ManagedIdentitySourceNames.IMDS, logger); - } - else { - logger.info(`[Managed Identity] Unable to find ${ManagedIdentityEnvironmentVariableNames.AZURE_POD_IDENTITY_AUTHORITY_HOST} environment variable for ${Constants_ManagedIdentitySourceNames.IMDS}, using the default endpoint.`, ""); - validatedIdentityEndpoint = DEFAULT_IMDS_ENDPOINT; - } - return new Imds_Imds(logger, nodeStorage, networkClient, cryptoProvider, disableInternalRetries, validatedIdentityEndpoint); - } - /** - * Creates a properly configured HTTP request for acquiring an access token from IMDS. - * - * This method builds a complete request object with all necessary headers, query parameters, - * and retry policies required by the Azure Instance Metadata Service. - * - * Key request components: - * - HTTP GET method to the IMDS token endpoint - * - Metadata header set to "true" (required by IMDS) - * - API version parameter (currently "2018-02-01") - * - Resource parameter specifying the target audience - * - Identity-specific parameters for user-assigned managed identities - * - IMDS-specific retry policy - * - * @param resource - The target resource/scope for which to request an access token (e.g., "https://graph.microsoft.com/.default") - * @param managedIdentityId - The managed identity configuration specifying whether to use system-assigned or user-assigned identity - * - * @returns A configured ManagedIdentityRequestParameters object ready for network execution - */ - createRequest(resource, managedIdentityId) { - const request = new ManagedIdentityRequestParameters(Constants_HttpMethod.GET, this.identityEndpoint); - request.headers[ManagedIdentityHeaders.METADATA_HEADER_NAME] = "true"; - request.queryParameters[ManagedIdentityQueryParameters.API_VERSION] = - IMDS_API_VERSION; - request.queryParameters[ManagedIdentityQueryParameters.RESOURCE] = - resource; - if (managedIdentityId.idType !== Constants_ManagedIdentityIdType.SYSTEM_ASSIGNED) { - request.queryParameters[this.getManagedIdentityUserAssignedIdQueryParameterKey(managedIdentityId.idType, true // indicates source is IMDS - )] = managedIdentityId.id; - } - // The bodyParameters are calculated in BaseManagedIdentity.acquireTokenWithManagedIdentity. - request.retryPolicy = new ImdsRetryPolicy(); - return request; - } +/* + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. + */ +// Documentation for IMDS is available at https://docs.microsoft.com/azure/active-directory/managed-identities-azure-resources/how-to-use-vm-token#get-a-token-using-http +const IMDS_TOKEN_PATH = "/metadata/identity/oauth2/token"; +const DEFAULT_IMDS_ENDPOINT = `http://169.254.169.254${IMDS_TOKEN_PATH}`; +const IMDS_API_VERSION = "2018-02-01"; +/** + * Managed Identity source implementation for Azure Instance Metadata Service (IMDS). + * + * IMDS is available on Azure Virtual Machines and Virtual Machine Scale Sets and provides + * a REST endpoint to obtain OAuth tokens for managed identities. This implementation + * handles both system-assigned and user-assigned managed identities. + * + * Original source of code: https://github.com/Azure/azure-sdk-for-net/blob/main/sdk/identity/Azure.Identity/src/ImdsManagedIdentitySource.cs + */ +class Imds_Imds extends BaseManagedIdentitySource { + /** + * Constructs an Imds instance with the specified configuration. + * + * @param logger - Logger instance for recording debug information and errors + * @param nodeStorage - NodeStorage instance used for token caching operations + * @param networkClient - Network client implementation for making HTTP requests to IMDS + * @param cryptoProvider - CryptoProvider for generating correlation IDs and other cryptographic operations + * @param disableInternalRetries - When true, disables the built-in retry logic for IMDS requests + * @param identityEndpoint - The complete IMDS endpoint URL including the token path + */ + constructor(logger, nodeStorage, networkClient, cryptoProvider, disableInternalRetries, identityEndpoint) { + super(logger, nodeStorage, networkClient, cryptoProvider, disableInternalRetries); + this.identityEndpoint = identityEndpoint; + } + /** + * Creates an Imds instance with the appropriate endpoint configuration. + * + * This method checks for the presence of the AZURE_POD_IDENTITY_AUTHORITY_HOST environment + * variable, which is used in Azure Kubernetes Service (AKS) environments with Azure AD + * Pod Identity. If found, it uses that endpoint; otherwise, it falls back to the standard + * IMDS endpoint (169.254.169.254). + * + * @param logger - Logger instance for recording endpoint discovery and validation + * @param nodeStorage - NodeStorage instance for token caching + * @param networkClient - Network client for HTTP requests + * @param cryptoProvider - CryptoProvider for cryptographic operations + * @param disableInternalRetries - Whether to disable built-in retry logic + * + * @returns A configured Imds instance ready to make token requests + */ + static tryCreate(logger, nodeStorage, networkClient, cryptoProvider, disableInternalRetries) { + let validatedIdentityEndpoint; + if (process.env[ManagedIdentityEnvironmentVariableNames + .AZURE_POD_IDENTITY_AUTHORITY_HOST]) { + logger.info(`[Managed Identity] Environment variable ${ManagedIdentityEnvironmentVariableNames.AZURE_POD_IDENTITY_AUTHORITY_HOST} for ${Constants_ManagedIdentitySourceNames.IMDS} returned endpoint: ${process.env[ManagedIdentityEnvironmentVariableNames + .AZURE_POD_IDENTITY_AUTHORITY_HOST]}`, ""); + validatedIdentityEndpoint = Imds_Imds.getValidatedEnvVariableUrlString(ManagedIdentityEnvironmentVariableNames.AZURE_POD_IDENTITY_AUTHORITY_HOST, `${process.env[ManagedIdentityEnvironmentVariableNames + .AZURE_POD_IDENTITY_AUTHORITY_HOST]}${IMDS_TOKEN_PATH}`, Constants_ManagedIdentitySourceNames.IMDS, logger); + } + else { + logger.info(`[Managed Identity] Unable to find ${ManagedIdentityEnvironmentVariableNames.AZURE_POD_IDENTITY_AUTHORITY_HOST} environment variable for ${Constants_ManagedIdentitySourceNames.IMDS}, using the default endpoint.`, ""); + validatedIdentityEndpoint = DEFAULT_IMDS_ENDPOINT; + } + return new Imds_Imds(logger, nodeStorage, networkClient, cryptoProvider, disableInternalRetries, validatedIdentityEndpoint); + } + /** + * Creates a properly configured HTTP request for acquiring an access token from IMDS. + * + * This method builds a complete request object with all necessary headers, query parameters, + * and retry policies required by the Azure Instance Metadata Service. + * + * Key request components: + * - HTTP GET method to the IMDS token endpoint + * - Metadata header set to "true" (required by IMDS) + * - API version parameter (currently "2018-02-01") + * - Resource parameter specifying the target audience + * - Identity-specific parameters for user-assigned managed identities + * - IMDS-specific retry policy + * + * @param resource - The target resource/scope for which to request an access token (e.g., "https://graph.microsoft.com/.default") + * @param managedIdentityId - The managed identity configuration specifying whether to use system-assigned or user-assigned identity + * + * @returns A configured ManagedIdentityRequestParameters object ready for network execution + */ + createRequest(resource, managedIdentityId) { + const request = new ManagedIdentityRequestParameters(Constants_HttpMethod.GET, this.identityEndpoint); + request.headers[ManagedIdentityHeaders.METADATA_HEADER_NAME] = "true"; + request.queryParameters[ManagedIdentityQueryParameters.API_VERSION] = + IMDS_API_VERSION; + request.queryParameters[ManagedIdentityQueryParameters.RESOURCE] = + resource; + if (managedIdentityId.idType !== Constants_ManagedIdentityIdType.SYSTEM_ASSIGNED) { + request.queryParameters[this.getManagedIdentityUserAssignedIdQueryParameterKey(managedIdentityId.idType, true // indicates source is IMDS + )] = managedIdentityId.id; + } + // The bodyParameters are calculated in BaseManagedIdentity.acquireTokenWithManagedIdentity. + request.retryPolicy = new ImdsRetryPolicy(); + return request; + } } @@ -57772,118 +57772,118 @@ class Imds_Imds extends BaseManagedIdentitySource { -/* - * Copyright (c) Microsoft Corporation. All rights reserved. - * Licensed under the MIT License. - */ -const SERVICE_FABRIC_MSI_API_VERSION = "2019-07-01-preview"; -/** - * Original source of code: https://github.com/Azure/azure-sdk-for-net/blob/main/sdk/identity/Azure.Identity/src/ServiceFabricManagedIdentitySource.cs - */ -class ServiceFabric_ServiceFabric extends BaseManagedIdentitySource { - /** - * Constructs a new ServiceFabric managed identity source for acquiring tokens from Azure Service Fabric clusters. - * - * Service Fabric managed identity allows applications running in Service Fabric clusters to authenticate - * without storing credentials in code. This source handles token acquisition using the Service Fabric - * Managed Identity Token Service (MITS). - * - * @param logger - Logger instance for logging authentication events and debugging information - * @param nodeStorage - NodeStorage instance for caching tokens and other authentication artifacts - * @param networkClient - Network client for making HTTP requests to the Service Fabric identity endpoint - * @param cryptoProvider - Crypto provider for cryptographic operations like token validation - * @param disableInternalRetries - Whether to disable internal retry logic for failed requests - * @param identityEndpoint - The Service Fabric managed identity endpoint URL - * @param identityHeader - The Service Fabric managed identity secret header value - */ - constructor(logger, nodeStorage, networkClient, cryptoProvider, disableInternalRetries, identityEndpoint, identityHeader) { - super(logger, nodeStorage, networkClient, cryptoProvider, disableInternalRetries); - this.identityEndpoint = identityEndpoint; - this.identityHeader = identityHeader; - } - /** - * Retrieves the environment variables required for Service Fabric managed identity authentication. - * - * Service Fabric managed identity requires three specific environment variables to be set by the - * Service Fabric runtime: - * - IDENTITY_ENDPOINT: The endpoint URL for the Managed Identity Token Service (MITS) - * - IDENTITY_HEADER: A secret value used for authentication with the MITS - * - IDENTITY_SERVER_THUMBPRINT: The thumbprint of the MITS server certificate for secure communication - * - * @returns An array containing the identity endpoint, identity header, and identity server thumbprint values. - * Elements will be undefined if the corresponding environment variables are not set. - */ - static getEnvironmentVariables() { - const identityEndpoint = process.env[ManagedIdentityEnvironmentVariableNames.IDENTITY_ENDPOINT]; - const identityHeader = process.env[ManagedIdentityEnvironmentVariableNames.IDENTITY_HEADER]; - const identityServerThumbprint = process.env[ManagedIdentityEnvironmentVariableNames - .IDENTITY_SERVER_THUMBPRINT]; - return [identityEndpoint, identityHeader, identityServerThumbprint]; - } - /** - * Attempts to create a ServiceFabric managed identity source if the runtime environment supports it. - * - * Checks for the presence of all required Service Fabric environment variables - * and validates the endpoint URL format. It will only create a ServiceFabric instance if the application - * is running in a properly configured Service Fabric cluster with managed identity enabled. - * - * Note: User-assigned managed identities must be configured at the cluster level, not at runtime. - * This method will log a warning if a user-assigned identity is requested. - * - * @param logger - Logger instance for logging creation events and validation results - * @param nodeStorage - NodeStorage instance for caching tokens and authentication artifacts - * @param networkClient - Network client for making HTTP requests to the identity endpoint - * @param cryptoProvider - Crypto provider for cryptographic operations - * @param disableInternalRetries - Whether to disable internal retry logic for failed requests - * @param managedIdentityId - Managed identity identifier specifying system-assigned or user-assigned identity - * - * @returns A ServiceFabric instance if all environment variables are valid and present, otherwise null - */ - static tryCreate(logger, nodeStorage, networkClient, cryptoProvider, disableInternalRetries, managedIdentityId) { - const [identityEndpoint, identityHeader, identityServerThumbprint] = ServiceFabric_ServiceFabric.getEnvironmentVariables(); - if (!identityEndpoint || !identityHeader || !identityServerThumbprint) { - logger.info(`[Managed Identity] ${Constants_ManagedIdentitySourceNames.SERVICE_FABRIC} managed identity is unavailable because one or all of the '${ManagedIdentityEnvironmentVariableNames.IDENTITY_HEADER}', '${ManagedIdentityEnvironmentVariableNames.IDENTITY_ENDPOINT}' or '${ManagedIdentityEnvironmentVariableNames.IDENTITY_SERVER_THUMBPRINT}' environment variables are not defined.`, ""); - return null; - } - const validatedIdentityEndpoint = ServiceFabric_ServiceFabric.getValidatedEnvVariableUrlString(ManagedIdentityEnvironmentVariableNames.IDENTITY_ENDPOINT, identityEndpoint, Constants_ManagedIdentitySourceNames.SERVICE_FABRIC, logger); - logger.info(`[Managed Identity] Environment variables validation passed for ${Constants_ManagedIdentitySourceNames.SERVICE_FABRIC} managed identity. Endpoint URI: ${validatedIdentityEndpoint}. Creating ${Constants_ManagedIdentitySourceNames.SERVICE_FABRIC} managed identity.`, ""); - if (managedIdentityId.idType !== Constants_ManagedIdentityIdType.SYSTEM_ASSIGNED) { - logger.warning(`[Managed Identity] ${Constants_ManagedIdentitySourceNames.SERVICE_FABRIC} user assigned managed identity is configured in the cluster, not during runtime. See also: https://learn.microsoft.com/en-us/azure/service-fabric/configure-existing-cluster-enable-managed-identity-token-service.`, ""); - } - return new ServiceFabric_ServiceFabric(logger, nodeStorage, networkClient, cryptoProvider, disableInternalRetries, identityEndpoint, identityHeader); - } - /** - * Creates HTTP request parameters for acquiring an access token from the Service Fabric Managed Identity Token Service (MITS). - * - * This method constructs a properly formatted HTTP GET request that includes: - * - The secret header for authentication with MITS - * - API version parameter for the Service Fabric MSI endpoint - * - Resource parameter specifying the target Azure service - * - Optional identity parameters for user-assigned managed identities - * - * The request follows the Service Fabric managed identity protocol and uses the 2019-07-01-preview API version. - * For user-assigned identities, the appropriate query parameter (client_id, object_id, or resource_id) is added - * based on the identity type. - * - * @param resource - The Azure resource URI for which the access token is requested (e.g., "https://vault.azure.net/") - * @param managedIdentityId - The managed identity configuration specifying system-assigned or user-assigned identity details - * - * @returns A configured ManagedIdentityRequestParameters object ready for network execution - */ - createRequest(resource, managedIdentityId) { - const request = new ManagedIdentityRequestParameters(Constants_HttpMethod.GET, this.identityEndpoint); - request.headers[ManagedIdentityHeaders.ML_AND_SF_SECRET_HEADER_NAME] = - this.identityHeader; - request.queryParameters[ManagedIdentityQueryParameters.API_VERSION] = - SERVICE_FABRIC_MSI_API_VERSION; - request.queryParameters[ManagedIdentityQueryParameters.RESOURCE] = - resource; - if (managedIdentityId.idType !== Constants_ManagedIdentityIdType.SYSTEM_ASSIGNED) { - request.queryParameters[this.getManagedIdentityUserAssignedIdQueryParameterKey(managedIdentityId.idType)] = managedIdentityId.id; - } - // bodyParameters calculated in BaseManagedIdentity.acquireTokenWithManagedIdentity - return request; - } +/* + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. + */ +const SERVICE_FABRIC_MSI_API_VERSION = "2019-07-01-preview"; +/** + * Original source of code: https://github.com/Azure/azure-sdk-for-net/blob/main/sdk/identity/Azure.Identity/src/ServiceFabricManagedIdentitySource.cs + */ +class ServiceFabric_ServiceFabric extends BaseManagedIdentitySource { + /** + * Constructs a new ServiceFabric managed identity source for acquiring tokens from Azure Service Fabric clusters. + * + * Service Fabric managed identity allows applications running in Service Fabric clusters to authenticate + * without storing credentials in code. This source handles token acquisition using the Service Fabric + * Managed Identity Token Service (MITS). + * + * @param logger - Logger instance for logging authentication events and debugging information + * @param nodeStorage - NodeStorage instance for caching tokens and other authentication artifacts + * @param networkClient - Network client for making HTTP requests to the Service Fabric identity endpoint + * @param cryptoProvider - Crypto provider for cryptographic operations like token validation + * @param disableInternalRetries - Whether to disable internal retry logic for failed requests + * @param identityEndpoint - The Service Fabric managed identity endpoint URL + * @param identityHeader - The Service Fabric managed identity secret header value + */ + constructor(logger, nodeStorage, networkClient, cryptoProvider, disableInternalRetries, identityEndpoint, identityHeader) { + super(logger, nodeStorage, networkClient, cryptoProvider, disableInternalRetries); + this.identityEndpoint = identityEndpoint; + this.identityHeader = identityHeader; + } + /** + * Retrieves the environment variables required for Service Fabric managed identity authentication. + * + * Service Fabric managed identity requires three specific environment variables to be set by the + * Service Fabric runtime: + * - IDENTITY_ENDPOINT: The endpoint URL for the Managed Identity Token Service (MITS) + * - IDENTITY_HEADER: A secret value used for authentication with the MITS + * - IDENTITY_SERVER_THUMBPRINT: The thumbprint of the MITS server certificate for secure communication + * + * @returns An array containing the identity endpoint, identity header, and identity server thumbprint values. + * Elements will be undefined if the corresponding environment variables are not set. + */ + static getEnvironmentVariables() { + const identityEndpoint = process.env[ManagedIdentityEnvironmentVariableNames.IDENTITY_ENDPOINT]; + const identityHeader = process.env[ManagedIdentityEnvironmentVariableNames.IDENTITY_HEADER]; + const identityServerThumbprint = process.env[ManagedIdentityEnvironmentVariableNames + .IDENTITY_SERVER_THUMBPRINT]; + return [identityEndpoint, identityHeader, identityServerThumbprint]; + } + /** + * Attempts to create a ServiceFabric managed identity source if the runtime environment supports it. + * + * Checks for the presence of all required Service Fabric environment variables + * and validates the endpoint URL format. It will only create a ServiceFabric instance if the application + * is running in a properly configured Service Fabric cluster with managed identity enabled. + * + * Note: User-assigned managed identities must be configured at the cluster level, not at runtime. + * This method will log a warning if a user-assigned identity is requested. + * + * @param logger - Logger instance for logging creation events and validation results + * @param nodeStorage - NodeStorage instance for caching tokens and authentication artifacts + * @param networkClient - Network client for making HTTP requests to the identity endpoint + * @param cryptoProvider - Crypto provider for cryptographic operations + * @param disableInternalRetries - Whether to disable internal retry logic for failed requests + * @param managedIdentityId - Managed identity identifier specifying system-assigned or user-assigned identity + * + * @returns A ServiceFabric instance if all environment variables are valid and present, otherwise null + */ + static tryCreate(logger, nodeStorage, networkClient, cryptoProvider, disableInternalRetries, managedIdentityId) { + const [identityEndpoint, identityHeader, identityServerThumbprint] = ServiceFabric_ServiceFabric.getEnvironmentVariables(); + if (!identityEndpoint || !identityHeader || !identityServerThumbprint) { + logger.info(`[Managed Identity] ${Constants_ManagedIdentitySourceNames.SERVICE_FABRIC} managed identity is unavailable because one or all of the '${ManagedIdentityEnvironmentVariableNames.IDENTITY_HEADER}', '${ManagedIdentityEnvironmentVariableNames.IDENTITY_ENDPOINT}' or '${ManagedIdentityEnvironmentVariableNames.IDENTITY_SERVER_THUMBPRINT}' environment variables are not defined.`, ""); + return null; + } + const validatedIdentityEndpoint = ServiceFabric_ServiceFabric.getValidatedEnvVariableUrlString(ManagedIdentityEnvironmentVariableNames.IDENTITY_ENDPOINT, identityEndpoint, Constants_ManagedIdentitySourceNames.SERVICE_FABRIC, logger); + logger.info(`[Managed Identity] Environment variables validation passed for ${Constants_ManagedIdentitySourceNames.SERVICE_FABRIC} managed identity. Endpoint URI: ${validatedIdentityEndpoint}. Creating ${Constants_ManagedIdentitySourceNames.SERVICE_FABRIC} managed identity.`, ""); + if (managedIdentityId.idType !== Constants_ManagedIdentityIdType.SYSTEM_ASSIGNED) { + logger.warning(`[Managed Identity] ${Constants_ManagedIdentitySourceNames.SERVICE_FABRIC} user assigned managed identity is configured in the cluster, not during runtime. See also: https://learn.microsoft.com/en-us/azure/service-fabric/configure-existing-cluster-enable-managed-identity-token-service.`, ""); + } + return new ServiceFabric_ServiceFabric(logger, nodeStorage, networkClient, cryptoProvider, disableInternalRetries, identityEndpoint, identityHeader); + } + /** + * Creates HTTP request parameters for acquiring an access token from the Service Fabric Managed Identity Token Service (MITS). + * + * This method constructs a properly formatted HTTP GET request that includes: + * - The secret header for authentication with MITS + * - API version parameter for the Service Fabric MSI endpoint + * - Resource parameter specifying the target Azure service + * - Optional identity parameters for user-assigned managed identities + * + * The request follows the Service Fabric managed identity protocol and uses the 2019-07-01-preview API version. + * For user-assigned identities, the appropriate query parameter (client_id, object_id, or resource_id) is added + * based on the identity type. + * + * @param resource - The Azure resource URI for which the access token is requested (e.g., "https://vault.azure.net/") + * @param managedIdentityId - The managed identity configuration specifying system-assigned or user-assigned identity details + * + * @returns A configured ManagedIdentityRequestParameters object ready for network execution + */ + createRequest(resource, managedIdentityId) { + const request = new ManagedIdentityRequestParameters(Constants_HttpMethod.GET, this.identityEndpoint); + request.headers[ManagedIdentityHeaders.ML_AND_SF_SECRET_HEADER_NAME] = + this.identityHeader; + request.queryParameters[ManagedIdentityQueryParameters.API_VERSION] = + SERVICE_FABRIC_MSI_API_VERSION; + request.queryParameters[ManagedIdentityQueryParameters.RESOURCE] = + resource; + if (managedIdentityId.idType !== Constants_ManagedIdentityIdType.SYSTEM_ASSIGNED) { + request.queryParameters[this.getManagedIdentityUserAssignedIdQueryParameterKey(managedIdentityId.idType)] = managedIdentityId.id; + } + // bodyParameters calculated in BaseManagedIdentity.acquireTokenWithManagedIdentity + return request; + } } @@ -57896,124 +57896,124 @@ class ServiceFabric_ServiceFabric extends BaseManagedIdentitySource { -/* - * Copyright (c) Microsoft Corporation. All rights reserved. - * Licensed under the MIT License. - */ -const MACHINE_LEARNING_MSI_API_VERSION = "2017-09-01"; -const MANAGED_IDENTITY_MACHINE_LEARNING_UNSUPPORTED_ID_TYPE_ERROR = `Only client id is supported for user-assigned managed identity in ${Constants_ManagedIdentitySourceNames.MACHINE_LEARNING}.`; // referenced in unit test -/** - * Machine Learning Managed Identity Source implementation for Azure Machine Learning environments. - * - * This class handles managed identity authentication specifically for Azure Machine Learning services. - * It supports both system-assigned and user-assigned managed identities, using the MSI_ENDPOINT - * and MSI_SECRET environment variables that are automatically provided in Azure ML environments. - */ -class MachineLearning_MachineLearning extends BaseManagedIdentitySource { - /** - * Creates a new MachineLearning managed identity source instance. - * - * @param logger - Logger instance for diagnostic information - * @param nodeStorage - Node storage implementation for caching - * @param networkClient - Network client for making HTTP requests - * @param cryptoProvider - Cryptographic operations provider - * @param disableInternalRetries - Whether to disable automatic request retries - * @param msiEndpoint - The MSI endpoint URL from environment variables - * @param secret - The MSI secret from environment variables - */ - constructor(logger, nodeStorage, networkClient, cryptoProvider, disableInternalRetries, msiEndpoint, secret) { - super(logger, nodeStorage, networkClient, cryptoProvider, disableInternalRetries); - this.msiEndpoint = msiEndpoint; - this.secret = secret; - } - /** - * Retrieves the required environment variables for Azure Machine Learning managed identity. - * - * This method checks for the presence of MSI_ENDPOINT and MSI_SECRET environment variables - * that are automatically set by the Azure Machine Learning platform when managed identity - * is enabled for the compute instance or cluster. - * - * @returns An array containing [msiEndpoint, secret] where either value may be undefined - * if the corresponding environment variable is not set - */ - static getEnvironmentVariables() { - const msiEndpoint = process.env[ManagedIdentityEnvironmentVariableNames.MSI_ENDPOINT]; - const secret = process.env[ManagedIdentityEnvironmentVariableNames.MSI_SECRET]; - return [msiEndpoint, secret]; - } - /** - * Attempts to create a MachineLearning managed identity source. - * - * This method validates the Azure Machine Learning environment by checking for the required - * MSI_ENDPOINT and MSI_SECRET environment variables. If both are present and valid, - * it creates and returns a MachineLearning instance. If either is missing or invalid, - * it returns null, indicating that this managed identity source is not available - * in the current environment. - * - * @param logger - Logger instance for diagnostic information - * @param nodeStorage - Node storage implementation for caching - * @param networkClient - Network client for making HTTP requests - * @param cryptoProvider - Cryptographic operations provider - * @param disableInternalRetries - Whether to disable automatic request retries - * - * @returns A new MachineLearning instance if the environment is valid, null otherwise - */ - static tryCreate(logger, nodeStorage, networkClient, cryptoProvider, disableInternalRetries) { - const [msiEndpoint, secret] = MachineLearning_MachineLearning.getEnvironmentVariables(); - // if either of the MSI endpoint or MSI secret variables are undefined, this MSI provider is unavailable. - if (!msiEndpoint || !secret) { - logger.info(`[Managed Identity] ${Constants_ManagedIdentitySourceNames.MACHINE_LEARNING} managed identity is unavailable because one or both of the '${ManagedIdentityEnvironmentVariableNames.MSI_ENDPOINT}' and '${ManagedIdentityEnvironmentVariableNames.MSI_SECRET}' environment variables are not defined.`, ""); - return null; - } - const validatedMsiEndpoint = MachineLearning_MachineLearning.getValidatedEnvVariableUrlString(ManagedIdentityEnvironmentVariableNames.MSI_ENDPOINT, msiEndpoint, Constants_ManagedIdentitySourceNames.MACHINE_LEARNING, logger); - logger.info(`[Managed Identity] Environment variables validation passed for ${Constants_ManagedIdentitySourceNames.MACHINE_LEARNING} managed identity. Endpoint URI: ${validatedMsiEndpoint}. Creating ${Constants_ManagedIdentitySourceNames.MACHINE_LEARNING} managed identity.`, ""); - return new MachineLearning_MachineLearning(logger, nodeStorage, networkClient, cryptoProvider, disableInternalRetries, msiEndpoint, secret); - } - /** - * Creates a managed identity token request for Azure Machine Learning environments. - * - * This method constructs the HTTP request parameters needed to acquire an access token - * from the Azure Machine Learning managed identity endpoint. It handles both system-assigned - * and user-assigned managed identities with specific logic for each type: - * - * - System-assigned: Uses the DEFAULT_IDENTITY_CLIENT_ID environment variable - * - User-assigned: Only supports client ID-based identification (not object ID or resource ID) - * - * The request uses the 2017-09-01 API version and includes the required secret header - * for authentication with the MSI endpoint. - * - * @param resource - The target resource/scope for which to request an access token (e.g., "https://graph.microsoft.com/.default") - * @param managedIdentityId - The managed identity configuration specifying whether to use system-assigned or user-assigned identity - * - * @returns A configured ManagedIdentityRequestParameters object ready for network execution - * - * @throws Error if an unsupported managed identity ID type is specified (only client ID is supported for user-assigned) - */ - createRequest(resource, managedIdentityId) { - const request = new ManagedIdentityRequestParameters(Constants_HttpMethod.GET, this.msiEndpoint); - request.headers[ManagedIdentityHeaders.METADATA_HEADER_NAME] = "true"; - request.headers[ManagedIdentityHeaders.ML_AND_SF_SECRET_HEADER_NAME] = - this.secret; - request.queryParameters[ManagedIdentityQueryParameters.API_VERSION] = - MACHINE_LEARNING_MSI_API_VERSION; - request.queryParameters[ManagedIdentityQueryParameters.RESOURCE] = - resource; - if (managedIdentityId.idType === Constants_ManagedIdentityIdType.SYSTEM_ASSIGNED) { - request.queryParameters[ManagedIdentityUserAssignedIdQueryParameterNames.MANAGED_IDENTITY_CLIENT_ID_2017] = process.env[ManagedIdentityEnvironmentVariableNames - .DEFAULT_IDENTITY_CLIENT_ID]; // this environment variable is always set in an Azure Machine Learning source - } - else if (managedIdentityId.idType === - Constants_ManagedIdentityIdType.USER_ASSIGNED_CLIENT_ID) { - request.queryParameters[this.getManagedIdentityUserAssignedIdQueryParameterKey(managedIdentityId.idType, false, // isIMDS - true // uses2017API - )] = managedIdentityId.id; - } - else { - throw new Error(MANAGED_IDENTITY_MACHINE_LEARNING_UNSUPPORTED_ID_TYPE_ERROR); - } - // bodyParameters calculated in BaseManagedIdentity.acquireTokenWithManagedIdentity - return request; - } +/* + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. + */ +const MACHINE_LEARNING_MSI_API_VERSION = "2017-09-01"; +const MANAGED_IDENTITY_MACHINE_LEARNING_UNSUPPORTED_ID_TYPE_ERROR = `Only client id is supported for user-assigned managed identity in ${Constants_ManagedIdentitySourceNames.MACHINE_LEARNING}.`; // referenced in unit test +/** + * Machine Learning Managed Identity Source implementation for Azure Machine Learning environments. + * + * This class handles managed identity authentication specifically for Azure Machine Learning services. + * It supports both system-assigned and user-assigned managed identities, using the MSI_ENDPOINT + * and MSI_SECRET environment variables that are automatically provided in Azure ML environments. + */ +class MachineLearning_MachineLearning extends BaseManagedIdentitySource { + /** + * Creates a new MachineLearning managed identity source instance. + * + * @param logger - Logger instance for diagnostic information + * @param nodeStorage - Node storage implementation for caching + * @param networkClient - Network client for making HTTP requests + * @param cryptoProvider - Cryptographic operations provider + * @param disableInternalRetries - Whether to disable automatic request retries + * @param msiEndpoint - The MSI endpoint URL from environment variables + * @param secret - The MSI secret from environment variables + */ + constructor(logger, nodeStorage, networkClient, cryptoProvider, disableInternalRetries, msiEndpoint, secret) { + super(logger, nodeStorage, networkClient, cryptoProvider, disableInternalRetries); + this.msiEndpoint = msiEndpoint; + this.secret = secret; + } + /** + * Retrieves the required environment variables for Azure Machine Learning managed identity. + * + * This method checks for the presence of MSI_ENDPOINT and MSI_SECRET environment variables + * that are automatically set by the Azure Machine Learning platform when managed identity + * is enabled for the compute instance or cluster. + * + * @returns An array containing [msiEndpoint, secret] where either value may be undefined + * if the corresponding environment variable is not set + */ + static getEnvironmentVariables() { + const msiEndpoint = process.env[ManagedIdentityEnvironmentVariableNames.MSI_ENDPOINT]; + const secret = process.env[ManagedIdentityEnvironmentVariableNames.MSI_SECRET]; + return [msiEndpoint, secret]; + } + /** + * Attempts to create a MachineLearning managed identity source. + * + * This method validates the Azure Machine Learning environment by checking for the required + * MSI_ENDPOINT and MSI_SECRET environment variables. If both are present and valid, + * it creates and returns a MachineLearning instance. If either is missing or invalid, + * it returns null, indicating that this managed identity source is not available + * in the current environment. + * + * @param logger - Logger instance for diagnostic information + * @param nodeStorage - Node storage implementation for caching + * @param networkClient - Network client for making HTTP requests + * @param cryptoProvider - Cryptographic operations provider + * @param disableInternalRetries - Whether to disable automatic request retries + * + * @returns A new MachineLearning instance if the environment is valid, null otherwise + */ + static tryCreate(logger, nodeStorage, networkClient, cryptoProvider, disableInternalRetries) { + const [msiEndpoint, secret] = MachineLearning_MachineLearning.getEnvironmentVariables(); + // if either of the MSI endpoint or MSI secret variables are undefined, this MSI provider is unavailable. + if (!msiEndpoint || !secret) { + logger.info(`[Managed Identity] ${Constants_ManagedIdentitySourceNames.MACHINE_LEARNING} managed identity is unavailable because one or both of the '${ManagedIdentityEnvironmentVariableNames.MSI_ENDPOINT}' and '${ManagedIdentityEnvironmentVariableNames.MSI_SECRET}' environment variables are not defined.`, ""); + return null; + } + const validatedMsiEndpoint = MachineLearning_MachineLearning.getValidatedEnvVariableUrlString(ManagedIdentityEnvironmentVariableNames.MSI_ENDPOINT, msiEndpoint, Constants_ManagedIdentitySourceNames.MACHINE_LEARNING, logger); + logger.info(`[Managed Identity] Environment variables validation passed for ${Constants_ManagedIdentitySourceNames.MACHINE_LEARNING} managed identity. Endpoint URI: ${validatedMsiEndpoint}. Creating ${Constants_ManagedIdentitySourceNames.MACHINE_LEARNING} managed identity.`, ""); + return new MachineLearning_MachineLearning(logger, nodeStorage, networkClient, cryptoProvider, disableInternalRetries, msiEndpoint, secret); + } + /** + * Creates a managed identity token request for Azure Machine Learning environments. + * + * This method constructs the HTTP request parameters needed to acquire an access token + * from the Azure Machine Learning managed identity endpoint. It handles both system-assigned + * and user-assigned managed identities with specific logic for each type: + * + * - System-assigned: Uses the DEFAULT_IDENTITY_CLIENT_ID environment variable + * - User-assigned: Only supports client ID-based identification (not object ID or resource ID) + * + * The request uses the 2017-09-01 API version and includes the required secret header + * for authentication with the MSI endpoint. + * + * @param resource - The target resource/scope for which to request an access token (e.g., "https://graph.microsoft.com/.default") + * @param managedIdentityId - The managed identity configuration specifying whether to use system-assigned or user-assigned identity + * + * @returns A configured ManagedIdentityRequestParameters object ready for network execution + * + * @throws Error if an unsupported managed identity ID type is specified (only client ID is supported for user-assigned) + */ + createRequest(resource, managedIdentityId) { + const request = new ManagedIdentityRequestParameters(Constants_HttpMethod.GET, this.msiEndpoint); + request.headers[ManagedIdentityHeaders.METADATA_HEADER_NAME] = "true"; + request.headers[ManagedIdentityHeaders.ML_AND_SF_SECRET_HEADER_NAME] = + this.secret; + request.queryParameters[ManagedIdentityQueryParameters.API_VERSION] = + MACHINE_LEARNING_MSI_API_VERSION; + request.queryParameters[ManagedIdentityQueryParameters.RESOURCE] = + resource; + if (managedIdentityId.idType === Constants_ManagedIdentityIdType.SYSTEM_ASSIGNED) { + request.queryParameters[ManagedIdentityUserAssignedIdQueryParameterNames.MANAGED_IDENTITY_CLIENT_ID_2017] = process.env[ManagedIdentityEnvironmentVariableNames + .DEFAULT_IDENTITY_CLIENT_ID]; // this environment variable is always set in an Azure Machine Learning source + } + else if (managedIdentityId.idType === + Constants_ManagedIdentityIdType.USER_ASSIGNED_CLIENT_ID) { + request.queryParameters[this.getManagedIdentityUserAssignedIdQueryParameterKey(managedIdentityId.idType, false, // isIMDS + true // uses2017API + )] = managedIdentityId.id; + } + else { + throw new Error(MANAGED_IDENTITY_MACHINE_LEARNING_UNSUPPORTED_ID_TYPE_ERROR); + } + // bodyParameters calculated in BaseManagedIdentity.acquireTokenWithManagedIdentity + return request; + } } @@ -58032,69 +58032,69 @@ class MachineLearning_MachineLearning extends BaseManagedIdentitySource { -/* - * Copyright (c) Microsoft Corporation. All rights reserved. - * Licensed under the MIT License. - */ -/* - * Class to initialize a managed identity and identify the service. - * Original source of code: https://github.com/Azure/azure-sdk-for-net/blob/main/sdk/identity/Azure.Identity/src/ManagedIdentityClient.cs - */ -class ManagedIdentityClient_ManagedIdentityClient { - constructor(logger, nodeStorage, networkClient, cryptoProvider, disableInternalRetries) { - this.logger = logger; - this.nodeStorage = nodeStorage; - this.networkClient = networkClient; - this.cryptoProvider = cryptoProvider; - this.disableInternalRetries = disableInternalRetries; - } - async sendManagedIdentityTokenRequest(managedIdentityRequest, managedIdentityId, fakeAuthority, refreshAccessToken) { - if (!ManagedIdentityClient_ManagedIdentityClient.identitySource) { - ManagedIdentityClient_ManagedIdentityClient.identitySource = - this.selectManagedIdentitySource(this.logger, this.nodeStorage, this.networkClient, this.cryptoProvider, this.disableInternalRetries, managedIdentityId); - } - return ManagedIdentityClient_ManagedIdentityClient.identitySource.acquireTokenWithManagedIdentity(managedIdentityRequest, managedIdentityId, fakeAuthority, refreshAccessToken); - } - allEnvironmentVariablesAreDefined(environmentVariables) { - return Object.values(environmentVariables).every((environmentVariable) => { - return environmentVariable !== undefined; - }); - } - /** - * Determine the Managed Identity Source based on available environment variables. This API is consumed by ManagedIdentityApplication's getManagedIdentitySource. - * @returns ManagedIdentitySourceNames - The Managed Identity source's name - */ - getManagedIdentitySource() { - ManagedIdentityClient_ManagedIdentityClient.sourceName = - this.allEnvironmentVariablesAreDefined(ServiceFabric.getEnvironmentVariables()) - ? ManagedIdentitySourceNames.SERVICE_FABRIC - : this.allEnvironmentVariablesAreDefined(AppService.getEnvironmentVariables()) - ? ManagedIdentitySourceNames.APP_SERVICE - : this.allEnvironmentVariablesAreDefined(MachineLearning.getEnvironmentVariables()) - ? ManagedIdentitySourceNames.MACHINE_LEARNING - : this.allEnvironmentVariablesAreDefined(CloudShell.getEnvironmentVariables()) - ? ManagedIdentitySourceNames.CLOUD_SHELL - : this.allEnvironmentVariablesAreDefined(AzureArc.getEnvironmentVariables()) - ? ManagedIdentitySourceNames.AZURE_ARC - : ManagedIdentitySourceNames.DEFAULT_TO_IMDS; - return ManagedIdentityClient_ManagedIdentityClient.sourceName; - } - /** - * Tries to create a managed identity source for all sources - * @returns the managed identity Source - */ - selectManagedIdentitySource(logger, nodeStorage, networkClient, cryptoProvider, disableInternalRetries, managedIdentityId) { - const source = ServiceFabric.tryCreate(logger, nodeStorage, networkClient, cryptoProvider, disableInternalRetries, managedIdentityId) || - AppService.tryCreate(logger, nodeStorage, networkClient, cryptoProvider, disableInternalRetries) || - MachineLearning.tryCreate(logger, nodeStorage, networkClient, cryptoProvider, disableInternalRetries) || - CloudShell.tryCreate(logger, nodeStorage, networkClient, cryptoProvider, disableInternalRetries, managedIdentityId) || - AzureArc.tryCreate(logger, nodeStorage, networkClient, cryptoProvider, disableInternalRetries, managedIdentityId) || - Imds.tryCreate(logger, nodeStorage, networkClient, cryptoProvider, disableInternalRetries); - if (!source) { - throw createManagedIdentityError(unableToCreateSource); - } - return source; - } +/* + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. + */ +/* + * Class to initialize a managed identity and identify the service. + * Original source of code: https://github.com/Azure/azure-sdk-for-net/blob/main/sdk/identity/Azure.Identity/src/ManagedIdentityClient.cs + */ +class ManagedIdentityClient_ManagedIdentityClient { + constructor(logger, nodeStorage, networkClient, cryptoProvider, disableInternalRetries) { + this.logger = logger; + this.nodeStorage = nodeStorage; + this.networkClient = networkClient; + this.cryptoProvider = cryptoProvider; + this.disableInternalRetries = disableInternalRetries; + } + async sendManagedIdentityTokenRequest(managedIdentityRequest, managedIdentityId, fakeAuthority, refreshAccessToken) { + if (!ManagedIdentityClient_ManagedIdentityClient.identitySource) { + ManagedIdentityClient_ManagedIdentityClient.identitySource = + this.selectManagedIdentitySource(this.logger, this.nodeStorage, this.networkClient, this.cryptoProvider, this.disableInternalRetries, managedIdentityId); + } + return ManagedIdentityClient_ManagedIdentityClient.identitySource.acquireTokenWithManagedIdentity(managedIdentityRequest, managedIdentityId, fakeAuthority, refreshAccessToken); + } + allEnvironmentVariablesAreDefined(environmentVariables) { + return Object.values(environmentVariables).every((environmentVariable) => { + return environmentVariable !== undefined; + }); + } + /** + * Determine the Managed Identity Source based on available environment variables. This API is consumed by ManagedIdentityApplication's getManagedIdentitySource. + * @returns ManagedIdentitySourceNames - The Managed Identity source's name + */ + getManagedIdentitySource() { + ManagedIdentityClient_ManagedIdentityClient.sourceName = + this.allEnvironmentVariablesAreDefined(ServiceFabric.getEnvironmentVariables()) + ? ManagedIdentitySourceNames.SERVICE_FABRIC + : this.allEnvironmentVariablesAreDefined(AppService.getEnvironmentVariables()) + ? ManagedIdentitySourceNames.APP_SERVICE + : this.allEnvironmentVariablesAreDefined(MachineLearning.getEnvironmentVariables()) + ? ManagedIdentitySourceNames.MACHINE_LEARNING + : this.allEnvironmentVariablesAreDefined(CloudShell.getEnvironmentVariables()) + ? ManagedIdentitySourceNames.CLOUD_SHELL + : this.allEnvironmentVariablesAreDefined(AzureArc.getEnvironmentVariables()) + ? ManagedIdentitySourceNames.AZURE_ARC + : ManagedIdentitySourceNames.DEFAULT_TO_IMDS; + return ManagedIdentityClient_ManagedIdentityClient.sourceName; + } + /** + * Tries to create a managed identity source for all sources + * @returns the managed identity Source + */ + selectManagedIdentitySource(logger, nodeStorage, networkClient, cryptoProvider, disableInternalRetries, managedIdentityId) { + const source = ServiceFabric.tryCreate(logger, nodeStorage, networkClient, cryptoProvider, disableInternalRetries, managedIdentityId) || + AppService.tryCreate(logger, nodeStorage, networkClient, cryptoProvider, disableInternalRetries) || + MachineLearning.tryCreate(logger, nodeStorage, networkClient, cryptoProvider, disableInternalRetries) || + CloudShell.tryCreate(logger, nodeStorage, networkClient, cryptoProvider, disableInternalRetries, managedIdentityId) || + AzureArc.tryCreate(logger, nodeStorage, networkClient, cryptoProvider, disableInternalRetries, managedIdentityId) || + Imds.tryCreate(logger, nodeStorage, networkClient, cryptoProvider, disableInternalRetries); + if (!source) { + throw createManagedIdentityError(unableToCreateSource); + } + return source; + } } @@ -58113,125 +58113,125 @@ class ManagedIdentityClient_ManagedIdentityClient { -/* - * Copyright (c) Microsoft Corporation. All rights reserved. - * Licensed under the MIT License. - */ -const SOURCES_THAT_SUPPORT_TOKEN_REVOCATION = [Constants_ManagedIdentitySourceNames.SERVICE_FABRIC]; -/** - * Class to initialize a managed identity and identify the service - * @public - */ -class ManagedIdentityApplication { - constructor(configuration) { - // undefined config means the managed identity is system-assigned - this.config = buildManagedIdentityConfiguration(configuration || {}); - this.logger = new Logger(this.config.system.loggerOptions, name, version); - const fakeStatusAuthorityOptions = { - canonicalAuthority: Constants.DEFAULT_AUTHORITY, - }; - if (!ManagedIdentityApplication.nodeStorage) { - ManagedIdentityApplication.nodeStorage = new NodeStorage(this.logger, this.config.managedIdentityId.id, DEFAULT_CRYPTO_IMPLEMENTATION, fakeStatusAuthorityOptions); - } - this.networkClient = this.config.system.networkClient; - this.cryptoProvider = new CryptoProvider(); - const fakeAuthorityOptions = { - protocolMode: ProtocolMode.AAD, - knownAuthorities: [DEFAULT_AUTHORITY_FOR_MANAGED_IDENTITY], - cloudDiscoveryMetadata: "", - authorityMetadata: "", - }; - this.fakeAuthority = new Authority(DEFAULT_AUTHORITY_FOR_MANAGED_IDENTITY, this.networkClient, ManagedIdentityApplication.nodeStorage, fakeAuthorityOptions, this.logger, this.cryptoProvider.createNewGuid(), // correlationID - new StubPerformanceClient(), true); - this.fakeClientCredentialClient = new ClientCredentialClient({ - authOptions: { - clientId: this.config.managedIdentityId.id, - authority: this.fakeAuthority, - }, - }); - this.managedIdentityClient = new ManagedIdentityClient(this.logger, ManagedIdentityApplication.nodeStorage, this.networkClient, this.cryptoProvider, this.config.disableInternalRetries); - this.hashUtils = new HashUtils(); - } - /** - * Acquire an access token from the cache or the managed identity - * @param managedIdentityRequest - the ManagedIdentityRequestParams object passed in by the developer - * @returns the access token - */ - async acquireToken(managedIdentityRequestParams) { - if (!managedIdentityRequestParams.resource) { - throw createClientConfigurationError(ClientConfigurationErrorCodes.urlEmptyError); - } - const managedIdentityRequest = { - forceRefresh: managedIdentityRequestParams.forceRefresh, - resource: managedIdentityRequestParams.resource.replace("/.default", ""), - scopes: [ - managedIdentityRequestParams.resource.replace("/.default", ""), - ], - authority: this.fakeAuthority.canonicalAuthority, - correlationId: this.cryptoProvider.createNewGuid(), - claims: managedIdentityRequestParams.claims, - clientCapabilities: this.config.clientCapabilities, - }; - if (managedIdentityRequest.forceRefresh) { - return this.acquireTokenFromManagedIdentity(managedIdentityRequest, this.config.managedIdentityId, this.fakeAuthority); - } - const [cachedAuthenticationResult, lastCacheOutcome] = await this.fakeClientCredentialClient.getCachedAuthenticationResult(managedIdentityRequest, this.config, this.cryptoProvider, this.fakeAuthority, ManagedIdentityApplication.nodeStorage); - /* - * Check if claims are present in the managed identity request. - * If so, the cached token will not be used. - */ - if (managedIdentityRequest.claims) { - const sourceName = this.managedIdentityClient.getManagedIdentitySource(); - /* - * Check if there is a cached token and if the Managed Identity source supports token revocation. - * If so, hash the cached access token and add it to the request. - */ - if (cachedAuthenticationResult && - SOURCES_THAT_SUPPORT_TOKEN_REVOCATION.includes(sourceName)) { - const revokedTokenSha256Hash = this.hashUtils - .sha256(cachedAuthenticationResult.accessToken) - .toString(Constants.EncodingTypes.HEX); - managedIdentityRequest.revokedTokenSha256Hash = - revokedTokenSha256Hash; - } - return this.acquireTokenFromManagedIdentity(managedIdentityRequest, this.config.managedIdentityId, this.fakeAuthority); - } - if (cachedAuthenticationResult) { - // if the token is not expired but must be refreshed; get a new one in the background - if (lastCacheOutcome === - Constants.CacheOutcome.PROACTIVELY_REFRESHED) { - this.logger.info("ClientCredentialClient:getCachedAuthenticationResult - Cached access token's refreshOn property has been exceeded'. It's not expired, but must be refreshed.", managedIdentityRequest.correlationId); - // force refresh; will run in the background - const refreshAccessToken = true; - await this.acquireTokenFromManagedIdentity(managedIdentityRequest, this.config.managedIdentityId, this.fakeAuthority, refreshAccessToken); - } - return cachedAuthenticationResult; - } - else { - return this.acquireTokenFromManagedIdentity(managedIdentityRequest, this.config.managedIdentityId, this.fakeAuthority); - } - } - /** - * Acquires a token from a managed identity endpoint. - * - * @param managedIdentityRequest - The request object containing parameters for the managed identity token request. - * @param managedIdentityId - The identifier for the managed identity (e.g., client ID or resource ID). - * @param fakeAuthority - A placeholder authority used for the token request. - * @param refreshAccessToken - Optional flag indicating whether to force a refresh of the access token. - * @returns A promise that resolves to an AuthenticationResult containing the acquired token and related information. - */ - async acquireTokenFromManagedIdentity(managedIdentityRequest, managedIdentityId, fakeAuthority, refreshAccessToken) { - // make a network call to the managed identity - return this.managedIdentityClient.sendManagedIdentityTokenRequest(managedIdentityRequest, managedIdentityId, fakeAuthority, refreshAccessToken); - } - /** - * Determine the Managed Identity Source based on available environment variables. This API is consumed by Azure Identity SDK. - * @returns ManagedIdentitySourceNames - The Managed Identity source's name - */ - getManagedIdentitySource() { - return (ManagedIdentityClient.sourceName || - this.managedIdentityClient.getManagedIdentitySource()); - } +/* + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. + */ +const SOURCES_THAT_SUPPORT_TOKEN_REVOCATION = [Constants_ManagedIdentitySourceNames.SERVICE_FABRIC]; +/** + * Class to initialize a managed identity and identify the service + * @public + */ +class ManagedIdentityApplication { + constructor(configuration) { + // undefined config means the managed identity is system-assigned + this.config = buildManagedIdentityConfiguration(configuration || {}); + this.logger = new Logger(this.config.system.loggerOptions, name, version); + const fakeStatusAuthorityOptions = { + canonicalAuthority: Constants.DEFAULT_AUTHORITY, + }; + if (!ManagedIdentityApplication.nodeStorage) { + ManagedIdentityApplication.nodeStorage = new NodeStorage(this.logger, this.config.managedIdentityId.id, DEFAULT_CRYPTO_IMPLEMENTATION, fakeStatusAuthorityOptions); + } + this.networkClient = this.config.system.networkClient; + this.cryptoProvider = new CryptoProvider(); + const fakeAuthorityOptions = { + protocolMode: ProtocolMode.AAD, + knownAuthorities: [DEFAULT_AUTHORITY_FOR_MANAGED_IDENTITY], + cloudDiscoveryMetadata: "", + authorityMetadata: "", + }; + this.fakeAuthority = new Authority(DEFAULT_AUTHORITY_FOR_MANAGED_IDENTITY, this.networkClient, ManagedIdentityApplication.nodeStorage, fakeAuthorityOptions, this.logger, this.cryptoProvider.createNewGuid(), // correlationID + new StubPerformanceClient(), true); + this.fakeClientCredentialClient = new ClientCredentialClient({ + authOptions: { + clientId: this.config.managedIdentityId.id, + authority: this.fakeAuthority, + }, + }); + this.managedIdentityClient = new ManagedIdentityClient(this.logger, ManagedIdentityApplication.nodeStorage, this.networkClient, this.cryptoProvider, this.config.disableInternalRetries); + this.hashUtils = new HashUtils(); + } + /** + * Acquire an access token from the cache or the managed identity + * @param managedIdentityRequest - the ManagedIdentityRequestParams object passed in by the developer + * @returns the access token + */ + async acquireToken(managedIdentityRequestParams) { + if (!managedIdentityRequestParams.resource) { + throw createClientConfigurationError(ClientConfigurationErrorCodes.urlEmptyError); + } + const managedIdentityRequest = { + forceRefresh: managedIdentityRequestParams.forceRefresh, + resource: managedIdentityRequestParams.resource.replace("/.default", ""), + scopes: [ + managedIdentityRequestParams.resource.replace("/.default", ""), + ], + authority: this.fakeAuthority.canonicalAuthority, + correlationId: this.cryptoProvider.createNewGuid(), + claims: managedIdentityRequestParams.claims, + clientCapabilities: this.config.clientCapabilities, + }; + if (managedIdentityRequest.forceRefresh) { + return this.acquireTokenFromManagedIdentity(managedIdentityRequest, this.config.managedIdentityId, this.fakeAuthority); + } + const [cachedAuthenticationResult, lastCacheOutcome] = await this.fakeClientCredentialClient.getCachedAuthenticationResult(managedIdentityRequest, this.config, this.cryptoProvider, this.fakeAuthority, ManagedIdentityApplication.nodeStorage); + /* + * Check if claims are present in the managed identity request. + * If so, the cached token will not be used. + */ + if (managedIdentityRequest.claims) { + const sourceName = this.managedIdentityClient.getManagedIdentitySource(); + /* + * Check if there is a cached token and if the Managed Identity source supports token revocation. + * If so, hash the cached access token and add it to the request. + */ + if (cachedAuthenticationResult && + SOURCES_THAT_SUPPORT_TOKEN_REVOCATION.includes(sourceName)) { + const revokedTokenSha256Hash = this.hashUtils + .sha256(cachedAuthenticationResult.accessToken) + .toString(Constants.EncodingTypes.HEX); + managedIdentityRequest.revokedTokenSha256Hash = + revokedTokenSha256Hash; + } + return this.acquireTokenFromManagedIdentity(managedIdentityRequest, this.config.managedIdentityId, this.fakeAuthority); + } + if (cachedAuthenticationResult) { + // if the token is not expired but must be refreshed; get a new one in the background + if (lastCacheOutcome === + Constants.CacheOutcome.PROACTIVELY_REFRESHED) { + this.logger.info("ClientCredentialClient:getCachedAuthenticationResult - Cached access token's refreshOn property has been exceeded'. It's not expired, but must be refreshed.", managedIdentityRequest.correlationId); + // force refresh; will run in the background + const refreshAccessToken = true; + await this.acquireTokenFromManagedIdentity(managedIdentityRequest, this.config.managedIdentityId, this.fakeAuthority, refreshAccessToken); + } + return cachedAuthenticationResult; + } + else { + return this.acquireTokenFromManagedIdentity(managedIdentityRequest, this.config.managedIdentityId, this.fakeAuthority); + } + } + /** + * Acquires a token from a managed identity endpoint. + * + * @param managedIdentityRequest - The request object containing parameters for the managed identity token request. + * @param managedIdentityId - The identifier for the managed identity (e.g., client ID or resource ID). + * @param fakeAuthority - A placeholder authority used for the token request. + * @param refreshAccessToken - Optional flag indicating whether to force a refresh of the access token. + * @returns A promise that resolves to an AuthenticationResult containing the acquired token and related information. + */ + async acquireTokenFromManagedIdentity(managedIdentityRequest, managedIdentityId, fakeAuthority, refreshAccessToken) { + // make a network call to the managed identity + return this.managedIdentityClient.sendManagedIdentityTokenRequest(managedIdentityRequest, managedIdentityId, fakeAuthority, refreshAccessToken); + } + /** + * Determine the Managed Identity Source based on available environment variables. This API is consumed by Azure Identity SDK. + * @returns ManagedIdentitySourceNames - The Managed Identity source's name + */ + getManagedIdentitySource() { + return (ManagedIdentityClient.sourceName || + this.managedIdentityClient.getManagedIdentitySource()); + } } @@ -58254,19 +58254,19 @@ class ManagedIdentityApplication { -/* - * Copyright (c) Microsoft Corporation. All rights reserved. - * Licensed under the MIT License. - */ -/** - * @packageDocumentation - * @module @azure/msal-node - */ -/** - * Warning: This set of exports is purely intended to be used by other MSAL libraries, and should be considered potentially unstable. We strongly discourage using them directly, you do so at your own risk. - * Breaking changes to these APIs will be shipped under a minor version, instead of a major version. - */ -const dist_PromptValue = PromptValue; +/* + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. + */ +/** + * @packageDocumentation + * @module @azure/msal-node + */ +/** + * Warning: This set of exports is purely intended to be used by other MSAL libraries, and should be considered potentially unstable. We strongly discourage using them directly, you do so at your own risk. + * Breaking changes to these APIs will be shipped under a minor version, instead of a major version. + */ +const dist_PromptValue = PromptValue; const dist_ResponseMode = ResponseMode; @@ -62562,20 +62562,31 @@ class FileProcessor { url: url, }; } - async getFilesForCommit(commitSha, userId) { + async getFilesForCommit(commitSha, authorId, committerId) { const { data: commit } = await this.octokit.rest.repos.getCommit({ owner: this.config.repository.owner, repo: this.config.repository.repo, ref: commitSha }); + const commitMeta = { + sha: commit.sha, + files: [], + message: commit.commit.message || undefined, + authorEmail: commit.commit.author?.email || undefined, + authorLogin: commit.author?.login || undefined, + authorName: commit.commit.author?.name || undefined, + authorId, + committerEmail: commit.commit.committer?.email || undefined, + committerLogin: commit.committer?.login || undefined, + committerName: commit.commit.committer?.name || undefined, + committerId, + timestamp: commit.commit.author?.date || commit.commit.committer?.date || undefined, + }; if (!commit.files || commit.files.length === 0) { this.logger.warn(`No files found in commit: ${commit.sha}`); - return []; + return commitMeta; } this.logger.info(`Processing commit ${commit.sha} with ${commit.files.length} changed file(s).`); - let fileMetadata = []; - const token = await this.authService.getToken(); - this.purviewClient.setAuthToken(token.accessToken); const filteredCommitFiles = commit.files.filter((f) => this.shouldIncludePath(f.filename)); this.logger.info(`Commit ${commit.sha}: ${filteredCommitFiles.length}/${commit.files.length} files match the configured patterns.`); for (const file of filteredCommitFiles) { @@ -62601,16 +62612,19 @@ class FileProcessor { content: fileContent, authorLogin: commit.author?.login || commit.committer?.login || null, authorEmail: commit.commit.author?.email || commit.commit.committer?.email || null, - authorId: userId, + authorId, + committerLogin: commit.committer?.login || commit.author?.login || null, + committerEmail: commit.commit.committer?.email || commit.commit.author?.email || null, + committerId, numberOfDeletions: file.deletions, numberOfAdditions: file.additions, numberOfChanges: file.changes, typeOfChange: file.status, commitTimestamp: commit.commit.author?.date || commit.commit.committer?.date }; - fileMetadata.push(metadata); + commitMeta.files.push(metadata); } - return fileMetadata; + return commitMeta; } /** * Computes a unified diff for a file when the commit API omits the patch. @@ -62834,6 +62848,8 @@ class FileProcessor { const commitInfos = commits.map((commit) => ({ sha: commit.id, email: commit.author?.email || commit.committer?.email || undefined, + committerEmail: commit.committer?.email || undefined, + message: commit.message || undefined, })); return commitInfos; } @@ -62853,7 +62869,9 @@ class FileProcessor { }); const commitInfos = comparison.commits.map((commit) => ({ sha: commit.sha, - email: commit.commit.author?.email || commit.commit.committer?.email || undefined + email: commit.commit.author?.email || commit.commit.committer?.email || undefined, + committerEmail: commit.commit.committer?.email || undefined, + message: commit.commit.message || undefined, })); return commitInfos; } @@ -62874,13 +62892,15 @@ class FileProcessor { }); const commitInfos = commits.map((commit) => ({ sha: commit.sha, - email: commit.commit.author?.email || commit.commit.committer?.email || undefined + email: commit.commit.author?.email || commit.commit.committer?.email || undefined, + committerEmail: commit.commit.committer?.email || undefined, + message: commit.commit.message || undefined, })); this.logger.info(`Found ${commitInfos.length} total commit(s) in PR #${pr.number}`); return commitInfos; } - async getFilesGroupedByCommit(lastProcessedHeadSha) { - const allCommits = await this.getCommits(); + async getFilesGroupedByCommit(lastProcessedHeadSha, prefetchedCommits) { + const allCommits = prefetchedCommits ?? await this.getCommits(); // Find commits to process by skipping everything up to and including lastProcessedHeadSha let commitsToProcess = allCommits; if (lastProcessedHeadSha) { @@ -62897,14 +62917,17 @@ class FileProcessor { this.logger.info('No new commits to process'); return []; } - // Resolve all author emails to user IDs up front - const commitAuthorEmails = new Set(); + // Resolve all author and committer emails to user IDs up front + const allEmails = new Set(); for (const commit of commitsToProcess) { if (commit.email) { - commitAuthorEmails.add(commit.email.toLowerCase()); + allEmails.add(commit.email.toLowerCase()); + } + if (commit.committerEmail) { + allEmails.add(commit.committerEmail.toLowerCase()); } } - const userIdMap = await this.resolveUserIds(commitAuthorEmails); + const userIdMap = await this.resolveUserIds(allEmails); const result = []; for (const commit of commitsToProcess) { this.logger.info(`Processing commit: ${commit.sha}`); @@ -62912,8 +62935,12 @@ class FileProcessor { if (commit.email) { userId = userIdMap[commit.email.toLowerCase()] || this.config.userId; } - const files = await this.getFilesForCommit(commit.sha, userId); - result.push({ sha: commit.sha, files }); + let committerId; + if (commit.committerEmail) { + committerId = userIdMap[commit.committerEmail.toLowerCase()] || this.config.userId; + } + const commitFiles = await this.getFilesForCommit(commit.sha, userId, committerId); + result.push(commitFiles); } return result; } @@ -62960,6 +62987,9 @@ class PayloadBuilder { maxPayloadSize = 1024 * 1024 * 3; // 3MB static domain = "github.com"; static scopeActivity = "uploadText"; + static appName = "GitHub"; + static appVersion = "0.0.1"; + static correlationIdSuffix = "@GA"; constructor(config) { this.config = config; this.logger = new logger_Logger('PayloadBuilder'); @@ -62974,8 +63004,8 @@ class PayloadBuilder { } ], integratedAppMetadata: { - name: "Github", - version: "0.0.1", + name: PayloadBuilder.appName, + version: PayloadBuilder.appVersion, }, }; return request; @@ -63151,7 +63181,7 @@ class PayloadBuilder { } buildUploadSignalRequest(files, prInfo) { const requests = []; - const conversationId = crypto.randomUUID() + '@GA'; + const conversationId = crypto.randomUUID() + PayloadBuilder.correlationIdSuffix; let seqNum = 0; for (const file of files) { this.logger.info(`Building upload signal request for file: ${file.path}`); @@ -63162,7 +63192,7 @@ class PayloadBuilder { const singleSize = JSON.stringify(singleCTP).length + 200; // account for wrapper fields if (singleSize <= this.maxPayloadSize) { requests.push({ - id: crypto.randomUUID() + '@GA', + id: crypto.randomUUID() + PayloadBuilder.correlationIdSuffix, userId, userEmail, scopeIdentifier: "", @@ -63179,7 +63209,7 @@ class PayloadBuilder { const isLastChunk = i + maxContentPerChunk >= content.length; const chunkCTP = this.createContentToProcess(file, conversationId, seqNum, !isLastChunk, chunk); requests.push({ - id: crypto.randomUUID() + '@GA', + id: crypto.randomUUID() + PayloadBuilder.correlationIdSuffix, userId, userEmail, scopeIdentifier: "", @@ -63194,7 +63224,7 @@ class PayloadBuilder { } buildProcessContentBatchRequest(files) { const allItems = []; - const conversationId = crypto.randomUUID() + '@GA'; + const conversationId = crypto.randomUUID() + PayloadBuilder.correlationIdSuffix; let seqNum = 0; for (const file of files) { const content = file.content || `File: ${file.path} (${file.size} bytes)`; @@ -63258,32 +63288,39 @@ class PayloadBuilder { "@odata.type": "microsoft.graph.textContent", data: contentOverride ?? file.content ?? `File: ${file.path} (${file.size} bytes)` }; + const agents = []; + if (file.committerId || file.committerEmail) { + agents.push({ + identifier: file.committerId || file.committerEmail || '', + name: file.committerLogin || file.committerEmail || undefined, + }); + } + const entry = { + "@odata.type": "microsoft.graph.processConversationMetadata", + identifier: file.path, + name: file.path, + correlationId: conversationId, + sequenceNumber: messageId, + length: file.size, + isTruncated, + createdDateTime: now, + modifiedDateTime: now, + content: fileContent, + ...(agents.length > 0 ? { agents } : {}), + }; return { - contentEntries: [ - { - "@odata.type": "microsoft.graph.processConversationMetadata", - identifier: file.path, - name: file.path, - correlationId: conversationId, - sequenceNumber: messageId, - length: file.size, - isTruncated, - createdDateTime: now, - modifiedDateTime: now, - content: fileContent - } - ], + contentEntries: [entry], activityMetadata: { activity: Activity.uploadText, }, deviceMetadata: {}, integratedAppMetadata: { - name: "Github", - version: "0.0.1", + name: PayloadBuilder.appName, + version: PayloadBuilder.appVersion, }, protectedAppMetadata: { - name: "Github", - version: "0.0.1", + name: PayloadBuilder.appName, + version: PayloadBuilder.appVersion, applicationLocation: { "@odata.type": "microsoft.graph.policyLocationDomain", value: `https://${PayloadBuilder.domain}` @@ -63291,6 +63328,121 @@ class PayloadBuilder { } }; } + /** + * Build the text content representing a git commit's metadata. + */ + buildCommitContentText(commitGroup) { + const lines = [ + `Commit: ${commitGroup.sha}`, + ]; + if (commitGroup.message) { + lines.push(`Message: ${commitGroup.message}`); + } + if (commitGroup.authorName || commitGroup.authorEmail) { + lines.push(`Author: ${commitGroup.authorName || ''} <${commitGroup.authorEmail || ''}>`); + } + if (commitGroup.committerName || commitGroup.committerEmail) { + lines.push(`Committer: ${commitGroup.committerName || ''} <${commitGroup.committerEmail || ''}>`); + } + if (commitGroup.timestamp) { + lines.push(`Date: ${commitGroup.timestamp}`); + } + if (commitGroup.files.length > 0) { + lines.push('', 'Changed files:'); + for (const file of commitGroup.files) { + const changeType = file.typeOfChange || 'modified'; + const additions = file.numberOfAdditions ?? 0; + const deletions = file.numberOfDeletions ?? 0; + lines.push(` ${changeType}: ${file.path} (+${additions} -${deletions})`); + } + } + return lines.join('\n'); + } + /** + * Build a ContentToProcess for a git commit (commit-level metadata request). + */ + buildCommitContentToProcess(commitGroup, conversationId, sequenceNumber) { + const now = new Date().toISOString(); + const commitContent = this.buildCommitContentText(commitGroup); + const commitIdentifier = `commit:${commitGroup.sha}`; + const fileContent = { + "@odata.type": "microsoft.graph.textContent", + data: commitContent, + }; + const agents = []; + if (commitGroup.committerId || commitGroup.committerEmail) { + agents.push({ + identifier: commitGroup.committerId || commitGroup.committerEmail || '', + name: commitGroup.committerLogin || commitGroup.committerEmail || undefined, + }); + } + const entry = { + "@odata.type": "microsoft.graph.processConversationMetadata", + identifier: commitIdentifier, + name: commitIdentifier, + correlationId: conversationId, + sequenceNumber, + length: commitContent.length, + isTruncated: false, + createdDateTime: commitGroup.timestamp || now, + modifiedDateTime: commitGroup.timestamp || now, + content: fileContent, + ...(agents.length > 0 ? { agents } : {}), + }; + return { + contentEntries: [entry], + activityMetadata: { + activity: Activity.uploadText, + }, + deviceMetadata: {}, + integratedAppMetadata: { + name: PayloadBuilder.appName, + version: PayloadBuilder.appVersion, + }, + protectedAppMetadata: { + name: PayloadBuilder.appName, + version: PayloadBuilder.appVersion, + applicationLocation: { + "@odata.type": "microsoft.graph.policyLocationDomain", + value: `https://${PayloadBuilder.domain}`, + }, + }, + }; + } + /** + * Build a per-user ProcessContentRequest for a git commit (inline PC). + */ + buildCommitProcessContentRequest(commitGroup, conversationId, sequenceNumber) { + const ctp = this.buildCommitContentToProcess(commitGroup, conversationId, sequenceNumber); + return { contentToProcess: ctp }; + } + /** + * Build an UploadSignalRequest for a git commit (contentActivities fallback). + */ + buildCommitUploadSignalRequest(commitGroup, prInfo) { + const conversationId = crypto.randomUUID() + PayloadBuilder.correlationIdSuffix; + const ctp = this.buildCommitContentToProcess(commitGroup, conversationId, 0); + const userId = commitGroup.authorId || this.config.userId; + const userEmail = commitGroup.authorEmail || prInfo.authorEmail; + return { + id: crypto.randomUUID() + PayloadBuilder.correlationIdSuffix, + userId, + userEmail, + scopeIdentifier: "", + contentMetadata: ctp, + }; + } + /** + * Build a ProcessContentBatchRequest item for a git commit (PCA batch). + */ + buildCommitProcessContentBatchItem(commitGroup, conversationId, sequenceNumber) { + const ctp = this.buildCommitContentToProcess(commitGroup, conversationId, sequenceNumber); + return { + contentToProcess: ctp, + userId: commitGroup.authorId || this.config.userId, + requestId: crypto.randomUUID(), + }; + } } //# sourceMappingURL=payloadBuilder.js.map ;// CONCATENATED MODULE: ./dist/utils/blockDetector.js @@ -63858,9 +64010,7 @@ class GitHubActionsRunner { const prInfo = await this.fileProcessor.getPrInfo(); const failedPayloads = []; const blockedFiles = []; - // Cache of userIds that returned 401 on User PS — skip them on subsequent calls const userPsDeniedCache = new Set(); - // Cache of successful User PS responses — avoids redundant API calls for the same user across commits const userPsCache = new Map(); // ─── Full Scan Path (first run or manual workflow dispatch) ─── let fullScanFileCount = 0; @@ -63875,184 +64025,22 @@ class GitHubActionsRunner { // ─── PR Diff Path (skip if manually triggered) ─── let diffFileCount = 0; if (!isManualDispatch) { - // Step 4: Process commits - this.logger.info('Running PR diff flow'); - // Get the commit list, then find the last processed position via workflow run history - const allCommits = await this.fileProcessor.getCommits(); - const commitShaSet = new Set(allCommits.map(c => c.sha)); - const lastProcessedSha = await this.findLastProcessedCommitSha(commitShaSet); - // Get files grouped by commit, skipping already-processed commits - const commitGroups = await this.fileProcessor.getFilesGroupedByCommit(lastProcessedSha); - if (commitGroups.length === 0) { - this.logger.warn('No new commits to process for PR diff'); - } - else { - for (const commitGroup of commitGroups) { - const { sha, files } = commitGroup; - this.logger.info(`── Processing commit ${sha} with ${files.length} file(s) ──`); - if (files.length === 0) { - this.logger.info(`Commit ${sha} has no matching files, skipping`); - continue; - } - diffFileCount += files.length; - // Group files by userId - const filesByUser = new Map(); - for (const file of files) { - const userId = file.authorId || this.config.userId; - const existing = filesByUser.get(userId) || []; - existing.push(file); - filesByUser.set(userId, existing); - } - this.logger.info(`Commit ${sha}: ${files.length} file(s) across ${filesByUser.size} user(s)`); - const psRequest = this.payloadBuilder.buildProtectionScopesRequest(); - const requestLocation = psRequest.locations?.[0]; - // Process each user's files - for (const [userId, userFiles] of filesByUser) { - this.logger.info(`Processing ${userFiles.length} file(s) for user ${userId}`); - // Check User PS denial cache (401 from earlier call) - if (userPsDeniedCache.has(userId)) { - this.logger.warn(`Skipping user ${userId} — cached 401 from earlier PS call. Routing to contentActivities.`); - await this.sendContentActivities(userFiles, prInfo, failedPayloads); - continue; - } - // Call per-user protection scopes (check cache first) - let psApiResponse = userPsCache.get(userId); - if (psApiResponse) { - this.logger.info(`Using cached PS response for user ${userId}`); - } - else { - psApiResponse = await this.purviewClient.searchUserProtectionScope(userId, psRequest); - if (psApiResponse.success) { - userPsCache.set(userId, psApiResponse); - } - } - if (!psApiResponse.success) { - this.logger.error(`Failed to get protection scopes for user ${userId}: ${psApiResponse.error}`); - failedPayloads.push(`ps-${userId}`); - // Cache 401s so we don't retry this user - if (psApiResponse.statusCode === 401) { - userPsDeniedCache.add(userId); - this.logger.warn(`User ${userId} returned 401 on PS — cached, will skip in future calls.`); - } - await this.sendContentActivities(userFiles, prInfo, failedPayloads); - continue; - } - const psResponse = psApiResponse.data; - const scopeIdentifier = psApiResponse.etag || ''; - if (!psResponse || !psResponse.value) { - this.logger.warn(`Empty protection scopes response for user ${userId}, routing all files to contentActivities`); - await this.sendContentActivities(userFiles, prInfo, failedPayloads); - continue; - } - // Check applicable scopes - const scopeCheck = this.payloadBuilder.checkApplicableScopes(psResponse.value, Activity.uploadText, requestLocation); - if (!scopeCheck.shouldProcess) { - // No matching scopes → contentActivities (fire-and-forget) - this.logger.info(`No matching scopes for user ${userId}, routing ${userFiles.length} file(s) to contentActivities`); - await this.sendContentActivities(userFiles, prInfo, failedPayloads); - continue; - } - // Matching scopes found — route based on execution mode - if (scopeCheck.executionMode === ExecutionMode.evaluateInline) { - // evaluateInline → per-user PC, synchronous, parse for blocks - this.logger.info(`evaluateInline: calling processContent for ${userFiles.length} file(s), user ${userId}`); - const conversationId = crypto.randomUUID(); - let seqNum = 0; - for (const file of userFiles) { - const pcRequests = this.payloadBuilder.buildPerUserProcessContentRequest(file, conversationId, seqNum); - seqNum += pcRequests.length; - for (const pcRequest of pcRequests) { - let pcResponse = await this.purviewClient.processContent(userId, pcRequest, scopeIdentifier, true); - if (!pcResponse.success) { - this.logger.error(`PC failed for file ${file.path}: ${pcResponse.error}. Falling back to contentActivities.`); - failedPayloads.push(`pc-${file.path}`); - await this.sendContentActivities([file], prInfo, failedPayloads); - continue; - } - const pcData = pcResponse.data; - // Handle protectionScopeState: "modified" → re-fetch scopes and retry - if (pcData?.protectionScopeState === 'modified') { - this.logger.info(`Protection scope state modified for user ${userId}, re-fetching scopes and retrying PC for ${file.path}`); - const freshPsResponse = await this.purviewClient.searchUserProtectionScope(userId, psRequest); - if (freshPsResponse.success && freshPsResponse.data) { - userPsCache.set(userId, freshPsResponse); - const freshScopeId = freshPsResponse.etag || ''; - pcResponse = await this.purviewClient.processContent(userId, pcRequest, freshScopeId, true); - if (!pcResponse.success) { - this.logger.error(`PC retry failed for file ${file.path}: ${pcResponse.error}`); - failedPayloads.push(`pc-retry-${file.path}`); - continue; - } - } - } - // Check for block actions - const responseData = pcResponse.data; - if (responseData && isBlocked(responseData)) { - const blockingActions = getBlockingActions(responseData); - this.logger.warn(`BLOCKED: File ${file.path} blocked by ${blockingActions.length} policy action(s)`); - blockedFiles.push({ - filePath: file.path, - userId, - policyActions: blockingActions, - }); - } - } - } - } - else { - // evaluateOffline → PCA batch (fire-and-forget) - this.logger.info(`evaluateOffline: sending ${userFiles.length} file(s) to PCA batch for user ${userId}`); - const pcaBatchRequests = this.payloadBuilder.buildProcessContentBatchRequest(userFiles); - for (const pcaBatchRequest of pcaBatchRequests) { - const pcaResult = await this.purviewClient.processContentAsync(pcaBatchRequest); - if (!pcaResult.success) { - this.logger.error(`PCA batch failed for user ${userId}: ${pcaResult.error}. Falling back to contentActivities.`); - failedPayloads.push(`pca-${userId}`); - await this.sendContentActivities(userFiles, prInfo, failedPayloads); - } - } - } - } - this.logger.info(`Commit ${sha} processed successfully`); - } - // Post PR review comment if any files were blocked - if (blockedFiles.length > 0 && prInfo.url) { - this.logger.info(`${blockedFiles.length} file(s) blocked, posting PR review comment`); - try { - const githubToken = process.env['GITHUB_TOKEN'] || ''; - const prNumber = parseInt(prInfo.url?.split('/').pop() || '0', 10); - if (githubToken && prNumber > 0) { - const octokit = getOctokit(githubToken); - const prCommentService = new PrCommentService(octokit, this.config.repository.owner, this.config.repository.repo, prNumber); - await prCommentService.postBlockedFilesReview(blockedFiles); - } - else { - this.logger.warn('Cannot post PR comment: missing GITHUB_TOKEN or PR number'); - } - } - catch (e) { - this.logger.warn('Failed to post PR review comment (non-fatal).', { error: e }); - } - } - } + diffFileCount = await this.processDiffPath(prInfo, failedPayloads, blockedFiles, userPsDeniedCache, userPsCache); } else { this.logger.info('Skipping PR diff processing (manually triggered workflow)'); } - // Step 5: Set outputs + // ─── Outputs & Summary ─── const totalProcessed = fullScanFileCount + diffFileCount; setOutput('processed-files', totalProcessed); setOutput('failed-requests', failedPayloads.length); setOutput('blocked-files', JSON.stringify(blockedFiles.map(bf => bf.filePath))); - // Step 6: Summary await this.createSummary(totalProcessed, failedPayloads, blockedFiles); - // Step 7: Fail the action if any files were blocked if (blockedFiles.length > 0) { const blockedFilePaths = blockedFiles.map(bf => bf.filePath).join(', '); const message = `Action failed: ${blockedFiles.length} file(s) were blocked by data security policies: ${blockedFilePaths}`; this.logger.error(message); setFailed(message); - return; } } catch (error) { @@ -64060,6 +64048,232 @@ class GitHubActionsRunner { throw error; } } + // ────────────────────────────────────────────────────────────────── + // Diff path orchestration + // ────────────────────────────────────────────────────────────────── + async processDiffPath(prInfo, failedPayloads, blockedFiles, userPsDeniedCache, userPsCache) { + this.logger.info('Running PR diff flow'); + const allCommits = await this.fileProcessor.getCommits(); + const commitShaSet = new Set(allCommits.map(c => c.sha)); + const lastProcessedSha = await this.findLastProcessedCommitSha(commitShaSet); + const commitGroups = await this.fileProcessor.getFilesGroupedByCommit(lastProcessedSha, allCommits); + if (commitGroups.length === 0) { + this.logger.warn('No new commits to process for PR diff'); + return 0; + } + const psRequest = this.payloadBuilder.buildProtectionScopesRequest(); + const requestLocation = psRequest.locations?.[0]; + if (!requestLocation) { + this.logger.error('Protection scope request has no locations configured'); + throw new Error('Protection scope request has no locations configured'); + } + const ctx = { + prInfo, psRequest, requestLocation, + failedPayloads, blockedFiles, userPsDeniedCache, userPsCache, + }; + let diffFileCount = 0; + for (const commitGroup of commitGroups) { + diffFileCount += await this.processCommitGroup(commitGroup, ctx); + } + // Post PR review comment if any files were blocked + if (blockedFiles.length > 0 && prInfo.url) { + await this.postBlockedFilesReview(prInfo, blockedFiles); + } + return diffFileCount; + } + async processCommitGroup(commitGroup, ctx) { + const { sha, files } = commitGroup; + this.logger.info(`── Processing commit ${sha} with ${files.length} file(s) ──`); + if (files.length === 0) { + this.logger.info(`Commit ${sha} has no matching files, skipping`); + return 0; + } + // Group files by userId + const filesByUser = new Map(); + for (const file of files) { + const userId = file.authorId || this.config.userId; + const existing = filesByUser.get(userId) || []; + existing.push(file); + filesByUser.set(userId, existing); + } + this.logger.info(`Commit ${sha}: ${files.length} file(s) across ${filesByUser.size} user(s)`); + for (const [userId, userFiles] of filesByUser) { + await this.processUserFiles(userId, userFiles, ctx); + } + await this.sendCommitRequest(commitGroup, ctx); + this.logger.info(`Commit ${sha} processed successfully`); + return files.length; + } + // ────────────────────────────────────────────────────────────────── + // Per-user file processing + // ────────────────────────────────────────────────────────────────── + async processUserFiles(userId, userFiles, ctx) { + this.logger.info(`Processing ${userFiles.length} file(s) for user ${userId}`); + const psResult = await this.resolveUserPsWithCache(userId, ctx); + if (!psResult) { + await this.sendContentActivities(userFiles, ctx.prInfo, ctx.failedPayloads); + return; + } + const { psResponse, scopeIdentifier } = psResult; + // Check applicable scopes + const scopeCheck = this.payloadBuilder.checkApplicableScopes(psResponse.value, Activity.uploadText, ctx.requestLocation); + if (!scopeCheck.shouldProcess) { + this.logger.info(`No matching scopes for user ${userId}, routing ${userFiles.length} file(s) to contentActivities`); + await this.sendContentActivities(userFiles, ctx.prInfo, ctx.failedPayloads); + return; + } + if (scopeCheck.executionMode === ExecutionMode.evaluateInline) { + await this.processFilesInline(userId, userFiles, scopeIdentifier, ctx); + } + else { + await this.processFilesOffline(userId, userFiles, ctx); + } + } + async processFilesInline(userId, userFiles, scopeIdentifier, ctx) { + this.logger.info(`evaluateInline: calling processContent for ${userFiles.length} file(s), user ${userId}`); + const conversationId = crypto.randomUUID(); + let seqNum = 0; + for (const file of userFiles) { + const pcRequests = this.payloadBuilder.buildPerUserProcessContentRequest(file, conversationId, seqNum); + seqNum += pcRequests.length; + for (const pcRequest of pcRequests) { + let pcResponse = await this.purviewClient.processContent(userId, pcRequest, scopeIdentifier, true); + if (!pcResponse.success) { + this.logger.error(`PC failed for file ${file.path}: ${pcResponse.error}. Falling back to contentActivities.`); + ctx.failedPayloads.push(`pc-${file.path}`); + await this.sendContentActivities([file], ctx.prInfo, ctx.failedPayloads); + continue; + } + const pcData = pcResponse.data; + // Handle protectionScopeState: "modified" → re-fetch scopes and retry + if (pcData?.protectionScopeState === 'modified') { + this.logger.info(`Protection scope state modified for user ${userId}, re-fetching scopes and retrying PC for ${file.path}`); + const freshPsResponse = await this.purviewClient.searchUserProtectionScope(userId, ctx.psRequest); + if (freshPsResponse.success && freshPsResponse.data) { + ctx.userPsCache.set(userId, freshPsResponse); + const freshScopeId = freshPsResponse.etag || ''; + pcResponse = await this.purviewClient.processContent(userId, pcRequest, freshScopeId, true); + if (!pcResponse.success) { + this.logger.error(`PC retry failed for file ${file.path}: ${pcResponse.error}`); + ctx.failedPayloads.push(`pc-retry-${file.path}`); + continue; + } + } + } + // Check for block actions + const responseData = pcResponse.data; + if (responseData && isBlocked(responseData)) { + const blockingActions = getBlockingActions(responseData); + this.logger.warn(`BLOCKED: File ${file.path} blocked by ${blockingActions.length} policy action(s)`); + ctx.blockedFiles.push({ + filePath: file.path, + userId, + policyActions: blockingActions, + }); + } + } + } + } + async processFilesOffline(userId, userFiles, ctx) { + this.logger.info(`evaluateOffline: sending ${userFiles.length} file(s) to PCA batch for user ${userId}`); + const pcaBatchRequests = this.payloadBuilder.buildProcessContentBatchRequest(userFiles); + for (const pcaBatchRequest of pcaBatchRequests) { + const pcaResult = await this.purviewClient.processContentAsync(pcaBatchRequest); + if (!pcaResult.success) { + this.logger.error(`PCA batch failed for user ${userId}: ${pcaResult.error}. Falling back to contentActivities.`); + ctx.failedPayloads.push(`pca-${userId}`); + await this.sendContentActivities(userFiles, ctx.prInfo, ctx.failedPayloads); + } + } + } + // ────────────────────────────────────────────────────────────────── + // Shared PS resolution + commit-level + fallback helpers + // ────────────────────────────────────────────────────────────────── + /** + * Resolve user protection scopes using the cache. Returns the PS response + * and etag, or null if the caller should fall back to contentActivities. + */ + async resolveUserPsWithCache(userId, ctx) { + if (ctx.userPsDeniedCache.has(userId)) { + this.logger.warn(`Skipping user ${userId} — cached 401 from earlier PS call. Routing to contentActivities.`); + return null; + } + let psApiResponse = ctx.userPsCache.get(userId); + if (psApiResponse) { + this.logger.info(`Using cached PS response for user ${userId}`); + } + else { + psApiResponse = await this.purviewClient.searchUserProtectionScope(userId, ctx.psRequest); + if (psApiResponse.success) { + ctx.userPsCache.set(userId, psApiResponse); + } + } + if (!psApiResponse.success) { + this.logger.error(`Failed to get protection scopes for user ${userId}: ${psApiResponse.error}`); + ctx.failedPayloads.push(`ps-${userId}`); + if (psApiResponse.statusCode === 401) { + ctx.userPsDeniedCache.add(userId); + this.logger.warn(`User ${userId} returned 401 on PS — cached, will skip in future calls.`); + } + return null; + } + const psResponse = psApiResponse.data; + if (!psResponse || !psResponse.value) { + this.logger.warn(`Empty protection scopes response for user ${userId}, routing to contentActivities`); + return null; + } + return { psResponse, scopeIdentifier: psApiResponse.etag || '' }; + } + /** + * Send a commit-level request through the same routing as file requests. + */ + async sendCommitRequest(commitGroup, ctx) { + const commitUserId = commitGroup.authorId || this.config.userId; + const commitIdentifier = `commit:${commitGroup.sha}`; + this.logger.info(`Sending commit-level request for ${commitIdentifier}, user ${commitUserId}`); + const psResult = await this.resolveUserPsWithCache(commitUserId, ctx); + if (!psResult) { + await this.sendCommitContentActivity(commitGroup, ctx.prInfo, ctx.failedPayloads); + return; + } + const scopeCheck = this.payloadBuilder.checkApplicableScopes(psResult.psResponse.value, Activity.uploadText, ctx.requestLocation); + if (!scopeCheck.shouldProcess) { + await this.sendCommitContentActivity(commitGroup, ctx.prInfo, ctx.failedPayloads); + return; + } + if (scopeCheck.executionMode === ExecutionMode.evaluateInline) { + const conversationId = crypto.randomUUID(); + const pcRequest = this.payloadBuilder.buildCommitProcessContentRequest(commitGroup, conversationId, 0); + const pcResponse = await this.purviewClient.processContent(commitUserId, pcRequest, psResult.scopeIdentifier, true); + if (!pcResponse.success) { + this.logger.error(`PC failed for commit ${commitGroup.sha}: ${pcResponse.error}. Falling back to contentActivities.`); + ctx.failedPayloads.push(`pc-commit-${commitGroup.sha}`); + await this.sendCommitContentActivity(commitGroup, ctx.prInfo, ctx.failedPayloads); + return; + } + const pcData = pcResponse.data; + if (pcData && isBlocked(pcData)) { + const blockingActions = getBlockingActions(pcData); + this.logger.warn(`BLOCKED: Commit ${commitGroup.sha} blocked by ${blockingActions.length} policy action(s)`); + ctx.blockedFiles.push({ + filePath: commitIdentifier, + userId: commitUserId, + policyActions: blockingActions, + }); + } + } + else { + const conversationId = crypto.randomUUID() + '@GA'; + const pcaItem = this.payloadBuilder.buildCommitProcessContentBatchItem(commitGroup, conversationId, 0); + const pcaBatch = { processContentRequests: [pcaItem] }; + const pcaResult = await this.purviewClient.processContentAsync(pcaBatch); + if (!pcaResult.success) { + this.logger.error(`PCA failed for commit ${commitGroup.sha}: ${pcaResult.error}. Falling back to contentActivities.`); + ctx.failedPayloads.push(`pca-commit-${commitGroup.sha}`); + await this.sendCommitContentActivity(commitGroup, ctx.prInfo, ctx.failedPayloads); + } + } + } async sendContentActivities(files, prInfo, failedPayloads) { const uploadRequests = this.payloadBuilder.buildUploadSignalRequest(files, prInfo); for (const req of uploadRequests) { @@ -64070,6 +64284,32 @@ class GitHubActionsRunner { } } } + async sendCommitContentActivity(commitGroup, prInfo, failedPayloads) { + const req = this.payloadBuilder.buildCommitUploadSignalRequest(commitGroup, prInfo); + const result = await this.purviewClient.uploadSignal(req); + if (!result.success) { + this.logger.error(`ContentActivities upload failed for commit ${commitGroup.sha}: ${result.error}`); + failedPayloads.push(`ca-commit-${commitGroup.sha}`); + } + } + async postBlockedFilesReview(prInfo, blockedFiles) { + this.logger.info(`${blockedFiles.length} file(s) blocked, posting PR review comment`); + try { + const githubToken = process.env['GITHUB_TOKEN'] || ''; + const prNumber = parseInt(prInfo.url?.split('/').pop() || '0', 10); + if (githubToken && prNumber > 0) { + const octokit = getOctokit(githubToken); + const prCommentService = new PrCommentService(octokit, this.config.repository.owner, this.config.repository.repo, prNumber); + await prCommentService.postBlockedFilesReview(blockedFiles); + } + else { + this.logger.warn('Cannot post PR comment: missing GITHUB_TOKEN or PR number'); + } + } + catch (e) { + this.logger.warn('Failed to post PR review comment (non-fatal).', { error: e }); + } + } async createSummary(processed, failed, blocked = []) { const summary = summary_summary .addHeading('Purview GitHub Action Results') diff --git a/dist/payload/PayloadBuilder.d.ts b/dist/payload/PayloadBuilder.d.ts index 9dea0bf..f7d1ffb 100644 --- a/dist/payload/PayloadBuilder.d.ts +++ b/dist/payload/PayloadBuilder.d.ts @@ -1,10 +1,13 @@ -import { ActionConfig, FileMetadata, UploadSignalRequest, Activity, PrInfo, ProtectionScopesRequest, ProtectionScopesResponse, SplitPCRequests, ProcessContentBatchRequest, ProcessContentRequest, ScopeCheckResult, PolicyScopes, PolicyLocation } from '../config/types'; +import { ActionConfig, FileMetadata, UploadSignalRequest, Activity, PrInfo, ProtectionScopesRequest, ProtectionScopesResponse, SplitPCRequests, ProcessContentBatchRequest, ProcessContentRequestItem, ProcessContentRequest, ContentToProcess, ScopeCheckResult, PolicyScopes, PolicyLocation, CommitFiles } from '../config/types'; export declare class PayloadBuilder { private readonly config; private readonly logger; private readonly maxPayloadSize; private static readonly domain; private static readonly scopeActivity; + private static readonly appName; + private static readonly appVersion; + private static readonly correlationIdSuffix; constructor(config: ActionConfig); buildProtectionScopesRequest(): ProtectionScopesRequest; buildProcessAndUploadRequests(files: FileMetadata[], scopeResponse: ProtectionScopesResponse, prInfo: PrInfo): SplitPCRequests; @@ -25,5 +28,25 @@ export declare class PayloadBuilder { buildUploadSignalRequest(files: FileMetadata[], prInfo: PrInfo): UploadSignalRequest[]; buildProcessContentBatchRequest(files: FileMetadata[]): ProcessContentBatchRequest[]; private createContentToProcess; + /** + * Build the text content representing a git commit's metadata. + */ + private buildCommitContentText; + /** + * Build a ContentToProcess for a git commit (commit-level metadata request). + */ + buildCommitContentToProcess(commitGroup: CommitFiles, conversationId: string, sequenceNumber: number): ContentToProcess; + /** + * Build a per-user ProcessContentRequest for a git commit (inline PC). + */ + buildCommitProcessContentRequest(commitGroup: CommitFiles, conversationId: string, sequenceNumber: number): ProcessContentRequest; + /** + * Build an UploadSignalRequest for a git commit (contentActivities fallback). + */ + buildCommitUploadSignalRequest(commitGroup: CommitFiles, prInfo: PrInfo): UploadSignalRequest; + /** + * Build a ProcessContentBatchRequest item for a git commit (PCA batch). + */ + buildCommitProcessContentBatchItem(commitGroup: CommitFiles, conversationId: string, sequenceNumber: number): ProcessContentRequestItem; } //# sourceMappingURL=payloadBuilder.d.ts.map \ No newline at end of file diff --git a/dist/payload/PayloadBuilder.d.ts.map b/dist/payload/PayloadBuilder.d.ts.map index 735c4ce..200fe88 100644 --- a/dist/payload/PayloadBuilder.d.ts.map +++ b/dist/payload/PayloadBuilder.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"payloadBuilder.d.ts","sourceRoot":"","sources":["../../src/payload/payloadBuilder.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,mBAAmB,EAAE,QAAQ,EAAe,MAAM,EAAE,uBAAuB,EAAE,wBAAwB,EAAE,eAAe,EAA6B,0BAA0B,EAA6B,qBAAqB,EAAoB,gBAAgB,EAAiB,YAAY,EAAE,cAAc,EAAiB,MAAM,iBAAiB,CAAC;AAG9X,qBAAa,cAAc;IAMb,OAAO,CAAC,QAAQ,CAAC,MAAM;IALnC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAChC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAmB;IAClD,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAwB;IACtD,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,aAAa,CAA2C;gBAEnD,MAAM,EAAE,YAAY;IAIjD,4BAA4B,IAAI,uBAAuB;IAkBvD,6BAA6B,CAAC,KAAK,EAAE,YAAY,EAAE,EAAE,aAAa,EAAE,wBAAwB,EAAE,MAAM,EAAE,MAAM,GAAG,eAAe;IAiG9H;;;;;;;OAOG;IACH,qBAAqB,CACnB,MAAM,EAAE,YAAY,EAAE,EACtB,eAAe,EAAE,QAAQ,EACzB,eAAe,EAAE,cAAc,GAC9B,gBAAgB;IAoDnB;;OAEG;IACH,iCAAiC,CAAC,IAAI,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,qBAAqB,EAAE;IA0BzH,OAAO,CAAC,aAAa;IAerB,wBAAwB,CAAC,KAAK,EAAE,YAAY,EAAE,EAAE,MAAM,EAAE,MAAM,GAAG,mBAAmB,EAAE;IAiDtF,+BAA+B,CAAC,KAAK,EAAE,YAAY,EAAE,GAAG,0BAA0B,EAAE;IA8DpF,OAAO,CAAC,sBAAsB;CAiD/B"} \ No newline at end of file +{"version":3,"file":"payloadBuilder.d.ts","sourceRoot":"","sources":["../../src/payload/payloadBuilder.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,mBAAmB,EAAE,QAAQ,EAAe,MAAM,EAAE,uBAAuB,EAAE,wBAAwB,EAAE,eAAe,EAA6B,0BAA0B,EAAE,yBAAyB,EAAE,qBAAqB,EAAE,gBAAgB,EAAE,gBAAgB,EAAiB,YAAY,EAAE,cAAc,EAAiB,WAAW,EAA4C,MAAM,iBAAiB,CAAC;AAGrb,qBAAa,cAAc;IASb,OAAO,CAAC,QAAQ,CAAC,MAAM;IARnC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAChC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAmB;IAClD,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAwB;IACtD,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,aAAa,CAA2C;IAChF,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAY;IAC3C,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAW;IAC7C,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,mBAAmB,CAAS;gBAEvB,MAAM,EAAE,YAAY;IAIjD,4BAA4B,IAAI,uBAAuB;IAkBvD,6BAA6B,CAAC,KAAK,EAAE,YAAY,EAAE,EAAE,aAAa,EAAE,wBAAwB,EAAE,MAAM,EAAE,MAAM,GAAG,eAAe;IAiG9H;;;;;;;OAOG;IACH,qBAAqB,CACnB,MAAM,EAAE,YAAY,EAAE,EACtB,eAAe,EAAE,QAAQ,EACzB,eAAe,EAAE,cAAc,GAC9B,gBAAgB;IAoDnB;;OAEG;IACH,iCAAiC,CAAC,IAAI,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,qBAAqB,EAAE;IA0BzH,OAAO,CAAC,aAAa;IAerB,wBAAwB,CAAC,KAAK,EAAE,YAAY,EAAE,EAAE,MAAM,EAAE,MAAM,GAAG,mBAAmB,EAAE;IAiDtF,+BAA+B,CAAC,KAAK,EAAE,YAAY,EAAE,GAAG,0BAA0B,EAAE;IA8DpF,OAAO,CAAC,sBAAsB;IA0D9B;;OAEG;IACH,OAAO,CAAC,sBAAsB;IA+B9B;;OAEG;IACH,2BAA2B,CAAC,WAAW,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,GAAG,gBAAgB;IAqDvH;;OAEG;IACH,gCAAgC,CAAC,WAAW,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,GAAG,qBAAqB;IAKjI;;OAEG;IACH,8BAA8B,CAAC,WAAW,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,GAAG,mBAAmB;IAe7F;;OAEG;IACH,kCAAkC,CAAC,WAAW,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,GAAG,yBAAyB;CASxI"} \ No newline at end of file diff --git a/dist/payload/PayloadBuilder.js b/dist/payload/PayloadBuilder.js index 7273577..185e06c 100644 --- a/dist/payload/PayloadBuilder.js +++ b/dist/payload/PayloadBuilder.js @@ -6,6 +6,9 @@ export class PayloadBuilder { maxPayloadSize = 1024 * 1024 * 3; // 3MB static domain = "github.com"; static scopeActivity = "uploadText"; + static appName = "GitHub"; + static appVersion = "0.0.1"; + static correlationIdSuffix = "@GA"; constructor(config) { this.config = config; this.logger = new Logger('PayloadBuilder'); @@ -20,8 +23,8 @@ export class PayloadBuilder { } ], integratedAppMetadata: { - name: "Github", - version: "0.0.1", + name: PayloadBuilder.appName, + version: PayloadBuilder.appVersion, }, }; return request; @@ -197,7 +200,7 @@ export class PayloadBuilder { } buildUploadSignalRequest(files, prInfo) { const requests = []; - const conversationId = crypto.randomUUID() + '@GA'; + const conversationId = crypto.randomUUID() + PayloadBuilder.correlationIdSuffix; let seqNum = 0; for (const file of files) { this.logger.info(`Building upload signal request for file: ${file.path}`); @@ -208,7 +211,7 @@ export class PayloadBuilder { const singleSize = JSON.stringify(singleCTP).length + 200; // account for wrapper fields if (singleSize <= this.maxPayloadSize) { requests.push({ - id: crypto.randomUUID() + '@GA', + id: crypto.randomUUID() + PayloadBuilder.correlationIdSuffix, userId, userEmail, scopeIdentifier: "", @@ -225,7 +228,7 @@ export class PayloadBuilder { const isLastChunk = i + maxContentPerChunk >= content.length; const chunkCTP = this.createContentToProcess(file, conversationId, seqNum, !isLastChunk, chunk); requests.push({ - id: crypto.randomUUID() + '@GA', + id: crypto.randomUUID() + PayloadBuilder.correlationIdSuffix, userId, userEmail, scopeIdentifier: "", @@ -240,7 +243,7 @@ export class PayloadBuilder { } buildProcessContentBatchRequest(files) { const allItems = []; - const conversationId = crypto.randomUUID() + '@GA'; + const conversationId = crypto.randomUUID() + PayloadBuilder.correlationIdSuffix; let seqNum = 0; for (const file of files) { const content = file.content || `File: ${file.path} (${file.size} bytes)`; @@ -304,32 +307,39 @@ export class PayloadBuilder { "@odata.type": "microsoft.graph.textContent", data: contentOverride ?? file.content ?? `File: ${file.path} (${file.size} bytes)` }; + const agents = []; + if (file.committerId || file.committerEmail) { + agents.push({ + identifier: file.committerId || file.committerEmail || '', + name: file.committerLogin || file.committerEmail || undefined, + }); + } + const entry = { + "@odata.type": "microsoft.graph.processConversationMetadata", + identifier: file.path, + name: file.path, + correlationId: conversationId, + sequenceNumber: messageId, + length: file.size, + isTruncated, + createdDateTime: now, + modifiedDateTime: now, + content: fileContent, + ...(agents.length > 0 ? { agents } : {}), + }; return { - contentEntries: [ - { - "@odata.type": "microsoft.graph.processConversationMetadata", - identifier: file.path, - name: file.path, - correlationId: conversationId, - sequenceNumber: messageId, - length: file.size, - isTruncated, - createdDateTime: now, - modifiedDateTime: now, - content: fileContent - } - ], + contentEntries: [entry], activityMetadata: { activity: Activity.uploadText, }, deviceMetadata: {}, integratedAppMetadata: { - name: "Github", - version: "0.0.1", + name: PayloadBuilder.appName, + version: PayloadBuilder.appVersion, }, protectedAppMetadata: { - name: "Github", - version: "0.0.1", + name: PayloadBuilder.appName, + version: PayloadBuilder.appVersion, applicationLocation: { "@odata.type": "microsoft.graph.policyLocationDomain", value: `https://${PayloadBuilder.domain}` @@ -337,5 +347,120 @@ export class PayloadBuilder { } }; } + /** + * Build the text content representing a git commit's metadata. + */ + buildCommitContentText(commitGroup) { + const lines = [ + `Commit: ${commitGroup.sha}`, + ]; + if (commitGroup.message) { + lines.push(`Message: ${commitGroup.message}`); + } + if (commitGroup.authorName || commitGroup.authorEmail) { + lines.push(`Author: ${commitGroup.authorName || ''} <${commitGroup.authorEmail || ''}>`); + } + if (commitGroup.committerName || commitGroup.committerEmail) { + lines.push(`Committer: ${commitGroup.committerName || ''} <${commitGroup.committerEmail || ''}>`); + } + if (commitGroup.timestamp) { + lines.push(`Date: ${commitGroup.timestamp}`); + } + if (commitGroup.files.length > 0) { + lines.push('', 'Changed files:'); + for (const file of commitGroup.files) { + const changeType = file.typeOfChange || 'modified'; + const additions = file.numberOfAdditions ?? 0; + const deletions = file.numberOfDeletions ?? 0; + lines.push(` ${changeType}: ${file.path} (+${additions} -${deletions})`); + } + } + return lines.join('\n'); + } + /** + * Build a ContentToProcess for a git commit (commit-level metadata request). + */ + buildCommitContentToProcess(commitGroup, conversationId, sequenceNumber) { + const now = new Date().toISOString(); + const commitContent = this.buildCommitContentText(commitGroup); + const commitIdentifier = `commit:${commitGroup.sha}`; + const fileContent = { + "@odata.type": "microsoft.graph.textContent", + data: commitContent, + }; + const agents = []; + if (commitGroup.committerId || commitGroup.committerEmail) { + agents.push({ + identifier: commitGroup.committerId || commitGroup.committerEmail || '', + name: commitGroup.committerLogin || commitGroup.committerEmail || undefined, + }); + } + const entry = { + "@odata.type": "microsoft.graph.processConversationMetadata", + identifier: commitIdentifier, + name: commitIdentifier, + correlationId: conversationId, + sequenceNumber, + length: commitContent.length, + isTruncated: false, + createdDateTime: commitGroup.timestamp || now, + modifiedDateTime: commitGroup.timestamp || now, + content: fileContent, + ...(agents.length > 0 ? { agents } : {}), + }; + return { + contentEntries: [entry], + activityMetadata: { + activity: Activity.uploadText, + }, + deviceMetadata: {}, + integratedAppMetadata: { + name: PayloadBuilder.appName, + version: PayloadBuilder.appVersion, + }, + protectedAppMetadata: { + name: PayloadBuilder.appName, + version: PayloadBuilder.appVersion, + applicationLocation: { + "@odata.type": "microsoft.graph.policyLocationDomain", + value: `https://${PayloadBuilder.domain}`, + }, + }, + }; + } + /** + * Build a per-user ProcessContentRequest for a git commit (inline PC). + */ + buildCommitProcessContentRequest(commitGroup, conversationId, sequenceNumber) { + const ctp = this.buildCommitContentToProcess(commitGroup, conversationId, sequenceNumber); + return { contentToProcess: ctp }; + } + /** + * Build an UploadSignalRequest for a git commit (contentActivities fallback). + */ + buildCommitUploadSignalRequest(commitGroup, prInfo) { + const conversationId = crypto.randomUUID() + PayloadBuilder.correlationIdSuffix; + const ctp = this.buildCommitContentToProcess(commitGroup, conversationId, 0); + const userId = commitGroup.authorId || this.config.userId; + const userEmail = commitGroup.authorEmail || prInfo.authorEmail; + return { + id: crypto.randomUUID() + PayloadBuilder.correlationIdSuffix, + userId, + userEmail, + scopeIdentifier: "", + contentMetadata: ctp, + }; + } + /** + * Build a ProcessContentBatchRequest item for a git commit (PCA batch). + */ + buildCommitProcessContentBatchItem(commitGroup, conversationId, sequenceNumber) { + const ctp = this.buildCommitContentToProcess(commitGroup, conversationId, sequenceNumber); + return { + contentToProcess: ctp, + userId: commitGroup.authorId || this.config.userId, + requestId: crypto.randomUUID(), + }; + } } //# sourceMappingURL=payloadBuilder.js.map \ No newline at end of file diff --git a/dist/payload/PayloadBuilder.js.map b/dist/payload/PayloadBuilder.js.map index 7a419a1..91c40da 100644 --- a/dist/payload/PayloadBuilder.js.map +++ b/dist/payload/PayloadBuilder.js.map @@ -1 +1 @@ -{"version":3,"file":"payloadBuilder.js","sourceRoot":"","sources":["../../src/payload/payloadBuilder.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"payloadBuilder.js","sourceRoot":"","sources":["../../src/payload/payloadBuilder.ts"],"names":[],"mappings":"AAAA,OAAO,EAAmD,QAAQ,EAAwO,aAAa,EAAsG,MAAM,iBAAiB,CAAC;AACrb,OAAO,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AAEzC,MAAM,OAAO,cAAc;IASI;IARZ,MAAM,CAAS;IACf,cAAc,GAAG,IAAI,GAAG,IAAI,GAAG,CAAC,CAAC,CAAC,MAAM;IACjD,MAAM,CAAU,MAAM,GAAW,YAAY,CAAC;IAC9C,MAAM,CAAU,aAAa,GAA8B,YAAY,CAAC;IACxE,MAAM,CAAU,OAAO,GAAG,QAAQ,CAAC;IACnC,MAAM,CAAU,UAAU,GAAG,OAAO,CAAC;IACrC,MAAM,CAAU,mBAAmB,GAAG,KAAK,CAAC;IAEpD,YAA6B,MAAoB;QAApB,WAAM,GAAN,MAAM,CAAc;QAC/C,IAAI,CAAC,MAAM,GAAG,IAAI,MAAM,CAAC,gBAAgB,CAAC,CAAC;IAC7C,CAAC;IAED,4BAA4B;QAC1B,MAAM,OAAO,GAA4B;YACvC,UAAU,EAAE,cAAc,CAAC,aAAa;YACxC,SAAS,EAAE;gBACT;oBACE,aAAa,EAAE,sCAAsC;oBACrD,KAAK,EAAE,WAAW,cAAc,CAAC,MAAM,EAAE;iBAC1C;aACF;YACD,qBAAqB,EAAE;gBACrB,IAAI,EAAE,cAAc,CAAC,OAAO;gBAC5B,OAAO,EAAE,cAAc,CAAC,UAAU;aACnC;SACF,CAAC;QAEF,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,6BAA6B,CAAC,KAAqB,EAAE,aAAuC,EAAE,MAAc;QAC1G,MAAM,cAAc,GAAmB,EAAE,CAAC;QAC1C,MAAM,aAAa,GAAmB,EAAE,CAAC;QAEzC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,IAAI,iBAAiB,GAAY,KAAK,CAAC;YAEvC,KAAK,MAAM,KAAK,IAAI,aAAa,CAAC,KAAK,EAAE,CAAC;gBACxC,IAAI,CAAC,iBAAiB,IAAI,KAAK,CAAC,UAAU,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,YAAY,CAAC,EAAE,CAAC;oBAEhF,IAAI,aAAa,GAAG,KAAK,CAAC;oBAC1B,IAAI,UAAU,GAAG,KAAK,CAAC;oBACvB,IAAI,UAAU,GAAG,KAAK,CAAC;oBAEvB,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC;oBAEpD,kDAAkD;oBAClD,KAAK,MAAM,QAAQ,IAAI,KAAK,CAAC,SAAS,EAAE,CAAC;wBACvC,MAAM,aAAa,GAAG,QAAQ,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC;wBAEnD,IAAI,aAAa,KAAK,KAAK,EAAE,CAAC;4BAC5B,aAAa,GAAG,IAAI,CAAC;4BACrB,MAAM;wBACR,CAAC;6BACI,IAAI,QAAQ,CAAC,aAAa,CAAC,CAAC,QAAQ,CAAC,sBAAsB,CAAC,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC,EAAE,CAAC;4BAC5G,aAAa,GAAG,IAAI,CAAC;4BACrB,MAAM;wBACR,CAAC;6BACI,IAAI,QAAQ,CAAC,aAAa,CAAC,CAAC,QAAQ,CAAC,2BAA2B,CAAC,IAAI,aAAa,KAAK,QAAQ,EAAE,CAAC;4BACrG,aAAa,GAAG,IAAI,CAAC;4BACrB,MAAM;wBACR,CAAC;oBACH,CAAC;oBAED,MAAM,QAAQ,GAAG,CAAC,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,WAAW,EAAE,CAAC;oBACrE,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC;oBAEpD,KAAK,MAAM,SAAS,IAAI,KAAK,CAAC,WAAW,CAAC,UAAU,EAAE,CAAC;wBACrD,MAAM,iBAAiB,GAAG,SAAS,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC;wBAE3D,IAAI,iBAAiB,KAAK,KAAK,EAAE,CAAC;4BAChC,UAAU,GAAG,IAAI,CAAC;4BAClB,MAAM;wBACR,CAAC;6BACI,IAAI,SAAS,CAAC,aAAa,CAAC,CAAC,QAAQ,CAAC,aAAa,CAAC,IAAI,iBAAiB,KAAK,QAAQ,EAAE,CAAC;4BAC5F,UAAU,GAAG,IAAI,CAAC;4BAClB,MAAM;wBACR,CAAC;6BACI,IAAI,SAAS,CAAC,aAAa,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,iBAAiB,KAAK,QAAQ,EAAE,CAAC;4BAC1F,UAAU,GAAG,IAAI,CAAC;4BAClB,MAAM;wBACR,CAAC;oBACH,CAAC;oBAED,KAAK,MAAM,SAAS,IAAI,KAAK,CAAC,WAAW,CAAC,UAAU,EAAE,CAAC;wBACrD,MAAM,iBAAiB,GAAG,SAAS,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC;wBAE3D,IAAI,iBAAiB,KAAK,KAAK,EAAE,CAAC;4BAChC,UAAU,GAAG,IAAI,CAAC;4BAClB,MAAM;wBACR,CAAC;wBACD,IAAI,SAAS,CAAC,aAAa,CAAC,CAAC,QAAQ,CAAC,aAAa,CAAC,IAAI,iBAAiB,KAAK,QAAQ,EAAE,CAAC;4BACvF,UAAU,GAAG,KAAK,CAAC;4BACnB,MAAM;wBACR,CAAC;6BACI,IAAI,SAAS,CAAC,aAAa,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,iBAAiB,KAAK,QAAQ,EAAE,CAAC;4BAC1F,UAAU,GAAG,KAAK,CAAC;4BACnB,MAAM;wBACR,CAAC;oBACH,CAAC;oBAED,IAAI,aAAa,IAAI,UAAU,IAAI,CAAC,UAAU,EAAE,CAAC;wBAC/C,iBAAiB,GAAG,IAAI,CAAC;wBACzB,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,IAAI,CAAC,IAAI,eAAe,CAAC,CAAC;wBACnD,MAAM;oBACR,CAAC;gBACH,CAAC;YACH,CAAC;YAED,IAAI,iBAAiB,EAAE,CAAC;gBACtB,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAC5B,CAAC;iBAAM,CAAC;gBACN,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAC3B,CAAC;QACH,CAAC;QAED,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,qBAAqB,cAAc,CAAC,MAAM,sBAAsB,aAAa,CAAC,MAAM,EAAE,CAAC,CAAC;QAEzG,MAAM,oBAAoB,GAAG,aAAa,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,wBAAwB,CAAC,aAAa,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QAClH,MAAM,WAAW,GAAG,cAAc,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,+BAA+B,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QAE1G,OAAO;YACL,oBAAoB,EAAE,oBAAoB;YAC1C,sBAAsB,EAAE,WAAW;SACpC,CAAC;IACJ,CAAC;IAED;;;;;;;OAOG;IACH,qBAAqB,CACnB,MAAsB,EACtB,eAAyB,EACzB,eAA+B;QAE/B,IAAI,aAAa,GAAG,KAAK,CAAC;QAC1B,MAAM,UAAU,GAAoB,EAAE,CAAC;QACvC,IAAI,aAAa,GAAkB,aAAa,CAAC,eAAe,CAAC;QAEjE,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;YAC3B,iFAAiF;YACjF,MAAM,aAAa,GAAG,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,UAAU,EAAE,eAAe,CAAC,CAAC;YAE5E,MAAM,QAAQ,GAAW,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC;YAC5D,MAAM,mBAAmB,GAAG,eAAe,CAAC,aAAa,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC;YAEjG,wDAAwD;YACxD,IAAI,aAAa,GAAG,KAAK,CAAC;YAC1B,IAAI,eAAe,EAAE,CAAC;gBACpB,KAAK,MAAM,GAAG,IAAI,KAAK,CAAC,SAAS,IAAI,EAAE,EAAE,CAAC;oBACxC,IAAI,GAAG,CAAC,aAAa,CAAC,IAAI,mBAAmB,EAAE,CAAC;wBAC9C,MAAM,WAAW,GAAG,GAAG,CAAC,aAAa,CAAC,CAAC,WAAW,EAAE,CAAC;wBAErD,oEAAoE;wBACpE,IAAI,WAAW,CAAC,QAAQ,CAAC,mBAAmB,CAAC,IAAI,GAAG,CAAC,KAAK,CAAC,WAAW,EAAE,KAAK,eAAe,CAAC,KAAK,CAAC,WAAW,EAAE,EAAE,CAAC;4BACjH,aAAa,GAAG,IAAI,CAAC;4BACrB,MAAM;wBACR,CAAC;wBACD,gFAAgF;6BAC3E,IAAG,WAAW,CAAC,QAAQ,CAAC,2BAA2B,CAAC,IAAI,GAAG,CAAC,KAAK,CAAC,WAAW,EAAE,KAAK,QAAQ,EAAE,CAAC;4BAClG,aAAa,GAAG,IAAI,CAAC;4BACrB,MAAM;wBACR,CAAC;oBACH,CAAC;gBACH,CAAC;YACH,CAAC;YAED,IAAI,aAAa,IAAI,aAAa,EAAE,CAAC;gBACnC,aAAa,GAAG,IAAI,CAAC;gBACrB,2EAA2E;gBAC3E,IAAI,KAAK,CAAC,aAAa,KAAK,aAAa,CAAC,cAAc,EAAE,CAAC;oBACzD,aAAa,GAAG,aAAa,CAAC,cAAc,CAAC;gBAC/C,CAAC;gBACD,IAAI,KAAK,CAAC,aAAa,EAAE,CAAC;oBACxB,UAAU,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,aAAa,CAAC,CAAC;gBAC1C,CAAC;YACH,CAAC;QACH,CAAC;QAED,IAAI,CAAC,MAAM,CAAC,IAAI,CACd,qCAAqC,aAAa,mBAAmB,aAAa,qBAAqB,UAAU,CAAC,MAAM,EAAE,CAC3H,CAAC;QAEF,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,aAAa,EAAE,CAAC;IACtD,CAAC;IAED;;OAEG;IACH,iCAAiC,CAAC,IAAkB,EAAE,cAAsB,EAAE,SAAiB;QAC7F,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,IAAI,SAAS,IAAI,CAAC,IAAI,KAAK,IAAI,CAAC,IAAI,SAAS,CAAC;QAC1E,MAAM,SAAS,GAAG,IAAI,CAAC,sBAAsB,CAAC,IAAI,EAAE,cAAc,EAAE,SAAS,CAAC,CAAC;QAC/E,MAAM,aAAa,GAA0B,EAAE,gBAAgB,EAAE,SAAS,EAAE,CAAC;QAC7E,MAAM,WAAW,GAAG,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC,MAAM,CAAC;QAEzD,IAAI,WAAW,IAAI,IAAI,CAAC,cAAc,EAAE,CAAC;YACvC,OAAO,CAAC,aAAa,CAAC,CAAC;QACzB,CAAC;QAED,2DAA2D;QAC3D,MAAM,QAAQ,GAAG,WAAW,GAAG,OAAO,CAAC,MAAM,CAAC;QAC9C,MAAM,kBAAkB,GAAG,IAAI,CAAC,cAAc,GAAG,QAAQ,GAAG,GAAG,CAAC,CAAC,gBAAgB;QACjF,MAAM,QAAQ,GAA4B,EAAE,CAAC;QAE7C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,IAAI,kBAAkB,EAAE,CAAC;YAC5D,MAAM,KAAK,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,kBAAkB,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC;YACrF,MAAM,WAAW,GAAG,CAAC,GAAG,kBAAkB,IAAI,OAAO,CAAC,MAAM,CAAC;YAC7D,MAAM,QAAQ,GAAG,IAAI,CAAC,sBAAsB,CAAC,IAAI,EAAE,cAAc,EAAE,SAAS,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC;YACrH,QAAQ,CAAC,IAAI,CAAC,EAAE,gBAAgB,EAAE,QAAQ,EAAE,CAAC,CAAC;QAChD,CAAC;QAED,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,cAAc,IAAI,CAAC,IAAI,SAAS,QAAQ,CAAC,MAAM,4BAA4B,CAAC,CAAC;QAC9F,OAAO,QAAQ,CAAC;IAClB,CAAC;IAEO,aAAa,CAAC,eAA0C,EAAE,eAAyB;QACzF,qEAAqE;QACrE,MAAM,WAAW,GAA2B;YAC1C,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE,YAAY;YACnC,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE,YAAY;YACnC,CAAC,QAAQ,CAAC,YAAY,CAAC,EAAE,cAAc;YACvC,CAAC,QAAQ,CAAC,YAAY,CAAC,EAAE,cAAc;SACxC,CAAC;QACF,MAAM,QAAQ,GAAG,WAAW,CAAC,eAAe,CAAC,CAAC;QAC9C,IAAI,CAAC,QAAQ;YAAE,OAAO,KAAK,CAAC;QAE5B,MAAM,QAAQ,GAAG,CAAC,OAAO,eAAe,KAAK,QAAQ,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC;QAC5F,OAAO,QAAQ,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;IACrC,CAAC;IAED,wBAAwB,CAAC,KAAqB,EAAE,MAAc;QAC5D,MAAM,QAAQ,GAA0B,EAAE,CAAC;QAC3C,MAAM,cAAc,GAAG,MAAM,CAAC,UAAU,EAAE,GAAG,cAAc,CAAC,mBAAmB,CAAC;QAChF,IAAI,MAAM,GAAG,CAAC,CAAC;QAEf,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,4CAA4C,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;YAE1E,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,IAAI,SAAS,IAAI,CAAC,IAAI,KAAK,IAAI,CAAC,IAAI,SAAS,CAAC;YAC1E,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC;YACnD,MAAM,SAAS,GAAG,IAAI,CAAC,WAAW,IAAI,MAAM,CAAC,WAAW,CAAC;YAEzD,MAAM,SAAS,GAAG,IAAI,CAAC,sBAAsB,CAAC,IAAI,EAAE,cAAc,EAAE,MAAM,CAAC,CAAC;YAC5E,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,MAAM,GAAG,GAAG,CAAC,CAAC,6BAA6B;YAExF,IAAI,UAAU,IAAI,IAAI,CAAC,cAAc,EAAE,CAAC;gBACtC,QAAQ,CAAC,IAAI,CAAC;oBACZ,EAAE,EAAE,MAAM,CAAC,UAAU,EAAE,GAAG,cAAc,CAAC,mBAAmB;oBAC5D,MAAM;oBACN,SAAS;oBACT,eAAe,EAAE,EAAE;oBACnB,eAAe,EAAE,SAAS;iBAC3B,CAAC,CAAC;gBACH,MAAM,EAAE,CAAC;YACX,CAAC;iBAAM,CAAC;gBACN,4BAA4B;gBAC5B,MAAM,QAAQ,GAAG,UAAU,GAAG,OAAO,CAAC,MAAM,CAAC;gBAC7C,MAAM,kBAAkB,GAAG,IAAI,CAAC,cAAc,GAAG,QAAQ,GAAG,GAAG,CAAC;gBAEhE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,IAAI,kBAAkB,EAAE,CAAC;oBAC5D,MAAM,KAAK,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,kBAAkB,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC;oBACrF,MAAM,WAAW,GAAG,CAAC,GAAG,kBAAkB,IAAI,OAAO,CAAC,MAAM,CAAC;oBAC7D,MAAM,QAAQ,GAAG,IAAI,CAAC,sBAAsB,CAAC,IAAI,EAAE,cAAc,EAAE,MAAM,EAAE,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC;oBAChG,QAAQ,CAAC,IAAI,CAAC;wBACZ,EAAE,EAAE,MAAM,CAAC,UAAU,EAAE,GAAG,cAAc,CAAC,mBAAmB;wBAC5D,MAAM;wBACN,SAAS;wBACT,eAAe,EAAE,EAAE;wBACnB,eAAe,EAAE,QAAQ;qBAC1B,CAAC,CAAC;oBACH,MAAM,EAAE,CAAC;gBACX,CAAC;gBACD,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,cAAc,IAAI,CAAC,IAAI,yCAAyC,CAAC,CAAC;YACrF,CAAC;QACH,CAAC;QAED,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED,+BAA+B,CAAC,KAAqB;QACnD,MAAM,QAAQ,GAAgC,EAAE,CAAC;QACjD,MAAM,cAAc,GAAG,MAAM,CAAC,UAAU,EAAE,GAAG,cAAc,CAAC,mBAAmB,CAAC;QAChF,IAAI,MAAM,GAAG,CAAC,CAAC;QAEf,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,IAAI,SAAS,IAAI,CAAC,IAAI,KAAK,IAAI,CAAC,IAAI,SAAS,CAAC;YAC1E,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC;YACnD,MAAM,SAAS,GAAG,IAAI,CAAC,sBAAsB,CAAC,IAAI,EAAE,cAAc,EAAE,MAAM,CAAC,CAAC;YAC5E,MAAM,UAAU,GAA8B;gBAC5C,gBAAgB,EAAE,SAAS;gBAC3B,MAAM;gBACN,SAAS,EAAE,MAAM,CAAC,UAAU,EAAE;aAC/B,CAAC;YACF,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC,MAAM,CAAC;YAEnD,IAAI,QAAQ,IAAI,IAAI,CAAC,cAAc,EAAE,CAAC;gBACpC,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;gBAC1B,MAAM,EAAE,CAAC;YACX,CAAC;iBAAM,CAAC;gBACN,4DAA4D;gBAC5D,MAAM,QAAQ,GAAG,QAAQ,GAAG,OAAO,CAAC,MAAM,CAAC;gBAC3C,MAAM,kBAAkB,GAAG,IAAI,CAAC,cAAc,GAAG,QAAQ,GAAG,GAAG,CAAC;gBAEhE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,IAAI,kBAAkB,EAAE,CAAC;oBAC5D,MAAM,KAAK,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,kBAAkB,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC;oBACrF,MAAM,WAAW,GAAG,CAAC,GAAG,kBAAkB,IAAI,OAAO,CAAC,MAAM,CAAC;oBAC7D,MAAM,QAAQ,GAAG,IAAI,CAAC,sBAAsB,CAAC,IAAI,EAAE,cAAc,EAAE,MAAM,EAAE,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC;oBAChG,QAAQ,CAAC,IAAI,CAAC;wBACZ,gBAAgB,EAAE,QAAQ;wBAC1B,MAAM;wBACN,SAAS,EAAE,MAAM,CAAC,UAAU,EAAE;qBAC/B,CAAC,CAAC;oBACH,MAAM,EAAE,CAAC;gBACX,CAAC;YACH,CAAC;QACH,CAAC;QAED,0DAA0D;QAC1D,MAAM,OAAO,GAAiC,EAAE,CAAC;QACjD,IAAI,YAAY,GAAgC,EAAE,CAAC;QACnD,IAAI,WAAW,GAAG,CAAC,CAAC;QACpB,MAAM,aAAa,GAAG,EAAE,CAAC;QAEzB,KAAK,MAAM,IAAI,IAAI,QAAQ,EAAE,CAAC;YAC5B,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC;YAC7C,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,IAAI,WAAW,GAAG,QAAQ,GAAG,aAAa,GAAG,IAAI,CAAC,cAAc,EAAE,CAAC;gBAC5F,OAAO,CAAC,IAAI,CAAC,EAAE,sBAAsB,EAAE,YAAY,EAAE,CAAC,CAAC;gBACvD,YAAY,GAAG,EAAE,CAAC;gBAClB,WAAW,GAAG,CAAC,CAAC;YAClB,CAAC;YACD,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACxB,WAAW,IAAI,QAAQ,CAAC;QAC1B,CAAC;QAED,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC5B,OAAO,CAAC,IAAI,CAAC,EAAE,sBAAsB,EAAE,YAAY,EAAE,CAAC,CAAC;QACzD,CAAC;QAED,OAAO,OAAO,CAAC;IACjB,CAAC;IAEO,sBAAsB,CAAC,IAAkB,EAAE,cAAsB,EAAE,SAAiB,EAAE,cAAuB,KAAK,EAAE,eAAwB;QAClJ,IAAI,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC;QAE3B,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,8BAA8B,IAAI,CAAC,IAAI,gBAAgB,IAAI,CAAC,WAAW,0BAA0B,CAAC,CAAC;YACpH,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC;QAC9B,CAAC;QAED,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;QAErC,IAAI,WAAW,GAAgB;YAC7B,aAAa,EAAE,6BAA6B;YAC5C,IAAI,EAAE,eAAe,IAAI,IAAI,CAAC,OAAO,IAAI,SAAS,IAAI,CAAC,IAAI,KAAK,IAAI,CAAC,IAAI,SAAS;SACnF,CAAC;QAEF,MAAM,MAAM,GAAkB,EAAE,CAAC;QACjC,IAAI,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,cAAc,EAAE,CAAC;YAC5C,MAAM,CAAC,IAAI,CAAC;gBACV,UAAU,EAAE,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,cAAc,IAAI,EAAE;gBACzD,IAAI,EAAE,IAAI,CAAC,cAAc,IAAI,IAAI,CAAC,cAAc,IAAI,SAAS;aAC9D,CAAC,CAAC;QACL,CAAC;QAED,MAAM,KAAK,GAAgC;YACzC,aAAa,EAAE,6CAA6C;YAC5D,UAAU,EAAE,IAAI,CAAC,IAAI;YACrB,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,aAAa,EAAE,cAAc;YAC7B,cAAc,EAAE,SAAS;YACzB,MAAM,EAAE,IAAI,CAAC,IAAI;YACjB,WAAW;YACX,eAAe,EAAE,GAAG;YACpB,gBAAgB,EAAE,GAAG;YACrB,OAAO,EAAE,WAAW;YACpB,GAAG,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SACzC,CAAC;QAEF,OAAO;YACL,cAAc,EAAE,CAAC,KAAK,CAAC;YACvB,gBAAgB,EAAE;gBAChB,QAAQ,EAAE,QAAQ,CAAC,UAAU;aAC9B;YACD,cAAc,EAAE,EAAE;YAClB,qBAAqB,EAAE;gBACrB,IAAI,EAAE,cAAc,CAAC,OAAO;gBAC5B,OAAO,EAAE,cAAc,CAAC,UAAU;aACnC;YACD,oBAAoB,EAAE;gBACpB,IAAI,EAAE,cAAc,CAAC,OAAO;gBAC5B,OAAO,EAAE,cAAc,CAAC,UAAU;gBAClC,mBAAmB,EAAE;oBACnB,aAAa,EAAE,sCAAsC;oBACrD,KAAK,EAAE,WAAW,cAAc,CAAC,MAAM,EAAE;iBAC1C;aACF;SACF,CAAC;IACJ,CAAC;IAED;;OAEG;IACK,sBAAsB,CAAC,WAAwB;QACrD,MAAM,KAAK,GAAa;YACtB,WAAW,WAAW,CAAC,GAAG,EAAE;SAC7B,CAAC;QAEF,IAAI,WAAW,CAAC,OAAO,EAAE,CAAC;YACxB,KAAK,CAAC,IAAI,CAAC,YAAY,WAAW,CAAC,OAAO,EAAE,CAAC,CAAC;QAChD,CAAC;QACD,IAAI,WAAW,CAAC,UAAU,IAAI,WAAW,CAAC,WAAW,EAAE,CAAC;YACtD,KAAK,CAAC,IAAI,CAAC,WAAW,WAAW,CAAC,UAAU,IAAI,EAAE,KAAK,WAAW,CAAC,WAAW,IAAI,EAAE,GAAG,CAAC,CAAC;QAC3F,CAAC;QACD,IAAI,WAAW,CAAC,aAAa,IAAI,WAAW,CAAC,cAAc,EAAE,CAAC;YAC5D,KAAK,CAAC,IAAI,CAAC,cAAc,WAAW,CAAC,aAAa,IAAI,EAAE,KAAK,WAAW,CAAC,cAAc,IAAI,EAAE,GAAG,CAAC,CAAC;QACpG,CAAC;QACD,IAAI,WAAW,CAAC,SAAS,EAAE,CAAC;YAC1B,KAAK,CAAC,IAAI,CAAC,SAAS,WAAW,CAAC,SAAS,EAAE,CAAC,CAAC;QAC/C,CAAC;QAED,IAAI,WAAW,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACjC,KAAK,CAAC,IAAI,CAAC,EAAE,EAAE,gBAAgB,CAAC,CAAC;YACjC,KAAK,MAAM,IAAI,IAAI,WAAW,CAAC,KAAK,EAAE,CAAC;gBACrC,MAAM,UAAU,GAAG,IAAI,CAAC,YAAY,IAAI,UAAU,CAAC;gBACnD,MAAM,SAAS,GAAG,IAAI,CAAC,iBAAiB,IAAI,CAAC,CAAC;gBAC9C,MAAM,SAAS,GAAG,IAAI,CAAC,iBAAiB,IAAI,CAAC,CAAC;gBAC9C,KAAK,CAAC,IAAI,CAAC,KAAK,UAAU,KAAK,IAAI,CAAC,IAAI,MAAM,SAAS,KAAK,SAAS,GAAG,CAAC,CAAC;YAC5E,CAAC;QACH,CAAC;QAED,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC1B,CAAC;IAED;;OAEG;IACH,2BAA2B,CAAC,WAAwB,EAAE,cAAsB,EAAE,cAAsB;QAClG,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;QACrC,MAAM,aAAa,GAAG,IAAI,CAAC,sBAAsB,CAAC,WAAW,CAAC,CAAC;QAC/D,MAAM,gBAAgB,GAAG,UAAU,WAAW,CAAC,GAAG,EAAE,CAAC;QAErD,MAAM,WAAW,GAAgB;YAC/B,aAAa,EAAE,6BAA6B;YAC5C,IAAI,EAAE,aAAa;SACpB,CAAC;QAEF,MAAM,MAAM,GAAkB,EAAE,CAAC;QACjC,IAAI,WAAW,CAAC,WAAW,IAAI,WAAW,CAAC,cAAc,EAAE,CAAC;YAC1D,MAAM,CAAC,IAAI,CAAC;gBACV,UAAU,EAAE,WAAW,CAAC,WAAW,IAAI,WAAW,CAAC,cAAc,IAAI,EAAE;gBACvE,IAAI,EAAE,WAAW,CAAC,cAAc,IAAI,WAAW,CAAC,cAAc,IAAI,SAAS;aAC5E,CAAC,CAAC;QACL,CAAC;QAED,MAAM,KAAK,GAAgC;YACzC,aAAa,EAAE,6CAA6C;YAC5D,UAAU,EAAE,gBAAgB;YAC5B,IAAI,EAAE,gBAAgB;YACtB,aAAa,EAAE,cAAc;YAC7B,cAAc;YACd,MAAM,EAAE,aAAa,CAAC,MAAM;YAC5B,WAAW,EAAE,KAAK;YAClB,eAAe,EAAE,WAAW,CAAC,SAAS,IAAI,GAAG;YAC7C,gBAAgB,EAAE,WAAW,CAAC,SAAS,IAAI,GAAG;YAC9C,OAAO,EAAE,WAAW;YACpB,GAAG,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SACzC,CAAC;QAEF,OAAO;YACL,cAAc,EAAE,CAAC,KAAK,CAAC;YACvB,gBAAgB,EAAE;gBAChB,QAAQ,EAAE,QAAQ,CAAC,UAAU;aAC9B;YACD,cAAc,EAAE,EAAE;YAClB,qBAAqB,EAAE;gBACrB,IAAI,EAAE,cAAc,CAAC,OAAO;gBAC5B,OAAO,EAAE,cAAc,CAAC,UAAU;aACnC;YACD,oBAAoB,EAAE;gBACpB,IAAI,EAAE,cAAc,CAAC,OAAO;gBAC5B,OAAO,EAAE,cAAc,CAAC,UAAU;gBAClC,mBAAmB,EAAE;oBACnB,aAAa,EAAE,sCAAsC;oBACrD,KAAK,EAAE,WAAW,cAAc,CAAC,MAAM,EAAE;iBAC1C;aACF;SACF,CAAC;IACJ,CAAC;IAED;;OAEG;IACH,gCAAgC,CAAC,WAAwB,EAAE,cAAsB,EAAE,cAAsB;QACvG,MAAM,GAAG,GAAG,IAAI,CAAC,2BAA2B,CAAC,WAAW,EAAE,cAAc,EAAE,cAAc,CAAC,CAAC;QAC1F,OAAO,EAAE,gBAAgB,EAAE,GAAG,EAAE,CAAC;IACnC,CAAC;IAED;;OAEG;IACH,8BAA8B,CAAC,WAAwB,EAAE,MAAc;QACrE,MAAM,cAAc,GAAG,MAAM,CAAC,UAAU,EAAE,GAAG,cAAc,CAAC,mBAAmB,CAAC;QAChF,MAAM,GAAG,GAAG,IAAI,CAAC,2BAA2B,CAAC,WAAW,EAAE,cAAc,EAAE,CAAC,CAAC,CAAC;QAC7E,MAAM,MAAM,GAAG,WAAW,CAAC,QAAQ,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC;QAC1D,MAAM,SAAS,GAAG,WAAW,CAAC,WAAW,IAAI,MAAM,CAAC,WAAW,CAAC;QAEhE,OAAO;YACL,EAAE,EAAE,MAAM,CAAC,UAAU,EAAE,GAAG,cAAc,CAAC,mBAAmB;YAC5D,MAAM;YACN,SAAS;YACT,eAAe,EAAE,EAAE;YACnB,eAAe,EAAE,GAAG;SACrB,CAAC;IACJ,CAAC;IAED;;OAEG;IACH,kCAAkC,CAAC,WAAwB,EAAE,cAAsB,EAAE,cAAsB;QACzG,MAAM,GAAG,GAAG,IAAI,CAAC,2BAA2B,CAAC,WAAW,EAAE,cAAc,EAAE,cAAc,CAAC,CAAC;QAC1F,OAAO;YACL,gBAAgB,EAAE,GAAG;YACrB,MAAM,EAAE,WAAW,CAAC,QAAQ,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM;YAClD,SAAS,EAAE,MAAM,CAAC,UAAU,EAAE;SAC/B,CAAC;IACJ,CAAC"} \ No newline at end of file diff --git a/dist/runner/GitHubActionsRunner.d.ts b/dist/runner/GitHubActionsRunner.d.ts index 6f25629..d21a774 100644 --- a/dist/runner/GitHubActionsRunner.d.ts +++ b/dist/runner/GitHubActionsRunner.d.ts @@ -9,7 +9,23 @@ export declare class GitHubActionsRunner { private readonly fullScanService; constructor(config: ActionConfig); execute(): Promise; + private processDiffPath; + private processCommitGroup; + private processUserFiles; + private processFilesInline; + private processFilesOffline; + /** + * Resolve user protection scopes using the cache. Returns the PS response + * and etag, or null if the caller should fall back to contentActivities. + */ + private resolveUserPsWithCache; + /** + * Send a commit-level request through the same routing as file requests. + */ + private sendCommitRequest; private sendContentActivities; + private sendCommitContentActivity; + private postBlockedFilesReview; private createSummary; /** * Paginates through successful workflow runs in batches of 3, checking each diff --git a/dist/runner/GitHubActionsRunner.d.ts.map b/dist/runner/GitHubActionsRunner.d.ts.map index f867c79..096ccae 100644 --- a/dist/runner/GitHubActionsRunner.d.ts.map +++ b/dist/runner/GitHubActionsRunner.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"gitHubActionsRunner.d.ts","sourceRoot":"","sources":["../../src/runner/gitHubActionsRunner.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,YAAY,EAA2H,MAAM,iBAAiB,CAAC;AAUxK,qBAAa,mBAAmB;IAQlB,OAAO,CAAC,QAAQ,CAAC,MAAM;IAPnC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAChC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAwB;IACpD,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAgB;IAC9C,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAgB;IAC9C,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAiB;IAChD,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAkB;gBAErB,MAAM,EAAE,YAAY;IAc3C,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;YAuQhB,qBAAqB;YAWrB,aAAa;IA2B3B;;;;OAIG;YACW,0BAA0B;IAgGxC;;OAEG;YACW,iBAAiB;CAsBhC"} \ No newline at end of file +{"version":3,"file":"gitHubActionsRunner.d.ts","sourceRoot":"","sources":["../../src/runner/gitHubActionsRunner.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,YAAY,EAAqN,MAAM,iBAAiB,CAAC;AAqBlQ,qBAAa,mBAAmB;IAQlB,OAAO,CAAC,QAAQ,CAAC,MAAM;IAPnC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAChC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAwB;IACpD,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAgB;IAC9C,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAgB;IAC9C,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAiB;IAChD,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAkB;gBAErB,MAAM,EAAE,YAAY;IAc3C,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;YAkEhB,eAAe;YA4Cf,kBAAkB;YAkClB,gBAAgB;YAmChB,kBAAkB;YA4DlB,mBAAmB;IAsBjC;;;OAGG;YACW,sBAAsB;IAsCpC;;OAEG;YACW,iBAAiB;YA0DjB,qBAAqB;YAWrB,yBAAyB;YASzB,sBAAsB;YAuBtB,aAAa;IA2B3B;;;;OAIG;YACW,0BAA0B;IAgGxC;;OAEG;YACW,iBAAiB;CAsBhC"} \ No newline at end of file diff --git a/dist/runner/GitHubActionsRunner.js b/dist/runner/GitHubActionsRunner.js index eb6962e..256ca47 100644 --- a/dist/runner/GitHubActionsRunner.js +++ b/dist/runner/GitHubActionsRunner.js @@ -40,9 +40,7 @@ export class GitHubActionsRunner { const prInfo = await this.fileProcessor.getPrInfo(); const failedPayloads = []; const blockedFiles = []; - // Cache of userIds that returned 401 on User PS — skip them on subsequent calls const userPsDeniedCache = new Set(); - // Cache of successful User PS responses — avoids redundant API calls for the same user across commits const userPsCache = new Map(); // ─── Full Scan Path (first run or manual workflow dispatch) ─── let fullScanFileCount = 0; @@ -57,184 +55,22 @@ export class GitHubActionsRunner { // ─── PR Diff Path (skip if manually triggered) ─── let diffFileCount = 0; if (!isManualDispatch) { - // Step 4: Process commits - this.logger.info('Running PR diff flow'); - // Get the commit list, then find the last processed position via workflow run history - const allCommits = await this.fileProcessor.getCommits(); - const commitShaSet = new Set(allCommits.map(c => c.sha)); - const lastProcessedSha = await this.findLastProcessedCommitSha(commitShaSet); - // Get files grouped by commit, skipping already-processed commits - const commitGroups = await this.fileProcessor.getFilesGroupedByCommit(lastProcessedSha); - if (commitGroups.length === 0) { - this.logger.warn('No new commits to process for PR diff'); - } - else { - for (const commitGroup of commitGroups) { - const { sha, files } = commitGroup; - this.logger.info(`── Processing commit ${sha} with ${files.length} file(s) ──`); - if (files.length === 0) { - this.logger.info(`Commit ${sha} has no matching files, skipping`); - continue; - } - diffFileCount += files.length; - // Group files by userId - const filesByUser = new Map(); - for (const file of files) { - const userId = file.authorId || this.config.userId; - const existing = filesByUser.get(userId) || []; - existing.push(file); - filesByUser.set(userId, existing); - } - this.logger.info(`Commit ${sha}: ${files.length} file(s) across ${filesByUser.size} user(s)`); - const psRequest = this.payloadBuilder.buildProtectionScopesRequest(); - const requestLocation = psRequest.locations?.[0]; - // Process each user's files - for (const [userId, userFiles] of filesByUser) { - this.logger.info(`Processing ${userFiles.length} file(s) for user ${userId}`); - // Check User PS denial cache (401 from earlier call) - if (userPsDeniedCache.has(userId)) { - this.logger.warn(`Skipping user ${userId} — cached 401 from earlier PS call. Routing to contentActivities.`); - await this.sendContentActivities(userFiles, prInfo, failedPayloads); - continue; - } - // Call per-user protection scopes (check cache first) - let psApiResponse = userPsCache.get(userId); - if (psApiResponse) { - this.logger.info(`Using cached PS response for user ${userId}`); - } - else { - psApiResponse = await this.purviewClient.searchUserProtectionScope(userId, psRequest); - if (psApiResponse.success) { - userPsCache.set(userId, psApiResponse); - } - } - if (!psApiResponse.success) { - this.logger.error(`Failed to get protection scopes for user ${userId}: ${psApiResponse.error}`); - failedPayloads.push(`ps-${userId}`); - // Cache 401s so we don't retry this user - if (psApiResponse.statusCode === 401) { - userPsDeniedCache.add(userId); - this.logger.warn(`User ${userId} returned 401 on PS — cached, will skip in future calls.`); - } - await this.sendContentActivities(userFiles, prInfo, failedPayloads); - continue; - } - const psResponse = psApiResponse.data; - const scopeIdentifier = psApiResponse.etag || ''; - if (!psResponse || !psResponse.value) { - this.logger.warn(`Empty protection scopes response for user ${userId}, routing all files to contentActivities`); - await this.sendContentActivities(userFiles, prInfo, failedPayloads); - continue; - } - // Check applicable scopes - const scopeCheck = this.payloadBuilder.checkApplicableScopes(psResponse.value, Activity.uploadText, requestLocation); - if (!scopeCheck.shouldProcess) { - // No matching scopes → contentActivities (fire-and-forget) - this.logger.info(`No matching scopes for user ${userId}, routing ${userFiles.length} file(s) to contentActivities`); - await this.sendContentActivities(userFiles, prInfo, failedPayloads); - continue; - } - // Matching scopes found — route based on execution mode - if (scopeCheck.executionMode === ExecutionMode.evaluateInline) { - // evaluateInline → per-user PC, synchronous, parse for blocks - this.logger.info(`evaluateInline: calling processContent for ${userFiles.length} file(s), user ${userId}`); - const conversationId = crypto.randomUUID(); - let seqNum = 0; - for (const file of userFiles) { - const pcRequests = this.payloadBuilder.buildPerUserProcessContentRequest(file, conversationId, seqNum); - seqNum += pcRequests.length; - for (const pcRequest of pcRequests) { - let pcResponse = await this.purviewClient.processContent(userId, pcRequest, scopeIdentifier, true); - if (!pcResponse.success) { - this.logger.error(`PC failed for file ${file.path}: ${pcResponse.error}. Falling back to contentActivities.`); - failedPayloads.push(`pc-${file.path}`); - await this.sendContentActivities([file], prInfo, failedPayloads); - continue; - } - const pcData = pcResponse.data; - // Handle protectionScopeState: "modified" → re-fetch scopes and retry - if (pcData?.protectionScopeState === 'modified') { - this.logger.info(`Protection scope state modified for user ${userId}, re-fetching scopes and retrying PC for ${file.path}`); - const freshPsResponse = await this.purviewClient.searchUserProtectionScope(userId, psRequest); - if (freshPsResponse.success && freshPsResponse.data) { - userPsCache.set(userId, freshPsResponse); - const freshScopeId = freshPsResponse.etag || ''; - pcResponse = await this.purviewClient.processContent(userId, pcRequest, freshScopeId, true); - if (!pcResponse.success) { - this.logger.error(`PC retry failed for file ${file.path}: ${pcResponse.error}`); - failedPayloads.push(`pc-retry-${file.path}`); - continue; - } - } - } - // Check for block actions - const responseData = pcResponse.data; - if (responseData && isBlocked(responseData)) { - const blockingActions = getBlockingActions(responseData); - this.logger.warn(`BLOCKED: File ${file.path} blocked by ${blockingActions.length} policy action(s)`); - blockedFiles.push({ - filePath: file.path, - userId, - policyActions: blockingActions, - }); - } - } - } - } - else { - // evaluateOffline → PCA batch (fire-and-forget) - this.logger.info(`evaluateOffline: sending ${userFiles.length} file(s) to PCA batch for user ${userId}`); - const pcaBatchRequests = this.payloadBuilder.buildProcessContentBatchRequest(userFiles); - for (const pcaBatchRequest of pcaBatchRequests) { - const pcaResult = await this.purviewClient.processContentAsync(pcaBatchRequest); - if (!pcaResult.success) { - this.logger.error(`PCA batch failed for user ${userId}: ${pcaResult.error}. Falling back to contentActivities.`); - failedPayloads.push(`pca-${userId}`); - await this.sendContentActivities(userFiles, prInfo, failedPayloads); - } - } - } - } - this.logger.info(`Commit ${sha} processed successfully`); - } - // Post PR review comment if any files were blocked - if (blockedFiles.length > 0 && prInfo.url) { - this.logger.info(`${blockedFiles.length} file(s) blocked, posting PR review comment`); - try { - const githubToken = process.env['GITHUB_TOKEN'] || ''; - const prNumber = parseInt(prInfo.url?.split('/').pop() || '0', 10); - if (githubToken && prNumber > 0) { - const octokit = github.getOctokit(githubToken); - const prCommentService = new PrCommentService(octokit, this.config.repository.owner, this.config.repository.repo, prNumber); - await prCommentService.postBlockedFilesReview(blockedFiles); - } - else { - this.logger.warn('Cannot post PR comment: missing GITHUB_TOKEN or PR number'); - } - } - catch (e) { - this.logger.warn('Failed to post PR review comment (non-fatal).', { error: e }); - } - } - } + diffFileCount = await this.processDiffPath(prInfo, failedPayloads, blockedFiles, userPsDeniedCache, userPsCache); } else { this.logger.info('Skipping PR diff processing (manually triggered workflow)'); } - // Step 5: Set outputs + // ─── Outputs & Summary ─── const totalProcessed = fullScanFileCount + diffFileCount; core.setOutput('processed-files', totalProcessed); core.setOutput('failed-requests', failedPayloads.length); core.setOutput('blocked-files', JSON.stringify(blockedFiles.map(bf => bf.filePath))); - // Step 6: Summary await this.createSummary(totalProcessed, failedPayloads, blockedFiles); - // Step 7: Fail the action if any files were blocked if (blockedFiles.length > 0) { const blockedFilePaths = blockedFiles.map(bf => bf.filePath).join(', '); const message = `Action failed: ${blockedFiles.length} file(s) were blocked by data security policies: ${blockedFilePaths}`; this.logger.error(message); core.setFailed(message); - return; } } catch (error) { @@ -242,6 +78,232 @@ export class GitHubActionsRunner { throw error; } } + // ────────────────────────────────────────────────────────────────── + // Diff path orchestration + // ────────────────────────────────────────────────────────────────── + async processDiffPath(prInfo, failedPayloads, blockedFiles, userPsDeniedCache, userPsCache) { + this.logger.info('Running PR diff flow'); + const allCommits = await this.fileProcessor.getCommits(); + const commitShaSet = new Set(allCommits.map(c => c.sha)); + const lastProcessedSha = await this.findLastProcessedCommitSha(commitShaSet); + const commitGroups = await this.fileProcessor.getFilesGroupedByCommit(lastProcessedSha, allCommits); + if (commitGroups.length === 0) { + this.logger.warn('No new commits to process for PR diff'); + return 0; + } + const psRequest = this.payloadBuilder.buildProtectionScopesRequest(); + const requestLocation = psRequest.locations?.[0]; + if (!requestLocation) { + this.logger.error('Protection scope request has no locations configured'); + throw new Error('Protection scope request has no locations configured'); + } + const ctx = { + prInfo, psRequest, requestLocation, + failedPayloads, blockedFiles, userPsDeniedCache, userPsCache, + }; + let diffFileCount = 0; + for (const commitGroup of commitGroups) { + diffFileCount += await this.processCommitGroup(commitGroup, ctx); + } + // Post PR review comment if any files were blocked + if (blockedFiles.length > 0 && prInfo.url) { + await this.postBlockedFilesReview(prInfo, blockedFiles); + } + return diffFileCount; + } + async processCommitGroup(commitGroup, ctx) { + const { sha, files } = commitGroup; + this.logger.info(`── Processing commit ${sha} with ${files.length} file(s) ──`); + if (files.length === 0) { + this.logger.info(`Commit ${sha} has no matching files, skipping`); + return 0; + } + // Group files by userId + const filesByUser = new Map(); + for (const file of files) { + const userId = file.authorId || this.config.userId; + const existing = filesByUser.get(userId) || []; + existing.push(file); + filesByUser.set(userId, existing); + } + this.logger.info(`Commit ${sha}: ${files.length} file(s) across ${filesByUser.size} user(s)`); + for (const [userId, userFiles] of filesByUser) { + await this.processUserFiles(userId, userFiles, ctx); + } + await this.sendCommitRequest(commitGroup, ctx); + this.logger.info(`Commit ${sha} processed successfully`); + return files.length; + } + // ────────────────────────────────────────────────────────────────── + // Per-user file processing + // ────────────────────────────────────────────────────────────────── + async processUserFiles(userId, userFiles, ctx) { + this.logger.info(`Processing ${userFiles.length} file(s) for user ${userId}`); + const psResult = await this.resolveUserPsWithCache(userId, ctx); + if (!psResult) { + await this.sendContentActivities(userFiles, ctx.prInfo, ctx.failedPayloads); + return; + } + const { psResponse, scopeIdentifier } = psResult; + // Check applicable scopes + const scopeCheck = this.payloadBuilder.checkApplicableScopes(psResponse.value, Activity.uploadText, ctx.requestLocation); + if (!scopeCheck.shouldProcess) { + this.logger.info(`No matching scopes for user ${userId}, routing ${userFiles.length} file(s) to contentActivities`); + await this.sendContentActivities(userFiles, ctx.prInfo, ctx.failedPayloads); + return; + } + if (scopeCheck.executionMode === ExecutionMode.evaluateInline) { + await this.processFilesInline(userId, userFiles, scopeIdentifier, ctx); + } + else { + await this.processFilesOffline(userId, userFiles, ctx); + } + } + async processFilesInline(userId, userFiles, scopeIdentifier, ctx) { + this.logger.info(`evaluateInline: calling processContent for ${userFiles.length} file(s), user ${userId}`); + const conversationId = crypto.randomUUID(); + let seqNum = 0; + for (const file of userFiles) { + const pcRequests = this.payloadBuilder.buildPerUserProcessContentRequest(file, conversationId, seqNum); + seqNum += pcRequests.length; + for (const pcRequest of pcRequests) { + let pcResponse = await this.purviewClient.processContent(userId, pcRequest, scopeIdentifier, true); + if (!pcResponse.success) { + this.logger.error(`PC failed for file ${file.path}: ${pcResponse.error}. Falling back to contentActivities.`); + ctx.failedPayloads.push(`pc-${file.path}`); + await this.sendContentActivities([file], ctx.prInfo, ctx.failedPayloads); + continue; + } + const pcData = pcResponse.data; + // Handle protectionScopeState: "modified" → re-fetch scopes and retry + if (pcData?.protectionScopeState === 'modified') { + this.logger.info(`Protection scope state modified for user ${userId}, re-fetching scopes and retrying PC for ${file.path}`); + const freshPsResponse = await this.purviewClient.searchUserProtectionScope(userId, ctx.psRequest); + if (freshPsResponse.success && freshPsResponse.data) { + ctx.userPsCache.set(userId, freshPsResponse); + const freshScopeId = freshPsResponse.etag || ''; + pcResponse = await this.purviewClient.processContent(userId, pcRequest, freshScopeId, true); + if (!pcResponse.success) { + this.logger.error(`PC retry failed for file ${file.path}: ${pcResponse.error}`); + ctx.failedPayloads.push(`pc-retry-${file.path}`); + continue; + } + } + } + // Check for block actions + const responseData = pcResponse.data; + if (responseData && isBlocked(responseData)) { + const blockingActions = getBlockingActions(responseData); + this.logger.warn(`BLOCKED: File ${file.path} blocked by ${blockingActions.length} policy action(s)`); + ctx.blockedFiles.push({ + filePath: file.path, + userId, + policyActions: blockingActions, + }); + } + } + } + } + async processFilesOffline(userId, userFiles, ctx) { + this.logger.info(`evaluateOffline: sending ${userFiles.length} file(s) to PCA batch for user ${userId}`); + const pcaBatchRequests = this.payloadBuilder.buildProcessContentBatchRequest(userFiles); + for (const pcaBatchRequest of pcaBatchRequests) { + const pcaResult = await this.purviewClient.processContentAsync(pcaBatchRequest); + if (!pcaResult.success) { + this.logger.error(`PCA batch failed for user ${userId}: ${pcaResult.error}. Falling back to contentActivities.`); + ctx.failedPayloads.push(`pca-${userId}`); + await this.sendContentActivities(userFiles, ctx.prInfo, ctx.failedPayloads); + } + } + } + // ────────────────────────────────────────────────────────────────── + // Shared PS resolution + commit-level + fallback helpers + // ────────────────────────────────────────────────────────────────── + /** + * Resolve user protection scopes using the cache. Returns the PS response + * and etag, or null if the caller should fall back to contentActivities. + */ + async resolveUserPsWithCache(userId, ctx) { + if (ctx.userPsDeniedCache.has(userId)) { + this.logger.warn(`Skipping user ${userId} — cached 401 from earlier PS call. Routing to contentActivities.`); + return null; + } + let psApiResponse = ctx.userPsCache.get(userId); + if (psApiResponse) { + this.logger.info(`Using cached PS response for user ${userId}`); + } + else { + psApiResponse = await this.purviewClient.searchUserProtectionScope(userId, ctx.psRequest); + if (psApiResponse.success) { + ctx.userPsCache.set(userId, psApiResponse); + } + } + if (!psApiResponse.success) { + this.logger.error(`Failed to get protection scopes for user ${userId}: ${psApiResponse.error}`); + ctx.failedPayloads.push(`ps-${userId}`); + if (psApiResponse.statusCode === 401) { + ctx.userPsDeniedCache.add(userId); + this.logger.warn(`User ${userId} returned 401 on PS — cached, will skip in future calls.`); + } + return null; + } + const psResponse = psApiResponse.data; + if (!psResponse || !psResponse.value) { + this.logger.warn(`Empty protection scopes response for user ${userId}, routing to contentActivities`); + return null; + } + return { psResponse, scopeIdentifier: psApiResponse.etag || '' }; + } + /** + * Send a commit-level request through the same routing as file requests. + */ + async sendCommitRequest(commitGroup, ctx) { + const commitUserId = commitGroup.authorId || this.config.userId; + const commitIdentifier = `commit:${commitGroup.sha}`; + this.logger.info(`Sending commit-level request for ${commitIdentifier}, user ${commitUserId}`); + const psResult = await this.resolveUserPsWithCache(commitUserId, ctx); + if (!psResult) { + await this.sendCommitContentActivity(commitGroup, ctx.prInfo, ctx.failedPayloads); + return; + } + const scopeCheck = this.payloadBuilder.checkApplicableScopes(psResult.psResponse.value, Activity.uploadText, ctx.requestLocation); + if (!scopeCheck.shouldProcess) { + await this.sendCommitContentActivity(commitGroup, ctx.prInfo, ctx.failedPayloads); + return; + } + if (scopeCheck.executionMode === ExecutionMode.evaluateInline) { + const conversationId = crypto.randomUUID(); + const pcRequest = this.payloadBuilder.buildCommitProcessContentRequest(commitGroup, conversationId, 0); + const pcResponse = await this.purviewClient.processContent(commitUserId, pcRequest, psResult.scopeIdentifier, true); + if (!pcResponse.success) { + this.logger.error(`PC failed for commit ${commitGroup.sha}: ${pcResponse.error}. Falling back to contentActivities.`); + ctx.failedPayloads.push(`pc-commit-${commitGroup.sha}`); + await this.sendCommitContentActivity(commitGroup, ctx.prInfo, ctx.failedPayloads); + return; + } + const pcData = pcResponse.data; + if (pcData && isBlocked(pcData)) { + const blockingActions = getBlockingActions(pcData); + this.logger.warn(`BLOCKED: Commit ${commitGroup.sha} blocked by ${blockingActions.length} policy action(s)`); + ctx.blockedFiles.push({ + filePath: commitIdentifier, + userId: commitUserId, + policyActions: blockingActions, + }); + } + } + else { + const conversationId = crypto.randomUUID() + '@GA'; + const pcaItem = this.payloadBuilder.buildCommitProcessContentBatchItem(commitGroup, conversationId, 0); + const pcaBatch = { processContentRequests: [pcaItem] }; + const pcaResult = await this.purviewClient.processContentAsync(pcaBatch); + if (!pcaResult.success) { + this.logger.error(`PCA failed for commit ${commitGroup.sha}: ${pcaResult.error}. Falling back to contentActivities.`); + ctx.failedPayloads.push(`pca-commit-${commitGroup.sha}`); + await this.sendCommitContentActivity(commitGroup, ctx.prInfo, ctx.failedPayloads); + } + } + } async sendContentActivities(files, prInfo, failedPayloads) { const uploadRequests = this.payloadBuilder.buildUploadSignalRequest(files, prInfo); for (const req of uploadRequests) { @@ -252,6 +314,32 @@ export class GitHubActionsRunner { } } } + async sendCommitContentActivity(commitGroup, prInfo, failedPayloads) { + const req = this.payloadBuilder.buildCommitUploadSignalRequest(commitGroup, prInfo); + const result = await this.purviewClient.uploadSignal(req); + if (!result.success) { + this.logger.error(`ContentActivities upload failed for commit ${commitGroup.sha}: ${result.error}`); + failedPayloads.push(`ca-commit-${commitGroup.sha}`); + } + } + async postBlockedFilesReview(prInfo, blockedFiles) { + this.logger.info(`${blockedFiles.length} file(s) blocked, posting PR review comment`); + try { + const githubToken = process.env['GITHUB_TOKEN'] || ''; + const prNumber = parseInt(prInfo.url?.split('/').pop() || '0', 10); + if (githubToken && prNumber > 0) { + const octokit = github.getOctokit(githubToken); + const prCommentService = new PrCommentService(octokit, this.config.repository.owner, this.config.repository.repo, prNumber); + await prCommentService.postBlockedFilesReview(blockedFiles); + } + else { + this.logger.warn('Cannot post PR comment: missing GITHUB_TOKEN or PR number'); + } + } + catch (e) { + this.logger.warn('Failed to post PR review comment (non-fatal).', { error: e }); + } + } async createSummary(processed, failed, blocked = []) { const summary = core.summary .addHeading('Purview GitHub Action Results') diff --git a/dist/runner/GitHubActionsRunner.js.map b/dist/runner/GitHubActionsRunner.js.map index 6826099..45e4a93 100644 --- a/dist/runner/GitHubActionsRunner.js.map +++ b/dist/runner/GitHubActionsRunner.js.map @@ -1 +1 @@ -{"version":3,"file":"gitHubActionsRunner.js","sourceRoot":"","sources":["../../src/runner/gitHubActionsRunner.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"gitHubActionsRunner.js","sourceRoot":"","sources":["../../src/runner/gitHubActionsRunner.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/dist/runner/fullScanService.d.ts b/dist/runner/fullScanService.d.ts index 9633de8..0abf9bf 100644 --- a/dist/runner/fullScanService.d.ts +++ b/dist/runner/fullScanService.d.ts @@ -1,4 +1,4 @@ -import { ActionConfig, StateTrackingInfo, ApiResponse, ProtectionScopesResponse } from '../config/types'; +import { ActionConfig, StateTrackingInfo, ApiResponse, ProtectionScopesResponse, PrInfo } from '../config/types'; import { FileProcessor } from '../file/fileProcessor'; import { PurviewClient } from '../api/purviewClient'; import { PayloadBuilder } from '../payload/payloadBuilder'; @@ -21,7 +21,7 @@ export declare class FullScanService { /** * Performs a full repository scan when it's the first run */ - performFullScan(stateInfo: StateTrackingInfo | undefined, failedPayloads: string[], prInfo: any, userPsDeniedCache: Set, userPsCache: Map>): Promise; + performFullScan(stateInfo: StateTrackingInfo | undefined, failedPayloads: string[], prInfo: PrInfo, userPsDeniedCache: Set, userPsCache: Map>): Promise; private resolveDefaultBranch; private ensureBranchExists; private detectFirstRun; diff --git a/dist/runner/fullScanService.d.ts.map b/dist/runner/fullScanService.d.ts.map index 096b4e9..3b2bec3 100644 --- a/dist/runner/fullScanService.d.ts.map +++ b/dist/runner/fullScanService.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"fullScanService.d.ts","sourceRoot":"","sources":["../../src/runner/fullScanService.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAgB,iBAAiB,EAAE,WAAW,EAAE,wBAAwB,EAAE,MAAM,iBAAiB,CAAC;AACvH,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACtD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAK3D,qBAAa,eAAe;IAKxB,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,aAAa;IAC9B,OAAO,CAAC,QAAQ,CAAC,aAAa;IAC9B,OAAO,CAAC,QAAQ,CAAC,cAAc;IAPjC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAChC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAe;gBAGzB,MAAM,EAAE,YAAY,EACpB,aAAa,EAAE,aAAa,EAC5B,aAAa,EAAE,aAAa,EAC5B,cAAc,EAAE,cAAc;IAMjD;;OAEG;IACG,mCAAmC,IAAI,OAAO,CAAC;QACnD,oBAAoB,EAAE,OAAO,CAAC;QAC9B,QAAQ,EAAE,OAAO,CAAC;QAClB,SAAS,CAAC,EAAE,iBAAiB,CAAA;KAC9B,CAAC;IAmEF;;OAEG;IACG,eAAe,CACnB,SAAS,EAAE,iBAAiB,GAAG,SAAS,EACxC,cAAc,EAAE,MAAM,EAAE,EACxB,MAAM,EAAE,GAAG,EACX,iBAAiB,EAAE,GAAG,CAAC,MAAM,CAAC,EAC9B,WAAW,EAAE,GAAG,CAAC,MAAM,EAAE,WAAW,CAAC,wBAAwB,CAAC,CAAC,GAC9D,OAAO,CAAC,MAAM,CAAC;YA2CJ,oBAAoB;YAYpB,kBAAkB;YAkClB,cAAc;YAwBd,iCAAiC;YA6FjC,kBAAkB;YAkElB,gBAAgB;YAuBhB,qBAAqB;CAUpC"} \ No newline at end of file +{"version":3,"file":"fullScanService.d.ts","sourceRoot":"","sources":["../../src/runner/fullScanService.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAgB,iBAAiB,EAAE,WAAW,EAAE,wBAAwB,EAAE,MAAM,EAA2B,MAAM,iBAAiB,CAAC;AACxJ,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACtD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAK3D,qBAAa,eAAe;IAKxB,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,aAAa;IAC9B,OAAO,CAAC,QAAQ,CAAC,aAAa;IAC9B,OAAO,CAAC,QAAQ,CAAC,cAAc;IAPjC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAChC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAe;gBAGzB,MAAM,EAAE,YAAY,EACpB,aAAa,EAAE,aAAa,EAC5B,aAAa,EAAE,aAAa,EAC5B,cAAc,EAAE,cAAc;IAMjD;;OAEG;IACG,mCAAmC,IAAI,OAAO,CAAC;QACnD,oBAAoB,EAAE,OAAO,CAAC;QAC9B,QAAQ,EAAE,OAAO,CAAC;QAClB,SAAS,CAAC,EAAE,iBAAiB,CAAA;KAC9B,CAAC;IAmEF;;OAEG;IACG,eAAe,CACnB,SAAS,EAAE,iBAAiB,GAAG,SAAS,EACxC,cAAc,EAAE,MAAM,EAAE,EACxB,MAAM,EAAE,MAAM,EACd,iBAAiB,EAAE,GAAG,CAAC,MAAM,CAAC,EAC9B,WAAW,EAAE,GAAG,CAAC,MAAM,EAAE,WAAW,CAAC,wBAAwB,CAAC,CAAC,GAC9D,OAAO,CAAC,MAAM,CAAC;YA2CJ,oBAAoB;YAYpB,kBAAkB;YAkClB,cAAc;YAwBd,iCAAiC;YA6FjC,kBAAkB;YAkElB,gBAAgB;YAuBhB,qBAAqB;CAUpC"} \ No newline at end of file diff --git a/dist/runner/fullScanService.js.map b/dist/runner/fullScanService.js.map index dd78864..841e4c1 100644 --- a/dist/runner/fullScanService.js.map +++ b/dist/runner/fullScanService.js.map @@ -1 +1 @@ -{"version":3,"file":"fullScanService.js","sourceRoot":"","sources":["../../src/runner/fullScanService.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,iBAAiB,CAAC;AAK1C,OAAO,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AACzC,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AACrD,OAAO,EAAE,2BAA2B,EAAE,MAAM,uBAAuB,CAAC;AAEpE,MAAM,OAAO,eAAe;IAKP;IACA;IACA;IACA;IAPF,MAAM,CAAS;IACf,YAAY,CAAe;IAE5C,YACmB,MAAoB,EACpB,aAA4B,EAC5B,aAA4B,EAC5B,cAA8B;QAH9B,WAAM,GAAN,MAAM,CAAc;QACpB,kBAAa,GAAb,aAAa,CAAe;QAC5B,kBAAa,GAAb,aAAa,CAAe;QAC5B,mBAAc,GAAd,cAAc,CAAgB;QAE/C,IAAI,CAAC,MAAM,GAAG,IAAI,MAAM,CAAC,iBAAiB,CAAC,CAAC;QAC5C,IAAI,CAAC,YAAY,GAAG,IAAI,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACpD,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,mCAAmC;QAKvC,MAAM,WAAW,GAAG,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC;QACjD,MAAM,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC;QAE/C,MAAM,yBAAyB,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,cAAc,IAAI,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QAC1G,MAAM,SAAS,GAAG,YAAY,CAAC,yBAAyB,CAAC,WAAW,EAAE,UAAU,CAAC,CAAC;QAElF,MAAM,YAAY,GAAG,2BAA2B,EAAE,CAAC;QACnD,IAAI,yBAAyB,IAAI,CAAC,YAAY,EAAE,CAAC;YAC/C,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,wGAAwG,CAAC,CAAC;QAC7H,CAAC;QAED,MAAM,oBAAoB,GAAG,CAAC,CAAC,YAAY;YACzC,YAAY,CAAC,KAAK,CAAC,WAAW,EAAE,KAAK,WAAW,CAAC,WAAW,EAAE;YAC9D,YAAY,CAAC,IAAI,CAAC,WAAW,EAAE,KAAK,UAAU,CAAC,WAAW,EAAE,CAAC;QAC/D,IAAI,yBAAyB,IAAI,oBAAoB,EAAE,CAAC;YACtD,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,2IAA2I,CAAC,CAAC;QAChK,CAAC;QAED,MAAM,cAAc,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,cAAc,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;QACjE,MAAM,cAAc,GAAG,YAAY,EAAE,KAAK,IAAI,EAAE,CAAC;QACjD,MAAM,aAAa,GAAG,YAAY,EAAE,IAAI,IAAI,EAAE,CAAC;QAE/C,MAAM,gBAAgB,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,eAAe,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;QACpE,IAAI,eAAe,GAAG,gBAAgB,CAAC;QAEvC,MAAM,oBAAoB,GAAG,yBAAyB,IAAI,CAAC,CAAC,YAAY,IAAI,CAAC,oBAAoB,CAAC;QAElG,mCAAmC;QACnC,IAAI,oBAAoB,IAAI,CAAC,eAAe,EAAE,CAAC;YAC7C,eAAe,GAAG,MAAM,IAAI,CAAC,oBAAoB,CAAC,cAAc,EAAE,cAAc,EAAE,aAAa,CAAC,CAAC;QACnG,CAAC;QAED,+CAA+C;QAC/C,IAAI,oBAAoB,IAAI,eAAe,IAAI,gBAAgB,EAAE,CAAC;YAChE,MAAM,IAAI,CAAC,kBAAkB,CAAC,cAAc,EAAE,cAAc,EAAE,aAAa,EAAE,eAAe,CAAC,CAAC;QAChG,CAAC;QAED,MAAM,sBAAsB,GAAG,oBAAoB,IAAI,CAAC,CAAC,eAAe,CAAC;QAEzE,qCAAqC;QACrC,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,cAAc,CACxC,sBAAsB,EACtB,cAAc,EACd,cAAc,EACd,aAAa,EACb,eAAe,EACf,SAAS,EACT,WAAW,EACX,UAAU,CACX,CAAC;QAEF,MAAM,SAAS,GAAG,sBAAsB,CAAC,CAAC,CAAC;YACzC,KAAK,EAAE,cAAc;YACrB,KAAK,EAAE,cAAc;YACrB,IAAI,EAAE,aAAa;YACnB,MAAM,EAAE,eAAe;YACvB,IAAI,EAAE,SAAS;SAChB,CAAC,CAAC,CAAC,SAAS,CAAC;QAEd,OAAO;YACL,oBAAoB,EAAE,sBAAsB;YAC5C,QAAQ;YACR,SAAS;SACV,CAAC;IACJ,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,eAAe,CACnB,SAAwC,EACxC,cAAwB,EACxB,MAAW,EACX,iBAA8B,EAC9B,WAA+D;QAE/D,IAAI,CAAC,MAAM,CAAC,IAAI,CACd,SAAS;YACP,CAAC,CAAC,+CAA+C;YACjD,CAAC,CAAC,oDAAoD,CACzD,CAAC;QAEF,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,eAAe,EAAE,CAAC;QAC5D,MAAM,iBAAiB,GAAG,QAAQ,CAAC,MAAM,CAAC;QAE1C,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC1B,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,4CAA4C,CAAC,CAAC;YAC/D,OAAO,iBAAiB,CAAC;QAC3B,CAAC;QAED,gCAAgC;QAChC,MAAM,SAAS,GAAG,IAAI,CAAC,cAAc,CAAC,4BAA4B,EAAE,CAAC;QACrE,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,mDAAmD,CAAC,CAAC;QACtE,MAAM,gBAAgB,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,2BAA2B,CAAC,SAAS,CAAC,CAAC;QAEzF,IAAI,CAAC,gBAAgB,CAAC,OAAO,EAAE,CAAC;YAC9B,+DAA+D;YAC/D,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,qBAAqB,gBAAgB,CAAC,KAAK,+CAA+C,QAAQ,CAAC,MAAM,WAAW,CAAC,CAAC;YACxI,cAAc,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;YACjC,MAAM,IAAI,CAAC,qBAAqB,CAAC,QAAQ,EAAE,MAAM,EAAE,cAAc,CAAC,CAAC;QACrE,CAAC;aAAM,IAAI,CAAC,gBAAgB,CAAC,IAAI,EAAE,KAAK,IAAI,gBAAgB,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACrF,4DAA4D;YAC5D,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,2FAA2F,CAAC,CAAC;YAC9G,MAAM,IAAI,CAAC,qBAAqB,CAAC,QAAQ,EAAE,MAAM,EAAE,cAAc,CAAC,CAAC;QACrE,CAAC;aAAM,CAAC;YACN,wEAAwE;YACxE,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,sBAAsB,gBAAgB,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,0DAA0D,CAAC,CAAC;YACrI,MAAM,IAAI,CAAC,kBAAkB,CAAC,QAAQ,EAAE,MAAM,EAAE,cAAc,EAAE,SAAS,EAAE,iBAAiB,EAAE,WAAW,CAAC,CAAC;QAC7G,CAAC;QAED,qBAAqB;QACrB,IAAI,SAAS,EAAE,CAAC;YACd,MAAM,IAAI,CAAC,gBAAgB,CAAC,SAAS,CAAC,CAAC;QACzC,CAAC;QAED,OAAO,iBAAiB,CAAC;IAC3B,CAAC;IAEO,KAAK,CAAC,oBAAoB,CAAC,KAAa,EAAE,KAAa,EAAE,IAAY;QAC3E,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;YACzC,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;YAC/D,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,4CAA4C,IAAI,CAAC,cAAc,EAAE,CAAC,CAAC;YACpF,OAAO,IAAI,CAAC,cAAc,CAAC;QAC7B,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,0EAA0E,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC;YAC3G,OAAO,EAAE,CAAC;QACZ,CAAC;IACH,CAAC;IAEO,KAAK,CAAC,kBAAkB,CAAC,KAAa,EAAE,KAAa,EAAE,IAAY,EAAE,MAAc;QACzF,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;YACzC,IAAI,CAAC;gBACH,MAAM,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC;gBAC5D,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,sBAAsB,MAAM,WAAW,CAAC,CAAC;YAC5D,CAAC;YAAC,OAAO,SAAc,EAAE,CAAC;gBACxB,IAAI,SAAS,EAAE,MAAM,KAAK,GAAG,EAAE,CAAC;oBAC9B,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,sBAAsB,MAAM,4CAA4C,CAAC,CAAC;oBAC3F,yBAAyB;oBACzB,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;oBACzE,MAAM,aAAa,GAAG,QAAQ,CAAC,cAAc,CAAC;oBAC9C,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC;wBACtD,KAAK;wBACL,IAAI;wBACJ,GAAG,EAAE,SAAS,aAAa,EAAE;qBAC9B,CAAC,CAAC;oBACH,wBAAwB;oBACxB,MAAM,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC;wBAC/B,KAAK;wBACL,IAAI;wBACJ,GAAG,EAAE,cAAc,MAAM,EAAE;wBAC3B,GAAG,EAAE,OAAO,CAAC,MAAM,CAAC,GAAG;qBACxB,CAAC,CAAC;oBACH,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,mBAAmB,MAAM,WAAW,aAAa,MAAM,OAAO,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC;gBAClG,CAAC;qBAAM,CAAC;oBACN,MAAM,SAAS,CAAC;gBAClB,CAAC;YACH,CAAC;QACH,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,8CAA8C,MAAM,6BAA6B,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC;QACpH,CAAC;IACH,CAAC;IAEO,KAAK,CAAC,cAAc,CAC1B,sBAA+B,EAC/B,cAAsB,EACtB,cAAsB,EACtB,aAAqB,EACrB,eAAuB,EACvB,SAAiB,EACjB,WAAmB,EACnB,UAAkB;QAElB,IAAI,sBAAsB,EAAE,CAAC;YAC3B,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,eAAe,CAAC;gBACrD,KAAK,EAAE,cAAc;gBACrB,IAAI,EAAE,aAAa;gBACnB,MAAM,EAAE,eAAe;gBACvB,KAAK,EAAE,cAAc;aACtB,EAAE,SAAS,CAAC,CAAC;YACd,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC;QACxB,CAAC;aAAM,CAAC;YACN,wFAAwF;YACxF,OAAO,MAAM,IAAI,CAAC,iCAAiC,CAAC,WAAW,EAAE,UAAU,CAAC,CAAC;QAC/E,CAAC;IACH,CAAC;IAEO,KAAK,CAAC,iCAAiC,CAAC,WAAmB,EAAE,UAAkB;QACrF,IAAI,CAAC;YACH,MAAM,WAAW,GAAG,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,IAAI,EAAE,CAAC;YACtD,IAAI,CAAC,WAAW,EAAE,CAAC;gBACjB,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,oFAAoF,CAAC,CAAC;gBACvG,OAAO,KAAK,CAAC;YACf,CAAC;YAED,MAAM,OAAO,GAAG,MAAM,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;YAE/C,yDAAyD;YACzD,IAAI,UAAU,GAAG,EAAE,CAAC;YACpB,MAAM,WAAW,GAAG,OAAO,CAAC,GAAG,CAAC,qBAAqB,CAAC,IAAI,EAAE,CAAC;YAE7D,IAAI,WAAW,EAAE,CAAC;gBAChB,uGAAuG;gBACvG,wFAAwF;gBACxF,MAAM,QAAQ,GAAG,WAAW,CAAC,KAAK,CAAC,8BAA8B,CAAC,CAAC;gBACnE,IAAI,QAAQ,IAAI,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC;oBAC5B,UAAU,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;oBACzB,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,yDAAyD,UAAU,EAAE,CAAC,CAAC;gBAC1F,CAAC;YACH,CAAC;YAED,mDAAmD;YACnD,IAAI,CAAC,UAAU,IAAI,MAAM,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC;gBAC3C,UAAU,GAAG,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC;gBACrC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,uCAAuC,UAAU,EAAE,CAAC,CAAC;YACxE,CAAC;YAED,IAAI,CAAC,UAAU,EAAE,CAAC;gBAChB,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,gHAAgH,CAAC,CAAC;gBACnI,OAAO,KAAK,CAAC;YACf,CAAC;YAED,uDAAuD;YACvD,MAAM,KAAK,GAAG,QAAQ,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,QAAQ,EAAE,EAAE,EAAE,CAAC,CAAC;YAC5D,IAAI,iBAAiB,GAAkB,IAAI,CAAC;YAC5C,IAAI,KAAK,EAAE,CAAC;gBACV,IAAI,CAAC;oBACH,MAAM,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC;wBAC9D,KAAK,EAAE,WAAW;wBAClB,IAAI,EAAE,UAAU;wBAChB,MAAM,EAAE,KAAK;qBACd,CAAC,CAAC;oBACH,iBAAiB,GAAG,GAAG,CAAC,WAAW,CAAC;oBACpC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,wBAAwB,iBAAiB,qBAAqB,KAAK,EAAE,CAAC,CAAC;gBAC1F,CAAC;gBAAC,OAAO,GAAG,EAAE,CAAC;oBACb,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,gDAAgD,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC;gBACrF,CAAC;YACH,CAAC;YACD,IAAI,iBAAiB,KAAK,IAAI,EAAE,CAAC;gBAC/B,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,yDAAyD,CAAC,CAAC;gBAC5E,OAAO,IAAI,CAAC;YACd,CAAC;YAED,gEAAgE;YAChE,sEAAsE;YACtE,+DAA+D;YAC/D,yBAAyB;YACzB,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,uBAAuB,CAAC;gBAC3E,KAAK,EAAE,WAAW;gBAClB,IAAI,EAAE,UAAU;gBAChB,MAAM,EAAE,SAAgB;gBACxB,QAAQ,EAAE,EAAE;aACb,CAAC,CAAC;YAEH,MAAM,aAAa,GAAG,OAAO,CAAC,aAAa,CAAC,MAAM,CAChD,CAAC,CAAM,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,KAAK,iBAAiB,CAChD,CAAC,MAAM,CAAC;YAET,yEAAyE;YACzE,MAAM,QAAQ,GAAG,aAAa,KAAK,CAAC,CAAC;YAErC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ;gBACvB,CAAC,CAAC,uDAAuD;gBACzD,CAAC,CAAC,iCAAiC,aAAa,kDAAkD,CACnG,CAAC;YAEF,OAAO,QAAQ,CAAC;QAClB,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YACpB,IAAI,KAAK,EAAE,MAAM,KAAK,GAAG,EAAE,CAAC;gBAC1B,IAAI,CAAC,MAAM,CAAC,IAAI,CACd,oFAAoF;oBACpF,4FAA4F,CAC7F,CAAC;YACJ,CAAC;iBAAM,CAAC;gBACN,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,+DAA+D,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC;YAC/F,CAAC;YACD,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC;IAEO,KAAK,CAAC,kBAAkB,CAC9B,QAAwB,EACxB,MAAW,EACX,cAAwB,EACxB,SAAc,EACd,iBAA8B,EAC9B,WAA+D;QAE/D,MAAM,WAAW,GAAG,IAAI,GAAG,EAA0B,CAAC;QACtD,KAAK,MAAM,IAAI,IAAI,QAAQ,EAAE,CAAC;YAC5B,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC;YACnD,MAAM,QAAQ,GAAG,WAAW,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;YAC/C,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACpB,WAAW,CAAC,GAAG,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;QACpC,CAAC;QAED,KAAK,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,IAAI,WAAW,EAAE,CAAC;YAC9C,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,yBAAyB,SAAS,CAAC,MAAM,qBAAqB,MAAM,EAAE,CAAC,CAAC;YAEzF,sDAAsD;YACtD,IAAI,cAAc,GAAG,WAAW,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;YAC7C,IAAI,cAAc,EAAE,CAAC;gBACnB,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,gDAAgD,MAAM,EAAE,CAAC,CAAC;YAC7E,CAAC;iBAAM,CAAC;gBACN,cAAc,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,yBAAyB,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;gBACvF,IAAI,cAAc,CAAC,OAAO,EAAE,CAAC;oBAC3B,WAAW,CAAC,GAAG,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;gBAC1C,CAAC;YACH,CAAC;YAED,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE,CAAC;gBAC5B,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,sBAAsB,MAAM,KAAK,cAAc,CAAC,KAAK,sCAAsC,CAAC,CAAC;gBAC/G,cAAc,CAAC,IAAI,CAAC,eAAe,MAAM,EAAE,CAAC,CAAC;gBAC7C,0DAA0D;gBAC1D,IAAI,cAAc,CAAC,UAAU,KAAK,GAAG,EAAE,CAAC;oBACtC,iBAAiB,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;oBAC9B,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,MAAM,0DAA0D,CAAC,CAAC;gBAC7F,CAAC;gBACD,MAAM,IAAI,CAAC,qBAAqB,CAAC,SAAS,EAAE,MAAM,EAAE,cAAc,CAAC,CAAC;gBACpE,SAAS;YACX,CAAC;YAED,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE,KAAK,IAAI,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBAC1E,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,kCAAkC,MAAM,sCAAsC,CAAC,CAAC;gBACjG,MAAM,IAAI,CAAC,qBAAqB,CAAC,SAAS,EAAE,MAAM,EAAE,cAAc,CAAC,CAAC;gBACpE,SAAS;YACX,CAAC;YAED,mCAAmC;YACnC,MAAM,gBAAgB,GAAG,IAAI,CAAC,cAAc,CAAC,+BAA+B,CAAC,SAAS,CAAC,CAAC;YACxF,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,sBAAsB,SAAS,CAAC,MAAM,kCAAkC,MAAM,EAAE,CAAC,CAAC;YACnG,KAAK,MAAM,eAAe,IAAI,gBAAgB,EAAE,CAAC;gBAC/C,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,mBAAmB,CAAC,eAAe,CAAC,CAAC;gBAEhF,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC;oBACvB,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,6BAA6B,MAAM,KAAK,SAAS,CAAC,KAAK,sCAAsC,CAAC,CAAC;oBACjH,cAAc,CAAC,IAAI,CAAC,gBAAgB,MAAM,EAAE,CAAC,CAAC;oBAC9C,MAAM,IAAI,CAAC,qBAAqB,CAAC,SAAS,EAAE,MAAM,EAAE,cAAc,CAAC,CAAC;oBACpE,MAAM;gBACR,CAAC;qBAAM,CAAC;oBACN,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,0CAA0C,MAAM,EAAE,CAAC,CAAC;gBACvE,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;IAEO,KAAK,CAAC,gBAAgB,CAAC,SAA4B;QACzD,IAAI,CAAC;YACH,MAAM,KAAK,GAAG;gBACZ,OAAO,EAAE,CAAC;gBACV,gBAAgB,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,KAAK,IAAI,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,IAAI,EAAE;gBAClF,aAAa,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;gBACvC,kBAAkB,EAAE,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,KAAK;gBAChD,mBAAmB,EAAE,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,GAAG;aAChD,CAAC;YAEF,MAAM,IAAI,CAAC,YAAY,CAAC,cAAc,CAAC;gBACrC,KAAK,EAAE,SAAS,CAAC,KAAK;gBACtB,IAAI,EAAE,SAAS,CAAC,IAAI;gBACpB,MAAM,EAAE,SAAS,CAAC,MAAM;gBACxB,KAAK,EAAE,SAAS,CAAC,KAAK;aACvB,EAAE,SAAS,CAAC,IAAI,EAAE,KAAK,EAAE,qCAAqC,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,KAAK,IAAI,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC,CAAC;YAE9H,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,mCAAmC,CAAC,CAAC;QACxD,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,gDAAgD,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC;QACnF,CAAC;IACH,CAAC;IAEO,KAAK,CAAC,qBAAqB,CAAC,KAAqB,EAAE,MAAW,EAAE,cAAwB;QAC9F,MAAM,cAAc,GAAG,IAAI,CAAC,cAAc,CAAC,wBAAwB,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;QACnF,KAAK,MAAM,GAAG,IAAI,cAAc,EAAE,CAAC;YACjC,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC;YAC1D,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;gBACpB,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,uCAAuC,GAAG,CAAC,eAAe,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE,UAAU,KAAK,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC;gBAC/H,cAAc,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YAC9B,CAAC;QACH,CAAC;IACH,CAAC;CACF"} \ No newline at end of file +{"version":3,"file":"fullScanService.js","sourceRoot":"","sources":["../../src/runner/fullScanService.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/flow.md b/flow.md index da266e9..c7751ed 100644 --- a/flow.md +++ b/flow.md @@ -1,11 +1,12 @@ ```mermaid flowchart TD - trigger[GitHub Action Triggered] --> stateSetup[State Tracking Setup
resolve workflow repo, branch,
detect first run via state file
or workflow history] + trigger[GitHub Action Triggered] --> validate[Validate Inputs
validateInputs → config] + validate --> stateSetup[State Tracking Setup
resolve workflow repo, branch,
detect first run via state file
or workflow history] stateSetup --> authenticate[Authenticate → MSAL Token] authenticate --> getPrInfo[Get PR Info] getPrInfo --> isFirstRun{First Run or
Manual Dispatch?} - %% ── Full Scan Path (first run only) ── + %% ── Full Scan Path (first run or manual dispatch) ── isFirstRun -->|Yes| getAllFiles[Get ALL repo files
getAllRepoFiles
binary files auto-skipped] getAllFiles --> hasFiles{Files found?} hasFiles -->|No| noFilesLog[Log: no files for full scan] @@ -18,14 +19,14 @@ flowchart TD groupByUserFull --> fullUserPS subgraph FULL_SCAN_PER_USER [For each userId — full scan] - fullUserPS[Call searchUserProtectionScope
POST /users/userId/.../protectionScopes/compute] --> fullUserPSOk{User PS success?} + fullUserPS[Call searchUserProtectionScope
POST /users/userId/.../protectionScopes/compute
check userPsCache first · cache on success] --> fullUserPSOk{User PS success?} fullUserPSOk -->|No / 401| fullIs401{401?} fullIs401 -->|Yes| fullCache401[Cache userId in
userPsDeniedCache] fullIs401 -->|No| fullUserFallback[Fallback: contentActivities
uploadSignal for user's files] fullCache401 --> fullUserFallback fullUserPSOk -->|Yes| fullUserHasScopes{User PS has scopes?} fullUserHasScopes -->|No / empty| fullUserFallback - fullUserHasScopes -->|Yes| fullPCABatch[Build PCA batch for user
processContentAsync] + fullUserHasScopes -->|Yes| fullPCABatch[Build PCA batch for user
processContentAsync
loop over chunked batches] fullPCABatch --> fullPCAOk{PCA success?} fullPCAOk -->|No| fullUserFallback fullPCAOk -->|Yes| fullPCADone[Log: PCA complete for user] @@ -37,20 +38,26 @@ flowchart TD writeState[Write state marker
best-effort] writeState --> isManualDispatch{Manual Dispatch?} isManualDispatch -->|Yes| skipDiff[Log: skipping PR diff] - isManualDispatch -->|No| getChangedFiles + isManualDispatch -->|No| getCommits noFilesLog --> isManualDispatch %% ── PR Diff Path (skipped on manual dispatch) ── - isFirstRun -->|No| getChangedFiles - getChangedFiles[Get PR changed files
getLatestPushFiles
binary files auto-skipped] - getChangedFiles --> hasChangedFiles{Changed files found?} - hasChangedFiles -->|No| noChangedFilesLog[Log: no changed files] - hasChangedFiles -->|Yes| groupByUserDiff[Group files by userId
authorId or config.userId] - groupByUserDiff --> checkDeniedCache + isFirstRun -->|No| getCommits + getCommits[Get commits
push payload / PR commits /
compare API] + getCommits --> findLastProcessed[Find last processed commit
paginate workflow run history
match head_sha to commit list] + findLastProcessed --> getGroupedFiles[Get files grouped by commit
getFilesGroupedByCommit
skip already-processed commits
resolve author emails → userIds
via users.json + Graph API cache] + getGroupedFiles --> hasCommitGroups{New commits
to process?} + hasCommitGroups -->|No| noChangedFilesLog[Log: no new commits to process] + hasCommitGroups -->|Yes| commitLoop - subgraph PER_USER [For each userId] - checkDeniedCache{userId in
userPsDeniedCache?} -->|Yes| diffUserFallback[Fallback: contentActivities
uploadSignal for user's files] - checkDeniedCache -->|No| diffUserPS[Call searchUserProtectionScope
POST /users/userId/.../protectionScopes/compute
capture etag] + subgraph PER_COMMIT_USER [For each commit → for each userId] + commitLoop[Group commit files by userId
authorId or config.userId] + commitLoop --> checkDeniedCache{userId in
userPsDeniedCache?} + checkDeniedCache -->|Yes| diffUserFallback[Fallback: contentActivities
uploadSignal for user's files] + checkDeniedCache -->|No| checkPsCache{userId in
userPsCache?} + checkPsCache -->|Yes| useCachedPs[Use cached PS response] + checkPsCache -->|No| diffUserPS[Call searchUserProtectionScope
POST /users/userId/.../protectionScopes/compute
cache on success] + useCachedPs --> diffUserPSOk diffUserPS --> diffUserPSOk{User PS success?} diffUserPSOk -->|No / 401| diffIs401{401?} diffIs401 -->|Yes| diffCache401[Cache userId in
userPsDeniedCache] @@ -68,23 +75,26 @@ flowchart TD pcOk -->|No| pcFallback[Fallback: contentActivities
uploadSignal for file] pcOk -->|Yes| scopeState{protectionScopeState?} scopeState -->|modified| refetchAndRetry[Re-fetch userPS
retry processContent
with fresh etag] + refetchAndRetry --> retryOk{Retry success?} + retryOk -->|No| retryFailed[Log failure, continue
add to failedPayloads] + retryOk -->|Yes| parsePolicyActions scopeState -->|notModified| parsePolicyActions[Parse policyActions] - refetchAndRetry --> parsePolicyActions parsePolicyActions --> isBlocked{blockAccess or
restrictionAction=block?} isBlocked -->|Yes| addToBlocked[Add to blockedFiles] isBlocked -->|No| continueInline[Continue] - execMode -->|evaluateOffline| pcaBatch[PCA batch for user
processContentAsync] + execMode -->|evaluateOffline| pcaBatch[PCA batch for user
processContentAsync
loop over chunked batches] pcaBatch --> pcaBatchOk{PCA success?} pcaBatchOk -->|No| pcaBatchFallback[Fallback: contentActivities
uploadSignal for user's files] pcaBatchOk -->|Yes| continueOffline[Continue] end - diffUserFallback --> nextUser[Next user / done] + diffUserFallback --> nextUser[Next user / commit / done] diffNoScopesFallback --> nextUser pcFallback --> nextUser addToBlocked --> nextUser continueInline --> nextUser + retryFailed --> nextUser pcaBatchFallback --> nextUser continueOffline --> nextUser @@ -101,6 +111,7 @@ flowchart TD hasBlockedFinal -->|Yes| actionFailed[core.setFailed
Action FAILED:
blocked files detected] hasBlockedFinal -->|No| actionSucceeded[Action succeeded] + style validate fill:#e1bee7,color:#000 style processContent fill:#f9a825,color:#000 style pcaBatch fill:#66bb6a,color:#000 style fullPCABatch fill:#66bb6a,color:#000 @@ -115,12 +126,14 @@ flowchart TD style actionFailed fill:#ef5350,color:#fff style fullCache401 fill:#ff9800,color:#000 style diffCache401 fill:#ff9800,color:#000 + style findLastProcessed fill:#ce93d8,color:#000 + style getGroupedFiles fill:#ce93d8,color:#000 ``` ### Legend +- 🟣 **Purple** — Input validation, commit dedup & user resolution (Graph API / users.json) - 🟡 **Yellow** — processContent (PC) inline: synchronous, per-user, can detect blocks -- 🟢 **Green** — processContentAsync (PCA) batch: fire-and-forget +- 🟢 **Green** — processContentAsync (PCA) batch: fire-and-forget, chunked - 🔵 **Blue** — contentActivities (uploadSignal): fire-and-forget, fallback on failures - 🔴 **Red** — Block detection, PR review comment & action failure -- 🟠 **Orange** — 401 denial cache (skip user on subsequent calls) -- **Purple** — External API calls (Graph API user lookup, GitHub API users.json fetch) \ No newline at end of file +- 🟠 **Orange** — 401 denial cache (skip user on subsequent calls) \ No newline at end of file diff --git a/src/config.ts b/src/config.ts deleted file mode 100644 index 2c0046d..0000000 --- a/src/config.ts +++ /dev/null @@ -1,31 +0,0 @@ -import * as core from '@actions/core'; -import { ActionConfig } from './utils/types'; - -export function getConfig(): ActionConfig { - const includeGlobs = core.getInput('include-globs', { required: true }).split(/[\s,]+/).filter(Boolean); - const excludeGlobs = core.getInput('exclude-globs', { required: false }).split(/[\s,]+/).filter(Boolean); - const applicationHostCategories = core.getInput('application-host-categories', { required: false }).split(',').map(c => c.trim()).filter(Boolean); - - const maxFileBytes = parseInt(core.getInput('max-file-bytes', { required: true }), 10); - if (isNaN(maxFileBytes) || maxFileBytes <= 0) { - throw new Error('Input "max-file-bytes" must be a positive number.'); - } - - return { - endpoint: core.getInput('endpoint', { required: true }), - userPrincipalName: core.getInput('user-principal-name', { required: true }), - tenantId: core.getInput('tenant-id', { required: true }), - aadResource: core.getInput('aad-resource', { required: true }), - includeGlobs: includeGlobs.length > 0 ? includeGlobs : ['**/*'], - excludeGlobs, - maxFileBytes, - sliceLargeFiles: core.getBooleanInput('slice-large-files', { required: true }), - skipBinary: core.getBooleanInput('skip-binary', { required: true }), - includeSummaryPayload: core.getBooleanInput('include-summary-payload', { required: true }), - minify: core.getBooleanInput('minify', { required: true }), - failOnNon2xx: core.getBooleanInput('fail-on-non-2xx', { required: true }), - appHostName: core.getInput('app-host-name', { required: true }), - applicationHostCategories, - debug: core.getBooleanInput('debug-logs', { required: true }), - }; -} \ No newline at end of file diff --git a/src/config/types.ts b/src/config/types.ts index 015fc6b..5fdadbf 100644 --- a/src/config/types.ts +++ b/src/config/types.ts @@ -47,9 +47,12 @@ export interface FileMetadata { encoding: string; sha: string; content?: string; - authorLogin?: string | null | undefined; // Optional author field - authorEmail?: string | null | undefined; // Optional author email field - authorId?: string; // Optional author ID field + authorLogin?: string | null | undefined; + authorEmail?: string | null | undefined; + authorId?: string; + committerLogin?: string | null | undefined; + committerEmail?: string | null | undefined; + committerId?: string; numberOfDeletions?: number; numberOfAdditions?: number; numberOfChanges?: number; @@ -115,8 +118,9 @@ export interface ProcessContentMetadataBase extends GraphDataTypeBase { export interface ProcessConversationMetadata extends ProcessContentMetadataBase { "@odata.type": "microsoft.graph.processConversationMetadata"; parentMessageId?: string; - accessedResources?: string[]; + accessedResources_v2?: AccessedResourceDetails[]; plugins?: AiInteractionPlugin[]; + agents?: AiAgentInfo[]; } export interface ProcessFileMetadata extends ProcessContentMetadataBase { @@ -192,6 +196,26 @@ export interface AiInteractionPlugin { version: string; } +export interface AiAgentInfo { + identifier: string; + name?: string; + version?: string; +} + +export interface AccessedResourceDetails { + identifier: string; + name: string; + url?: string; + labelId?: string; + accessType?: ResourceAccessType; + status?: ResourceAccessStatus; + isCrossPromptInjectionDetected?: boolean; +} + +export type ResourceAccessType = "none" | "read" | "write" | "create" | "unknownFutureValue"; + +export type ResourceAccessStatus = "failure" | "success" | "unknownFutureValue"; + export interface UploadSignalRequest { id: string; userId: string; @@ -374,11 +398,23 @@ export interface ScopeCheckResult { export interface CommitInfo { sha: string; email: string | undefined; + committerEmail?: string; + message?: string; } export interface CommitFiles { sha: string; files: FileMetadata[]; + message?: string; + authorEmail?: string; + authorLogin?: string; + authorName?: string; + authorId?: string; + committerEmail?: string; + committerLogin?: string; + committerName?: string; + committerId?: string; + timestamp?: string; } // --- User mapping from users.json --- diff --git a/src/file/fileProcessor.ts b/src/file/fileProcessor.ts index 138d96c..e4eba11 100644 --- a/src/file/fileProcessor.ts +++ b/src/file/fileProcessor.ts @@ -329,25 +329,35 @@ export class FileProcessor { }; } - private async getFilesForCommit(commitSha: string, userId: string | undefined): Promise { + private async getFilesForCommit(commitSha: string, authorId: string | undefined, committerId: string | undefined): Promise { const { data: commit } = await this.octokit.rest.repos.getCommit({ owner: this.config.repository.owner, repo: this.config.repository.repo, ref: commitSha }); + const commitMeta: CommitFiles = { + sha: commit.sha, + files: [], + message: commit.commit.message || undefined, + authorEmail: commit.commit.author?.email || undefined, + authorLogin: commit.author?.login || undefined, + authorName: commit.commit.author?.name || undefined, + authorId, + committerEmail: commit.commit.committer?.email || undefined, + committerLogin: commit.committer?.login || undefined, + committerName: commit.commit.committer?.name || undefined, + committerId, + timestamp: commit.commit.author?.date || commit.commit.committer?.date || undefined, + }; + if (!commit.files || commit.files.length === 0) { this.logger.warn(`No files found in commit: ${commit.sha}`); - return []; + return commitMeta; } this.logger.info(`Processing commit ${commit.sha} with ${commit.files.length} changed file(s).`); - let fileMetadata: FileMetadata[] = []; - - const token = await this.authService.getToken(); - this.purviewClient.setAuthToken(token.accessToken); - const filteredCommitFiles = commit.files!.filter((f: CommitFile) => this.shouldIncludePath(f.filename)); this.logger.info(`Commit ${commit.sha}: ${filteredCommitFiles.length}/${commit.files.length} files match the configured patterns.`); @@ -370,7 +380,7 @@ export class FileProcessor { } } - const metadata = { + const metadata: FileMetadata = { path: file.filename, size: fileSize, encoding: 'utf-8', @@ -378,17 +388,20 @@ export class FileProcessor { content: fileContent, authorLogin: commit.author?.login || commit.committer?.login || null, authorEmail: commit.commit.author?.email || commit.commit.committer?.email || null, - authorId: userId, + authorId, + committerLogin: commit.committer?.login || commit.author?.login || null, + committerEmail: commit.commit.committer?.email || commit.commit.author?.email || null, + committerId, numberOfDeletions: file.deletions, numberOfAdditions: file.additions, numberOfChanges: file.changes, typeOfChange: file.status, commitTimestamp: commit.commit.author?.date || commit.commit.committer?.date - } - fileMetadata.push(metadata); + }; + commitMeta.files.push(metadata); } - return fileMetadata; + return commitMeta; } /** @@ -636,9 +649,11 @@ export class FileProcessor { // Commits list should be populated for push events if (commits && commits.length > 0) { this.logger.info(`Found ${commits.length} commits in push event.`); - const commitInfos: CommitInfo[] = commits.map((commit: { id: string; author: { email: any; }; committer: { email: any; }; }) => ({ + const commitInfos: CommitInfo[] = commits.map((commit: { id: string; message?: string; author: { email: any; }; committer: { email: any; }; }) => ({ sha: commit.id, email: commit.author?.email || commit.committer?.email || undefined, + committerEmail: commit.committer?.email || undefined, + message: commit.message || undefined, })); return commitInfos; } @@ -662,7 +677,9 @@ export class FileProcessor { const commitInfos: CommitInfo[] = comparison.commits.map((commit: CommitData) => ({ sha: commit.sha, - email: commit.commit.author?.email || commit.commit.committer?.email || undefined + email: commit.commit.author?.email || commit.commit.committer?.email || undefined, + committerEmail: commit.commit.committer?.email || undefined, + message: commit.commit.message || undefined, })); return commitInfos; @@ -688,15 +705,17 @@ export class FileProcessor { const commitInfos: CommitInfo[] = commits.map((commit: PullRequestCommit) => ({ sha: commit.sha, - email: commit.commit.author?.email || commit.commit.committer?.email || undefined + email: commit.commit.author?.email || commit.commit.committer?.email || undefined, + committerEmail: commit.commit.committer?.email || undefined, + message: commit.commit.message || undefined, })); this.logger.info(`Found ${commitInfos.length} total commit(s) in PR #${pr.number}`); return commitInfos; } - async getFilesGroupedByCommit(lastProcessedHeadSha?: string | null): Promise { - const allCommits = await this.getCommits(); + async getFilesGroupedByCommit(lastProcessedHeadSha?: string | null, prefetchedCommits?: CommitInfo[]): Promise { + const allCommits = prefetchedCommits ?? await this.getCommits(); // Find commits to process by skipping everything up to and including lastProcessedHeadSha let commitsToProcess = allCommits; @@ -715,14 +734,17 @@ export class FileProcessor { return []; } - // Resolve all author emails to user IDs up front - const commitAuthorEmails: Set = new Set(); + // Resolve all author and committer emails to user IDs up front + const allEmails: Set = new Set(); for (const commit of commitsToProcess) { if (commit.email) { - commitAuthorEmails.add(commit.email.toLowerCase()); + allEmails.add(commit.email.toLowerCase()); + } + if (commit.committerEmail) { + allEmails.add(commit.committerEmail.toLowerCase()); } } - const userIdMap = await this.resolveUserIds(commitAuthorEmails); + const userIdMap = await this.resolveUserIds(allEmails); const result: CommitFiles[] = []; for (const commit of commitsToProcess) { @@ -731,8 +753,12 @@ export class FileProcessor { if (commit.email) { userId = userIdMap[commit.email.toLowerCase()] || this.config.userId; } - const files = await this.getFilesForCommit(commit.sha, userId); - result.push({ sha: commit.sha, files }); + let committerId: string | undefined; + if (commit.committerEmail) { + committerId = userIdMap[commit.committerEmail.toLowerCase()] || this.config.userId; + } + const commitFiles = await this.getFilesForCommit(commit.sha, userId, committerId); + result.push(commitFiles); } return result; diff --git a/src/git/changedFiles.ts b/src/git/changedFiles.ts deleted file mode 100644 index 871f32c..0000000 --- a/src/git/changedFiles.ts +++ /dev/null @@ -1,29 +0,0 @@ -import * as glob from '@actions/glob'; -import { Logger } from '../utils/logger'; -import { ActionConfig } from '../utils/types'; - -export async function getChangedFiles(config: ActionConfig, logger: Logger): Promise { - const changedFilesEnv = process.env.CHANGED_FILES; - const patterns = [...config.includeGlobs, ...config.excludeGlobs.map(p => `!${p}`)]; - const globber = await glob.create(patterns.join('\n')); - const allFilesMatchingGlobs = await globber.glob(); // This now correctly takes 0 arguments - - if (!changedFilesEnv) { - logger.warn('CHANGED_FILES environment variable not set. This is expected for push events to a default branch or manual runs. Scanning all files matching globs.'); - logger.info(`Found ${allFilesMatchingGlobs.length} files matching glob patterns in the repository.`); - return allFilesMatchingGlobs; - } - - const changedFilesList = new Set(changedFilesEnv.split(' ').filter(Boolean)); - logger.debug(`Received ${changedFilesList.size} changed files from environment variable.`); - - // Find the intersection between all files matching the glob and the files that actually changed. - const filteredFiles = allFilesMatchingGlobs.filter(file => changedFilesList.has(file)); - - logger.info(`Found ${filteredFiles.length} changed files that match the include/exclude glob patterns.`); - if (config.debug) { - logger.debug(`Final list of files to process: \n${filteredFiles.join('\n')}`); - } - - return filteredFiles; -} \ No newline at end of file diff --git a/src/payload/payloadBuilder.ts b/src/payload/payloadBuilder.ts index 6b161a7..a8cbb87 100644 --- a/src/payload/payloadBuilder.ts +++ b/src/payload/payloadBuilder.ts @@ -1,4 +1,4 @@ -import { ActionConfig, FileMetadata, UploadSignalRequest, Activity, TextContent, PrInfo, ProtectionScopesRequest, ProtectionScopesResponse, SplitPCRequests, ProtectionScopeActivities, ProcessContentBatchRequest, ProcessContentRequestItem, ProcessContentRequest, ContentToProcess, ScopeCheckResult, ExecutionMode, PolicyScopes, PolicyLocation, DlpActionInfo } from '../config/types'; +import { ActionConfig, FileMetadata, UploadSignalRequest, Activity, TextContent, PrInfo, ProtectionScopesRequest, ProtectionScopesResponse, SplitPCRequests, ProtectionScopeActivities, ProcessContentBatchRequest, ProcessContentRequestItem, ProcessContentRequest, ContentToProcess, ScopeCheckResult, ExecutionMode, PolicyScopes, PolicyLocation, DlpActionInfo, CommitFiles, AiAgentInfo, ProcessConversationMetadata } from '../config/types'; import { Logger } from '../utils/logger'; export class PayloadBuilder { @@ -6,6 +6,9 @@ export class PayloadBuilder { private readonly maxPayloadSize = 1024 * 1024 * 3; // 3MB private static readonly domain: string = "github.com"; private static readonly scopeActivity: ProtectionScopeActivities = "uploadText"; + private static readonly appName = "GitHub"; + private static readonly appVersion = "0.0.1"; + private static readonly correlationIdSuffix = "@GA"; constructor(private readonly config: ActionConfig) { this.logger = new Logger('PayloadBuilder'); @@ -21,9 +24,9 @@ export class PayloadBuilder { } ], integratedAppMetadata: { - name: "Github", - version: "0.0.1", - }, + name: PayloadBuilder.appName, + version: PayloadBuilder.appVersion, + }, }; return request; @@ -236,7 +239,7 @@ export class PayloadBuilder { buildUploadSignalRequest(files: FileMetadata[], prInfo: PrInfo): UploadSignalRequest[] { const requests: UploadSignalRequest[] = []; - const conversationId = crypto.randomUUID()+ '@GA'; + const conversationId = crypto.randomUUID() + PayloadBuilder.correlationIdSuffix; let seqNum = 0; for (const file of files) { @@ -251,7 +254,7 @@ export class PayloadBuilder { if (singleSize <= this.maxPayloadSize) { requests.push({ - id: crypto.randomUUID()+ '@GA', + id: crypto.randomUUID() + PayloadBuilder.correlationIdSuffix, userId, userEmail, scopeIdentifier: "", @@ -268,7 +271,7 @@ export class PayloadBuilder { const isLastChunk = i + maxContentPerChunk >= content.length; const chunkCTP = this.createContentToProcess(file, conversationId, seqNum, !isLastChunk, chunk); requests.push({ - id: crypto.randomUUID()+ '@GA', + id: crypto.randomUUID() + PayloadBuilder.correlationIdSuffix, userId, userEmail, scopeIdentifier: "", @@ -285,7 +288,7 @@ export class PayloadBuilder { buildProcessContentBatchRequest(files: FileMetadata[]): ProcessContentBatchRequest[] { const allItems: ProcessContentRequestItem[] = []; - const conversationId = crypto.randomUUID()+ '@GA'; + const conversationId = crypto.randomUUID() + PayloadBuilder.correlationIdSuffix; let seqNum = 0; for (const file of files) { @@ -360,32 +363,41 @@ export class PayloadBuilder { data: contentOverride ?? file.content ?? `File: ${file.path} (${file.size} bytes)` }; + const agents: AiAgentInfo[] = []; + if (file.committerId || file.committerEmail) { + agents.push({ + identifier: file.committerId || file.committerEmail || '', + name: file.committerLogin || file.committerEmail || undefined, + }); + } + + const entry: ProcessConversationMetadata = { + "@odata.type": "microsoft.graph.processConversationMetadata", + identifier: file.path, + name: file.path, + correlationId: conversationId, + sequenceNumber: messageId, + length: file.size, + isTruncated, + createdDateTime: now, + modifiedDateTime: now, + content: fileContent, + ...(agents.length > 0 ? { agents } : {}), + }; + return { - contentEntries: [ - { - "@odata.type": "microsoft.graph.processConversationMetadata", - identifier: file.path, - name: file.path, - correlationId: conversationId, - sequenceNumber: messageId, - length: file.size, - isTruncated, - createdDateTime: now, - modifiedDateTime: now, - content: fileContent - } - ], + contentEntries: [entry], activityMetadata: { activity: Activity.uploadText, }, deviceMetadata: {}, integratedAppMetadata: { - name: "Github", - version: "0.0.1", + name: PayloadBuilder.appName, + version: PayloadBuilder.appVersion, }, protectedAppMetadata: { - name: "Github", - version: "0.0.1", + name: PayloadBuilder.appName, + version: PayloadBuilder.appVersion, applicationLocation: { "@odata.type": "microsoft.graph.policyLocationDomain", value: `https://${PayloadBuilder.domain}` @@ -394,4 +406,132 @@ export class PayloadBuilder { }; } + /** + * Build the text content representing a git commit's metadata. + */ + private buildCommitContentText(commitGroup: CommitFiles): string { + const lines: string[] = [ + `Commit: ${commitGroup.sha}`, + ]; + + if (commitGroup.message) { + lines.push(`Message: ${commitGroup.message}`); + } + if (commitGroup.authorName || commitGroup.authorEmail) { + lines.push(`Author: ${commitGroup.authorName || ''} <${commitGroup.authorEmail || ''}>`); + } + if (commitGroup.committerName || commitGroup.committerEmail) { + lines.push(`Committer: ${commitGroup.committerName || ''} <${commitGroup.committerEmail || ''}>`); + } + if (commitGroup.timestamp) { + lines.push(`Date: ${commitGroup.timestamp}`); + } + + if (commitGroup.files.length > 0) { + lines.push('', 'Changed files:'); + for (const file of commitGroup.files) { + const changeType = file.typeOfChange || 'modified'; + const additions = file.numberOfAdditions ?? 0; + const deletions = file.numberOfDeletions ?? 0; + lines.push(` ${changeType}: ${file.path} (+${additions} -${deletions})`); + } + } + + return lines.join('\n'); + } + + /** + * Build a ContentToProcess for a git commit (commit-level metadata request). + */ + buildCommitContentToProcess(commitGroup: CommitFiles, conversationId: string, sequenceNumber: number): ContentToProcess { + const now = new Date().toISOString(); + const commitContent = this.buildCommitContentText(commitGroup); + const commitIdentifier = `commit:${commitGroup.sha}`; + + const fileContent: TextContent = { + "@odata.type": "microsoft.graph.textContent", + data: commitContent, + }; + + const agents: AiAgentInfo[] = []; + if (commitGroup.committerId || commitGroup.committerEmail) { + agents.push({ + identifier: commitGroup.committerId || commitGroup.committerEmail || '', + name: commitGroup.committerLogin || commitGroup.committerEmail || undefined, + }); + } + + const entry: ProcessConversationMetadata = { + "@odata.type": "microsoft.graph.processConversationMetadata", + identifier: commitIdentifier, + name: commitIdentifier, + correlationId: conversationId, + sequenceNumber, + length: commitContent.length, + isTruncated: false, + createdDateTime: commitGroup.timestamp || now, + modifiedDateTime: commitGroup.timestamp || now, + content: fileContent, + ...(agents.length > 0 ? { agents } : {}), + }; + + return { + contentEntries: [entry], + activityMetadata: { + activity: Activity.uploadText, + }, + deviceMetadata: {}, + integratedAppMetadata: { + name: PayloadBuilder.appName, + version: PayloadBuilder.appVersion, + }, + protectedAppMetadata: { + name: PayloadBuilder.appName, + version: PayloadBuilder.appVersion, + applicationLocation: { + "@odata.type": "microsoft.graph.policyLocationDomain", + value: `https://${PayloadBuilder.domain}`, + }, + }, + }; + } + + /** + * Build a per-user ProcessContentRequest for a git commit (inline PC). + */ + buildCommitProcessContentRequest(commitGroup: CommitFiles, conversationId: string, sequenceNumber: number): ProcessContentRequest { + const ctp = this.buildCommitContentToProcess(commitGroup, conversationId, sequenceNumber); + return { contentToProcess: ctp }; + } + + /** + * Build an UploadSignalRequest for a git commit (contentActivities fallback). + */ + buildCommitUploadSignalRequest(commitGroup: CommitFiles, prInfo: PrInfo): UploadSignalRequest { + const conversationId = crypto.randomUUID() + PayloadBuilder.correlationIdSuffix; + const ctp = this.buildCommitContentToProcess(commitGroup, conversationId, 0); + const userId = commitGroup.authorId || this.config.userId; + const userEmail = commitGroup.authorEmail || prInfo.authorEmail; + + return { + id: crypto.randomUUID() + PayloadBuilder.correlationIdSuffix, + userId, + userEmail, + scopeIdentifier: "", + contentMetadata: ctp, + }; + } + + /** + * Build a ProcessContentBatchRequest item for a git commit (PCA batch). + */ + buildCommitProcessContentBatchItem(commitGroup: CommitFiles, conversationId: string, sequenceNumber: number): ProcessContentRequestItem { + const ctp = this.buildCommitContentToProcess(commitGroup, conversationId, sequenceNumber); + return { + contentToProcess: ctp, + userId: commitGroup.authorId || this.config.userId, + requestId: crypto.randomUUID(), + }; + } + } \ No newline at end of file diff --git a/src/runner/fullScanService.ts b/src/runner/fullScanService.ts index fac49d9..712f415 100644 --- a/src/runner/fullScanService.ts +++ b/src/runner/fullScanService.ts @@ -1,5 +1,5 @@ import * as github from '@actions/github'; -import { ActionConfig, FileMetadata, StateTrackingInfo, ApiResponse, ProtectionScopesResponse } from '../config/types'; +import { ActionConfig, FileMetadata, StateTrackingInfo, ApiResponse, ProtectionScopesResponse, PrInfo, ProtectionScopesRequest } from '../config/types'; import { FileProcessor } from '../file/fileProcessor'; import { PurviewClient } from '../api/purviewClient'; import { PayloadBuilder } from '../payload/payloadBuilder'; @@ -101,7 +101,7 @@ export class FullScanService { async performFullScan( stateInfo: StateTrackingInfo | undefined, failedPayloads: string[], - prInfo: any, + prInfo: PrInfo, userPsDeniedCache: Set, userPsCache: Map> ): Promise { @@ -312,9 +312,9 @@ export class FullScanService { private async processFilesByUser( allFiles: FileMetadata[], - prInfo: any, + prInfo: PrInfo, failedPayloads: string[], - psRequest: any, + psRequest: ProtectionScopesRequest, userPsDeniedCache: Set, userPsCache: Map> ): Promise { @@ -399,7 +399,7 @@ export class FullScanService { } } - private async sendContentActivities(files: FileMetadata[], prInfo: any, failedPayloads: string[]): Promise { + private async sendContentActivities(files: FileMetadata[], prInfo: PrInfo, failedPayloads: string[]): Promise { const uploadRequests = this.payloadBuilder.buildUploadSignalRequest(files, prInfo); for (const req of uploadRequests) { const result = await this.purviewClient.uploadSignal(req); diff --git a/src/runner/gitHubActionsRunner.ts b/src/runner/gitHubActionsRunner.ts index 42228c4..7b74fc4 100644 --- a/src/runner/gitHubActionsRunner.ts +++ b/src/runner/gitHubActionsRunner.ts @@ -1,6 +1,6 @@ import * as core from '@actions/core'; import * as github from '@actions/github'; -import { ActionConfig, FileMetadata, BlockedFileResult, ExecutionMode, Activity, ProcessContentResponse, ApiResponse, ProtectionScopesResponse } from '../config/types'; +import { ActionConfig, FileMetadata, BlockedFileResult, ExecutionMode, Activity, ProcessContentResponse, ApiResponse, ProtectionScopesResponse, CommitFiles, ProcessContentBatchRequest, PrInfo, ProtectionScopesRequest, PolicyLocation } from '../config/types'; import { AuthenticationService } from '../auth/authenticationService'; import { FileProcessor } from '../file/fileProcessor'; import { PurviewClient } from '../api/purviewClient'; @@ -10,6 +10,17 @@ import { isBlocked, getBlockingActions } from '../utils/blockDetector'; import { PrCommentService } from '../utils/prCommentService'; import { FullScanService } from './fullScanService'; +/** Shared state passed between methods during diff path processing. */ +interface DiffPathContext { + prInfo: PrInfo; + psRequest: ProtectionScopesRequest; + requestLocation: PolicyLocation; + failedPayloads: string[]; + blockedFiles: BlockedFileResult[]; + userPsDeniedCache: Set; + userPsCache: Map>; +} + export class GitHubActionsRunner { private readonly logger: Logger; private readonly authService: AuthenticationService; @@ -50,11 +61,7 @@ export class GitHubActionsRunner { const failedPayloads: string[] = []; const blockedFiles: BlockedFileResult[] = []; - - // Cache of userIds that returned 401 on User PS — skip them on subsequent calls const userPsDeniedCache = new Set(); - - // Cache of successful User PS responses — avoids redundant API calls for the same user across commits const userPsCache = new Map>(); // ─── Full Scan Path (first run or manual workflow dispatch) ─── @@ -72,221 +79,24 @@ export class GitHubActionsRunner { // ─── PR Diff Path (skip if manually triggered) ─── let diffFileCount = 0; if (!isManualDispatch) { - // Step 4: Process commits - this.logger.info('Running PR diff flow'); - - // Get the commit list, then find the last processed position via workflow run history - const allCommits = await this.fileProcessor.getCommits(); - const commitShaSet = new Set(allCommits.map(c => c.sha)); - const lastProcessedSha = await this.findLastProcessedCommitSha(commitShaSet); - - // Get files grouped by commit, skipping already-processed commits - const commitGroups = await this.fileProcessor.getFilesGroupedByCommit(lastProcessedSha); - - if (commitGroups.length === 0) { - this.logger.warn('No new commits to process for PR diff'); - } else { - for (const commitGroup of commitGroups) { - const { sha, files } = commitGroup; - this.logger.info(`── Processing commit ${sha} with ${files.length} file(s) ──`); - - if (files.length === 0) { - this.logger.info(`Commit ${sha} has no matching files, skipping`); - continue; - } - - diffFileCount += files.length; - - // Group files by userId - const filesByUser = new Map(); - for (const file of files) { - const userId = file.authorId || this.config.userId; - const existing = filesByUser.get(userId) || []; - existing.push(file); - filesByUser.set(userId, existing); - } - - this.logger.info(`Commit ${sha}: ${files.length} file(s) across ${filesByUser.size} user(s)`); - - const psRequest = this.payloadBuilder.buildProtectionScopesRequest(); - const requestLocation = psRequest.locations?.[0]; - - // Process each user's files - for (const [userId, userFiles] of filesByUser) { - this.logger.info(`Processing ${userFiles.length} file(s) for user ${userId}`); - - // Check User PS denial cache (401 from earlier call) - if (userPsDeniedCache.has(userId)) { - this.logger.warn(`Skipping user ${userId} — cached 401 from earlier PS call. Routing to contentActivities.`); - await this.sendContentActivities(userFiles, prInfo, failedPayloads); - continue; - } - - // Call per-user protection scopes (check cache first) - let psApiResponse = userPsCache.get(userId); - if (psApiResponse) { - this.logger.info(`Using cached PS response for user ${userId}`); - } else { - psApiResponse = await this.purviewClient.searchUserProtectionScope(userId, psRequest); - if (psApiResponse.success) { - userPsCache.set(userId, psApiResponse); - } - } - - if (!psApiResponse.success) { - this.logger.error(`Failed to get protection scopes for user ${userId}: ${psApiResponse.error}`); - failedPayloads.push(`ps-${userId}`); - // Cache 401s so we don't retry this user - if (psApiResponse.statusCode === 401) { - userPsDeniedCache.add(userId); - this.logger.warn(`User ${userId} returned 401 on PS — cached, will skip in future calls.`); - } - await this.sendContentActivities(userFiles, prInfo, failedPayloads); - continue; - } - - const psResponse = psApiResponse.data; - const scopeIdentifier = psApiResponse.etag || ''; - - if (!psResponse || !psResponse.value) { - this.logger.warn(`Empty protection scopes response for user ${userId}, routing all files to contentActivities`); - await this.sendContentActivities(userFiles, prInfo, failedPayloads); - continue; - } - - // Check applicable scopes - const scopeCheck = this.payloadBuilder.checkApplicableScopes( - psResponse.value, - Activity.uploadText, - requestLocation! - ); - - if (!scopeCheck.shouldProcess) { - // No matching scopes → contentActivities (fire-and-forget) - this.logger.info(`No matching scopes for user ${userId}, routing ${userFiles.length} file(s) to contentActivities`); - await this.sendContentActivities(userFiles, prInfo, failedPayloads); - continue; - } - - // Matching scopes found — route based on execution mode - if (scopeCheck.executionMode === ExecutionMode.evaluateInline) { - // evaluateInline → per-user PC, synchronous, parse for blocks - this.logger.info(`evaluateInline: calling processContent for ${userFiles.length} file(s), user ${userId}`); - - const conversationId = crypto.randomUUID(); - let seqNum = 0; - - for (const file of userFiles) { - const pcRequests = this.payloadBuilder.buildPerUserProcessContentRequest(file, conversationId, seqNum); - seqNum += pcRequests.length; - - for (const pcRequest of pcRequests) { - let pcResponse = await this.purviewClient.processContent(userId, pcRequest, scopeIdentifier, true); - - if (!pcResponse.success) { - this.logger.error(`PC failed for file ${file.path}: ${pcResponse.error}. Falling back to contentActivities.`); - failedPayloads.push(`pc-${file.path}`); - await this.sendContentActivities([file], prInfo, failedPayloads); - continue; - } - - const pcData = pcResponse.data as ProcessContentResponse; - - // Handle protectionScopeState: "modified" → re-fetch scopes and retry - if (pcData?.protectionScopeState === 'modified') { - this.logger.info(`Protection scope state modified for user ${userId}, re-fetching scopes and retrying PC for ${file.path}`); - - const freshPsResponse = await this.purviewClient.searchUserProtectionScope(userId, psRequest); - if (freshPsResponse.success && freshPsResponse.data) { - userPsCache.set(userId, freshPsResponse); - const freshScopeId = freshPsResponse.etag || ''; - pcResponse = await this.purviewClient.processContent(userId, pcRequest, freshScopeId, true); - - if (!pcResponse.success) { - this.logger.error(`PC retry failed for file ${file.path}: ${pcResponse.error}`); - failedPayloads.push(`pc-retry-${file.path}`); - continue; - } - } - } - - // Check for block actions - const responseData = pcResponse.data as ProcessContentResponse; - if (responseData && isBlocked(responseData)) { - const blockingActions = getBlockingActions(responseData); - this.logger.warn(`BLOCKED: File ${file.path} blocked by ${blockingActions.length} policy action(s)`); - blockedFiles.push({ - filePath: file.path, - userId, - policyActions: blockingActions, - }); - } - } - } - } else { - // evaluateOffline → PCA batch (fire-and-forget) - this.logger.info(`evaluateOffline: sending ${userFiles.length} file(s) to PCA batch for user ${userId}`); - const pcaBatchRequests = this.payloadBuilder.buildProcessContentBatchRequest(userFiles); - for (const pcaBatchRequest of pcaBatchRequests) { - const pcaResult = await this.purviewClient.processContentAsync(pcaBatchRequest); - - if (!pcaResult.success) { - this.logger.error(`PCA batch failed for user ${userId}: ${pcaResult.error}. Falling back to contentActivities.`); - failedPayloads.push(`pca-${userId}`); - await this.sendContentActivities(userFiles, prInfo, failedPayloads); - } - } - } - } - - this.logger.info(`Commit ${sha} processed successfully`); - } - - // Post PR review comment if any files were blocked - if (blockedFiles.length > 0 && prInfo.url) { - this.logger.info(`${blockedFiles.length} file(s) blocked, posting PR review comment`); - - try { - const githubToken = process.env['GITHUB_TOKEN'] || ''; - const prNumber = parseInt(prInfo.url?.split('/').pop() || '0', 10); - - if (githubToken && prNumber > 0) { - const octokit = github.getOctokit(githubToken); - const prCommentService = new PrCommentService( - octokit, - this.config.repository.owner, - this.config.repository.repo, - prNumber - ); - await prCommentService.postBlockedFilesReview(blockedFiles); - } else { - this.logger.warn('Cannot post PR comment: missing GITHUB_TOKEN or PR number'); - } - } catch (e) { - this.logger.warn('Failed to post PR review comment (non-fatal).', { error: e }); - } - } - } + diffFileCount = await this.processDiffPath(prInfo, failedPayloads, blockedFiles, userPsDeniedCache, userPsCache); } else { this.logger.info('Skipping PR diff processing (manually triggered workflow)'); } - // Step 5: Set outputs + // ─── Outputs & Summary ─── const totalProcessed = fullScanFileCount + diffFileCount; core.setOutput('processed-files', totalProcessed); core.setOutput('failed-requests', failedPayloads.length); core.setOutput('blocked-files', JSON.stringify(blockedFiles.map(bf => bf.filePath))); - // Step 6: Summary await this.createSummary(totalProcessed, failedPayloads, blockedFiles); - // Step 7: Fail the action if any files were blocked if (blockedFiles.length > 0) { const blockedFilePaths = blockedFiles.map(bf => bf.filePath).join(', '); const message = `Action failed: ${blockedFiles.length} file(s) were blocked by data security policies: ${blockedFilePaths}`; this.logger.error(message); core.setFailed(message); - return; } } catch (error) { @@ -294,8 +104,310 @@ export class GitHubActionsRunner { throw error; } } - - private async sendContentActivities(files: FileMetadata[], prInfo: any, failedPayloads: string[]): Promise { + + // ────────────────────────────────────────────────────────────────── + // Diff path orchestration + // ────────────────────────────────────────────────────────────────── + + private async processDiffPath( + prInfo: PrInfo, + failedPayloads: string[], + blockedFiles: BlockedFileResult[], + userPsDeniedCache: Set, + userPsCache: Map> + ): Promise { + this.logger.info('Running PR diff flow'); + + const allCommits = await this.fileProcessor.getCommits(); + const commitShaSet = new Set(allCommits.map(c => c.sha)); + const lastProcessedSha = await this.findLastProcessedCommitSha(commitShaSet); + const commitGroups = await this.fileProcessor.getFilesGroupedByCommit(lastProcessedSha, allCommits); + + if (commitGroups.length === 0) { + this.logger.warn('No new commits to process for PR diff'); + return 0; + } + + const psRequest = this.payloadBuilder.buildProtectionScopesRequest(); + const requestLocation = psRequest.locations?.[0]; + if (!requestLocation) { + this.logger.error('Protection scope request has no locations configured'); + throw new Error('Protection scope request has no locations configured'); + } + + const ctx: DiffPathContext = { + prInfo, psRequest, requestLocation, + failedPayloads, blockedFiles, userPsDeniedCache, userPsCache, + }; + + let diffFileCount = 0; + for (const commitGroup of commitGroups) { + diffFileCount += await this.processCommitGroup(commitGroup, ctx); + } + + // Post PR review comment if any files were blocked + if (blockedFiles.length > 0 && prInfo.url) { + await this.postBlockedFilesReview(prInfo, blockedFiles); + } + + return diffFileCount; + } + + private async processCommitGroup(commitGroup: CommitFiles, ctx: DiffPathContext): Promise { + const { sha, files } = commitGroup; + this.logger.info(`── Processing commit ${sha} with ${files.length} file(s) ──`); + + if (files.length === 0) { + this.logger.info(`Commit ${sha} has no matching files, skipping`); + return 0; + } + + // Group files by userId + const filesByUser = new Map(); + for (const file of files) { + const userId = file.authorId || this.config.userId; + const existing = filesByUser.get(userId) || []; + existing.push(file); + filesByUser.set(userId, existing); + } + + this.logger.info(`Commit ${sha}: ${files.length} file(s) across ${filesByUser.size} user(s)`); + + for (const [userId, userFiles] of filesByUser) { + await this.processUserFiles(userId, userFiles, ctx); + } + + await this.sendCommitRequest(commitGroup, ctx); + + this.logger.info(`Commit ${sha} processed successfully`); + return files.length; + } + + // ────────────────────────────────────────────────────────────────── + // Per-user file processing + // ────────────────────────────────────────────────────────────────── + + private async processUserFiles( + userId: string, + userFiles: FileMetadata[], + ctx: DiffPathContext + ): Promise { + this.logger.info(`Processing ${userFiles.length} file(s) for user ${userId}`); + + const psResult = await this.resolveUserPsWithCache(userId, ctx); + if (!psResult) { + await this.sendContentActivities(userFiles, ctx.prInfo, ctx.failedPayloads); + return; + } + + const { psResponse, scopeIdentifier } = psResult; + + // Check applicable scopes + const scopeCheck = this.payloadBuilder.checkApplicableScopes( + psResponse.value, + Activity.uploadText, + ctx.requestLocation + ); + + if (!scopeCheck.shouldProcess) { + this.logger.info(`No matching scopes for user ${userId}, routing ${userFiles.length} file(s) to contentActivities`); + await this.sendContentActivities(userFiles, ctx.prInfo, ctx.failedPayloads); + return; + } + + if (scopeCheck.executionMode === ExecutionMode.evaluateInline) { + await this.processFilesInline(userId, userFiles, scopeIdentifier, ctx); + } else { + await this.processFilesOffline(userId, userFiles, ctx); + } + } + + private async processFilesInline( + userId: string, + userFiles: FileMetadata[], + scopeIdentifier: string, + ctx: DiffPathContext + ): Promise { + this.logger.info(`evaluateInline: calling processContent for ${userFiles.length} file(s), user ${userId}`); + + const conversationId = crypto.randomUUID(); + let seqNum = 0; + + for (const file of userFiles) { + const pcRequests = this.payloadBuilder.buildPerUserProcessContentRequest(file, conversationId, seqNum); + seqNum += pcRequests.length; + + for (const pcRequest of pcRequests) { + let pcResponse = await this.purviewClient.processContent(userId, pcRequest, scopeIdentifier, true); + + if (!pcResponse.success) { + this.logger.error(`PC failed for file ${file.path}: ${pcResponse.error}. Falling back to contentActivities.`); + ctx.failedPayloads.push(`pc-${file.path}`); + await this.sendContentActivities([file], ctx.prInfo, ctx.failedPayloads); + continue; + } + + const pcData = pcResponse.data as ProcessContentResponse; + + // Handle protectionScopeState: "modified" → re-fetch scopes and retry + if (pcData?.protectionScopeState === 'modified') { + this.logger.info(`Protection scope state modified for user ${userId}, re-fetching scopes and retrying PC for ${file.path}`); + + const freshPsResponse = await this.purviewClient.searchUserProtectionScope(userId, ctx.psRequest); + if (freshPsResponse.success && freshPsResponse.data) { + ctx.userPsCache.set(userId, freshPsResponse); + const freshScopeId = freshPsResponse.etag || ''; + pcResponse = await this.purviewClient.processContent(userId, pcRequest, freshScopeId, true); + + if (!pcResponse.success) { + this.logger.error(`PC retry failed for file ${file.path}: ${pcResponse.error}`); + ctx.failedPayloads.push(`pc-retry-${file.path}`); + continue; + } + } + } + + // Check for block actions + const responseData = pcResponse.data as ProcessContentResponse; + if (responseData && isBlocked(responseData)) { + const blockingActions = getBlockingActions(responseData); + this.logger.warn(`BLOCKED: File ${file.path} blocked by ${blockingActions.length} policy action(s)`); + ctx.blockedFiles.push({ + filePath: file.path, + userId, + policyActions: blockingActions, + }); + } + } + } + } + + private async processFilesOffline( + userId: string, + userFiles: FileMetadata[], + ctx: DiffPathContext + ): Promise { + this.logger.info(`evaluateOffline: sending ${userFiles.length} file(s) to PCA batch for user ${userId}`); + const pcaBatchRequests = this.payloadBuilder.buildProcessContentBatchRequest(userFiles); + for (const pcaBatchRequest of pcaBatchRequests) { + const pcaResult = await this.purviewClient.processContentAsync(pcaBatchRequest); + + if (!pcaResult.success) { + this.logger.error(`PCA batch failed for user ${userId}: ${pcaResult.error}. Falling back to contentActivities.`); + ctx.failedPayloads.push(`pca-${userId}`); + await this.sendContentActivities(userFiles, ctx.prInfo, ctx.failedPayloads); + } + } + } + + // ────────────────────────────────────────────────────────────────── + // Shared PS resolution + commit-level + fallback helpers + // ────────────────────────────────────────────────────────────────── + + /** + * Resolve user protection scopes using the cache. Returns the PS response + * and etag, or null if the caller should fall back to contentActivities. + */ + private async resolveUserPsWithCache( + userId: string, + ctx: DiffPathContext + ): Promise<{ psResponse: ProtectionScopesResponse; scopeIdentifier: string } | null> { + if (ctx.userPsDeniedCache.has(userId)) { + this.logger.warn(`Skipping user ${userId} — cached 401 from earlier PS call. Routing to contentActivities.`); + return null; + } + + let psApiResponse = ctx.userPsCache.get(userId); + if (psApiResponse) { + this.logger.info(`Using cached PS response for user ${userId}`); + } else { + psApiResponse = await this.purviewClient.searchUserProtectionScope(userId, ctx.psRequest); + if (psApiResponse.success) { + ctx.userPsCache.set(userId, psApiResponse); + } + } + + if (!psApiResponse.success) { + this.logger.error(`Failed to get protection scopes for user ${userId}: ${psApiResponse.error}`); + ctx.failedPayloads.push(`ps-${userId}`); + if (psApiResponse.statusCode === 401) { + ctx.userPsDeniedCache.add(userId); + this.logger.warn(`User ${userId} returned 401 on PS — cached, will skip in future calls.`); + } + return null; + } + + const psResponse = psApiResponse.data; + if (!psResponse || !psResponse.value) { + this.logger.warn(`Empty protection scopes response for user ${userId}, routing to contentActivities`); + return null; + } + + return { psResponse, scopeIdentifier: psApiResponse.etag || '' }; + } + + /** + * Send a commit-level request through the same routing as file requests. + */ + private async sendCommitRequest(commitGroup: CommitFiles, ctx: DiffPathContext): Promise { + const commitUserId = commitGroup.authorId || this.config.userId; + const commitIdentifier = `commit:${commitGroup.sha}`; + this.logger.info(`Sending commit-level request for ${commitIdentifier}, user ${commitUserId}`); + + const psResult = await this.resolveUserPsWithCache(commitUserId, ctx); + if (!psResult) { + await this.sendCommitContentActivity(commitGroup, ctx.prInfo, ctx.failedPayloads); + return; + } + + const scopeCheck = this.payloadBuilder.checkApplicableScopes( + psResult.psResponse.value, + Activity.uploadText, + ctx.requestLocation + ); + + if (!scopeCheck.shouldProcess) { + await this.sendCommitContentActivity(commitGroup, ctx.prInfo, ctx.failedPayloads); + return; + } + + if (scopeCheck.executionMode === ExecutionMode.evaluateInline) { + const conversationId = crypto.randomUUID(); + const pcRequest = this.payloadBuilder.buildCommitProcessContentRequest(commitGroup, conversationId, 0); + const pcResponse = await this.purviewClient.processContent(commitUserId, pcRequest, psResult.scopeIdentifier, true); + + if (!pcResponse.success) { + this.logger.error(`PC failed for commit ${commitGroup.sha}: ${pcResponse.error}. Falling back to contentActivities.`); + ctx.failedPayloads.push(`pc-commit-${commitGroup.sha}`); + await this.sendCommitContentActivity(commitGroup, ctx.prInfo, ctx.failedPayloads); + return; + } + + const pcData = pcResponse.data as ProcessContentResponse; + if (pcData && isBlocked(pcData)) { + const blockingActions = getBlockingActions(pcData); + this.logger.warn(`BLOCKED: Commit ${commitGroup.sha} blocked by ${blockingActions.length} policy action(s)`); + ctx.blockedFiles.push({ + filePath: commitIdentifier, + userId: commitUserId, + policyActions: blockingActions, + }); + } + } else { + const conversationId = crypto.randomUUID() + '@GA'; + const pcaItem = this.payloadBuilder.buildCommitProcessContentBatchItem(commitGroup, conversationId, 0); + const pcaBatch: ProcessContentBatchRequest = { processContentRequests: [pcaItem] }; + const pcaResult = await this.purviewClient.processContentAsync(pcaBatch); + + if (!pcaResult.success) { + this.logger.error(`PCA failed for commit ${commitGroup.sha}: ${pcaResult.error}. Falling back to contentActivities.`); + ctx.failedPayloads.push(`pca-commit-${commitGroup.sha}`); + await this.sendCommitContentActivity(commitGroup, ctx.prInfo, ctx.failedPayloads); + } + } + } + + private async sendContentActivities(files: FileMetadata[], prInfo: PrInfo, failedPayloads: string[]): Promise { const uploadRequests = this.payloadBuilder.buildUploadSignalRequest(files, prInfo); for (const req of uploadRequests) { const result = await this.purviewClient.uploadSignal(req); @@ -306,6 +418,38 @@ export class GitHubActionsRunner { } } + private async sendCommitContentActivity(commitGroup: CommitFiles, prInfo: PrInfo, failedPayloads: string[]): Promise { + const req = this.payloadBuilder.buildCommitUploadSignalRequest(commitGroup, prInfo); + const result = await this.purviewClient.uploadSignal(req); + if (!result.success) { + this.logger.error(`ContentActivities upload failed for commit ${commitGroup.sha}: ${result.error}`); + failedPayloads.push(`ca-commit-${commitGroup.sha}`); + } + } + + private async postBlockedFilesReview(prInfo: PrInfo, blockedFiles: BlockedFileResult[]): Promise { + this.logger.info(`${blockedFiles.length} file(s) blocked, posting PR review comment`); + try { + const githubToken = process.env['GITHUB_TOKEN'] || ''; + const prNumber = parseInt(prInfo.url?.split('/').pop() || '0', 10); + + if (githubToken && prNumber > 0) { + const octokit = github.getOctokit(githubToken); + const prCommentService = new PrCommentService( + octokit, + this.config.repository.owner, + this.config.repository.repo, + prNumber + ); + await prCommentService.postBlockedFilesReview(blockedFiles); + } else { + this.logger.warn('Cannot post PR comment: missing GITHUB_TOKEN or PR number'); + } + } catch (e) { + this.logger.warn('Failed to post PR review comment (non-fatal).', { error: e }); + } + } + private async createSummary(processed: number, failed: string[], blocked: BlockedFileResult[] = []): Promise { const summary = core.summary .addHeading('Purview GitHub Action Results') diff --git a/src/utils/fileUtils.ts b/src/utils/fileUtils.ts deleted file mode 100644 index 605079b..0000000 --- a/src/utils/fileUtils.ts +++ /dev/null @@ -1,63 +0,0 @@ -import * as fs from 'fs'; -import isBinaryPath from 'is-binary-path'; -import { FilePayload, ActionConfig } from './types'; -import { Logger } from './logger'; - -export function createPayloadsFromFile(filePath: string, config: ActionConfig, logger: Logger): FilePayload[] | null { - try { - const stats = fs.statSync(filePath); - if (stats.size === 0) { - logger.warn(`Skipping empty file: ${filePath}`); - return null; - } - - const isBinary = isBinaryPath(filePath); - if (isBinary && config.skipBinary) { - logger.warn(`Skipping binary file: ${filePath}`); - return null; - } - - const contentBuffer = fs.readFileSync(filePath); - const totalSize = contentBuffer.byteLength; - - if (!config.sliceLargeFiles && totalSize > config.maxFileBytes) { - logger.warn(`Skipping oversized file (slicing disabled): ${filePath} (${totalSize} bytes > ${config.maxFileBytes} bytes)`); - return null; - } - - const chunks: Buffer[] = []; - if (totalSize > config.maxFileBytes) { - logger.info(`Slicing large file: ${filePath} (${totalSize} bytes) into chunks of max ${config.maxFileBytes} bytes.`); - for (let i = 0; i < totalSize; i += config.maxFileBytes) { - chunks.push(contentBuffer.subarray(i, i + config.maxFileBytes)); - } - } else { - chunks.push(contentBuffer); - } - - return chunks.map((chunk, index) => { - let content: string; - if (isBinary) { - content = chunk.toString('base64'); - } else { - content = chunk.toString('utf8'); - if (config.minify) { - // Basic minify: just trim whitespace. More complex minification is out of scope. - content = content.replace(/\s+/g, ' ').trim(); - } - } - - return { - filePath, - content, - isBinary, - isSliced: chunks.length > 1, - sliceIndex: chunks.length > 1 ? index + 1 : undefined, - totalSlices: chunks.length > 1 ? chunks.length : undefined, - }; - }); - } catch (error) { - logger.warn(`Could not process file ${filePath}. Error: ${(error as Error).message}`); - return null; - } -} \ No newline at end of file diff --git a/src/utils/types.ts b/src/utils/types.ts deleted file mode 100644 index f0a5042..0000000 --- a/src/utils/types.ts +++ /dev/null @@ -1,28 +0,0 @@ -// --- Configuration & Internal Types --- - -export interface ActionConfig { - endpoint: string; - userPrincipalName: string; - tenantId: string; - aadResource: string; - includeGlobs: string[]; - excludeGlobs: string[]; - maxFileBytes: number; - sliceLargeFiles: boolean; - skipBinary: boolean; - includeSummaryPayload: boolean; - minify: boolean; - failOnNon2xx: boolean; - appHostName: string; - applicationHostCategories: string[]; - debug: boolean; -} - -export interface FilePayload { - filePath: string; - content: string; // Plaintext or Base64 - isBinary: boolean; - isSliced: boolean; - sliceIndex?: number; - totalSlices?: number; -} \ No newline at end of file diff --git a/tests/payload/payloadBuilder.test.ts b/tests/payload/payloadBuilder.test.ts index fcc568b..d9c8695 100644 --- a/tests/payload/payloadBuilder.test.ts +++ b/tests/payload/payloadBuilder.test.ts @@ -89,7 +89,7 @@ describe('PayloadBuilder', () => { it('includes integratedAppMetadata', () => { const request = builder.buildProtectionScopesRequest(); - expect(request.integratedAppMetadata?.name).toBe('Github'); + expect(request.integratedAppMetadata?.name).toBe('GitHub'); expect(request.integratedAppMetadata?.version).toBe('0.0.1'); }); }); diff --git a/tests/utils/fileUtils.test.ts b/tests/utils/fileUtils.test.ts deleted file mode 100644 index 2b4f7da..0000000 --- a/tests/utils/fileUtils.test.ts +++ /dev/null @@ -1,107 +0,0 @@ -jest.mock('@actions/core', () => ({ - getBooleanInput: jest.fn().mockReturnValue(false), - debug: jest.fn(), - info: jest.fn(), - warning: jest.fn(), - error: jest.fn(), -})); - -jest.mock('is-binary-path', () => ({ - __esModule: true, - default: (filePath: string) => /\.(png|jpg|gif|exe|dll|bin|ico|woff|ttf)$/i.test(filePath), -})); - -import * as fs from 'fs'; -import { createPayloadsFromFile } from '../../src/utils/fileUtils'; -import { Logger } from '../../src/utils/logger'; -import { ActionConfig } from '../../src/utils/types'; - -jest.mock('fs'); - -const mockFs = fs as jest.Mocked; -const logger = new Logger('test'); - -function makeConfig(overrides: Partial = {}): ActionConfig { - return { - endpoint: 'https://example.com', - userPrincipalName: 'user@test.com', - tenantId: 'tid', - aadResource: 'res', - includeGlobs: ['**'], - excludeGlobs: [], - maxFileBytes: 1024, - sliceLargeFiles: false, - skipBinary: true, - includeSummaryPayload: false, - minify: false, - failOnNon2xx: false, - appHostName: 'test', - applicationHostCategories: [], - debug: false, - ...overrides, - }; -} - -describe('createPayloadsFromFile', () => { - beforeEach(() => jest.clearAllMocks()); - - it('returns null for empty files', () => { - mockFs.statSync.mockReturnValue({ size: 0 } as fs.Stats); - expect(createPayloadsFromFile('empty.txt', makeConfig(), logger)).toBeNull(); - }); - - it('returns null for binary files when skipBinary is true', () => { - mockFs.statSync.mockReturnValue({ size: 100 } as fs.Stats); - expect(createPayloadsFromFile('image.png', makeConfig({ skipBinary: true }), logger)).toBeNull(); - }); - - it('processes binary files when skipBinary is false', () => { - mockFs.statSync.mockReturnValue({ size: 5 } as fs.Stats); - mockFs.readFileSync.mockReturnValue(Buffer.from('hello')); - const result = createPayloadsFromFile('image.png', makeConfig({ skipBinary: false }), logger); - expect(result).not.toBeNull(); - expect(result![0]!.isBinary).toBe(true); - expect(result![0]!.content).toBe(Buffer.from('hello').toString('base64')); - }); - - it('returns null for oversized files when slicing is disabled', () => { - mockFs.statSync.mockReturnValue({ size: 2000 } as fs.Stats); - mockFs.readFileSync.mockReturnValue(Buffer.alloc(2000)); - expect(createPayloadsFromFile('big.txt', makeConfig({ maxFileBytes: 1024, sliceLargeFiles: false }), logger)).toBeNull(); - }); - - it('slices large files into chunks', () => { - const content = Buffer.alloc(2500, 'a'); - mockFs.statSync.mockReturnValue({ size: 2500 } as fs.Stats); - mockFs.readFileSync.mockReturnValue(content); - - const result = createPayloadsFromFile('big.txt', makeConfig({ maxFileBytes: 1024, sliceLargeFiles: true }), logger); - expect(result).not.toBeNull(); - expect(result!.length).toBe(3); // 1024 + 1024 + 452 - expect(result![0]!.isSliced).toBe(true); - expect(result![0]!.sliceIndex).toBe(1); - expect(result![0]!.totalSlices).toBe(3); - }); - - it('reads text files as utf8', () => { - mockFs.statSync.mockReturnValue({ size: 11 } as fs.Stats); - mockFs.readFileSync.mockReturnValue(Buffer.from('hello world')); - const result = createPayloadsFromFile('readme.md', makeConfig(), logger); - expect(result).not.toBeNull(); - expect(result![0]!.content).toBe('hello world'); - expect(result![0]!.isBinary).toBe(false); - expect(result![0]!.isSliced).toBe(false); - }); - - it('minifies text content when enabled', () => { - mockFs.statSync.mockReturnValue({ size: 20 } as fs.Stats); - mockFs.readFileSync.mockReturnValue(Buffer.from(' hello world \n\n')); - const result = createPayloadsFromFile('code.ts', makeConfig({ minify: true }), logger); - expect(result![0]!.content).toBe('hello world'); - }); - - it('returns null and logs warning on read errors', () => { - mockFs.statSync.mockImplementation(() => { throw new Error('ENOENT'); }); - expect(createPayloadsFromFile('missing.txt', makeConfig(), logger)).toBeNull(); - }); -}); From 8847df4a63409493e344492f4d074f7582288a30 Mon Sep 17 00:00:00 2001 From: Rishabh Chawla Date: Wed, 1 Apr 2026 14:27:59 -0700 Subject: [PATCH 04/20] PC Updates --- dist/api/PurviewClient.d.ts.map | 2 +- dist/api/PurviewClient.js | 31 ++++-- dist/api/PurviewClient.js.map | 2 +- dist/index.js | 123 +++++++++++++++++----- dist/runner/GitHubActionsRunner.d.ts | 7 +- dist/runner/GitHubActionsRunner.d.ts.map | 2 +- dist/runner/GitHubActionsRunner.js | 92 ++++++++++++---- dist/runner/GitHubActionsRunner.js.map | 2 +- flow.md | 67 ++++++------ sample/.github/workflows/purview-scan.yml | 4 +- src/api/purviewClient.ts | 33 ++++-- src/runner/gitHubActionsRunner.ts | 104 +++++++++++++----- 12 files changed, 349 insertions(+), 120 deletions(-) diff --git a/dist/api/PurviewClient.d.ts.map b/dist/api/PurviewClient.d.ts.map index 7dba5c9..6a2c0c7 100644 --- a/dist/api/PurviewClient.d.ts.map +++ b/dist/api/PurviewClient.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"purviewClient.d.ts","sourceRoot":"","sources":["../../src/api/purviewClient.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,0BAA0B,EAAE,qBAAqB,EAAE,sBAAsB,EAAE,mBAAmB,EAAE,uBAAuB,EAAE,wBAAwB,EAAE,sBAAsB,EAAE,MAAM,iBAAiB,CAAC;AAIvO,qBAAa,aAAa;IAMZ,OAAO,CAAC,QAAQ,CAAC,MAAM;IALnC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAChC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAe;IAC5C,OAAO,CAAC,SAAS,CAAuB;IACxC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;gBAEJ,MAAM,EAAE,YAAY;IAMjD,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAI3B,mBAAmB,CAAC,OAAO,EAAE,0BAA0B,GAAG,OAAO,CAAC,WAAW,CAAC;IA2B9E,cAAc,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,qBAAqB,EAAE,eAAe,EAAE,MAAM,EAAE,MAAM,GAAE,OAAc,GAAG,OAAO,CAAC,WAAW,CAAC,sBAAsB,CAAC,CAAC;IAmC7J,YAAY,CAAC,OAAO,EAAE,mBAAmB,GAAG,OAAO,CAAC,WAAW,CAAC;IA0BhE,2BAA2B,CAAC,OAAO,EAAE,uBAAuB,GAAG,OAAO,CAAC,WAAW,CAAC,wBAAwB,CAAC,CAAC;IA8B7G,yBAAyB,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,uBAAuB,GAAG,OAAO,CAAC,WAAW,CAAC,wBAAwB,CAAC,CAAC;IA8B3H,WAAW,CAAC,UAAU,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,WAAW,CAAC,sBAAsB,CAAC,CAAC;YA6BvE,WAAW;IA4EzB,OAAO,CAAC,YAAY;IAQpB,OAAO,CAAC,iBAAiB;IAIzB,OAAO,CAAC,gBAAgB;IAIxB,OAAO,CAAC,qBAAqB;CAS9B"} \ No newline at end of file +{"version":3,"file":"purviewClient.d.ts","sourceRoot":"","sources":["../../src/api/purviewClient.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,0BAA0B,EAAE,qBAAqB,EAAE,sBAAsB,EAAE,mBAAmB,EAAE,uBAAuB,EAAE,wBAAwB,EAAE,sBAAsB,EAAE,MAAM,iBAAiB,CAAC;AAIvO,qBAAa,aAAa;IAMZ,OAAO,CAAC,QAAQ,CAAC,MAAM;IALnC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAChC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAe;IAC5C,OAAO,CAAC,SAAS,CAAuB;IACxC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;gBAEJ,MAAM,EAAE,YAAY;IAMjD,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAI3B,mBAAmB,CAAC,OAAO,EAAE,0BAA0B,GAAG,OAAO,CAAC,WAAW,CAAC;IA2B9E,cAAc,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,qBAAqB,EAAE,eAAe,EAAE,MAAM,EAAE,MAAM,GAAE,OAAc,GAAG,OAAO,CAAC,WAAW,CAAC,sBAAsB,CAAC,CAAC;IAmC7J,YAAY,CAAC,OAAO,EAAE,mBAAmB,GAAG,OAAO,CAAC,WAAW,CAAC;IA0BhE,2BAA2B,CAAC,OAAO,EAAE,uBAAuB,GAAG,OAAO,CAAC,WAAW,CAAC,wBAAwB,CAAC,CAAC;IA8B7G,yBAAyB,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,uBAAuB,GAAG,OAAO,CAAC,WAAW,CAAC,wBAAwB,CAAC,CAAC;IA8B3H,WAAW,CAAC,UAAU,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,WAAW,CAAC,sBAAsB,CAAC,CAAC;YA6BvE,WAAW;IA+FzB,OAAO,CAAC,YAAY;IAQpB,OAAO,CAAC,iBAAiB;IAIzB,OAAO,CAAC,gBAAgB;IAIxB,OAAO,CAAC,qBAAqB;CAS9B"} \ No newline at end of file diff --git a/dist/api/PurviewClient.js b/dist/api/PurviewClient.js index b941d03..07ce068 100644 --- a/dist/api/PurviewClient.js +++ b/dist/api/PurviewClient.js @@ -146,18 +146,26 @@ export class PurviewClient { } } async sendRequest(endpoint, payload = null, method = "POST", additionalHeaders = {}, operationName = 'Unknown') { + const requestId = this.generateRequestId(); const headers = { 'Authorization': `Bearer ${this.authToken}`, 'Content-Type': 'application/json', - 'X-Request-Id': this.generateRequestId(), + 'X-Request-Id': requestId, 'User-Agent': 'PurviewGitHubAction/1.0', ...additionalHeaders }; this.logger.startGroup('Purview API Request'); - this.logger.debug('Sending request', { + this.logger.debug(`[${operationName}] Request`, { endpoint: this.sanitizeEndpoint(endpoint), - payloadSize: JSON.stringify(payload).length + method, + requestId, + additionalHeaders: Object.keys(additionalHeaders), }); + if (payload) { + this.logger.debug(`[${operationName}] Request payload`, { + payload: JSON.parse(JSON.stringify(JSON.parse(payload), this.jsonReplacer)), + }); + } try { const response = await fetch(endpoint, { method: method, @@ -165,13 +173,18 @@ export class PurviewClient { body: payload }); const responseText = await response.text(); - const requestId = response.headers.get('client-request-id'); - this.logger.info(`[${operationName}] Received response with status: ${response.status}, correlation ID: ${requestId}`); + const correlationId = response.headers.get('client-request-id'); + this.logger.info(`[${operationName}] Received response with status: ${response.status}, correlation ID: ${correlationId}`); if (!response.ok) { + this.logger.debug(`[${operationName}] Error response body`, { + status: response.status, + correlationId, + body: this.sanitizeErrorResponse(responseText), + }); this.logger.error('API request failed', { status: response.status, statusText: response.statusText, - correlationId: requestId, + correlationId, response: this.sanitizeErrorResponse(responseText) }); // Handle specific error cases @@ -191,6 +204,12 @@ export class PurviewClient { try { const data = responseText ? JSON.parse(responseText) : {}; const etag = response.headers.get('etag')?.replace(/"/g, '') || undefined; + this.logger.debug(`[${operationName}] Response payload`, { + statusCode: response.status, + etag, + correlationId, + data: JSON.parse(JSON.stringify(data, this.jsonReplacer)), + }); this.logger.endGroup(); return { success: true, diff --git a/dist/api/PurviewClient.js.map b/dist/api/PurviewClient.js.map index e643dd4..7136db5 100644 --- a/dist/api/PurviewClient.js.map +++ b/dist/api/PurviewClient.js.map @@ -1 +1 @@ -{"version":3,"file":"purviewClient.js","sourceRoot":"","sources":["../../src/api/purviewClient.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"purviewClient.js","sourceRoot":"","sources":["../../src/api/purviewClient.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/dist/index.js b/dist/index.js index 926c621..b0094d1 100644 --- a/dist/index.js +++ b/dist/index.js @@ -62126,18 +62126,26 @@ class PurviewClient { } } async sendRequest(endpoint, payload = null, method = "POST", additionalHeaders = {}, operationName = 'Unknown') { + const requestId = this.generateRequestId(); const headers = { 'Authorization': `Bearer ${this.authToken}`, 'Content-Type': 'application/json', - 'X-Request-Id': this.generateRequestId(), + 'X-Request-Id': requestId, 'User-Agent': 'PurviewGitHubAction/1.0', ...additionalHeaders }; this.logger.startGroup('Purview API Request'); - this.logger.debug('Sending request', { + this.logger.debug(`[${operationName}] Request`, { endpoint: this.sanitizeEndpoint(endpoint), - payloadSize: JSON.stringify(payload).length + method, + requestId, + additionalHeaders: Object.keys(additionalHeaders), }); + if (payload) { + this.logger.debug(`[${operationName}] Request payload`, { + payload: JSON.parse(JSON.stringify(JSON.parse(payload), this.jsonReplacer)), + }); + } try { const response = await fetch(endpoint, { method: method, @@ -62145,13 +62153,18 @@ class PurviewClient { body: payload }); const responseText = await response.text(); - const requestId = response.headers.get('client-request-id'); - this.logger.info(`[${operationName}] Received response with status: ${response.status}, correlation ID: ${requestId}`); + const correlationId = response.headers.get('client-request-id'); + this.logger.info(`[${operationName}] Received response with status: ${response.status}, correlation ID: ${correlationId}`); if (!response.ok) { + this.logger.debug(`[${operationName}] Error response body`, { + status: response.status, + correlationId, + body: this.sanitizeErrorResponse(responseText), + }); this.logger.error('API request failed', { status: response.status, statusText: response.statusText, - correlationId: requestId, + correlationId, response: this.sanitizeErrorResponse(responseText) }); // Handle specific error cases @@ -62171,6 +62184,12 @@ class PurviewClient { try { const data = responseText ? JSON.parse(responseText) : {}; const etag = response.headers.get('etag')?.replace(/"/g, '') || undefined; + this.logger.debug(`[${operationName}] Response payload`, { + statusCode: response.status, + etag, + correlationId, + data: JSON.parse(JSON.stringify(data, this.jsonReplacer)), + }); this.logger.endGroup(); return { success: true, @@ -64005,7 +64024,7 @@ class GitHubActionsRunner { this.logger.info('Authenticating with Azure'); const token = await this.authService.getToken(); this.purviewClient.setAuthToken(token.accessToken); - // Step 3: Get PR info + // Step 3: Get event context info this.logger.info('Processing repository files'); const prInfo = await this.fileProcessor.getPrInfo(); const failedPayloads = []; @@ -64022,13 +64041,13 @@ class GitHubActionsRunner { } fullScanFileCount = await this.fullScanService.performFullScan(stateInfo, failedPayloads, prInfo, userPsDeniedCache, userPsCache); } - // ─── PR Diff Path (skip if manually triggered) ─── + // ─── Diff Path (skip if manually triggered) ─── let diffFileCount = 0; if (!isManualDispatch) { diffFileCount = await this.processDiffPath(prInfo, failedPayloads, blockedFiles, userPsDeniedCache, userPsCache); } else { - this.logger.info('Skipping PR diff processing (manually triggered workflow)'); + this.logger.info('Skipping diff processing (manually triggered workflow)'); } // ─── Outputs & Summary ─── const totalProcessed = fullScanFileCount + diffFileCount; @@ -64052,13 +64071,13 @@ class GitHubActionsRunner { // Diff path orchestration // ────────────────────────────────────────────────────────────────── async processDiffPath(prInfo, failedPayloads, blockedFiles, userPsDeniedCache, userPsCache) { - this.logger.info('Running PR diff flow'); + this.logger.info(`Running diff flow for ${github_context.eventName} event`); const allCommits = await this.fileProcessor.getCommits(); const commitShaSet = new Set(allCommits.map(c => c.sha)); const lastProcessedSha = await this.findLastProcessedCommitSha(commitShaSet); const commitGroups = await this.fileProcessor.getFilesGroupedByCommit(lastProcessedSha, allCommits); if (commitGroups.length === 0) { - this.logger.warn('No new commits to process for PR diff'); + this.logger.warn('No new commits to process'); return 0; } const psRequest = this.payloadBuilder.buildProtectionScopesRequest(); @@ -64075,9 +64094,9 @@ class GitHubActionsRunner { for (const commitGroup of commitGroups) { diffFileCount += await this.processCommitGroup(commitGroup, ctx); } - // Post PR review comment if any files were blocked - if (blockedFiles.length > 0 && prInfo.url) { - await this.postBlockedFilesReview(prInfo, blockedFiles); + // Post blocked files notification (PR review comment or commit comment) + if (blockedFiles.length > 0) { + await this.postBlockedFilesNotification(prInfo, blockedFiles); } return diffFileCount; } @@ -64292,24 +64311,72 @@ class GitHubActionsRunner { failedPayloads.push(`ca-commit-${commitGroup.sha}`); } } - async postBlockedFilesReview(prInfo, blockedFiles) { - this.logger.info(`${blockedFiles.length} file(s) blocked, posting PR review comment`); + /** + * Post a notification about blocked files — PR review comment for pull_request + * events, commit comment for push events. + */ + async postBlockedFilesNotification(_prInfo, blockedFiles) { + this.logger.info(`${blockedFiles.length} file(s) blocked, posting notification`); try { const githubToken = process.env['GITHUB_TOKEN'] || ''; - const prNumber = parseInt(prInfo.url?.split('/').pop() || '0', 10); - if (githubToken && prNumber > 0) { - const octokit = getOctokit(githubToken); - const prCommentService = new PrCommentService(octokit, this.config.repository.owner, this.config.repository.repo, prNumber); - await prCommentService.postBlockedFilesReview(blockedFiles); + if (!githubToken) { + this.logger.warn('Cannot post blocked files notification: missing GITHUB_TOKEN'); + return; + } + const octokit = getOctokit(githubToken); + if (github_context.eventName === 'pull_request') { + const prNumber = github_context.payload.pull_request?.number; + if (prNumber) { + const prCommentService = new PrCommentService(octokit, this.config.repository.owner, this.config.repository.repo, prNumber); + await prCommentService.postBlockedFilesReview(blockedFiles); + } + else { + this.logger.warn('Cannot post PR comment: PR number not available'); + } + } + else if (github_context.eventName === 'push') { + const commitSha = github_context.sha; + if (commitSha) { + const body = this.formatBlockedFilesComment(blockedFiles); + await octokit.rest.repos.createCommitComment({ + owner: this.config.repository.owner, + repo: this.config.repository.repo, + commit_sha: commitSha, + body, + }); + this.logger.info(`Commit comment posted on ${commitSha}`); + } + else { + this.logger.warn('Cannot post commit comment: commit SHA not available'); + } } else { - this.logger.warn('Cannot post PR comment: missing GITHUB_TOKEN or PR number'); + this.logger.info('Blocked files notification skipped (unsupported event type for comments)'); } } catch (e) { - this.logger.warn('Failed to post PR review comment (non-fatal).', { error: e }); + this.logger.warn('Failed to post blocked files notification (non-fatal).', { error: e }); } } + formatBlockedFilesComment(blockedFiles) { + const lines = [ + '## ⚠️ Purview Data Security — Blocked Content Detected', + '', + 'The following file(s) were flagged by data security policies and **blocked**:', + '', + '| File | Policy | Action |', + '|------|--------|--------|', + ]; + for (const bf of blockedFiles) { + for (const pa of bf.policyActions) { + const policy = pa.policyName || pa.policyId || 'Unknown'; + const action = pa.restrictionAction || pa.action; + lines.push(`| \`${bf.filePath}\` | ${policy} | ${action} |`); + } + } + lines.push('', '> This comment was generated by the Purview GitHub Action.'); + return lines.join('\n'); + } async createSummary(processed, failed, blocked = []) { const summary = summary_summary .addHeading('Purview GitHub Action Results') @@ -64368,8 +64435,14 @@ class GitHubActionsRunner { this.logger.info('Could not resolve workflow ID from current run — skipping commit dedup'); return null; } - // Scope to the PR head branch if available - const branch = github_context.payload.pull_request?.['head']?.ref; + // Scope to the current branch for more precise commit dedup + let branch; + if (github_context.eventName === 'pull_request') { + branch = github_context.payload.pull_request?.['head']?.ref; + } + else if (github_context.eventName === 'push') { + branch = github_context.ref?.replace('refs/heads/', ''); + } // Use listWorkflowRunsForRepo (not listWorkflowRuns) because in // cross-repo reusable-workflow setups the numeric workflow_id returned // by getWorkflowRun belongs to the *external* workflow-definition repo, diff --git a/dist/runner/GitHubActionsRunner.d.ts b/dist/runner/GitHubActionsRunner.d.ts index d21a774..7146d43 100644 --- a/dist/runner/GitHubActionsRunner.d.ts +++ b/dist/runner/GitHubActionsRunner.d.ts @@ -25,7 +25,12 @@ export declare class GitHubActionsRunner { private sendCommitRequest; private sendContentActivities; private sendCommitContentActivity; - private postBlockedFilesReview; + /** + * Post a notification about blocked files — PR review comment for pull_request + * events, commit comment for push events. + */ + private postBlockedFilesNotification; + private formatBlockedFilesComment; private createSummary; /** * Paginates through successful workflow runs in batches of 3, checking each diff --git a/dist/runner/GitHubActionsRunner.d.ts.map b/dist/runner/GitHubActionsRunner.d.ts.map index 096ccae..2e25b4b 100644 --- a/dist/runner/GitHubActionsRunner.d.ts.map +++ b/dist/runner/GitHubActionsRunner.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"gitHubActionsRunner.d.ts","sourceRoot":"","sources":["../../src/runner/gitHubActionsRunner.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,YAAY,EAAqN,MAAM,iBAAiB,CAAC;AAqBlQ,qBAAa,mBAAmB;IAQlB,OAAO,CAAC,QAAQ,CAAC,MAAM;IAPnC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAChC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAwB;IACpD,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAgB;IAC9C,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAgB;IAC9C,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAiB;IAChD,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAkB;gBAErB,MAAM,EAAE,YAAY;IAc3C,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;YAkEhB,eAAe;YA4Cf,kBAAkB;YAkClB,gBAAgB;YAmChB,kBAAkB;YA4DlB,mBAAmB;IAsBjC;;;OAGG;YACW,sBAAsB;IAsCpC;;OAEG;YACW,iBAAiB;YA0DjB,qBAAqB;YAWrB,yBAAyB;YASzB,sBAAsB;YAuBtB,aAAa;IA2B3B;;;;OAIG;YACW,0BAA0B;IAgGxC;;OAEG;YACW,iBAAiB;CAsBhC"} \ No newline at end of file +{"version":3,"file":"gitHubActionsRunner.d.ts","sourceRoot":"","sources":["../../src/runner/gitHubActionsRunner.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,YAAY,EAAqN,MAAM,iBAAiB,CAAC;AAqBlQ,qBAAa,mBAAmB;IAQlB,OAAO,CAAC,QAAQ,CAAC,MAAM;IAPnC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAChC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAwB;IACpD,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAgB;IAC9C,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAgB;IAC9C,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAiB;IAChD,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAkB;gBAErB,MAAM,EAAE,YAAY;IAc3C,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;YAkEhB,eAAe;YA4Cf,kBAAkB;YAkClB,gBAAgB;YAmChB,kBAAkB;YA4DlB,mBAAmB;IAsBjC;;;OAGG;YACW,sBAAsB;IAsCpC;;OAEG;YACW,iBAAiB;YA0DjB,qBAAqB;YAWrB,yBAAyB;IASvC;;;OAGG;YACW,4BAA4B;IA8C1C,OAAO,CAAC,yBAAyB;YAsBnB,aAAa;IA2B3B;;;;OAIG;YACW,0BAA0B;IAqGxC;;OAEG;YACW,iBAAiB;CAsBhC"} \ No newline at end of file diff --git a/dist/runner/GitHubActionsRunner.js b/dist/runner/GitHubActionsRunner.js index 256ca47..3c130b1 100644 --- a/dist/runner/GitHubActionsRunner.js +++ b/dist/runner/GitHubActionsRunner.js @@ -35,7 +35,7 @@ export class GitHubActionsRunner { this.logger.info('Authenticating with Azure'); const token = await this.authService.getToken(); this.purviewClient.setAuthToken(token.accessToken); - // Step 3: Get PR info + // Step 3: Get event context info this.logger.info('Processing repository files'); const prInfo = await this.fileProcessor.getPrInfo(); const failedPayloads = []; @@ -52,13 +52,13 @@ export class GitHubActionsRunner { } fullScanFileCount = await this.fullScanService.performFullScan(stateInfo, failedPayloads, prInfo, userPsDeniedCache, userPsCache); } - // ─── PR Diff Path (skip if manually triggered) ─── + // ─── Diff Path (skip if manually triggered) ─── let diffFileCount = 0; if (!isManualDispatch) { diffFileCount = await this.processDiffPath(prInfo, failedPayloads, blockedFiles, userPsDeniedCache, userPsCache); } else { - this.logger.info('Skipping PR diff processing (manually triggered workflow)'); + this.logger.info('Skipping diff processing (manually triggered workflow)'); } // ─── Outputs & Summary ─── const totalProcessed = fullScanFileCount + diffFileCount; @@ -82,13 +82,13 @@ export class GitHubActionsRunner { // Diff path orchestration // ────────────────────────────────────────────────────────────────── async processDiffPath(prInfo, failedPayloads, blockedFiles, userPsDeniedCache, userPsCache) { - this.logger.info('Running PR diff flow'); + this.logger.info(`Running diff flow for ${github.context.eventName} event`); const allCommits = await this.fileProcessor.getCommits(); const commitShaSet = new Set(allCommits.map(c => c.sha)); const lastProcessedSha = await this.findLastProcessedCommitSha(commitShaSet); const commitGroups = await this.fileProcessor.getFilesGroupedByCommit(lastProcessedSha, allCommits); if (commitGroups.length === 0) { - this.logger.warn('No new commits to process for PR diff'); + this.logger.warn('No new commits to process'); return 0; } const psRequest = this.payloadBuilder.buildProtectionScopesRequest(); @@ -105,9 +105,9 @@ export class GitHubActionsRunner { for (const commitGroup of commitGroups) { diffFileCount += await this.processCommitGroup(commitGroup, ctx); } - // Post PR review comment if any files were blocked - if (blockedFiles.length > 0 && prInfo.url) { - await this.postBlockedFilesReview(prInfo, blockedFiles); + // Post blocked files notification (PR review comment or commit comment) + if (blockedFiles.length > 0) { + await this.postBlockedFilesNotification(prInfo, blockedFiles); } return diffFileCount; } @@ -322,23 +322,71 @@ export class GitHubActionsRunner { failedPayloads.push(`ca-commit-${commitGroup.sha}`); } } - async postBlockedFilesReview(prInfo, blockedFiles) { - this.logger.info(`${blockedFiles.length} file(s) blocked, posting PR review comment`); + /** + * Post a notification about blocked files — PR review comment for pull_request + * events, commit comment for push events. + */ + async postBlockedFilesNotification(_prInfo, blockedFiles) { + this.logger.info(`${blockedFiles.length} file(s) blocked, posting notification`); try { const githubToken = process.env['GITHUB_TOKEN'] || ''; - const prNumber = parseInt(prInfo.url?.split('/').pop() || '0', 10); - if (githubToken && prNumber > 0) { - const octokit = github.getOctokit(githubToken); - const prCommentService = new PrCommentService(octokit, this.config.repository.owner, this.config.repository.repo, prNumber); - await prCommentService.postBlockedFilesReview(blockedFiles); + if (!githubToken) { + this.logger.warn('Cannot post blocked files notification: missing GITHUB_TOKEN'); + return; + } + const octokit = github.getOctokit(githubToken); + if (github.context.eventName === 'pull_request') { + const prNumber = github.context.payload.pull_request?.number; + if (prNumber) { + const prCommentService = new PrCommentService(octokit, this.config.repository.owner, this.config.repository.repo, prNumber); + await prCommentService.postBlockedFilesReview(blockedFiles); + } + else { + this.logger.warn('Cannot post PR comment: PR number not available'); + } + } + else if (github.context.eventName === 'push') { + const commitSha = github.context.sha; + if (commitSha) { + const body = this.formatBlockedFilesComment(blockedFiles); + await octokit.rest.repos.createCommitComment({ + owner: this.config.repository.owner, + repo: this.config.repository.repo, + commit_sha: commitSha, + body, + }); + this.logger.info(`Commit comment posted on ${commitSha}`); + } + else { + this.logger.warn('Cannot post commit comment: commit SHA not available'); + } } else { - this.logger.warn('Cannot post PR comment: missing GITHUB_TOKEN or PR number'); + this.logger.info('Blocked files notification skipped (unsupported event type for comments)'); } } catch (e) { - this.logger.warn('Failed to post PR review comment (non-fatal).', { error: e }); + this.logger.warn('Failed to post blocked files notification (non-fatal).', { error: e }); + } + } + formatBlockedFilesComment(blockedFiles) { + const lines = [ + '## ⚠️ Purview Data Security — Blocked Content Detected', + '', + 'The following file(s) were flagged by data security policies and **blocked**:', + '', + '| File | Policy | Action |', + '|------|--------|--------|', + ]; + for (const bf of blockedFiles) { + for (const pa of bf.policyActions) { + const policy = pa.policyName || pa.policyId || 'Unknown'; + const action = pa.restrictionAction || pa.action; + lines.push(`| \`${bf.filePath}\` | ${policy} | ${action} |`); + } } + lines.push('', '> This comment was generated by the Purview GitHub Action.'); + return lines.join('\n'); } async createSummary(processed, failed, blocked = []) { const summary = core.summary @@ -398,8 +446,14 @@ export class GitHubActionsRunner { this.logger.info('Could not resolve workflow ID from current run — skipping commit dedup'); return null; } - // Scope to the PR head branch if available - const branch = github.context.payload.pull_request?.['head']?.ref; + // Scope to the current branch for more precise commit dedup + let branch; + if (github.context.eventName === 'pull_request') { + branch = github.context.payload.pull_request?.['head']?.ref; + } + else if (github.context.eventName === 'push') { + branch = github.context.ref?.replace('refs/heads/', ''); + } // Use listWorkflowRunsForRepo (not listWorkflowRuns) because in // cross-repo reusable-workflow setups the numeric workflow_id returned // by getWorkflowRun belongs to the *external* workflow-definition repo, diff --git a/dist/runner/GitHubActionsRunner.js.map b/dist/runner/GitHubActionsRunner.js.map index 45e4a93..da3c5f1 100644 --- a/dist/runner/GitHubActionsRunner.js.map +++ b/dist/runner/GitHubActionsRunner.js.map @@ -1 +1 @@ -{"version":3,"file":"gitHubActionsRunner.js","sourceRoot":"","sources":["../../src/runner/gitHubActionsRunner.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"gitHubActionsRunner.js","sourceRoot":"","sources":["../../src/runner/gitHubActionsRunner.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/flow.md b/flow.md index c7751ed..c41aed1 100644 --- a/flow.md +++ b/flow.md @@ -1,10 +1,10 @@ ```mermaid flowchart TD - trigger[GitHub Action Triggered] --> validate[Validate Inputs
validateInputs → config] + trigger[GitHub Action Triggered
push / pull_request / workflow_dispatch] --> validate[Validate Inputs
validateInputs → config] validate --> stateSetup[State Tracking Setup
resolve workflow repo, branch,
detect first run via state file
or workflow history] stateSetup --> authenticate[Authenticate → MSAL Token] - authenticate --> getPrInfo[Get PR Info] - getPrInfo --> isFirstRun{First Run or
Manual Dispatch?} + authenticate --> getEventCtx[Get Event Context Info
getPrInfo: push / PR / dispatch
author, branch, title, url] + getEventCtx --> isFirstRun{First Run or
Manual Dispatch?} %% ── Full Scan Path (first run or manual dispatch) ── isFirstRun -->|Yes| getAllFiles[Get ALL repo files
getAllRepoFiles
binary files auto-skipped] @@ -37,40 +37,31 @@ flowchart TD fullPCADone --> writeState writeState[Write state marker
best-effort] writeState --> isManualDispatch{Manual Dispatch?} - isManualDispatch -->|Yes| skipDiff[Log: skipping PR diff] + isManualDispatch -->|Yes| skipDiff[Log: skipping diff processing] isManualDispatch -->|No| getCommits noFilesLog --> isManualDispatch - %% ── PR Diff Path (skipped on manual dispatch) ── + %% ── Diff Path (push & pull_request — skipped on manual dispatch) ── isFirstRun -->|No| getCommits getCommits[Get commits
push payload / PR commits /
compare API] - getCommits --> findLastProcessed[Find last processed commit
paginate workflow run history
match head_sha to commit list] - findLastProcessed --> getGroupedFiles[Get files grouped by commit
getFilesGroupedByCommit
skip already-processed commits
resolve author emails → userIds
via users.json + Graph API cache] + getCommits --> findLastProcessed[Find last processed commit
paginate workflow run history
match head_sha to commit list
scoped by branch: PR head or push ref] + findLastProcessed --> getGroupedFiles[Get files grouped by commit
getFilesGroupedByCommit
skip already-processed commits
resolve author + committer emails → userIds
via users.json + Graph API cache] getGroupedFiles --> hasCommitGroups{New commits
to process?} hasCommitGroups -->|No| noChangedFilesLog[Log: no new commits to process] hasCommitGroups -->|Yes| commitLoop subgraph PER_COMMIT_USER [For each commit → for each userId] commitLoop[Group commit files by userId
authorId or config.userId] - commitLoop --> checkDeniedCache{userId in
userPsDeniedCache?} - checkDeniedCache -->|Yes| diffUserFallback[Fallback: contentActivities
uploadSignal for user's files] - checkDeniedCache -->|No| checkPsCache{userId in
userPsCache?} - checkPsCache -->|Yes| useCachedPs[Use cached PS response] - checkPsCache -->|No| diffUserPS[Call searchUserProtectionScope
POST /users/userId/.../protectionScopes/compute
cache on success] - useCachedPs --> diffUserPSOk - diffUserPS --> diffUserPSOk{User PS success?} - diffUserPSOk -->|No / 401| diffIs401{401?} - diffIs401 -->|Yes| diffCache401[Cache userId in
userPsDeniedCache] - diffCache401 --> diffUserFallback - diffIs401 -->|No| diffUserFallback - diffUserPSOk -->|Yes| diffUserHasScopes{User PS response has scopes?} - diffUserHasScopes -->|No / empty| diffNoScopesFallback[Route all files →
contentActivities
uploadSignal per file] - diffUserHasScopes -->|Yes| checkScopes[checkApplicableScopes
activity match + location match] + + commitLoop --> resolvePS[resolveUserPsWithCache
check denied cache → PS cache →
call searchUserProtectionScope
cache 401s · cache success] + resolvePS --> psResolved{PS resolved?} + psResolved -->|No / denied / failed| diffUserFallback[Fallback: contentActivities
uploadSignal for user's files] + psResolved -->|Yes| checkScopes[checkApplicableScopes
activity match + location match] checkScopes --> shouldProcess{shouldProcess?} - shouldProcess -->|No| diffNoScopesFallback + shouldProcess -->|No| diffNoScopesFallback[Route all files →
contentActivities
uploadSignal per file] shouldProcess -->|Yes| execMode{executionMode?} - execMode -->|evaluateInline| processContent[Per-file: processContent
POST /users/userId/.../processContent
If-None-Match: etag
Prefer: evaluateInline] + execMode -->|evaluateInline| processContent[Per-file: processContent
POST /users/userId/.../processContent
If-None-Match: etag
Prefer: evaluateInline
agents: committer AiAgentInfo] processContent --> pcOk{PC success?} pcOk -->|No| pcFallback[Fallback: contentActivities
uploadSignal for file] pcOk -->|Yes| scopeState{protectionScopeState?} @@ -83,13 +74,13 @@ flowchart TD isBlocked -->|Yes| addToBlocked[Add to blockedFiles] isBlocked -->|No| continueInline[Continue] - execMode -->|evaluateOffline| pcaBatch[PCA batch for user
processContentAsync
loop over chunked batches] + execMode -->|evaluateOffline| pcaBatch[PCA batch for user
processContentAsync
loop over chunked batches
agents: committer AiAgentInfo] pcaBatch --> pcaBatchOk{PCA success?} pcaBatchOk -->|No| pcaBatchFallback[Fallback: contentActivities
uploadSignal for user's files] pcaBatchOk -->|Yes| continueOffline[Continue] end - diffUserFallback --> nextUser[Next user / commit / done] + diffUserFallback --> nextUser[Next user / commit] diffNoScopesFallback --> nextUser pcFallback --> nextUser addToBlocked --> nextUser @@ -98,10 +89,18 @@ flowchart TD pcaBatchFallback --> nextUser continueOffline --> nextUser - nextUser --> hasBlockedFiles{blockedFiles
not empty?} - hasBlockedFiles -->|Yes| postPrComment[Post PR review comment
pulls.createReview
blocked file details table] + nextUser --> commitReq[Send commit-level request
commit metadata + file list
same routing: PS → inline/offline/fallback] + commitReq --> nextCommit[Next commit / done] + + nextCommit --> hasBlockedFiles{blockedFiles
not empty?} + hasBlockedFiles -->|Yes| eventType{Event type?} hasBlockedFiles -->|No| continueToOutputs[Continue] + eventType -->|pull_request| postPrComment[Post PR review comment
pulls.createReview
blocked file details table] + eventType -->|push| postCommitComment[Post commit comment
repos.createCommitComment
blocked file details table] + eventType -->|other| skipNotification[Skip notification] postPrComment --> continueToOutputs + postCommitComment --> continueToOutputs + skipNotification --> continueToOutputs noChangedFilesLog --> setOutputs skipDiff --> setOutputs @@ -123,17 +122,21 @@ flowchart TD style pcaBatchFallback fill:#42a5f5,color:#fff style addToBlocked fill:#ef5350,color:#fff style postPrComment fill:#ef5350,color:#fff + style postCommitComment fill:#ef5350,color:#fff style actionFailed fill:#ef5350,color:#fff style fullCache401 fill:#ff9800,color:#000 style diffCache401 fill:#ff9800,color:#000 + style resolvePS fill:#ce93d8,color:#000 style findLastProcessed fill:#ce93d8,color:#000 style getGroupedFiles fill:#ce93d8,color:#000 + style commitReq fill:#80cbc4,color:#000 ``` ### Legend -- 🟣 **Purple** — Input validation, commit dedup & user resolution (Graph API / users.json) -- 🟡 **Yellow** — processContent (PC) inline: synchronous, per-user, can detect blocks -- 🟢 **Green** — processContentAsync (PCA) batch: fire-and-forget, chunked +- 🟣 **Purple** — Shared helpers: `resolveUserPsWithCache`, commit dedup & user resolution (Graph API / users.json) +- 🟡 **Yellow** — processContent (PC) inline: synchronous, per-user, can detect blocks; includes committer AiAgentInfo +- 🟢 **Green** — processContentAsync (PCA) batch: fire-and-forget, chunked; includes committer AiAgentInfo - 🔵 **Blue** — contentActivities (uploadSignal): fire-and-forget, fallback on failures -- 🔴 **Red** — Block detection, PR review comment & action failure -- 🟠 **Orange** — 401 denial cache (skip user on subsequent calls) \ No newline at end of file +- 🔴 **Red** — Block detection, blocked files notification (PR review comment or commit comment) & action failure +- 🟠 **Orange** — 401 denial cache (skip user on subsequent calls) +- 🩵 **Teal** — Commit-level request (commit metadata + changed file list, same PS routing as files) \ No newline at end of file diff --git a/sample/.github/workflows/purview-scan.yml b/sample/.github/workflows/purview-scan.yml index 2d4caf7..dd99022 100644 --- a/sample/.github/workflows/purview-scan.yml +++ b/sample/.github/workflows/purview-scan.yml @@ -1,8 +1,10 @@ name: Purview Scan on: + push: + branches: [$default-branch] pull_request: - branches: [main] + branches: [$default-branch] workflow_dispatch: permissions: diff --git a/src/api/purviewClient.ts b/src/api/purviewClient.ts index a3f688d..9810c1e 100644 --- a/src/api/purviewClient.ts +++ b/src/api/purviewClient.ts @@ -196,19 +196,27 @@ export class PurviewClient { } private async sendRequest(endpoint: string, payload: string | null = null, method: string = "POST", additionalHeaders: Record = {}, operationName: string = 'Unknown'): Promise { + const requestId = this.generateRequestId(); const headers: Record = { 'Authorization': `Bearer ${this.authToken}`, 'Content-Type': 'application/json', - 'X-Request-Id': this.generateRequestId(), + 'X-Request-Id': requestId, 'User-Agent': 'PurviewGitHubAction/1.0', ...additionalHeaders }; this.logger.startGroup('Purview API Request'); - this.logger.debug('Sending request', { - endpoint: this.sanitizeEndpoint(endpoint), - payloadSize: JSON.stringify(payload).length + this.logger.debug(`[${operationName}] Request`, { + endpoint: this.sanitizeEndpoint(endpoint), + method, + requestId, + additionalHeaders: Object.keys(additionalHeaders), }); + if (payload) { + this.logger.debug(`[${operationName}] Request payload`, { + payload: JSON.parse(JSON.stringify(JSON.parse(payload), this.jsonReplacer)), + }); + } try { const response = await fetch(endpoint, { @@ -218,14 +226,19 @@ export class PurviewClient { }); const responseText = await response.text(); - const requestId: string | null = response.headers.get('client-request-id'); - this.logger.info(`[${operationName}] Received response with status: ${response.status}, correlation ID: ${requestId}`); + const correlationId: string | null = response.headers.get('client-request-id'); + this.logger.info(`[${operationName}] Received response with status: ${response.status}, correlation ID: ${correlationId}`); if (!response.ok) { + this.logger.debug(`[${operationName}] Error response body`, { + status: response.status, + correlationId, + body: this.sanitizeErrorResponse(responseText), + }); this.logger.error('API request failed', { status: response.status, statusText: response.statusText, - correlationId: requestId, + correlationId, response: this.sanitizeErrorResponse(responseText) }); @@ -249,6 +262,12 @@ export class PurviewClient { try { const data = responseText ? JSON.parse(responseText) : {}; const etag = response.headers.get('etag')?.replace(/"/g, '') || undefined; + this.logger.debug(`[${operationName}] Response payload`, { + statusCode: response.status, + etag, + correlationId, + data: JSON.parse(JSON.stringify(data, this.jsonReplacer)), + }); this.logger.endGroup(); return { success: true, diff --git a/src/runner/gitHubActionsRunner.ts b/src/runner/gitHubActionsRunner.ts index 7b74fc4..1f81bc0 100644 --- a/src/runner/gitHubActionsRunner.ts +++ b/src/runner/gitHubActionsRunner.ts @@ -55,7 +55,7 @@ export class GitHubActionsRunner { const token = await this.authService.getToken(); this.purviewClient.setAuthToken(token.accessToken); - // Step 3: Get PR info + // Step 3: Get event context info this.logger.info('Processing repository files'); const prInfo = await this.fileProcessor.getPrInfo(); @@ -76,12 +76,12 @@ export class GitHubActionsRunner { fullScanFileCount = await this.fullScanService.performFullScan(stateInfo, failedPayloads, prInfo, userPsDeniedCache, userPsCache); } - // ─── PR Diff Path (skip if manually triggered) ─── + // ─── Diff Path (skip if manually triggered) ─── let diffFileCount = 0; if (!isManualDispatch) { diffFileCount = await this.processDiffPath(prInfo, failedPayloads, blockedFiles, userPsDeniedCache, userPsCache); } else { - this.logger.info('Skipping PR diff processing (manually triggered workflow)'); + this.logger.info('Skipping diff processing (manually triggered workflow)'); } // ─── Outputs & Summary ─── @@ -116,7 +116,7 @@ export class GitHubActionsRunner { userPsDeniedCache: Set, userPsCache: Map> ): Promise { - this.logger.info('Running PR diff flow'); + this.logger.info(`Running diff flow for ${github.context.eventName} event`); const allCommits = await this.fileProcessor.getCommits(); const commitShaSet = new Set(allCommits.map(c => c.sha)); @@ -124,7 +124,7 @@ export class GitHubActionsRunner { const commitGroups = await this.fileProcessor.getFilesGroupedByCommit(lastProcessedSha, allCommits); if (commitGroups.length === 0) { - this.logger.warn('No new commits to process for PR diff'); + this.logger.warn('No new commits to process'); return 0; } @@ -145,9 +145,9 @@ export class GitHubActionsRunner { diffFileCount += await this.processCommitGroup(commitGroup, ctx); } - // Post PR review comment if any files were blocked - if (blockedFiles.length > 0 && prInfo.url) { - await this.postBlockedFilesReview(prInfo, blockedFiles); + // Post blocked files notification (PR review comment or commit comment) + if (blockedFiles.length > 0) { + await this.postBlockedFilesNotification(prInfo, blockedFiles); } return diffFileCount; @@ -427,29 +427,78 @@ export class GitHubActionsRunner { } } - private async postBlockedFilesReview(prInfo: PrInfo, blockedFiles: BlockedFileResult[]): Promise { - this.logger.info(`${blockedFiles.length} file(s) blocked, posting PR review comment`); + /** + * Post a notification about blocked files — PR review comment for pull_request + * events, commit comment for push events. + */ + private async postBlockedFilesNotification(_prInfo: PrInfo, blockedFiles: BlockedFileResult[]): Promise { + this.logger.info(`${blockedFiles.length} file(s) blocked, posting notification`); try { const githubToken = process.env['GITHUB_TOKEN'] || ''; - const prNumber = parseInt(prInfo.url?.split('/').pop() || '0', 10); - - if (githubToken && prNumber > 0) { - const octokit = github.getOctokit(githubToken); - const prCommentService = new PrCommentService( - octokit, - this.config.repository.owner, - this.config.repository.repo, - prNumber - ); - await prCommentService.postBlockedFilesReview(blockedFiles); + if (!githubToken) { + this.logger.warn('Cannot post blocked files notification: missing GITHUB_TOKEN'); + return; + } + + const octokit = github.getOctokit(githubToken); + + if (github.context.eventName === 'pull_request') { + const prNumber = github.context.payload.pull_request?.number; + if (prNumber) { + const prCommentService = new PrCommentService( + octokit, + this.config.repository.owner, + this.config.repository.repo, + prNumber + ); + await prCommentService.postBlockedFilesReview(blockedFiles); + } else { + this.logger.warn('Cannot post PR comment: PR number not available'); + } + } else if (github.context.eventName === 'push') { + const commitSha = github.context.sha; + if (commitSha) { + const body = this.formatBlockedFilesComment(blockedFiles); + await octokit.rest.repos.createCommitComment({ + owner: this.config.repository.owner, + repo: this.config.repository.repo, + commit_sha: commitSha, + body, + }); + this.logger.info(`Commit comment posted on ${commitSha}`); + } else { + this.logger.warn('Cannot post commit comment: commit SHA not available'); + } } else { - this.logger.warn('Cannot post PR comment: missing GITHUB_TOKEN or PR number'); + this.logger.info('Blocked files notification skipped (unsupported event type for comments)'); } } catch (e) { - this.logger.warn('Failed to post PR review comment (non-fatal).', { error: e }); + this.logger.warn('Failed to post blocked files notification (non-fatal).', { error: e }); } } + private formatBlockedFilesComment(blockedFiles: BlockedFileResult[]): string { + const lines: string[] = [ + '## ⚠️ Purview Data Security — Blocked Content Detected', + '', + 'The following file(s) were flagged by data security policies and **blocked**:', + '', + '| File | Policy | Action |', + '|------|--------|--------|', + ]; + + for (const bf of blockedFiles) { + for (const pa of bf.policyActions) { + const policy = pa.policyName || pa.policyId || 'Unknown'; + const action = pa.restrictionAction || pa.action; + lines.push(`| \`${bf.filePath}\` | ${policy} | ${action} |`); + } + } + + lines.push('', '> This comment was generated by the Purview GitHub Action.'); + return lines.join('\n'); + } + private async createSummary(processed: number, failed: string[], blocked: BlockedFileResult[] = []): Promise { const summary = core.summary .addHeading('Purview GitHub Action Results') @@ -518,8 +567,13 @@ export class GitHubActionsRunner { return null; } - // Scope to the PR head branch if available - const branch = github.context.payload.pull_request?.['head']?.ref as string | undefined; + // Scope to the current branch for more precise commit dedup + let branch: string | undefined; + if (github.context.eventName === 'pull_request') { + branch = github.context.payload.pull_request?.['head']?.ref as string | undefined; + } else if (github.context.eventName === 'push') { + branch = github.context.ref?.replace('refs/heads/', ''); + } // Use listWorkflowRunsForRepo (not listWorkflowRuns) because in // cross-repo reusable-workflow setups the numeric workflow_id returned From 69fea85de99aaef261bf41b118aa5085dc53286b Mon Sep 17 00:00:00 2001 From: Rishabh Chawla Date: Wed, 1 Apr 2026 15:54:04 -0700 Subject: [PATCH 05/20] Fix users error --- dist/index.js | 22 ++++++-- dist/utils/Logger.d.ts | 1 + dist/utils/Logger.d.ts.map | 2 +- dist/utils/Logger.js | 8 ++- dist/utils/Logger.js.map | 2 +- dist/validation/InputValidator.d.ts.map | 2 +- dist/validation/InputValidator.js | 14 ++++-- dist/validation/InputValidator.js.map | 2 +- src/utils/logger.ts | 9 +++- src/validation/inputValidator.ts | 18 +++++-- tests/validation/inputValidator.test.ts | 67 +++++++++++++++++++++++++ 11 files changed, 130 insertions(+), 17 deletions(-) diff --git a/dist/index.js b/dist/index.js index b0094d1..581e9ae 100644 --- a/dist/index.js +++ b/dist/index.js @@ -58328,12 +58328,18 @@ class logger_Logger { try { // Remove sensitive information const sanitized = this.removeSensitiveData(data); - return JSON.stringify(sanitized, null, 2); + return JSON.stringify(sanitized, this.jsonReplacer, 2); } catch (error) { return '[Unable to serialize data]'; } } + jsonReplacer(_key, value) { + if (value instanceof Error) { + return { message: value.message, name: value.name, ...(value.stack ? { stack: value.stack } : {}) }; + } + return value; + } removeSensitiveData(obj) { if (typeof obj !== 'object' || obj === null) { return obj; @@ -64564,7 +64570,9 @@ async function validateInputs() { const apiTokenForUsersJson = stateRepoToken || process.env['GITHUB_TOKEN'] || ''; if (isExternalWorkflowRepo && apiTokenForUsersJson) { // Fetch users.json from the workflow-definition repo via the GitHub API - logger.info(`Fetching users.json from workflow-definition repo ${workflowRepo.owner}/${workflowRepo.repo}`); + const tokenSource = stateRepoToken ? 'state-repo-token' : 'GITHUB_TOKEN'; + const refLabel = workflowRepo.ref || '(default branch)'; + logger.info(`Fetching users.json from workflow-definition repo ${workflowRepo.owner}/${workflowRepo.repo} (ref: ${refLabel}, token: ${tokenSource})`); const octokit = getOctokit(apiTokenForUsersJson); try { const { data } = await octokit.rest.repos.getContent({ @@ -64581,9 +64589,15 @@ async function validateInputs() { logger.info(`Loaded users.json from ${workflowRepo.owner}/${workflowRepo.repo}/${usersJsonPath}`); } catch (e) { + if (e?.status === 401 || e?.status === 403) { + throw new Error(`Authentication failed (HTTP ${e.status}) when fetching '${usersJsonPath}' from ${workflowRepo.owner}/${workflowRepo.repo}. ` + + `The ${tokenSource} token does not have read access to this repository. ` + + 'Ensure your state-repo-token (PAT or GitHub App token) has "contents: read" permission on the workflow-definition repo.'); + } if (e?.status === 404) { - throw new Error(`users.json not found at '${usersJsonPath}' in ${workflowRepo.owner}/${workflowRepo.repo}. ` + - 'Create a users.json in your workflow-definition repo with email-to-userId mappings and a defaultUserId.'); + throw new Error(`users.json not found at '${usersJsonPath}' in ${workflowRepo.owner}/${workflowRepo.repo} (ref: ${refLabel}). ` + + `This can also happen when the ${tokenSource} token lacks read access to a private repo (GitHub returns 404 instead of 403). ` + + 'Verify that: (1) the file exists at the expected path and ref, and (2) your state-repo-token has "contents: read" permission on the workflow-definition repo.'); } throw e; } diff --git a/dist/utils/Logger.d.ts b/dist/utils/Logger.d.ts index 8b99e55..b29c947 100644 --- a/dist/utils/Logger.d.ts +++ b/dist/utils/Logger.d.ts @@ -17,6 +17,7 @@ export declare class Logger { endGroup(): void; private formatMessage; private sanitizeData; + private jsonReplacer; private removeSensitiveData; } //# sourceMappingURL=logger.d.ts.map \ No newline at end of file diff --git a/dist/utils/Logger.d.ts.map b/dist/utils/Logger.d.ts.map index 89d4239..db6afc5 100644 --- a/dist/utils/Logger.d.ts.map +++ b/dist/utils/Logger.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../src/utils/logger.ts"],"names":[],"mappings":"AAEA,oBAAY,QAAQ;IAClB,KAAK,IAAI;IACT,IAAI,IAAI;IACR,OAAO,IAAI;IACX,KAAK,IAAI;CACV;AAED,qBAAa,MAAM;IACjB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;IACjC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAU;gBAEtB,OAAO,EAAE,MAAM;IAK3B,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,GAAG,GAAG,IAAI;IAUxC,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,GAAG,GAAG,IAAI;IAKvC,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,GAAG,GAAG,IAAI;IAKvC,OAAO,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,GAAG,GAAG,IAAI;IAI1C,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,GAAG,GAAG,IAAI;IAKxC,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAI9B,QAAQ,IAAI,IAAI;IAIhB,OAAO,CAAC,aAAa;IAQrB,OAAO,CAAC,YAAY;IAUpB,OAAO,CAAC,mBAAmB;CAwB5B"} \ No newline at end of file +{"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../src/utils/logger.ts"],"names":[],"mappings":"AAEA,oBAAY,QAAQ;IAClB,KAAK,IAAI;IACT,IAAI,IAAI;IACR,OAAO,IAAI;IACX,KAAK,IAAI;CACV;AAED,qBAAa,MAAM;IACjB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;IACjC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAU;gBAEtB,OAAO,EAAE,MAAM;IAK3B,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,GAAG,GAAG,IAAI;IAUxC,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,GAAG,GAAG,IAAI;IAKvC,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,GAAG,GAAG,IAAI;IAKvC,OAAO,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,GAAG,GAAG,IAAI;IAI1C,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,GAAG,GAAG,IAAI;IAKxC,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAI9B,QAAQ,IAAI,IAAI;IAIhB,OAAO,CAAC,aAAa;IAQrB,OAAO,CAAC,YAAY;IAUpB,OAAO,CAAC,YAAY;IAOpB,OAAO,CAAC,mBAAmB;CAwB5B"} \ No newline at end of file diff --git a/dist/utils/Logger.js b/dist/utils/Logger.js index c999e87..57f2b5b 100644 --- a/dist/utils/Logger.js +++ b/dist/utils/Logger.js @@ -53,12 +53,18 @@ export class Logger { try { // Remove sensitive information const sanitized = this.removeSensitiveData(data); - return JSON.stringify(sanitized, null, 2); + return JSON.stringify(sanitized, this.jsonReplacer, 2); } catch (error) { return '[Unable to serialize data]'; } } + jsonReplacer(_key, value) { + if (value instanceof Error) { + return { message: value.message, name: value.name, ...(value.stack ? { stack: value.stack } : {}) }; + } + return value; + } removeSensitiveData(obj) { if (typeof obj !== 'object' || obj === null) { return obj; diff --git a/dist/utils/Logger.js.map b/dist/utils/Logger.js.map index 67c22f0..796a31b 100644 --- a/dist/utils/Logger.js.map +++ b/dist/utils/Logger.js.map @@ -1 +1 @@ -{"version":3,"file":"logger.js","sourceRoot":"","sources":["../../src/utils/logger.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"logger.js","sourceRoot":"","sources":["../../src/utils/logger.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/dist/validation/InputValidator.d.ts.map b/dist/validation/InputValidator.d.ts.map index ff99bf5..96ab55b 100644 --- a/dist/validation/InputValidator.d.ts.map +++ b/dist/validation/InputValidator.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"inputValidator.d.ts","sourceRoot":"","sources":["../../src/validation/inputValidator.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,YAAY,EAAe,MAAM,iBAAiB,CAAC;AAI5D,wBAAsB,cAAc,IAAI,OAAO,CAAC,YAAY,CAAC,CAkM5D"} \ No newline at end of file +{"version":3,"file":"inputValidator.d.ts","sourceRoot":"","sources":["../../src/validation/inputValidator.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,YAAY,EAAe,MAAM,iBAAiB,CAAC;AAI5D,wBAAsB,cAAc,IAAI,OAAO,CAAC,YAAY,CAAC,CA4M5D"} \ No newline at end of file diff --git a/dist/validation/InputValidator.js b/dist/validation/InputValidator.js index 834ad18..522601b 100644 --- a/dist/validation/InputValidator.js +++ b/dist/validation/InputValidator.js @@ -44,7 +44,9 @@ export async function validateInputs() { const apiTokenForUsersJson = stateRepoToken || process.env['GITHUB_TOKEN'] || ''; if (isExternalWorkflowRepo && apiTokenForUsersJson) { // Fetch users.json from the workflow-definition repo via the GitHub API - logger.info(`Fetching users.json from workflow-definition repo ${workflowRepo.owner}/${workflowRepo.repo}`); + const tokenSource = stateRepoToken ? 'state-repo-token' : 'GITHUB_TOKEN'; + const refLabel = workflowRepo.ref || '(default branch)'; + logger.info(`Fetching users.json from workflow-definition repo ${workflowRepo.owner}/${workflowRepo.repo} (ref: ${refLabel}, token: ${tokenSource})`); const octokit = github.getOctokit(apiTokenForUsersJson); try { const { data } = await octokit.rest.repos.getContent({ @@ -61,9 +63,15 @@ export async function validateInputs() { logger.info(`Loaded users.json from ${workflowRepo.owner}/${workflowRepo.repo}/${usersJsonPath}`); } catch (e) { + if (e?.status === 401 || e?.status === 403) { + throw new Error(`Authentication failed (HTTP ${e.status}) when fetching '${usersJsonPath}' from ${workflowRepo.owner}/${workflowRepo.repo}. ` + + `The ${tokenSource} token does not have read access to this repository. ` + + 'Ensure your state-repo-token (PAT or GitHub App token) has "contents: read" permission on the workflow-definition repo.'); + } if (e?.status === 404) { - throw new Error(`users.json not found at '${usersJsonPath}' in ${workflowRepo.owner}/${workflowRepo.repo}. ` + - 'Create a users.json in your workflow-definition repo with email-to-userId mappings and a defaultUserId.'); + throw new Error(`users.json not found at '${usersJsonPath}' in ${workflowRepo.owner}/${workflowRepo.repo} (ref: ${refLabel}). ` + + `This can also happen when the ${tokenSource} token lacks read access to a private repo (GitHub returns 404 instead of 403). ` + + 'Verify that: (1) the file exists at the expected path and ref, and (2) your state-repo-token has "contents: read" permission on the workflow-definition repo.'); } throw e; } diff --git a/dist/validation/InputValidator.js.map b/dist/validation/InputValidator.js.map index 78ce064..9a1b47d 100644 --- a/dist/validation/InputValidator.js.map +++ b/dist/validation/InputValidator.js.map @@ -1 +1 @@ -{"version":3,"file":"inputValidator.js","sourceRoot":"","sources":["../../src/validation/inputValidator.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"inputValidator.js","sourceRoot":"","sources":["../../src/validation/inputValidator.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/src/utils/logger.ts b/src/utils/logger.ts index 2f30736..61f9388 100644 --- a/src/utils/logger.ts +++ b/src/utils/logger.ts @@ -65,11 +65,18 @@ export class Logger { try { // Remove sensitive information const sanitized = this.removeSensitiveData(data); - return JSON.stringify(sanitized, null, 2); + return JSON.stringify(sanitized, this.jsonReplacer, 2); } catch (error) { return '[Unable to serialize data]'; } } + + private jsonReplacer(_key: string, value: any): any { + if (value instanceof Error) { + return { message: value.message, name: value.name, ...(value.stack ? { stack: value.stack } : {}) }; + } + return value; + } private removeSensitiveData(obj: any): any { if (typeof obj !== 'object' || obj === null) { diff --git a/src/validation/inputValidator.ts b/src/validation/inputValidator.ts index 7febe77..a3a4359 100644 --- a/src/validation/inputValidator.ts +++ b/src/validation/inputValidator.ts @@ -55,8 +55,10 @@ export async function validateInputs(): Promise { if (isExternalWorkflowRepo && apiTokenForUsersJson) { // Fetch users.json from the workflow-definition repo via the GitHub API + const tokenSource = stateRepoToken ? 'state-repo-token' : 'GITHUB_TOKEN'; + const refLabel = workflowRepo!.ref || '(default branch)'; logger.info( - `Fetching users.json from workflow-definition repo ${workflowRepo!.owner}/${workflowRepo!.repo}` + `Fetching users.json from workflow-definition repo ${workflowRepo!.owner}/${workflowRepo!.repo} (ref: ${refLabel}, token: ${tokenSource})` ); const octokit = github.getOctokit(apiTokenForUsersJson); try { @@ -79,15 +81,23 @@ export async function validateInputs(): Promise { `Loaded users.json from ${workflowRepo!.owner}/${workflowRepo!.repo}/${usersJsonPath}` ); } catch (e: any) { + if (e?.status === 401 || e?.status === 403) { + throw new Error( + `Authentication failed (HTTP ${e.status}) when fetching '${usersJsonPath}' from ${workflowRepo!.owner}/${workflowRepo!.repo}. ` + + `The ${tokenSource} token does not have read access to this repository. ` + + 'Ensure your state-repo-token (PAT or GitHub App token) has "contents: read" permission on the workflow-definition repo.' + ); + } if (e?.status === 404) { throw new Error( - `users.json not found at '${usersJsonPath}' in ${workflowRepo!.owner}/${workflowRepo!.repo}. ` + - 'Create a users.json in your workflow-definition repo with email-to-userId mappings and a defaultUserId.' + `users.json not found at '${usersJsonPath}' in ${workflowRepo!.owner}/${workflowRepo!.repo} (ref: ${refLabel}). ` + + `This can also happen when the ${tokenSource} token lacks read access to a private repo (GitHub returns 404 instead of 403). ` + + 'Verify that: (1) the file exists at the expected path and ref, and (2) your state-repo-token has "contents: read" permission on the workflow-definition repo.' ); } throw e; } - } else { + }else { // Local filesystem fallback (same-repo workflow or no token) const fs = await import('fs'); const path = await import('path'); diff --git a/tests/validation/inputValidator.test.ts b/tests/validation/inputValidator.test.ts index ff846f7..b8785be 100644 --- a/tests/validation/inputValidator.test.ts +++ b/tests/validation/inputValidator.test.ts @@ -166,4 +166,71 @@ describe('inputValidator', () => { }); await expect(validateInputs()).rejects.toThrow(/state-repo-branch.*state-repo-token/); }); + + describe('cross-repo users.json fetch', () => { + const github = require('@actions/github'); + + beforeEach(() => { + process.env['GITHUB_WORKFLOW_REF'] = + 'external-owner/ExternalWorkflow/.github/workflows/ci.yml@refs/heads/main'; + }); + + function setupCrossRepoMocks(overrides: Record = {}) { + setupInputMocks({ + 'state-repo-token': 'ghp_faketoken', + 'users-json-path': 'users.json', + ...overrides, + }); + } + + it('throws helpful message on 404 mentioning token and ref', async () => { + const err: any = new Error('Not Found'); + err.status = 404; + const mockGetContent = jest.fn().mockRejectedValue(err); + github.getOctokit.mockReturnValue({ rest: { repos: { getContent: mockGetContent } } }); + setupCrossRepoMocks(); + + await expect(validateInputs()).rejects.toThrow(/token lacks read access.*private repo/); + }); + + it('throws auth error on 403', async () => { + const err: any = new Error('Forbidden'); + err.status = 403; + const mockGetContent = jest.fn().mockRejectedValue(err); + github.getOctokit.mockReturnValue({ rest: { repos: { getContent: mockGetContent } } }); + setupCrossRepoMocks(); + + await expect(validateInputs()).rejects.toThrow(/Authentication failed.*403/); + }); + + it('throws auth error on 401', async () => { + const err: any = new Error('Unauthorized'); + err.status = 401; + const mockGetContent = jest.fn().mockRejectedValue(err); + github.getOctokit.mockReturnValue({ rest: { repos: { getContent: mockGetContent } } }); + setupCrossRepoMocks(); + + await expect(validateInputs()).rejects.toThrow(/Authentication failed.*401/); + }); + + it('succeeds when API returns valid content', async () => { + const encoded = Buffer.from(JSON.stringify(validUsersJson)).toString('base64'); + const mockGetContent = jest.fn().mockResolvedValue({ + data: { content: encoded, type: 'file' }, + }); + github.getOctokit.mockReturnValue({ rest: { repos: { getContent: mockGetContent } } }); + setupCrossRepoMocks(); + + const config = await validateInputs(); + expect(config.userId).toBe('default-user-123'); + expect(mockGetContent).toHaveBeenCalledWith( + expect.objectContaining({ + owner: 'external-owner', + repo: 'ExternalWorkflow', + path: 'users.json', + ref: 'refs/heads/main', + }) + ); + }); + }); }); From 949b3511e4b62cb72cae04714ed83f4c1eacd81d Mon Sep 17 00:00:00 2001 From: Rishabh Chawla Date: Wed, 1 Apr 2026 16:22:14 -0700 Subject: [PATCH 06/20] Fix token errors --- dist/api/PurviewClient.d.ts | 9 ++++++ dist/api/PurviewClient.d.ts.map | 2 +- dist/api/PurviewClient.js | 30 +++++++++++++++++- dist/api/PurviewClient.js.map | 2 +- dist/index.js | 39 +++++++++++++++++++++++- dist/payload/PayloadBuilder.d.ts.map | 2 +- dist/payload/PayloadBuilder.js | 4 +++ dist/payload/PayloadBuilder.js.map | 2 +- dist/runner/GitHubActionsRunner.d.ts.map | 2 +- dist/runner/GitHubActionsRunner.js | 5 +++ dist/runner/GitHubActionsRunner.js.map | 2 +- src/api/purviewClient.ts | 33 +++++++++++++++++++- src/payload/payloadBuilder.ts | 4 +++ src/runner/gitHubActionsRunner.ts | 5 +++ 14 files changed, 132 insertions(+), 9 deletions(-) diff --git a/dist/api/PurviewClient.d.ts b/dist/api/PurviewClient.d.ts index 90571c8..0231e54 100644 --- a/dist/api/PurviewClient.d.ts +++ b/dist/api/PurviewClient.d.ts @@ -4,9 +4,17 @@ export declare class PurviewClient { private readonly logger; private readonly retryHandler; private authToken; + private tokenProvider; private readonly baseUrl; constructor(config: ActionConfig); setAuthToken(token: string): void; + /** + * Set a callback that returns a fresh access token. When set, the provider + * is called before every request (it should cache internally) and again + * after a 401 to attempt a single token-refresh retry. + */ + setTokenProvider(provider: () => Promise): void; + private resolveAuthToken; processContentAsync(payload: ProcessContentBatchRequest): Promise; processContent(userId: string, request: ProcessContentRequest, scopeIdentifier: string, inline?: boolean): Promise>; uploadSignal(payload: UploadSignalRequest): Promise; @@ -14,6 +22,7 @@ export declare class PurviewClient { searchUserProtectionScope(userId: string, payload: ProtectionScopesRequest): Promise>; getUserInfo(userEmails: string[]): Promise>; private sendRequest; + private sendRequestInner; private jsonReplacer; private generateRequestId; private sanitizeEndpoint; diff --git a/dist/api/PurviewClient.d.ts.map b/dist/api/PurviewClient.d.ts.map index 6a2c0c7..7aa9060 100644 --- a/dist/api/PurviewClient.d.ts.map +++ b/dist/api/PurviewClient.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"purviewClient.d.ts","sourceRoot":"","sources":["../../src/api/purviewClient.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,0BAA0B,EAAE,qBAAqB,EAAE,sBAAsB,EAAE,mBAAmB,EAAE,uBAAuB,EAAE,wBAAwB,EAAE,sBAAsB,EAAE,MAAM,iBAAiB,CAAC;AAIvO,qBAAa,aAAa;IAMZ,OAAO,CAAC,QAAQ,CAAC,MAAM;IALnC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAChC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAe;IAC5C,OAAO,CAAC,SAAS,CAAuB;IACxC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;gBAEJ,MAAM,EAAE,YAAY;IAMjD,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAI3B,mBAAmB,CAAC,OAAO,EAAE,0BAA0B,GAAG,OAAO,CAAC,WAAW,CAAC;IA2B9E,cAAc,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,qBAAqB,EAAE,eAAe,EAAE,MAAM,EAAE,MAAM,GAAE,OAAc,GAAG,OAAO,CAAC,WAAW,CAAC,sBAAsB,CAAC,CAAC;IAmC7J,YAAY,CAAC,OAAO,EAAE,mBAAmB,GAAG,OAAO,CAAC,WAAW,CAAC;IA0BhE,2BAA2B,CAAC,OAAO,EAAE,uBAAuB,GAAG,OAAO,CAAC,WAAW,CAAC,wBAAwB,CAAC,CAAC;IA8B7G,yBAAyB,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,uBAAuB,GAAG,OAAO,CAAC,WAAW,CAAC,wBAAwB,CAAC,CAAC;IA8B3H,WAAW,CAAC,UAAU,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,WAAW,CAAC,sBAAsB,CAAC,CAAC;YA6BvE,WAAW;IA+FzB,OAAO,CAAC,YAAY;IAQpB,OAAO,CAAC,iBAAiB;IAIzB,OAAO,CAAC,gBAAgB;IAIxB,OAAO,CAAC,qBAAqB;CAS9B"} \ No newline at end of file +{"version":3,"file":"purviewClient.d.ts","sourceRoot":"","sources":["../../src/api/purviewClient.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,0BAA0B,EAAE,qBAAqB,EAAE,sBAAsB,EAAE,mBAAmB,EAAE,uBAAuB,EAAE,wBAAwB,EAAE,sBAAsB,EAAE,MAAM,iBAAiB,CAAC;AAIvO,qBAAa,aAAa;IAOZ,OAAO,CAAC,QAAQ,CAAC,MAAM;IANnC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAChC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAe;IAC5C,OAAO,CAAC,SAAS,CAAuB;IACxC,OAAO,CAAC,aAAa,CAAwC;IAC7D,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;gBAEJ,MAAM,EAAE,YAAY;IAMjD,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAIjC;;;;OAIG;IACH,gBAAgB,CAAC,QAAQ,EAAE,MAAM,OAAO,CAAC,MAAM,CAAC,GAAG,IAAI;YAIzC,gBAAgB;IAUxB,mBAAmB,CAAC,OAAO,EAAE,0BAA0B,GAAG,OAAO,CAAC,WAAW,CAAC;IA2B9E,cAAc,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,qBAAqB,EAAE,eAAe,EAAE,MAAM,EAAE,MAAM,GAAE,OAAc,GAAG,OAAO,CAAC,WAAW,CAAC,sBAAsB,CAAC,CAAC;IAmC7J,YAAY,CAAC,OAAO,EAAE,mBAAmB,GAAG,OAAO,CAAC,WAAW,CAAC;IA0BhE,2BAA2B,CAAC,OAAO,EAAE,uBAAuB,GAAG,OAAO,CAAC,WAAW,CAAC,wBAAwB,CAAC,CAAC;IA8B7G,yBAAyB,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,uBAAuB,GAAG,OAAO,CAAC,WAAW,CAAC,wBAAwB,CAAC,CAAC;IA8B3H,WAAW,CAAC,UAAU,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,WAAW,CAAC,sBAAsB,CAAC,CAAC;YA6BvE,WAAW;YAIX,gBAAgB;IAsG9B,OAAO,CAAC,YAAY;IAQpB,OAAO,CAAC,iBAAiB;IAIzB,OAAO,CAAC,gBAAgB;IAIxB,OAAO,CAAC,qBAAqB;CAS9B"} \ No newline at end of file diff --git a/dist/api/PurviewClient.js b/dist/api/PurviewClient.js index 07ce068..3b483a5 100644 --- a/dist/api/PurviewClient.js +++ b/dist/api/PurviewClient.js @@ -5,6 +5,7 @@ export class PurviewClient { logger; retryHandler; authToken = null; + tokenProvider = null; baseUrl; constructor(config) { this.config = config; @@ -15,6 +16,23 @@ export class PurviewClient { setAuthToken(token) { this.authToken = token; } + /** + * Set a callback that returns a fresh access token. When set, the provider + * is called before every request (it should cache internally) and again + * after a 401 to attempt a single token-refresh retry. + */ + setTokenProvider(provider) { + this.tokenProvider = provider; + } + async resolveAuthToken() { + if (this.tokenProvider) { + return await this.tokenProvider(); + } + if (this.authToken) { + return this.authToken; + } + throw new Error('Authentication token not set'); + } async processContentAsync(payload) { if (!this.authToken) { throw new Error('Authentication token not set'); @@ -146,9 +164,13 @@ export class PurviewClient { } } async sendRequest(endpoint, payload = null, method = "POST", additionalHeaders = {}, operationName = 'Unknown') { + return this.sendRequestInner(endpoint, payload, method, additionalHeaders, operationName, true); + } + async sendRequestInner(endpoint, payload, method, additionalHeaders, operationName, allowAuthRetry) { + const currentToken = await this.resolveAuthToken(); const requestId = this.generateRequestId(); const headers = { - 'Authorization': `Bearer ${this.authToken}`, + 'Authorization': `Bearer ${currentToken}`, 'Content-Type': 'application/json', 'X-Request-Id': requestId, 'User-Agent': 'PurviewGitHubAction/1.0', @@ -189,6 +211,12 @@ export class PurviewClient { }); // Handle specific error cases if (response.status === 401) { + // If we have a token provider, clear the stale token and retry once + if (allowAuthRetry && this.tokenProvider) { + this.logger.info(`[${operationName}] 401 received — refreshing token and retrying`); + this.logger.endGroup(); + return this.sendRequestInner(endpoint, payload, method, additionalHeaders, operationName, false); + } const err = new Error('Authentication failed. Token may be expired.'); err.statusCode = 401; throw err; diff --git a/dist/api/PurviewClient.js.map b/dist/api/PurviewClient.js.map index 7136db5..790b025 100644 --- a/dist/api/PurviewClient.js.map +++ b/dist/api/PurviewClient.js.map @@ -1 +1 @@ -{"version":3,"file":"purviewClient.js","sourceRoot":"","sources":["../../src/api/purviewClient.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"purviewClient.js","sourceRoot":"","sources":["../../src/api/purviewClient.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/dist/index.js b/dist/index.js index 581e9ae..04ab3b2 100644 --- a/dist/index.js +++ b/dist/index.js @@ -61991,6 +61991,7 @@ class PurviewClient { logger; retryHandler; authToken = null; + tokenProvider = null; baseUrl; constructor(config) { this.config = config; @@ -62001,6 +62002,23 @@ class PurviewClient { setAuthToken(token) { this.authToken = token; } + /** + * Set a callback that returns a fresh access token. When set, the provider + * is called before every request (it should cache internally) and again + * after a 401 to attempt a single token-refresh retry. + */ + setTokenProvider(provider) { + this.tokenProvider = provider; + } + async resolveAuthToken() { + if (this.tokenProvider) { + return await this.tokenProvider(); + } + if (this.authToken) { + return this.authToken; + } + throw new Error('Authentication token not set'); + } async processContentAsync(payload) { if (!this.authToken) { throw new Error('Authentication token not set'); @@ -62132,9 +62150,13 @@ class PurviewClient { } } async sendRequest(endpoint, payload = null, method = "POST", additionalHeaders = {}, operationName = 'Unknown') { + return this.sendRequestInner(endpoint, payload, method, additionalHeaders, operationName, true); + } + async sendRequestInner(endpoint, payload, method, additionalHeaders, operationName, allowAuthRetry) { + const currentToken = await this.resolveAuthToken(); const requestId = this.generateRequestId(); const headers = { - 'Authorization': `Bearer ${this.authToken}`, + 'Authorization': `Bearer ${currentToken}`, 'Content-Type': 'application/json', 'X-Request-Id': requestId, 'User-Agent': 'PurviewGitHubAction/1.0', @@ -62175,6 +62197,12 @@ class PurviewClient { }); // Handle specific error cases if (response.status === 401) { + // If we have a token provider, clear the stale token and retry once + if (allowAuthRetry && this.tokenProvider) { + this.logger.info(`[${operationName}] 401 received — refreshing token and retrying`); + this.logger.endGroup(); + return this.sendRequestInner(endpoint, payload, method, additionalHeaders, operationName, false); + } const err = new Error('Authentication failed. Token may be expired.'); err.statusCode = 401; throw err; @@ -63304,6 +63332,7 @@ class PayloadBuilder { } createContentToProcess(file, conversationId, messageId, isTruncated = false, contentOverride) { let userId = file.authorId; + const usingDefaultUser = !userId || userId === this.config.userId; if (!userId) { this.logger.warn(`No user ID found for file: ${file.path} with author ${file.authorEmail}}, using default user ID`); userId = this.config.userId; @@ -63318,6 +63347,7 @@ class PayloadBuilder { agents.push({ identifier: file.committerId || file.committerEmail || '', name: file.committerLogin || file.committerEmail || undefined, + version: usingDefaultUser ? this.config.userId : undefined, }); } const entry = { @@ -63390,6 +63420,7 @@ class PayloadBuilder { const now = new Date().toISOString(); const commitContent = this.buildCommitContentText(commitGroup); const commitIdentifier = `commit:${commitGroup.sha}`; + const usingDefaultUser = !commitGroup.authorId || commitGroup.authorId === this.config.userId; const fileContent = { "@odata.type": "microsoft.graph.textContent", data: commitContent, @@ -63399,6 +63430,7 @@ class PayloadBuilder { agents.push({ identifier: commitGroup.committerId || commitGroup.committerEmail || '', name: commitGroup.committerLogin || commitGroup.committerEmail || undefined, + version: usingDefaultUser ? this.config.userId : undefined, }); } const entry = { @@ -64030,6 +64062,11 @@ class GitHubActionsRunner { this.logger.info('Authenticating with Azure'); const token = await this.authService.getToken(); this.purviewClient.setAuthToken(token.accessToken); + this.purviewClient.setTokenProvider(async () => { + this.authService.clearCache(); + const freshToken = await this.authService.getToken(); + return freshToken.accessToken; + }); // Step 3: Get event context info this.logger.info('Processing repository files'); const prInfo = await this.fileProcessor.getPrInfo(); diff --git a/dist/payload/PayloadBuilder.d.ts.map b/dist/payload/PayloadBuilder.d.ts.map index 200fe88..f0867ed 100644 --- a/dist/payload/PayloadBuilder.d.ts.map +++ b/dist/payload/PayloadBuilder.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"payloadBuilder.d.ts","sourceRoot":"","sources":["../../src/payload/payloadBuilder.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,mBAAmB,EAAE,QAAQ,EAAe,MAAM,EAAE,uBAAuB,EAAE,wBAAwB,EAAE,eAAe,EAA6B,0BAA0B,EAAE,yBAAyB,EAAE,qBAAqB,EAAE,gBAAgB,EAAE,gBAAgB,EAAiB,YAAY,EAAE,cAAc,EAAiB,WAAW,EAA4C,MAAM,iBAAiB,CAAC;AAGrb,qBAAa,cAAc;IASb,OAAO,CAAC,QAAQ,CAAC,MAAM;IARnC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAChC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAmB;IAClD,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAwB;IACtD,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,aAAa,CAA2C;IAChF,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAY;IAC3C,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAW;IAC7C,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,mBAAmB,CAAS;gBAEvB,MAAM,EAAE,YAAY;IAIjD,4BAA4B,IAAI,uBAAuB;IAkBvD,6BAA6B,CAAC,KAAK,EAAE,YAAY,EAAE,EAAE,aAAa,EAAE,wBAAwB,EAAE,MAAM,EAAE,MAAM,GAAG,eAAe;IAiG9H;;;;;;;OAOG;IACH,qBAAqB,CACnB,MAAM,EAAE,YAAY,EAAE,EACtB,eAAe,EAAE,QAAQ,EACzB,eAAe,EAAE,cAAc,GAC9B,gBAAgB;IAoDnB;;OAEG;IACH,iCAAiC,CAAC,IAAI,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,qBAAqB,EAAE;IA0BzH,OAAO,CAAC,aAAa;IAerB,wBAAwB,CAAC,KAAK,EAAE,YAAY,EAAE,EAAE,MAAM,EAAE,MAAM,GAAG,mBAAmB,EAAE;IAiDtF,+BAA+B,CAAC,KAAK,EAAE,YAAY,EAAE,GAAG,0BAA0B,EAAE;IA8DpF,OAAO,CAAC,sBAAsB;IA0D9B;;OAEG;IACH,OAAO,CAAC,sBAAsB;IA+B9B;;OAEG;IACH,2BAA2B,CAAC,WAAW,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,GAAG,gBAAgB;IAqDvH;;OAEG;IACH,gCAAgC,CAAC,WAAW,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,GAAG,qBAAqB;IAKjI;;OAEG;IACH,8BAA8B,CAAC,WAAW,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,GAAG,mBAAmB;IAe7F;;OAEG;IACH,kCAAkC,CAAC,WAAW,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,GAAG,yBAAyB;CASxI"} \ No newline at end of file +{"version":3,"file":"payloadBuilder.d.ts","sourceRoot":"","sources":["../../src/payload/payloadBuilder.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,mBAAmB,EAAE,QAAQ,EAAe,MAAM,EAAE,uBAAuB,EAAE,wBAAwB,EAAE,eAAe,EAA6B,0BAA0B,EAAE,yBAAyB,EAAE,qBAAqB,EAAE,gBAAgB,EAAE,gBAAgB,EAAiB,YAAY,EAAE,cAAc,EAAiB,WAAW,EAA4C,MAAM,iBAAiB,CAAC;AAGrb,qBAAa,cAAc;IASb,OAAO,CAAC,QAAQ,CAAC,MAAM;IARnC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAChC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAmB;IAClD,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAwB;IACtD,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,aAAa,CAA2C;IAChF,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAY;IAC3C,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAW;IAC7C,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,mBAAmB,CAAS;gBAEvB,MAAM,EAAE,YAAY;IAIjD,4BAA4B,IAAI,uBAAuB;IAkBvD,6BAA6B,CAAC,KAAK,EAAE,YAAY,EAAE,EAAE,aAAa,EAAE,wBAAwB,EAAE,MAAM,EAAE,MAAM,GAAG,eAAe;IAiG9H;;;;;;;OAOG;IACH,qBAAqB,CACnB,MAAM,EAAE,YAAY,EAAE,EACtB,eAAe,EAAE,QAAQ,EACzB,eAAe,EAAE,cAAc,GAC9B,gBAAgB;IAoDnB;;OAEG;IACH,iCAAiC,CAAC,IAAI,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,qBAAqB,EAAE;IA0BzH,OAAO,CAAC,aAAa;IAerB,wBAAwB,CAAC,KAAK,EAAE,YAAY,EAAE,EAAE,MAAM,EAAE,MAAM,GAAG,mBAAmB,EAAE;IAiDtF,+BAA+B,CAAC,KAAK,EAAE,YAAY,EAAE,GAAG,0BAA0B,EAAE;IA8DpF,OAAO,CAAC,sBAAsB;IA4D9B;;OAEG;IACH,OAAO,CAAC,sBAAsB;IA+B9B;;OAEG;IACH,2BAA2B,CAAC,WAAW,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,GAAG,gBAAgB;IAuDvH;;OAEG;IACH,gCAAgC,CAAC,WAAW,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,GAAG,qBAAqB;IAKjI;;OAEG;IACH,8BAA8B,CAAC,WAAW,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,GAAG,mBAAmB;IAe7F;;OAEG;IACH,kCAAkC,CAAC,WAAW,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,GAAG,yBAAyB;CASxI"} \ No newline at end of file diff --git a/dist/payload/PayloadBuilder.js b/dist/payload/PayloadBuilder.js index 185e06c..66fc4dd 100644 --- a/dist/payload/PayloadBuilder.js +++ b/dist/payload/PayloadBuilder.js @@ -298,6 +298,7 @@ export class PayloadBuilder { } createContentToProcess(file, conversationId, messageId, isTruncated = false, contentOverride) { let userId = file.authorId; + const usingDefaultUser = !userId || userId === this.config.userId; if (!userId) { this.logger.warn(`No user ID found for file: ${file.path} with author ${file.authorEmail}}, using default user ID`); userId = this.config.userId; @@ -312,6 +313,7 @@ export class PayloadBuilder { agents.push({ identifier: file.committerId || file.committerEmail || '', name: file.committerLogin || file.committerEmail || undefined, + version: usingDefaultUser ? this.config.userId : undefined, }); } const entry = { @@ -384,6 +386,7 @@ export class PayloadBuilder { const now = new Date().toISOString(); const commitContent = this.buildCommitContentText(commitGroup); const commitIdentifier = `commit:${commitGroup.sha}`; + const usingDefaultUser = !commitGroup.authorId || commitGroup.authorId === this.config.userId; const fileContent = { "@odata.type": "microsoft.graph.textContent", data: commitContent, @@ -393,6 +396,7 @@ export class PayloadBuilder { agents.push({ identifier: commitGroup.committerId || commitGroup.committerEmail || '', name: commitGroup.committerLogin || commitGroup.committerEmail || undefined, + version: usingDefaultUser ? this.config.userId : undefined, }); } const entry = { diff --git a/dist/payload/PayloadBuilder.js.map b/dist/payload/PayloadBuilder.js.map index 91c40da..78dccd9 100644 --- a/dist/payload/PayloadBuilder.js.map +++ b/dist/payload/PayloadBuilder.js.map @@ -1 +1 @@ -{"version":3,"file":"payloadBuilder.js","sourceRoot":"","sources":["../../src/payload/payloadBuilder.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"payloadBuilder.js","sourceRoot":"","sources":["../../src/payload/payloadBuilder.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/dist/runner/GitHubActionsRunner.d.ts.map b/dist/runner/GitHubActionsRunner.d.ts.map index 2e25b4b..e43521d 100644 --- a/dist/runner/GitHubActionsRunner.d.ts.map +++ b/dist/runner/GitHubActionsRunner.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"gitHubActionsRunner.d.ts","sourceRoot":"","sources":["../../src/runner/gitHubActionsRunner.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,YAAY,EAAqN,MAAM,iBAAiB,CAAC;AAqBlQ,qBAAa,mBAAmB;IAQlB,OAAO,CAAC,QAAQ,CAAC,MAAM;IAPnC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAChC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAwB;IACpD,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAgB;IAC9C,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAgB;IAC9C,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAiB;IAChD,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAkB;gBAErB,MAAM,EAAE,YAAY;IAc3C,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;YAkEhB,eAAe;YA4Cf,kBAAkB;YAkClB,gBAAgB;YAmChB,kBAAkB;YA4DlB,mBAAmB;IAsBjC;;;OAGG;YACW,sBAAsB;IAsCpC;;OAEG;YACW,iBAAiB;YA0DjB,qBAAqB;YAWrB,yBAAyB;IASvC;;;OAGG;YACW,4BAA4B;IA8C1C,OAAO,CAAC,yBAAyB;YAsBnB,aAAa;IA2B3B;;;;OAIG;YACW,0BAA0B;IAqGxC;;OAEG;YACW,iBAAiB;CAsBhC"} \ No newline at end of file +{"version":3,"file":"gitHubActionsRunner.d.ts","sourceRoot":"","sources":["../../src/runner/gitHubActionsRunner.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,YAAY,EAAqN,MAAM,iBAAiB,CAAC;AAqBlQ,qBAAa,mBAAmB;IAQlB,OAAO,CAAC,QAAQ,CAAC,MAAM;IAPnC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAChC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAwB;IACpD,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAgB;IAC9C,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAgB;IAC9C,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAiB;IAChD,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAkB;gBAErB,MAAM,EAAE,YAAY;IAc3C,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;YAuEhB,eAAe;YA4Cf,kBAAkB;YAkClB,gBAAgB;YAmChB,kBAAkB;YA4DlB,mBAAmB;IAsBjC;;;OAGG;YACW,sBAAsB;IAsCpC;;OAEG;YACW,iBAAiB;YA0DjB,qBAAqB;YAWrB,yBAAyB;IASvC;;;OAGG;YACW,4BAA4B;IA8C1C,OAAO,CAAC,yBAAyB;YAsBnB,aAAa;IA2B3B;;;;OAIG;YACW,0BAA0B;IAqGxC;;OAEG;YACW,iBAAiB;CAsBhC"} \ No newline at end of file diff --git a/dist/runner/GitHubActionsRunner.js b/dist/runner/GitHubActionsRunner.js index 3c130b1..a648fbe 100644 --- a/dist/runner/GitHubActionsRunner.js +++ b/dist/runner/GitHubActionsRunner.js @@ -35,6 +35,11 @@ export class GitHubActionsRunner { this.logger.info('Authenticating with Azure'); const token = await this.authService.getToken(); this.purviewClient.setAuthToken(token.accessToken); + this.purviewClient.setTokenProvider(async () => { + this.authService.clearCache(); + const freshToken = await this.authService.getToken(); + return freshToken.accessToken; + }); // Step 3: Get event context info this.logger.info('Processing repository files'); const prInfo = await this.fileProcessor.getPrInfo(); diff --git a/dist/runner/GitHubActionsRunner.js.map b/dist/runner/GitHubActionsRunner.js.map index da3c5f1..c83c722 100644 --- a/dist/runner/GitHubActionsRunner.js.map +++ b/dist/runner/GitHubActionsRunner.js.map @@ -1 +1 @@ -{"version":3,"file":"gitHubActionsRunner.js","sourceRoot":"","sources":["../../src/runner/gitHubActionsRunner.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"gitHubActionsRunner.js","sourceRoot":"","sources":["../../src/runner/gitHubActionsRunner.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/src/api/purviewClient.ts b/src/api/purviewClient.ts index 9810c1e..3260607 100644 --- a/src/api/purviewClient.ts +++ b/src/api/purviewClient.ts @@ -6,6 +6,7 @@ export class PurviewClient { private readonly logger: Logger; private readonly retryHandler: RetryHandler; private authToken: string | null = null; + private tokenProvider: (() => Promise) | null = null; private readonly baseUrl: string; constructor(private readonly config: ActionConfig) { @@ -18,6 +19,25 @@ export class PurviewClient { this.authToken = token; } + /** + * Set a callback that returns a fresh access token. When set, the provider + * is called before every request (it should cache internally) and again + * after a 401 to attempt a single token-refresh retry. + */ + setTokenProvider(provider: () => Promise): void { + this.tokenProvider = provider; + } + + private async resolveAuthToken(): Promise { + if (this.tokenProvider) { + return await this.tokenProvider(); + } + if (this.authToken) { + return this.authToken; + } + throw new Error('Authentication token not set'); + } + async processContentAsync(payload: ProcessContentBatchRequest): Promise { if (!this.authToken) { throw new Error('Authentication token not set'); @@ -196,9 +216,14 @@ export class PurviewClient { } private async sendRequest(endpoint: string, payload: string | null = null, method: string = "POST", additionalHeaders: Record = {}, operationName: string = 'Unknown'): Promise { + return this.sendRequestInner(endpoint, payload, method, additionalHeaders, operationName, true); + } + + private async sendRequestInner(endpoint: string, payload: string | null, method: string, additionalHeaders: Record, operationName: string, allowAuthRetry: boolean): Promise { + const currentToken = await this.resolveAuthToken(); const requestId = this.generateRequestId(); const headers: Record = { - 'Authorization': `Bearer ${this.authToken}`, + 'Authorization': `Bearer ${currentToken}`, 'Content-Type': 'application/json', 'X-Request-Id': requestId, 'User-Agent': 'PurviewGitHubAction/1.0', @@ -244,6 +269,12 @@ export class PurviewClient { // Handle specific error cases if (response.status === 401) { + // If we have a token provider, clear the stale token and retry once + if (allowAuthRetry && this.tokenProvider) { + this.logger.info(`[${operationName}] 401 received — refreshing token and retrying`); + this.logger.endGroup(); + return this.sendRequestInner(endpoint, payload, method, additionalHeaders, operationName, false); + } const err = new Error('Authentication failed. Token may be expired.'); (err as any).statusCode = 401; throw err; diff --git a/src/payload/payloadBuilder.ts b/src/payload/payloadBuilder.ts index a8cbb87..8081553 100644 --- a/src/payload/payloadBuilder.ts +++ b/src/payload/payloadBuilder.ts @@ -350,6 +350,7 @@ export class PayloadBuilder { private createContentToProcess(file: FileMetadata, conversationId: string, messageId: number, isTruncated: boolean = false, contentOverride?: string): ContentToProcess { let userId = file.authorId; + const usingDefaultUser = !userId || userId === this.config.userId; if (!userId) { this.logger.warn(`No user ID found for file: ${file.path} with author ${file.authorEmail}}, using default user ID`); @@ -368,6 +369,7 @@ export class PayloadBuilder { agents.push({ identifier: file.committerId || file.committerEmail || '', name: file.committerLogin || file.committerEmail || undefined, + version: usingDefaultUser ? this.config.userId : undefined, }); } @@ -447,6 +449,7 @@ export class PayloadBuilder { const now = new Date().toISOString(); const commitContent = this.buildCommitContentText(commitGroup); const commitIdentifier = `commit:${commitGroup.sha}`; + const usingDefaultUser = !commitGroup.authorId || commitGroup.authorId === this.config.userId; const fileContent: TextContent = { "@odata.type": "microsoft.graph.textContent", @@ -458,6 +461,7 @@ export class PayloadBuilder { agents.push({ identifier: commitGroup.committerId || commitGroup.committerEmail || '', name: commitGroup.committerLogin || commitGroup.committerEmail || undefined, + version: usingDefaultUser ? this.config.userId : undefined, }); } diff --git a/src/runner/gitHubActionsRunner.ts b/src/runner/gitHubActionsRunner.ts index 1f81bc0..f19ba5a 100644 --- a/src/runner/gitHubActionsRunner.ts +++ b/src/runner/gitHubActionsRunner.ts @@ -54,6 +54,11 @@ export class GitHubActionsRunner { this.logger.info('Authenticating with Azure'); const token = await this.authService.getToken(); this.purviewClient.setAuthToken(token.accessToken); + this.purviewClient.setTokenProvider(async () => { + this.authService.clearCache(); + const freshToken = await this.authService.getToken(); + return freshToken.accessToken; + }); // Step 3: Get event context info this.logger.info('Processing repository files'); From d484fcbe016b8bda849b9e3dd659bb8f56d82959 Mon Sep 17 00:00:00 2001 From: Rishabh Chawla Date: Wed, 1 Apr 2026 16:55:38 -0700 Subject: [PATCH 07/20] Fix incorrect caching logic by agency --- dist/api/PurviewClient.d.ts | 6 ++++++ dist/api/PurviewClient.d.ts.map | 2 +- dist/api/PurviewClient.js | 11 +++++++++++ dist/api/PurviewClient.js.map | 2 +- dist/index.js | 13 ++++++++++++- dist/runner/GitHubActionsRunner.js | 2 +- dist/runner/GitHubActionsRunner.js.map | 2 +- src/api/purviewClient.ts | 12 ++++++++++++ src/runner/gitHubActionsRunner.ts | 2 +- 9 files changed, 46 insertions(+), 6 deletions(-) diff --git a/dist/api/PurviewClient.d.ts b/dist/api/PurviewClient.d.ts index 0231e54..9ca3784 100644 --- a/dist/api/PurviewClient.d.ts +++ b/dist/api/PurviewClient.d.ts @@ -5,6 +5,7 @@ export declare class PurviewClient { private readonly retryHandler; private authToken; private tokenProvider; + private tokenRefresh; private readonly baseUrl; constructor(config: ActionConfig); setAuthToken(token: string): void; @@ -14,6 +15,11 @@ export declare class PurviewClient { * after a 401 to attempt a single token-refresh retry. */ setTokenProvider(provider: () => Promise): void; + /** + * Set a callback invoked before the 401-retry to invalidate any cached + * token so the next tokenProvider call fetches a genuinely new token. + */ + setTokenRefresh(refresh: () => void): void; private resolveAuthToken; processContentAsync(payload: ProcessContentBatchRequest): Promise; processContent(userId: string, request: ProcessContentRequest, scopeIdentifier: string, inline?: boolean): Promise>; diff --git a/dist/api/PurviewClient.d.ts.map b/dist/api/PurviewClient.d.ts.map index 7aa9060..a9daf58 100644 --- a/dist/api/PurviewClient.d.ts.map +++ b/dist/api/PurviewClient.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"purviewClient.d.ts","sourceRoot":"","sources":["../../src/api/purviewClient.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,0BAA0B,EAAE,qBAAqB,EAAE,sBAAsB,EAAE,mBAAmB,EAAE,uBAAuB,EAAE,wBAAwB,EAAE,sBAAsB,EAAE,MAAM,iBAAiB,CAAC;AAIvO,qBAAa,aAAa;IAOZ,OAAO,CAAC,QAAQ,CAAC,MAAM;IANnC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAChC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAe;IAC5C,OAAO,CAAC,SAAS,CAAuB;IACxC,OAAO,CAAC,aAAa,CAAwC;IAC7D,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;gBAEJ,MAAM,EAAE,YAAY;IAMjD,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAIjC;;;;OAIG;IACH,gBAAgB,CAAC,QAAQ,EAAE,MAAM,OAAO,CAAC,MAAM,CAAC,GAAG,IAAI;YAIzC,gBAAgB;IAUxB,mBAAmB,CAAC,OAAO,EAAE,0BAA0B,GAAG,OAAO,CAAC,WAAW,CAAC;IA2B9E,cAAc,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,qBAAqB,EAAE,eAAe,EAAE,MAAM,EAAE,MAAM,GAAE,OAAc,GAAG,OAAO,CAAC,WAAW,CAAC,sBAAsB,CAAC,CAAC;IAmC7J,YAAY,CAAC,OAAO,EAAE,mBAAmB,GAAG,OAAO,CAAC,WAAW,CAAC;IA0BhE,2BAA2B,CAAC,OAAO,EAAE,uBAAuB,GAAG,OAAO,CAAC,WAAW,CAAC,wBAAwB,CAAC,CAAC;IA8B7G,yBAAyB,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,uBAAuB,GAAG,OAAO,CAAC,WAAW,CAAC,wBAAwB,CAAC,CAAC;IA8B3H,WAAW,CAAC,UAAU,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,WAAW,CAAC,sBAAsB,CAAC,CAAC;YA6BvE,WAAW;YAIX,gBAAgB;IAsG9B,OAAO,CAAC,YAAY;IAQpB,OAAO,CAAC,iBAAiB;IAIzB,OAAO,CAAC,gBAAgB;IAIxB,OAAO,CAAC,qBAAqB;CAS9B"} \ No newline at end of file +{"version":3,"file":"purviewClient.d.ts","sourceRoot":"","sources":["../../src/api/purviewClient.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,0BAA0B,EAAE,qBAAqB,EAAE,sBAAsB,EAAE,mBAAmB,EAAE,uBAAuB,EAAE,wBAAwB,EAAE,sBAAsB,EAAE,MAAM,iBAAiB,CAAC;AAIvO,qBAAa,aAAa;IAQZ,OAAO,CAAC,QAAQ,CAAC,MAAM;IAPnC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAChC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAe;IAC5C,OAAO,CAAC,SAAS,CAAuB;IACxC,OAAO,CAAC,aAAa,CAAwC;IAC7D,OAAO,CAAC,YAAY,CAA6B;IACjD,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;gBAEJ,MAAM,EAAE,YAAY;IAMjD,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAIjC;;;;OAIG;IACH,gBAAgB,CAAC,QAAQ,EAAE,MAAM,OAAO,CAAC,MAAM,CAAC,GAAG,IAAI;IAIvD;;;OAGG;IACH,eAAe,CAAC,OAAO,EAAE,MAAM,IAAI,GAAG,IAAI;YAI5B,gBAAgB;IAUxB,mBAAmB,CAAC,OAAO,EAAE,0BAA0B,GAAG,OAAO,CAAC,WAAW,CAAC;IA2B9E,cAAc,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,qBAAqB,EAAE,eAAe,EAAE,MAAM,EAAE,MAAM,GAAE,OAAc,GAAG,OAAO,CAAC,WAAW,CAAC,sBAAsB,CAAC,CAAC;IAmC7J,YAAY,CAAC,OAAO,EAAE,mBAAmB,GAAG,OAAO,CAAC,WAAW,CAAC;IA0BhE,2BAA2B,CAAC,OAAO,EAAE,uBAAuB,GAAG,OAAO,CAAC,WAAW,CAAC,wBAAwB,CAAC,CAAC;IA8B7G,yBAAyB,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,uBAAuB,GAAG,OAAO,CAAC,WAAW,CAAC,wBAAwB,CAAC,CAAC;IA8B3H,WAAW,CAAC,UAAU,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,WAAW,CAAC,sBAAsB,CAAC,CAAC;YA6BvE,WAAW;YAIX,gBAAgB;IAyG9B,OAAO,CAAC,YAAY;IAQpB,OAAO,CAAC,iBAAiB;IAIzB,OAAO,CAAC,gBAAgB;IAIxB,OAAO,CAAC,qBAAqB;CAS9B"} \ No newline at end of file diff --git a/dist/api/PurviewClient.js b/dist/api/PurviewClient.js index 3b483a5..7d821b9 100644 --- a/dist/api/PurviewClient.js +++ b/dist/api/PurviewClient.js @@ -6,6 +6,7 @@ export class PurviewClient { retryHandler; authToken = null; tokenProvider = null; + tokenRefresh = null; baseUrl; constructor(config) { this.config = config; @@ -24,6 +25,13 @@ export class PurviewClient { setTokenProvider(provider) { this.tokenProvider = provider; } + /** + * Set a callback invoked before the 401-retry to invalidate any cached + * token so the next tokenProvider call fetches a genuinely new token. + */ + setTokenRefresh(refresh) { + this.tokenRefresh = refresh; + } async resolveAuthToken() { if (this.tokenProvider) { return await this.tokenProvider(); @@ -214,6 +222,9 @@ export class PurviewClient { // If we have a token provider, clear the stale token and retry once if (allowAuthRetry && this.tokenProvider) { this.logger.info(`[${operationName}] 401 received — refreshing token and retrying`); + if (this.tokenRefresh) { + this.tokenRefresh(); + } this.logger.endGroup(); return this.sendRequestInner(endpoint, payload, method, additionalHeaders, operationName, false); } diff --git a/dist/api/PurviewClient.js.map b/dist/api/PurviewClient.js.map index 790b025..9d20e5b 100644 --- a/dist/api/PurviewClient.js.map +++ b/dist/api/PurviewClient.js.map @@ -1 +1 @@ -{"version":3,"file":"purviewClient.js","sourceRoot":"","sources":["../../src/api/purviewClient.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"purviewClient.js","sourceRoot":"","sources":["../../src/api/purviewClient.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/dist/index.js b/dist/index.js index 04ab3b2..e2b8243 100644 --- a/dist/index.js +++ b/dist/index.js @@ -61992,6 +61992,7 @@ class PurviewClient { retryHandler; authToken = null; tokenProvider = null; + tokenRefresh = null; baseUrl; constructor(config) { this.config = config; @@ -62010,6 +62011,13 @@ class PurviewClient { setTokenProvider(provider) { this.tokenProvider = provider; } + /** + * Set a callback invoked before the 401-retry to invalidate any cached + * token so the next tokenProvider call fetches a genuinely new token. + */ + setTokenRefresh(refresh) { + this.tokenRefresh = refresh; + } async resolveAuthToken() { if (this.tokenProvider) { return await this.tokenProvider(); @@ -62200,6 +62208,9 @@ class PurviewClient { // If we have a token provider, clear the stale token and retry once if (allowAuthRetry && this.tokenProvider) { this.logger.info(`[${operationName}] 401 received — refreshing token and retrying`); + if (this.tokenRefresh) { + this.tokenRefresh(); + } this.logger.endGroup(); return this.sendRequestInner(endpoint, payload, method, additionalHeaders, operationName, false); } @@ -64063,10 +64074,10 @@ class GitHubActionsRunner { const token = await this.authService.getToken(); this.purviewClient.setAuthToken(token.accessToken); this.purviewClient.setTokenProvider(async () => { - this.authService.clearCache(); const freshToken = await this.authService.getToken(); return freshToken.accessToken; }); + this.purviewClient.setTokenRefresh(() => this.authService.clearCache()); // Step 3: Get event context info this.logger.info('Processing repository files'); const prInfo = await this.fileProcessor.getPrInfo(); diff --git a/dist/runner/GitHubActionsRunner.js b/dist/runner/GitHubActionsRunner.js index a648fbe..c9cec96 100644 --- a/dist/runner/GitHubActionsRunner.js +++ b/dist/runner/GitHubActionsRunner.js @@ -36,10 +36,10 @@ export class GitHubActionsRunner { const token = await this.authService.getToken(); this.purviewClient.setAuthToken(token.accessToken); this.purviewClient.setTokenProvider(async () => { - this.authService.clearCache(); const freshToken = await this.authService.getToken(); return freshToken.accessToken; }); + this.purviewClient.setTokenRefresh(() => this.authService.clearCache()); // Step 3: Get event context info this.logger.info('Processing repository files'); const prInfo = await this.fileProcessor.getPrInfo(); diff --git a/dist/runner/GitHubActionsRunner.js.map b/dist/runner/GitHubActionsRunner.js.map index c83c722..ece8634 100644 --- a/dist/runner/GitHubActionsRunner.js.map +++ b/dist/runner/GitHubActionsRunner.js.map @@ -1 +1 @@ -{"version":3,"file":"gitHubActionsRunner.js","sourceRoot":"","sources":["../../src/runner/gitHubActionsRunner.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"gitHubActionsRunner.js","sourceRoot":"","sources":["../../src/runner/gitHubActionsRunner.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/src/api/purviewClient.ts b/src/api/purviewClient.ts index 3260607..4b9ae5b 100644 --- a/src/api/purviewClient.ts +++ b/src/api/purviewClient.ts @@ -7,6 +7,7 @@ export class PurviewClient { private readonly retryHandler: RetryHandler; private authToken: string | null = null; private tokenProvider: (() => Promise) | null = null; + private tokenRefresh: (() => void) | null = null; private readonly baseUrl: string; constructor(private readonly config: ActionConfig) { @@ -28,6 +29,14 @@ export class PurviewClient { this.tokenProvider = provider; } + /** + * Set a callback invoked before the 401-retry to invalidate any cached + * token so the next tokenProvider call fetches a genuinely new token. + */ + setTokenRefresh(refresh: () => void): void { + this.tokenRefresh = refresh; + } + private async resolveAuthToken(): Promise { if (this.tokenProvider) { return await this.tokenProvider(); @@ -272,6 +281,9 @@ export class PurviewClient { // If we have a token provider, clear the stale token and retry once if (allowAuthRetry && this.tokenProvider) { this.logger.info(`[${operationName}] 401 received — refreshing token and retrying`); + if (this.tokenRefresh) { + this.tokenRefresh(); + } this.logger.endGroup(); return this.sendRequestInner(endpoint, payload, method, additionalHeaders, operationName, false); } diff --git a/src/runner/gitHubActionsRunner.ts b/src/runner/gitHubActionsRunner.ts index f19ba5a..4f6ef56 100644 --- a/src/runner/gitHubActionsRunner.ts +++ b/src/runner/gitHubActionsRunner.ts @@ -55,10 +55,10 @@ export class GitHubActionsRunner { const token = await this.authService.getToken(); this.purviewClient.setAuthToken(token.accessToken); this.purviewClient.setTokenProvider(async () => { - this.authService.clearCache(); const freshToken = await this.authService.getToken(); return freshToken.accessToken; }); + this.purviewClient.setTokenRefresh(() => this.authService.clearCache()); // Step 3: Get event context info this.logger.info('Processing repository files'); From c1b9b99683cf3edc4e240c21bc2a911d55f76a40 Mon Sep 17 00:00:00 2001 From: Rishabh Chawla Date: Wed, 1 Apr 2026 17:14:21 -0700 Subject: [PATCH 08/20] Some more updates --- dist/config/types.d.ts | 1 + dist/config/types.d.ts.map | 2 +- dist/config/types.js.map | 2 +- dist/file/FileProcessor.d.ts | 5 + dist/file/FileProcessor.d.ts.map | 2 +- dist/file/FileProcessor.js | 52 ++++++++++ dist/file/FileProcessor.js.map | 2 +- dist/index.js | 126 +++++++++++++++++++++++- dist/payload/PayloadBuilder.d.ts.map | 2 +- dist/payload/PayloadBuilder.js | 4 + dist/payload/PayloadBuilder.js.map | 2 +- dist/runner/fullScanService.d.ts | 6 ++ dist/runner/fullScanService.d.ts.map | 2 +- dist/runner/fullScanService.js | 67 +++++++++++++ dist/runner/fullScanService.js.map | 2 +- dist/validation/InputValidator.d.ts.map | 2 +- dist/validation/InputValidator.js | 3 +- dist/validation/InputValidator.js.map | 2 +- src/config/types.ts | 1 + src/file/fileProcessor.ts | 58 +++++++++++ src/payload/payloadBuilder.ts | 4 + src/runner/fullScanService.ts | 84 +++++++++++++++- src/validation/inputValidator.ts | 3 +- 23 files changed, 420 insertions(+), 14 deletions(-) diff --git a/dist/config/types.d.ts b/dist/config/types.d.ts index 5bf0328..a147f81 100644 --- a/dist/config/types.d.ts +++ b/dist/config/types.d.ts @@ -75,6 +75,7 @@ export interface ProcessContentBatchRequest { export interface ProcessContentRequestItem { contentToProcess: ContentToProcess; userId?: string; + userEmail?: string; requestId: string; } export interface ContentToProcess { diff --git a/dist/config/types.d.ts.map b/dist/config/types.d.ts.map index ea9e939..050f222 100644 --- a/dist/config/types.d.ts.map +++ b/dist/config/types.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/config/types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,YAAY;IAC3B,QAAQ,EAAE,MAAM,CAAC;IACjB,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,QAAQ,EAAE,MAAM,CAAC;IACjB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,eAAe,EAAE,MAAM,CAAC;IACxB,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;IAC3B,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,OAAO,CAAC;IACf,UAAU,EAAE,cAAc,CAAC;IAC3B,MAAM,EAAE,MAAM,CAAC;IACf,YAAY,CAAC,EAAE,WAAW,EAAE,CAAC;IAG7B,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,SAAS;IACxB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,IAAI,CAAC;CACjB;AAED,MAAM,MAAM,gBAAgB,GAC1B,SAAS,GACT,OAAO,GACP,SAAS,GACT,UAAU,GACV,SAAS,GACT,QAAQ,GACR,SAAS,GACT,WAAW,CAAC;AAEd,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;IACxC,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;IACxC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,cAAc,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;IAC3C,cAAc,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;IAC3C,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,YAAY,CAAC,EAAE,gBAAgB,CAAC;IAChC,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED,MAAM,WAAW,WAAW,CAAC,CAAC,GAAG,GAAG;IAClC,OAAO,EAAE,OAAO,CAAC;IACjB,IAAI,CAAC,EAAE,CAAC,CAAC;IACT,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,MAAM,MAAM,CAAC,CAAC,EAAE,CAAC,GAAG,KAAK,IAC3B;IAAE,OAAO,EAAE,IAAI,CAAC;IAAC,KAAK,EAAE,CAAC,CAAA;CAAE,GAC3B;IAAE,OAAO,EAAE,KAAK,CAAC;IAAC,KAAK,EAAE,CAAC,CAAA;CAAE,CAAC;AAGjC,MAAM,WAAW,kBAAkB;IACjC,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,iBAAiB;IAC9B,mFAAmF;IACnF,aAAa,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,0BAA0B;IACvC,sBAAsB,EAAE,yBAAyB,EAAE,CAAC;CACvD;AAED,MAAM,WAAW,yBAAyB;IACtC,gBAAgB,EAAE,gBAAgB,CAAC;IACnC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,gBAAgB;IAC7B,cAAc,EAAE,0BAA0B,EAAE,CAAC;IAC7C,gBAAgB,CAAC,EAAE,gBAAgB,CAAC;IACpC,cAAc,CAAC,EAAE,cAAc,CAAC;IAChC,qBAAqB,CAAC,EAAE,qBAAqB,CAAC;IAC9C,oBAAoB,CAAC,EAAE,oBAAoB,CAAC;CAC/C;AAED,MAAM,WAAW,0BAA2B,SAAQ,iBAAiB;IACjE,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,WAAW,CAAC;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,aAAa,EAAE,MAAM,CAAC;IACtB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,OAAO,CAAC;IACrB,eAAe,EAAE,MAAM,CAAC;IACxB,gBAAgB,EAAE,MAAM,CAAC;CAC5B;AAED,MAAM,WAAW,2BAA4B,SAAQ,0BAA0B;IAC3E,aAAa,EAAE,6CAA6C,CAAC;IAC7D,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,oBAAoB,CAAC,EAAE,uBAAuB,EAAE,CAAC;IACjD,OAAO,CAAC,EAAE,mBAAmB,EAAE,CAAC;IAChC,MAAM,CAAC,EAAE,WAAW,EAAE,CAAC;CAC1B;AAED,MAAM,WAAW,mBAAoB,SAAQ,0BAA0B;IACnE,aAAa,EAAE,qCAAqC,CAAC;IACrD,OAAO,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,WAAY,SAAQ,iBAAiB;CAErD;AAED,MAAM,WAAW,WAAY,SAAQ,WAAW;IAC9C,aAAa,EAAE,6BAA6B,CAAC;IAC7C,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,aAAc,SAAQ,WAAW;IAChD,aAAa,EAAE,+BAA+B,CAAC;IAC/C,IAAI,EAAE,MAAM,CAAC;CACd;AAED,oBAAY,QAAQ;IAChB,OAAO,IAAI;IACX,UAAU,IAAI;IACd,UAAU,IAAI;IACd,YAAY,IAAI;IAChB,YAAY,IAAI;CACnB;AAED,MAAM,WAAW,gBAAgB;IAC7B,QAAQ,EAAE,QAAQ,CAAC;CACtB;AAED,MAAM,WAAW,cAAc;IAC3B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,6BAA6B,CAAC,EAAE,6BAA6B,CAAC;CACjE;AAED,MAAM,WAAW,6BAA6B;IAC1C,uBAAuB,EAAE,MAAM,CAAC;IAChC,sBAAsB,EAAE,MAAM,CAAC;CAClC;AAED,MAAM,WAAW,qBAAqB;IAClC,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,oBAAqB,SAAQ,qBAAqB;IAC/D,mBAAmB,EAAE,cAAc,CAAC;CACvC;AAED,MAAM,WAAW,cAAe,SAAQ,iBAAiB;IACrD,KAAK,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,yBAA0B,SAAQ,cAAc;IAC/D,aAAa,EAAE,2CAA2C,CAAC;CAC5D;AAED,MAAM,WAAW,oBAAqB,SAAQ,cAAc;IAC1D,aAAa,EAAE,sCAAsC,CAAC;CACvD;AAED,MAAM,WAAW,iBAAkB,SAAQ,cAAc;IACvD,aAAa,EAAE,mCAAmC,CAAC;CACpD;AAED,MAAM,WAAW,mBAAmB;IAChC,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,WAAW;IACxB,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,uBAAuB;IACpC,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,kBAAkB,CAAC;IAChC,MAAM,CAAC,EAAE,oBAAoB,CAAC;IAC9B,8BAA8B,CAAC,EAAE,OAAO,CAAC;CAC5C;AAED,MAAM,MAAM,kBAAkB,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,QAAQ,GAAG,oBAAoB,CAAC;AAE7F,MAAM,MAAM,oBAAoB,GAAG,SAAS,GAAG,SAAS,GAAG,oBAAoB,CAAC;AAEhF,MAAM,WAAW,mBAAmB;IAClC,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,MAAM,CAAC;IACf,eAAe,EAAE,MAAM,CAAC;IACxB,eAAe,EAAE,gBAAgB,CAAC;IAClC,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;CACvC;AAGD,MAAM,MAAM,yBAAyB,GACjC,MAAM,GACN,YAAY,GACZ,YAAY,GACZ,cAAc,GACd,cAAc,GACd,oBAAoB,CAAC;AAGzB,KAAK,mBAAmB,GACpB,MAAM,GACN,UAAU,GACV,UAAU,GACV,oBAAoB,CAAC;AAGzB,MAAM,WAAW,uBAAuB;IACtC;;OAEG;IACH,UAAU,CAAC,EAAE,yBAAyB,CAAC;IAEvC;;OAEG;IACH,SAAS,CAAC,EAAE,cAAc,EAAE,CAAC;IAE7B;;OAEG;IACH,OAAO,CAAC,EAAE,mBAAmB,CAAC;IAE9B;;OAEG;IACH,cAAc,CAAC,EAAE,cAAc,CAAC;IAEhC;;OAEG;IACH,qBAAqB,CAAC,EAAE,qBAAqB,CAAC;IAE9C;;;OAGG;IACH,aAAa,CAAC,EAAE,MAAM,CAAC;IAEvB;;;OAGG;IACH,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED,MAAM,WAAW,aAAa;IAC5B,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,WAAW,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;IACvC,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;IACxC,KAAK,EAAE,MAAM,CAAC;IACd,iBAAiB,EAAE,MAAM,CAAC;IAC1B,iBAAiB,EAAE,MAAM,CAAC;IAC1B,eAAe,EAAE,MAAM,CAAC;IACxB,YAAY,EAAE,gBAAgB,CAAC;CAChC;AAED,MAAM,WAAW,MAAM;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;IACvC,WAAW,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;IACvC,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;CAChC;AAED,MAAM,WAAW,sBAAsB;IACrC,KAAK,EAAE,aAAa,EAAE,CAAC;CACxB;AAED,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,iBAAiB,EAAE,MAAM,CAAC;CAC3B;AAED,MAAM,WAAW,wBAAwB;IACvC,KAAK,EAAE,YAAY,EAAE,CAAC;CACvB;AAED,MAAM,WAAW,YAAY;IAC3B,WAAW,EAAE,aAAa,CAAC;IAC3B,SAAS,EAAE,cAAc,EAAE,CAAC;IAC5B,UAAU,EAAE,yBAAyB,CAAC;IACtC,aAAa,EAAE,MAAM,CAAC;IACtB,aAAa,EAAE,aAAa,EAAE,CAAC;CAChC;AAED,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,MAAM,CAAC;IACf,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,aAAa;IAC5B,UAAU,EAAE,SAAS,EAAE,CAAC;IACxB,UAAU,EAAE,SAAS,EAAE,CAAC;CACzB;AAED,MAAM,WAAW,SAAS;IACxB,aAAa,EAAE,MAAM,CAAC;IACtB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,eAAe;IAC9B,sBAAsB,EAAE,0BAA0B,EAAE,CAAC;IACrD,oBAAoB,EAAE,mBAAmB,EAAE,CAAC;CAC7C;AAID,MAAM,WAAW,qBAAqB;IACpC,gBAAgB,EAAE,gBAAgB,CAAC;CACpC;AAED,MAAM,WAAW,sBAAsB;IACrC,EAAE,EAAE,MAAM,CAAC;IACX,oBAAoB,EAAE,oBAAoB,CAAC;IAC3C,aAAa,EAAE,YAAY,EAAE,CAAC;IAC9B,gBAAgB,EAAE,GAAG,EAAE,CAAC;CACzB;AAED,MAAM,MAAM,oBAAoB,GAAG,aAAa,GAAG,UAAU,CAAC;AAE9D,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,MAAM,CAAC;IACf,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,iBAAiB;IAChC,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,aAAa,EAAE,YAAY,EAAE,CAAC;CAC/B;AAED,oBAAY,aAAa;IACvB,cAAc,mBAAmB;IACjC,eAAe,oBAAoB;CACpC;AAED,MAAM,WAAW,gBAAgB;IAC/B,aAAa,EAAE,OAAO,CAAC;IACvB,UAAU,EAAE,aAAa,EAAE,CAAC;IAC5B,aAAa,EAAE,aAAa,CAAC;CAC9B;AAED,MAAM,WAAW,UAAU;IACvB,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,GAAG,SAAS,CAAC;IAC1B,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,OAAO,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,WAAW;IAC1B,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,YAAY,EAAE,CAAC;IACtB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAID,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,WAAW,EAAE,CAAC;IACrB,aAAa,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,iBAAiB;IAChC,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;CACd;AAGD,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,MAAM,CAAC;QACf,UAAU,UAAU;YAClB,YAAY,CAAC,EAAE,MAAM,CAAC;YACtB,YAAY,CAAC,EAAE,MAAM,CAAC;YACtB,aAAa,CAAC,EAAE,MAAM,CAAC;YACvB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAAC;SACnC;KACF;CACF"} \ No newline at end of file +{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/config/types.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/dist/config/types.js.map b/dist/config/types.js.map index 0473fb4..e6d9b28 100644 --- a/dist/config/types.js.map +++ b/dist/config/types.js.map @@ -1 +1 @@ -{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/config/types.ts"],"names":[],"mappings":"AAgJA,MAAM,CAAN,IAAY,QAMX;AAND,WAAY,QAAQ;IAChB,6CAAW,CAAA;IACX,mDAAc,CAAA;IACd,mDAAc,CAAA;IACd,uDAAgB,CAAA;IAChB,uDAAgB,CAAA;AACpB,CAAC,EANW,QAAQ,KAAR,QAAQ,QAMnB;AA4OD,MAAM,CAAN,IAAY,aAGX;AAHD,WAAY,aAAa;IACvB,kDAAiC,CAAA;IACjC,oDAAmC,CAAA;AACrC,CAAC,EAHW,aAAa,KAAb,aAAa,QAGxB"} \ No newline at end of file +{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/config/types.ts"],"names":[],"mappings":"AAiJA,MAAM,CAAN,IAAY,QAMX;AAND,WAAY,QAAQ;IAChB,6CAAW,CAAA;IACX,mDAAc,CAAA;IACd,mDAAc,CAAA;IACd,uDAAgB,CAAA;IAChB,uDAAgB,CAAA;AACpB,CAAC,EANW,QAAQ,KAAR,QAAQ,QAMnB;AA4OD,MAAM,CAAN,IAAY,aAGX;AAHD,WAAY,aAAa;IACvB,kDAAiC,CAAA;IACjC,oDAAmC,CAAA;AACrC,CAAC,EAHW,aAAa,KAAb,aAAa,QAGxB"} \ No newline at end of file diff --git a/dist/file/FileProcessor.d.ts b/dist/file/FileProcessor.d.ts index 90491df..60fb853 100644 --- a/dist/file/FileProcessor.d.ts +++ b/dist/file/FileProcessor.d.ts @@ -22,6 +22,11 @@ export declare class FileProcessor { private shouldIncludePath; getChangedFiles(): Promise; getAllRepoFiles(): Promise; + /** + * Fetch recent commits for the default branch (used during full scans). + * Returns CommitFiles[] with author/committer metadata populated. + */ + getAllRepoCommits(): Promise; /** * Use `git log` to build a map of file path → last commit author email. * Runs a single git command for all files to stay efficient. diff --git a/dist/file/FileProcessor.d.ts.map b/dist/file/FileProcessor.d.ts.map index 9436598..902894f 100644 --- a/dist/file/FileProcessor.d.ts.map +++ b/dist/file/FileProcessor.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"fileProcessor.d.ts","sourceRoot":"","sources":["../../src/file/fileProcessor.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAY9F,qBAAa,aAAa;IASZ,OAAO,CAAC,QAAQ,CAAC,MAAM;IARnC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAChC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAuC;IAC/D,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAgB;IAC9C,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAwB;IACpD,OAAO,CAAC,QAAQ,CAAuD;IACvE,2EAA2E;IAC3E,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAkC;gBAEtC,MAAM,EAAE,YAAY;IAQjD;;;;;;OAMG;YACW,cAAc;IA4E5B,OAAO,CAAC,eAAe;IASvB,OAAO,CAAC,iBAAiB;IAIzB,OAAO,CAAC,iBAAiB;IAuBnB,eAAe,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;IAepC,eAAe,IAAI,OAAO,CAAC,YAAY,EAAE,CAAC;IAuEhD;;;OAGG;IACH,OAAO,CAAC,mBAAmB;IAwBrB,gBAAgB,IAAI,OAAO,CAAC,MAAM,CAAC;IAenC,SAAS,IAAI,OAAO,CAAC,MAAM,CAAC;YA8CpB,iBAAiB;IA2E/B;;;;OAIG;YACW,WAAW;IA6BzB;;;;OAIG;YACW,gBAAgB;IAsC9B;;;;OAIG;IACH,OAAO,CAAC,mBAAmB;IAiB3B;;;OAGG;IACH,OAAO,CAAC,YAAY;IAwEpB;;;;;OAKG;IACH,OAAO,CAAC,eAAe;IAmDvB,OAAO,CAAC,aAAa;IAOf,UAAU,IAAI,OAAO,CAAC,UAAU,EAAE,CAAC;IA8CnC,eAAe,IAAI,OAAO,CAAC,UAAU,EAAE,CAAC;IAyBxC,uBAAuB,CAAC,oBAAoB,CAAC,EAAE,MAAM,GAAG,IAAI,EAAE,iBAAiB,CAAC,EAAE,UAAU,EAAE,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;IAkDvH,kBAAkB,CAAC,oBAAoB,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC;YAKzE,mBAAmB;YA4BnB,oBAAoB;CAOnC"} \ No newline at end of file +{"version":3,"file":"fileProcessor.d.ts","sourceRoot":"","sources":["../../src/file/fileProcessor.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAY9F,qBAAa,aAAa;IASZ,OAAO,CAAC,QAAQ,CAAC,MAAM;IARnC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAChC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAuC;IAC/D,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAgB;IAC9C,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAwB;IACpD,OAAO,CAAC,QAAQ,CAAuD;IACvE,2EAA2E;IAC3E,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAkC;gBAEtC,MAAM,EAAE,YAAY;IAQjD;;;;;;OAMG;YACW,cAAc;IA4E5B,OAAO,CAAC,eAAe;IASvB,OAAO,CAAC,iBAAiB;IAIzB,OAAO,CAAC,iBAAiB;IAuBnB,eAAe,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;IAepC,eAAe,IAAI,OAAO,CAAC,YAAY,EAAE,CAAC;IAuEhD;;;OAGG;IACG,iBAAiB,IAAI,OAAO,CAAC,WAAW,EAAE,CAAC;IAsDjD;;;OAGG;IACH,OAAO,CAAC,mBAAmB;IAwBrB,gBAAgB,IAAI,OAAO,CAAC,MAAM,CAAC;IAenC,SAAS,IAAI,OAAO,CAAC,MAAM,CAAC;YA8CpB,iBAAiB;IA2E/B;;;;OAIG;YACW,WAAW;IA6BzB;;;;OAIG;YACW,gBAAgB;IAsC9B;;;;OAIG;IACH,OAAO,CAAC,mBAAmB;IAiB3B;;;OAGG;IACH,OAAO,CAAC,YAAY;IAwEpB;;;;;OAKG;IACH,OAAO,CAAC,eAAe;IAmDvB,OAAO,CAAC,aAAa;IAOf,UAAU,IAAI,OAAO,CAAC,UAAU,EAAE,CAAC;IA8CnC,eAAe,IAAI,OAAO,CAAC,UAAU,EAAE,CAAC;IAyBxC,uBAAuB,CAAC,oBAAoB,CAAC,EAAE,MAAM,GAAG,IAAI,EAAE,iBAAiB,CAAC,EAAE,UAAU,EAAE,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;IAkDvH,kBAAkB,CAAC,oBAAoB,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC;YAKzE,mBAAmB;YA4BnB,oBAAoB;CAOnC"} \ No newline at end of file diff --git a/dist/file/FileProcessor.js b/dist/file/FileProcessor.js index c9da793..e6ac31c 100644 --- a/dist/file/FileProcessor.js +++ b/dist/file/FileProcessor.js @@ -199,6 +199,58 @@ export class FileProcessor { } return result; } + /** + * Fetch recent commits for the default branch (used during full scans). + * Returns CommitFiles[] with author/committer metadata populated. + */ + async getAllRepoCommits() { + const owner = this.config.repository.owner; + const repo = this.config.repository.repo; + this.logger.info('Fetching recent commits for full scan'); + const { data: commits } = await this.octokit.rest.repos.listCommits({ + owner, + repo, + per_page: 100, + }); + if (commits.length === 0) { + this.logger.info('No commits found in repository'); + return []; + } + this.logger.info(`Found ${commits.length} commit(s) for full scan`); + // Resolve author/committer emails to user IDs + const allEmails = new Set(); + for (const c of commits) { + const authorEmail = c.commit.author?.email; + const committerEmail = c.commit.committer?.email; + if (authorEmail) + allEmails.add(authorEmail.toLowerCase()); + if (committerEmail) + allEmails.add(committerEmail.toLowerCase()); + } + const userIdMap = await this.resolveUserIds(allEmails); + const result = []; + for (const c of commits) { + const authorEmail = c.commit.author?.email || undefined; + const committerEmail = c.commit.committer?.email || undefined; + const authorId = authorEmail ? (userIdMap[authorEmail.toLowerCase()] || this.config.userId) : undefined; + const committerId = committerEmail ? (userIdMap[committerEmail.toLowerCase()] || this.config.userId) : undefined; + result.push({ + sha: c.sha, + files: [], + message: c.commit.message || undefined, + authorEmail, + authorLogin: c.author?.login || undefined, + authorName: c.commit.author?.name || undefined, + authorId, + committerEmail, + committerLogin: c.committer?.login || undefined, + committerName: c.commit.committer?.name || undefined, + committerId, + timestamp: c.commit.author?.date || c.commit.committer?.date || undefined, + }); + } + return result; + } /** * Use `git log` to build a map of file path → last commit author email. * Runs a single git command for all files to stay efficient. diff --git a/dist/file/FileProcessor.js.map b/dist/file/FileProcessor.js.map index ad00b0f..8795c68 100644 --- a/dist/file/FileProcessor.js.map +++ b/dist/file/FileProcessor.js.map @@ -1 +1 @@ -{"version":3,"file":"fileProcessor.js","sourceRoot":"","sources":["../../src/file/fileProcessor.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"fileProcessor.js","sourceRoot":"","sources":["../../src/file/fileProcessor.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/dist/index.js b/dist/index.js index e2b8243..062b87d 100644 --- a/dist/index.js +++ b/dist/index.js @@ -62552,6 +62552,58 @@ class FileProcessor { } return result; } + /** + * Fetch recent commits for the default branch (used during full scans). + * Returns CommitFiles[] with author/committer metadata populated. + */ + async getAllRepoCommits() { + const owner = this.config.repository.owner; + const repo = this.config.repository.repo; + this.logger.info('Fetching recent commits for full scan'); + const { data: commits } = await this.octokit.rest.repos.listCommits({ + owner, + repo, + per_page: 100, + }); + if (commits.length === 0) { + this.logger.info('No commits found in repository'); + return []; + } + this.logger.info(`Found ${commits.length} commit(s) for full scan`); + // Resolve author/committer emails to user IDs + const allEmails = new Set(); + for (const c of commits) { + const authorEmail = c.commit.author?.email; + const committerEmail = c.commit.committer?.email; + if (authorEmail) + allEmails.add(authorEmail.toLowerCase()); + if (committerEmail) + allEmails.add(committerEmail.toLowerCase()); + } + const userIdMap = await this.resolveUserIds(allEmails); + const result = []; + for (const c of commits) { + const authorEmail = c.commit.author?.email || undefined; + const committerEmail = c.commit.committer?.email || undefined; + const authorId = authorEmail ? (userIdMap[authorEmail.toLowerCase()] || this.config.userId) : undefined; + const committerId = committerEmail ? (userIdMap[committerEmail.toLowerCase()] || this.config.userId) : undefined; + result.push({ + sha: c.sha, + files: [], + message: c.commit.message || undefined, + authorEmail, + authorLogin: c.author?.login || undefined, + authorName: c.commit.author?.name || undefined, + authorId, + committerEmail, + committerLogin: c.committer?.login || undefined, + committerName: c.commit.committer?.name || undefined, + committerId, + timestamp: c.commit.author?.date || c.commit.committer?.date || undefined, + }); + } + return result; + } /** * Use `git log` to build a map of file path → last commit author email. * Runs a single git command for all files to stay efficient. @@ -63293,10 +63345,12 @@ class PayloadBuilder { for (const file of files) { const content = file.content || `File: ${file.path} (${file.size} bytes)`; const userId = file.authorId || this.config.userId; + const userEmail = file.authorEmail || undefined; const singleCTP = this.createContentToProcess(file, conversationId, seqNum); const singleItem = { contentToProcess: singleCTP, userId, + userEmail, requestId: crypto.randomUUID(), }; const itemSize = JSON.stringify(singleItem).length; @@ -63315,6 +63369,7 @@ class PayloadBuilder { allItems.push({ contentToProcess: chunkCTP, userId, + userEmail, requestId: crypto.randomUUID(), }); seqNum++; @@ -63508,6 +63563,7 @@ class PayloadBuilder { return { contentToProcess: ctp, userId: commitGroup.authorId || this.config.userId, + userEmail: commitGroup.authorEmail || undefined, requestId: crypto.randomUUID(), }; } @@ -63704,6 +63760,7 @@ function tryParseWorkflowRepoFromEnv() { + class FullScanService { config; fileProcessor; @@ -63800,12 +63857,78 @@ class FullScanService { this.logger.info(`Tenant PS returned ${tenantPsResponse.data.value.length} scope(s). Grouping files by user for per-user PS + PCA.`); await this.processFilesByUser(allFiles, prInfo, failedPayloads, psRequest, userPsDeniedCache, userPsCache); } + // Process every git commit as well + await this.processCommitsForFullScan(prInfo, failedPayloads, psRequest, userPsDeniedCache, userPsCache); // Write state marker if (stateInfo) { await this.writeStateMarker(stateInfo); } return fullScanFileCount; } + /** + * Fetch all repo commits and send each through the PCA / contentActivities + * pipeline, mirroring how the diff path handles commit-level requests. + */ + async processCommitsForFullScan(prInfo, failedPayloads, psRequest, userPsDeniedCache, userPsCache) { + const commitGroups = await this.fileProcessor.getAllRepoCommits(); + if (commitGroups.length === 0) { + this.logger.info('No commits to process during full scan'); + return; + } + this.logger.info(`Full scan: processing ${commitGroups.length} commit(s)`); + for (const commitGroup of commitGroups) { + const commitUserId = commitGroup.authorId || this.config.userId; + const commitIdentifier = `commit:${commitGroup.sha}`; + // Check user PS cache + if (userPsDeniedCache.has(commitUserId)) { + this.logger.warn(`Skipping commit ${commitGroup.sha} — user ${commitUserId} cached 401.`); + await this.sendCommitContentActivity(commitGroup, prInfo, failedPayloads); + continue; + } + let userPsResponse = userPsCache.get(commitUserId); + if (!userPsResponse) { + userPsResponse = await this.purviewClient.searchUserProtectionScope(commitUserId, psRequest); + if (userPsResponse.success) { + userPsCache.set(commitUserId, userPsResponse); + } + } + if (!userPsResponse.success) { + this.logger.error(`User PS failed for commit ${commitGroup.sha}, user ${commitUserId}: ${userPsResponse.error}`); + failedPayloads.push(`ps-fullscan-commit-${commitGroup.sha}`); + if (userPsResponse.statusCode === 401) { + userPsDeniedCache.add(commitUserId); + } + await this.sendCommitContentActivity(commitGroup, prInfo, failedPayloads); + continue; + } + if (!userPsResponse.data?.value || userPsResponse.data.value.length === 0) { + this.logger.warn(`No scopes for commit ${commitGroup.sha}, user ${commitUserId}. Falling back to contentActivities.`); + await this.sendCommitContentActivity(commitGroup, prInfo, failedPayloads); + continue; + } + // Send via PCA batch + const conversationId = external_crypto_.randomUUID() + '@GA'; + const pcaItem = this.payloadBuilder.buildCommitProcessContentBatchItem(commitGroup, conversationId, 0); + const pcaBatch = { processContentRequests: [pcaItem] }; + const pcaResult = await this.purviewClient.processContentAsync(pcaBatch); + if (!pcaResult.success) { + this.logger.error(`PCA failed for commit ${commitGroup.sha}: ${pcaResult.error}. Falling back to contentActivities.`); + failedPayloads.push(`pca-fullscan-commit-${commitGroup.sha}`); + await this.sendCommitContentActivity(commitGroup, prInfo, failedPayloads); + } + else { + this.logger.info(`Full scan: PCA completed for ${commitIdentifier}`); + } + } + } + async sendCommitContentActivity(commitGroup, prInfo, failedPayloads) { + const req = this.payloadBuilder.buildCommitUploadSignalRequest(commitGroup, prInfo); + const result = await this.purviewClient.uploadSignal(req); + if (!result.success) { + this.logger.error(`ContentActivities upload failed for commit ${commitGroup.sha}: ${result.error}`); + failedPayloads.push(`ca-fullscan-commit-${commitGroup.sha}`); + } + } async resolveDefaultBranch(token, owner, repo) { try { const octokit = getOctokit(token); @@ -64691,6 +64814,7 @@ async function validateInputs() { // Get optional inputs const filePatterns = getInput('file-patterns') || '**'; const excludePatternsRaw = getInput('exclude-patterns') || ''; + const userExcludePatterns = excludePatternsRaw.split(',').map(p => p.trim()).filter(Boolean); const maxFileSize = parseInt(getInput('max-file-size') || '10485760', 10); const debug = getBooleanInput('debug'); // (stateRepoBranch and stateRepoToken were read earlier, before users.json loading) @@ -64719,7 +64843,7 @@ async function validateInputs() { purviewAccountName, purviewEndpoint, filePatterns: filePatterns.split(',').map(p => p.trim()).filter(Boolean), - excludePatterns: excludePatternsRaw.split(',').map(p => p.trim()).filter(Boolean), + excludePatterns: [...new Set(['**/.git/**', ...userExcludePatterns])], maxFileSize, debug, repository, diff --git a/dist/payload/PayloadBuilder.d.ts.map b/dist/payload/PayloadBuilder.d.ts.map index f0867ed..946bcfc 100644 --- a/dist/payload/PayloadBuilder.d.ts.map +++ b/dist/payload/PayloadBuilder.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"payloadBuilder.d.ts","sourceRoot":"","sources":["../../src/payload/payloadBuilder.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,mBAAmB,EAAE,QAAQ,EAAe,MAAM,EAAE,uBAAuB,EAAE,wBAAwB,EAAE,eAAe,EAA6B,0BAA0B,EAAE,yBAAyB,EAAE,qBAAqB,EAAE,gBAAgB,EAAE,gBAAgB,EAAiB,YAAY,EAAE,cAAc,EAAiB,WAAW,EAA4C,MAAM,iBAAiB,CAAC;AAGrb,qBAAa,cAAc;IASb,OAAO,CAAC,QAAQ,CAAC,MAAM;IARnC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAChC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAmB;IAClD,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAwB;IACtD,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,aAAa,CAA2C;IAChF,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAY;IAC3C,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAW;IAC7C,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,mBAAmB,CAAS;gBAEvB,MAAM,EAAE,YAAY;IAIjD,4BAA4B,IAAI,uBAAuB;IAkBvD,6BAA6B,CAAC,KAAK,EAAE,YAAY,EAAE,EAAE,aAAa,EAAE,wBAAwB,EAAE,MAAM,EAAE,MAAM,GAAG,eAAe;IAiG9H;;;;;;;OAOG;IACH,qBAAqB,CACnB,MAAM,EAAE,YAAY,EAAE,EACtB,eAAe,EAAE,QAAQ,EACzB,eAAe,EAAE,cAAc,GAC9B,gBAAgB;IAoDnB;;OAEG;IACH,iCAAiC,CAAC,IAAI,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,qBAAqB,EAAE;IA0BzH,OAAO,CAAC,aAAa;IAerB,wBAAwB,CAAC,KAAK,EAAE,YAAY,EAAE,EAAE,MAAM,EAAE,MAAM,GAAG,mBAAmB,EAAE;IAiDtF,+BAA+B,CAAC,KAAK,EAAE,YAAY,EAAE,GAAG,0BAA0B,EAAE;IA8DpF,OAAO,CAAC,sBAAsB;IA4D9B;;OAEG;IACH,OAAO,CAAC,sBAAsB;IA+B9B;;OAEG;IACH,2BAA2B,CAAC,WAAW,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,GAAG,gBAAgB;IAuDvH;;OAEG;IACH,gCAAgC,CAAC,WAAW,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,GAAG,qBAAqB;IAKjI;;OAEG;IACH,8BAA8B,CAAC,WAAW,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,GAAG,mBAAmB;IAe7F;;OAEG;IACH,kCAAkC,CAAC,WAAW,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,GAAG,yBAAyB;CASxI"} \ No newline at end of file +{"version":3,"file":"payloadBuilder.d.ts","sourceRoot":"","sources":["../../src/payload/payloadBuilder.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,mBAAmB,EAAE,QAAQ,EAAe,MAAM,EAAE,uBAAuB,EAAE,wBAAwB,EAAE,eAAe,EAA6B,0BAA0B,EAAE,yBAAyB,EAAE,qBAAqB,EAAE,gBAAgB,EAAE,gBAAgB,EAAiB,YAAY,EAAE,cAAc,EAAiB,WAAW,EAA4C,MAAM,iBAAiB,CAAC;AAGrb,qBAAa,cAAc;IASb,OAAO,CAAC,QAAQ,CAAC,MAAM;IARnC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAChC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAmB;IAClD,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAwB;IACtD,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,aAAa,CAA2C;IAChF,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAY;IAC3C,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAW;IAC7C,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,mBAAmB,CAAS;gBAEvB,MAAM,EAAE,YAAY;IAIjD,4BAA4B,IAAI,uBAAuB;IAkBvD,6BAA6B,CAAC,KAAK,EAAE,YAAY,EAAE,EAAE,aAAa,EAAE,wBAAwB,EAAE,MAAM,EAAE,MAAM,GAAG,eAAe;IAiG9H;;;;;;;OAOG;IACH,qBAAqB,CACnB,MAAM,EAAE,YAAY,EAAE,EACtB,eAAe,EAAE,QAAQ,EACzB,eAAe,EAAE,cAAc,GAC9B,gBAAgB;IAoDnB;;OAEG;IACH,iCAAiC,CAAC,IAAI,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,qBAAqB,EAAE;IA0BzH,OAAO,CAAC,aAAa;IAerB,wBAAwB,CAAC,KAAK,EAAE,YAAY,EAAE,EAAE,MAAM,EAAE,MAAM,GAAG,mBAAmB,EAAE;IAiDtF,+BAA+B,CAAC,KAAK,EAAE,YAAY,EAAE,GAAG,0BAA0B,EAAE;IAiEpF,OAAO,CAAC,sBAAsB;IA4D9B;;OAEG;IACH,OAAO,CAAC,sBAAsB;IA+B9B;;OAEG;IACH,2BAA2B,CAAC,WAAW,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,GAAG,gBAAgB;IAuDvH;;OAEG;IACH,gCAAgC,CAAC,WAAW,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,GAAG,qBAAqB;IAKjI;;OAEG;IACH,8BAA8B,CAAC,WAAW,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,GAAG,mBAAmB;IAe7F;;OAEG;IACH,kCAAkC,CAAC,WAAW,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,GAAG,yBAAyB;CAUxI"} \ No newline at end of file diff --git a/dist/payload/PayloadBuilder.js b/dist/payload/PayloadBuilder.js index 66fc4dd..cdcd240 100644 --- a/dist/payload/PayloadBuilder.js +++ b/dist/payload/PayloadBuilder.js @@ -248,10 +248,12 @@ export class PayloadBuilder { for (const file of files) { const content = file.content || `File: ${file.path} (${file.size} bytes)`; const userId = file.authorId || this.config.userId; + const userEmail = file.authorEmail || undefined; const singleCTP = this.createContentToProcess(file, conversationId, seqNum); const singleItem = { contentToProcess: singleCTP, userId, + userEmail, requestId: crypto.randomUUID(), }; const itemSize = JSON.stringify(singleItem).length; @@ -270,6 +272,7 @@ export class PayloadBuilder { allItems.push({ contentToProcess: chunkCTP, userId, + userEmail, requestId: crypto.randomUUID(), }); seqNum++; @@ -463,6 +466,7 @@ export class PayloadBuilder { return { contentToProcess: ctp, userId: commitGroup.authorId || this.config.userId, + userEmail: commitGroup.authorEmail || undefined, requestId: crypto.randomUUID(), }; } diff --git a/dist/payload/PayloadBuilder.js.map b/dist/payload/PayloadBuilder.js.map index 78dccd9..735ddb7 100644 --- a/dist/payload/PayloadBuilder.js.map +++ b/dist/payload/PayloadBuilder.js.map @@ -1 +1 @@ -{"version":3,"file":"payloadBuilder.js","sourceRoot":"","sources":["../../src/payload/payloadBuilder.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"payloadBuilder.js","sourceRoot":"","sources":["../../src/payload/payloadBuilder.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/dist/runner/fullScanService.d.ts b/dist/runner/fullScanService.d.ts index 0abf9bf..030d73a 100644 --- a/dist/runner/fullScanService.d.ts +++ b/dist/runner/fullScanService.d.ts @@ -22,6 +22,12 @@ export declare class FullScanService { * Performs a full repository scan when it's the first run */ performFullScan(stateInfo: StateTrackingInfo | undefined, failedPayloads: string[], prInfo: PrInfo, userPsDeniedCache: Set, userPsCache: Map>): Promise; + /** + * Fetch all repo commits and send each through the PCA / contentActivities + * pipeline, mirroring how the diff path handles commit-level requests. + */ + private processCommitsForFullScan; + private sendCommitContentActivity; private resolveDefaultBranch; private ensureBranchExists; private detectFirstRun; diff --git a/dist/runner/fullScanService.d.ts.map b/dist/runner/fullScanService.d.ts.map index 3b2bec3..c9d84d0 100644 --- a/dist/runner/fullScanService.d.ts.map +++ b/dist/runner/fullScanService.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"fullScanService.d.ts","sourceRoot":"","sources":["../../src/runner/fullScanService.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAgB,iBAAiB,EAAE,WAAW,EAAE,wBAAwB,EAAE,MAAM,EAA2B,MAAM,iBAAiB,CAAC;AACxJ,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACtD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAK3D,qBAAa,eAAe;IAKxB,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,aAAa;IAC9B,OAAO,CAAC,QAAQ,CAAC,aAAa;IAC9B,OAAO,CAAC,QAAQ,CAAC,cAAc;IAPjC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAChC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAe;gBAGzB,MAAM,EAAE,YAAY,EACpB,aAAa,EAAE,aAAa,EAC5B,aAAa,EAAE,aAAa,EAC5B,cAAc,EAAE,cAAc;IAMjD;;OAEG;IACG,mCAAmC,IAAI,OAAO,CAAC;QACnD,oBAAoB,EAAE,OAAO,CAAC;QAC9B,QAAQ,EAAE,OAAO,CAAC;QAClB,SAAS,CAAC,EAAE,iBAAiB,CAAA;KAC9B,CAAC;IAmEF;;OAEG;IACG,eAAe,CACnB,SAAS,EAAE,iBAAiB,GAAG,SAAS,EACxC,cAAc,EAAE,MAAM,EAAE,EACxB,MAAM,EAAE,MAAM,EACd,iBAAiB,EAAE,GAAG,CAAC,MAAM,CAAC,EAC9B,WAAW,EAAE,GAAG,CAAC,MAAM,EAAE,WAAW,CAAC,wBAAwB,CAAC,CAAC,GAC9D,OAAO,CAAC,MAAM,CAAC;YA2CJ,oBAAoB;YAYpB,kBAAkB;YAkClB,cAAc;YAwBd,iCAAiC;YA6FjC,kBAAkB;YAkElB,gBAAgB;YAuBhB,qBAAqB;CAUpC"} \ No newline at end of file +{"version":3,"file":"fullScanService.d.ts","sourceRoot":"","sources":["../../src/runner/fullScanService.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,YAAY,EAAgB,iBAAiB,EAAE,WAAW,EAAE,wBAAwB,EAAE,MAAM,EAAoE,MAAM,iBAAiB,CAAC;AACjM,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACtD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAK3D,qBAAa,eAAe;IAKxB,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,aAAa;IAC9B,OAAO,CAAC,QAAQ,CAAC,aAAa;IAC9B,OAAO,CAAC,QAAQ,CAAC,cAAc;IAPjC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAChC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAe;gBAGzB,MAAM,EAAE,YAAY,EACpB,aAAa,EAAE,aAAa,EAC5B,aAAa,EAAE,aAAa,EAC5B,cAAc,EAAE,cAAc;IAMjD;;OAEG;IACG,mCAAmC,IAAI,OAAO,CAAC;QACnD,oBAAoB,EAAE,OAAO,CAAC;QAC9B,QAAQ,EAAE,OAAO,CAAC;QAClB,SAAS,CAAC,EAAE,iBAAiB,CAAA;KAC9B,CAAC;IAmEF;;OAEG;IACG,eAAe,CACnB,SAAS,EAAE,iBAAiB,GAAG,SAAS,EACxC,cAAc,EAAE,MAAM,EAAE,EACxB,MAAM,EAAE,MAAM,EACd,iBAAiB,EAAE,GAAG,CAAC,MAAM,CAAC,EAC9B,WAAW,EAAE,GAAG,CAAC,MAAM,EAAE,WAAW,CAAC,wBAAwB,CAAC,CAAC,GAC9D,OAAO,CAAC,MAAM,CAAC;IA8ClB;;;OAGG;YACW,yBAAyB;YAiEzB,yBAAyB;YASzB,oBAAoB;YAYpB,kBAAkB;YAkClB,cAAc;YAwBd,iCAAiC;YA6FjC,kBAAkB;YAkElB,gBAAgB;YAuBhB,qBAAqB;CAUpC"} \ No newline at end of file diff --git a/dist/runner/fullScanService.js b/dist/runner/fullScanService.js index 1b8a77b..2d834d0 100644 --- a/dist/runner/fullScanService.js +++ b/dist/runner/fullScanService.js @@ -1,3 +1,4 @@ +import * as crypto from 'crypto'; import * as github from '@actions/github'; import { Logger } from '../utils/logger'; import { StateService } from '../state/stateService'; @@ -98,12 +99,78 @@ export class FullScanService { this.logger.info(`Tenant PS returned ${tenantPsResponse.data.value.length} scope(s). Grouping files by user for per-user PS + PCA.`); await this.processFilesByUser(allFiles, prInfo, failedPayloads, psRequest, userPsDeniedCache, userPsCache); } + // Process every git commit as well + await this.processCommitsForFullScan(prInfo, failedPayloads, psRequest, userPsDeniedCache, userPsCache); // Write state marker if (stateInfo) { await this.writeStateMarker(stateInfo); } return fullScanFileCount; } + /** + * Fetch all repo commits and send each through the PCA / contentActivities + * pipeline, mirroring how the diff path handles commit-level requests. + */ + async processCommitsForFullScan(prInfo, failedPayloads, psRequest, userPsDeniedCache, userPsCache) { + const commitGroups = await this.fileProcessor.getAllRepoCommits(); + if (commitGroups.length === 0) { + this.logger.info('No commits to process during full scan'); + return; + } + this.logger.info(`Full scan: processing ${commitGroups.length} commit(s)`); + for (const commitGroup of commitGroups) { + const commitUserId = commitGroup.authorId || this.config.userId; + const commitIdentifier = `commit:${commitGroup.sha}`; + // Check user PS cache + if (userPsDeniedCache.has(commitUserId)) { + this.logger.warn(`Skipping commit ${commitGroup.sha} — user ${commitUserId} cached 401.`); + await this.sendCommitContentActivity(commitGroup, prInfo, failedPayloads); + continue; + } + let userPsResponse = userPsCache.get(commitUserId); + if (!userPsResponse) { + userPsResponse = await this.purviewClient.searchUserProtectionScope(commitUserId, psRequest); + if (userPsResponse.success) { + userPsCache.set(commitUserId, userPsResponse); + } + } + if (!userPsResponse.success) { + this.logger.error(`User PS failed for commit ${commitGroup.sha}, user ${commitUserId}: ${userPsResponse.error}`); + failedPayloads.push(`ps-fullscan-commit-${commitGroup.sha}`); + if (userPsResponse.statusCode === 401) { + userPsDeniedCache.add(commitUserId); + } + await this.sendCommitContentActivity(commitGroup, prInfo, failedPayloads); + continue; + } + if (!userPsResponse.data?.value || userPsResponse.data.value.length === 0) { + this.logger.warn(`No scopes for commit ${commitGroup.sha}, user ${commitUserId}. Falling back to contentActivities.`); + await this.sendCommitContentActivity(commitGroup, prInfo, failedPayloads); + continue; + } + // Send via PCA batch + const conversationId = crypto.randomUUID() + '@GA'; + const pcaItem = this.payloadBuilder.buildCommitProcessContentBatchItem(commitGroup, conversationId, 0); + const pcaBatch = { processContentRequests: [pcaItem] }; + const pcaResult = await this.purviewClient.processContentAsync(pcaBatch); + if (!pcaResult.success) { + this.logger.error(`PCA failed for commit ${commitGroup.sha}: ${pcaResult.error}. Falling back to contentActivities.`); + failedPayloads.push(`pca-fullscan-commit-${commitGroup.sha}`); + await this.sendCommitContentActivity(commitGroup, prInfo, failedPayloads); + } + else { + this.logger.info(`Full scan: PCA completed for ${commitIdentifier}`); + } + } + } + async sendCommitContentActivity(commitGroup, prInfo, failedPayloads) { + const req = this.payloadBuilder.buildCommitUploadSignalRequest(commitGroup, prInfo); + const result = await this.purviewClient.uploadSignal(req); + if (!result.success) { + this.logger.error(`ContentActivities upload failed for commit ${commitGroup.sha}: ${result.error}`); + failedPayloads.push(`ca-fullscan-commit-${commitGroup.sha}`); + } + } async resolveDefaultBranch(token, owner, repo) { try { const octokit = github.getOctokit(token); diff --git a/dist/runner/fullScanService.js.map b/dist/runner/fullScanService.js.map index 841e4c1..fcd4b6b 100644 --- a/dist/runner/fullScanService.js.map +++ b/dist/runner/fullScanService.js.map @@ -1 +1 @@ -{"version":3,"file":"fullScanService.js","sourceRoot":"","sources":["../../src/runner/fullScanService.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"fullScanService.js","sourceRoot":"","sources":["../../src/runner/fullScanService.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/dist/validation/InputValidator.d.ts.map b/dist/validation/InputValidator.d.ts.map index 96ab55b..3b29304 100644 --- a/dist/validation/InputValidator.d.ts.map +++ b/dist/validation/InputValidator.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"inputValidator.d.ts","sourceRoot":"","sources":["../../src/validation/inputValidator.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,YAAY,EAAe,MAAM,iBAAiB,CAAC;AAI5D,wBAAsB,cAAc,IAAI,OAAO,CAAC,YAAY,CAAC,CA4M5D"} \ No newline at end of file +{"version":3,"file":"inputValidator.d.ts","sourceRoot":"","sources":["../../src/validation/inputValidator.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,YAAY,EAAe,MAAM,iBAAiB,CAAC;AAI5D,wBAAsB,cAAc,IAAI,OAAO,CAAC,YAAY,CAAC,CA6M5D"} \ No newline at end of file diff --git a/dist/validation/InputValidator.js b/dist/validation/InputValidator.js index 522601b..64cf011 100644 --- a/dist/validation/InputValidator.js +++ b/dist/validation/InputValidator.js @@ -117,6 +117,7 @@ export async function validateInputs() { // Get optional inputs const filePatterns = core.getInput('file-patterns') || '**'; const excludePatternsRaw = core.getInput('exclude-patterns') || ''; + const userExcludePatterns = excludePatternsRaw.split(',').map(p => p.trim()).filter(Boolean); const maxFileSize = parseInt(core.getInput('max-file-size') || '10485760', 10); const debug = core.getBooleanInput('debug'); // (stateRepoBranch and stateRepoToken were read earlier, before users.json loading) @@ -145,7 +146,7 @@ export async function validateInputs() { purviewAccountName, purviewEndpoint, filePatterns: filePatterns.split(',').map(p => p.trim()).filter(Boolean), - excludePatterns: excludePatternsRaw.split(',').map(p => p.trim()).filter(Boolean), + excludePatterns: [...new Set(['**/.git/**', ...userExcludePatterns])], maxFileSize, debug, repository, diff --git a/dist/validation/InputValidator.js.map b/dist/validation/InputValidator.js.map index 9a1b47d..f1b585d 100644 --- a/dist/validation/InputValidator.js.map +++ b/dist/validation/InputValidator.js.map @@ -1 +1 @@ -{"version":3,"file":"inputValidator.js","sourceRoot":"","sources":["../../src/validation/inputValidator.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"inputValidator.js","sourceRoot":"","sources":["../../src/validation/inputValidator.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/src/config/types.ts b/src/config/types.ts index 5fdadbf..92579a3 100644 --- a/src/config/types.ts +++ b/src/config/types.ts @@ -92,6 +92,7 @@ export interface ProcessContentBatchRequest { export interface ProcessContentRequestItem { contentToProcess: ContentToProcess; userId?: string; + userEmail?: string; requestId: string; } diff --git a/src/file/fileProcessor.ts b/src/file/fileProcessor.ts index e4eba11..f7ac463 100644 --- a/src/file/fileProcessor.ts +++ b/src/file/fileProcessor.ts @@ -240,6 +240,64 @@ export class FileProcessor { return result; } + /** + * Fetch recent commits for the default branch (used during full scans). + * Returns CommitFiles[] with author/committer metadata populated. + */ + async getAllRepoCommits(): Promise { + const owner = this.config.repository.owner; + const repo = this.config.repository.repo; + + this.logger.info('Fetching recent commits for full scan'); + const { data: commits } = await this.octokit.rest.repos.listCommits({ + owner, + repo, + per_page: 100, + }); + + if (commits.length === 0) { + this.logger.info('No commits found in repository'); + return []; + } + + this.logger.info(`Found ${commits.length} commit(s) for full scan`); + + // Resolve author/committer emails to user IDs + const allEmails = new Set(); + for (const c of commits) { + const authorEmail = c.commit.author?.email; + const committerEmail = c.commit.committer?.email; + if (authorEmail) allEmails.add(authorEmail.toLowerCase()); + if (committerEmail) allEmails.add(committerEmail.toLowerCase()); + } + const userIdMap = await this.resolveUserIds(allEmails); + + const result: CommitFiles[] = []; + for (const c of commits) { + const authorEmail = c.commit.author?.email || undefined; + const committerEmail = c.commit.committer?.email || undefined; + const authorId = authorEmail ? (userIdMap[authorEmail.toLowerCase()] || this.config.userId) : undefined; + const committerId = committerEmail ? (userIdMap[committerEmail.toLowerCase()] || this.config.userId) : undefined; + + result.push({ + sha: c.sha, + files: [], + message: c.commit.message || undefined, + authorEmail, + authorLogin: c.author?.login || undefined, + authorName: c.commit.author?.name || undefined, + authorId, + committerEmail, + committerLogin: c.committer?.login || undefined, + committerName: c.commit.committer?.name || undefined, + committerId, + timestamp: c.commit.author?.date || c.commit.committer?.date || undefined, + }); + } + + return result; + } + /** * Use `git log` to build a map of file path → last commit author email. * Runs a single git command for all files to stay efficient. diff --git a/src/payload/payloadBuilder.ts b/src/payload/payloadBuilder.ts index 8081553..acdb982 100644 --- a/src/payload/payloadBuilder.ts +++ b/src/payload/payloadBuilder.ts @@ -294,10 +294,12 @@ export class PayloadBuilder { for (const file of files) { const content = file.content || `File: ${file.path} (${file.size} bytes)`; const userId = file.authorId || this.config.userId; + const userEmail = file.authorEmail || undefined; const singleCTP = this.createContentToProcess(file, conversationId, seqNum); const singleItem: ProcessContentRequestItem = { contentToProcess: singleCTP, userId, + userEmail, requestId: crypto.randomUUID(), }; const itemSize = JSON.stringify(singleItem).length; @@ -317,6 +319,7 @@ export class PayloadBuilder { allItems.push({ contentToProcess: chunkCTP, userId, + userEmail, requestId: crypto.randomUUID(), }); seqNum++; @@ -534,6 +537,7 @@ export class PayloadBuilder { return { contentToProcess: ctp, userId: commitGroup.authorId || this.config.userId, + userEmail: commitGroup.authorEmail || undefined, requestId: crypto.randomUUID(), }; } diff --git a/src/runner/fullScanService.ts b/src/runner/fullScanService.ts index 712f415..d82f057 100644 --- a/src/runner/fullScanService.ts +++ b/src/runner/fullScanService.ts @@ -1,5 +1,6 @@ +import * as crypto from 'crypto'; import * as github from '@actions/github'; -import { ActionConfig, FileMetadata, StateTrackingInfo, ApiResponse, ProtectionScopesResponse, PrInfo, ProtectionScopesRequest } from '../config/types'; +import { ActionConfig, FileMetadata, StateTrackingInfo, ApiResponse, ProtectionScopesResponse, PrInfo, ProtectionScopesRequest, CommitFiles, ProcessContentBatchRequest } from '../config/types'; import { FileProcessor } from '../file/fileProcessor'; import { PurviewClient } from '../api/purviewClient'; import { PayloadBuilder } from '../payload/payloadBuilder'; @@ -139,6 +140,9 @@ export class FullScanService { await this.processFilesByUser(allFiles, prInfo, failedPayloads, psRequest, userPsDeniedCache, userPsCache); } + // Process every git commit as well + await this.processCommitsForFullScan(prInfo, failedPayloads, psRequest, userPsDeniedCache, userPsCache); + // Write state marker if (stateInfo) { await this.writeStateMarker(stateInfo); @@ -147,6 +151,84 @@ export class FullScanService { return fullScanFileCount; } + /** + * Fetch all repo commits and send each through the PCA / contentActivities + * pipeline, mirroring how the diff path handles commit-level requests. + */ + private async processCommitsForFullScan( + prInfo: PrInfo, + failedPayloads: string[], + psRequest: ProtectionScopesRequest, + userPsDeniedCache: Set, + userPsCache: Map> + ): Promise { + const commitGroups = await this.fileProcessor.getAllRepoCommits(); + if (commitGroups.length === 0) { + this.logger.info('No commits to process during full scan'); + return; + } + this.logger.info(`Full scan: processing ${commitGroups.length} commit(s)`); + + for (const commitGroup of commitGroups) { + const commitUserId = commitGroup.authorId || this.config.userId; + const commitIdentifier = `commit:${commitGroup.sha}`; + + // Check user PS cache + if (userPsDeniedCache.has(commitUserId)) { + this.logger.warn(`Skipping commit ${commitGroup.sha} — user ${commitUserId} cached 401.`); + await this.sendCommitContentActivity(commitGroup, prInfo, failedPayloads); + continue; + } + + let userPsResponse = userPsCache.get(commitUserId); + if (!userPsResponse) { + userPsResponse = await this.purviewClient.searchUserProtectionScope(commitUserId, psRequest); + if (userPsResponse.success) { + userPsCache.set(commitUserId, userPsResponse); + } + } + + if (!userPsResponse.success) { + this.logger.error(`User PS failed for commit ${commitGroup.sha}, user ${commitUserId}: ${userPsResponse.error}`); + failedPayloads.push(`ps-fullscan-commit-${commitGroup.sha}`); + if (userPsResponse.statusCode === 401) { + userPsDeniedCache.add(commitUserId); + } + await this.sendCommitContentActivity(commitGroup, prInfo, failedPayloads); + continue; + } + + if (!userPsResponse.data?.value || userPsResponse.data.value.length === 0) { + this.logger.warn(`No scopes for commit ${commitGroup.sha}, user ${commitUserId}. Falling back to contentActivities.`); + await this.sendCommitContentActivity(commitGroup, prInfo, failedPayloads); + continue; + } + + // Send via PCA batch + const conversationId = crypto.randomUUID() + '@GA'; + const pcaItem = this.payloadBuilder.buildCommitProcessContentBatchItem(commitGroup, conversationId, 0); + const pcaBatch: ProcessContentBatchRequest = { processContentRequests: [pcaItem] }; + const pcaResult = await this.purviewClient.processContentAsync(pcaBatch); + + if (!pcaResult.success) { + this.logger.error(`PCA failed for commit ${commitGroup.sha}: ${pcaResult.error}. Falling back to contentActivities.`); + failedPayloads.push(`pca-fullscan-commit-${commitGroup.sha}`); + await this.sendCommitContentActivity(commitGroup, prInfo, failedPayloads); + } else { + this.logger.info(`Full scan: PCA completed for ${commitIdentifier}`); + } + } + } + + private async sendCommitContentActivity(commitGroup: CommitFiles, prInfo: PrInfo, failedPayloads: string[]): Promise { + const req = this.payloadBuilder.buildCommitUploadSignalRequest(commitGroup, prInfo); + const result = await this.purviewClient.uploadSignal(req); + if (!result.success) { + this.logger.error(`ContentActivities upload failed for commit ${commitGroup.sha}: ${result.error}`); + failedPayloads.push(`ca-fullscan-commit-${commitGroup.sha}`); + } + } + private async resolveDefaultBranch(token: string, owner: string, repo: string): Promise { try { const octokit = github.getOctokit(token); diff --git a/src/validation/inputValidator.ts b/src/validation/inputValidator.ts index a3a4359..72b001e 100644 --- a/src/validation/inputValidator.ts +++ b/src/validation/inputValidator.ts @@ -154,6 +154,7 @@ export async function validateInputs(): Promise { // Get optional inputs const filePatterns = core.getInput('file-patterns') || '**'; const excludePatternsRaw = core.getInput('exclude-patterns') || ''; + const userExcludePatterns = excludePatternsRaw.split(',').map(p => p.trim()).filter(Boolean); const maxFileSize = parseInt(core.getInput('max-file-size') || '10485760', 10); const debug = core.getBooleanInput('debug'); @@ -187,7 +188,7 @@ export async function validateInputs(): Promise { purviewAccountName, purviewEndpoint, filePatterns: filePatterns.split(',').map(p => p.trim()).filter(Boolean), - excludePatterns: excludePatternsRaw.split(',').map(p => p.trim()).filter(Boolean), + excludePatterns: [...new Set(['**/.git/**', ...userExcludePatterns])], maxFileSize, debug, repository, From 16b2cc562751e33b962e88bc2b56d4898a23d5e8 Mon Sep 17 00:00:00 2001 From: Rishabh Chawla Date: Wed, 1 Apr 2026 18:25:04 -0700 Subject: [PATCH 09/20] Some more updates --- dist/file/FileProcessor.d.ts | 6 +- dist/file/FileProcessor.d.ts.map | 2 +- dist/file/FileProcessor.js | 22 +++- dist/file/FileProcessor.js.map | 2 +- dist/index.js | 122 +++++++++++++++++++---- dist/payload/PayloadBuilder.d.ts | 3 + dist/payload/PayloadBuilder.d.ts.map | 2 +- dist/payload/PayloadBuilder.js | 50 +++++++++- dist/payload/PayloadBuilder.js.map | 2 +- dist/runner/GitHubActionsRunner.d.ts | 8 ++ dist/runner/GitHubActionsRunner.d.ts.map | 2 +- dist/runner/GitHubActionsRunner.js | 25 ++++- dist/runner/GitHubActionsRunner.js.map | 2 +- dist/runner/fullScanService.d.ts | 7 +- dist/runner/fullScanService.d.ts.map | 2 +- dist/runner/fullScanService.js | 25 +++-- dist/runner/fullScanService.js.map | 2 +- src/file/fileProcessor.ts | 22 +++- src/payload/payloadBuilder.ts | 55 +++++++++- src/runner/fullScanService.ts | 29 ++++-- src/runner/gitHubActionsRunner.ts | 26 ++++- 21 files changed, 343 insertions(+), 73 deletions(-) diff --git a/dist/file/FileProcessor.d.ts b/dist/file/FileProcessor.d.ts index 60fb853..e8e6e7d 100644 --- a/dist/file/FileProcessor.d.ts +++ b/dist/file/FileProcessor.d.ts @@ -24,9 +24,11 @@ export declare class FileProcessor { getAllRepoFiles(): Promise; /** * Fetch recent commits for the default branch (used during full scans). - * Returns CommitFiles[] with author/committer metadata populated. + * When `upToSha` is provided, only commits up to and including that SHA are + * returned (i.e. commits *before* the current event). The current event's + * commits are left for the diff path. */ - getAllRepoCommits(): Promise; + getAllRepoCommits(upToSha?: string): Promise; /** * Use `git log` to build a map of file path → last commit author email. * Runs a single git command for all files to stay efficient. diff --git a/dist/file/FileProcessor.d.ts.map b/dist/file/FileProcessor.d.ts.map index 902894f..128be9f 100644 --- a/dist/file/FileProcessor.d.ts.map +++ b/dist/file/FileProcessor.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"fileProcessor.d.ts","sourceRoot":"","sources":["../../src/file/fileProcessor.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAY9F,qBAAa,aAAa;IASZ,OAAO,CAAC,QAAQ,CAAC,MAAM;IARnC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAChC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAuC;IAC/D,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAgB;IAC9C,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAwB;IACpD,OAAO,CAAC,QAAQ,CAAuD;IACvE,2EAA2E;IAC3E,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAkC;gBAEtC,MAAM,EAAE,YAAY;IAQjD;;;;;;OAMG;YACW,cAAc;IA4E5B,OAAO,CAAC,eAAe;IASvB,OAAO,CAAC,iBAAiB;IAIzB,OAAO,CAAC,iBAAiB;IAuBnB,eAAe,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;IAepC,eAAe,IAAI,OAAO,CAAC,YAAY,EAAE,CAAC;IAuEhD;;;OAGG;IACG,iBAAiB,IAAI,OAAO,CAAC,WAAW,EAAE,CAAC;IAsDjD;;;OAGG;IACH,OAAO,CAAC,mBAAmB;IAwBrB,gBAAgB,IAAI,OAAO,CAAC,MAAM,CAAC;IAenC,SAAS,IAAI,OAAO,CAAC,MAAM,CAAC;YA8CpB,iBAAiB;IA2E/B;;;;OAIG;YACW,WAAW;IA6BzB;;;;OAIG;YACW,gBAAgB;IAsC9B;;;;OAIG;IACH,OAAO,CAAC,mBAAmB;IAiB3B;;;OAGG;IACH,OAAO,CAAC,YAAY;IAwEpB;;;;;OAKG;IACH,OAAO,CAAC,eAAe;IAmDvB,OAAO,CAAC,aAAa;IAOf,UAAU,IAAI,OAAO,CAAC,UAAU,EAAE,CAAC;IA8CnC,eAAe,IAAI,OAAO,CAAC,UAAU,EAAE,CAAC;IAyBxC,uBAAuB,CAAC,oBAAoB,CAAC,EAAE,MAAM,GAAG,IAAI,EAAE,iBAAiB,CAAC,EAAE,UAAU,EAAE,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;IAkDvH,kBAAkB,CAAC,oBAAoB,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC;YAKzE,mBAAmB;YA4BnB,oBAAoB;CAOnC"} \ No newline at end of file +{"version":3,"file":"fileProcessor.d.ts","sourceRoot":"","sources":["../../src/file/fileProcessor.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAY9F,qBAAa,aAAa;IASZ,OAAO,CAAC,QAAQ,CAAC,MAAM;IARnC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAChC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAuC;IAC/D,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAgB;IAC9C,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAwB;IACpD,OAAO,CAAC,QAAQ,CAAuD;IACvE,2EAA2E;IAC3E,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAkC;gBAEtC,MAAM,EAAE,YAAY;IAQjD;;;;;;OAMG;YACW,cAAc;IA4E5B,OAAO,CAAC,eAAe;IASvB,OAAO,CAAC,iBAAiB;IAIzB,OAAO,CAAC,iBAAiB;IAuBnB,eAAe,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;IAepC,eAAe,IAAI,OAAO,CAAC,YAAY,EAAE,CAAC;IA2EhD;;;;;OAKG;IACG,iBAAiB,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;IA4DjE;;;OAGG;IACH,OAAO,CAAC,mBAAmB;IAwBrB,gBAAgB,IAAI,OAAO,CAAC,MAAM,CAAC;IAenC,SAAS,IAAI,OAAO,CAAC,MAAM,CAAC;YA8CpB,iBAAiB;IA2E/B;;;;OAIG;YACW,WAAW;IA6BzB;;;;OAIG;YACW,gBAAgB;IAsC9B;;;;OAIG;IACH,OAAO,CAAC,mBAAmB;IAiB3B;;;OAGG;IACH,OAAO,CAAC,YAAY;IAwEpB;;;;;OAKG;IACH,OAAO,CAAC,eAAe;IAmDvB,OAAO,CAAC,aAAa;IAOf,UAAU,IAAI,OAAO,CAAC,UAAU,EAAE,CAAC;IA8CnC,eAAe,IAAI,OAAO,CAAC,UAAU,EAAE,CAAC;IAyBxC,uBAAuB,CAAC,oBAAoB,CAAC,EAAE,MAAM,GAAG,IAAI,EAAE,iBAAiB,CAAC,EAAE,UAAU,EAAE,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;IAkDvH,kBAAkB,CAAC,oBAAoB,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC;YAKzE,mBAAmB;YA4BnB,oBAAoB;CAOnC"} \ No newline at end of file diff --git a/dist/file/FileProcessor.js b/dist/file/FileProcessor.js index e6ac31c..26a4a5b 100644 --- a/dist/file/FileProcessor.js +++ b/dist/file/FileProcessor.js @@ -195,23 +195,35 @@ export class FileProcessor { if (authorEmail) { file.authorEmail = authorEmail; file.authorId = userIdMap[authorEmail.toLowerCase()] || this.config.userId; + // For full-scan files the last commit author doubles as committer + // so that AiAgentInfo is populated in the payload. + file.committerEmail = file.committerEmail || authorEmail; + file.committerId = file.committerId || file.authorId; } } return result; } /** * Fetch recent commits for the default branch (used during full scans). - * Returns CommitFiles[] with author/committer metadata populated. + * When `upToSha` is provided, only commits up to and including that SHA are + * returned (i.e. commits *before* the current event). The current event's + * commits are left for the diff path. */ - async getAllRepoCommits() { + async getAllRepoCommits(upToSha) { const owner = this.config.repository.owner; const repo = this.config.repository.repo; - this.logger.info('Fetching recent commits for full scan'); - const { data: commits } = await this.octokit.rest.repos.listCommits({ + this.logger.info(`Fetching recent commits for full scan${upToSha ? ` (up to ${upToSha})` : ''}`); + const listParams = { owner, repo, per_page: 100, - }); + }; + // When a boundary SHA is provided, ask the GitHub API to start listing + // from that SHA (inclusive), which excludes newer commits. + if (upToSha) { + listParams.sha = upToSha; + } + const { data: commits } = await this.octokit.rest.repos.listCommits(listParams); if (commits.length === 0) { this.logger.info('No commits found in repository'); return []; diff --git a/dist/file/FileProcessor.js.map b/dist/file/FileProcessor.js.map index 8795c68..d67b3d5 100644 --- a/dist/file/FileProcessor.js.map +++ b/dist/file/FileProcessor.js.map @@ -1 +1 @@ -{"version":3,"file":"fileProcessor.js","sourceRoot":"","sources":["../../src/file/fileProcessor.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"fileProcessor.js","sourceRoot":"","sources":["../../src/file/fileProcessor.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/dist/index.js b/dist/index.js index 062b87d..ac7e82c 100644 --- a/dist/index.js +++ b/dist/index.js @@ -62548,23 +62548,35 @@ class FileProcessor { if (authorEmail) { file.authorEmail = authorEmail; file.authorId = userIdMap[authorEmail.toLowerCase()] || this.config.userId; + // For full-scan files the last commit author doubles as committer + // so that AiAgentInfo is populated in the payload. + file.committerEmail = file.committerEmail || authorEmail; + file.committerId = file.committerId || file.authorId; } } return result; } /** * Fetch recent commits for the default branch (used during full scans). - * Returns CommitFiles[] with author/committer metadata populated. + * When `upToSha` is provided, only commits up to and including that SHA are + * returned (i.e. commits *before* the current event). The current event's + * commits are left for the diff path. */ - async getAllRepoCommits() { + async getAllRepoCommits(upToSha) { const owner = this.config.repository.owner; const repo = this.config.repository.repo; - this.logger.info('Fetching recent commits for full scan'); - const { data: commits } = await this.octokit.rest.repos.listCommits({ + this.logger.info(`Fetching recent commits for full scan${upToSha ? ` (up to ${upToSha})` : ''}`); + const listParams = { owner, repo, per_page: 100, - }); + }; + // When a boundary SHA is provided, ask the GitHub API to start listing + // from that SHA (inclusive), which excludes newer commits. + if (upToSha) { + listParams.sha = upToSha; + } + const { data: commits } = await this.octokit.rest.repos.listCommits(listParams); if (commits.length === 0) { this.logger.info('No commits found in repository'); return []; @@ -63106,6 +63118,8 @@ class PayloadBuilder { static appName = "GitHub"; static appVersion = "0.0.1"; static correlationIdSuffix = "@GA"; + /** When true, agent version is set to "fullscan" instead of the defaultUserId. */ + isFullScan = false; constructor(config) { this.config = config; this.logger = new logger_Logger('PayloadBuilder'); @@ -63412,10 +63426,12 @@ class PayloadBuilder { if (file.committerId || file.committerEmail) { agents.push({ identifier: file.committerId || file.committerEmail || '', - name: file.committerLogin || file.committerEmail || undefined, - version: usingDefaultUser ? this.config.userId : undefined, + name: file.committerEmail || undefined, + version: this.isFullScan ? 'fullscan' : (usingDefaultUser ? this.config.userId : undefined), }); } + const repoBaseUrl = `https://${PayloadBuilder.domain}/${this.config.repository.owner}/${this.config.repository.repo}`; + const fileUrl = `${repoBaseUrl}/blob/${this.config.repository.branch}/${file.path}`; const entry = { "@odata.type": "microsoft.graph.processConversationMetadata", identifier: file.path, @@ -63427,6 +63443,12 @@ class PayloadBuilder { createdDateTime: now, modifiedDateTime: now, content: fileContent, + accessedResources_v2: [{ + identifier: file.sha || file.path, + name: `${this.config.repository.repo}/${file.path}`, + url: fileUrl, + accessType: this.mapChangeTypeToAccessType(file.typeOfChange), + }], ...(agents.length > 0 ? { agents } : {}), }; return { @@ -63495,8 +63517,24 @@ class PayloadBuilder { if (commitGroup.committerId || commitGroup.committerEmail) { agents.push({ identifier: commitGroup.committerId || commitGroup.committerEmail || '', - name: commitGroup.committerLogin || commitGroup.committerEmail || undefined, - version: usingDefaultUser ? this.config.userId : undefined, + name: commitGroup.committerEmail || undefined, + version: this.isFullScan ? 'fullscan' : (usingDefaultUser ? this.config.userId : undefined), + }); + } + const repoBaseUrl = `https://${PayloadBuilder.domain}/${this.config.repository.owner}/${this.config.repository.repo}`; + const commitUrl = `${repoBaseUrl}/commit/${commitGroup.sha}`; + const accessedResources = [{ + identifier: commitGroup.sha, + name: `${this.config.repository.repo}/${commitIdentifier}`, + url: commitUrl, + accessType: 'write', + }]; + for (const file of commitGroup.files) { + accessedResources.push({ + identifier: file.sha || file.path, + name: `${this.config.repository.repo}/${file.path}`, + url: `${repoBaseUrl}/blob/${this.config.repository.branch}/${file.path}`, + accessType: this.mapChangeTypeToAccessType(file.typeOfChange), }); } const entry = { @@ -63510,6 +63548,7 @@ class PayloadBuilder { createdDateTime: commitGroup.timestamp || now, modifiedDateTime: commitGroup.timestamp || now, content: fileContent, + accessedResources_v2: accessedResources, ...(agents.length > 0 ? { agents } : {}), }; return { @@ -63567,6 +63606,21 @@ class PayloadBuilder { requestId: crypto.randomUUID(), }; } + mapChangeTypeToAccessType(typeOfChange) { + switch (typeOfChange) { + case 'added': + case 'copied': + return 'create'; + case 'removed': + return 'none'; + case 'modified': + case 'renamed': + case 'changed': + return 'write'; + default: + return 'write'; + } + } } //# sourceMappingURL=payloadBuilder.js.map ;// CONCATENATED MODULE: ./dist/utils/blockDetector.js @@ -63827,12 +63881,14 @@ class FullScanService { /** * Performs a full repository scan when it's the first run */ - async performFullScan(stateInfo, failedPayloads, prInfo, userPsDeniedCache, userPsCache) { + async performFullScan(stateInfo, failedPayloads, prInfo, userPsDeniedCache, userPsCache, currentEventSha) { this.logger.info(stateInfo ? 'First run detected; scanning full repository.' : 'State tracking disabled; scanning full repository.'); const allFiles = await this.fileProcessor.getAllRepoFiles(); const fullScanFileCount = allFiles.length; + // Mark payloads as full-scan so AiAgentInfo uses email + "fullscan" version + this.payloadBuilder.isFullScan = true; if (allFiles.length === 0) { this.logger.warn('No files found in repository for full scan'); return fullScanFileCount; @@ -63857,8 +63913,10 @@ class FullScanService { this.logger.info(`Tenant PS returned ${tenantPsResponse.data.value.length} scope(s). Grouping files by user for per-user PS + PCA.`); await this.processFilesByUser(allFiles, prInfo, failedPayloads, psRequest, userPsDeniedCache, userPsCache); } - // Process every git commit as well - await this.processCommitsForFullScan(prInfo, failedPayloads, psRequest, userPsDeniedCache, userPsCache); + // Process every git commit before the current event + await this.processCommitsForFullScan(prInfo, failedPayloads, psRequest, userPsDeniedCache, userPsCache, currentEventSha); + // Reset so subsequent diff-path payloads use normal agent version + this.payloadBuilder.isFullScan = false; // Write state marker if (stateInfo) { await this.writeStateMarker(stateInfo); @@ -63866,17 +63924,18 @@ class FullScanService { return fullScanFileCount; } /** - * Fetch all repo commits and send each through the PCA / contentActivities - * pipeline, mirroring how the diff path handles commit-level requests. + * Fetch repo commits *before* the current event boundary and send each + * through the PCA / contentActivities pipeline, mirroring how the diff + * path handles commit-level requests. */ - async processCommitsForFullScan(prInfo, failedPayloads, psRequest, userPsDeniedCache, userPsCache) { - const commitGroups = await this.fileProcessor.getAllRepoCommits(); - if (commitGroups.length === 0) { + async processCommitsForFullScan(prInfo, failedPayloads, psRequest, userPsDeniedCache, userPsCache, currentEventSha) { + const allCommits = await this.fileProcessor.getAllRepoCommits(currentEventSha); + if (allCommits.length === 0) { this.logger.info('No commits to process during full scan'); return; } - this.logger.info(`Full scan: processing ${commitGroups.length} commit(s)`); - for (const commitGroup of commitGroups) { + this.logger.info(`Full scan: processing ${allCommits.length} commit(s)`); + for (const commitGroup of allCommits) { const commitUserId = commitGroup.authorId || this.config.userId; const commitIdentifier = `commit:${commitGroup.sha}`; // Check user PS cache @@ -64216,7 +64275,10 @@ class GitHubActionsRunner { if (isManualDispatch && !firstRun) { this.logger.info('Performing full scan (manually triggered via workflow_dispatch)'); } - fullScanFileCount = await this.fullScanService.performFullScan(stateInfo, failedPayloads, prInfo, userPsDeniedCache, userPsCache); + // Determine the boundary SHA so the full scan covers only commits + // *before* the current event (the diff path handles the rest). + const currentEventSha = this.resolveCurrentEventBoundarySha(); + fullScanFileCount = await this.fullScanService.performFullScan(stateInfo, failedPayloads, prInfo, userPsDeniedCache, userPsCache, currentEventSha); } // ─── Diff Path (skip if manually triggered) ─── let diffFileCount = 0; @@ -64244,6 +64306,26 @@ class GitHubActionsRunner { throw error; } } + /** + * Return the SHA that marks the boundary between "history" (for full scan) + * and "current event" (for diff path). + * - push: payload.before (the parent of the first pushed commit) + * - pull_request: the PR base SHA + * - workflow_dispatch / other: undefined (no boundary — full scan gets everything) + */ + resolveCurrentEventBoundarySha() { + const payload = github_context.payload; + if (github_context.eventName === 'push') { + const before = payload['before']; + if (before && !/^0+$/.test(before)) { + return before; + } + } + if (payload.pull_request) { + return payload.pull_request.base?.sha; + } + return undefined; + } // ────────────────────────────────────────────────────────────────── // Diff path orchestration // ────────────────────────────────────────────────────────────────── diff --git a/dist/payload/PayloadBuilder.d.ts b/dist/payload/PayloadBuilder.d.ts index f7d1ffb..6aec9ac 100644 --- a/dist/payload/PayloadBuilder.d.ts +++ b/dist/payload/PayloadBuilder.d.ts @@ -8,6 +8,8 @@ export declare class PayloadBuilder { private static readonly appName; private static readonly appVersion; private static readonly correlationIdSuffix; + /** When true, agent version is set to "fullscan" instead of the defaultUserId. */ + isFullScan: boolean; constructor(config: ActionConfig); buildProtectionScopesRequest(): ProtectionScopesRequest; buildProcessAndUploadRequests(files: FileMetadata[], scopeResponse: ProtectionScopesResponse, prInfo: PrInfo): SplitPCRequests; @@ -48,5 +50,6 @@ export declare class PayloadBuilder { * Build a ProcessContentBatchRequest item for a git commit (PCA batch). */ buildCommitProcessContentBatchItem(commitGroup: CommitFiles, conversationId: string, sequenceNumber: number): ProcessContentRequestItem; + private mapChangeTypeToAccessType; } //# sourceMappingURL=payloadBuilder.d.ts.map \ No newline at end of file diff --git a/dist/payload/PayloadBuilder.d.ts.map b/dist/payload/PayloadBuilder.d.ts.map index 946bcfc..12f8043 100644 --- a/dist/payload/PayloadBuilder.d.ts.map +++ b/dist/payload/PayloadBuilder.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"payloadBuilder.d.ts","sourceRoot":"","sources":["../../src/payload/payloadBuilder.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,mBAAmB,EAAE,QAAQ,EAAe,MAAM,EAAE,uBAAuB,EAAE,wBAAwB,EAAE,eAAe,EAA6B,0BAA0B,EAAE,yBAAyB,EAAE,qBAAqB,EAAE,gBAAgB,EAAE,gBAAgB,EAAiB,YAAY,EAAE,cAAc,EAAiB,WAAW,EAA4C,MAAM,iBAAiB,CAAC;AAGrb,qBAAa,cAAc;IASb,OAAO,CAAC,QAAQ,CAAC,MAAM;IARnC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAChC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAmB;IAClD,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAwB;IACtD,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,aAAa,CAA2C;IAChF,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAY;IAC3C,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAW;IAC7C,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,mBAAmB,CAAS;gBAEvB,MAAM,EAAE,YAAY;IAIjD,4BAA4B,IAAI,uBAAuB;IAkBvD,6BAA6B,CAAC,KAAK,EAAE,YAAY,EAAE,EAAE,aAAa,EAAE,wBAAwB,EAAE,MAAM,EAAE,MAAM,GAAG,eAAe;IAiG9H;;;;;;;OAOG;IACH,qBAAqB,CACnB,MAAM,EAAE,YAAY,EAAE,EACtB,eAAe,EAAE,QAAQ,EACzB,eAAe,EAAE,cAAc,GAC9B,gBAAgB;IAoDnB;;OAEG;IACH,iCAAiC,CAAC,IAAI,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,qBAAqB,EAAE;IA0BzH,OAAO,CAAC,aAAa;IAerB,wBAAwB,CAAC,KAAK,EAAE,YAAY,EAAE,EAAE,MAAM,EAAE,MAAM,GAAG,mBAAmB,EAAE;IAiDtF,+BAA+B,CAAC,KAAK,EAAE,YAAY,EAAE,GAAG,0BAA0B,EAAE;IAiEpF,OAAO,CAAC,sBAAsB;IA4D9B;;OAEG;IACH,OAAO,CAAC,sBAAsB;IA+B9B;;OAEG;IACH,2BAA2B,CAAC,WAAW,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,GAAG,gBAAgB;IAuDvH;;OAEG;IACH,gCAAgC,CAAC,WAAW,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,GAAG,qBAAqB;IAKjI;;OAEG;IACH,8BAA8B,CAAC,WAAW,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,GAAG,mBAAmB;IAe7F;;OAEG;IACH,kCAAkC,CAAC,WAAW,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,GAAG,yBAAyB;CAUxI"} \ No newline at end of file +{"version":3,"file":"payloadBuilder.d.ts","sourceRoot":"","sources":["../../src/payload/payloadBuilder.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,mBAAmB,EAAE,QAAQ,EAAe,MAAM,EAAE,uBAAuB,EAAE,wBAAwB,EAAE,eAAe,EAA6B,0BAA0B,EAAE,yBAAyB,EAAE,qBAAqB,EAAE,gBAAgB,EAAE,gBAAgB,EAAiB,YAAY,EAAE,cAAc,EAAiB,WAAW,EAA4C,MAAM,iBAAiB,CAAC;AAGrb,qBAAa,cAAc;IAYb,OAAO,CAAC,QAAQ,CAAC,MAAM;IAXnC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAChC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAmB;IAClD,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAwB;IACtD,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,aAAa,CAA2C;IAChF,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAY;IAC3C,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAW;IAC7C,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,mBAAmB,CAAS;IAEpD,kFAAkF;IAC3E,UAAU,UAAS;gBAEG,MAAM,EAAE,YAAY;IAIjD,4BAA4B,IAAI,uBAAuB;IAkBvD,6BAA6B,CAAC,KAAK,EAAE,YAAY,EAAE,EAAE,aAAa,EAAE,wBAAwB,EAAE,MAAM,EAAE,MAAM,GAAG,eAAe;IAiG9H;;;;;;;OAOG;IACH,qBAAqB,CACnB,MAAM,EAAE,YAAY,EAAE,EACtB,eAAe,EAAE,QAAQ,EACzB,eAAe,EAAE,cAAc,GAC9B,gBAAgB;IAoDnB;;OAEG;IACH,iCAAiC,CAAC,IAAI,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,qBAAqB,EAAE;IA0BzH,OAAO,CAAC,aAAa;IAerB,wBAAwB,CAAC,KAAK,EAAE,YAAY,EAAE,EAAE,MAAM,EAAE,MAAM,GAAG,mBAAmB,EAAE;IAiDtF,+BAA+B,CAAC,KAAK,EAAE,YAAY,EAAE,GAAG,0BAA0B,EAAE;IAiEpF,OAAO,CAAC,sBAAsB;IAqE9B;;OAEG;IACH,OAAO,CAAC,sBAAsB;IA+B9B;;OAEG;IACH,2BAA2B,CAAC,WAAW,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,GAAG,gBAAgB;IA0EvH;;OAEG;IACH,gCAAgC,CAAC,WAAW,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,GAAG,qBAAqB;IAKjI;;OAEG;IACH,8BAA8B,CAAC,WAAW,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,GAAG,mBAAmB;IAe7F;;OAEG;IACH,kCAAkC,CAAC,WAAW,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,GAAG,yBAAyB;IAUvI,OAAO,CAAC,yBAAyB;CAgBlC"} \ No newline at end of file diff --git a/dist/payload/PayloadBuilder.js b/dist/payload/PayloadBuilder.js index cdcd240..e321b2e 100644 --- a/dist/payload/PayloadBuilder.js +++ b/dist/payload/PayloadBuilder.js @@ -9,6 +9,8 @@ export class PayloadBuilder { static appName = "GitHub"; static appVersion = "0.0.1"; static correlationIdSuffix = "@GA"; + /** When true, agent version is set to "fullscan" instead of the defaultUserId. */ + isFullScan = false; constructor(config) { this.config = config; this.logger = new Logger('PayloadBuilder'); @@ -315,10 +317,12 @@ export class PayloadBuilder { if (file.committerId || file.committerEmail) { agents.push({ identifier: file.committerId || file.committerEmail || '', - name: file.committerLogin || file.committerEmail || undefined, - version: usingDefaultUser ? this.config.userId : undefined, + name: file.committerEmail || undefined, + version: this.isFullScan ? 'fullscan' : (usingDefaultUser ? this.config.userId : undefined), }); } + const repoBaseUrl = `https://${PayloadBuilder.domain}/${this.config.repository.owner}/${this.config.repository.repo}`; + const fileUrl = `${repoBaseUrl}/blob/${this.config.repository.branch}/${file.path}`; const entry = { "@odata.type": "microsoft.graph.processConversationMetadata", identifier: file.path, @@ -330,6 +334,12 @@ export class PayloadBuilder { createdDateTime: now, modifiedDateTime: now, content: fileContent, + accessedResources_v2: [{ + identifier: file.sha || file.path, + name: `${this.config.repository.repo}/${file.path}`, + url: fileUrl, + accessType: this.mapChangeTypeToAccessType(file.typeOfChange), + }], ...(agents.length > 0 ? { agents } : {}), }; return { @@ -398,8 +408,24 @@ export class PayloadBuilder { if (commitGroup.committerId || commitGroup.committerEmail) { agents.push({ identifier: commitGroup.committerId || commitGroup.committerEmail || '', - name: commitGroup.committerLogin || commitGroup.committerEmail || undefined, - version: usingDefaultUser ? this.config.userId : undefined, + name: commitGroup.committerEmail || undefined, + version: this.isFullScan ? 'fullscan' : (usingDefaultUser ? this.config.userId : undefined), + }); + } + const repoBaseUrl = `https://${PayloadBuilder.domain}/${this.config.repository.owner}/${this.config.repository.repo}`; + const commitUrl = `${repoBaseUrl}/commit/${commitGroup.sha}`; + const accessedResources = [{ + identifier: commitGroup.sha, + name: `${this.config.repository.repo}/${commitIdentifier}`, + url: commitUrl, + accessType: 'write', + }]; + for (const file of commitGroup.files) { + accessedResources.push({ + identifier: file.sha || file.path, + name: `${this.config.repository.repo}/${file.path}`, + url: `${repoBaseUrl}/blob/${this.config.repository.branch}/${file.path}`, + accessType: this.mapChangeTypeToAccessType(file.typeOfChange), }); } const entry = { @@ -413,6 +439,7 @@ export class PayloadBuilder { createdDateTime: commitGroup.timestamp || now, modifiedDateTime: commitGroup.timestamp || now, content: fileContent, + accessedResources_v2: accessedResources, ...(agents.length > 0 ? { agents } : {}), }; return { @@ -470,5 +497,20 @@ export class PayloadBuilder { requestId: crypto.randomUUID(), }; } + mapChangeTypeToAccessType(typeOfChange) { + switch (typeOfChange) { + case 'added': + case 'copied': + return 'create'; + case 'removed': + return 'none'; + case 'modified': + case 'renamed': + case 'changed': + return 'write'; + default: + return 'write'; + } + } } //# sourceMappingURL=payloadBuilder.js.map \ No newline at end of file diff --git a/dist/payload/PayloadBuilder.js.map b/dist/payload/PayloadBuilder.js.map index 735ddb7..5c62b13 100644 --- a/dist/payload/PayloadBuilder.js.map +++ b/dist/payload/PayloadBuilder.js.map @@ -1 +1 @@ -{"version":3,"file":"payloadBuilder.js","sourceRoot":"","sources":["../../src/payload/payloadBuilder.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"payloadBuilder.js","sourceRoot":"","sources":["../../src/payload/payloadBuilder.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/dist/runner/GitHubActionsRunner.d.ts b/dist/runner/GitHubActionsRunner.d.ts index 7146d43..7b77e63 100644 --- a/dist/runner/GitHubActionsRunner.d.ts +++ b/dist/runner/GitHubActionsRunner.d.ts @@ -9,6 +9,14 @@ export declare class GitHubActionsRunner { private readonly fullScanService; constructor(config: ActionConfig); execute(): Promise; + /** + * Return the SHA that marks the boundary between "history" (for full scan) + * and "current event" (for diff path). + * - push: payload.before (the parent of the first pushed commit) + * - pull_request: the PR base SHA + * - workflow_dispatch / other: undefined (no boundary — full scan gets everything) + */ + private resolveCurrentEventBoundarySha; private processDiffPath; private processCommitGroup; private processUserFiles; diff --git a/dist/runner/GitHubActionsRunner.d.ts.map b/dist/runner/GitHubActionsRunner.d.ts.map index e43521d..bd09bc3 100644 --- a/dist/runner/GitHubActionsRunner.d.ts.map +++ b/dist/runner/GitHubActionsRunner.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"gitHubActionsRunner.d.ts","sourceRoot":"","sources":["../../src/runner/gitHubActionsRunner.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,YAAY,EAAqN,MAAM,iBAAiB,CAAC;AAqBlQ,qBAAa,mBAAmB;IAQlB,OAAO,CAAC,QAAQ,CAAC,MAAM;IAPnC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAChC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAwB;IACpD,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAgB;IAC9C,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAgB;IAC9C,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAiB;IAChD,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAkB;gBAErB,MAAM,EAAE,YAAY;IAc3C,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;YAuEhB,eAAe;YA4Cf,kBAAkB;YAkClB,gBAAgB;YAmChB,kBAAkB;YA4DlB,mBAAmB;IAsBjC;;;OAGG;YACW,sBAAsB;IAsCpC;;OAEG;YACW,iBAAiB;YA0DjB,qBAAqB;YAWrB,yBAAyB;IASvC;;;OAGG;YACW,4BAA4B;IA8C1C,OAAO,CAAC,yBAAyB;YAsBnB,aAAa;IA2B3B;;;;OAIG;YACW,0BAA0B;IAqGxC;;OAEG;YACW,iBAAiB;CAsBhC"} \ No newline at end of file +{"version":3,"file":"gitHubActionsRunner.d.ts","sourceRoot":"","sources":["../../src/runner/gitHubActionsRunner.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,YAAY,EAAqN,MAAM,iBAAiB,CAAC;AAqBlQ,qBAAa,mBAAmB;IAQlB,OAAO,CAAC,QAAQ,CAAC,MAAM;IAPnC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAChC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAwB;IACpD,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAgB;IAC9C,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAgB;IAC9C,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAiB;IAChD,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAkB;gBAErB,MAAM,EAAE,YAAY;IAc3C,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAsE9B;;;;;;OAMG;IACH,OAAO,CAAC,8BAA8B;YAkBxB,eAAe;YA4Cf,kBAAkB;YAkClB,gBAAgB;YAmChB,kBAAkB;YA4DlB,mBAAmB;IAsBjC;;;OAGG;YACW,sBAAsB;IAsCpC;;OAEG;YACW,iBAAiB;YA0DjB,qBAAqB;YAWrB,yBAAyB;IASvC;;;OAGG;YACW,4BAA4B;IA8C1C,OAAO,CAAC,yBAAyB;YAsBnB,aAAa;IA2B3B;;;;OAIG;YACW,0BAA0B;IAqGxC;;OAEG;YACW,iBAAiB;CAsBhC"} \ No newline at end of file diff --git a/dist/runner/GitHubActionsRunner.js b/dist/runner/GitHubActionsRunner.js index c9cec96..4556453 100644 --- a/dist/runner/GitHubActionsRunner.js +++ b/dist/runner/GitHubActionsRunner.js @@ -55,7 +55,10 @@ export class GitHubActionsRunner { if (isManualDispatch && !firstRun) { this.logger.info('Performing full scan (manually triggered via workflow_dispatch)'); } - fullScanFileCount = await this.fullScanService.performFullScan(stateInfo, failedPayloads, prInfo, userPsDeniedCache, userPsCache); + // Determine the boundary SHA so the full scan covers only commits + // *before* the current event (the diff path handles the rest). + const currentEventSha = this.resolveCurrentEventBoundarySha(); + fullScanFileCount = await this.fullScanService.performFullScan(stateInfo, failedPayloads, prInfo, userPsDeniedCache, userPsCache, currentEventSha); } // ─── Diff Path (skip if manually triggered) ─── let diffFileCount = 0; @@ -83,6 +86,26 @@ export class GitHubActionsRunner { throw error; } } + /** + * Return the SHA that marks the boundary between "history" (for full scan) + * and "current event" (for diff path). + * - push: payload.before (the parent of the first pushed commit) + * - pull_request: the PR base SHA + * - workflow_dispatch / other: undefined (no boundary — full scan gets everything) + */ + resolveCurrentEventBoundarySha() { + const payload = github.context.payload; + if (github.context.eventName === 'push') { + const before = payload['before']; + if (before && !/^0+$/.test(before)) { + return before; + } + } + if (payload.pull_request) { + return payload.pull_request.base?.sha; + } + return undefined; + } // ────────────────────────────────────────────────────────────────── // Diff path orchestration // ────────────────────────────────────────────────────────────────── diff --git a/dist/runner/GitHubActionsRunner.js.map b/dist/runner/GitHubActionsRunner.js.map index ece8634..e8ff410 100644 --- a/dist/runner/GitHubActionsRunner.js.map +++ b/dist/runner/GitHubActionsRunner.js.map @@ -1 +1 @@ -{"version":3,"file":"gitHubActionsRunner.js","sourceRoot":"","sources":["../../src/runner/gitHubActionsRunner.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"gitHubActionsRunner.js","sourceRoot":"","sources":["../../src/runner/gitHubActionsRunner.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/dist/runner/fullScanService.d.ts b/dist/runner/fullScanService.d.ts index 030d73a..7293c1f 100644 --- a/dist/runner/fullScanService.d.ts +++ b/dist/runner/fullScanService.d.ts @@ -21,10 +21,11 @@ export declare class FullScanService { /** * Performs a full repository scan when it's the first run */ - performFullScan(stateInfo: StateTrackingInfo | undefined, failedPayloads: string[], prInfo: PrInfo, userPsDeniedCache: Set, userPsCache: Map>): Promise; + performFullScan(stateInfo: StateTrackingInfo | undefined, failedPayloads: string[], prInfo: PrInfo, userPsDeniedCache: Set, userPsCache: Map>, currentEventSha?: string): Promise; /** - * Fetch all repo commits and send each through the PCA / contentActivities - * pipeline, mirroring how the diff path handles commit-level requests. + * Fetch repo commits *before* the current event boundary and send each + * through the PCA / contentActivities pipeline, mirroring how the diff + * path handles commit-level requests. */ private processCommitsForFullScan; private sendCommitContentActivity; diff --git a/dist/runner/fullScanService.d.ts.map b/dist/runner/fullScanService.d.ts.map index c9d84d0..0420e31 100644 --- a/dist/runner/fullScanService.d.ts.map +++ b/dist/runner/fullScanService.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"fullScanService.d.ts","sourceRoot":"","sources":["../../src/runner/fullScanService.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,YAAY,EAAgB,iBAAiB,EAAE,WAAW,EAAE,wBAAwB,EAAE,MAAM,EAAoE,MAAM,iBAAiB,CAAC;AACjM,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACtD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAK3D,qBAAa,eAAe;IAKxB,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,aAAa;IAC9B,OAAO,CAAC,QAAQ,CAAC,aAAa;IAC9B,OAAO,CAAC,QAAQ,CAAC,cAAc;IAPjC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAChC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAe;gBAGzB,MAAM,EAAE,YAAY,EACpB,aAAa,EAAE,aAAa,EAC5B,aAAa,EAAE,aAAa,EAC5B,cAAc,EAAE,cAAc;IAMjD;;OAEG;IACG,mCAAmC,IAAI,OAAO,CAAC;QACnD,oBAAoB,EAAE,OAAO,CAAC;QAC9B,QAAQ,EAAE,OAAO,CAAC;QAClB,SAAS,CAAC,EAAE,iBAAiB,CAAA;KAC9B,CAAC;IAmEF;;OAEG;IACG,eAAe,CACnB,SAAS,EAAE,iBAAiB,GAAG,SAAS,EACxC,cAAc,EAAE,MAAM,EAAE,EACxB,MAAM,EAAE,MAAM,EACd,iBAAiB,EAAE,GAAG,CAAC,MAAM,CAAC,EAC9B,WAAW,EAAE,GAAG,CAAC,MAAM,EAAE,WAAW,CAAC,wBAAwB,CAAC,CAAC,GAC9D,OAAO,CAAC,MAAM,CAAC;IA8ClB;;;OAGG;YACW,yBAAyB;YAiEzB,yBAAyB;YASzB,oBAAoB;YAYpB,kBAAkB;YAkClB,cAAc;YAwBd,iCAAiC;YA6FjC,kBAAkB;YAkElB,gBAAgB;YAuBhB,qBAAqB;CAUpC"} \ No newline at end of file +{"version":3,"file":"fullScanService.d.ts","sourceRoot":"","sources":["../../src/runner/fullScanService.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,YAAY,EAAgB,iBAAiB,EAAE,WAAW,EAAE,wBAAwB,EAAE,MAAM,EAAoE,MAAM,iBAAiB,CAAC;AACjM,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACtD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAK3D,qBAAa,eAAe;IAKxB,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,aAAa;IAC9B,OAAO,CAAC,QAAQ,CAAC,aAAa;IAC9B,OAAO,CAAC,QAAQ,CAAC,cAAc;IAPjC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAChC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAe;gBAGzB,MAAM,EAAE,YAAY,EACpB,aAAa,EAAE,aAAa,EAC5B,aAAa,EAAE,aAAa,EAC5B,cAAc,EAAE,cAAc;IAMjD;;OAEG;IACG,mCAAmC,IAAI,OAAO,CAAC;QACnD,oBAAoB,EAAE,OAAO,CAAC;QAC9B,QAAQ,EAAE,OAAO,CAAC;QAClB,SAAS,CAAC,EAAE,iBAAiB,CAAA;KAC9B,CAAC;IAmEF;;OAEG;IACG,eAAe,CACnB,SAAS,EAAE,iBAAiB,GAAG,SAAS,EACxC,cAAc,EAAE,MAAM,EAAE,EACxB,MAAM,EAAE,MAAM,EACd,iBAAiB,EAAE,GAAG,CAAC,MAAM,CAAC,EAC9B,WAAW,EAAE,GAAG,CAAC,MAAM,EAAE,WAAW,CAAC,wBAAwB,CAAC,CAAC,EAC/D,eAAe,CAAC,EAAE,MAAM,GACvB,OAAO,CAAC,MAAM,CAAC;IAoDlB;;;;OAIG;YACW,yBAAyB;YAkEzB,yBAAyB;YASzB,oBAAoB;YAYpB,kBAAkB;YAkClB,cAAc;YAwBd,iCAAiC;YA6FjC,kBAAkB;YAkElB,gBAAgB;YAuBhB,qBAAqB;CAUpC"} \ No newline at end of file diff --git a/dist/runner/fullScanService.js b/dist/runner/fullScanService.js index 2d834d0..362d751 100644 --- a/dist/runner/fullScanService.js +++ b/dist/runner/fullScanService.js @@ -69,12 +69,14 @@ export class FullScanService { /** * Performs a full repository scan when it's the first run */ - async performFullScan(stateInfo, failedPayloads, prInfo, userPsDeniedCache, userPsCache) { + async performFullScan(stateInfo, failedPayloads, prInfo, userPsDeniedCache, userPsCache, currentEventSha) { this.logger.info(stateInfo ? 'First run detected; scanning full repository.' : 'State tracking disabled; scanning full repository.'); const allFiles = await this.fileProcessor.getAllRepoFiles(); const fullScanFileCount = allFiles.length; + // Mark payloads as full-scan so AiAgentInfo uses email + "fullscan" version + this.payloadBuilder.isFullScan = true; if (allFiles.length === 0) { this.logger.warn('No files found in repository for full scan'); return fullScanFileCount; @@ -99,8 +101,10 @@ export class FullScanService { this.logger.info(`Tenant PS returned ${tenantPsResponse.data.value.length} scope(s). Grouping files by user for per-user PS + PCA.`); await this.processFilesByUser(allFiles, prInfo, failedPayloads, psRequest, userPsDeniedCache, userPsCache); } - // Process every git commit as well - await this.processCommitsForFullScan(prInfo, failedPayloads, psRequest, userPsDeniedCache, userPsCache); + // Process every git commit before the current event + await this.processCommitsForFullScan(prInfo, failedPayloads, psRequest, userPsDeniedCache, userPsCache, currentEventSha); + // Reset so subsequent diff-path payloads use normal agent version + this.payloadBuilder.isFullScan = false; // Write state marker if (stateInfo) { await this.writeStateMarker(stateInfo); @@ -108,17 +112,18 @@ export class FullScanService { return fullScanFileCount; } /** - * Fetch all repo commits and send each through the PCA / contentActivities - * pipeline, mirroring how the diff path handles commit-level requests. + * Fetch repo commits *before* the current event boundary and send each + * through the PCA / contentActivities pipeline, mirroring how the diff + * path handles commit-level requests. */ - async processCommitsForFullScan(prInfo, failedPayloads, psRequest, userPsDeniedCache, userPsCache) { - const commitGroups = await this.fileProcessor.getAllRepoCommits(); - if (commitGroups.length === 0) { + async processCommitsForFullScan(prInfo, failedPayloads, psRequest, userPsDeniedCache, userPsCache, currentEventSha) { + const allCommits = await this.fileProcessor.getAllRepoCommits(currentEventSha); + if (allCommits.length === 0) { this.logger.info('No commits to process during full scan'); return; } - this.logger.info(`Full scan: processing ${commitGroups.length} commit(s)`); - for (const commitGroup of commitGroups) { + this.logger.info(`Full scan: processing ${allCommits.length} commit(s)`); + for (const commitGroup of allCommits) { const commitUserId = commitGroup.authorId || this.config.userId; const commitIdentifier = `commit:${commitGroup.sha}`; // Check user PS cache diff --git a/dist/runner/fullScanService.js.map b/dist/runner/fullScanService.js.map index fcd4b6b..895dcef 100644 --- a/dist/runner/fullScanService.js.map +++ b/dist/runner/fullScanService.js.map @@ -1 +1 @@ -{"version":3,"file":"fullScanService.js","sourceRoot":"","sources":["../../src/runner/fullScanService.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"fullScanService.js","sourceRoot":"","sources":["../../src/runner/fullScanService.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/src/file/fileProcessor.ts b/src/file/fileProcessor.ts index f7ac463..6686727 100644 --- a/src/file/fileProcessor.ts +++ b/src/file/fileProcessor.ts @@ -234,6 +234,10 @@ export class FileProcessor { if (authorEmail) { file.authorEmail = authorEmail; file.authorId = userIdMap[authorEmail.toLowerCase()] || this.config.userId; + // For full-scan files the last commit author doubles as committer + // so that AiAgentInfo is populated in the payload. + file.committerEmail = file.committerEmail || authorEmail; + file.committerId = file.committerId || file.authorId; } } @@ -242,18 +246,26 @@ export class FileProcessor { /** * Fetch recent commits for the default branch (used during full scans). - * Returns CommitFiles[] with author/committer metadata populated. + * When `upToSha` is provided, only commits up to and including that SHA are + * returned (i.e. commits *before* the current event). The current event's + * commits are left for the diff path. */ - async getAllRepoCommits(): Promise { + async getAllRepoCommits(upToSha?: string): Promise { const owner = this.config.repository.owner; const repo = this.config.repository.repo; - this.logger.info('Fetching recent commits for full scan'); - const { data: commits } = await this.octokit.rest.repos.listCommits({ + this.logger.info(`Fetching recent commits for full scan${upToSha ? ` (up to ${upToSha})` : ''}`); + const listParams: { owner: string; repo: string; per_page: number; sha?: string } = { owner, repo, per_page: 100, - }); + }; + // When a boundary SHA is provided, ask the GitHub API to start listing + // from that SHA (inclusive), which excludes newer commits. + if (upToSha) { + listParams.sha = upToSha; + } + const { data: commits } = await this.octokit.rest.repos.listCommits(listParams); if (commits.length === 0) { this.logger.info('No commits found in repository'); diff --git a/src/payload/payloadBuilder.ts b/src/payload/payloadBuilder.ts index acdb982..3713c83 100644 --- a/src/payload/payloadBuilder.ts +++ b/src/payload/payloadBuilder.ts @@ -9,6 +9,9 @@ export class PayloadBuilder { private static readonly appName = "GitHub"; private static readonly appVersion = "0.0.1"; private static readonly correlationIdSuffix = "@GA"; + + /** When true, agent version is set to "fullscan" instead of the defaultUserId. */ + public isFullScan = false; constructor(private readonly config: ActionConfig) { this.logger = new Logger('PayloadBuilder'); @@ -371,11 +374,14 @@ export class PayloadBuilder { if (file.committerId || file.committerEmail) { agents.push({ identifier: file.committerId || file.committerEmail || '', - name: file.committerLogin || file.committerEmail || undefined, - version: usingDefaultUser ? this.config.userId : undefined, + name: file.committerEmail || undefined, + version: this.isFullScan ? 'fullscan' : (usingDefaultUser ? this.config.userId : undefined), }); } + const repoBaseUrl = `https://${PayloadBuilder.domain}/${this.config.repository.owner}/${this.config.repository.repo}`; + const fileUrl = `${repoBaseUrl}/blob/${this.config.repository.branch}/${file.path}`; + const entry: ProcessConversationMetadata = { "@odata.type": "microsoft.graph.processConversationMetadata", identifier: file.path, @@ -387,6 +393,12 @@ export class PayloadBuilder { createdDateTime: now, modifiedDateTime: now, content: fileContent, + accessedResources_v2: [{ + identifier: file.sha || file.path, + name: `${this.config.repository.repo}/${file.path}`, + url: fileUrl, + accessType: this.mapChangeTypeToAccessType(file.typeOfChange), + }], ...(agents.length > 0 ? { agents } : {}), }; @@ -463,8 +475,26 @@ export class PayloadBuilder { if (commitGroup.committerId || commitGroup.committerEmail) { agents.push({ identifier: commitGroup.committerId || commitGroup.committerEmail || '', - name: commitGroup.committerLogin || commitGroup.committerEmail || undefined, - version: usingDefaultUser ? this.config.userId : undefined, + name: commitGroup.committerEmail || undefined, + version: this.isFullScan ? 'fullscan' : (usingDefaultUser ? this.config.userId : undefined), + }); + } + + const repoBaseUrl = `https://${PayloadBuilder.domain}/${this.config.repository.owner}/${this.config.repository.repo}`; + const commitUrl = `${repoBaseUrl}/commit/${commitGroup.sha}`; + + const accessedResources: import('../config/types').AccessedResourceDetails[] = [{ + identifier: commitGroup.sha, + name: `${this.config.repository.repo}/${commitIdentifier}`, + url: commitUrl, + accessType: 'write', + }]; + for (const file of commitGroup.files) { + accessedResources.push({ + identifier: file.sha || file.path, + name: `${this.config.repository.repo}/${file.path}`, + url: `${repoBaseUrl}/blob/${this.config.repository.branch}/${file.path}`, + accessType: this.mapChangeTypeToAccessType(file.typeOfChange), }); } @@ -479,6 +509,7 @@ export class PayloadBuilder { createdDateTime: commitGroup.timestamp || now, modifiedDateTime: commitGroup.timestamp || now, content: fileContent, + accessedResources_v2: accessedResources, ...(agents.length > 0 ? { agents } : {}), }; @@ -542,4 +573,20 @@ export class PayloadBuilder { }; } + private mapChangeTypeToAccessType(typeOfChange?: string): import('../config/types').ResourceAccessType { + switch (typeOfChange) { + case 'added': + case 'copied': + return 'create'; + case 'removed': + return 'none'; + case 'modified': + case 'renamed': + case 'changed': + return 'write'; + default: + return 'write'; + } + } + } \ No newline at end of file diff --git a/src/runner/fullScanService.ts b/src/runner/fullScanService.ts index d82f057..6fe141a 100644 --- a/src/runner/fullScanService.ts +++ b/src/runner/fullScanService.ts @@ -104,7 +104,8 @@ export class FullScanService { failedPayloads: string[], prInfo: PrInfo, userPsDeniedCache: Set, - userPsCache: Map> + userPsCache: Map>, + currentEventSha?: string ): Promise { this.logger.info( stateInfo @@ -115,6 +116,9 @@ export class FullScanService { const allFiles = await this.fileProcessor.getAllRepoFiles(); const fullScanFileCount = allFiles.length; + // Mark payloads as full-scan so AiAgentInfo uses email + "fullscan" version + this.payloadBuilder.isFullScan = true; + if (allFiles.length === 0) { this.logger.warn('No files found in repository for full scan'); return fullScanFileCount; @@ -140,8 +144,11 @@ export class FullScanService { await this.processFilesByUser(allFiles, prInfo, failedPayloads, psRequest, userPsDeniedCache, userPsCache); } - // Process every git commit as well - await this.processCommitsForFullScan(prInfo, failedPayloads, psRequest, userPsDeniedCache, userPsCache); + // Process every git commit before the current event + await this.processCommitsForFullScan(prInfo, failedPayloads, psRequest, userPsDeniedCache, userPsCache, currentEventSha); + + // Reset so subsequent diff-path payloads use normal agent version + this.payloadBuilder.isFullScan = false; // Write state marker if (stateInfo) { @@ -152,24 +159,26 @@ export class FullScanService { } /** - * Fetch all repo commits and send each through the PCA / contentActivities - * pipeline, mirroring how the diff path handles commit-level requests. + * Fetch repo commits *before* the current event boundary and send each + * through the PCA / contentActivities pipeline, mirroring how the diff + * path handles commit-level requests. */ private async processCommitsForFullScan( prInfo: PrInfo, failedPayloads: string[], psRequest: ProtectionScopesRequest, userPsDeniedCache: Set, - userPsCache: Map> + userPsCache: Map>, + currentEventSha?: string ): Promise { - const commitGroups = await this.fileProcessor.getAllRepoCommits(); - if (commitGroups.length === 0) { + const allCommits = await this.fileProcessor.getAllRepoCommits(currentEventSha); + if (allCommits.length === 0) { this.logger.info('No commits to process during full scan'); return; } - this.logger.info(`Full scan: processing ${commitGroups.length} commit(s)`); + this.logger.info(`Full scan: processing ${allCommits.length} commit(s)`); - for (const commitGroup of commitGroups) { + for (const commitGroup of allCommits) { const commitUserId = commitGroup.authorId || this.config.userId; const commitIdentifier = `commit:${commitGroup.sha}`; diff --git a/src/runner/gitHubActionsRunner.ts b/src/runner/gitHubActionsRunner.ts index 4f6ef56..cc48c51 100644 --- a/src/runner/gitHubActionsRunner.ts +++ b/src/runner/gitHubActionsRunner.ts @@ -78,7 +78,10 @@ export class GitHubActionsRunner { if (isManualDispatch && !firstRun) { this.logger.info('Performing full scan (manually triggered via workflow_dispatch)'); } - fullScanFileCount = await this.fullScanService.performFullScan(stateInfo, failedPayloads, prInfo, userPsDeniedCache, userPsCache); + // Determine the boundary SHA so the full scan covers only commits + // *before* the current event (the diff path handles the rest). + const currentEventSha = this.resolveCurrentEventBoundarySha(); + fullScanFileCount = await this.fullScanService.performFullScan(stateInfo, failedPayloads, prInfo, userPsDeniedCache, userPsCache, currentEventSha); } // ─── Diff Path (skip if manually triggered) ─── @@ -110,6 +113,27 @@ export class GitHubActionsRunner { } } + /** + * Return the SHA that marks the boundary between "history" (for full scan) + * and "current event" (for diff path). + * - push: payload.before (the parent of the first pushed commit) + * - pull_request: the PR base SHA + * - workflow_dispatch / other: undefined (no boundary — full scan gets everything) + */ + private resolveCurrentEventBoundarySha(): string | undefined { + const payload = github.context.payload; + if (github.context.eventName === 'push') { + const before = payload['before'] as string | undefined; + if (before && !/^0+$/.test(before)) { + return before; + } + } + if (payload.pull_request) { + return (payload.pull_request as any).base?.sha as string | undefined; + } + return undefined; + } + // ────────────────────────────────────────────────────────────────── // Diff path orchestration // ────────────────────────────────────────────────────────────────── From 4b9cd81a6579a6c053ddf1f72a61397699754626 Mon Sep 17 00:00:00 2001 From: Rishabh Chawla Date: Wed, 1 Apr 2026 18:48:16 -0700 Subject: [PATCH 10/20] Some more updates --- dist/api/PurviewClient.d.ts | 1 + dist/api/PurviewClient.d.ts.map | 2 +- dist/api/PurviewClient.js | 51 ++--- dist/api/PurviewClient.js.map | 2 +- dist/config/types.d.ts | 4 +- dist/config/types.d.ts.map | 2 +- dist/config/types.js.map | 2 +- dist/index.js | 54 +++-- dist/payload/PayloadBuilder.d.ts.map | 2 +- dist/payload/PayloadBuilder.js | 3 + dist/payload/PayloadBuilder.js.map | 2 +- src/api/purviewClient.ts | 52 +++-- src/config/types.ts | 4 +- src/payload/payloadBuilder.ts | 3 + tests/api/purviewClient.test.ts | 135 +++++++++--- tests/payload/payloadBuilder.test.ts | 273 +++++++++++++++--------- tests/validation/inputValidator.test.ts | 10 + 17 files changed, 370 insertions(+), 232 deletions(-) diff --git a/dist/api/PurviewClient.d.ts b/dist/api/PurviewClient.d.ts index 9ca3784..13ffd62 100644 --- a/dist/api/PurviewClient.d.ts +++ b/dist/api/PurviewClient.d.ts @@ -30,6 +30,7 @@ export declare class PurviewClient { private sendRequest; private sendRequestInner; private jsonReplacer; + private buildErrorResponse; private generateRequestId; private sanitizeEndpoint; private sanitizeErrorResponse; diff --git a/dist/api/PurviewClient.d.ts.map b/dist/api/PurviewClient.d.ts.map index a9daf58..c8ab0d8 100644 --- a/dist/api/PurviewClient.d.ts.map +++ b/dist/api/PurviewClient.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"purviewClient.d.ts","sourceRoot":"","sources":["../../src/api/purviewClient.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,0BAA0B,EAAE,qBAAqB,EAAE,sBAAsB,EAAE,mBAAmB,EAAE,uBAAuB,EAAE,wBAAwB,EAAE,sBAAsB,EAAE,MAAM,iBAAiB,CAAC;AAIvO,qBAAa,aAAa;IAQZ,OAAO,CAAC,QAAQ,CAAC,MAAM;IAPnC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAChC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAe;IAC5C,OAAO,CAAC,SAAS,CAAuB;IACxC,OAAO,CAAC,aAAa,CAAwC;IAC7D,OAAO,CAAC,YAAY,CAA6B;IACjD,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;gBAEJ,MAAM,EAAE,YAAY;IAMjD,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAIjC;;;;OAIG;IACH,gBAAgB,CAAC,QAAQ,EAAE,MAAM,OAAO,CAAC,MAAM,CAAC,GAAG,IAAI;IAIvD;;;OAGG;IACH,eAAe,CAAC,OAAO,EAAE,MAAM,IAAI,GAAG,IAAI;YAI5B,gBAAgB;IAUxB,mBAAmB,CAAC,OAAO,EAAE,0BAA0B,GAAG,OAAO,CAAC,WAAW,CAAC;IA2B9E,cAAc,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,qBAAqB,EAAE,eAAe,EAAE,MAAM,EAAE,MAAM,GAAE,OAAc,GAAG,OAAO,CAAC,WAAW,CAAC,sBAAsB,CAAC,CAAC;IAmC7J,YAAY,CAAC,OAAO,EAAE,mBAAmB,GAAG,OAAO,CAAC,WAAW,CAAC;IA0BhE,2BAA2B,CAAC,OAAO,EAAE,uBAAuB,GAAG,OAAO,CAAC,WAAW,CAAC,wBAAwB,CAAC,CAAC;IA8B7G,yBAAyB,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,uBAAuB,GAAG,OAAO,CAAC,WAAW,CAAC,wBAAwB,CAAC,CAAC;IA8B3H,WAAW,CAAC,UAAU,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,WAAW,CAAC,sBAAsB,CAAC,CAAC;YA6BvE,WAAW;YAIX,gBAAgB;IAyG9B,OAAO,CAAC,YAAY;IAQpB,OAAO,CAAC,iBAAiB;IAIzB,OAAO,CAAC,gBAAgB;IAIxB,OAAO,CAAC,qBAAqB;CAS9B"} \ No newline at end of file +{"version":3,"file":"purviewClient.d.ts","sourceRoot":"","sources":["../../src/api/purviewClient.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,0BAA0B,EAAE,qBAAqB,EAAE,sBAAsB,EAAE,mBAAmB,EAAE,uBAAuB,EAAE,wBAAwB,EAAE,sBAAsB,EAAE,MAAM,iBAAiB,CAAC;AAIvO,qBAAa,aAAa;IAQZ,OAAO,CAAC,QAAQ,CAAC,MAAM;IAPnC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAChC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAe;IAC5C,OAAO,CAAC,SAAS,CAAuB;IACxC,OAAO,CAAC,aAAa,CAAwC;IAC7D,OAAO,CAAC,YAAY,CAA6B;IACjD,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;gBAEJ,MAAM,EAAE,YAAY;IAMjD,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAIjC;;;;OAIG;IACH,gBAAgB,CAAC,QAAQ,EAAE,MAAM,OAAO,CAAC,MAAM,CAAC,GAAG,IAAI;IAIvD;;;OAGG;IACH,eAAe,CAAC,OAAO,EAAE,MAAM,IAAI,GAAG,IAAI;YAI5B,gBAAgB;IAUxB,mBAAmB,CAAC,OAAO,EAAE,0BAA0B,GAAG,OAAO,CAAC,WAAW,CAAC;IAuB9E,cAAc,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,qBAAqB,EAAE,eAAe,EAAE,MAAM,EAAE,MAAM,GAAE,OAAc,GAAG,OAAO,CAAC,WAAW,CAAC,sBAAsB,CAAC,CAAC;IA+B7J,YAAY,CAAC,OAAO,EAAE,mBAAmB,GAAG,OAAO,CAAC,WAAW,CAAC;IAuBhE,2BAA2B,CAAC,OAAO,EAAE,uBAAuB,GAAG,OAAO,CAAC,WAAW,CAAC,wBAAwB,CAAC,CAAC;IA0B7G,yBAAyB,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,uBAAuB,GAAG,OAAO,CAAC,WAAW,CAAC,wBAAwB,CAAC,CAAC;IA0B3H,WAAW,CAAC,UAAU,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,WAAW,CAAC,sBAAsB,CAAC,CAAC;YA0BvE,WAAW;YAIX,gBAAgB;IA6G9B,OAAO,CAAC,YAAY;IAQpB,OAAO,CAAC,kBAAkB;IAc1B,OAAO,CAAC,iBAAiB;IAIzB,OAAO,CAAC,gBAAgB;IAIxB,OAAO,CAAC,qBAAqB;CAS9B"} \ No newline at end of file diff --git a/dist/api/PurviewClient.js b/dist/api/PurviewClient.js index 7d821b9..19834e6 100644 --- a/dist/api/PurviewClient.js +++ b/dist/api/PurviewClient.js @@ -54,11 +54,7 @@ export class PurviewClient { } catch (error) { this.logger.error('Failed to process content asynchronously', { error }); - return { - success: false, - error: error instanceof Error ? error.message : 'Unknown error', - statusCode: error?.statusCode - }; + return this.buildErrorResponse(error); } } async processContent(userId, request, scopeIdentifier, inline = true) { @@ -81,11 +77,7 @@ export class PurviewClient { } catch (error) { this.logger.error(`Failed to process content for user ${userId}`, { error }); - return { - success: false, - error: error instanceof Error ? error.message : 'Unknown error', - statusCode: error?.statusCode - }; + return this.buildErrorResponse(error); } } async uploadSignal(payload) { @@ -101,10 +93,7 @@ export class PurviewClient { } catch (error) { this.logger.error('Failed to upload signal', { error }); - return { - success: false, - error: error instanceof Error ? error.message : 'Unknown error' - }; + return this.buildErrorResponse(error); } } async searchTenantProtectionScope(payload) { @@ -122,11 +111,7 @@ export class PurviewClient { } catch (error) { this.logger.error('Failed to search tenant protection scope', { error }); - return { - success: false, - error: error instanceof Error ? error.message : 'Unknown error', - statusCode: error?.statusCode - }; + return this.buildErrorResponse(error); } } async searchUserProtectionScope(userId, payload) { @@ -144,11 +129,7 @@ export class PurviewClient { } catch (error) { this.logger.error(`Failed to search protection scope for user ${userId}`, { error }); - return { - success: false, - error: error instanceof Error ? error.message : 'Unknown error', - statusCode: error?.statusCode - }; + return this.buildErrorResponse(error); } } async getUserInfo(userEmails) { @@ -165,10 +146,7 @@ export class PurviewClient { } catch (error) { this.logger.error('Failed to get user info', { error }); - return { - success: false, - error: error instanceof Error ? error.message : 'Unknown error' - }; + return this.buildErrorResponse(error); } } async sendRequest(endpoint, payload = null, method = "POST", additionalHeaders = {}, operationName = 'Unknown') { @@ -230,6 +208,8 @@ export class PurviewClient { } const err = new Error('Authentication failed. Token may be expired.'); err.statusCode = 401; + err.correlationId = correlationId; + err.responseBody = this.sanitizeErrorResponse(responseText); throw err; } if (response.status === 429) { @@ -238,6 +218,8 @@ export class PurviewClient { } const err = new Error(`API request failed: ${response.status} - ${response.statusText}`); err.statusCode = response.status; + err.correlationId = correlationId; + err.responseBody = this.sanitizeErrorResponse(responseText); throw err; } try { @@ -279,6 +261,19 @@ export class PurviewClient { } return value; } + buildErrorResponse(error) { + const message = error instanceof Error ? error.message : 'Unknown error'; + const statusCode = error?.statusCode; + const correlationId = error?.correlationId; + const responseBody = error?.responseBody; + return { + success: false, + error: message, + statusCode, + correlationId, + responseBody, + }; + } generateRequestId() { return `${this.config.repository.runId}-${Date.now()}-${Math.random().toString(36).substr(2, 9)}`; } diff --git a/dist/api/PurviewClient.js.map b/dist/api/PurviewClient.js.map index 9d20e5b..be3e0e1 100644 --- a/dist/api/PurviewClient.js.map +++ b/dist/api/PurviewClient.js.map @@ -1 +1 @@ -{"version":3,"file":"purviewClient.js","sourceRoot":"","sources":["../../src/api/purviewClient.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"purviewClient.js","sourceRoot":"","sources":["../../src/api/purviewClient.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AACzC,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAErD,MAAM,OAAO,aAAa;IAQK;IAPZ,MAAM,CAAS;IACf,YAAY,CAAe;IACpC,SAAS,GAAkB,IAAI,CAAC;IAChC,aAAa,GAAmC,IAAI,CAAC;IACrD,YAAY,GAAwB,IAAI,CAAC;IAChC,OAAO,CAAS;IAEjC,YAA6B,MAAoB;QAApB,WAAM,GAAN,MAAM,CAAc;QAC/C,IAAI,CAAC,MAAM,GAAG,IAAI,MAAM,CAAC,eAAe,CAAC,CAAC;QAC1C,IAAI,CAAC,YAAY,GAAG,IAAI,YAAY,EAAE,CAAC;QACvC,IAAI,CAAC,OAAO,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,eAAe,EAAE,CAAC;IAClD,CAAC;IAED,YAAY,CAAC,KAAa;QACxB,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;IACzB,CAAC;IAED;;;;OAIG;IACH,gBAAgB,CAAC,QAA+B;QAC9C,IAAI,CAAC,aAAa,GAAG,QAAQ,CAAC;IAChC,CAAC;IAED;;;OAGG;IACH,eAAe,CAAC,OAAmB;QACjC,IAAI,CAAC,YAAY,GAAG,OAAO,CAAC;IAC9B,CAAC;IAEO,KAAK,CAAC,gBAAgB;QAC5B,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC;YACvB,OAAO,MAAM,IAAI,CAAC,aAAa,EAAE,CAAC;QACpC,CAAC;QACD,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;YACnB,OAAO,IAAI,CAAC,SAAS,CAAC;QACxB,CAAC;QACD,MAAM,IAAI,KAAK,CAAC,8BAA8B,CAAC,CAAC;IAClD,CAAC;IAED,KAAK,CAAC,mBAAmB,CAAC,OAAmC;QAC3D,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;YACpB,MAAM,IAAI,KAAK,CAAC,8BAA8B,CAAC,CAAC;QAClD,CAAC;QAED,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,oCAAoC,CAAC,CAAC;QAEvD,MAAM,QAAQ,GAAG,GAAG,IAAI,CAAC,OAAO,yDAAyD,CAAC;QAC1F,IAAI,aAAa,GAAW,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC;QAEvE,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,gBAAgB,CACrD,KAAK,IAAI,EAAE,CAAC,IAAI,CAAC,WAAW,CAAC,QAAQ,EAAE,aAAa,EAAE,MAAM,EAAE,EAAE,EAAE,qBAAqB,CAAC,EACxF,qBAAqB,CACtB,CAAC;YAEF,OAAO,MAAM,CAAC;QAChB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,0CAA0C,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC;YACzE,OAAO,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC,CAAC;QACxC,CAAC;IACH,CAAC;IAED,KAAK,CAAC,cAAc,CAAC,MAAc,EAAE,OAA8B,EAAE,eAAuB,EAAE,SAAkB,IAAI;QAClH,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;YACpB,MAAM,IAAI,KAAK,CAAC,8BAA8B,CAAC,CAAC;QAClD,CAAC;QAED,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,+BAA+B,MAAM,WAAW,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,GAAG,CAAC,CAAC;QAEnG,MAAM,QAAQ,GAAG,GAAG,IAAI,CAAC,OAAO,UAAU,MAAM,2CAA2C,CAAC;QAC5F,MAAM,aAAa,GAAW,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC;QAEzE,MAAM,iBAAiB,GAA2B,EAAE,CAAC;QACrD,IAAI,eAAe,EAAE,CAAC;YACpB,iBAAiB,CAAC,eAAe,CAAC,GAAG,eAAe,CAAC;QACvD,CAAC;QACD,IAAI,MAAM,EAAE,CAAC;YACX,iBAAiB,CAAC,QAAQ,CAAC,GAAG,gBAAgB,CAAC;QACjD,CAAC;QAED,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,gBAAgB,CACrD,KAAK,IAAI,EAAE,CAAC,IAAI,CAAC,WAAW,CAAC,QAAQ,EAAE,aAAa,EAAE,MAAM,EAAE,iBAAiB,EAAE,gBAAgB,CAAC,EAClG,gBAAgB,CACjB,CAAC;YAEF,OAAO,MAAM,CAAC;QAChB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,sCAAsC,MAAM,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC;YAC7E,OAAO,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC,CAAC;QACxC,CAAC;IACH,CAAC;IAED,KAAK,CAAC,YAAY,CAAC,OAA4B;QAC7C,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;YACpB,MAAM,IAAI,KAAK,CAAC,8BAA8B,CAAC,CAAC;QAClD,CAAC;QAED,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,wBAAwB,OAAO,CAAC,eAAe,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,CAAC,CAAC;QAElG,MAAM,QAAQ,GAAG,GAAG,IAAI,CAAC,OAAO,UAAU,OAAO,CAAC,MAAM,yDAAyD,CAAC;QAClH,IAAI,aAAa,GAAW,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC;QAEvE,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,gBAAgB,CACrD,KAAK,IAAI,EAAE,CAAC,IAAI,CAAC,WAAW,CAAC,QAAQ,EAAE,aAAa,EAAE,MAAM,EAAE,EAAE,EAAE,cAAc,CAAC,EACjF,cAAc,CACf,CAAC;YAEF,OAAO,MAAM,CAAC;QAChB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,yBAAyB,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC;YACxD,OAAO,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC,CAAC;QACxC,CAAC;IACH,CAAC;IAED,KAAK,CAAC,2BAA2B,CAAC,OAAgC;QAChE,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;YACpB,MAAM,IAAI,KAAK,CAAC,8BAA8B,CAAC,CAAC;QAClD,CAAC;QAED,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,mCAAmC,CAAC,CAAC;QAEtD,MAAM,QAAQ,GAAG,GAAG,IAAI,CAAC,OAAO,8DAA8D,CAAC;QAC/F,IAAI,aAAa,GAAW,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC;QAEvE,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,gBAAgB,CACrD,KAAK,IAAI,EAAE,CAAC,IAAI,CAAC,WAAW,CAAC,QAAQ,EAAE,aAAa,EAAE,MAAM,EAAE,EAAE,EAAE,6BAA6B,CAAC,EAChG,6BAA6B,CAC9B,CAAC;YAEF,MAAM,UAAU,GAAG,MAAM,CAAC,IAAI,EAAE,KAAK,EAAE,MAAM,IAAI,CAAC,CAAC;YACnD,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,0CAA0C,UAAU,WAAW,CAAC,CAAC;YAElF,OAAO,MAAM,CAAC;QAChB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,0CAA0C,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC;YACzE,OAAO,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC,CAAC;QACxC,CAAC;IACH,CAAC;IAED,KAAK,CAAC,yBAAyB,CAAC,MAAc,EAAE,OAAgC;QAC9E,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;YACpB,MAAM,IAAI,KAAK,CAAC,8BAA8B,CAAC,CAAC;QAClD,CAAC;QAED,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,uCAAuC,MAAM,EAAE,CAAC,CAAC;QAElE,MAAM,QAAQ,GAAG,GAAG,IAAI,CAAC,OAAO,UAAU,MAAM,qDAAqD,CAAC;QACtG,IAAI,aAAa,GAAW,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC;QAEvE,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,gBAAgB,CACrD,KAAK,IAAI,EAAE,CAAC,IAAI,CAAC,WAAW,CAAC,QAAQ,EAAE,aAAa,EAAE,MAAM,EAAE,EAAE,EAAE,2BAA2B,CAAC,EAC9F,2BAA2B,CAC5B,CAAC;YAEF,MAAM,UAAU,GAAG,MAAM,CAAC,IAAI,EAAE,KAAK,EAAE,MAAM,IAAI,CAAC,CAAC;YACnD,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,wCAAwC,UAAU,sBAAsB,MAAM,EAAE,CAAC,CAAC;YAEnG,OAAO,MAAM,CAAC;QAChB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,8CAA8C,MAAM,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC;YACrF,OAAO,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC,CAAC;QACxC,CAAC;IACH,CAAC;IAED,KAAK,CAAC,WAAW,CAAC,UAAoB;QACpC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;YACpB,MAAM,IAAI,KAAK,CAAC,8BAA8B,CAAC,CAAC;QAClD,CAAC;QAED,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,yBAAyB,UAAU,CAAC,MAAM,QAAQ,CAAC,CAAC;QAErE,IAAI,cAAc,GAAG,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,yBAAyB,KAAK,GAAG,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAE7F,MAAM,QAAQ,GAAG,GAAG,IAAI,CAAC,OAAO,gDAAgD,cAAc,EAAE,CAAC;QAEjG,IAAI,CAAC;YACH,MAAM,MAAM,GAAwC,MAAM,IAAI,CAAC,YAAY,CAAC,gBAAgB,CAC1F,KAAK,IAAI,EAAE,CAAC,IAAI,CAAC,WAAW,CAAC,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,EAAE,aAAa,CAAC,EACtE,aAAa,CACd,CAAC;YAEF,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,0BAA0B,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,MAAM,QAAQ,CAAC,CAAC;YAE9E,OAAO,MAAM,CAAC;QAChB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,yBAAyB,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC;YACxD,OAAO,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC,CAAC;QACxC,CAAC;IACH,CAAC;IAEO,KAAK,CAAC,WAAW,CAAC,QAAgB,EAAE,UAAyB,IAAI,EAAE,SAAiB,MAAM,EAAE,oBAA4C,EAAE,EAAE,gBAAwB,SAAS;QACnL,OAAO,IAAI,CAAC,gBAAgB,CAAC,QAAQ,EAAE,OAAO,EAAE,MAAM,EAAE,iBAAiB,EAAE,aAAa,EAAE,IAAI,CAAC,CAAC;IAClG,CAAC;IAEO,KAAK,CAAC,gBAAgB,CAAC,QAAgB,EAAE,OAAsB,EAAE,MAAc,EAAE,iBAAyC,EAAE,aAAqB,EAAE,cAAuB;QAChL,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC,gBAAgB,EAAE,CAAC;QACnD,MAAM,SAAS,GAAG,IAAI,CAAC,iBAAiB,EAAE,CAAC;QAC3C,MAAM,OAAO,GAA2B;YACtC,eAAe,EAAE,UAAU,YAAY,EAAE;YACzC,cAAc,EAAE,kBAAkB;YAClC,cAAc,EAAE,SAAS;YACzB,YAAY,EAAE,yBAAyB;YACvC,GAAG,iBAAiB;SACrB,CAAC;QAEF,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,qBAAqB,CAAC,CAAC;QAC9C,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,aAAa,WAAW,EAAE;YAC9C,QAAQ,EAAE,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC;YACzC,MAAM;YACN,SAAS;YACT,iBAAiB,EAAE,MAAM,CAAC,IAAI,CAAC,iBAAiB,CAAC;SAClD,CAAC,CAAC;QACH,IAAI,OAAO,EAAE,CAAC;YACZ,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,aAAa,mBAAmB,EAAE;gBACtD,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC;aAC5E,CAAC,CAAC;QACL,CAAC;QAED,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,QAAQ,EAAE;gBACrC,MAAM,EAAE,MAAM;gBACd,OAAO;gBACP,IAAI,EAAE,OAAO;aACd,CAAC,CAAC;YAEH,MAAM,YAAY,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;YAC3C,MAAM,aAAa,GAAkB,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC,CAAC;YAC/E,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,aAAa,oCAAoC,QAAQ,CAAC,MAAM,qBAAqB,aAAa,EAAE,CAAC,CAAC;YAE3H,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;gBACjB,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,aAAa,uBAAuB,EAAE;oBAC1D,MAAM,EAAE,QAAQ,CAAC,MAAM;oBACvB,aAAa;oBACb,IAAI,EAAE,IAAI,CAAC,qBAAqB,CAAC,YAAY,CAAC;iBAC/C,CAAC,CAAC;gBACH,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,oBAAoB,EAAE;oBACtC,MAAM,EAAE,QAAQ,CAAC,MAAM;oBACvB,UAAU,EAAE,QAAQ,CAAC,UAAU;oBAC/B,aAAa;oBACb,QAAQ,EAAE,IAAI,CAAC,qBAAqB,CAAC,YAAY,CAAC;iBACnD,CAAC,CAAC;gBAEH,8BAA8B;gBAC9B,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;oBAC5B,oEAAoE;oBACpE,IAAI,cAAc,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC;wBACzC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,aAAa,gDAAgD,CAAC,CAAC;wBACpF,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;4BACtB,IAAI,CAAC,YAAY,EAAE,CAAC;wBACtB,CAAC;wBACD,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC;wBACvB,OAAO,IAAI,CAAC,gBAAgB,CAAC,QAAQ,EAAE,OAAO,EAAE,MAAM,EAAE,iBAAiB,EAAE,aAAa,EAAE,KAAK,CAAC,CAAC;oBACnG,CAAC;oBACD,MAAM,GAAG,GAAG,IAAI,KAAK,CAAC,8CAA8C,CAAC,CAAC;oBACrE,GAAW,CAAC,UAAU,GAAG,GAAG,CAAC;oBAC7B,GAAW,CAAC,aAAa,GAAG,aAAa,CAAC;oBAC1C,GAAW,CAAC,YAAY,GAAG,IAAI,CAAC,qBAAqB,CAAC,YAAY,CAAC,CAAC;oBACrE,MAAM,GAAG,CAAC;gBACZ,CAAC;gBAED,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;oBAC5B,MAAM,UAAU,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;oBACvD,MAAM,IAAI,KAAK,CAAC,6BAA6B,UAAU,WAAW,CAAC,CAAC;gBACtE,CAAC;gBAED,MAAM,GAAG,GAAG,IAAI,KAAK,CAAC,uBAAuB,QAAQ,CAAC,MAAM,MAAM,QAAQ,CAAC,UAAU,EAAE,CAAC,CAAC;gBACxF,GAAW,CAAC,UAAU,GAAG,QAAQ,CAAC,MAAM,CAAC;gBACzC,GAAW,CAAC,aAAa,GAAG,aAAa,CAAC;gBAC1C,GAAW,CAAC,YAAY,GAAG,IAAI,CAAC,qBAAqB,CAAC,YAAY,CAAC,CAAC;gBACrE,MAAM,GAAG,CAAC;YACZ,CAAC;YAED,IAAI,CAAC;gBACH,MAAM,IAAI,GAAG,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;gBAC1D,MAAM,IAAI,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,SAAS,CAAC;gBAC1E,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,aAAa,oBAAoB,EAAE;oBACvD,UAAU,EAAE,QAAQ,CAAC,MAAM;oBAC3B,IAAI;oBACJ,aAAa;oBACb,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC;iBAC1D,CAAC,CAAC;gBACH,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC;gBACvB,OAAO;oBACL,OAAO,EAAE,IAAI;oBACb,IAAI;oBACJ,UAAU,EAAE,QAAQ,CAAC,MAAM;oBAC3B,IAAI;iBACL,CAAC;YACJ,CAAC;YAAC,OAAO,UAAU,EAAE,CAAC;gBACpB,MAAM,sBAAsB,GAAG,IAAI,CAAC,qBAAqB,CAAC,YAAY,CAAC,CAAC;gBACxE,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,0BAA0B,EAAE,EAAE,UAAU,EAAE,sBAAsB,EAAE,CAAC,CAAC;gBACrF,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC;gBACvB,OAAO;oBACL,OAAO,EAAE,KAAK;oBACd,UAAU,EAAE,QAAQ,CAAC,MAAM;iBAC5B,CAAC;YACJ,CAAC;QACH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC;YACvB,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC;IAEO,YAAY,CAAC,IAAY,EAAE,KAAU;QAC3C,kCAAkC;QAClC,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,MAAM,GAAG,IAAI,EAAE,CAAC;YACrD,OAAO,KAAK,CAAC,SAAS,CAAC,CAAC,EAAE,GAAG,CAAC,GAAG,yBAAyB,CAAC;QAC7D,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IAEO,kBAAkB,CAAC,KAAc;QACvC,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe,CAAC;QACzE,MAAM,UAAU,GAAI,KAAa,EAAE,UAAgC,CAAC;QACpE,MAAM,aAAa,GAAI,KAAa,EAAE,aAAmC,CAAC;QAC1E,MAAM,YAAY,GAAI,KAAa,EAAE,YAAkC,CAAC;QACxE,OAAO;YACL,OAAO,EAAE,KAAK;YACd,KAAK,EAAE,OAAO;YACd,UAAU;YACV,aAAa;YACb,YAAY;SACb,CAAC;IACJ,CAAC;IAEO,iBAAiB;QACvB,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,KAAK,IAAI,IAAI,CAAC,GAAG,EAAE,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC;IACpG,CAAC;IAEO,gBAAgB,CAAC,QAAgB;QACvC,OAAO,QAAQ,CAAC,OAAO,CAAC,gEAAgE,EAAE,QAAQ,CAAC,CAAC;IACtG,CAAC;IAEO,qBAAqB,CAAC,QAAgB;QAC5C,2DAA2D;QAC3D,MAAM,SAAS,GAAG,QAAQ;aACvB,OAAO,CAAC,mBAAmB,EAAE,mBAAmB,CAAC;aACjD,OAAO,CAAC,gEAAgE,EAAE,QAAQ,CAAC,CAAC;QAEvF,OAAO,SAAS,CAAC,SAAS,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,eAAe;IACrD,CAAC;CAEF"} \ No newline at end of file diff --git a/dist/config/types.d.ts b/dist/config/types.d.ts index a147f81..a39ed0c 100644 --- a/dist/config/types.d.ts +++ b/dist/config/types.d.ts @@ -51,6 +51,8 @@ export interface ApiResponse { error?: string; statusCode?: number; etag?: string; + correlationId?: string; + responseBody?: string; } export type Result = { success: true; @@ -171,7 +173,7 @@ export interface AccessedResourceDetails { url?: string; labelId?: string; accessType?: ResourceAccessType; - status?: ResourceAccessStatus; + status: ResourceAccessStatus; isCrossPromptInjectionDetected?: boolean; } export type ResourceAccessType = "none" | "read" | "write" | "create" | "unknownFutureValue"; diff --git a/dist/config/types.d.ts.map b/dist/config/types.d.ts.map index 050f222..202ecfd 100644 --- a/dist/config/types.d.ts.map +++ b/dist/config/types.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/config/types.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/config/types.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/dist/config/types.js.map b/dist/config/types.js.map index e6d9b28..9da2792 100644 --- a/dist/config/types.js.map +++ b/dist/config/types.js.map @@ -1 +1 @@ -{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/config/types.ts"],"names":[],"mappings":"AAiJA,MAAM,CAAN,IAAY,QAMX;AAND,WAAY,QAAQ;IAChB,6CAAW,CAAA;IACX,mDAAc,CAAA;IACd,mDAAc,CAAA;IACd,uDAAgB,CAAA;IAChB,uDAAgB,CAAA;AACpB,CAAC,EANW,QAAQ,KAAR,QAAQ,QAMnB;AA4OD,MAAM,CAAN,IAAY,aAGX;AAHD,WAAY,aAAa;IACvB,kDAAiC,CAAA;IACjC,oDAAmC,CAAA;AACrC,CAAC,EAHW,aAAa,KAAb,aAAa,QAGxB"} \ No newline at end of file +{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/config/types.ts"],"names":[],"mappings":"AAmJA,MAAM,CAAN,IAAY,QAMX;AAND,WAAY,QAAQ;IAChB,6CAAW,CAAA;IACX,mDAAc,CAAA;IACd,mDAAc,CAAA;IACd,uDAAgB,CAAA;IAChB,uDAAgB,CAAA;AACpB,CAAC,EANW,QAAQ,KAAR,QAAQ,QAMnB;AA4OD,MAAM,CAAN,IAAY,aAGX;AAHD,WAAY,aAAa;IACvB,kDAAiC,CAAA;IACjC,oDAAmC,CAAA;AACrC,CAAC,EAHW,aAAa,KAAb,aAAa,QAGxB"} \ No newline at end of file diff --git a/dist/index.js b/dist/index.js index ac7e82c..47dfa4c 100644 --- a/dist/index.js +++ b/dist/index.js @@ -62040,11 +62040,7 @@ class PurviewClient { } catch (error) { this.logger.error('Failed to process content asynchronously', { error }); - return { - success: false, - error: error instanceof Error ? error.message : 'Unknown error', - statusCode: error?.statusCode - }; + return this.buildErrorResponse(error); } } async processContent(userId, request, scopeIdentifier, inline = true) { @@ -62067,11 +62063,7 @@ class PurviewClient { } catch (error) { this.logger.error(`Failed to process content for user ${userId}`, { error }); - return { - success: false, - error: error instanceof Error ? error.message : 'Unknown error', - statusCode: error?.statusCode - }; + return this.buildErrorResponse(error); } } async uploadSignal(payload) { @@ -62087,10 +62079,7 @@ class PurviewClient { } catch (error) { this.logger.error('Failed to upload signal', { error }); - return { - success: false, - error: error instanceof Error ? error.message : 'Unknown error' - }; + return this.buildErrorResponse(error); } } async searchTenantProtectionScope(payload) { @@ -62108,11 +62097,7 @@ class PurviewClient { } catch (error) { this.logger.error('Failed to search tenant protection scope', { error }); - return { - success: false, - error: error instanceof Error ? error.message : 'Unknown error', - statusCode: error?.statusCode - }; + return this.buildErrorResponse(error); } } async searchUserProtectionScope(userId, payload) { @@ -62130,11 +62115,7 @@ class PurviewClient { } catch (error) { this.logger.error(`Failed to search protection scope for user ${userId}`, { error }); - return { - success: false, - error: error instanceof Error ? error.message : 'Unknown error', - statusCode: error?.statusCode - }; + return this.buildErrorResponse(error); } } async getUserInfo(userEmails) { @@ -62151,10 +62132,7 @@ class PurviewClient { } catch (error) { this.logger.error('Failed to get user info', { error }); - return { - success: false, - error: error instanceof Error ? error.message : 'Unknown error' - }; + return this.buildErrorResponse(error); } } async sendRequest(endpoint, payload = null, method = "POST", additionalHeaders = {}, operationName = 'Unknown') { @@ -62216,6 +62194,8 @@ class PurviewClient { } const err = new Error('Authentication failed. Token may be expired.'); err.statusCode = 401; + err.correlationId = correlationId; + err.responseBody = this.sanitizeErrorResponse(responseText); throw err; } if (response.status === 429) { @@ -62224,6 +62204,8 @@ class PurviewClient { } const err = new Error(`API request failed: ${response.status} - ${response.statusText}`); err.statusCode = response.status; + err.correlationId = correlationId; + err.responseBody = this.sanitizeErrorResponse(responseText); throw err; } try { @@ -62265,6 +62247,19 @@ class PurviewClient { } return value; } + buildErrorResponse(error) { + const message = error instanceof Error ? error.message : 'Unknown error'; + const statusCode = error?.statusCode; + const correlationId = error?.correlationId; + const responseBody = error?.responseBody; + return { + success: false, + error: message, + statusCode, + correlationId, + responseBody, + }; + } generateRequestId() { return `${this.config.repository.runId}-${Date.now()}-${Math.random().toString(36).substr(2, 9)}`; } @@ -63448,6 +63443,7 @@ class PayloadBuilder { name: `${this.config.repository.repo}/${file.path}`, url: fileUrl, accessType: this.mapChangeTypeToAccessType(file.typeOfChange), + status: 'success', }], ...(agents.length > 0 ? { agents } : {}), }; @@ -63528,6 +63524,7 @@ class PayloadBuilder { name: `${this.config.repository.repo}/${commitIdentifier}`, url: commitUrl, accessType: 'write', + status: 'success', }]; for (const file of commitGroup.files) { accessedResources.push({ @@ -63535,6 +63532,7 @@ class PayloadBuilder { name: `${this.config.repository.repo}/${file.path}`, url: `${repoBaseUrl}/blob/${this.config.repository.branch}/${file.path}`, accessType: this.mapChangeTypeToAccessType(file.typeOfChange), + status: 'success', }); } const entry = { diff --git a/dist/payload/PayloadBuilder.d.ts.map b/dist/payload/PayloadBuilder.d.ts.map index 12f8043..bc68aef 100644 --- a/dist/payload/PayloadBuilder.d.ts.map +++ b/dist/payload/PayloadBuilder.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"payloadBuilder.d.ts","sourceRoot":"","sources":["../../src/payload/payloadBuilder.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,mBAAmB,EAAE,QAAQ,EAAe,MAAM,EAAE,uBAAuB,EAAE,wBAAwB,EAAE,eAAe,EAA6B,0BAA0B,EAAE,yBAAyB,EAAE,qBAAqB,EAAE,gBAAgB,EAAE,gBAAgB,EAAiB,YAAY,EAAE,cAAc,EAAiB,WAAW,EAA4C,MAAM,iBAAiB,CAAC;AAGrb,qBAAa,cAAc;IAYb,OAAO,CAAC,QAAQ,CAAC,MAAM;IAXnC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAChC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAmB;IAClD,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAwB;IACtD,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,aAAa,CAA2C;IAChF,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAY;IAC3C,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAW;IAC7C,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,mBAAmB,CAAS;IAEpD,kFAAkF;IAC3E,UAAU,UAAS;gBAEG,MAAM,EAAE,YAAY;IAIjD,4BAA4B,IAAI,uBAAuB;IAkBvD,6BAA6B,CAAC,KAAK,EAAE,YAAY,EAAE,EAAE,aAAa,EAAE,wBAAwB,EAAE,MAAM,EAAE,MAAM,GAAG,eAAe;IAiG9H;;;;;;;OAOG;IACH,qBAAqB,CACnB,MAAM,EAAE,YAAY,EAAE,EACtB,eAAe,EAAE,QAAQ,EACzB,eAAe,EAAE,cAAc,GAC9B,gBAAgB;IAoDnB;;OAEG;IACH,iCAAiC,CAAC,IAAI,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,qBAAqB,EAAE;IA0BzH,OAAO,CAAC,aAAa;IAerB,wBAAwB,CAAC,KAAK,EAAE,YAAY,EAAE,EAAE,MAAM,EAAE,MAAM,GAAG,mBAAmB,EAAE;IAiDtF,+BAA+B,CAAC,KAAK,EAAE,YAAY,EAAE,GAAG,0BAA0B,EAAE;IAiEpF,OAAO,CAAC,sBAAsB;IAqE9B;;OAEG;IACH,OAAO,CAAC,sBAAsB;IA+B9B;;OAEG;IACH,2BAA2B,CAAC,WAAW,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,GAAG,gBAAgB;IA0EvH;;OAEG;IACH,gCAAgC,CAAC,WAAW,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,GAAG,qBAAqB;IAKjI;;OAEG;IACH,8BAA8B,CAAC,WAAW,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,GAAG,mBAAmB;IAe7F;;OAEG;IACH,kCAAkC,CAAC,WAAW,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,GAAG,yBAAyB;IAUvI,OAAO,CAAC,yBAAyB;CAgBlC"} \ No newline at end of file +{"version":3,"file":"payloadBuilder.d.ts","sourceRoot":"","sources":["../../src/payload/payloadBuilder.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,mBAAmB,EAAE,QAAQ,EAAe,MAAM,EAAE,uBAAuB,EAAE,wBAAwB,EAAE,eAAe,EAA6B,0BAA0B,EAAE,yBAAyB,EAAE,qBAAqB,EAAE,gBAAgB,EAAE,gBAAgB,EAAiB,YAAY,EAAE,cAAc,EAAiB,WAAW,EAA4C,MAAM,iBAAiB,CAAC;AAGrb,qBAAa,cAAc;IAYb,OAAO,CAAC,QAAQ,CAAC,MAAM;IAXnC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAChC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAmB;IAClD,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAwB;IACtD,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,aAAa,CAA2C;IAChF,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAY;IAC3C,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAW;IAC7C,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,mBAAmB,CAAS;IAEpD,kFAAkF;IAC3E,UAAU,UAAS;gBAEG,MAAM,EAAE,YAAY;IAIjD,4BAA4B,IAAI,uBAAuB;IAkBvD,6BAA6B,CAAC,KAAK,EAAE,YAAY,EAAE,EAAE,aAAa,EAAE,wBAAwB,EAAE,MAAM,EAAE,MAAM,GAAG,eAAe;IAiG9H;;;;;;;OAOG;IACH,qBAAqB,CACnB,MAAM,EAAE,YAAY,EAAE,EACtB,eAAe,EAAE,QAAQ,EACzB,eAAe,EAAE,cAAc,GAC9B,gBAAgB;IAoDnB;;OAEG;IACH,iCAAiC,CAAC,IAAI,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,qBAAqB,EAAE;IA0BzH,OAAO,CAAC,aAAa;IAerB,wBAAwB,CAAC,KAAK,EAAE,YAAY,EAAE,EAAE,MAAM,EAAE,MAAM,GAAG,mBAAmB,EAAE;IAiDtF,+BAA+B,CAAC,KAAK,EAAE,YAAY,EAAE,GAAG,0BAA0B,EAAE;IAiEpF,OAAO,CAAC,sBAAsB;IAsE9B;;OAEG;IACH,OAAO,CAAC,sBAAsB;IA+B9B;;OAEG;IACH,2BAA2B,CAAC,WAAW,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,GAAG,gBAAgB;IA4EvH;;OAEG;IACH,gCAAgC,CAAC,WAAW,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,GAAG,qBAAqB;IAKjI;;OAEG;IACH,8BAA8B,CAAC,WAAW,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,GAAG,mBAAmB;IAe7F;;OAEG;IACH,kCAAkC,CAAC,WAAW,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,GAAG,yBAAyB;IAUvI,OAAO,CAAC,yBAAyB;CAgBlC"} \ No newline at end of file diff --git a/dist/payload/PayloadBuilder.js b/dist/payload/PayloadBuilder.js index e321b2e..caa77df 100644 --- a/dist/payload/PayloadBuilder.js +++ b/dist/payload/PayloadBuilder.js @@ -339,6 +339,7 @@ export class PayloadBuilder { name: `${this.config.repository.repo}/${file.path}`, url: fileUrl, accessType: this.mapChangeTypeToAccessType(file.typeOfChange), + status: 'success', }], ...(agents.length > 0 ? { agents } : {}), }; @@ -419,6 +420,7 @@ export class PayloadBuilder { name: `${this.config.repository.repo}/${commitIdentifier}`, url: commitUrl, accessType: 'write', + status: 'success', }]; for (const file of commitGroup.files) { accessedResources.push({ @@ -426,6 +428,7 @@ export class PayloadBuilder { name: `${this.config.repository.repo}/${file.path}`, url: `${repoBaseUrl}/blob/${this.config.repository.branch}/${file.path}`, accessType: this.mapChangeTypeToAccessType(file.typeOfChange), + status: 'success', }); } const entry = { diff --git a/dist/payload/PayloadBuilder.js.map b/dist/payload/PayloadBuilder.js.map index 5c62b13..d12278a 100644 --- a/dist/payload/PayloadBuilder.js.map +++ b/dist/payload/PayloadBuilder.js.map @@ -1 +1 @@ -{"version":3,"file":"payloadBuilder.js","sourceRoot":"","sources":["../../src/payload/payloadBuilder.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"payloadBuilder.js","sourceRoot":"","sources":["../../src/payload/payloadBuilder.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/src/api/purviewClient.ts b/src/api/purviewClient.ts index 4b9ae5b..5f44b39 100644 --- a/src/api/purviewClient.ts +++ b/src/api/purviewClient.ts @@ -66,11 +66,7 @@ export class PurviewClient { return result; } catch (error) { this.logger.error('Failed to process content asynchronously', { error }); - return { - success: false, - error: error instanceof Error ? error.message : 'Unknown error', - statusCode: (error as any)?.statusCode - }; + return this.buildErrorResponse(error); } } @@ -101,11 +97,7 @@ export class PurviewClient { return result; } catch (error) { this.logger.error(`Failed to process content for user ${userId}`, { error }); - return { - success: false, - error: error instanceof Error ? error.message : 'Unknown error', - statusCode: (error as any)?.statusCode - }; + return this.buildErrorResponse(error); } } @@ -128,10 +120,7 @@ export class PurviewClient { return result; } catch (error) { this.logger.error('Failed to upload signal', { error }); - return { - success: false, - error: error instanceof Error ? error.message : 'Unknown error' - }; + return this.buildErrorResponse(error); } } @@ -157,11 +146,7 @@ export class PurviewClient { return result; } catch (error) { this.logger.error('Failed to search tenant protection scope', { error }); - return { - success: false, - error: error instanceof Error ? error.message : 'Unknown error', - statusCode: (error as any)?.statusCode - }; + return this.buildErrorResponse(error); } } @@ -187,11 +172,7 @@ export class PurviewClient { return result; } catch (error) { this.logger.error(`Failed to search protection scope for user ${userId}`, { error }); - return { - success: false, - error: error instanceof Error ? error.message : 'Unknown error', - statusCode: (error as any)?.statusCode - }; + return this.buildErrorResponse(error); } } @@ -217,10 +198,7 @@ export class PurviewClient { return result; } catch (error) { this.logger.error('Failed to get user info', { error }); - return { - success: false, - error: error instanceof Error ? error.message : 'Unknown error' - }; + return this.buildErrorResponse(error); } } @@ -289,6 +267,8 @@ export class PurviewClient { } const err = new Error('Authentication failed. Token may be expired.'); (err as any).statusCode = 401; + (err as any).correlationId = correlationId; + (err as any).responseBody = this.sanitizeErrorResponse(responseText); throw err; } @@ -299,6 +279,8 @@ export class PurviewClient { const err = new Error(`API request failed: ${response.status} - ${response.statusText}`); (err as any).statusCode = response.status; + (err as any).correlationId = correlationId; + (err as any).responseBody = this.sanitizeErrorResponse(responseText); throw err; } @@ -340,6 +322,20 @@ export class PurviewClient { } return value; } + + private buildErrorResponse(error: unknown): ApiResponse { + const message = error instanceof Error ? error.message : 'Unknown error'; + const statusCode = (error as any)?.statusCode as number | undefined; + const correlationId = (error as any)?.correlationId as string | undefined; + const responseBody = (error as any)?.responseBody as string | undefined; + return { + success: false, + error: message, + statusCode, + correlationId, + responseBody, + }; + } private generateRequestId(): string { return `${this.config.repository.runId}-${Date.now()}-${Math.random().toString(36).substr(2, 9)}`; diff --git a/src/config/types.ts b/src/config/types.ts index 92579a3..1651b38 100644 --- a/src/config/types.ts +++ b/src/config/types.ts @@ -66,6 +66,8 @@ export interface ApiResponse { error?: string; statusCode?: number; etag?: string; + correlationId?: string; + responseBody?: string; } export type Result = @@ -209,7 +211,7 @@ export interface AccessedResourceDetails { url?: string; labelId?: string; accessType?: ResourceAccessType; - status?: ResourceAccessStatus; + status: ResourceAccessStatus; isCrossPromptInjectionDetected?: boolean; } diff --git a/src/payload/payloadBuilder.ts b/src/payload/payloadBuilder.ts index 3713c83..e860e53 100644 --- a/src/payload/payloadBuilder.ts +++ b/src/payload/payloadBuilder.ts @@ -398,6 +398,7 @@ export class PayloadBuilder { name: `${this.config.repository.repo}/${file.path}`, url: fileUrl, accessType: this.mapChangeTypeToAccessType(file.typeOfChange), + status: 'success', }], ...(agents.length > 0 ? { agents } : {}), }; @@ -488,6 +489,7 @@ export class PayloadBuilder { name: `${this.config.repository.repo}/${commitIdentifier}`, url: commitUrl, accessType: 'write', + status: 'success', }]; for (const file of commitGroup.files) { accessedResources.push({ @@ -495,6 +497,7 @@ export class PayloadBuilder { name: `${this.config.repository.repo}/${file.path}`, url: `${repoBaseUrl}/blob/${this.config.repository.branch}/${file.path}`, accessType: this.mapChangeTypeToAccessType(file.typeOfChange), + status: 'success', }); } diff --git a/tests/api/purviewClient.test.ts b/tests/api/purviewClient.test.ts index 58240a6..862f974 100644 --- a/tests/api/purviewClient.test.ts +++ b/tests/api/purviewClient.test.ts @@ -9,7 +9,7 @@ jest.mock('@actions/core', () => ({ })); import { PurviewClient } from '../../src/api/purviewClient'; -import { ActionConfig, ProcessContentBatchRequest, UploadSignalRequest } from '../../src/config/types'; +import { ActionConfig, UploadSignalRequest } from '../../src/config/types'; function createConfig(overrides: Partial = {}): ActionConfig { return { @@ -69,16 +69,23 @@ describe('PurviewClient', () => { }); expect(result.success).toBe(true); }); - }); - describe('processContentAsync', () => { it('throws when auth token is not set', async () => { - const payload: ProcessContentBatchRequest = { processContentRequests: [] }; - await expect(client.processContentAsync(payload)).rejects.toThrow( + await expect(client.processContentAsync({ processContentRequests: [] })).rejects.toThrow( 'Authentication token not set' ); + await expect( + client.processContent('user-1', { contentToProcess: { contentEntries: [] } as any }, '') + ).rejects.toThrow('Authentication token not set'); + await expect(client.uploadSignal({ + id: 'sig-1', userId: 'u1', scopeIdentifier: '', + contentMetadata: { contentEntries: [{ identifier: 'test.ts' }] } as any, + })).rejects.toThrow('Authentication token not set'); + await expect(client.getUserInfo(['test@test.com'])).rejects.toThrow('Authentication token not set'); }); + }); + describe('processContentAsync', () => { it('returns success on 200 response', async () => { client.setAuthToken('token'); mockFetch({ status: 200, body: { id: 'batch-1' } }); @@ -89,12 +96,6 @@ describe('PurviewClient', () => { }); describe('processContent', () => { - it('throws when auth token is not set', async () => { - await expect( - client.processContent('user-1', { contentToProcess: { contentEntries: [] } as any }, '') - ).rejects.toThrow('Authentication token not set'); - }); - it('sends request to user-specific endpoint', async () => { client.setAuthToken('token'); mockFetch({ status: 200, body: { id: 'pc-1', policyActions: [] } }); @@ -141,20 +142,6 @@ describe('PurviewClient', () => { }); describe('uploadSignal', () => { - it('throws when auth token is not set', async () => { - const payload: UploadSignalRequest = { - id: 'sig-1', - userId: 'u1', - scopeIdentifier: '', - contentMetadata: { - contentEntries: [{ identifier: 'test.ts' }], - } as any, - }; - await expect(client.uploadSignal(payload)).rejects.toThrow( - 'Authentication token not set' - ); - }); - it('sends to contentActivities endpoint', async () => { client.setAuthToken('token'); mockFetch({ status: 200, body: {} }); @@ -197,12 +184,6 @@ describe('PurviewClient', () => { }); describe('getUserInfo', () => { - it('throws when auth token is not set', async () => { - await expect(client.getUserInfo(['test@test.com'])).rejects.toThrow( - 'Authentication token not set' - ); - }); - it('sends GET request with filter query', async () => { client.setAuthToken('token'); mockFetch({ @@ -220,13 +201,39 @@ describe('PurviewClient', () => { }); describe('error handling', () => { - it('returns success=false on non-retryable errors', async () => { + it('returns full error details (message, statusCode, correlationId, responseBody) on failure', async () => { client.setAuthToken('token'); - mockFetch({ status: 400, body: { error: 'Bad Request' } }); + const headers = new Map([['client-request-id', 'corr-abc']]); + globalThis.fetch = jest.fn().mockResolvedValue({ + ok: false, status: 400, statusText: 'Bad Request', + text: () => Promise.resolve('{"error":{"code":"InvalidRequest","message":"missing field"}}'), + headers: { get: (k: string) => headers.get(k.toLowerCase()) ?? null }, + }); - // processContentAsync catches errors and returns { success: false } const result = await client.processContentAsync({ processContentRequests: [] }); expect(result.success).toBe(false); + expect(result.error).toBe('API request failed: 400 - Bad Request'); + expect(result.statusCode).toBe(400); + expect(result.correlationId).toBe('corr-abc'); + expect(result.responseBody).toContain('InvalidRequest'); + }); + + it('returns error details consistently across all API methods', async () => { + client.setAuthToken('token'); + const headers = new Map([['client-request-id', 'corr-xyz']]); + globalThis.fetch = jest.fn().mockResolvedValue({ + ok: false, status: 403, statusText: 'Forbidden', + text: () => Promise.resolve('{"error":"forbidden"}'), + headers: { get: (k: string) => headers.get(k.toLowerCase()) ?? null }, + }); + + const uploadResult = await client.uploadSignal({ + id: 'sig-1', userId: 'u1', scopeIdentifier: '', + contentMetadata: { contentEntries: [{ identifier: 'f.ts' }] } as any, + }); + expect(uploadResult.statusCode).toBe(403); + expect(uploadResult.correlationId).toBe('corr-xyz'); + expect(uploadResult.responseBody).toContain('forbidden'); }); it('includes etag from response headers', async () => { @@ -242,4 +249,64 @@ describe('PurviewClient', () => { expect(result.etag).toBe('abc-123'); }); }); + + describe('token refresh on 401', () => { + it('retries once with fresh token when tokenProvider and tokenRefresh are set', async () => { + let callCount = 0; + const headers = new Map(); + globalThis.fetch = jest.fn().mockImplementation(() => { + callCount++; + if (callCount === 1) { + return Promise.resolve({ + ok: false, status: 401, statusText: 'Unauthorized', + text: () => Promise.resolve('{}'), + headers: { get: (k: string) => headers.get(k) ?? null }, + }); + } + return Promise.resolve({ + ok: true, status: 200, statusText: 'OK', + text: () => Promise.resolve(JSON.stringify({ value: [] })), + headers: { get: (k: string) => headers.get(k) ?? null }, + }); + }); + + client.setAuthToken('stale-token'); + const refreshFn = jest.fn(); + client.setTokenProvider(async () => 'fresh-token'); + client.setTokenRefresh(refreshFn); + + const result = await client.searchTenantProtectionScope({ activities: 'uploadText' }); + expect(result.success).toBe(true); + expect(refreshFn).toHaveBeenCalledTimes(1); + expect(callCount).toBe(2); + }); + + it('fails after second 401 (no infinite retry)', async () => { + const headers = new Map(); + globalThis.fetch = jest.fn().mockResolvedValue({ + ok: false, status: 401, statusText: 'Unauthorized', + text: () => Promise.resolve('{}'), + headers: { get: (k: string) => headers.get(k) ?? null }, + }); + + client.setAuthToken('token'); + client.setTokenProvider(async () => 'token'); + client.setTokenRefresh(jest.fn()); + + // searchTenantProtectionScope catches the error and returns success=false + const result = await client.searchTenantProtectionScope({ activities: 'uploadText' }); + expect(result.success).toBe(false); + expect(result.statusCode).toBe(401); + }); + + it('does not call tokenRefresh when no provider is set', async () => { + mockFetch({ status: 401, body: {} }); + client.setAuthToken('token'); + + const result = await client.searchTenantProtectionScope({ activities: 'uploadText' }); + expect(result.success).toBe(false); + // fetch should only be called once (no retry) + expect(globalThis.fetch).toHaveBeenCalledTimes(1); + }); + }); }); diff --git a/tests/payload/payloadBuilder.test.ts b/tests/payload/payloadBuilder.test.ts index d9c8695..88cddc9 100644 --- a/tests/payload/payloadBuilder.test.ts +++ b/tests/payload/payloadBuilder.test.ts @@ -74,23 +74,12 @@ describe('PayloadBuilder', () => { }); describe('buildProtectionScopesRequest', () => { - it('returns request with uploadText activity', () => { + it('returns request with correct activity, location, and app metadata', () => { const request = builder.buildProtectionScopesRequest(); expect(request.activities).toBe('uploadText'); - }); - - it('returns request with github.com domain location', () => { - const request = builder.buildProtectionScopesRequest(); expect(request.locations).toHaveLength(1); - const loc = request.locations![0]!; - expect(loc.value).toBe('https://github.com'); - expect(loc['@odata.type']).toContain('policyLocationDomain'); - }); - - it('includes integratedAppMetadata', () => { - const request = builder.buildProtectionScopesRequest(); + expect(request.locations![0]!.value).toBe('https://github.com'); expect(request.integratedAppMetadata?.name).toBe('GitHub'); - expect(request.integratedAppMetadata?.version).toBe('0.0.1'); }); }); @@ -268,118 +257,34 @@ describe('PayloadBuilder', () => { expect(requests[0]!.contentToProcess.protectedAppMetadata?.applicationLocation.value).toBe('https://github.com'); }); - it('splits large file into multiple requests', () => { + it('splits large file into chunks under 3MB with correct metadata', () => { const largeContent = 'z'.repeat(4 * 1024 * 1024); // 4MB content const file = createFile({ path: 'large.ts', content: largeContent, size: largeContent.length }); - const requests = builder.buildPerUserProcessContentRequest(file, 'conv-1', 0); + const requests = builder.buildPerUserProcessContentRequest(file, 'my-correlation', 0); expect(requests.length).toBeGreaterThan(1); + // All but last should be marked as truncated for (let i = 0; i < requests.length - 1; i++) { expect(requests[i]!.contentToProcess.contentEntries[0]!.isTruncated).toBe(true); } - // Last should not be marked as truncated expect(requests[requests.length - 1]!.contentToProcess.contentEntries[0]!.isTruncated).toBe(false); + // All content combined should equal original const reconstructed = requests.map(r => (r.contentToProcess.contentEntries[0]!.content as any).data).join(''); expect(reconstructed).toBe(largeContent); - }); - - it('preserves realistic git diff patch content', () => { - const diffPatch = [ - '@@ -10,7 +10,9 @@ import { Logger } from "./logger";', - ' ', - ' export class UserService {', - '- private cache: Map = new Map();', - '+ private cache: Map;', - '+ private ttl: number;', - ' ', - ' constructor(private readonly config: Config) {', - '- // no-op', - '+ this.cache = new Map();', - '+ this.ttl = config.cacheTtl ?? 3600;', - ' }', - ].join('\n'); - const file = createFile({ - path: 'src/services/userService.ts', - content: diffPatch, - size: diffPatch.length, - numberOfAdditions: 4, - numberOfDeletions: 2, - numberOfChanges: 6, - typeOfChange: 'modified', - }); - - const requests = builder.buildPerUserProcessContentRequest(file, 'conv-1', 0); - - expect(requests).toHaveLength(1); - const entry = requests[0]!.contentToProcess.contentEntries[0]!; - const data = (entry.content as any).data; - // Verify the exact diff patch content is preserved - expect(data).toBe(diffPatch); - expect(data).toContain('- private cache: Map = new Map();'); - expect(data).toContain('+ this.ttl = config.cacheTtl ?? 3600;'); - expect(entry.identifier).toBe('src/services/userService.ts'); - expect(entry.isTruncated).toBe(false); - }); - - it('each chunk stays under 3MB when splitting', () => { - const maxPayloadSize = 3 * 1024 * 1024; // 3MB - const largeContent = 'x'.repeat(7 * 1024 * 1024); // 7MB — forces ~3 chunks - const file = createFile({ path: 'huge.ts', content: largeContent, size: largeContent.length }); - - const requests = builder.buildPerUserProcessContentRequest(file, 'conv-1', 0); - - expect(requests.length).toBeGreaterThanOrEqual(3); + // Each chunk stays under 3MB for (const req of requests) { - const serialized = JSON.stringify(req); - expect(serialized.length).toBeLessThanOrEqual(maxPayloadSize); + expect(JSON.stringify(req).length).toBeLessThanOrEqual(3 * 1024 * 1024); } - }); - - it('assigns sequential sequence numbers across chunks', () => { - const largeContent = 'a'.repeat(4 * 1024 * 1024); // 4MB - const startingMessageId = 5; - const file = createFile({ path: 'big.ts', content: largeContent, size: largeContent.length }); - const requests = builder.buildPerUserProcessContentRequest(file, 'conv-1', startingMessageId); - - expect(requests.length).toBeGreaterThan(1); + // Sequential sequence numbers for (let i = 0; i < requests.length; i++) { - expect(requests[i]!.contentToProcess.contentEntries[0]!.sequenceNumber).toBe(startingMessageId + i); + expect(requests[i]!.contentToProcess.contentEntries[0]!.sequenceNumber).toBe(i); } - }); - - it('does not split content that fits within 3MB', () => { - // Use a content size well under the limit to confirm single-request behavior - const content = 'd'.repeat(2 * 1024 * 1024); // 2MB — safely under 3MB - const file = createFile({ path: 'fits.ts', content, size: content.length }); - - const requests = builder.buildPerUserProcessContentRequest(file, 'c', 0); - expect(requests).toHaveLength(1); - expect((requests[0]!.contentToProcess.contentEntries[0]!.content as any).data).toBe(content); - expect(requests[0]!.contentToProcess.contentEntries[0]!.isTruncated).toBe(false); - }); - - it('splits content just over 3MB into exactly 2 requests', () => { - // 3.1MB of content — overhead is a few hundred bytes, so total is well over 3MB - const content = 'c'.repeat(Math.floor(3.1 * 1024 * 1024)); - const file = createFile({ path: 'justover.ts', content, size: content.length }); - - const requests = builder.buildPerUserProcessContentRequest(file, 'c', 0); - expect(requests).toHaveLength(2); - // Verify combined content equals original - const combined = requests.map(r => (r.contentToProcess.contentEntries[0]!.content as any).data).join(''); - expect(combined).toBe(content); - }); - - it('shares correlationId across all chunks of a split', () => { - const largeContent = 'q'.repeat(4 * 1024 * 1024); - const file = createFile({ path: 'split.ts', content: largeContent, size: largeContent.length }); - - const requests = builder.buildPerUserProcessContentRequest(file, 'my-correlation', 0); + // Shared correlationId for (const req of requests) { expect(req.contentToProcess.contentEntries[0]!.correlationId).toBe('my-correlation'); } @@ -438,6 +343,17 @@ describe('PayloadBuilder', () => { expect(allItems[0]!.requestId).toBeTruthy(); }); + it('includes userEmail in batch items', () => { + const files = [ + createFile({ path: 'a.ts', authorId: 'user-a', authorEmail: 'a@test.com' }), + createFile({ path: 'b.ts', authorId: 'user-b', authorEmail: undefined }), + ]; + const batches = builder.buildProcessContentBatchRequest(files); + const allItems = batches.flatMap(b => b.processContentRequests); + expect(allItems[0]!.userEmail).toBe('a@test.com'); + expect(allItems[1]!.userEmail).toBeUndefined(); + }); + it('splits into multiple batches when exceeding 3MB', () => { const largeContent = 'a'.repeat(1024 * 1024); // 1MB each const files = Array.from({ length: 5 }, (_, i) => @@ -451,6 +367,151 @@ describe('PayloadBuilder', () => { }); }); + describe('AiAgentInfo in payloads', () => { + it('uses committerEmail as agent name (UPN)', () => { + const file = createFile({ + committerId: 'committer-id', + committerEmail: 'committer@test.com', + committerLogin: 'committer-login', + authorId: 'author-id', + }); + const requests = builder.buildPerUserProcessContentRequest(file, 'conv-1', 0); + const entry = requests[0]!.contentToProcess.contentEntries[0] as any; + expect(entry.agents).toHaveLength(1); + expect(entry.agents[0].identifier).toBe('committer-id'); + expect(entry.agents[0].name).toBe('committer@test.com'); + }); + + it('sets version to defaultUserId when using default user', () => { + const file = createFile({ + authorId: undefined, + committerId: 'c-id', + committerEmail: 'c@test.com', + }); + const requests = builder.buildPerUserProcessContentRequest(file, 'conv-1', 0); + const entry = requests[0]!.contentToProcess.contentEntries[0] as any; + expect(entry.agents[0].version).toBe('default-user-id'); + }); + + it('sets version to undefined when user is resolved (not default)', () => { + const file = createFile({ + authorId: 'specific-user-id', + committerId: 'c-id', + committerEmail: 'c@test.com', + }); + const requests = builder.buildPerUserProcessContentRequest(file, 'conv-1', 0); + const entry = requests[0]!.contentToProcess.contentEntries[0] as any; + expect(entry.agents[0].version).toBeUndefined(); + }); + + it('sets version to "fullscan" when isFullScan is true', () => { + builder.isFullScan = true; + const file = createFile({ + authorId: 'specific-user', + committerId: 'c-id', + committerEmail: 'c@test.com', + }); + const requests = builder.buildPerUserProcessContentRequest(file, 'conv-1', 0); + const entry = requests[0]!.contentToProcess.contentEntries[0] as any; + expect(entry.agents[0].version).toBe('fullscan'); + builder.isFullScan = false; + }); + + it('omits agents when no committer info available', () => { + const file = createFile({ + committerId: undefined, + committerEmail: undefined, + }); + const requests = builder.buildPerUserProcessContentRequest(file, 'conv-1', 0); + const entry = requests[0]!.contentToProcess.contentEntries[0] as any; + expect(entry.agents).toBeUndefined(); + }); + }); + + describe('accessedResources_v2', () => { + it('populates accessedResources_v2 with full URL for files', () => { + const file = createFile({ path: 'src/app.ts', sha: 'file-sha-1', typeOfChange: 'modified' }); + const requests = builder.buildPerUserProcessContentRequest(file, 'conv-1', 0); + const entry = requests[0]!.contentToProcess.contentEntries[0] as any; + expect(entry.accessedResources_v2).toHaveLength(1); + const resource = entry.accessedResources_v2[0]; + expect(resource.identifier).toBe('file-sha-1'); + expect(resource.name).toBe('testRepo/src/app.ts'); + expect(resource.url).toBe('https://github.com/testOwner/testRepo/blob/main/src/app.ts'); + expect(resource.accessType).toBe('write'); + expect(resource.status).toBe('success'); + }); + + it('maps added files to accessType "create"', () => { + const file = createFile({ typeOfChange: 'added' }); + const requests = builder.buildPerUserProcessContentRequest(file, 'conv-1', 0); + const entry = requests[0]!.contentToProcess.contentEntries[0] as any; + expect(entry.accessedResources_v2[0].accessType).toBe('create'); + }); + + it('maps removed files to accessType "none"', () => { + const file = createFile({ typeOfChange: 'removed' }); + const requests = builder.buildPerUserProcessContentRequest(file, 'conv-1', 0); + const entry = requests[0]!.contentToProcess.contentEntries[0] as any; + expect(entry.accessedResources_v2[0].accessType).toBe('none'); + }); + + it('populates accessedResources_v2 for commit payloads with commit + file entries', () => { + const commitGroup = { + sha: 'abc123', + files: [ + createFile({ path: 'a.ts', typeOfChange: 'added', sha: 'sha-a' }), + createFile({ path: 'b.ts', typeOfChange: 'modified', sha: 'sha-b' }), + ], + authorId: 'user-1', + committerEmail: 'c@test.com', + committerId: 'c-id', + }; + const ctp = builder.buildCommitContentToProcess(commitGroup as any, 'conv-1', 0); + const entry = ctp.contentEntries[0] as any; + expect(entry.accessedResources_v2).toHaveLength(3); // 1 commit + 2 files + expect(entry.accessedResources_v2[0].identifier).toBe('abc123'); + expect(entry.accessedResources_v2[0].name).toBe('testRepo/commit:abc123'); + expect(entry.accessedResources_v2[0].url).toContain('/commit/abc123'); + expect(entry.accessedResources_v2[1].identifier).toBe('sha-a'); + expect(entry.accessedResources_v2[1].accessType).toBe('create'); + expect(entry.accessedResources_v2[2].accessType).toBe('write'); + }); + }); + + describe('commit payload builders', () => { + const commitGroup = { + sha: 'def456', + files: [createFile({ path: 'c.ts' })], + authorId: 'author-1', + authorEmail: 'author@test.com', + committerEmail: 'committer@test.com', + committerId: 'committer-1', + committerLogin: 'committer-login', + message: 'fix: something', + timestamp: '2026-01-01T00:00:00Z', + }; + + it('buildCommitProcessContentBatchItem includes userEmail', () => { + const item = builder.buildCommitProcessContentBatchItem(commitGroup as any, 'conv-1', 0); + expect(item.userId).toBe('author-1'); + expect(item.userEmail).toBe('author@test.com'); + }); + + it('buildCommitUploadSignalRequest includes userEmail', () => { + const prInfo = createPrInfo(); + const req = builder.buildCommitUploadSignalRequest(commitGroup as any, prInfo); + expect(req.userId).toBe('author-1'); + expect(req.userEmail).toBe('author@test.com'); + }); + + it('buildCommitContentToProcess agent uses UPN as name', () => { + const ctp = builder.buildCommitContentToProcess(commitGroup as any, 'conv-1', 0); + const entry = ctp.contentEntries[0] as any; + expect(entry.agents[0].name).toBe('committer@test.com'); + }); + }); + describe('buildProcessAndUploadRequests', () => { it('routes files to process or upload based on scope matching', () => { const config = createConfig(); diff --git a/tests/validation/inputValidator.test.ts b/tests/validation/inputValidator.test.ts index b8785be..1bd180c 100644 --- a/tests/validation/inputValidator.test.ts +++ b/tests/validation/inputValidator.test.ts @@ -93,6 +93,16 @@ describe('inputValidator', () => { expect(config.maxFileSize).toBe(10485760); }); + it('always includes **/.git/** in excludePatterns even with custom patterns', async () => { + setupInputMocks({ 'exclude-patterns': '**/.git/**,dist/**' }); + const config = await validateInputs(); + expect(config.excludePatterns).toContain('**/.git/**'); + expect(config.excludePatterns).toContain('dist/**'); + // Should be deduplicated + const gitPatternCount = config.excludePatterns!.filter(p => p === '**/.git/**').length; + expect(gitPatternCount).toBe(1); + }); + it('throws on invalid client-id GUID', async () => { setupInputMocks({ 'client-id': 'not-a-guid' }); await expect(validateInputs()).rejects.toThrow(/Invalid client-id/); From a8d46e97c1a0b68ee51252e696e78721c674af6e Mon Sep 17 00:00:00 2001 From: Rishabh Chawla Date: Thu, 2 Apr 2026 13:44:00 -0700 Subject: [PATCH 11/20] Some more updates --- dist/config/types.d.ts | 1 + dist/config/types.d.ts.map | 2 +- dist/config/types.js.map | 2 +- dist/file/FileProcessor.d.ts.map | 2 +- dist/file/FileProcessor.js | 1 + dist/file/FileProcessor.js.map | 2 +- dist/index.js | 28 ++++++++++++++++++----- dist/payload/PayloadBuilder.d.ts | 4 ++++ dist/payload/PayloadBuilder.d.ts.map | 2 +- dist/payload/PayloadBuilder.js | 26 ++++++++++++++++----- dist/payload/PayloadBuilder.js.map | 2 +- dist/runner/GitHubActionsRunner.d.ts.map | 2 +- dist/runner/GitHubActionsRunner.js | 1 + dist/runner/GitHubActionsRunner.js.map | 2 +- src/config/types.ts | 1 + src/file/fileProcessor.ts | 1 + src/payload/payloadBuilder.ts | 29 +++++++++++++++++++----- src/runner/gitHubActionsRunner.ts | 1 + tests/payload/payloadBuilder.test.ts | 21 +++++++++++++---- 19 files changed, 99 insertions(+), 31 deletions(-) diff --git a/dist/config/types.d.ts b/dist/config/types.d.ts index a39ed0c..9585490 100644 --- a/dist/config/types.d.ts +++ b/dist/config/types.d.ts @@ -245,6 +245,7 @@ export interface PrInfo { base: string; title: string; url: string | null | undefined; + prNumber?: number; } export interface GraphUserInfoContainer { value: GraphUserInfo[]; diff --git a/dist/config/types.d.ts.map b/dist/config/types.d.ts.map index 202ecfd..95b8064 100644 --- a/dist/config/types.d.ts.map +++ b/dist/config/types.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/config/types.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/config/types.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/dist/config/types.js.map b/dist/config/types.js.map index 9da2792..7131f48 100644 --- a/dist/config/types.js.map +++ b/dist/config/types.js.map @@ -1 +1 @@ -{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/config/types.ts"],"names":[],"mappings":"AAmJA,MAAM,CAAN,IAAY,QAMX;AAND,WAAY,QAAQ;IAChB,6CAAW,CAAA;IACX,mDAAc,CAAA;IACd,mDAAc,CAAA;IACd,uDAAgB,CAAA;IAChB,uDAAgB,CAAA;AACpB,CAAC,EANW,QAAQ,KAAR,QAAQ,QAMnB;AA4OD,MAAM,CAAN,IAAY,aAGX;AAHD,WAAY,aAAa;IACvB,kDAAiC,CAAA;IACjC,oDAAmC,CAAA;AACrC,CAAC,EAHW,aAAa,KAAb,aAAa,QAGxB"} \ No newline at end of file +{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/config/types.ts"],"names":[],"mappings":"AAmJA,MAAM,CAAN,IAAY,QAMX;AAND,WAAY,QAAQ;IAChB,6CAAW,CAAA;IACX,mDAAc,CAAA;IACd,mDAAc,CAAA;IACd,uDAAgB,CAAA;IAChB,uDAAgB,CAAA;AACpB,CAAC,EANW,QAAQ,KAAR,QAAQ,QAMnB;AA6OD,MAAM,CAAN,IAAY,aAGX;AAHD,WAAY,aAAa;IACvB,kDAAiC,CAAA;IACjC,oDAAmC,CAAA;AACrC,CAAC,EAHW,aAAa,KAAb,aAAa,QAGxB"} \ No newline at end of file diff --git a/dist/file/FileProcessor.d.ts.map b/dist/file/FileProcessor.d.ts.map index 128be9f..91ffc3f 100644 --- a/dist/file/FileProcessor.d.ts.map +++ b/dist/file/FileProcessor.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"fileProcessor.d.ts","sourceRoot":"","sources":["../../src/file/fileProcessor.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAY9F,qBAAa,aAAa;IASZ,OAAO,CAAC,QAAQ,CAAC,MAAM;IARnC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAChC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAuC;IAC/D,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAgB;IAC9C,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAwB;IACpD,OAAO,CAAC,QAAQ,CAAuD;IACvE,2EAA2E;IAC3E,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAkC;gBAEtC,MAAM,EAAE,YAAY;IAQjD;;;;;;OAMG;YACW,cAAc;IA4E5B,OAAO,CAAC,eAAe;IASvB,OAAO,CAAC,iBAAiB;IAIzB,OAAO,CAAC,iBAAiB;IAuBnB,eAAe,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;IAepC,eAAe,IAAI,OAAO,CAAC,YAAY,EAAE,CAAC;IA2EhD;;;;;OAKG;IACG,iBAAiB,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;IA4DjE;;;OAGG;IACH,OAAO,CAAC,mBAAmB;IAwBrB,gBAAgB,IAAI,OAAO,CAAC,MAAM,CAAC;IAenC,SAAS,IAAI,OAAO,CAAC,MAAM,CAAC;YA8CpB,iBAAiB;IA2E/B;;;;OAIG;YACW,WAAW;IA6BzB;;;;OAIG;YACW,gBAAgB;IAsC9B;;;;OAIG;IACH,OAAO,CAAC,mBAAmB;IAiB3B;;;OAGG;IACH,OAAO,CAAC,YAAY;IAwEpB;;;;;OAKG;IACH,OAAO,CAAC,eAAe;IAmDvB,OAAO,CAAC,aAAa;IAOf,UAAU,IAAI,OAAO,CAAC,UAAU,EAAE,CAAC;IA8CnC,eAAe,IAAI,OAAO,CAAC,UAAU,EAAE,CAAC;IAyBxC,uBAAuB,CAAC,oBAAoB,CAAC,EAAE,MAAM,GAAG,IAAI,EAAE,iBAAiB,CAAC,EAAE,UAAU,EAAE,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;IAkDvH,kBAAkB,CAAC,oBAAoB,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC;YAKzE,mBAAmB;YA4BnB,oBAAoB;CAOnC"} \ No newline at end of file +{"version":3,"file":"fileProcessor.d.ts","sourceRoot":"","sources":["../../src/file/fileProcessor.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAY9F,qBAAa,aAAa;IASZ,OAAO,CAAC,QAAQ,CAAC,MAAM;IARnC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAChC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAuC;IAC/D,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAgB;IAC9C,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAwB;IACpD,OAAO,CAAC,QAAQ,CAAuD;IACvE,2EAA2E;IAC3E,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAkC;gBAEtC,MAAM,EAAE,YAAY;IAQjD;;;;;;OAMG;YACW,cAAc;IA4E5B,OAAO,CAAC,eAAe;IASvB,OAAO,CAAC,iBAAiB;IAIzB,OAAO,CAAC,iBAAiB;IAuBnB,eAAe,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;IAepC,eAAe,IAAI,OAAO,CAAC,YAAY,EAAE,CAAC;IA2EhD;;;;;OAKG;IACG,iBAAiB,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;IA4DjE;;;OAGG;IACH,OAAO,CAAC,mBAAmB;IAwBrB,gBAAgB,IAAI,OAAO,CAAC,MAAM,CAAC;IAenC,SAAS,IAAI,OAAO,CAAC,MAAM,CAAC;YA+CpB,iBAAiB;IA2E/B;;;;OAIG;YACW,WAAW;IA6BzB;;;;OAIG;YACW,gBAAgB;IAsC9B;;;;OAIG;IACH,OAAO,CAAC,mBAAmB;IAiB3B;;;OAGG;IACH,OAAO,CAAC,YAAY;IAwEpB;;;;;OAKG;IACH,OAAO,CAAC,eAAe;IAmDvB,OAAO,CAAC,aAAa;IAOf,UAAU,IAAI,OAAO,CAAC,UAAU,EAAE,CAAC;IA8CnC,eAAe,IAAI,OAAO,CAAC,UAAU,EAAE,CAAC;IAyBxC,uBAAuB,CAAC,oBAAoB,CAAC,EAAE,MAAM,GAAG,IAAI,EAAE,iBAAiB,CAAC,EAAE,UAAU,EAAE,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;IAkDvH,kBAAkB,CAAC,oBAAoB,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC;YAKzE,mBAAmB;YA4BnB,oBAAoB;CAOnC"} \ No newline at end of file diff --git a/dist/file/FileProcessor.js b/dist/file/FileProcessor.js index 26a4a5b..d8511e4 100644 --- a/dist/file/FileProcessor.js +++ b/dist/file/FileProcessor.js @@ -335,6 +335,7 @@ export class FileProcessor { base: base, title: title, url: url, + prNumber: pr["number"], }; } async getFilesForCommit(commitSha, authorId, committerId) { diff --git a/dist/file/FileProcessor.js.map b/dist/file/FileProcessor.js.map index d67b3d5..6d62b2a 100644 --- a/dist/file/FileProcessor.js.map +++ b/dist/file/FileProcessor.js.map @@ -1 +1 @@ -{"version":3,"file":"fileProcessor.js","sourceRoot":"","sources":["../../src/file/fileProcessor.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"fileProcessor.js","sourceRoot":"","sources":["../../src/file/fileProcessor.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/dist/index.js b/dist/index.js index 47dfa4c..6471523 100644 --- a/dist/index.js +++ b/dist/index.js @@ -62683,6 +62683,7 @@ class FileProcessor { base: base, title: title, url: url, + prNumber: pr["number"], }; } async getFilesForCommit(commitSha, authorId, committerId) { @@ -63115,10 +63116,21 @@ class PayloadBuilder { static correlationIdSuffix = "@GA"; /** When true, agent version is set to "fullscan" instead of the defaultUserId. */ isFullScan = false; + /** PR number, set when processing a pull request event. */ + prNumber; constructor(config) { this.config = config; this.logger = new logger_Logger('PayloadBuilder'); } + buildResourceIdentifier(commitOrSha) { + return this.prNumber != null + ? `PR: ${this.prNumber} Commit: ${commitOrSha}` + : `Commit: ${commitOrSha}`; + } + buildFileResourceName(filePath) { + const fileName = filePath.split('/').pop() || filePath; + return `Repo: ${this.config.repository.repo} File: ${fileName} Path: ${filePath}`; + } buildProtectionScopesRequest() { const request = { activities: PayloadBuilder.scopeActivity, @@ -63439,11 +63451,12 @@ class PayloadBuilder { modifiedDateTime: now, content: fileContent, accessedResources_v2: [{ - identifier: file.sha || file.path, - name: `${this.config.repository.repo}/${file.path}`, + identifier: this.buildResourceIdentifier(file.sha || file.path), + name: this.buildFileResourceName(file.path), url: fileUrl, accessType: this.mapChangeTypeToAccessType(file.typeOfChange), status: 'success', + isCrossPromptInjectionDetected: false, }], ...(agents.length > 0 ? { agents } : {}), }; @@ -63520,19 +63533,21 @@ class PayloadBuilder { const repoBaseUrl = `https://${PayloadBuilder.domain}/${this.config.repository.owner}/${this.config.repository.repo}`; const commitUrl = `${repoBaseUrl}/commit/${commitGroup.sha}`; const accessedResources = [{ - identifier: commitGroup.sha, - name: `${this.config.repository.repo}/${commitIdentifier}`, + identifier: this.buildResourceIdentifier(commitGroup.sha), + name: `Repo: ${this.config.repository.repo} Commit: ${commitGroup.sha}`, url: commitUrl, accessType: 'write', status: 'success', + isCrossPromptInjectionDetected: false, }]; for (const file of commitGroup.files) { accessedResources.push({ - identifier: file.sha || file.path, - name: `${this.config.repository.repo}/${file.path}`, + identifier: this.buildResourceIdentifier(file.sha || file.path), + name: this.buildFileResourceName(file.path), url: `${repoBaseUrl}/blob/${this.config.repository.branch}/${file.path}`, accessType: this.mapChangeTypeToAccessType(file.typeOfChange), status: 'success', + isCrossPromptInjectionDetected: false, }); } const entry = { @@ -64261,6 +64276,7 @@ class GitHubActionsRunner { // Step 3: Get event context info this.logger.info('Processing repository files'); const prInfo = await this.fileProcessor.getPrInfo(); + this.payloadBuilder.prNumber = prInfo.prNumber; const failedPayloads = []; const blockedFiles = []; const userPsDeniedCache = new Set(); diff --git a/dist/payload/PayloadBuilder.d.ts b/dist/payload/PayloadBuilder.d.ts index 6aec9ac..4820d72 100644 --- a/dist/payload/PayloadBuilder.d.ts +++ b/dist/payload/PayloadBuilder.d.ts @@ -10,7 +10,11 @@ export declare class PayloadBuilder { private static readonly correlationIdSuffix; /** When true, agent version is set to "fullscan" instead of the defaultUserId. */ isFullScan: boolean; + /** PR number, set when processing a pull request event. */ + prNumber?: number; constructor(config: ActionConfig); + private buildResourceIdentifier; + private buildFileResourceName; buildProtectionScopesRequest(): ProtectionScopesRequest; buildProcessAndUploadRequests(files: FileMetadata[], scopeResponse: ProtectionScopesResponse, prInfo: PrInfo): SplitPCRequests; /** diff --git a/dist/payload/PayloadBuilder.d.ts.map b/dist/payload/PayloadBuilder.d.ts.map index bc68aef..2f4e092 100644 --- a/dist/payload/PayloadBuilder.d.ts.map +++ b/dist/payload/PayloadBuilder.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"payloadBuilder.d.ts","sourceRoot":"","sources":["../../src/payload/payloadBuilder.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,mBAAmB,EAAE,QAAQ,EAAe,MAAM,EAAE,uBAAuB,EAAE,wBAAwB,EAAE,eAAe,EAA6B,0BAA0B,EAAE,yBAAyB,EAAE,qBAAqB,EAAE,gBAAgB,EAAE,gBAAgB,EAAiB,YAAY,EAAE,cAAc,EAAiB,WAAW,EAA4C,MAAM,iBAAiB,CAAC;AAGrb,qBAAa,cAAc;IAYb,OAAO,CAAC,QAAQ,CAAC,MAAM;IAXnC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAChC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAmB;IAClD,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAwB;IACtD,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,aAAa,CAA2C;IAChF,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAY;IAC3C,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAW;IAC7C,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,mBAAmB,CAAS;IAEpD,kFAAkF;IAC3E,UAAU,UAAS;gBAEG,MAAM,EAAE,YAAY;IAIjD,4BAA4B,IAAI,uBAAuB;IAkBvD,6BAA6B,CAAC,KAAK,EAAE,YAAY,EAAE,EAAE,aAAa,EAAE,wBAAwB,EAAE,MAAM,EAAE,MAAM,GAAG,eAAe;IAiG9H;;;;;;;OAOG;IACH,qBAAqB,CACnB,MAAM,EAAE,YAAY,EAAE,EACtB,eAAe,EAAE,QAAQ,EACzB,eAAe,EAAE,cAAc,GAC9B,gBAAgB;IAoDnB;;OAEG;IACH,iCAAiC,CAAC,IAAI,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,qBAAqB,EAAE;IA0BzH,OAAO,CAAC,aAAa;IAerB,wBAAwB,CAAC,KAAK,EAAE,YAAY,EAAE,EAAE,MAAM,EAAE,MAAM,GAAG,mBAAmB,EAAE;IAiDtF,+BAA+B,CAAC,KAAK,EAAE,YAAY,EAAE,GAAG,0BAA0B,EAAE;IAiEpF,OAAO,CAAC,sBAAsB;IAsE9B;;OAEG;IACH,OAAO,CAAC,sBAAsB;IA+B9B;;OAEG;IACH,2BAA2B,CAAC,WAAW,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,GAAG,gBAAgB;IA4EvH;;OAEG;IACH,gCAAgC,CAAC,WAAW,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,GAAG,qBAAqB;IAKjI;;OAEG;IACH,8BAA8B,CAAC,WAAW,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,GAAG,mBAAmB;IAe7F;;OAEG;IACH,kCAAkC,CAAC,WAAW,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,GAAG,yBAAyB;IAUvI,OAAO,CAAC,yBAAyB;CAgBlC"} \ No newline at end of file +{"version":3,"file":"payloadBuilder.d.ts","sourceRoot":"","sources":["../../src/payload/payloadBuilder.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,mBAAmB,EAAE,QAAQ,EAAe,MAAM,EAAE,uBAAuB,EAAE,wBAAwB,EAAE,eAAe,EAA6B,0BAA0B,EAAE,yBAAyB,EAAE,qBAAqB,EAAE,gBAAgB,EAAE,gBAAgB,EAAiB,YAAY,EAAE,cAAc,EAAiB,WAAW,EAA4C,MAAM,iBAAiB,CAAC;AAGrb,qBAAa,cAAc;IAeb,OAAO,CAAC,QAAQ,CAAC,MAAM;IAdnC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAChC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAmB;IAClD,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAwB;IACtD,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,aAAa,CAA2C;IAChF,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAY;IAC3C,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAW;IAC7C,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,mBAAmB,CAAS;IAEpD,kFAAkF;IAC3E,UAAU,UAAS;IAE1B,2DAA2D;IACpD,QAAQ,CAAC,EAAE,MAAM,CAAC;gBAEI,MAAM,EAAE,YAAY;IAIjD,OAAO,CAAC,uBAAuB;IAM/B,OAAO,CAAC,qBAAqB;IAK7B,4BAA4B,IAAI,uBAAuB;IAkBvD,6BAA6B,CAAC,KAAK,EAAE,YAAY,EAAE,EAAE,aAAa,EAAE,wBAAwB,EAAE,MAAM,EAAE,MAAM,GAAG,eAAe;IAiG9H;;;;;;;OAOG;IACH,qBAAqB,CACnB,MAAM,EAAE,YAAY,EAAE,EACtB,eAAe,EAAE,QAAQ,EACzB,eAAe,EAAE,cAAc,GAC9B,gBAAgB;IAoDnB;;OAEG;IACH,iCAAiC,CAAC,IAAI,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,qBAAqB,EAAE;IA0BzH,OAAO,CAAC,aAAa;IAerB,wBAAwB,CAAC,KAAK,EAAE,YAAY,EAAE,EAAE,MAAM,EAAE,MAAM,GAAG,mBAAmB,EAAE;IAiDtF,+BAA+B,CAAC,KAAK,EAAE,YAAY,EAAE,GAAG,0BAA0B,EAAE;IAiEpF,OAAO,CAAC,sBAAsB;IAuE9B;;OAEG;IACH,OAAO,CAAC,sBAAsB;IA+B9B;;OAEG;IACH,2BAA2B,CAAC,WAAW,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,GAAG,gBAAgB;IA8EvH;;OAEG;IACH,gCAAgC,CAAC,WAAW,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,GAAG,qBAAqB;IAKjI;;OAEG;IACH,8BAA8B,CAAC,WAAW,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,GAAG,mBAAmB;IAe7F;;OAEG;IACH,kCAAkC,CAAC,WAAW,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,GAAG,yBAAyB;IAUvI,OAAO,CAAC,yBAAyB;CAgBlC"} \ No newline at end of file diff --git a/dist/payload/PayloadBuilder.js b/dist/payload/PayloadBuilder.js index caa77df..b480c8c 100644 --- a/dist/payload/PayloadBuilder.js +++ b/dist/payload/PayloadBuilder.js @@ -11,10 +11,21 @@ export class PayloadBuilder { static correlationIdSuffix = "@GA"; /** When true, agent version is set to "fullscan" instead of the defaultUserId. */ isFullScan = false; + /** PR number, set when processing a pull request event. */ + prNumber; constructor(config) { this.config = config; this.logger = new Logger('PayloadBuilder'); } + buildResourceIdentifier(commitOrSha) { + return this.prNumber != null + ? `PR: ${this.prNumber} Commit: ${commitOrSha}` + : `Commit: ${commitOrSha}`; + } + buildFileResourceName(filePath) { + const fileName = filePath.split('/').pop() || filePath; + return `Repo: ${this.config.repository.repo} File: ${fileName} Path: ${filePath}`; + } buildProtectionScopesRequest() { const request = { activities: PayloadBuilder.scopeActivity, @@ -335,11 +346,12 @@ export class PayloadBuilder { modifiedDateTime: now, content: fileContent, accessedResources_v2: [{ - identifier: file.sha || file.path, - name: `${this.config.repository.repo}/${file.path}`, + identifier: this.buildResourceIdentifier(file.sha || file.path), + name: this.buildFileResourceName(file.path), url: fileUrl, accessType: this.mapChangeTypeToAccessType(file.typeOfChange), status: 'success', + isCrossPromptInjectionDetected: false, }], ...(agents.length > 0 ? { agents } : {}), }; @@ -416,19 +428,21 @@ export class PayloadBuilder { const repoBaseUrl = `https://${PayloadBuilder.domain}/${this.config.repository.owner}/${this.config.repository.repo}`; const commitUrl = `${repoBaseUrl}/commit/${commitGroup.sha}`; const accessedResources = [{ - identifier: commitGroup.sha, - name: `${this.config.repository.repo}/${commitIdentifier}`, + identifier: this.buildResourceIdentifier(commitGroup.sha), + name: `Repo: ${this.config.repository.repo} Commit: ${commitGroup.sha}`, url: commitUrl, accessType: 'write', status: 'success', + isCrossPromptInjectionDetected: false, }]; for (const file of commitGroup.files) { accessedResources.push({ - identifier: file.sha || file.path, - name: `${this.config.repository.repo}/${file.path}`, + identifier: this.buildResourceIdentifier(file.sha || file.path), + name: this.buildFileResourceName(file.path), url: `${repoBaseUrl}/blob/${this.config.repository.branch}/${file.path}`, accessType: this.mapChangeTypeToAccessType(file.typeOfChange), status: 'success', + isCrossPromptInjectionDetected: false, }); } const entry = { diff --git a/dist/payload/PayloadBuilder.js.map b/dist/payload/PayloadBuilder.js.map index d12278a..fccb8e1 100644 --- a/dist/payload/PayloadBuilder.js.map +++ b/dist/payload/PayloadBuilder.js.map @@ -1 +1 @@ -{"version":3,"file":"payloadBuilder.js","sourceRoot":"","sources":["../../src/payload/payloadBuilder.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"payloadBuilder.js","sourceRoot":"","sources":["../../src/payload/payloadBuilder.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/dist/runner/GitHubActionsRunner.d.ts.map b/dist/runner/GitHubActionsRunner.d.ts.map index bd09bc3..2662871 100644 --- a/dist/runner/GitHubActionsRunner.d.ts.map +++ b/dist/runner/GitHubActionsRunner.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"gitHubActionsRunner.d.ts","sourceRoot":"","sources":["../../src/runner/gitHubActionsRunner.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,YAAY,EAAqN,MAAM,iBAAiB,CAAC;AAqBlQ,qBAAa,mBAAmB;IAQlB,OAAO,CAAC,QAAQ,CAAC,MAAM;IAPnC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAChC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAwB;IACpD,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAgB;IAC9C,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAgB;IAC9C,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAiB;IAChD,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAkB;gBAErB,MAAM,EAAE,YAAY;IAc3C,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAsE9B;;;;;;OAMG;IACH,OAAO,CAAC,8BAA8B;YAkBxB,eAAe;YA4Cf,kBAAkB;YAkClB,gBAAgB;YAmChB,kBAAkB;YA4DlB,mBAAmB;IAsBjC;;;OAGG;YACW,sBAAsB;IAsCpC;;OAEG;YACW,iBAAiB;YA0DjB,qBAAqB;YAWrB,yBAAyB;IASvC;;;OAGG;YACW,4BAA4B;IA8C1C,OAAO,CAAC,yBAAyB;YAsBnB,aAAa;IA2B3B;;;;OAIG;YACW,0BAA0B;IAqGxC;;OAEG;YACW,iBAAiB;CAsBhC"} \ No newline at end of file +{"version":3,"file":"gitHubActionsRunner.d.ts","sourceRoot":"","sources":["../../src/runner/gitHubActionsRunner.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,YAAY,EAAqN,MAAM,iBAAiB,CAAC;AAqBlQ,qBAAa,mBAAmB;IAQlB,OAAO,CAAC,QAAQ,CAAC,MAAM;IAPnC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAChC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAwB;IACpD,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAgB;IAC9C,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAgB;IAC9C,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAiB;IAChD,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAkB;gBAErB,MAAM,EAAE,YAAY;IAc3C,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAuE9B;;;;;;OAMG;IACH,OAAO,CAAC,8BAA8B;YAkBxB,eAAe;YA4Cf,kBAAkB;YAkClB,gBAAgB;YAmChB,kBAAkB;YA4DlB,mBAAmB;IAsBjC;;;OAGG;YACW,sBAAsB;IAsCpC;;OAEG;YACW,iBAAiB;YA0DjB,qBAAqB;YAWrB,yBAAyB;IASvC;;;OAGG;YACW,4BAA4B;IA8C1C,OAAO,CAAC,yBAAyB;YAsBnB,aAAa;IA2B3B;;;;OAIG;YACW,0BAA0B;IAqGxC;;OAEG;YACW,iBAAiB;CAsBhC"} \ No newline at end of file diff --git a/dist/runner/GitHubActionsRunner.js b/dist/runner/GitHubActionsRunner.js index 4556453..f766b4a 100644 --- a/dist/runner/GitHubActionsRunner.js +++ b/dist/runner/GitHubActionsRunner.js @@ -43,6 +43,7 @@ export class GitHubActionsRunner { // Step 3: Get event context info this.logger.info('Processing repository files'); const prInfo = await this.fileProcessor.getPrInfo(); + this.payloadBuilder.prNumber = prInfo.prNumber; const failedPayloads = []; const blockedFiles = []; const userPsDeniedCache = new Set(); diff --git a/dist/runner/GitHubActionsRunner.js.map b/dist/runner/GitHubActionsRunner.js.map index e8ff410..97c34a9 100644 --- a/dist/runner/GitHubActionsRunner.js.map +++ b/dist/runner/GitHubActionsRunner.js.map @@ -1 +1 @@ -{"version":3,"file":"gitHubActionsRunner.js","sourceRoot":"","sources":["../../src/runner/gitHubActionsRunner.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"gitHubActionsRunner.js","sourceRoot":"","sources":["../../src/runner/gitHubActionsRunner.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/src/config/types.ts b/src/config/types.ts index 1651b38..99fd2b1 100644 --- a/src/config/types.ts +++ b/src/config/types.ts @@ -310,6 +310,7 @@ export interface PrInfo { base: string, title: string, url: string | null | undefined, + prNumber?: number, } export interface GraphUserInfoContainer { diff --git a/src/file/fileProcessor.ts b/src/file/fileProcessor.ts index 6686727..0dab57a 100644 --- a/src/file/fileProcessor.ts +++ b/src/file/fileProcessor.ts @@ -396,6 +396,7 @@ export class FileProcessor { base: base, title: title, url: url, + prNumber: pr["number"], }; } diff --git a/src/payload/payloadBuilder.ts b/src/payload/payloadBuilder.ts index e860e53..dd0e517 100644 --- a/src/payload/payloadBuilder.ts +++ b/src/payload/payloadBuilder.ts @@ -12,11 +12,25 @@ export class PayloadBuilder { /** When true, agent version is set to "fullscan" instead of the defaultUserId. */ public isFullScan = false; + + /** PR number, set when processing a pull request event. */ + public prNumber?: number; constructor(private readonly config: ActionConfig) { this.logger = new Logger('PayloadBuilder'); } + private buildResourceIdentifier(commitOrSha: string): string { + return this.prNumber != null + ? `PR: ${this.prNumber} Commit: ${commitOrSha}` + : `Commit: ${commitOrSha}`; + } + + private buildFileResourceName(filePath: string): string { + const fileName = filePath.split('/').pop() || filePath; + return `Repo: ${this.config.repository.repo} File: ${fileName} Path: ${filePath}`; + } + buildProtectionScopesRequest(): ProtectionScopesRequest { const request: ProtectionScopesRequest = { activities: PayloadBuilder.scopeActivity, @@ -394,11 +408,12 @@ export class PayloadBuilder { modifiedDateTime: now, content: fileContent, accessedResources_v2: [{ - identifier: file.sha || file.path, - name: `${this.config.repository.repo}/${file.path}`, + identifier: this.buildResourceIdentifier(file.sha || file.path), + name: this.buildFileResourceName(file.path), url: fileUrl, accessType: this.mapChangeTypeToAccessType(file.typeOfChange), status: 'success', + isCrossPromptInjectionDetected: false, }], ...(agents.length > 0 ? { agents } : {}), }; @@ -485,19 +500,21 @@ export class PayloadBuilder { const commitUrl = `${repoBaseUrl}/commit/${commitGroup.sha}`; const accessedResources: import('../config/types').AccessedResourceDetails[] = [{ - identifier: commitGroup.sha, - name: `${this.config.repository.repo}/${commitIdentifier}`, + identifier: this.buildResourceIdentifier(commitGroup.sha), + name: `Repo: ${this.config.repository.repo} Commit: ${commitGroup.sha}`, url: commitUrl, accessType: 'write', status: 'success', + isCrossPromptInjectionDetected: false, }]; for (const file of commitGroup.files) { accessedResources.push({ - identifier: file.sha || file.path, - name: `${this.config.repository.repo}/${file.path}`, + identifier: this.buildResourceIdentifier(file.sha || file.path), + name: this.buildFileResourceName(file.path), url: `${repoBaseUrl}/blob/${this.config.repository.branch}/${file.path}`, accessType: this.mapChangeTypeToAccessType(file.typeOfChange), status: 'success', + isCrossPromptInjectionDetected: false, }); } diff --git a/src/runner/gitHubActionsRunner.ts b/src/runner/gitHubActionsRunner.ts index cc48c51..eae39dc 100644 --- a/src/runner/gitHubActionsRunner.ts +++ b/src/runner/gitHubActionsRunner.ts @@ -63,6 +63,7 @@ export class GitHubActionsRunner { // Step 3: Get event context info this.logger.info('Processing repository files'); const prInfo = await this.fileProcessor.getPrInfo(); + this.payloadBuilder.prNumber = prInfo.prNumber; const failedPayloads: string[] = []; const blockedFiles: BlockedFileResult[] = []; diff --git a/tests/payload/payloadBuilder.test.ts b/tests/payload/payloadBuilder.test.ts index 88cddc9..5e09769 100644 --- a/tests/payload/payloadBuilder.test.ts +++ b/tests/payload/payloadBuilder.test.ts @@ -435,13 +435,21 @@ describe('PayloadBuilder', () => { const entry = requests[0]!.contentToProcess.contentEntries[0] as any; expect(entry.accessedResources_v2).toHaveLength(1); const resource = entry.accessedResources_v2[0]; - expect(resource.identifier).toBe('file-sha-1'); - expect(resource.name).toBe('testRepo/src/app.ts'); + expect(resource.identifier).toBe('Commit: file-sha-1'); + expect(resource.name).toBe('Repo: testRepo File: app.ts Path: src/app.ts'); expect(resource.url).toBe('https://github.com/testOwner/testRepo/blob/main/src/app.ts'); expect(resource.accessType).toBe('write'); expect(resource.status).toBe('success'); }); + it('includes PR number in identifier when prNumber is set', () => { + builder.prNumber = 42; + const file = createFile({ path: 'src/app.ts', sha: 'file-sha-1', typeOfChange: 'modified' }); + const requests = builder.buildPerUserProcessContentRequest(file, 'conv-1', 0); + const entry = requests[0]!.contentToProcess.contentEntries[0] as any; + expect(entry.accessedResources_v2[0].identifier).toBe('PR: 42 Commit: file-sha-1'); + }); + it('maps added files to accessType "create"', () => { const file = createFile({ typeOfChange: 'added' }); const requests = builder.buildPerUserProcessContentRequest(file, 'conv-1', 0); @@ -470,11 +478,14 @@ describe('PayloadBuilder', () => { const ctp = builder.buildCommitContentToProcess(commitGroup as any, 'conv-1', 0); const entry = ctp.contentEntries[0] as any; expect(entry.accessedResources_v2).toHaveLength(3); // 1 commit + 2 files - expect(entry.accessedResources_v2[0].identifier).toBe('abc123'); - expect(entry.accessedResources_v2[0].name).toBe('testRepo/commit:abc123'); + expect(entry.accessedResources_v2[0].identifier).toBe('Commit: abc123'); + expect(entry.accessedResources_v2[0].name).toBe('Repo: testRepo Commit: abc123'); expect(entry.accessedResources_v2[0].url).toContain('/commit/abc123'); - expect(entry.accessedResources_v2[1].identifier).toBe('sha-a'); + expect(entry.accessedResources_v2[1].identifier).toBe('Commit: sha-a'); + expect(entry.accessedResources_v2[1].name).toBe('Repo: testRepo File: a.ts Path: a.ts'); expect(entry.accessedResources_v2[1].accessType).toBe('create'); + expect(entry.accessedResources_v2[2].identifier).toBe('Commit: sha-b'); + expect(entry.accessedResources_v2[2].name).toBe('Repo: testRepo File: b.ts Path: b.ts'); expect(entry.accessedResources_v2[2].accessType).toBe('write'); }); }); From 2a08a0f4d1816ac46532ad45daea68cf91da4edd Mon Sep 17 00:00:00 2001 From: Rishabh Chawla Date: Thu, 2 Apr 2026 14:17:42 -0700 Subject: [PATCH 12/20] Some more updates --- .gitignore | 10 +- .husky/pre-commit | 16 +- dist/api/PurviewClient.d.ts | 38 -- dist/api/PurviewClient.d.ts.map | 1 - dist/api/PurviewClient.js | 291 --------- dist/api/PurviewClient.js.map | 1 - dist/auth/AuthenticationService.d.ts | 19 - dist/auth/AuthenticationService.d.ts.map | 1 - dist/auth/AuthenticationService.js | 124 ---- dist/auth/AuthenticationService.js.map | 1 - dist/auth/tokenProvider.d.ts | 3 - dist/auth/tokenProvider.d.ts.map | 1 - dist/auth/tokenProvider.js | 49 -- dist/auth/tokenProvider.js.map | 1 - dist/config.d.ts | 3 - dist/config.d.ts.map | 1 - dist/config.js | 28 - dist/config.js.map | 1 - dist/config/types.d.ts | 365 ----------- dist/config/types.d.ts.map | 1 - dist/config/types.js | 14 - dist/config/types.js.map | 1 - dist/file/FileProcessor.d.ts | 78 --- dist/file/FileProcessor.d.ts.map | 1 - dist/file/FileProcessor.js | 756 ----------------------- dist/file/FileProcessor.js.map | 1 - dist/git/changedFiles.d.ts | 4 - dist/git/changedFiles.d.ts.map | 1 - dist/git/changedFiles.js | 22 - dist/git/changedFiles.js.map | 1 - dist/index.d.ts | 2 - dist/index.d.ts.map | 1 - dist/index.js | 79 ++- dist/index.js.map | 1 - dist/payload/PayloadBuilder.d.ts | 59 -- dist/payload/PayloadBuilder.d.ts.map | 1 - dist/payload/PayloadBuilder.js | 533 ---------------- dist/payload/PayloadBuilder.js.map | 1 - dist/purview/client.d.ts | 7 - dist/purview/client.d.ts.map | 1 - dist/purview/client.js | 73 --- dist/purview/client.js.map | 1 - dist/purview/payloadBuilder.d.ts | 3 - dist/purview/payloadBuilder.d.ts.map | 1 - dist/purview/payloadBuilder.js | 67 -- dist/purview/payloadBuilder.js.map | 1 - dist/runner/GitHubActionsRunner.d.ts | 54 -- dist/runner/GitHubActionsRunner.d.ts.map | 1 - dist/runner/GitHubActionsRunner.js | 559 ----------------- dist/runner/GitHubActionsRunner.js.map | 1 - dist/runner/fullScanService.d.ts | 40 -- dist/runner/fullScanService.d.ts.map | 1 - dist/runner/fullScanService.js | 407 ------------ dist/runner/fullScanService.js.map | 1 - dist/state/stateService.d.ts | 20 - dist/state/stateService.d.ts.map | 1 - dist/state/stateService.js | 74 --- dist/state/stateService.js.map | 1 - dist/utils/Logger.d.ts | 23 - dist/utils/Logger.d.ts.map | 1 - dist/utils/Logger.js | 89 --- dist/utils/Logger.js.map | 1 - dist/utils/RetryHandler.d.ts | 17 - dist/utils/RetryHandler.d.ts.map | 1 - dist/utils/RetryHandler.js | 90 --- dist/utils/RetryHandler.js.map | 1 - dist/utils/blockDetector.d.ts | 13 - dist/utils/blockDetector.d.ts.map | 1 - dist/utils/blockDetector.js | 21 - dist/utils/blockDetector.js.map | 1 - dist/utils/fileUtils.d.ts | 4 - dist/utils/fileUtils.d.ts.map | 1 - dist/utils/fileUtils.js | 58 -- dist/utils/fileUtils.js.map | 1 - dist/utils/prCommentService.d.ts | 18 - dist/utils/prCommentService.d.ts.map | 1 - dist/utils/prCommentService.js | 61 -- dist/utils/prCommentService.js.map | 1 - dist/utils/types.d.ts | 26 - dist/utils/types.d.ts.map | 1 - dist/utils/types.js | 3 - dist/utils/types.js.map | 1 - dist/utils/userResolver.d.ts | 32 - dist/utils/userResolver.d.ts.map | 1 - dist/utils/userResolver.js | 69 --- dist/utils/userResolver.js.map | 1 - dist/utils/workflowRepo.d.ts | 19 - dist/utils/workflowRepo.d.ts.map | 1 - dist/utils/workflowRepo.js | 26 - dist/utils/workflowRepo.js.map | 1 - dist/validation/InputValidator.d.ts | 3 - dist/validation/InputValidator.d.ts.map | 1 - dist/validation/InputValidator.js | 190 ------ dist/validation/InputValidator.js.map | 1 - src/file/fileProcessor.ts | 94 ++- src/runner/fullScanService.ts | 2 +- 96 files changed, 186 insertions(+), 4515 deletions(-) delete mode 100644 dist/api/PurviewClient.d.ts delete mode 100644 dist/api/PurviewClient.d.ts.map delete mode 100644 dist/api/PurviewClient.js delete mode 100644 dist/api/PurviewClient.js.map delete mode 100644 dist/auth/AuthenticationService.d.ts delete mode 100644 dist/auth/AuthenticationService.d.ts.map delete mode 100644 dist/auth/AuthenticationService.js delete mode 100644 dist/auth/AuthenticationService.js.map delete mode 100644 dist/auth/tokenProvider.d.ts delete mode 100644 dist/auth/tokenProvider.d.ts.map delete mode 100644 dist/auth/tokenProvider.js delete mode 100644 dist/auth/tokenProvider.js.map delete mode 100644 dist/config.d.ts delete mode 100644 dist/config.d.ts.map delete mode 100644 dist/config.js delete mode 100644 dist/config.js.map delete mode 100644 dist/config/types.d.ts delete mode 100644 dist/config/types.d.ts.map delete mode 100644 dist/config/types.js delete mode 100644 dist/config/types.js.map delete mode 100644 dist/file/FileProcessor.d.ts delete mode 100644 dist/file/FileProcessor.d.ts.map delete mode 100644 dist/file/FileProcessor.js delete mode 100644 dist/file/FileProcessor.js.map delete mode 100644 dist/git/changedFiles.d.ts delete mode 100644 dist/git/changedFiles.d.ts.map delete mode 100644 dist/git/changedFiles.js delete mode 100644 dist/git/changedFiles.js.map delete mode 100644 dist/index.d.ts delete mode 100644 dist/index.d.ts.map delete mode 100644 dist/index.js.map delete mode 100644 dist/payload/PayloadBuilder.d.ts delete mode 100644 dist/payload/PayloadBuilder.d.ts.map delete mode 100644 dist/payload/PayloadBuilder.js delete mode 100644 dist/payload/PayloadBuilder.js.map delete mode 100644 dist/purview/client.d.ts delete mode 100644 dist/purview/client.d.ts.map delete mode 100644 dist/purview/client.js delete mode 100644 dist/purview/client.js.map delete mode 100644 dist/purview/payloadBuilder.d.ts delete mode 100644 dist/purview/payloadBuilder.d.ts.map delete mode 100644 dist/purview/payloadBuilder.js delete mode 100644 dist/purview/payloadBuilder.js.map delete mode 100644 dist/runner/GitHubActionsRunner.d.ts delete mode 100644 dist/runner/GitHubActionsRunner.d.ts.map delete mode 100644 dist/runner/GitHubActionsRunner.js delete mode 100644 dist/runner/GitHubActionsRunner.js.map delete mode 100644 dist/runner/fullScanService.d.ts delete mode 100644 dist/runner/fullScanService.d.ts.map delete mode 100644 dist/runner/fullScanService.js delete mode 100644 dist/runner/fullScanService.js.map delete mode 100644 dist/state/stateService.d.ts delete mode 100644 dist/state/stateService.d.ts.map delete mode 100644 dist/state/stateService.js delete mode 100644 dist/state/stateService.js.map delete mode 100644 dist/utils/Logger.d.ts delete mode 100644 dist/utils/Logger.d.ts.map delete mode 100644 dist/utils/Logger.js delete mode 100644 dist/utils/Logger.js.map delete mode 100644 dist/utils/RetryHandler.d.ts delete mode 100644 dist/utils/RetryHandler.d.ts.map delete mode 100644 dist/utils/RetryHandler.js delete mode 100644 dist/utils/RetryHandler.js.map delete mode 100644 dist/utils/blockDetector.d.ts delete mode 100644 dist/utils/blockDetector.d.ts.map delete mode 100644 dist/utils/blockDetector.js delete mode 100644 dist/utils/blockDetector.js.map delete mode 100644 dist/utils/fileUtils.d.ts delete mode 100644 dist/utils/fileUtils.d.ts.map delete mode 100644 dist/utils/fileUtils.js delete mode 100644 dist/utils/fileUtils.js.map delete mode 100644 dist/utils/prCommentService.d.ts delete mode 100644 dist/utils/prCommentService.d.ts.map delete mode 100644 dist/utils/prCommentService.js delete mode 100644 dist/utils/prCommentService.js.map delete mode 100644 dist/utils/types.d.ts delete mode 100644 dist/utils/types.d.ts.map delete mode 100644 dist/utils/types.js delete mode 100644 dist/utils/types.js.map delete mode 100644 dist/utils/userResolver.d.ts delete mode 100644 dist/utils/userResolver.d.ts.map delete mode 100644 dist/utils/userResolver.js delete mode 100644 dist/utils/userResolver.js.map delete mode 100644 dist/utils/workflowRepo.d.ts delete mode 100644 dist/utils/workflowRepo.d.ts.map delete mode 100644 dist/utils/workflowRepo.js delete mode 100644 dist/utils/workflowRepo.js.map delete mode 100644 dist/validation/InputValidator.d.ts delete mode 100644 dist/validation/InputValidator.d.ts.map delete mode 100644 dist/validation/InputValidator.js delete mode 100644 dist/validation/InputValidator.js.map diff --git a/.gitignore b/.gitignore index 904becc..d91a79b 100644 --- a/.gitignore +++ b/.gitignore @@ -17,10 +17,12 @@ pnpm-debug.log* /node_modules # Build output -# For MOST Node.js projects, you would ignore the build output directory. -# However, for a GitHub Action packaged with ncc, the 'dist' directory -# MUST be committed to the repository. Therefore, this line is commented out. -# /dist +# Only the ncc-bundled files are needed for the GitHub Action to run. +# All other tsc output in dist/ is ignored. +/dist/* +!/dist/index.js +!/dist/sourcemap-register.js +!/dist/licenses.txt # TypeScript cache files # These files are used by the TypeScript compiler to speed up compilation. diff --git a/.husky/pre-commit b/.husky/pre-commit index 2f91f47..838b8ca 100644 --- a/.husky/pre-commit +++ b/.husky/pre-commit @@ -14,10 +14,12 @@ npm test echo "🔨 Building dist/..." npm run build && npm run package -# 3. Stage any dist/ changes so the commit includes the fresh build -if ! git diff --quiet dist/; then - echo "📦 dist/ has changed — staging updated files..." - git add dist/ -else - echo "✅ dist/ is up-to-date." -fi +# 3. Stage only the bundled files needed by the action +for f in dist/index.js dist/sourcemap-register.js dist/licenses.txt; do + if [ -f "$f" ] && ! git diff --quiet "$f" 2>/dev/null; then + echo "📦 $f has changed — staging..." + git add "$f" + fi +done + +echo "✅ dist/ is up-to-date." diff --git a/dist/api/PurviewClient.d.ts b/dist/api/PurviewClient.d.ts deleted file mode 100644 index 13ffd62..0000000 --- a/dist/api/PurviewClient.d.ts +++ /dev/null @@ -1,38 +0,0 @@ -import { ActionConfig, ApiResponse, ProcessContentBatchRequest, ProcessContentRequest, ProcessContentResponse, UploadSignalRequest, ProtectionScopesRequest, ProtectionScopesResponse, GraphUserInfoContainer } from '../config/types'; -export declare class PurviewClient { - private readonly config; - private readonly logger; - private readonly retryHandler; - private authToken; - private tokenProvider; - private tokenRefresh; - private readonly baseUrl; - constructor(config: ActionConfig); - setAuthToken(token: string): void; - /** - * Set a callback that returns a fresh access token. When set, the provider - * is called before every request (it should cache internally) and again - * after a 401 to attempt a single token-refresh retry. - */ - setTokenProvider(provider: () => Promise): void; - /** - * Set a callback invoked before the 401-retry to invalidate any cached - * token so the next tokenProvider call fetches a genuinely new token. - */ - setTokenRefresh(refresh: () => void): void; - private resolveAuthToken; - processContentAsync(payload: ProcessContentBatchRequest): Promise; - processContent(userId: string, request: ProcessContentRequest, scopeIdentifier: string, inline?: boolean): Promise>; - uploadSignal(payload: UploadSignalRequest): Promise; - searchTenantProtectionScope(payload: ProtectionScopesRequest): Promise>; - searchUserProtectionScope(userId: string, payload: ProtectionScopesRequest): Promise>; - getUserInfo(userEmails: string[]): Promise>; - private sendRequest; - private sendRequestInner; - private jsonReplacer; - private buildErrorResponse; - private generateRequestId; - private sanitizeEndpoint; - private sanitizeErrorResponse; -} -//# sourceMappingURL=purviewClient.d.ts.map \ No newline at end of file diff --git a/dist/api/PurviewClient.d.ts.map b/dist/api/PurviewClient.d.ts.map deleted file mode 100644 index c8ab0d8..0000000 --- a/dist/api/PurviewClient.d.ts.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"purviewClient.d.ts","sourceRoot":"","sources":["../../src/api/purviewClient.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,0BAA0B,EAAE,qBAAqB,EAAE,sBAAsB,EAAE,mBAAmB,EAAE,uBAAuB,EAAE,wBAAwB,EAAE,sBAAsB,EAAE,MAAM,iBAAiB,CAAC;AAIvO,qBAAa,aAAa;IAQZ,OAAO,CAAC,QAAQ,CAAC,MAAM;IAPnC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAChC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAe;IAC5C,OAAO,CAAC,SAAS,CAAuB;IACxC,OAAO,CAAC,aAAa,CAAwC;IAC7D,OAAO,CAAC,YAAY,CAA6B;IACjD,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;gBAEJ,MAAM,EAAE,YAAY;IAMjD,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAIjC;;;;OAIG;IACH,gBAAgB,CAAC,QAAQ,EAAE,MAAM,OAAO,CAAC,MAAM,CAAC,GAAG,IAAI;IAIvD;;;OAGG;IACH,eAAe,CAAC,OAAO,EAAE,MAAM,IAAI,GAAG,IAAI;YAI5B,gBAAgB;IAUxB,mBAAmB,CAAC,OAAO,EAAE,0BAA0B,GAAG,OAAO,CAAC,WAAW,CAAC;IAuB9E,cAAc,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,qBAAqB,EAAE,eAAe,EAAE,MAAM,EAAE,MAAM,GAAE,OAAc,GAAG,OAAO,CAAC,WAAW,CAAC,sBAAsB,CAAC,CAAC;IA+B7J,YAAY,CAAC,OAAO,EAAE,mBAAmB,GAAG,OAAO,CAAC,WAAW,CAAC;IAuBhE,2BAA2B,CAAC,OAAO,EAAE,uBAAuB,GAAG,OAAO,CAAC,WAAW,CAAC,wBAAwB,CAAC,CAAC;IA0B7G,yBAAyB,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,uBAAuB,GAAG,OAAO,CAAC,WAAW,CAAC,wBAAwB,CAAC,CAAC;IA0B3H,WAAW,CAAC,UAAU,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,WAAW,CAAC,sBAAsB,CAAC,CAAC;YA0BvE,WAAW;YAIX,gBAAgB;IA6G9B,OAAO,CAAC,YAAY;IAQpB,OAAO,CAAC,kBAAkB;IAc1B,OAAO,CAAC,iBAAiB;IAIzB,OAAO,CAAC,gBAAgB;IAIxB,OAAO,CAAC,qBAAqB;CAS9B"} \ No newline at end of file diff --git a/dist/api/PurviewClient.js b/dist/api/PurviewClient.js deleted file mode 100644 index 19834e6..0000000 --- a/dist/api/PurviewClient.js +++ /dev/null @@ -1,291 +0,0 @@ -import { Logger } from '../utils/logger'; -import { RetryHandler } from '../utils/retryHandler'; -export class PurviewClient { - config; - logger; - retryHandler; - authToken = null; - tokenProvider = null; - tokenRefresh = null; - baseUrl; - constructor(config) { - this.config = config; - this.logger = new Logger('PurviewClient'); - this.retryHandler = new RetryHandler(); - this.baseUrl = `${this.config.purviewEndpoint}`; - } - setAuthToken(token) { - this.authToken = token; - } - /** - * Set a callback that returns a fresh access token. When set, the provider - * is called before every request (it should cache internally) and again - * after a 401 to attempt a single token-refresh retry. - */ - setTokenProvider(provider) { - this.tokenProvider = provider; - } - /** - * Set a callback invoked before the 401-retry to invalidate any cached - * token so the next tokenProvider call fetches a genuinely new token. - */ - setTokenRefresh(refresh) { - this.tokenRefresh = refresh; - } - async resolveAuthToken() { - if (this.tokenProvider) { - return await this.tokenProvider(); - } - if (this.authToken) { - return this.authToken; - } - throw new Error('Authentication token not set'); - } - async processContentAsync(payload) { - if (!this.authToken) { - throw new Error('Authentication token not set'); - } - this.logger.info(`Processing content asynchronously.`); - const endpoint = `${this.baseUrl}/security/dataSecurityAndGovernance/processContentAsync`; - let payloadString = JSON.stringify(payload, this.jsonReplacer); - try { - const result = await this.retryHandler.executeWithRetry(async () => this.sendRequest(endpoint, payloadString, 'POST', {}, 'ProcessContentAsync'), 'ProcessContentAsync'); - return result; - } - catch (error) { - this.logger.error('Failed to process content asynchronously', { error }); - return this.buildErrorResponse(error); - } - } - async processContent(userId, request, scopeIdentifier, inline = true) { - if (!this.authToken) { - throw new Error('Authentication token not set'); - } - this.logger.info(`Processing content for user ${userId} (mode: ${inline ? 'inline' : 'offline'})`); - const endpoint = `${this.baseUrl}/users/${userId}/dataSecurityAndGovernance/processContent`; - const payloadString = JSON.stringify(request, this.jsonReplacer); - const additionalHeaders = {}; - if (scopeIdentifier) { - additionalHeaders['If-None-Match'] = scopeIdentifier; - } - if (inline) { - additionalHeaders['Prefer'] = 'evaluateInline'; - } - try { - const result = await this.retryHandler.executeWithRetry(async () => this.sendRequest(endpoint, payloadString, 'POST', additionalHeaders, 'ProcessContent'), 'ProcessContent'); - return result; - } - catch (error) { - this.logger.error(`Failed to process content for user ${userId}`, { error }); - return this.buildErrorResponse(error); - } - } - async uploadSignal(payload) { - if (!this.authToken) { - throw new Error('Authentication token not set'); - } - this.logger.info(`Uploading signal for ${payload.contentMetadata.contentEntries[0]?.identifier}`); - const endpoint = `${this.baseUrl}/users/${payload.userId}/dataSecurityAndGovernance/activities/contentActivities`; - let payloadString = JSON.stringify(payload, this.jsonReplacer); - try { - const result = await this.retryHandler.executeWithRetry(async () => this.sendRequest(endpoint, payloadString, 'POST', {}, 'UploadSignal'), 'UploadSignal'); - return result; - } - catch (error) { - this.logger.error('Failed to upload signal', { error }); - return this.buildErrorResponse(error); - } - } - async searchTenantProtectionScope(payload) { - if (!this.authToken) { - throw new Error('Authentication token not set'); - } - this.logger.info(`Searching tenant protection scope`); - const endpoint = `${this.baseUrl}/security/dataSecurityAndGovernance/protectionScopes/compute`; - let payloadString = JSON.stringify(payload, this.jsonReplacer); - try { - const result = await this.retryHandler.executeWithRetry(async () => this.sendRequest(endpoint, payloadString, 'POST', {}, 'SearchTenantProtectionScope'), 'SearchTenantProtectionScope'); - const scopeCount = result.data?.value?.length ?? 0; - this.logger.info(`[SearchTenantProtectionScope] Returned ${scopeCount} scope(s)`); - return result; - } - catch (error) { - this.logger.error('Failed to search tenant protection scope', { error }); - return this.buildErrorResponse(error); - } - } - async searchUserProtectionScope(userId, payload) { - if (!this.authToken) { - throw new Error('Authentication token not set'); - } - this.logger.info(`Searching protection scope for user ${userId}`); - const endpoint = `${this.baseUrl}/users/${userId}/dataSecurityAndGovernance/protectionScopes/compute`; - let payloadString = JSON.stringify(payload, this.jsonReplacer); - try { - const result = await this.retryHandler.executeWithRetry(async () => this.sendRequest(endpoint, payloadString, 'POST', {}, 'SearchUserProtectionScope'), 'SearchUserProtectionScope'); - const scopeCount = result.data?.value?.length ?? 0; - this.logger.info(`[SearchUserProtectionScope] Returned ${scopeCount} scope(s) for user ${userId}`); - return result; - } - catch (error) { - this.logger.error(`Failed to search protection scope for user ${userId}`, { error }); - return this.buildErrorResponse(error); - } - } - async getUserInfo(userEmails) { - if (!this.authToken) { - throw new Error('Authentication token not set'); - } - this.logger.info(`Getting user info for ${userEmails.length} users`); - let usernameFilter = userEmails.map(email => `userPrincipalName eq '${email}'`).join(' OR '); - const endpoint = `${this.baseUrl}/users/?$select=id,userPrincipalName&$filter=${usernameFilter}`; - try { - const result = await this.retryHandler.executeWithRetry(async () => this.sendRequest(endpoint, null, 'GET', {}, 'GetUserInfo'), 'GetUserInfo'); - this.logger.info(`Received user info for ${result.data?.value.length} users`); - return result; - } - catch (error) { - this.logger.error('Failed to get user info', { error }); - return this.buildErrorResponse(error); - } - } - async sendRequest(endpoint, payload = null, method = "POST", additionalHeaders = {}, operationName = 'Unknown') { - return this.sendRequestInner(endpoint, payload, method, additionalHeaders, operationName, true); - } - async sendRequestInner(endpoint, payload, method, additionalHeaders, operationName, allowAuthRetry) { - const currentToken = await this.resolveAuthToken(); - const requestId = this.generateRequestId(); - const headers = { - 'Authorization': `Bearer ${currentToken}`, - 'Content-Type': 'application/json', - 'X-Request-Id': requestId, - 'User-Agent': 'PurviewGitHubAction/1.0', - ...additionalHeaders - }; - this.logger.startGroup('Purview API Request'); - this.logger.debug(`[${operationName}] Request`, { - endpoint: this.sanitizeEndpoint(endpoint), - method, - requestId, - additionalHeaders: Object.keys(additionalHeaders), - }); - if (payload) { - this.logger.debug(`[${operationName}] Request payload`, { - payload: JSON.parse(JSON.stringify(JSON.parse(payload), this.jsonReplacer)), - }); - } - try { - const response = await fetch(endpoint, { - method: method, - headers, - body: payload - }); - const responseText = await response.text(); - const correlationId = response.headers.get('client-request-id'); - this.logger.info(`[${operationName}] Received response with status: ${response.status}, correlation ID: ${correlationId}`); - if (!response.ok) { - this.logger.debug(`[${operationName}] Error response body`, { - status: response.status, - correlationId, - body: this.sanitizeErrorResponse(responseText), - }); - this.logger.error('API request failed', { - status: response.status, - statusText: response.statusText, - correlationId, - response: this.sanitizeErrorResponse(responseText) - }); - // Handle specific error cases - if (response.status === 401) { - // If we have a token provider, clear the stale token and retry once - if (allowAuthRetry && this.tokenProvider) { - this.logger.info(`[${operationName}] 401 received — refreshing token and retrying`); - if (this.tokenRefresh) { - this.tokenRefresh(); - } - this.logger.endGroup(); - return this.sendRequestInner(endpoint, payload, method, additionalHeaders, operationName, false); - } - const err = new Error('Authentication failed. Token may be expired.'); - err.statusCode = 401; - err.correlationId = correlationId; - err.responseBody = this.sanitizeErrorResponse(responseText); - throw err; - } - if (response.status === 429) { - const retryAfter = response.headers.get('Retry-After'); - throw new Error(`Rate limited. Retry after ${retryAfter} seconds.`); - } - const err = new Error(`API request failed: ${response.status} - ${response.statusText}`); - err.statusCode = response.status; - err.correlationId = correlationId; - err.responseBody = this.sanitizeErrorResponse(responseText); - throw err; - } - try { - const data = responseText ? JSON.parse(responseText) : {}; - const etag = response.headers.get('etag')?.replace(/"/g, '') || undefined; - this.logger.debug(`[${operationName}] Response payload`, { - statusCode: response.status, - etag, - correlationId, - data: JSON.parse(JSON.stringify(data, this.jsonReplacer)), - }); - this.logger.endGroup(); - return { - success: true, - data, - statusCode: response.status, - etag - }; - } - catch (parseError) { - const sanitizedErrorResponse = this.sanitizeErrorResponse(responseText); - this.logger.warn('Failed to parse response', { parseError, sanitizedErrorResponse }); - this.logger.endGroup(); - return { - success: false, - statusCode: response.status - }; - } - } - catch (error) { - this.logger.endGroup(); - throw error; - } - } - jsonReplacer(_key, value) { - // Remove sensitive data from logs - if (typeof value === 'string' && value.length > 1000) { - return value.substring(0, 100) + '... [truncated in logs]'; - } - return value; - } - buildErrorResponse(error) { - const message = error instanceof Error ? error.message : 'Unknown error'; - const statusCode = error?.statusCode; - const correlationId = error?.correlationId; - const responseBody = error?.responseBody; - return { - success: false, - error: message, - statusCode, - correlationId, - responseBody, - }; - } - generateRequestId() { - return `${this.config.repository.runId}-${Date.now()}-${Math.random().toString(36).substr(2, 9)}`; - } - sanitizeEndpoint(endpoint) { - return endpoint.replace(/[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}/gi, ''); - } - sanitizeErrorResponse(response) { - // Remove any potential sensitive data from error responses - const sanitized = response - .replace(/Bearer\s+[^\s]+/gi, 'Bearer [REDACTED]') - .replace(/[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}/gi, '[GUID]'); - return sanitized.substring(0, 500); // Limit length - } -} -//# sourceMappingURL=purviewClient.js.map \ No newline at end of file diff --git a/dist/api/PurviewClient.js.map b/dist/api/PurviewClient.js.map deleted file mode 100644 index be3e0e1..0000000 --- a/dist/api/PurviewClient.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"purviewClient.js","sourceRoot":"","sources":["../../src/api/purviewClient.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/dist/auth/AuthenticationService.d.ts b/dist/auth/AuthenticationService.d.ts deleted file mode 100644 index 387fba1..0000000 --- a/dist/auth/AuthenticationService.d.ts +++ /dev/null @@ -1,19 +0,0 @@ -import { ActionConfig, AuthToken } from '../config/types'; -export declare class AuthenticationService { - private readonly config; - private readonly logger; - private readonly msalApp; - private cachedToken; - private readonly authMode; - constructor(config: ActionConfig); - getToken(): Promise; - private getClientAssertion; - private isTokenValid; - /** - * Clear the cached token to force refresh on next request - */ - clearCache(): void; - private buildClientCertificateConfig; - private extractPemBlock; -} -//# sourceMappingURL=authenticationService.d.ts.map \ No newline at end of file diff --git a/dist/auth/AuthenticationService.d.ts.map b/dist/auth/AuthenticationService.d.ts.map deleted file mode 100644 index 086d924..0000000 --- a/dist/auth/AuthenticationService.d.ts.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"authenticationService.d.ts","sourceRoot":"","sources":["../../src/auth/authenticationService.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAG1D,qBAAa,qBAAqB;IAMpB,OAAO,CAAC,QAAQ,CAAC,MAAM;IALnC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAChC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAgC;IACxD,OAAO,CAAC,WAAW,CAA0B;IAC7C,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAA8B;gBAE1B,MAAM,EAAE,YAAY;IAiC3C,QAAQ,IAAI,OAAO,CAAC,SAAS,CAAC;YAyCtB,kBAAkB;IAuBhC,OAAO,CAAC,YAAY;IAMpB;;OAEG;IACI,UAAU,IAAI,IAAI;IAKzB,OAAO,CAAC,4BAA4B;IAapC,OAAO,CAAC,eAAe;CAOxB"} \ No newline at end of file diff --git a/dist/auth/AuthenticationService.js b/dist/auth/AuthenticationService.js deleted file mode 100644 index 7d44365..0000000 --- a/dist/auth/AuthenticationService.js +++ /dev/null @@ -1,124 +0,0 @@ -import * as core from '@actions/core'; -import { ConfidentialClientApplication } from '@azure/msal-node'; -import { X509Certificate, createHash } from 'crypto'; -import { Logger } from '../utils/logger'; -export class AuthenticationService { - config; - logger; - msalApp; - cachedToken = null; - authMode; - constructor(config) { - this.config = config; - this.logger = new Logger('AuthenticationService'); - const authority = `https://login.microsoftonline.com/${this.config.tenantId}`; - const clientCertificatePem = this.config.clientCertificatePem?.trim(); - if (clientCertificatePem) { - const clientCertificate = this.buildClientCertificateConfig(clientCertificatePem); - this.authMode = 'certificate'; - this.logger.info('Authentication mode: certificate'); - this.msalApp = new ConfidentialClientApplication({ - auth: { - clientId: this.config.clientId, - authority, - clientCertificate - } - }); - } - else { - this.authMode = 'federated'; - this.logger.info('Authentication mode: federated (GitHub OIDC)'); - // Initialize MSAL application with federated credential configuration - this.msalApp = new ConfidentialClientApplication({ - auth: { - clientId: this.config.clientId, - authority, - clientAssertion: this.getClientAssertion.bind(this) - } - }); - } - } - async getToken() { - try { - // Check cached token - if (this.cachedToken && this.isTokenValid(this.cachedToken)) { - this.logger.debug('Using cached token'); - return this.cachedToken; - } - this.logger.info(`Acquiring new token using MSAL (${this.authMode})`); - let scope = URL.parse(this.config.purviewEndpoint)?.host ?? "graph.microsoft.com"; - // Configure client credential request - const clientCredentialRequest = { - scopes: [`https://${scope}/.default`], - }; - // Acquire token using client credentials flow with federated credential - const response = await this.msalApp.acquireTokenByClientCredential(clientCredentialRequest); - if (!response || !response.accessToken) { - throw new Error('Failed to acquire token from MSAL'); - } - // Create AuthToken from MSAL response - const authToken = { - accessToken: response.accessToken, - expiresAt: response.expiresOn || new Date(Date.now() + 3600000) // fallback to 1 hour - }; - // Cache the token - this.cachedToken = authToken; - this.logger.info('Token acquired successfully using MSAL'); - return authToken; - } - catch (error) { - this.logger.error('Authentication failed', { error }); - throw new Error(`Authentication failed: ${error instanceof Error ? error.message : 'Unknown error'}`); - } - } - async getClientAssertion() { - try { - if (this.authMode !== 'federated') { - throw new Error('Client assertion requested while not in federated auth mode'); - } - // Get GitHub OIDC token to use as federated credential - this.logger.debug('Acquiring GitHub OIDC token for federated credential'); - const audience = "api://AzureADTokenExchange"; - const oidcToken = await core.getIDToken(audience); - if (!oidcToken) { - throw new Error('Failed to get OIDC token from GitHub Actions'); - } - this.logger.debug('GitHub OIDC token acquired successfully'); - return oidcToken; - } - catch (error) { - this.logger.error('Failed to get client assertion', { error }); - throw new Error(`Failed to get federated credential: ${error instanceof Error ? error.message : 'Unknown error'}`); - } - } - isTokenValid(token) { - const bufferMinutes = 5; - const expiryWithBuffer = new Date(token.expiresAt.getTime() - (bufferMinutes * 60 * 1000)); - return new Date() < expiryWithBuffer; - } - /** - * Clear the cached token to force refresh on next request - */ - clearCache() { - this.cachedToken = null; - this.logger.debug('Token cache cleared'); - } - buildClientCertificateConfig(pem) { - const privateKey = this.extractPemBlock(pem, /-----BEGIN (?:RSA |EC )?PRIVATE KEY-----[\s\S]*?-----END (?:RSA |EC )?PRIVATE KEY-----/m, 'PRIVATE KEY'); - const certificate = this.extractPemBlock(pem, /-----BEGIN CERTIFICATE-----[\s\S]*?-----END CERTIFICATE-----/m, 'CERTIFICATE'); - const x509 = new X509Certificate(certificate); - const thumbprint = createHash('sha1').update(x509.raw).digest('hex').toUpperCase(); - return { - thumbprint, - privateKey - }; - } - extractPemBlock(pem, pattern, label) { - const match = pem.match(pattern); - if (!match || !match[0]) { - throw new Error(`client-certificate is missing a ${label} PEM block`); - } - return match[0].trim(); - } -} -//# sourceMappingURL=authenticationService.js.map \ No newline at end of file diff --git a/dist/auth/AuthenticationService.js.map b/dist/auth/AuthenticationService.js.map deleted file mode 100644 index 7472c23..0000000 --- a/dist/auth/AuthenticationService.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"authenticationService.js","sourceRoot":"","sources":["../../src/auth/authenticationService.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/dist/auth/tokenProvider.d.ts b/dist/auth/tokenProvider.d.ts deleted file mode 100644 index f04a1ff..0000000 --- a/dist/auth/tokenProvider.d.ts +++ /dev/null @@ -1,3 +0,0 @@ -import { Logger } from '../utils/logger'; -export declare function getScopedToken(resource: string, tenantId: string, logger: Logger): Promise; -//# sourceMappingURL=tokenProvider.d.ts.map \ No newline at end of file diff --git a/dist/auth/tokenProvider.d.ts.map b/dist/auth/tokenProvider.d.ts.map deleted file mode 100644 index 4244566..0000000 --- a/dist/auth/tokenProvider.d.ts.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"tokenProvider.d.ts","sourceRoot":"","sources":["../../src/auth/tokenProvider.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AAEzC,wBAAsB,cAAc,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAmDxG"} \ No newline at end of file diff --git a/dist/auth/tokenProvider.js b/dist/auth/tokenProvider.js deleted file mode 100644 index c527298..0000000 --- a/dist/auth/tokenProvider.js +++ /dev/null @@ -1,49 +0,0 @@ -import * as exec from '@actions/exec'; -export async function getScopedToken(resource, tenantId, logger) { - logger.info(`Attempting to acquire Azure AD token for resource: ${resource}`); - const args = [ - 'account', - 'get-access-token', - '--resource', - resource, - '--tenant', - tenantId, - '--query', - 'accessToken', - '-o', - 'tsv' - ]; - let accessToken = ''; - let errorOutput = ''; - const options = { - silent: true, - listeners: { - stdout: (data) => { - accessToken += data.toString(); - }, - stderr: (data) => { - errorOutput += data.toString(); - }, - }, - }; - try { - const exitCode = await exec.exec('az', args, options); - if (exitCode !== 0) { - throw new Error(`az CLI exited with code ${exitCode}`); - } - } - catch (error) { - logger.error('Failed to execute `az account get-access-token`.'); - logger.error(`Error output: ${errorOutput}`); - throw new Error('Azure token acquisition failed. Ensure you are logged in via `azure/login` with OIDC and the correct permissions are configured.'); - } - const token = accessToken.trim(); - if (!token) { - logger.error('`az account get-access-token` executed but returned an empty token.'); - logger.error(`Error output from az CLI: ${errorOutput}`); - throw new Error('Acquired token is empty.'); - } - logger.info('Successfully acquired Azure AD token.'); - return token; -} -//# sourceMappingURL=tokenProvider.js.map \ No newline at end of file diff --git a/dist/auth/tokenProvider.js.map b/dist/auth/tokenProvider.js.map deleted file mode 100644 index db92e23..0000000 --- a/dist/auth/tokenProvider.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"tokenProvider.js","sourceRoot":"","sources":["../../src/auth/tokenProvider.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,IAAI,MAAM,eAAe,CAAC;AAGtC,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,QAAgB,EAAE,QAAgB,EAAE,MAAc;IACrF,MAAM,CAAC,IAAI,CAAC,sDAAsD,QAAQ,EAAE,CAAC,CAAC;IAE9E,MAAM,IAAI,GAAG;QACX,SAAS;QACT,kBAAkB;QAClB,YAAY;QACZ,QAAQ;QACR,UAAU;QACV,QAAQ;QACR,SAAS;QACT,aAAa;QACb,IAAI;QACJ,KAAK;KACN,CAAC;IAEF,IAAI,WAAW,GAAG,EAAE,CAAC;IACrB,IAAI,WAAW,GAAG,EAAE,CAAC;IAErB,MAAM,OAAO,GAAqB;QAChC,MAAM,EAAE,IAAI;QACZ,SAAS,EAAE;YACT,MAAM,EAAE,CAAC,IAAY,EAAE,EAAE;gBACvB,WAAW,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YACjC,CAAC;YACD,MAAM,EAAE,CAAC,IAAY,EAAE,EAAE;gBACvB,WAAW,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YACjC,CAAC;SACF;KACF,CAAC;IAEF,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;QACtD,IAAI,QAAQ,KAAK,CAAC,EAAE,CAAC;YACjB,MAAM,IAAI,KAAK,CAAC,2BAA2B,QAAQ,EAAE,CAAC,CAAC;QAC3D,CAAC;IACH,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,CAAC,KAAK,CAAC,kDAAkD,CAAC,CAAC;QACjE,MAAM,CAAC,KAAK,CAAC,iBAAiB,WAAW,EAAE,CAAC,CAAC;QAC7C,MAAM,IAAI,KAAK,CAAC,kIAAkI,CAAC,CAAC;IACtJ,CAAC;IAED,MAAM,KAAK,GAAG,WAAW,CAAC,IAAI,EAAE,CAAC;IACjC,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,MAAM,CAAC,KAAK,CAAC,qEAAqE,CAAC,CAAC;QACpF,MAAM,CAAC,KAAK,CAAC,6BAA6B,WAAW,EAAE,CAAC,CAAC;QACzD,MAAM,IAAI,KAAK,CAAC,0BAA0B,CAAC,CAAC;IAC9C,CAAC;IAED,MAAM,CAAC,IAAI,CAAC,uCAAuC,CAAC,CAAC;IACrD,OAAO,KAAK,CAAC;AACf,CAAC"} \ No newline at end of file diff --git a/dist/config.d.ts b/dist/config.d.ts deleted file mode 100644 index a16e112..0000000 --- a/dist/config.d.ts +++ /dev/null @@ -1,3 +0,0 @@ -import { ActionConfig } from './utils/types'; -export declare function getConfig(): ActionConfig; -//# sourceMappingURL=config.d.ts.map \ No newline at end of file diff --git a/dist/config.d.ts.map b/dist/config.d.ts.map deleted file mode 100644 index ca02bff..0000000 --- a/dist/config.d.ts.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAE7C,wBAAgB,SAAS,IAAI,YAAY,CA2BxC"} \ No newline at end of file diff --git a/dist/config.js b/dist/config.js deleted file mode 100644 index 551e8c9..0000000 --- a/dist/config.js +++ /dev/null @@ -1,28 +0,0 @@ -import * as core from '@actions/core'; -export function getConfig() { - const includeGlobs = core.getInput('include-globs', { required: true }).split(/[\s,]+/).filter(Boolean); - const excludeGlobs = core.getInput('exclude-globs', { required: false }).split(/[\s,]+/).filter(Boolean); - const applicationHostCategories = core.getInput('application-host-categories', { required: false }).split(',').map(c => c.trim()).filter(Boolean); - const maxFileBytes = parseInt(core.getInput('max-file-bytes', { required: true }), 10); - if (isNaN(maxFileBytes) || maxFileBytes <= 0) { - throw new Error('Input "max-file-bytes" must be a positive number.'); - } - return { - endpoint: core.getInput('endpoint', { required: true }), - userPrincipalName: core.getInput('user-principal-name', { required: true }), - tenantId: core.getInput('tenant-id', { required: true }), - aadResource: core.getInput('aad-resource', { required: true }), - includeGlobs: includeGlobs.length > 0 ? includeGlobs : ['**/*'], - excludeGlobs, - maxFileBytes, - sliceLargeFiles: core.getBooleanInput('slice-large-files', { required: true }), - skipBinary: core.getBooleanInput('skip-binary', { required: true }), - includeSummaryPayload: core.getBooleanInput('include-summary-payload', { required: true }), - minify: core.getBooleanInput('minify', { required: true }), - failOnNon2xx: core.getBooleanInput('fail-on-non-2xx', { required: true }), - appHostName: core.getInput('app-host-name', { required: true }), - applicationHostCategories, - debug: core.getBooleanInput('debug-logs', { required: true }), - }; -} -//# sourceMappingURL=config.js.map \ No newline at end of file diff --git a/dist/config.js.map b/dist/config.js.map deleted file mode 100644 index 0c2eef8..0000000 --- a/dist/config.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,IAAI,MAAM,eAAe,CAAC;AAGtC,MAAM,UAAU,SAAS;IACvB,MAAM,YAAY,GAAG,IAAI,CAAC,QAAQ,CAAC,eAAe,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IACxG,MAAM,YAAY,GAAG,IAAI,CAAC,QAAQ,CAAC,eAAe,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IACzG,MAAM,yBAAyB,GAAG,IAAI,CAAC,QAAQ,CAAC,6BAA6B,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IAElJ,MAAM,YAAY,GAAG,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,gBAAgB,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;IACvF,IAAI,KAAK,CAAC,YAAY,CAAC,IAAI,YAAY,IAAI,CAAC,EAAE,CAAC;QAC7C,MAAM,IAAI,KAAK,CAAC,mDAAmD,CAAC,CAAC;IACvE,CAAC;IAED,OAAO;QACL,QAAQ,EAAE,IAAI,CAAC,QAAQ,CAAC,UAAU,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;QACvD,iBAAiB,EAAE,IAAI,CAAC,QAAQ,CAAC,qBAAqB,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;QAC3E,QAAQ,EAAE,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;QACxD,WAAW,EAAE,IAAI,CAAC,QAAQ,CAAC,cAAc,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;QAC9D,YAAY,EAAE,YAAY,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;QAC/D,YAAY;QACZ,YAAY;QACZ,eAAe,EAAE,IAAI,CAAC,eAAe,CAAC,mBAAmB,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;QAC9E,UAAU,EAAE,IAAI,CAAC,eAAe,CAAC,aAAa,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;QACnE,qBAAqB,EAAE,IAAI,CAAC,eAAe,CAAC,yBAAyB,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;QAC1F,MAAM,EAAE,IAAI,CAAC,eAAe,CAAC,QAAQ,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;QAC1D,YAAY,EAAE,IAAI,CAAC,eAAe,CAAC,iBAAiB,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;QACzE,WAAW,EAAE,IAAI,CAAC,QAAQ,CAAC,eAAe,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;QAC/D,yBAAyB;QACzB,KAAK,EAAE,IAAI,CAAC,eAAe,CAAC,YAAY,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;KAC9D,CAAC;AACJ,CAAC"} \ No newline at end of file diff --git a/dist/config/types.d.ts b/dist/config/types.d.ts deleted file mode 100644 index 9585490..0000000 --- a/dist/config/types.d.ts +++ /dev/null @@ -1,365 +0,0 @@ -export interface ActionConfig { - clientId: string; - clientCertificatePem?: string; - tenantId: string; - purviewAccountName: string; - purviewEndpoint: string; - filePatterns: string[]; - excludePatterns?: string[]; - maxFileSize: number; - debug: boolean; - repository: RepositoryInfo; - userId: string; - userMappings?: UserMapping[]; - stateRepoBranch?: string; - stateRepoToken?: string; -} -export interface RepositoryInfo { - owner: string; - repo: string; - branch: string; - sha: string; - runId: string; - runNumber: string; -} -export interface AuthToken { - accessToken: string; - expiresAt: Date; -} -export type CommitChangeType = "unknown" | "added" | "removed" | "modified" | "renamed" | "copied" | "changed" | "unchanged"; -export interface FileMetadata { - path: string; - size: number; - encoding: string; - sha: string; - content?: string; - authorLogin?: string | null | undefined; - authorEmail?: string | null | undefined; - authorId?: string; - committerLogin?: string | null | undefined; - committerEmail?: string | null | undefined; - committerId?: string; - numberOfDeletions?: number; - numberOfAdditions?: number; - numberOfChanges?: number; - typeOfChange?: CommitChangeType; - commitTimestamp?: string; -} -export interface ApiResponse { - success: boolean; - data?: T; - error?: string; - statusCode?: number; - etag?: string; - correlationId?: string; - responseBody?: string; -} -export type Result = { - success: true; - value: T; -} | { - success: false; - error: E; -}; -export interface AzureTokenResponse { - access_token: string; - expires_in: number; - token_type: string; - scope?: string; -} -export interface GraphDataTypeBase { - /** The @odata.type property name used in the JSON representation of the object. */ - "@odata.type": string; -} -export interface ProcessContentBatchRequest { - processContentRequests: ProcessContentRequestItem[]; -} -export interface ProcessContentRequestItem { - contentToProcess: ContentToProcess; - userId?: string; - userEmail?: string; - requestId: string; -} -export interface ContentToProcess { - contentEntries: ProcessContentMetadataBase[]; - activityMetadata?: ActivityMetadata; - deviceMetadata?: DeviceMetadata; - integratedAppMetadata?: IntegratedAppMetadata; - protectedAppMetadata?: ProtectedAppMetadata; -} -export interface ProcessContentMetadataBase extends GraphDataTypeBase { - identifier: string; - content: ContentBase; - name: string; - correlationId: string; - sequenceNumber?: number; - length?: number; - isTruncated: boolean; - createdDateTime: string; - modifiedDateTime: string; -} -export interface ProcessConversationMetadata extends ProcessContentMetadataBase { - "@odata.type": "microsoft.graph.processConversationMetadata"; - parentMessageId?: string; - accessedResources_v2?: AccessedResourceDetails[]; - plugins?: AiInteractionPlugin[]; - agents?: AiAgentInfo[]; -} -export interface ProcessFileMetadata extends ProcessContentMetadataBase { - "@odata.type": "microsoft.graph.processFileMetadata"; - ownerId?: string; -} -export interface ContentBase extends GraphDataTypeBase { -} -export interface TextContent extends ContentBase { - "@odata.type": "microsoft.graph.textContent"; - data: string; -} -export interface BinaryContent extends ContentBase { - "@odata.type": "microsoft.graph.binaryContent"; - data: string; -} -export declare enum Activity { - unknown = 0, - uploadText = 1, - uploadFile = 2, - downloadText = 3, - downloadFile = 4 -} -export interface ActivityMetadata { - activity: Activity; -} -export interface DeviceMetadata { - deviceType?: string; - ipAddress?: string; - operatingSystemSpecifications?: OperatingSystemSpecifications; -} -export interface OperatingSystemSpecifications { - operatingSystemPlatform: string; - operatingSystemVersion: string; -} -export interface IntegratedAppMetadata { - name: string; - version: string; -} -export interface ProtectedAppMetadata extends IntegratedAppMetadata { - applicationLocation: PolicyLocation; -} -export interface PolicyLocation extends GraphDataTypeBase { - value: string; -} -export interface PolicyLocationApplication extends PolicyLocation { - "@odata.type": "microsoft.graph.policyLocationApplication"; -} -export interface PolicyLocationDomain extends PolicyLocation { - "@odata.type": "microsoft.graph.policyLocationDomain"; -} -export interface PolicyLocationUrl extends PolicyLocation { - "@odata.type": "microsoft.graph.policyLocationUrl"; -} -export interface AiInteractionPlugin { - identifier: string; - name: string; - version: string; -} -export interface AiAgentInfo { - identifier: string; - name?: string; - version?: string; -} -export interface AccessedResourceDetails { - identifier: string; - name: string; - url?: string; - labelId?: string; - accessType?: ResourceAccessType; - status: ResourceAccessStatus; - isCrossPromptInjectionDetected?: boolean; -} -export type ResourceAccessType = "none" | "read" | "write" | "create" | "unknownFutureValue"; -export type ResourceAccessStatus = "failure" | "success" | "unknownFutureValue"; -export interface UploadSignalRequest { - id: string; - userId: string; - scopeIdentifier: string; - contentMetadata: ContentToProcess; - userEmail?: string | null | undefined; -} -export type ProtectionScopeActivities = "none" | "uploadText" | "uploadFile" | "downloadText" | "downloadFile" | "unknownFutureValue"; -type PolicyPivotProperty = "none" | "activity" | "location" | "unknownFutureValue"; -export interface ProtectionScopesRequest { - /** - * Activities to include in the scope - */ - activities?: ProtectionScopeActivities; - /** - * Gets or sets the locations to compute protection scopes for. - */ - locations?: PolicyLocation[]; - /** - * Response aggregation pivot - */ - pivotOn?: PolicyPivotProperty; - /** - * Device meta data - */ - deviceMetadata?: DeviceMetadata; - /** - * Integrated app metadata - */ - integratedAppMetadata?: IntegratedAppMetadata; - /** - * The correlation id of the request. - * Note: This is ignored in JSON serialization in C# - */ - correlationId?: string; - /** - * Scope ID, used to detect stale client scoping information - * Note: This is ignored in JSON serialization in C# - */ - scopeIdentifier?: string; -} -export interface PrFileContext { - fileName: string; - prId: string; - repoOwner: string; - repoName: string; - branchName: string; - baseName: string; - fileSize: number; - commitSha: string; - commitTimestamp?: string; - authorLogin: string | null | undefined; - authorEmail?: string | null | undefined; - title: string; - numberOfDeletions: number; - numberOfAdditions: number; - numberOfChanges: number; - typeOfChange: CommitChangeType; -} -export interface PrInfo { - iterations: number; - authorLogin: string | null | undefined; - authorEmail: string | null | undefined; - head: string; - base: string; - title: string; - url: string | null | undefined; - prNumber?: number; -} -export interface GraphUserInfoContainer { - value: GraphUserInfo[]; -} -export interface GraphUserInfo { - id: string; - userPrincipalName: string; -} -export interface ProtectionScopesResponse { - value: PolicyScopes[]; -} -export interface PolicyScopes { - policyScope: PolicyBinding; - locations: PolicyLocation[]; - activities: ProtectionScopeActivities; - executionMode: string; - policyActions: DlpActionInfo[]; -} -export interface DlpActionInfo { - action: string; - restrictionAction?: string; - policyName?: string; - policyId?: string; - ruleId?: string; - ruleName?: string; -} -export interface PolicyBinding { - inclusions: ScopeBase[]; - exclusions: ScopeBase[]; -} -export interface ScopeBase { - "@odata.type": string; - identity: string; -} -export interface SplitPCRequests { - processContentRequests: ProcessContentBatchRequest[]; - uploadSignalRequests: UploadSignalRequest[]; -} -export interface ProcessContentRequest { - contentToProcess: ContentToProcess; -} -export interface ProcessContentResponse { - id: string; - protectionScopeState: ProtectionScopeState; - policyActions: PolicyAction[]; - processingErrors: any[]; -} -export type ProtectionScopeState = "notModified" | "modified"; -export interface PolicyAction { - action: string; - restrictionAction?: string; - policyName?: string; - policyId?: string; - ruleId?: string; - ruleName?: string; -} -export interface BlockedFileResult { - filePath: string; - userId: string; - policyActions: PolicyAction[]; -} -export declare enum ExecutionMode { - evaluateInline = "evaluateInline", - evaluateOffline = "evaluateOffline" -} -export interface ScopeCheckResult { - shouldProcess: boolean; - dlpActions: DlpActionInfo[]; - executionMode: ExecutionMode; -} -export interface CommitInfo { - sha: string; - email: string | undefined; - committerEmail?: string; - message?: string; -} -export interface CommitFiles { - sha: string; - files: FileMetadata[]; - message?: string; - authorEmail?: string; - authorLogin?: string; - authorName?: string; - authorId?: string; - committerEmail?: string; - committerLogin?: string; - committerName?: string; - committerId?: string; - timestamp?: string; -} -export interface UsersConfig { - users: UserMapping[]; - defaultUserId: string; -} -export interface UserMapping { - email: string; - userId: string; -} -export interface StateTrackingInfo { - token: string; - owner: string; - repo: string; - branch: string; - path: string; -} -declare global { - namespace NodeJS { - interface ProcessEnv { - GITHUB_TOKEN?: string; - RUNNER_DEBUG?: string; - CHANGED_FILES?: string; - [key: string]: string | undefined; - } - } -} -export {}; -//# sourceMappingURL=types.d.ts.map \ No newline at end of file diff --git a/dist/config/types.d.ts.map b/dist/config/types.d.ts.map deleted file mode 100644 index 95b8064..0000000 --- a/dist/config/types.d.ts.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/config/types.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/dist/config/types.js b/dist/config/types.js deleted file mode 100644 index 87e6ecb..0000000 --- a/dist/config/types.js +++ /dev/null @@ -1,14 +0,0 @@ -export var Activity; -(function (Activity) { - Activity[Activity["unknown"] = 0] = "unknown"; - Activity[Activity["uploadText"] = 1] = "uploadText"; - Activity[Activity["uploadFile"] = 2] = "uploadFile"; - Activity[Activity["downloadText"] = 3] = "downloadText"; - Activity[Activity["downloadFile"] = 4] = "downloadFile"; -})(Activity || (Activity = {})); -export var ExecutionMode; -(function (ExecutionMode) { - ExecutionMode["evaluateInline"] = "evaluateInline"; - ExecutionMode["evaluateOffline"] = "evaluateOffline"; -})(ExecutionMode || (ExecutionMode = {})); -//# sourceMappingURL=types.js.map \ No newline at end of file diff --git a/dist/config/types.js.map b/dist/config/types.js.map deleted file mode 100644 index 7131f48..0000000 --- a/dist/config/types.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/config/types.ts"],"names":[],"mappings":"AAmJA,MAAM,CAAN,IAAY,QAMX;AAND,WAAY,QAAQ;IAChB,6CAAW,CAAA;IACX,mDAAc,CAAA;IACd,mDAAc,CAAA;IACd,uDAAgB,CAAA;IAChB,uDAAgB,CAAA;AACpB,CAAC,EANW,QAAQ,KAAR,QAAQ,QAMnB;AA6OD,MAAM,CAAN,IAAY,aAGX;AAHD,WAAY,aAAa;IACvB,kDAAiC,CAAA;IACjC,oDAAmC,CAAA;AACrC,CAAC,EAHW,aAAa,KAAb,aAAa,QAGxB"} \ No newline at end of file diff --git a/dist/file/FileProcessor.d.ts b/dist/file/FileProcessor.d.ts deleted file mode 100644 index e8e6e7d..0000000 --- a/dist/file/FileProcessor.d.ts +++ /dev/null @@ -1,78 +0,0 @@ -import { ActionConfig, FileMetadata, PrInfo, CommitInfo, CommitFiles } from '../config/types'; -export declare class FileProcessor { - private readonly config; - private readonly logger; - private readonly octokit; - private readonly purviewClient; - private readonly authService; - private emptySha; - /** Cache: email (lowercase) → Graph API user ID. Survives across calls. */ - private readonly graphUserIdCache; - constructor(config: ActionConfig); - /** - * Resolve a set of author emails to user IDs. - * Resolution order: users.json mappings → cached Graph results → Graph API. - * Results from Graph API are cached for the lifetime of this FileProcessor. - * - * Returns a map of lowercase email → userId. - */ - private resolveUserIds; - private getGlobPatterns; - private normalizeRepoPath; - private shouldIncludePath; - getChangedFiles(): Promise; - getAllRepoFiles(): Promise; - /** - * Fetch recent commits for the default branch (used during full scans). - * When `upToSha` is provided, only commits up to and including that SHA are - * returned (i.e. commits *before* the current event). The current event's - * commits are left for the diff path. - */ - getAllRepoCommits(upToSha?: string): Promise; - /** - * Use `git log` to build a map of file path → last commit author email. - * Runs a single git command for all files to stay efficient. - */ - private getFileAuthorEmails; - getPrInfoForPush(): Promise; - getPrInfo(): Promise; - private getFilesForCommit; - /** - * Computes a unified diff for a file when the commit API omits the patch. - * Fetches the file content at both the parent and current commits via the - * GitHub Contents API, then produces a unified diff. - */ - private computeDiff; - /** - * Fetches file content from the GitHub API at a specific ref. - * Uses the Contents API for small files (≤1MB base64) and falls back to - * the raw download URL for larger files. - */ - private fetchFileContent; - /** - * Produces a unified diff string from two arrays of lines. - * Uses a simple LCS-based approach to generate hunks matching standard - * unified diff format (the same format GitHub returns in .patch). - */ - private generateUnifiedDiff; - /** - * Computes unified-diff hunks from old and new line arrays. - * Groups consecutive changes with up to 3 lines of context around each change. - */ - private computeHunks; - /** - * Builds an edit script (sequence of equal/delete/insert operations) - * from two arrays of lines using LCS-based diff. - * For files exceeding a line count threshold, falls back to a simple - * delete-all/insert-all to avoid excessive memory usage. - */ - private buildEditScript; - private isCommitEmpty; - getCommits(): Promise; - getAllPRCommits(): Promise; - getFilesGroupedByCommit(lastProcessedHeadSha?: string | null, prefetchedCommits?: CommitInfo[]): Promise; - getLatestPushFiles(lastProcessedHeadSha?: string | null): Promise; - private getPullRequestFiles; - private getFilesFromPatterns; -} -//# sourceMappingURL=fileProcessor.d.ts.map \ No newline at end of file diff --git a/dist/file/FileProcessor.d.ts.map b/dist/file/FileProcessor.d.ts.map deleted file mode 100644 index 91ffc3f..0000000 --- a/dist/file/FileProcessor.d.ts.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"fileProcessor.d.ts","sourceRoot":"","sources":["../../src/file/fileProcessor.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAY9F,qBAAa,aAAa;IASZ,OAAO,CAAC,QAAQ,CAAC,MAAM;IARnC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAChC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAuC;IAC/D,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAgB;IAC9C,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAwB;IACpD,OAAO,CAAC,QAAQ,CAAuD;IACvE,2EAA2E;IAC3E,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAkC;gBAEtC,MAAM,EAAE,YAAY;IAQjD;;;;;;OAMG;YACW,cAAc;IA4E5B,OAAO,CAAC,eAAe;IASvB,OAAO,CAAC,iBAAiB;IAIzB,OAAO,CAAC,iBAAiB;IAuBnB,eAAe,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;IAepC,eAAe,IAAI,OAAO,CAAC,YAAY,EAAE,CAAC;IA2EhD;;;;;OAKG;IACG,iBAAiB,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;IA4DjE;;;OAGG;IACH,OAAO,CAAC,mBAAmB;IAwBrB,gBAAgB,IAAI,OAAO,CAAC,MAAM,CAAC;IAenC,SAAS,IAAI,OAAO,CAAC,MAAM,CAAC;YA+CpB,iBAAiB;IA2E/B;;;;OAIG;YACW,WAAW;IA6BzB;;;;OAIG;YACW,gBAAgB;IAsC9B;;;;OAIG;IACH,OAAO,CAAC,mBAAmB;IAiB3B;;;OAGG;IACH,OAAO,CAAC,YAAY;IAwEpB;;;;;OAKG;IACH,OAAO,CAAC,eAAe;IAmDvB,OAAO,CAAC,aAAa;IAOf,UAAU,IAAI,OAAO,CAAC,UAAU,EAAE,CAAC;IA8CnC,eAAe,IAAI,OAAO,CAAC,UAAU,EAAE,CAAC;IAyBxC,uBAAuB,CAAC,oBAAoB,CAAC,EAAE,MAAM,GAAG,IAAI,EAAE,iBAAiB,CAAC,EAAE,UAAU,EAAE,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;IAkDvH,kBAAkB,CAAC,oBAAoB,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC;YAKzE,mBAAmB;YA4BnB,oBAAoB;CAOnC"} \ No newline at end of file diff --git a/dist/file/FileProcessor.js b/dist/file/FileProcessor.js deleted file mode 100644 index d8511e4..0000000 --- a/dist/file/FileProcessor.js +++ /dev/null @@ -1,756 +0,0 @@ -import * as github from '@actions/github'; -import * as glob from '@actions/glob'; -import * as fs from 'fs'; -import * as crypto from 'crypto'; -import { execSync } from 'child_process'; -import isBinaryPath from 'is-binary-path'; -import { minimatch } from 'minimatch'; -import { Logger } from '../utils/logger'; -import { PurviewClient } from '../api/purviewClient'; -import { AuthenticationService } from '../auth/authenticationService'; -import { UserResolver } from '../utils/userResolver'; -export class FileProcessor { - config; - logger; - octokit; - purviewClient; - authService; - emptySha = "0000000000000000000000000000000000000000"; - /** Cache: email (lowercase) → Graph API user ID. Survives across calls. */ - graphUserIdCache = new Map(); - constructor(config) { - this.config = config; - this.logger = new Logger('FileProcessor'); - const token = process.env['GITHUB_TOKEN'] || ''; - this.authService = new AuthenticationService(this.config); - this.octokit = github.getOctokit(token); - this.purviewClient = new PurviewClient(this.config); - } - /** - * Resolve a set of author emails to user IDs. - * Resolution order: users.json mappings → cached Graph results → Graph API. - * Results from Graph API are cached for the lifetime of this FileProcessor. - * - * Returns a map of lowercase email → userId. - */ - async resolveUserIds(emails) { - const resolved = {}; - // 1. Resolve from users.json mappings - if (this.config.userMappings && this.config.userMappings.length > 0) { - const userResolver = new UserResolver({ users: this.config.userMappings, defaultUserId: this.config.userId }, this.logger); - for (const email of emails) { - const id = userResolver.resolve(email); - resolved[email] = id; - } - } - // 2. Fill from cache for emails still unresolved (or resolved to default) - const needsGraph = []; - for (const email of emails) { - if (resolved[email] && resolved[email] !== this.config.userId) { - continue; // already resolved via users.json - } - const cached = this.graphUserIdCache.get(email); - if (cached) { - resolved[email] = cached; - this.logger.info(`Graph cache hit for '${email}': ${cached}`); - } - else { - needsGraph.push(email); - } - } - // 3. Call Graph API for the rest - if (needsGraph.length > 0) { - try { - const token = await this.authService.getToken(); - this.purviewClient.setAuthToken(token.accessToken); - const response = await this.purviewClient.getUserInfo(needsGraph); - if (response.success && response.data) { - for (const user of response.data.value) { - const upn = user.userPrincipalName.toLowerCase(); - this.graphUserIdCache.set(upn, user.id); - resolved[upn] = user.id; - this.logger.info(`Graph API resolved '${upn}': ${user.id}`); - } - } - // Cache "not found" for emails that were queried but not in the response - // so we don't call Graph API again for these users - for (const email of needsGraph) { - if (!this.graphUserIdCache.has(email.toLowerCase())) { - this.graphUserIdCache.set(email.toLowerCase(), this.config.userId); - this.logger.info(`Graph API: user '${email}' not found, caching as default userId`); - } - } - } - catch (e) { - this.logger.warn('Graph API user lookup failed; caching as default userId to avoid re-querying.', { error: e }); - // Cache all failed lookups so we don't retry Graph API for these emails - for (const email of needsGraph) { - if (!this.graphUserIdCache.has(email.toLowerCase())) { - this.graphUserIdCache.set(email.toLowerCase(), this.config.userId); - } - } - } - } - // 4. Ensure every email has at least the default - for (const email of emails) { - if (!resolved[email]) { - resolved[email] = this.config.userId; - } - } - this.logger.info(`Resolved ${emails.size} email(s): ${needsGraph.length} via Graph API, ${emails.size - needsGraph.length} from cache/users.json.`); - return resolved; - } - getGlobPatterns() { - const includePatterns = (this.config.filePatterns || []).map(p => p.trim()).filter(Boolean); - const excludePatterns = (this.config.excludePatterns || []).map(p => p.trim()).filter(Boolean); - // @actions/glob supports negated patterns by prefixing with '!' - const negated = excludePatterns.map(p => (p.startsWith('!') ? p : `!${p}`)); - return [...includePatterns, ...negated]; - } - normalizeRepoPath(path) { - return path.replace(/\\/g, '/'); - } - shouldIncludePath(path) { - const normalized = this.normalizeRepoPath(path); - const includePatterns = (this.config.filePatterns || []).map(p => p.trim()).filter(Boolean); - const excludePatterns = (this.config.excludePatterns || []).map(p => p.trim()).filter(Boolean); - const included = includePatterns.length === 0 - ? true - : includePatterns.some(p => minimatch(normalized, p, { dot: true })); - if (!included) { - this.logger.info(`Excluding file '${path}' because it does not match any include patterns.`); - return false; - } - const excluded = excludePatterns.some(p => minimatch(normalized, p, { dot: true })); - if (excluded) { - this.logger.info(`Excluding file '${path}' due to exclude pattern match.`); - } - return !excluded; - } - async getChangedFiles() { - try { - // For pull requests, get changed files - if (github.context.eventName === 'pull_request') { - return await this.getPullRequestFiles(); - } - // For pushes, use glob patterns - return await this.getFilesFromPatterns(); - } - catch (error) { - this.logger.error('Failed to get changed files', { error }); - throw error; - } - } - async getAllRepoFiles() { - const patterns = this.getGlobPatterns().join('\n'); - const globber = await glob.create(patterns); - const files = await globber.glob(); - const maxBytes = this.config.maxFileSize; - const result = []; - for (const filePath of files) { - try { - const stats = fs.statSync(filePath); - // Skip directories (glob should already do this, but keep it defensive) - if (!stats.isFile()) { - continue; - } - if (stats.size === 0) { - continue; - } - if (stats.size > maxBytes) { - this.logger.warn(`Skipping oversized file during full scan: ${filePath} (${stats.size} bytes > ${maxBytes} bytes)`); - continue; - } - const isBinary = isBinaryPath(filePath); - const encoding = isBinary ? 'base64' : 'utf-8'; - if (isBinary) { - this.logger.info(`Skipping binary file: ${filePath}`); - continue; - } - const buffer = fs.readFileSync(filePath); - const content = buffer.toString('utf8'); - const sha = crypto.createHash('sha1').update(buffer).digest('hex'); - result.push({ - path: filePath, - size: buffer.byteLength, - encoding, - sha, - content, - typeOfChange: 'unknown', - commitTimestamp: new Date().toISOString(), - }); - } - catch (e) { - this.logger.warn(`Failed reading file during full scan: ${filePath}`, { error: e }); - } - } - this.logger.info(`Full scan selected ${result.length} files after filtering.`); - // --- Resolve author info for each file --- - const fileAuthorMap = this.getFileAuthorEmails(result); - const uniqueEmails = new Set(Object.values(fileAuthorMap).filter(Boolean)); - const userIdMap = await this.resolveUserIds(uniqueEmails); - // Assign resolved author info to each file - for (const file of result) { - const authorEmail = fileAuthorMap[file.path]; - if (authorEmail) { - file.authorEmail = authorEmail; - file.authorId = userIdMap[authorEmail.toLowerCase()] || this.config.userId; - // For full-scan files the last commit author doubles as committer - // so that AiAgentInfo is populated in the payload. - file.committerEmail = file.committerEmail || authorEmail; - file.committerId = file.committerId || file.authorId; - } - } - return result; - } - /** - * Fetch recent commits for the default branch (used during full scans). - * When `upToSha` is provided, only commits up to and including that SHA are - * returned (i.e. commits *before* the current event). The current event's - * commits are left for the diff path. - */ - async getAllRepoCommits(upToSha) { - const owner = this.config.repository.owner; - const repo = this.config.repository.repo; - this.logger.info(`Fetching recent commits for full scan${upToSha ? ` (up to ${upToSha})` : ''}`); - const listParams = { - owner, - repo, - per_page: 100, - }; - // When a boundary SHA is provided, ask the GitHub API to start listing - // from that SHA (inclusive), which excludes newer commits. - if (upToSha) { - listParams.sha = upToSha; - } - const { data: commits } = await this.octokit.rest.repos.listCommits(listParams); - if (commits.length === 0) { - this.logger.info('No commits found in repository'); - return []; - } - this.logger.info(`Found ${commits.length} commit(s) for full scan`); - // Resolve author/committer emails to user IDs - const allEmails = new Set(); - for (const c of commits) { - const authorEmail = c.commit.author?.email; - const committerEmail = c.commit.committer?.email; - if (authorEmail) - allEmails.add(authorEmail.toLowerCase()); - if (committerEmail) - allEmails.add(committerEmail.toLowerCase()); - } - const userIdMap = await this.resolveUserIds(allEmails); - const result = []; - for (const c of commits) { - const authorEmail = c.commit.author?.email || undefined; - const committerEmail = c.commit.committer?.email || undefined; - const authorId = authorEmail ? (userIdMap[authorEmail.toLowerCase()] || this.config.userId) : undefined; - const committerId = committerEmail ? (userIdMap[committerEmail.toLowerCase()] || this.config.userId) : undefined; - result.push({ - sha: c.sha, - files: [], - message: c.commit.message || undefined, - authorEmail, - authorLogin: c.author?.login || undefined, - authorName: c.commit.author?.name || undefined, - authorId, - committerEmail, - committerLogin: c.committer?.login || undefined, - committerName: c.commit.committer?.name || undefined, - committerId, - timestamp: c.commit.author?.date || c.commit.committer?.date || undefined, - }); - } - return result; - } - /** - * Use `git log` to build a map of file path → last commit author email. - * Runs a single git command for all files to stay efficient. - */ - getFileAuthorEmails(files) { - const workspace = process.env['GITHUB_WORKSPACE'] || process.cwd(); - const map = {}; - for (const file of files) { - try { - // git log -1 gives the most recent commit that touched the file - const email = execSync(`git log -1 --format=%ae -- "${file.path}"`, { cwd: workspace, encoding: 'utf-8', timeout: 10000 }).trim(); - if (email) { - map[file.path] = email.toLowerCase(); - } - } - catch { - // Silently skip files where git log fails (e.g. untracked files) - } - } - this.logger.info(`Resolved author emails for ${Object.keys(map).length}/${files.length} files via git log.`); - return map; - } - async getPrInfoForPush() { - const commits = github.context.payload["commits"]; - const head_commit = github.context.payload["head_commit"]; - return { - iterations: commits.length, - authorEmail: head_commit.author?.email || head_commit?.committer?.email, - authorLogin: head_commit?.author?.username || head_commit?.committer?.username, - head: github.context.ref, - base: github.context.ref, - title: `Push to ${github.context.ref}`, - url: github.context.payload["compare"], - }; - } - async getPrInfo() { - if (github.context.eventName === "push") { - this.logger.info('Processing push event, getting PR info for latest push'); - return this.getPrInfoForPush(); - } - if (github.context.eventName === 'workflow_dispatch') { - // Minimal PR-like metadata for manual runs. - const branch = github.context.ref.replace('refs/heads/', ''); - return { - iterations: 1, - authorLogin: github.context.actor, - authorEmail: undefined, - head: branch, - base: branch, - title: `Manual run on ${branch}`, - url: `${github.context.serverUrl}/${github.context.repo.owner}/${github.context.repo.repo}/actions/runs/${github.context.runId}`, - }; - } - const pr = github.context.payload.pull_request; - if (!pr) { - throw new Error('Could not find pull request information'); - } - const head = pr["head"].ref; - const base = pr["base"].ref; - const title = pr["title"]; - const url = pr["html_url"]; - const numCommits = pr["commits"]; - const userLogin = pr["user"].login; - const { data: userData } = await this.octokit.rest.users.getByUsername({ username: userLogin }); - return { - iterations: numCommits, - authorLogin: userLogin, - authorEmail: userData.email, - head: head, - base: base, - title: title, - url: url, - prNumber: pr["number"], - }; - } - async getFilesForCommit(commitSha, authorId, committerId) { - const { data: commit } = await this.octokit.rest.repos.getCommit({ - owner: this.config.repository.owner, - repo: this.config.repository.repo, - ref: commitSha - }); - const commitMeta = { - sha: commit.sha, - files: [], - message: commit.commit.message || undefined, - authorEmail: commit.commit.author?.email || undefined, - authorLogin: commit.author?.login || undefined, - authorName: commit.commit.author?.name || undefined, - authorId, - committerEmail: commit.commit.committer?.email || undefined, - committerLogin: commit.committer?.login || undefined, - committerName: commit.commit.committer?.name || undefined, - committerId, - timestamp: commit.commit.author?.date || commit.commit.committer?.date || undefined, - }; - if (!commit.files || commit.files.length === 0) { - this.logger.warn(`No files found in commit: ${commit.sha}`); - return commitMeta; - } - this.logger.info(`Processing commit ${commit.sha} with ${commit.files.length} changed file(s).`); - const filteredCommitFiles = commit.files.filter((f) => this.shouldIncludePath(f.filename)); - this.logger.info(`Commit ${commit.sha}: ${filteredCommitFiles.length}/${commit.files.length} files match the configured patterns.`); - for (const file of filteredCommitFiles) { - if (isBinaryPath(file.filename)) { - this.logger.info(`Skipping binary file: ${file.filename}`); - continue; - } - let fileContent = file.patch || ""; - let fileSize = file.patch ? file.patch.length : 0; - // GitHub API omits .patch for large diffs — compute the diff ourselves - if (!file.patch && file.status !== 'removed') { - const diff = await this.computeDiff(file.filename, file.status || 'modified', commit.parents?.map((p) => p.sha) || [], commitSha); - if (diff !== null) { - fileContent = diff; - fileSize = diff.length; - } - } - const metadata = { - path: file.filename, - size: fileSize, - encoding: 'utf-8', - sha: file.sha, - content: fileContent, - authorLogin: commit.author?.login || commit.committer?.login || null, - authorEmail: commit.commit.author?.email || commit.commit.committer?.email || null, - authorId, - committerLogin: commit.committer?.login || commit.author?.login || null, - committerEmail: commit.commit.committer?.email || commit.commit.author?.email || null, - committerId, - numberOfDeletions: file.deletions, - numberOfAdditions: file.additions, - numberOfChanges: file.changes, - typeOfChange: file.status, - commitTimestamp: commit.commit.author?.date || commit.commit.committer?.date - }; - commitMeta.files.push(metadata); - } - return commitMeta; - } - /** - * Computes a unified diff for a file when the commit API omits the patch. - * Fetches the file content at both the parent and current commits via the - * GitHub Contents API, then produces a unified diff. - */ - async computeDiff(filePath, status, parentShas, commitSha) { - try { - this.logger.info(`Patch missing for ${filePath} — computing diff (status: ${status})`); - const currentContent = await this.fetchFileContent(filePath, commitSha); - if (currentContent === null) { - return null; - } - let parentContent = null; - if (status !== 'added' && parentShas.length > 0) { - parentContent = await this.fetchFileContent(filePath, parentShas[0]); - } - const oldLines = parentContent ? parentContent.split('\n') : []; - const newLines = currentContent.split('\n'); - return this.generateUnifiedDiff(filePath, oldLines, newLines); - } - catch (error) { - this.logger.warn(`Failed to compute diff for ${filePath}`, { error }); - return null; - } - } - /** - * Fetches file content from the GitHub API at a specific ref. - * Uses the Contents API for small files (≤1MB base64) and falls back to - * the raw download URL for larger files. - */ - async fetchFileContent(filePath, ref) { - try { - const { data } = await this.octokit.rest.repos.getContent({ - owner: this.config.repository.owner, - repo: this.config.repository.repo, - path: filePath, - ref, - }); - if (Array.isArray(data)) { - this.logger.warn(`${filePath} is a directory at ${ref}`); - return null; - } - // For files ≤1MB the API returns base64 content inline - if ('content' in data && data.content) { - return Buffer.from(data.content, 'base64').toString('utf-8'); - } - // For larger files, download via the raw URL - if ('download_url' in data && data.download_url) { - this.logger.info(`File ${filePath} too large for Contents API — downloading raw content`); - const response = await fetch(data.download_url); - if (!response.ok) { - this.logger.warn(`Raw download failed for ${filePath}: ${response.status}`); - return null; - } - return await response.text(); - } - this.logger.warn(`${filePath} has no content or download URL at ${ref}`); - return null; - } - catch (error) { - this.logger.warn(`Failed to fetch content for ${filePath} at ${ref}`, { error }); - return null; - } - } - /** - * Produces a unified diff string from two arrays of lines. - * Uses a simple LCS-based approach to generate hunks matching standard - * unified diff format (the same format GitHub returns in .patch). - */ - generateUnifiedDiff(filePath, oldLines, newLines) { - const hunks = this.computeHunks(oldLines, newLines); - if (hunks.length === 0) { - return ''; - } - const parts = []; - parts.push(`--- a/${filePath}`); - parts.push(`+++ b/${filePath}`); - for (const hunk of hunks) { - parts.push(hunk); - } - return parts.join('\n'); - } - /** - * Computes unified-diff hunks from old and new line arrays. - * Groups consecutive changes with up to 3 lines of context around each change. - */ - computeHunks(oldLines, newLines) { - const CONTEXT = 3; - // Build an edit script using a simple O(NM) LCS approach - const edits = this.buildEditScript(oldLines, newLines); - // Group edits into hunks with context lines - const hunks = []; - let i = 0; - while (i < edits.length) { - // Skip unchanged lines until we find a change - if (edits[i].type === 'equal') { - i++; - continue; - } - // Found a change — start a new hunk with leading context - const contextStart = Math.max(0, i - CONTEXT); - let hunkEnd = i; - // Extend hunk to include all nearby changes (within CONTEXT*2 lines of each other) - while (hunkEnd < edits.length) { - if (edits[hunkEnd].type !== 'equal') { - hunkEnd++; - continue; - } - // Look ahead to see if there's another change within context range - let nextChange = hunkEnd; - while (nextChange < edits.length && edits[nextChange].type === 'equal') { - nextChange++; - } - if (nextChange < edits.length && nextChange - hunkEnd <= CONTEXT * 2) { - hunkEnd = nextChange + 1; - } - else { - break; - } - } - // Add trailing context - const contextEnd = Math.min(edits.length, hunkEnd + CONTEXT); - // Calculate line numbers for the hunk header - let oldStart = 1, oldCount = 0, newStart = 1, newCount = 0; - // Count lines before this hunk - for (let j = 0; j < contextStart; j++) { - if (edits[j].type !== 'insert') - oldStart++; - if (edits[j].type !== 'delete') - newStart++; - } - const hunkLines = []; - for (let j = contextStart; j < contextEnd; j++) { - const edit = edits[j]; - if (edit.type === 'equal') { - hunkLines.push(` ${edit.line}`); - oldCount++; - newCount++; - } - else if (edit.type === 'delete') { - hunkLines.push(`-${edit.line}`); - oldCount++; - } - else { - hunkLines.push(`+${edit.line}`); - newCount++; - } - } - hunks.push(`@@ -${oldStart},${oldCount} +${newStart},${newCount} @@\n${hunkLines.join('\n')}`); - i = contextEnd; - } - return hunks; - } - /** - * Builds an edit script (sequence of equal/delete/insert operations) - * from two arrays of lines using LCS-based diff. - * For files exceeding a line count threshold, falls back to a simple - * delete-all/insert-all to avoid excessive memory usage. - */ - buildEditScript(oldLines, newLines) { - const MAX_LINES_FOR_LCS = 10_000; - const m = oldLines.length; - const n = newLines.length; - // For very large files, the O(m*n) DP table would use too much memory. - // Fall back to a simple delete-old/insert-new diff. - if (m > MAX_LINES_FOR_LCS || n > MAX_LINES_FOR_LCS) { - const edits = []; - for (const line of oldLines) { - edits.push({ type: 'delete', line }); - } - for (const line of newLines) { - edits.push({ type: 'insert', line }); - } - return edits; - } - // Build the full LCS DP table for backtracking - const dp = Array.from({ length: m + 1 }, () => new Array(n + 1).fill(0)); - for (let i = 1; i <= m; i++) { - for (let j = 1; j <= n; j++) { - if (oldLines[i - 1] === newLines[j - 1]) { - dp[i][j] = dp[i - 1][j - 1] + 1; - } - else { - dp[i][j] = Math.max(dp[i - 1][j], dp[i][j - 1]); - } - } - } - // Backtrack to produce the edit script - const edits = []; - let oi = m, ni = n; - while (oi > 0 || ni > 0) { - if (oi > 0 && ni > 0 && oldLines[oi - 1] === newLines[ni - 1]) { - edits.push({ type: 'equal', line: oldLines[oi - 1] }); - oi--; - ni--; - } - else if (ni > 0 && (oi === 0 || dp[oi][ni - 1] >= dp[oi - 1][ni])) { - edits.push({ type: 'insert', line: newLines[ni - 1] }); - ni--; - } - else { - edits.push({ type: 'delete', line: oldLines[oi - 1] }); - oi--; - } - } - edits.reverse(); - return edits; - } - isCommitEmpty(commitSha) { - if (commitSha && commitSha !== this.emptySha) { - return false; - } - return true; - } - async getCommits() { - const commits = github.context.payload["commits"]; - // Commits list should be populated for push events - if (commits && commits.length > 0) { - this.logger.info(`Found ${commits.length} commits in push event.`); - const commitInfos = commits.map((commit) => ({ - sha: commit.id, - email: commit.author?.email || commit.committer?.email || undefined, - committerEmail: commit.committer?.email || undefined, - message: commit.message || undefined, - })); - return commitInfos; - } - // For pull_request events, always list all PR commits - if (github.context.payload.pull_request) { - return this.getAllPRCommits(); - } - let before = github.context.payload["before"]; - let after = github.context.payload["after"]; - if (!this.isCommitEmpty(before) && !this.isCommitEmpty(after)) { - this.logger.info(`Comparing changes from commit ${before} to commit ${after}`); - const { data: comparison } = await this.octokit.rest.repos.compareCommits({ - owner: this.config.repository.owner, - repo: this.config.repository.repo, - base: before, - head: after - }); - const commitInfos = comparison.commits.map((commit) => ({ - sha: commit.sha, - email: commit.commit.author?.email || commit.commit.committer?.email || undefined, - committerEmail: commit.commit.committer?.email || undefined, - message: commit.commit.message || undefined, - })); - return commitInfos; - } - this.logger.warn('No valid comparison found, returning empty commit list'); - return []; - } - async getAllPRCommits() { - const pr = github.context.payload.pull_request; - if (!pr) { - this.logger.warn('No pull request context available for getAllPRCommits'); - return []; - } - this.logger.info(`Listing all commits in PR #${pr.number}`); - const { data: commits } = await this.octokit.rest.pulls.listCommits({ - owner: this.config.repository.owner, - repo: this.config.repository.repo, - pull_number: pr.number - }); - const commitInfos = commits.map((commit) => ({ - sha: commit.sha, - email: commit.commit.author?.email || commit.commit.committer?.email || undefined, - committerEmail: commit.commit.committer?.email || undefined, - message: commit.commit.message || undefined, - })); - this.logger.info(`Found ${commitInfos.length} total commit(s) in PR #${pr.number}`); - return commitInfos; - } - async getFilesGroupedByCommit(lastProcessedHeadSha, prefetchedCommits) { - const allCommits = prefetchedCommits ?? await this.getCommits(); - // Find commits to process by skipping everything up to and including lastProcessedHeadSha - let commitsToProcess = allCommits; - if (lastProcessedHeadSha) { - const idx = allCommits.findIndex(c => c.sha === lastProcessedHeadSha); - if (idx >= 0) { - commitsToProcess = allCommits.slice(idx + 1); - this.logger.info(`Found last processed head SHA ${lastProcessedHeadSha} at position ${idx}; skipping ${idx + 1} commit(s), ${commitsToProcess.length} remaining`); - } - else { - this.logger.info(`Last processed head SHA ${lastProcessedHeadSha} not found in commit list; processing all ${allCommits.length} commit(s)`); - } - } - if (commitsToProcess.length === 0) { - this.logger.info('No new commits to process'); - return []; - } - // Resolve all author and committer emails to user IDs up front - const allEmails = new Set(); - for (const commit of commitsToProcess) { - if (commit.email) { - allEmails.add(commit.email.toLowerCase()); - } - if (commit.committerEmail) { - allEmails.add(commit.committerEmail.toLowerCase()); - } - } - const userIdMap = await this.resolveUserIds(allEmails); - const result = []; - for (const commit of commitsToProcess) { - this.logger.info(`Processing commit: ${commit.sha}`); - let userId; - if (commit.email) { - userId = userIdMap[commit.email.toLowerCase()] || this.config.userId; - } - let committerId; - if (commit.committerEmail) { - committerId = userIdMap[commit.committerEmail.toLowerCase()] || this.config.userId; - } - const commitFiles = await this.getFilesForCommit(commit.sha, userId, committerId); - result.push(commitFiles); - } - return result; - } - async getLatestPushFiles(lastProcessedHeadSha) { - const commitGroups = await this.getFilesGroupedByCommit(lastProcessedHeadSha); - return commitGroups.flatMap(cg => cg.files); - } - async getPullRequestFiles() { - const pr = github.context.payload.pull_request; - if (!pr) { - return this.getFilesFromPatterns(); - } - const { data: files } = await this.octokit.rest.pulls.listFiles({ - owner: this.config.repository.owner, - repo: this.config.repository.repo, - pull_number: pr.number - }); - const { data: commit } = await this.octokit.rest.repos.getCommit({ - owner: this.config.repository.owner, - repo: this.config.repository.repo, - ref: pr['head'].sha - }); - this.logger.info(`Commit info: ${JSON.stringify(commit)}`); - // Filter by patterns - const matchedFiles = files - .map((f) => f.filename) - .filter((filename) => this.shouldIncludePath(filename)); - return matchedFiles; - } - async getFilesFromPatterns() { - const patterns = this.getGlobPatterns().join('\n'); - const globber = await glob.create(patterns); - const files = await globber.glob(); - return files; - } -} -//# sourceMappingURL=fileProcessor.js.map \ No newline at end of file diff --git a/dist/file/FileProcessor.js.map b/dist/file/FileProcessor.js.map deleted file mode 100644 index 6d62b2a..0000000 --- a/dist/file/FileProcessor.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"fileProcessor.js","sourceRoot":"","sources":["../../src/file/fileProcessor.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/dist/git/changedFiles.d.ts b/dist/git/changedFiles.d.ts deleted file mode 100644 index ba3c314..0000000 --- a/dist/git/changedFiles.d.ts +++ /dev/null @@ -1,4 +0,0 @@ -import { Logger } from '../utils/logger'; -import { ActionConfig } from '../utils/types'; -export declare function getChangedFiles(config: ActionConfig, logger: Logger): Promise; -//# sourceMappingURL=changedFiles.d.ts.map \ No newline at end of file diff --git a/dist/git/changedFiles.d.ts.map b/dist/git/changedFiles.d.ts.map deleted file mode 100644 index 427865e..0000000 --- a/dist/git/changedFiles.d.ts.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"changedFiles.d.ts","sourceRoot":"","sources":["../../src/git/changedFiles.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AACzC,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAE9C,wBAAsB,eAAe,CAAC,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAwB7F"} \ No newline at end of file diff --git a/dist/git/changedFiles.js b/dist/git/changedFiles.js deleted file mode 100644 index 71a0ff9..0000000 --- a/dist/git/changedFiles.js +++ /dev/null @@ -1,22 +0,0 @@ -import * as glob from '@actions/glob'; -export async function getChangedFiles(config, logger) { - const changedFilesEnv = process.env.CHANGED_FILES; - const patterns = [...config.includeGlobs, ...config.excludeGlobs.map(p => `!${p}`)]; - const globber = await glob.create(patterns.join('\n')); - const allFilesMatchingGlobs = await globber.glob(); // This now correctly takes 0 arguments - if (!changedFilesEnv) { - logger.warn('CHANGED_FILES environment variable not set. This is expected for push events to a default branch or manual runs. Scanning all files matching globs.'); - logger.info(`Found ${allFilesMatchingGlobs.length} files matching glob patterns in the repository.`); - return allFilesMatchingGlobs; - } - const changedFilesList = new Set(changedFilesEnv.split(' ').filter(Boolean)); - logger.debug(`Received ${changedFilesList.size} changed files from environment variable.`); - // Find the intersection between all files matching the glob and the files that actually changed. - const filteredFiles = allFilesMatchingGlobs.filter(file => changedFilesList.has(file)); - logger.info(`Found ${filteredFiles.length} changed files that match the include/exclude glob patterns.`); - if (config.debug) { - logger.debug(`Final list of files to process: \n${filteredFiles.join('\n')}`); - } - return filteredFiles; -} -//# sourceMappingURL=changedFiles.js.map \ No newline at end of file diff --git a/dist/git/changedFiles.js.map b/dist/git/changedFiles.js.map deleted file mode 100644 index bfb3757..0000000 --- a/dist/git/changedFiles.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"changedFiles.js","sourceRoot":"","sources":["../../src/git/changedFiles.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,IAAI,MAAM,eAAe,CAAC;AAItC,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,MAAoB,EAAE,MAAc;IACxE,MAAM,eAAe,GAAG,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC;IAClD,MAAM,QAAQ,GAAG,CAAC,GAAG,MAAM,CAAC,YAAY,EAAE,GAAG,MAAM,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;IACpF,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;IACvD,MAAM,qBAAqB,GAAG,MAAM,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC,uCAAuC;IAE3F,IAAI,CAAC,eAAe,EAAE,CAAC;QACrB,MAAM,CAAC,IAAI,CAAC,qJAAqJ,CAAC,CAAC;QACnK,MAAM,CAAC,IAAI,CAAC,SAAS,qBAAqB,CAAC,MAAM,kDAAkD,CAAC,CAAC;QACrG,OAAO,qBAAqB,CAAC;IAC/B,CAAC;IAED,MAAM,gBAAgB,GAAG,IAAI,GAAG,CAAC,eAAe,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC;IAC7E,MAAM,CAAC,KAAK,CAAC,YAAY,gBAAgB,CAAC,IAAI,2CAA2C,CAAC,CAAC;IAE3F,iGAAiG;IACjG,MAAM,aAAa,GAAG,qBAAqB,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,gBAAgB,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC;IAEvF,MAAM,CAAC,IAAI,CAAC,SAAS,aAAa,CAAC,MAAM,8DAA8D,CAAC,CAAC;IACzG,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;QACf,MAAM,CAAC,KAAK,CAAC,qCAAqC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAClF,CAAC;IAED,OAAO,aAAa,CAAC;AACvB,CAAC"} \ No newline at end of file diff --git a/dist/index.d.ts b/dist/index.d.ts deleted file mode 100644 index e26a57a..0000000 --- a/dist/index.d.ts +++ /dev/null @@ -1,2 +0,0 @@ -export {}; -//# sourceMappingURL=index.d.ts.map \ No newline at end of file diff --git a/dist/index.d.ts.map b/dist/index.d.ts.map deleted file mode 100644 index 535b86d..0000000 --- a/dist/index.d.ts.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":""} \ No newline at end of file diff --git a/dist/index.js b/dist/index.js index 6471523..f791977 100644 --- a/dist/index.js +++ b/dist/index.js @@ -62489,7 +62489,10 @@ class FileProcessor { throw error; } } - async getAllRepoFiles() { + async getAllRepoFiles(atRef) { + if (atRef) { + return this.getRepoFilesAtRef(atRef); + } const patterns = this.getGlobPatterns().join('\n'); const globber = await create(patterns); const files = await globber.glob(); @@ -62551,6 +62554,78 @@ class FileProcessor { } return result; } + /** + * List repository files at a specific git ref using `git ls-tree`. + * This avoids reading from the working tree which may include uncommitted + * or PR-only changes that shouldn't appear in the full scan. + */ + async getRepoFilesAtRef(ref) { + const workspace = process.env['GITHUB_WORKSPACE'] || process.cwd(); + let treeOutput; + try { + treeOutput = (0,external_child_process_namespaceObject.execSync)(`git ls-tree -r --long "${ref}"`, { cwd: workspace, encoding: 'utf-8', maxBuffer: 50 * 1024 * 1024 }).trim(); + } + catch (e) { + this.logger.warn(`Failed to list files at ref ${ref}`, { error: e }); + return []; + } + if (!treeOutput) { + return []; + } + const maxBytes = this.config.maxFileSize; + const result = []; + for (const line of treeOutput.split('\n')) { + // git ls-tree --long format: blob \t + const match = line.match(/^\d+ blob ([0-9a-f]+)\s+(\d+)\t(.+)$/); + if (!match) + continue; + const blobSha = match[1]; + const size = parseInt(match[2], 10); + const filePath = match[3]; + if (!this.shouldIncludePath(filePath)) + continue; + if (size === 0) + continue; + if (size > maxBytes) { + this.logger.warn(`Skipping oversized file during full scan: ${filePath} (${size} bytes > ${maxBytes} bytes)`); + continue; + } + if (isBinaryPath(filePath)) { + this.logger.info(`Skipping binary file: ${filePath}`); + continue; + } + try { + const content = (0,external_child_process_namespaceObject.execSync)(`git cat-file -p ${blobSha}`, { cwd: workspace, encoding: 'utf-8', maxBuffer: maxBytes }); + result.push({ + path: filePath, + size, + encoding: 'utf-8', + sha: blobSha, + content, + typeOfChange: 'unknown', + commitTimestamp: new Date().toISOString(), + }); + } + catch (e) { + this.logger.warn(`Failed reading file at ${ref}: ${filePath}`, { error: e }); + } + } + this.logger.info(`Full scan selected ${result.length} files after filtering (at ref ${ref}).`); + // --- Resolve author info for each file --- + const fileAuthorMap = this.getFileAuthorEmails(result); + const uniqueEmails = new Set(Object.values(fileAuthorMap).filter(Boolean)); + const userIdMap = await this.resolveUserIds(uniqueEmails); + for (const file of result) { + const authorEmail = fileAuthorMap[file.path]; + if (authorEmail) { + file.authorEmail = authorEmail; + file.authorId = userIdMap[authorEmail.toLowerCase()] || this.config.userId; + file.committerEmail = file.committerEmail || authorEmail; + file.committerId = file.committerId || file.authorId; + } + } + return result; + } /** * Fetch recent commits for the default branch (used during full scans). * When `upToSha` is provided, only commits up to and including that SHA are @@ -63898,7 +63973,7 @@ class FullScanService { this.logger.info(stateInfo ? 'First run detected; scanning full repository.' : 'State tracking disabled; scanning full repository.'); - const allFiles = await this.fileProcessor.getAllRepoFiles(); + const allFiles = await this.fileProcessor.getAllRepoFiles(currentEventSha); const fullScanFileCount = allFiles.length; // Mark payloads as full-scan so AiAgentInfo uses email + "fullscan" version this.payloadBuilder.isFullScan = true; diff --git a/dist/index.js.map b/dist/index.js.map deleted file mode 100644 index 2cb6f7f..0000000 --- a/dist/index.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,IAAI,MAAM,eAAe,CAAC;AACtC,OAAO,EAAE,mBAAmB,EAAE,MAAM,8BAA8B,CAAC;AACnE,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAC7D,OAAO,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC;AAExC,KAAK,UAAU,GAAG;IAChB,MAAM,MAAM,GAAG,IAAI,MAAM,CAAC,MAAM,CAAC,CAAC;IAElC,IAAI,CAAC;QACH,MAAM,CAAC,IAAI,CAAC,gCAAgC,CAAC,CAAC;QAE9C,wBAAwB;QACxB,MAAM,MAAM,GAAG,MAAM,cAAc,EAAE,CAAC;QACtC,MAAM,CAAC,KAAK,CAAC,yBAAyB,EAAE;YACtC,cAAc,EAAE,MAAM,CAAC,kBAAkB;YACzC,YAAY,EAAE,MAAM,CAAC,YAAY;SAClC,CAAC,CAAC;QAEH,gCAAgC;QAChC,MAAM,MAAM,GAAG,IAAI,mBAAmB,CAAC,MAAM,CAAC,CAAC;QAC/C,MAAM,MAAM,CAAC,OAAO,EAAE,CAAC;QAEvB,MAAM,CAAC,IAAI,CAAC,8CAA8C,CAAC,CAAC;IAC9D,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,YAAY,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,wBAAwB,CAAC;QACvF,MAAM,CAAC,KAAK,CAAC,eAAe,EAAE,EAAE,KAAK,EAAE,YAAY,EAAE,CAAC,CAAC;QACvD,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,CAAC;IAC/B,CAAC;AACH,CAAC;AAED,qBAAqB;AACrB,GAAG,EAAE,CAAC"} \ No newline at end of file diff --git a/dist/payload/PayloadBuilder.d.ts b/dist/payload/PayloadBuilder.d.ts deleted file mode 100644 index 4820d72..0000000 --- a/dist/payload/PayloadBuilder.d.ts +++ /dev/null @@ -1,59 +0,0 @@ -import { ActionConfig, FileMetadata, UploadSignalRequest, Activity, PrInfo, ProtectionScopesRequest, ProtectionScopesResponse, SplitPCRequests, ProcessContentBatchRequest, ProcessContentRequestItem, ProcessContentRequest, ContentToProcess, ScopeCheckResult, PolicyScopes, PolicyLocation, CommitFiles } from '../config/types'; -export declare class PayloadBuilder { - private readonly config; - private readonly logger; - private readonly maxPayloadSize; - private static readonly domain; - private static readonly scopeActivity; - private static readonly appName; - private static readonly appVersion; - private static readonly correlationIdSuffix; - /** When true, agent version is set to "fullscan" instead of the defaultUserId. */ - isFullScan: boolean; - /** PR number, set when processing a pull request event. */ - prNumber?: number; - constructor(config: ActionConfig); - private buildResourceIdentifier; - private buildFileResourceName; - buildProtectionScopesRequest(): ProtectionScopesRequest; - buildProcessAndUploadRequests(files: FileMetadata[], scopeResponse: ProtectionScopesResponse, prInfo: PrInfo): SplitPCRequests; - /** - * Check protection scopes to determine if content should be processed inline, offline, or sent as content activities. - * Mirrors the Python agent-framework `_check_applicable_scopes` logic: - * - Bitwise activity matching - * - Location matching by OData type suffix + exact value - * - Sticky evaluateInline upgrade across scopes - * - Accumulates policyActions from all matching scopes - */ - checkApplicableScopes(scopes: PolicyScopes[], requestActivity: Activity, requestLocation: PolicyLocation): ScopeCheckResult; - /** - * Build a per-user ProcessContentRequest for inline PC calls. - */ - buildPerUserProcessContentRequest(file: FileMetadata, conversationId: string, messageId: number): ProcessContentRequest[]; - private matchActivity; - buildUploadSignalRequest(files: FileMetadata[], prInfo: PrInfo): UploadSignalRequest[]; - buildProcessContentBatchRequest(files: FileMetadata[]): ProcessContentBatchRequest[]; - private createContentToProcess; - /** - * Build the text content representing a git commit's metadata. - */ - private buildCommitContentText; - /** - * Build a ContentToProcess for a git commit (commit-level metadata request). - */ - buildCommitContentToProcess(commitGroup: CommitFiles, conversationId: string, sequenceNumber: number): ContentToProcess; - /** - * Build a per-user ProcessContentRequest for a git commit (inline PC). - */ - buildCommitProcessContentRequest(commitGroup: CommitFiles, conversationId: string, sequenceNumber: number): ProcessContentRequest; - /** - * Build an UploadSignalRequest for a git commit (contentActivities fallback). - */ - buildCommitUploadSignalRequest(commitGroup: CommitFiles, prInfo: PrInfo): UploadSignalRequest; - /** - * Build a ProcessContentBatchRequest item for a git commit (PCA batch). - */ - buildCommitProcessContentBatchItem(commitGroup: CommitFiles, conversationId: string, sequenceNumber: number): ProcessContentRequestItem; - private mapChangeTypeToAccessType; -} -//# sourceMappingURL=payloadBuilder.d.ts.map \ No newline at end of file diff --git a/dist/payload/PayloadBuilder.d.ts.map b/dist/payload/PayloadBuilder.d.ts.map deleted file mode 100644 index 2f4e092..0000000 --- a/dist/payload/PayloadBuilder.d.ts.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"payloadBuilder.d.ts","sourceRoot":"","sources":["../../src/payload/payloadBuilder.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,mBAAmB,EAAE,QAAQ,EAAe,MAAM,EAAE,uBAAuB,EAAE,wBAAwB,EAAE,eAAe,EAA6B,0BAA0B,EAAE,yBAAyB,EAAE,qBAAqB,EAAE,gBAAgB,EAAE,gBAAgB,EAAiB,YAAY,EAAE,cAAc,EAAiB,WAAW,EAA4C,MAAM,iBAAiB,CAAC;AAGrb,qBAAa,cAAc;IAeb,OAAO,CAAC,QAAQ,CAAC,MAAM;IAdnC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAChC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAmB;IAClD,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAwB;IACtD,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,aAAa,CAA2C;IAChF,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAY;IAC3C,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAW;IAC7C,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,mBAAmB,CAAS;IAEpD,kFAAkF;IAC3E,UAAU,UAAS;IAE1B,2DAA2D;IACpD,QAAQ,CAAC,EAAE,MAAM,CAAC;gBAEI,MAAM,EAAE,YAAY;IAIjD,OAAO,CAAC,uBAAuB;IAM/B,OAAO,CAAC,qBAAqB;IAK7B,4BAA4B,IAAI,uBAAuB;IAkBvD,6BAA6B,CAAC,KAAK,EAAE,YAAY,EAAE,EAAE,aAAa,EAAE,wBAAwB,EAAE,MAAM,EAAE,MAAM,GAAG,eAAe;IAiG9H;;;;;;;OAOG;IACH,qBAAqB,CACnB,MAAM,EAAE,YAAY,EAAE,EACtB,eAAe,EAAE,QAAQ,EACzB,eAAe,EAAE,cAAc,GAC9B,gBAAgB;IAoDnB;;OAEG;IACH,iCAAiC,CAAC,IAAI,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,qBAAqB,EAAE;IA0BzH,OAAO,CAAC,aAAa;IAerB,wBAAwB,CAAC,KAAK,EAAE,YAAY,EAAE,EAAE,MAAM,EAAE,MAAM,GAAG,mBAAmB,EAAE;IAiDtF,+BAA+B,CAAC,KAAK,EAAE,YAAY,EAAE,GAAG,0BAA0B,EAAE;IAiEpF,OAAO,CAAC,sBAAsB;IAuE9B;;OAEG;IACH,OAAO,CAAC,sBAAsB;IA+B9B;;OAEG;IACH,2BAA2B,CAAC,WAAW,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,GAAG,gBAAgB;IA8EvH;;OAEG;IACH,gCAAgC,CAAC,WAAW,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,GAAG,qBAAqB;IAKjI;;OAEG;IACH,8BAA8B,CAAC,WAAW,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,GAAG,mBAAmB;IAe7F;;OAEG;IACH,kCAAkC,CAAC,WAAW,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,GAAG,yBAAyB;IAUvI,OAAO,CAAC,yBAAyB;CAgBlC"} \ No newline at end of file diff --git a/dist/payload/PayloadBuilder.js b/dist/payload/PayloadBuilder.js deleted file mode 100644 index b480c8c..0000000 --- a/dist/payload/PayloadBuilder.js +++ /dev/null @@ -1,533 +0,0 @@ -import { Activity, ExecutionMode } from '../config/types'; -import { Logger } from '../utils/logger'; -export class PayloadBuilder { - config; - logger; - maxPayloadSize = 1024 * 1024 * 3; // 3MB - static domain = "github.com"; - static scopeActivity = "uploadText"; - static appName = "GitHub"; - static appVersion = "0.0.1"; - static correlationIdSuffix = "@GA"; - /** When true, agent version is set to "fullscan" instead of the defaultUserId. */ - isFullScan = false; - /** PR number, set when processing a pull request event. */ - prNumber; - constructor(config) { - this.config = config; - this.logger = new Logger('PayloadBuilder'); - } - buildResourceIdentifier(commitOrSha) { - return this.prNumber != null - ? `PR: ${this.prNumber} Commit: ${commitOrSha}` - : `Commit: ${commitOrSha}`; - } - buildFileResourceName(filePath) { - const fileName = filePath.split('/').pop() || filePath; - return `Repo: ${this.config.repository.repo} File: ${fileName} Path: ${filePath}`; - } - buildProtectionScopesRequest() { - const request = { - activities: PayloadBuilder.scopeActivity, - locations: [ - { - "@odata.type": "microsoft.graph.policyLocationDomain", - value: `https://${PayloadBuilder.domain}` - } - ], - integratedAppMetadata: { - name: PayloadBuilder.appName, - version: PayloadBuilder.appVersion, - }, - }; - return request; - } - buildProcessAndUploadRequests(files, scopeResponse, prInfo) { - const filesToProcess = []; - const filesToUpload = []; - for (const file of files) { - let shouldProcessFile = false; - for (const scope of scopeResponse.value) { - if (!shouldProcessFile && scope.activities.toLowerCase().includes("uploadtext")) { - let locationMatch = false; - let isIncluded = false; - let isExcluded = false; - const clientId = this.config.clientId.toLowerCase(); - // Check locations for domain or application match - for (const location of scope.locations) { - const locationValue = location.value.toLowerCase(); - if (locationValue === "all") { - locationMatch = true; - break; - } - else if (location["@odata.type"].endsWith("policyLocationDomain") && (locationValue.includes("github.com"))) { - locationMatch = true; - break; - } - else if (location["@odata.type"].endsWith("policyLocationApplication") && locationValue === clientId) { - locationMatch = true; - break; - } - } - const authorId = (file.authorId || this.config.userId).toLowerCase(); - const tenantId = this.config.tenantId.toLowerCase(); - for (const inclusion of scope.policyScope.inclusions) { - const inclusionIdentity = inclusion.identity.toLowerCase(); - if (inclusionIdentity === "all") { - isIncluded = true; - break; - } - else if (inclusion["@odata.type"].endsWith("tenantScope") && inclusionIdentity === tenantId) { - isIncluded = true; - break; - } - else if (inclusion["@odata.type"].endsWith("userScope") && inclusionIdentity === authorId) { - isIncluded = true; - break; - } - } - for (const exclusion of scope.policyScope.exclusions) { - const exclusionIdentity = exclusion.identity.toLowerCase(); - if (exclusionIdentity === "all") { - isExcluded = true; - break; - } - if (exclusion["@odata.type"].endsWith("tenantScope") && exclusionIdentity === tenantId) { - isExcluded = false; - break; - } - else if (exclusion["@odata.type"].endsWith("userScope") && exclusionIdentity === authorId) { - isExcluded = false; - break; - } - } - if (locationMatch && isIncluded && !isExcluded) { - shouldProcessFile = true; - this.logger.info(`File ${file.path} is in scope.`); - break; - } - } - } - if (shouldProcessFile) { - filesToProcess.push(file); - } - else { - filesToUpload.push(file); - } - } - this.logger.info(`Files to process: ${filesToProcess.length}, Files to upload: ${filesToUpload.length}`); - const uploadSignalRequests = filesToUpload.length > 0 ? this.buildUploadSignalRequest(filesToUpload, prInfo) : []; - const pcbRequests = filesToProcess.length > 0 ? this.buildProcessContentBatchRequest(filesToProcess) : []; - return { - uploadSignalRequests: uploadSignalRequests, - processContentRequests: pcbRequests - }; - } - /** - * Check protection scopes to determine if content should be processed inline, offline, or sent as content activities. - * Mirrors the Python agent-framework `_check_applicable_scopes` logic: - * - Bitwise activity matching - * - Location matching by OData type suffix + exact value - * - Sticky evaluateInline upgrade across scopes - * - Accumulates policyActions from all matching scopes - */ - checkApplicableScopes(scopes, requestActivity, requestLocation) { - let shouldProcess = false; - const dlpActions = []; - let executionMode = ExecutionMode.evaluateOffline; - for (const scope of scopes) { - // Activity match: check if the scope's activity flag covers our request activity - const activityMatch = this.matchActivity(scope.activities, requestActivity); - const clientId = this.config.clientId.toLowerCase(); - const requestLocationType = requestLocation["@odata.type"].split(".").pop()?.toLowerCase() || ""; - // Location match: check OData type suffix + exact value - let locationMatch = false; - if (requestLocation) { - for (const loc of scope.locations || []) { - if (loc["@odata.type"] && requestLocationType) { - const locDataType = loc["@odata.type"].toLowerCase(); - // Match if both properties of scope location match request location - if (locDataType.endsWith(requestLocationType) && loc.value.toLowerCase() === requestLocation.value.toLowerCase()) { - locationMatch = true; - break; - } - // Or match if the location is a policyLocationApplication with a clientId match - else if (locDataType.endsWith("policylocationapplication") && loc.value.toLowerCase() === clientId) { - locationMatch = true; - break; - } - } - } - } - if (activityMatch && locationMatch) { - shouldProcess = true; - // Sticky upgrade: if any matching scope says evaluateInline, we use inline - if (scope.executionMode === ExecutionMode.evaluateInline) { - executionMode = ExecutionMode.evaluateInline; - } - if (scope.policyActions) { - dlpActions.push(...scope.policyActions); - } - } - } - this.logger.info(`Scope check result: shouldProcess=${shouldProcess}, executionMode=${executionMode}, matchingActions=${dlpActions.length}`); - return { shouldProcess, dlpActions, executionMode }; - } - /** - * Build a per-user ProcessContentRequest for inline PC calls. - */ - buildPerUserProcessContentRequest(file, conversationId, messageId) { - const content = file.content || `File: ${file.path} (${file.size} bytes)`; - const singleCTP = this.createContentToProcess(file, conversationId, messageId); - const singleRequest = { contentToProcess: singleCTP }; - const requestSize = JSON.stringify(singleRequest).length; - if (requestSize <= this.maxPayloadSize) { - return [singleRequest]; - } - // Split content into chunks that fit within maxPayloadSize - const overhead = requestSize - content.length; - const maxContentPerChunk = this.maxPayloadSize - overhead - 100; // safety margin - const requests = []; - for (let i = 0; i < content.length; i += maxContentPerChunk) { - const chunk = content.substring(i, Math.min(i + maxContentPerChunk, content.length)); - const isLastChunk = i + maxContentPerChunk >= content.length; - const chunkCTP = this.createContentToProcess(file, conversationId, messageId + requests.length, !isLastChunk, chunk); - requests.push({ contentToProcess: chunkCTP }); - } - this.logger.info(`Split file ${file.path} into ${requests.length} processContent request(s)`); - return requests; - } - matchActivity(scopeActivities, requestActivity) { - // Map Activity enum to the string used in protection scope responses - const activityMap = { - [Activity.uploadText]: "uploadtext", - [Activity.uploadFile]: "uploadfile", - [Activity.downloadText]: "downloadtext", - [Activity.downloadFile]: "downloadfile", - }; - const expected = activityMap[requestActivity]; - if (!expected) - return false; - const scopeStr = (typeof scopeActivities === 'string' ? scopeActivities : '').toLowerCase(); - return scopeStr.includes(expected); - } - buildUploadSignalRequest(files, prInfo) { - const requests = []; - const conversationId = crypto.randomUUID() + PayloadBuilder.correlationIdSuffix; - let seqNum = 0; - for (const file of files) { - this.logger.info(`Building upload signal request for file: ${file.path}`); - const content = file.content || `File: ${file.path} (${file.size} bytes)`; - const userId = file.authorId || this.config.userId; - const userEmail = file.authorEmail || prInfo.authorEmail; - const singleCTP = this.createContentToProcess(file, conversationId, seqNum); - const singleSize = JSON.stringify(singleCTP).length + 200; // account for wrapper fields - if (singleSize <= this.maxPayloadSize) { - requests.push({ - id: crypto.randomUUID() + PayloadBuilder.correlationIdSuffix, - userId, - userEmail, - scopeIdentifier: "", - contentMetadata: singleCTP, - }); - seqNum++; - } - else { - // Split content into chunks - const overhead = singleSize - content.length; - const maxContentPerChunk = this.maxPayloadSize - overhead - 100; - for (let i = 0; i < content.length; i += maxContentPerChunk) { - const chunk = content.substring(i, Math.min(i + maxContentPerChunk, content.length)); - const isLastChunk = i + maxContentPerChunk >= content.length; - const chunkCTP = this.createContentToProcess(file, conversationId, seqNum, !isLastChunk, chunk); - requests.push({ - id: crypto.randomUUID() + PayloadBuilder.correlationIdSuffix, - userId, - userEmail, - scopeIdentifier: "", - contentMetadata: chunkCTP, - }); - seqNum++; - } - this.logger.info(`Split file ${file.path} into multiple upload signal request(s)`); - } - } - return requests; - } - buildProcessContentBatchRequest(files) { - const allItems = []; - const conversationId = crypto.randomUUID() + PayloadBuilder.correlationIdSuffix; - let seqNum = 0; - for (const file of files) { - const content = file.content || `File: ${file.path} (${file.size} bytes)`; - const userId = file.authorId || this.config.userId; - const userEmail = file.authorEmail || undefined; - const singleCTP = this.createContentToProcess(file, conversationId, seqNum); - const singleItem = { - contentToProcess: singleCTP, - userId, - userEmail, - requestId: crypto.randomUUID(), - }; - const itemSize = JSON.stringify(singleItem).length; - if (itemSize <= this.maxPayloadSize) { - allItems.push(singleItem); - seqNum++; - } - else { - // Single file exceeds limit — split its content into chunks - const overhead = itemSize - content.length; - const maxContentPerChunk = this.maxPayloadSize - overhead - 100; - for (let i = 0; i < content.length; i += maxContentPerChunk) { - const chunk = content.substring(i, Math.min(i + maxContentPerChunk, content.length)); - const isLastChunk = i + maxContentPerChunk >= content.length; - const chunkCTP = this.createContentToProcess(file, conversationId, seqNum, !isLastChunk, chunk); - allItems.push({ - contentToProcess: chunkCTP, - userId, - userEmail, - requestId: crypto.randomUUID(), - }); - seqNum++; - } - } - } - // Split items into batches that fit within maxPayloadSize - const batches = []; - let currentItems = []; - let currentSize = 0; - const batchOverhead = 50; - for (const item of allItems) { - const itemSize = JSON.stringify(item).length; - if (currentItems.length > 0 && currentSize + itemSize + batchOverhead > this.maxPayloadSize) { - batches.push({ processContentRequests: currentItems }); - currentItems = []; - currentSize = 0; - } - currentItems.push(item); - currentSize += itemSize; - } - if (currentItems.length > 0) { - batches.push({ processContentRequests: currentItems }); - } - return batches; - } - createContentToProcess(file, conversationId, messageId, isTruncated = false, contentOverride) { - let userId = file.authorId; - const usingDefaultUser = !userId || userId === this.config.userId; - if (!userId) { - this.logger.warn(`No user ID found for file: ${file.path} with author ${file.authorEmail}}, using default user ID`); - userId = this.config.userId; - } - const now = new Date().toISOString(); - let fileContent = { - "@odata.type": "microsoft.graph.textContent", - data: contentOverride ?? file.content ?? `File: ${file.path} (${file.size} bytes)` - }; - const agents = []; - if (file.committerId || file.committerEmail) { - agents.push({ - identifier: file.committerId || file.committerEmail || '', - name: file.committerEmail || undefined, - version: this.isFullScan ? 'fullscan' : (usingDefaultUser ? this.config.userId : undefined), - }); - } - const repoBaseUrl = `https://${PayloadBuilder.domain}/${this.config.repository.owner}/${this.config.repository.repo}`; - const fileUrl = `${repoBaseUrl}/blob/${this.config.repository.branch}/${file.path}`; - const entry = { - "@odata.type": "microsoft.graph.processConversationMetadata", - identifier: file.path, - name: file.path, - correlationId: conversationId, - sequenceNumber: messageId, - length: file.size, - isTruncated, - createdDateTime: now, - modifiedDateTime: now, - content: fileContent, - accessedResources_v2: [{ - identifier: this.buildResourceIdentifier(file.sha || file.path), - name: this.buildFileResourceName(file.path), - url: fileUrl, - accessType: this.mapChangeTypeToAccessType(file.typeOfChange), - status: 'success', - isCrossPromptInjectionDetected: false, - }], - ...(agents.length > 0 ? { agents } : {}), - }; - return { - contentEntries: [entry], - activityMetadata: { - activity: Activity.uploadText, - }, - deviceMetadata: {}, - integratedAppMetadata: { - name: PayloadBuilder.appName, - version: PayloadBuilder.appVersion, - }, - protectedAppMetadata: { - name: PayloadBuilder.appName, - version: PayloadBuilder.appVersion, - applicationLocation: { - "@odata.type": "microsoft.graph.policyLocationDomain", - value: `https://${PayloadBuilder.domain}` - } - } - }; - } - /** - * Build the text content representing a git commit's metadata. - */ - buildCommitContentText(commitGroup) { - const lines = [ - `Commit: ${commitGroup.sha}`, - ]; - if (commitGroup.message) { - lines.push(`Message: ${commitGroup.message}`); - } - if (commitGroup.authorName || commitGroup.authorEmail) { - lines.push(`Author: ${commitGroup.authorName || ''} <${commitGroup.authorEmail || ''}>`); - } - if (commitGroup.committerName || commitGroup.committerEmail) { - lines.push(`Committer: ${commitGroup.committerName || ''} <${commitGroup.committerEmail || ''}>`); - } - if (commitGroup.timestamp) { - lines.push(`Date: ${commitGroup.timestamp}`); - } - if (commitGroup.files.length > 0) { - lines.push('', 'Changed files:'); - for (const file of commitGroup.files) { - const changeType = file.typeOfChange || 'modified'; - const additions = file.numberOfAdditions ?? 0; - const deletions = file.numberOfDeletions ?? 0; - lines.push(` ${changeType}: ${file.path} (+${additions} -${deletions})`); - } - } - return lines.join('\n'); - } - /** - * Build a ContentToProcess for a git commit (commit-level metadata request). - */ - buildCommitContentToProcess(commitGroup, conversationId, sequenceNumber) { - const now = new Date().toISOString(); - const commitContent = this.buildCommitContentText(commitGroup); - const commitIdentifier = `commit:${commitGroup.sha}`; - const usingDefaultUser = !commitGroup.authorId || commitGroup.authorId === this.config.userId; - const fileContent = { - "@odata.type": "microsoft.graph.textContent", - data: commitContent, - }; - const agents = []; - if (commitGroup.committerId || commitGroup.committerEmail) { - agents.push({ - identifier: commitGroup.committerId || commitGroup.committerEmail || '', - name: commitGroup.committerEmail || undefined, - version: this.isFullScan ? 'fullscan' : (usingDefaultUser ? this.config.userId : undefined), - }); - } - const repoBaseUrl = `https://${PayloadBuilder.domain}/${this.config.repository.owner}/${this.config.repository.repo}`; - const commitUrl = `${repoBaseUrl}/commit/${commitGroup.sha}`; - const accessedResources = [{ - identifier: this.buildResourceIdentifier(commitGroup.sha), - name: `Repo: ${this.config.repository.repo} Commit: ${commitGroup.sha}`, - url: commitUrl, - accessType: 'write', - status: 'success', - isCrossPromptInjectionDetected: false, - }]; - for (const file of commitGroup.files) { - accessedResources.push({ - identifier: this.buildResourceIdentifier(file.sha || file.path), - name: this.buildFileResourceName(file.path), - url: `${repoBaseUrl}/blob/${this.config.repository.branch}/${file.path}`, - accessType: this.mapChangeTypeToAccessType(file.typeOfChange), - status: 'success', - isCrossPromptInjectionDetected: false, - }); - } - const entry = { - "@odata.type": "microsoft.graph.processConversationMetadata", - identifier: commitIdentifier, - name: commitIdentifier, - correlationId: conversationId, - sequenceNumber, - length: commitContent.length, - isTruncated: false, - createdDateTime: commitGroup.timestamp || now, - modifiedDateTime: commitGroup.timestamp || now, - content: fileContent, - accessedResources_v2: accessedResources, - ...(agents.length > 0 ? { agents } : {}), - }; - return { - contentEntries: [entry], - activityMetadata: { - activity: Activity.uploadText, - }, - deviceMetadata: {}, - integratedAppMetadata: { - name: PayloadBuilder.appName, - version: PayloadBuilder.appVersion, - }, - protectedAppMetadata: { - name: PayloadBuilder.appName, - version: PayloadBuilder.appVersion, - applicationLocation: { - "@odata.type": "microsoft.graph.policyLocationDomain", - value: `https://${PayloadBuilder.domain}`, - }, - }, - }; - } - /** - * Build a per-user ProcessContentRequest for a git commit (inline PC). - */ - buildCommitProcessContentRequest(commitGroup, conversationId, sequenceNumber) { - const ctp = this.buildCommitContentToProcess(commitGroup, conversationId, sequenceNumber); - return { contentToProcess: ctp }; - } - /** - * Build an UploadSignalRequest for a git commit (contentActivities fallback). - */ - buildCommitUploadSignalRequest(commitGroup, prInfo) { - const conversationId = crypto.randomUUID() + PayloadBuilder.correlationIdSuffix; - const ctp = this.buildCommitContentToProcess(commitGroup, conversationId, 0); - const userId = commitGroup.authorId || this.config.userId; - const userEmail = commitGroup.authorEmail || prInfo.authorEmail; - return { - id: crypto.randomUUID() + PayloadBuilder.correlationIdSuffix, - userId, - userEmail, - scopeIdentifier: "", - contentMetadata: ctp, - }; - } - /** - * Build a ProcessContentBatchRequest item for a git commit (PCA batch). - */ - buildCommitProcessContentBatchItem(commitGroup, conversationId, sequenceNumber) { - const ctp = this.buildCommitContentToProcess(commitGroup, conversationId, sequenceNumber); - return { - contentToProcess: ctp, - userId: commitGroup.authorId || this.config.userId, - userEmail: commitGroup.authorEmail || undefined, - requestId: crypto.randomUUID(), - }; - } - mapChangeTypeToAccessType(typeOfChange) { - switch (typeOfChange) { - case 'added': - case 'copied': - return 'create'; - case 'removed': - return 'none'; - case 'modified': - case 'renamed': - case 'changed': - return 'write'; - default: - return 'write'; - } - } -} -//# sourceMappingURL=payloadBuilder.js.map \ No newline at end of file diff --git a/dist/payload/PayloadBuilder.js.map b/dist/payload/PayloadBuilder.js.map deleted file mode 100644 index fccb8e1..0000000 --- a/dist/payload/PayloadBuilder.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"payloadBuilder.js","sourceRoot":"","sources":["../../src/payload/payloadBuilder.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/dist/purview/client.d.ts b/dist/purview/client.d.ts deleted file mode 100644 index cfcfefd..0000000 --- a/dist/purview/client.d.ts +++ /dev/null @@ -1,7 +0,0 @@ -import { Logger } from '../utils/logger'; -import { ActionConfig, PurviewPayload } from '../utils/types'; -export declare function postToPurview(payload: PurviewPayload, token: string, config: ActionConfig, logger: Logger, maxRetries?: number): Promise<{ - success: boolean; - groupId: string | null; -}>; -//# sourceMappingURL=client.d.ts.map \ No newline at end of file diff --git a/dist/purview/client.d.ts.map b/dist/purview/client.d.ts.map deleted file mode 100644 index 4bbf2e1..0000000 --- a/dist/purview/client.d.ts.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/purview/client.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AACzC,OAAO,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAE9D,wBAAsB,aAAa,CACjC,OAAO,EAAE,cAAc,EACvB,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,YAAY,EACpB,MAAM,EAAE,MAAM,EACd,UAAU,GAAE,MAAU,GACrB,OAAO,CAAC;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,CAAC,CA0EvD"} \ No newline at end of file diff --git a/dist/purview/client.js b/dist/purview/client.js deleted file mode 100644 index 5ed3cab..0000000 --- a/dist/purview/client.js +++ /dev/null @@ -1,73 +0,0 @@ -import axios from 'axios'; -export async function postToPurview(payload, token, config, logger, maxRetries = 3) { - const groupId = payload.messageGroups?.[0]?.messageGroupId ?? null; - logger.startGroup(`Submitting Batch to Purview API (Group ID: ${groupId})`); - logger.debug(`Endpoint: ${config.endpoint}`); - logger.debug(`Payload contains ${payload.messageGroups[0]?.messages?.length ?? 0} messages.`); - if (config.debug) { - // Stringify with a replacer to handle potential circular references safely - const cache = new Set(); - const payloadString = JSON.stringify(payload, (_key, value) => { - if (typeof value === 'object' && value !== null) { - if (cache.has(value)) - return '[Circular]'; - cache.add(value); - } - return value; - }, 2); - logger.debug(`Payload content: ${payloadString}`); - } - let attempt = 0; - while (attempt < maxRetries) { - attempt++; - logger.info(`Attempting to POST to Purview API (Attempt ${attempt}/${maxRetries})...`); - try { - const startTime = Date.now(); - const response = await axios.post(config.endpoint, payload, { - headers: { - 'Authorization': `Bearer ${token}`, - 'Content-Type': 'application/json; charset=utf-8', - }, - timeout: 60000, // 60 second timeout - }); - const duration = Date.now() - startTime; - logger.info(`API call successful. Status: ${response.status} ${response.statusText}. Duration: ${duration}ms`); - logger.endGroup(); - return { success: true, groupId }; - } - catch (error) { - const axiosError = error; - if (axiosError.response) { - logger.error(`HTTP Error: ${axiosError.response.status} ${axiosError.response.statusText}`); - logger.error(`Response Body: ${JSON.stringify(axiosError.response.data)}`); - // Do not retry on 4xx client errors (except 429 which we might later) - if (axiosError.response.status >= 400 && axiosError.response.status < 500) { - if (config.failOnNon2xx) { - throw new Error(`Purview API returned a client error: ${axiosError.response.status}`); - } - logger.endGroup(); - return { success: false, groupId }; - } - } - else if (axiosError.request) { - logger.error('Network Error: No response received from Purview endpoint. Check connectivity and endpoint URL.'); - } - else { - logger.error(`Request Setup Error: ${axiosError.message}`); - } - if (attempt >= maxRetries) { - break; // Exit loop if max retries reached - } - const delay = Math.pow(2, attempt) * 1000; // Exponential backoff - logger.info(`Retrying in ${delay / 1000} seconds...`); - await new Promise(resolve => setTimeout(resolve, delay)); - } - } - logger.error('Max retries reached. Aborting submission.'); - logger.endGroup(); - if (config.failOnNon2xx) { - throw new Error('Failed to send data to Purview after multiple retries.'); - } - return { success: false, groupId }; -} -//# sourceMappingURL=client.js.map \ No newline at end of file diff --git a/dist/purview/client.js.map b/dist/purview/client.js.map deleted file mode 100644 index 595687c..0000000 --- a/dist/purview/client.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/purview/client.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/dist/purview/payloadBuilder.d.ts b/dist/purview/payloadBuilder.d.ts deleted file mode 100644 index 8a62d36..0000000 --- a/dist/purview/payloadBuilder.d.ts +++ /dev/null @@ -1,3 +0,0 @@ -import { ActionConfig, FilePayload, PurviewPayload } from '../utils/types'; -export declare function buildPurviewPayload(filePayloads: FilePayload[], config: ActionConfig): PurviewPayload; -//# sourceMappingURL=payloadBuilder.d.ts.map \ No newline at end of file diff --git a/dist/purview/payloadBuilder.d.ts.map b/dist/purview/payloadBuilder.d.ts.map deleted file mode 100644 index 01817b8..0000000 --- a/dist/purview/payloadBuilder.d.ts.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"payloadBuilder.d.ts","sourceRoot":"","sources":["../../src/purview/payloadBuilder.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,YAAY,EAAE,WAAW,EAA2E,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAmBpJ,wBAAgB,mBAAmB,CAAC,YAAY,EAAE,WAAW,EAAE,EAAE,MAAM,EAAE,YAAY,GAAG,cAAc,CAoDrG"} \ No newline at end of file diff --git a/dist/purview/payloadBuilder.js b/dist/purview/payloadBuilder.js deleted file mode 100644 index 6faf7f1..0000000 --- a/dist/purview/payloadBuilder.js +++ /dev/null @@ -1,67 +0,0 @@ -import * as github from '@actions/github'; -import { randomUUID } from 'crypto'; -function createParticipant(config) { - return { - tenantId: config.tenantId, - displayName: config.userPrincipalName.split('@')[0] || '', // Best effort display name from UPN - recipientType: 0, // 0 for User - userPrincipalName: config.userPrincipalName, - }; -} -function createFileContent(payload) { - return { - Id: randomUUID(), - ContentType: 0, // 0 for Raw text/base64 - Content: payload.content, - }; -} -export function buildPurviewPayload(filePayloads, config) { - const now = new Date().toISOString(); - const participant = createParticipant(config); - const { GITHUB_SERVER_URL, GITHUB_REPOSITORY, GITHUB_SHA, GITHUB_REF_NAME } = process.env; - const messages = filePayloads.map((fp, index) => { - return { - timestamp: now, - lastModifiedDate: now, - messageLocale: 'en-US', - messageClientIp: '', - messageId: index, // Simple index within the batch - messageType: 1, // 1 for Standard - messageFrom: participant, - content: [createFileContent(fp)], - reaction: '', - accessedResources: [], - modelInfo: { modelProviderName: '', modelName: '', modelVersion: '' }, - deviceInfo: { - deviceManagementType: 0, - deviceType: 'PC', - operatingSystemPlatform: 'Service', - operatingSystemVersion: '', - }, - }; - }); - const messageGroup = { - messageGroupId: `${github.context.runId}-${github.context.runAttempt}`, - messageGroupSubject: `Commit ${GITHUB_SHA?.slice(0, 7)} to ${GITHUB_REPOSITORY} on branch ${GITHUB_REF_NAME}`, - messageGroupTenantId: config.tenantId, - messages: messages, - appHostInfo: { - AppHostName: config.appHostName, - ChildAppHostName: '', - AppHostFQDN: `${GITHUB_SERVER_URL}/${GITHUB_REPOSITORY}`, - AppHostVersion: '1.0.0', // Version of this action - ApplicationHostCategories: config.applicationHostCategories, - }, - messageGroupParticipants: [participant], - }; - const payload = { - clientInfo: { - clientName: 'purview-github-action', - version: '1.0', - ClientIp: '', // Left blank for service-to-service - }, - messageGroups: [messageGroup], - }; - return payload; -} -//# sourceMappingURL=payloadBuilder.js.map \ No newline at end of file diff --git a/dist/purview/payloadBuilder.js.map b/dist/purview/payloadBuilder.js.map deleted file mode 100644 index 43d9043..0000000 --- a/dist/purview/payloadBuilder.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"payloadBuilder.js","sourceRoot":"","sources":["../../src/purview/payloadBuilder.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,iBAAiB,CAAC;AAC1C,OAAO,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC;AAGpC,SAAS,iBAAiB,CAAC,MAAoB;IAC7C,OAAO;QACL,QAAQ,EAAE,MAAM,CAAC,QAAQ;QACzB,WAAW,EAAE,MAAM,CAAC,iBAAiB,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,oCAAoC;QAC/F,aAAa,EAAE,CAAC,EAAE,aAAa;QAC/B,iBAAiB,EAAE,MAAM,CAAC,iBAAiB;KAC5C,CAAC;AACJ,CAAC;AAED,SAAS,iBAAiB,CAAC,OAAoB;IAC7C,OAAO;QACL,EAAE,EAAE,UAAU,EAAE;QAChB,WAAW,EAAE,CAAC,EAAE,wBAAwB;QACxC,OAAO,EAAE,OAAO,CAAC,OAAO;KACzB,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,YAA2B,EAAE,MAAoB;IACnF,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IACrC,MAAM,WAAW,GAAG,iBAAiB,CAAC,MAAM,CAAC,CAAC;IAC9C,MAAM,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,UAAU,EAAE,eAAe,EAAE,GAAG,OAAO,CAAC,GAAG,CAAC;IAE1F,MAAM,QAAQ,GAAqB,YAAY,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,KAAK,EAAE,EAAE;QAChE,OAAO;YACL,SAAS,EAAE,GAAG;YACd,gBAAgB,EAAE,GAAG;YACrB,aAAa,EAAE,OAAO;YACtB,eAAe,EAAE,EAAE;YACnB,SAAS,EAAE,KAAK,EAAE,gCAAgC;YAClD,WAAW,EAAE,CAAC,EAAE,iBAAiB;YACjC,WAAW,EAAE,WAAW;YACxB,OAAO,EAAE,CAAC,iBAAiB,CAAC,EAAE,CAAC,CAAC;YAChC,QAAQ,EAAE,EAAE;YACZ,iBAAiB,EAAE,EAAE;YACrB,SAAS,EAAE,EAAE,iBAAiB,EAAE,EAAE,EAAE,SAAS,EAAE,EAAE,EAAE,YAAY,EAAE,EAAE,EAAE;YACrE,UAAU,EAAE;gBACV,oBAAoB,EAAE,CAAC;gBACvB,UAAU,EAAE,IAAI;gBAChB,uBAAuB,EAAE,SAAS;gBAClC,sBAAsB,EAAE,EAAE;aAC3B;SACF,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,MAAM,YAAY,GAAwB;QACxC,cAAc,EAAE,GAAG,MAAM,CAAC,OAAO,CAAC,KAAK,IAAI,MAAM,CAAC,OAAO,CAAC,UAAU,EAAE;QACtE,mBAAmB,EAAE,UAAU,UAAU,EAAE,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,OAAO,iBAAiB,cAAc,eAAe,EAAE;QAC7G,oBAAoB,EAAE,MAAM,CAAC,QAAQ;QACrC,QAAQ,EAAE,QAAQ;QAClB,WAAW,EAAE;YACX,WAAW,EAAE,MAAM,CAAC,WAAW;YAC/B,gBAAgB,EAAE,EAAE;YACpB,WAAW,EAAE,GAAG,iBAAiB,IAAI,iBAAiB,EAAE;YACxD,cAAc,EAAE,OAAO,EAAE,yBAAyB;YAClD,yBAAyB,EAAE,MAAM,CAAC,yBAAyB;SAC5D;QACD,wBAAwB,EAAE,CAAC,WAAW,CAAC;KACxC,CAAC;IAEF,MAAM,OAAO,GAAmB;QAC9B,UAAU,EAAE;YACV,UAAU,EAAE,uBAAuB;YACnC,OAAO,EAAE,KAAK;YACd,QAAQ,EAAE,EAAE,EAAE,oCAAoC;SACnD;QACD,aAAa,EAAE,CAAC,YAAY,CAAC;KAC9B,CAAC;IAEF,OAAO,OAAO,CAAC;AACjB,CAAC"} \ No newline at end of file diff --git a/dist/runner/GitHubActionsRunner.d.ts b/dist/runner/GitHubActionsRunner.d.ts deleted file mode 100644 index 7b77e63..0000000 --- a/dist/runner/GitHubActionsRunner.d.ts +++ /dev/null @@ -1,54 +0,0 @@ -import { ActionConfig } from '../config/types'; -export declare class GitHubActionsRunner { - private readonly config; - private readonly logger; - private readonly authService; - private readonly fileProcessor; - private readonly purviewClient; - private readonly payloadBuilder; - private readonly fullScanService; - constructor(config: ActionConfig); - execute(): Promise; - /** - * Return the SHA that marks the boundary between "history" (for full scan) - * and "current event" (for diff path). - * - push: payload.before (the parent of the first pushed commit) - * - pull_request: the PR base SHA - * - workflow_dispatch / other: undefined (no boundary — full scan gets everything) - */ - private resolveCurrentEventBoundarySha; - private processDiffPath; - private processCommitGroup; - private processUserFiles; - private processFilesInline; - private processFilesOffline; - /** - * Resolve user protection scopes using the cache. Returns the PS response - * and etag, or null if the caller should fall back to contentActivities. - */ - private resolveUserPsWithCache; - /** - * Send a commit-level request through the same routing as file requests. - */ - private sendCommitRequest; - private sendContentActivities; - private sendCommitContentActivity; - /** - * Post a notification about blocked files — PR review comment for pull_request - * events, commit comment for push events. - */ - private postBlockedFilesNotification; - private formatBlockedFilesComment; - private createSummary; - /** - * Paginates through successful workflow runs in batches of 3, checking each - * run's head_sha against the known PR commit SHAs. Returns the first match - * (i.e. the most recent successfully processed commit), or null if none found. - */ - private findLastProcessedCommitSha; - /** - * Resolves the numeric workflow ID by inspecting the current workflow run. - */ - private resolveWorkflowId; -} -//# sourceMappingURL=gitHubActionsRunner.d.ts.map \ No newline at end of file diff --git a/dist/runner/GitHubActionsRunner.d.ts.map b/dist/runner/GitHubActionsRunner.d.ts.map deleted file mode 100644 index 2662871..0000000 --- a/dist/runner/GitHubActionsRunner.d.ts.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"gitHubActionsRunner.d.ts","sourceRoot":"","sources":["../../src/runner/gitHubActionsRunner.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,YAAY,EAAqN,MAAM,iBAAiB,CAAC;AAqBlQ,qBAAa,mBAAmB;IAQlB,OAAO,CAAC,QAAQ,CAAC,MAAM;IAPnC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAChC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAwB;IACpD,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAgB;IAC9C,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAgB;IAC9C,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAiB;IAChD,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAkB;gBAErB,MAAM,EAAE,YAAY;IAc3C,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAuE9B;;;;;;OAMG;IACH,OAAO,CAAC,8BAA8B;YAkBxB,eAAe;YA4Cf,kBAAkB;YAkClB,gBAAgB;YAmChB,kBAAkB;YA4DlB,mBAAmB;IAsBjC;;;OAGG;YACW,sBAAsB;IAsCpC;;OAEG;YACW,iBAAiB;YA0DjB,qBAAqB;YAWrB,yBAAyB;IASvC;;;OAGG;YACW,4BAA4B;IA8C1C,OAAO,CAAC,yBAAyB;YAsBnB,aAAa;IA2B3B;;;;OAIG;YACW,0BAA0B;IAqGxC;;OAEG;YACW,iBAAiB;CAsBhC"} \ No newline at end of file diff --git a/dist/runner/GitHubActionsRunner.js b/dist/runner/GitHubActionsRunner.js deleted file mode 100644 index f766b4a..0000000 --- a/dist/runner/GitHubActionsRunner.js +++ /dev/null @@ -1,559 +0,0 @@ -import * as core from '@actions/core'; -import * as github from '@actions/github'; -import { ExecutionMode, Activity } from '../config/types'; -import { AuthenticationService } from '../auth/authenticationService'; -import { FileProcessor } from '../file/fileProcessor'; -import { PurviewClient } from '../api/purviewClient'; -import { PayloadBuilder } from '../payload/payloadBuilder'; -import { Logger } from '../utils/logger'; -import { isBlocked, getBlockingActions } from '../utils/blockDetector'; -import { PrCommentService } from '../utils/prCommentService'; -import { FullScanService } from './fullScanService'; -export class GitHubActionsRunner { - config; - logger; - authService; - fileProcessor; - purviewClient; - payloadBuilder; - fullScanService; - constructor(config) { - this.config = config; - this.logger = new Logger('GitHubActionsRunner'); - this.authService = new AuthenticationService(this.config); - this.fileProcessor = new FileProcessor(this.config); - this.purviewClient = new PurviewClient(this.config); - this.payloadBuilder = new PayloadBuilder(this.config); - this.fullScanService = new FullScanService(this.config, this.fileProcessor, this.purviewClient, this.payloadBuilder); - } - async execute() { - try { - this.logger.info(`Action event type: ${github.context.eventName}`); - // Step 1: Setup state tracking and determine first run - const { firstRun, stateInfo } = await this.fullScanService.setupStateTrackingAndDetectFirstRun(); - // Step 2: Authenticate - this.logger.info('Authenticating with Azure'); - const token = await this.authService.getToken(); - this.purviewClient.setAuthToken(token.accessToken); - this.purviewClient.setTokenProvider(async () => { - const freshToken = await this.authService.getToken(); - return freshToken.accessToken; - }); - this.purviewClient.setTokenRefresh(() => this.authService.clearCache()); - // Step 3: Get event context info - this.logger.info('Processing repository files'); - const prInfo = await this.fileProcessor.getPrInfo(); - this.payloadBuilder.prNumber = prInfo.prNumber; - const failedPayloads = []; - const blockedFiles = []; - const userPsDeniedCache = new Set(); - const userPsCache = new Map(); - // ─── Full Scan Path (first run or manual workflow dispatch) ─── - let fullScanFileCount = 0; - const isManualDispatch = github.context.eventName === 'workflow_dispatch'; - const shouldPerformFullScan = firstRun || isManualDispatch; - if (shouldPerformFullScan) { - if (isManualDispatch && !firstRun) { - this.logger.info('Performing full scan (manually triggered via workflow_dispatch)'); - } - // Determine the boundary SHA so the full scan covers only commits - // *before* the current event (the diff path handles the rest). - const currentEventSha = this.resolveCurrentEventBoundarySha(); - fullScanFileCount = await this.fullScanService.performFullScan(stateInfo, failedPayloads, prInfo, userPsDeniedCache, userPsCache, currentEventSha); - } - // ─── Diff Path (skip if manually triggered) ─── - let diffFileCount = 0; - if (!isManualDispatch) { - diffFileCount = await this.processDiffPath(prInfo, failedPayloads, blockedFiles, userPsDeniedCache, userPsCache); - } - else { - this.logger.info('Skipping diff processing (manually triggered workflow)'); - } - // ─── Outputs & Summary ─── - const totalProcessed = fullScanFileCount + diffFileCount; - core.setOutput('processed-files', totalProcessed); - core.setOutput('failed-requests', failedPayloads.length); - core.setOutput('blocked-files', JSON.stringify(blockedFiles.map(bf => bf.filePath))); - await this.createSummary(totalProcessed, failedPayloads, blockedFiles); - if (blockedFiles.length > 0) { - const blockedFilePaths = blockedFiles.map(bf => bf.filePath).join(', '); - const message = `Action failed: ${blockedFiles.length} file(s) were blocked by data security policies: ${blockedFilePaths}`; - this.logger.error(message); - core.setFailed(message); - } - } - catch (error) { - this.logger.error('Execution failed', { error }); - throw error; - } - } - /** - * Return the SHA that marks the boundary between "history" (for full scan) - * and "current event" (for diff path). - * - push: payload.before (the parent of the first pushed commit) - * - pull_request: the PR base SHA - * - workflow_dispatch / other: undefined (no boundary — full scan gets everything) - */ - resolveCurrentEventBoundarySha() { - const payload = github.context.payload; - if (github.context.eventName === 'push') { - const before = payload['before']; - if (before && !/^0+$/.test(before)) { - return before; - } - } - if (payload.pull_request) { - return payload.pull_request.base?.sha; - } - return undefined; - } - // ────────────────────────────────────────────────────────────────── - // Diff path orchestration - // ────────────────────────────────────────────────────────────────── - async processDiffPath(prInfo, failedPayloads, blockedFiles, userPsDeniedCache, userPsCache) { - this.logger.info(`Running diff flow for ${github.context.eventName} event`); - const allCommits = await this.fileProcessor.getCommits(); - const commitShaSet = new Set(allCommits.map(c => c.sha)); - const lastProcessedSha = await this.findLastProcessedCommitSha(commitShaSet); - const commitGroups = await this.fileProcessor.getFilesGroupedByCommit(lastProcessedSha, allCommits); - if (commitGroups.length === 0) { - this.logger.warn('No new commits to process'); - return 0; - } - const psRequest = this.payloadBuilder.buildProtectionScopesRequest(); - const requestLocation = psRequest.locations?.[0]; - if (!requestLocation) { - this.logger.error('Protection scope request has no locations configured'); - throw new Error('Protection scope request has no locations configured'); - } - const ctx = { - prInfo, psRequest, requestLocation, - failedPayloads, blockedFiles, userPsDeniedCache, userPsCache, - }; - let diffFileCount = 0; - for (const commitGroup of commitGroups) { - diffFileCount += await this.processCommitGroup(commitGroup, ctx); - } - // Post blocked files notification (PR review comment or commit comment) - if (blockedFiles.length > 0) { - await this.postBlockedFilesNotification(prInfo, blockedFiles); - } - return diffFileCount; - } - async processCommitGroup(commitGroup, ctx) { - const { sha, files } = commitGroup; - this.logger.info(`── Processing commit ${sha} with ${files.length} file(s) ──`); - if (files.length === 0) { - this.logger.info(`Commit ${sha} has no matching files, skipping`); - return 0; - } - // Group files by userId - const filesByUser = new Map(); - for (const file of files) { - const userId = file.authorId || this.config.userId; - const existing = filesByUser.get(userId) || []; - existing.push(file); - filesByUser.set(userId, existing); - } - this.logger.info(`Commit ${sha}: ${files.length} file(s) across ${filesByUser.size} user(s)`); - for (const [userId, userFiles] of filesByUser) { - await this.processUserFiles(userId, userFiles, ctx); - } - await this.sendCommitRequest(commitGroup, ctx); - this.logger.info(`Commit ${sha} processed successfully`); - return files.length; - } - // ────────────────────────────────────────────────────────────────── - // Per-user file processing - // ────────────────────────────────────────────────────────────────── - async processUserFiles(userId, userFiles, ctx) { - this.logger.info(`Processing ${userFiles.length} file(s) for user ${userId}`); - const psResult = await this.resolveUserPsWithCache(userId, ctx); - if (!psResult) { - await this.sendContentActivities(userFiles, ctx.prInfo, ctx.failedPayloads); - return; - } - const { psResponse, scopeIdentifier } = psResult; - // Check applicable scopes - const scopeCheck = this.payloadBuilder.checkApplicableScopes(psResponse.value, Activity.uploadText, ctx.requestLocation); - if (!scopeCheck.shouldProcess) { - this.logger.info(`No matching scopes for user ${userId}, routing ${userFiles.length} file(s) to contentActivities`); - await this.sendContentActivities(userFiles, ctx.prInfo, ctx.failedPayloads); - return; - } - if (scopeCheck.executionMode === ExecutionMode.evaluateInline) { - await this.processFilesInline(userId, userFiles, scopeIdentifier, ctx); - } - else { - await this.processFilesOffline(userId, userFiles, ctx); - } - } - async processFilesInline(userId, userFiles, scopeIdentifier, ctx) { - this.logger.info(`evaluateInline: calling processContent for ${userFiles.length} file(s), user ${userId}`); - const conversationId = crypto.randomUUID(); - let seqNum = 0; - for (const file of userFiles) { - const pcRequests = this.payloadBuilder.buildPerUserProcessContentRequest(file, conversationId, seqNum); - seqNum += pcRequests.length; - for (const pcRequest of pcRequests) { - let pcResponse = await this.purviewClient.processContent(userId, pcRequest, scopeIdentifier, true); - if (!pcResponse.success) { - this.logger.error(`PC failed for file ${file.path}: ${pcResponse.error}. Falling back to contentActivities.`); - ctx.failedPayloads.push(`pc-${file.path}`); - await this.sendContentActivities([file], ctx.prInfo, ctx.failedPayloads); - continue; - } - const pcData = pcResponse.data; - // Handle protectionScopeState: "modified" → re-fetch scopes and retry - if (pcData?.protectionScopeState === 'modified') { - this.logger.info(`Protection scope state modified for user ${userId}, re-fetching scopes and retrying PC for ${file.path}`); - const freshPsResponse = await this.purviewClient.searchUserProtectionScope(userId, ctx.psRequest); - if (freshPsResponse.success && freshPsResponse.data) { - ctx.userPsCache.set(userId, freshPsResponse); - const freshScopeId = freshPsResponse.etag || ''; - pcResponse = await this.purviewClient.processContent(userId, pcRequest, freshScopeId, true); - if (!pcResponse.success) { - this.logger.error(`PC retry failed for file ${file.path}: ${pcResponse.error}`); - ctx.failedPayloads.push(`pc-retry-${file.path}`); - continue; - } - } - } - // Check for block actions - const responseData = pcResponse.data; - if (responseData && isBlocked(responseData)) { - const blockingActions = getBlockingActions(responseData); - this.logger.warn(`BLOCKED: File ${file.path} blocked by ${blockingActions.length} policy action(s)`); - ctx.blockedFiles.push({ - filePath: file.path, - userId, - policyActions: blockingActions, - }); - } - } - } - } - async processFilesOffline(userId, userFiles, ctx) { - this.logger.info(`evaluateOffline: sending ${userFiles.length} file(s) to PCA batch for user ${userId}`); - const pcaBatchRequests = this.payloadBuilder.buildProcessContentBatchRequest(userFiles); - for (const pcaBatchRequest of pcaBatchRequests) { - const pcaResult = await this.purviewClient.processContentAsync(pcaBatchRequest); - if (!pcaResult.success) { - this.logger.error(`PCA batch failed for user ${userId}: ${pcaResult.error}. Falling back to contentActivities.`); - ctx.failedPayloads.push(`pca-${userId}`); - await this.sendContentActivities(userFiles, ctx.prInfo, ctx.failedPayloads); - } - } - } - // ────────────────────────────────────────────────────────────────── - // Shared PS resolution + commit-level + fallback helpers - // ────────────────────────────────────────────────────────────────── - /** - * Resolve user protection scopes using the cache. Returns the PS response - * and etag, or null if the caller should fall back to contentActivities. - */ - async resolveUserPsWithCache(userId, ctx) { - if (ctx.userPsDeniedCache.has(userId)) { - this.logger.warn(`Skipping user ${userId} — cached 401 from earlier PS call. Routing to contentActivities.`); - return null; - } - let psApiResponse = ctx.userPsCache.get(userId); - if (psApiResponse) { - this.logger.info(`Using cached PS response for user ${userId}`); - } - else { - psApiResponse = await this.purviewClient.searchUserProtectionScope(userId, ctx.psRequest); - if (psApiResponse.success) { - ctx.userPsCache.set(userId, psApiResponse); - } - } - if (!psApiResponse.success) { - this.logger.error(`Failed to get protection scopes for user ${userId}: ${psApiResponse.error}`); - ctx.failedPayloads.push(`ps-${userId}`); - if (psApiResponse.statusCode === 401) { - ctx.userPsDeniedCache.add(userId); - this.logger.warn(`User ${userId} returned 401 on PS — cached, will skip in future calls.`); - } - return null; - } - const psResponse = psApiResponse.data; - if (!psResponse || !psResponse.value) { - this.logger.warn(`Empty protection scopes response for user ${userId}, routing to contentActivities`); - return null; - } - return { psResponse, scopeIdentifier: psApiResponse.etag || '' }; - } - /** - * Send a commit-level request through the same routing as file requests. - */ - async sendCommitRequest(commitGroup, ctx) { - const commitUserId = commitGroup.authorId || this.config.userId; - const commitIdentifier = `commit:${commitGroup.sha}`; - this.logger.info(`Sending commit-level request for ${commitIdentifier}, user ${commitUserId}`); - const psResult = await this.resolveUserPsWithCache(commitUserId, ctx); - if (!psResult) { - await this.sendCommitContentActivity(commitGroup, ctx.prInfo, ctx.failedPayloads); - return; - } - const scopeCheck = this.payloadBuilder.checkApplicableScopes(psResult.psResponse.value, Activity.uploadText, ctx.requestLocation); - if (!scopeCheck.shouldProcess) { - await this.sendCommitContentActivity(commitGroup, ctx.prInfo, ctx.failedPayloads); - return; - } - if (scopeCheck.executionMode === ExecutionMode.evaluateInline) { - const conversationId = crypto.randomUUID(); - const pcRequest = this.payloadBuilder.buildCommitProcessContentRequest(commitGroup, conversationId, 0); - const pcResponse = await this.purviewClient.processContent(commitUserId, pcRequest, psResult.scopeIdentifier, true); - if (!pcResponse.success) { - this.logger.error(`PC failed for commit ${commitGroup.sha}: ${pcResponse.error}. Falling back to contentActivities.`); - ctx.failedPayloads.push(`pc-commit-${commitGroup.sha}`); - await this.sendCommitContentActivity(commitGroup, ctx.prInfo, ctx.failedPayloads); - return; - } - const pcData = pcResponse.data; - if (pcData && isBlocked(pcData)) { - const blockingActions = getBlockingActions(pcData); - this.logger.warn(`BLOCKED: Commit ${commitGroup.sha} blocked by ${blockingActions.length} policy action(s)`); - ctx.blockedFiles.push({ - filePath: commitIdentifier, - userId: commitUserId, - policyActions: blockingActions, - }); - } - } - else { - const conversationId = crypto.randomUUID() + '@GA'; - const pcaItem = this.payloadBuilder.buildCommitProcessContentBatchItem(commitGroup, conversationId, 0); - const pcaBatch = { processContentRequests: [pcaItem] }; - const pcaResult = await this.purviewClient.processContentAsync(pcaBatch); - if (!pcaResult.success) { - this.logger.error(`PCA failed for commit ${commitGroup.sha}: ${pcaResult.error}. Falling back to contentActivities.`); - ctx.failedPayloads.push(`pca-commit-${commitGroup.sha}`); - await this.sendCommitContentActivity(commitGroup, ctx.prInfo, ctx.failedPayloads); - } - } - } - async sendContentActivities(files, prInfo, failedPayloads) { - const uploadRequests = this.payloadBuilder.buildUploadSignalRequest(files, prInfo); - for (const req of uploadRequests) { - const result = await this.purviewClient.uploadSignal(req); - if (!result.success) { - this.logger.error(`ContentActivities upload failed for ${req.contentMetadata.contentEntries[0]?.identifier}: ${result.error}`); - failedPayloads.push(req.id); - } - } - } - async sendCommitContentActivity(commitGroup, prInfo, failedPayloads) { - const req = this.payloadBuilder.buildCommitUploadSignalRequest(commitGroup, prInfo); - const result = await this.purviewClient.uploadSignal(req); - if (!result.success) { - this.logger.error(`ContentActivities upload failed for commit ${commitGroup.sha}: ${result.error}`); - failedPayloads.push(`ca-commit-${commitGroup.sha}`); - } - } - /** - * Post a notification about blocked files — PR review comment for pull_request - * events, commit comment for push events. - */ - async postBlockedFilesNotification(_prInfo, blockedFiles) { - this.logger.info(`${blockedFiles.length} file(s) blocked, posting notification`); - try { - const githubToken = process.env['GITHUB_TOKEN'] || ''; - if (!githubToken) { - this.logger.warn('Cannot post blocked files notification: missing GITHUB_TOKEN'); - return; - } - const octokit = github.getOctokit(githubToken); - if (github.context.eventName === 'pull_request') { - const prNumber = github.context.payload.pull_request?.number; - if (prNumber) { - const prCommentService = new PrCommentService(octokit, this.config.repository.owner, this.config.repository.repo, prNumber); - await prCommentService.postBlockedFilesReview(blockedFiles); - } - else { - this.logger.warn('Cannot post PR comment: PR number not available'); - } - } - else if (github.context.eventName === 'push') { - const commitSha = github.context.sha; - if (commitSha) { - const body = this.formatBlockedFilesComment(blockedFiles); - await octokit.rest.repos.createCommitComment({ - owner: this.config.repository.owner, - repo: this.config.repository.repo, - commit_sha: commitSha, - body, - }); - this.logger.info(`Commit comment posted on ${commitSha}`); - } - else { - this.logger.warn('Cannot post commit comment: commit SHA not available'); - } - } - else { - this.logger.info('Blocked files notification skipped (unsupported event type for comments)'); - } - } - catch (e) { - this.logger.warn('Failed to post blocked files notification (non-fatal).', { error: e }); - } - } - formatBlockedFilesComment(blockedFiles) { - const lines = [ - '## ⚠️ Purview Data Security — Blocked Content Detected', - '', - 'The following file(s) were flagged by data security policies and **blocked**:', - '', - '| File | Policy | Action |', - '|------|--------|--------|', - ]; - for (const bf of blockedFiles) { - for (const pa of bf.policyActions) { - const policy = pa.policyName || pa.policyId || 'Unknown'; - const action = pa.restrictionAction || pa.action; - lines.push(`| \`${bf.filePath}\` | ${policy} | ${action} |`); - } - } - lines.push('', '> This comment was generated by the Purview GitHub Action.'); - return lines.join('\n'); - } - async createSummary(processed, failed, blocked = []) { - const summary = core.summary - .addHeading('Purview GitHub Action Results') - .addRaw(`Successfully processed ${processed} files.`); - if (failed.length > 0) { - summary.addHeading('Failed Requests', 3); - summary.addList(failed); - } - if (blocked.length > 0) { - summary.addHeading('Blocked Files', 3); - summary.addTable([ - [{ data: 'File', header: true }, { data: 'Policy', header: true }, { data: 'Action', header: true }], - ...blocked.flatMap(bf => bf.policyActions.map(pa => [ - bf.filePath, - pa.policyName || pa.policyId || 'Unknown', - pa.restrictionAction || pa.action, - ])), - ]); - } - await summary.write(); - } - /** - * Paginates through successful workflow runs in batches of 3, checking each - * run's head_sha against the known PR commit SHAs. Returns the first match - * (i.e. the most recent successfully processed commit), or null if none found. - */ - async findLastProcessedCommitSha(commitShas) { - try { - const githubToken = process.env['GITHUB_TOKEN'] || ''; - if (!githubToken) { - this.logger.warn('GITHUB_TOKEN not available for workflow run history check'); - return null; - } - const octokit = github.getOctokit(githubToken); - // Determine the workflow ID (just the filename, not the full path — - // octokit URL-encodes slashes which causes 404 on the API) - let workflowId = ''; - const workflowRef = process.env['GITHUB_WORKFLOW_REF'] || ''; - if (workflowRef) { - const refMatch = workflowRef.match(/\.github\/workflows\/([^@]+)/); - if (refMatch && refMatch[1]) { - workflowId = refMatch[1]; - } - } - if (!workflowId && github.context.workflow) { - workflowId = github.context.workflow; - } - if (!workflowId) { - this.logger.warn('Could not determine workflow ID for commit dedup'); - return null; - } - // Resolve the numeric workflow ID from the current run — this is the most - // reliable approach since the current run always knows its own workflow. - const numericWorkflowId = await this.resolveWorkflowId(octokit); - if (numericWorkflowId === null) { - this.logger.info('Could not resolve workflow ID from current run — skipping commit dedup'); - return null; - } - // Scope to the current branch for more precise commit dedup - let branch; - if (github.context.eventName === 'pull_request') { - branch = github.context.payload.pull_request?.['head']?.ref; - } - else if (github.context.eventName === 'push') { - branch = github.context.ref?.replace('refs/heads/', ''); - } - // Use listWorkflowRunsForRepo (not listWorkflowRuns) because in - // cross-repo reusable-workflow setups the numeric workflow_id returned - // by getWorkflowRun belongs to the *external* workflow-definition repo, - // not the target repo. listWorkflowRuns would 404 in that case. - const perPage = 10; - let page = 1; - let totalFetched = 0; - while (true) { - const { data: runs } = await octokit.rest.actions.listWorkflowRunsForRepo({ - owner: this.config.repository.owner, - repo: this.config.repository.repo, - status: 'success', - ...(branch ? { branch } : {}), - per_page: perPage, - page, - }); - if (runs.workflow_runs.length === 0) { - break; - } - // Filter to only runs belonging to our workflow - const matchingRuns = runs.workflow_runs.filter((r) => r.workflow_id === numericWorkflowId); - for (const run of matchingRuns) { - if (commitShas.has(run.head_sha)) { - this.logger.info(`Found matching head SHA ${run.head_sha} from workflow run ${run.id} (page ${page})`); - return run.head_sha; - } - } - totalFetched += runs.workflow_runs.length; - this.logger.info(`Checked ${totalFetched} run(s) so far (${matchingRuns.length} matched workflow), no match in commit list yet`); - if (totalFetched >= runs.total_count) { - break; - } - page++; - } - this.logger.info('No previous successful run head SHA matches current commit list — will process all commits'); - return null; - } - catch (error) { - if (error?.status === 404) { - this.logger.warn('Workflow run history returned 404. Ensure the workflow has "actions: read" permission ' + - '(add `permissions: { actions: read }` to your workflow YAML). Proceeding without commit dedup.'); - } - else { - this.logger.warn('Failed to query workflow run history for commit dedup', { error }); - } - return null; - } - } - /** - * Resolves the numeric workflow ID by inspecting the current workflow run. - */ - async resolveWorkflowId(octokit) { - try { - const runId = parseInt(this.config.repository.runId, 10); - if (!runId) { - this.logger.warn('No run ID available to resolve workflow ID'); - return null; - } - const { data: run } = await octokit.rest.actions.getWorkflowRun({ - owner: this.config.repository.owner, - repo: this.config.repository.repo, - run_id: runId, - }); - const wfId = run.workflow_id; - this.logger.info(`Resolved workflow ID ${wfId} from current run ${runId}`); - return wfId; - } - catch (error) { - this.logger.warn('Failed to resolve workflow ID from current run', { error }); - return null; - } - } -} -//# sourceMappingURL=gitHubActionsRunner.js.map \ No newline at end of file diff --git a/dist/runner/GitHubActionsRunner.js.map b/dist/runner/GitHubActionsRunner.js.map deleted file mode 100644 index 97c34a9..0000000 --- a/dist/runner/GitHubActionsRunner.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"gitHubActionsRunner.js","sourceRoot":"","sources":["../../src/runner/gitHubActionsRunner.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/dist/runner/fullScanService.d.ts b/dist/runner/fullScanService.d.ts deleted file mode 100644 index 7293c1f..0000000 --- a/dist/runner/fullScanService.d.ts +++ /dev/null @@ -1,40 +0,0 @@ -import { ActionConfig, StateTrackingInfo, ApiResponse, ProtectionScopesResponse, PrInfo } from '../config/types'; -import { FileProcessor } from '../file/fileProcessor'; -import { PurviewClient } from '../api/purviewClient'; -import { PayloadBuilder } from '../payload/payloadBuilder'; -export declare class FullScanService { - private readonly config; - private readonly fileProcessor; - private readonly purviewClient; - private readonly payloadBuilder; - private readonly logger; - private readonly stateService; - constructor(config: ActionConfig, fileProcessor: FileProcessor, purviewClient: PurviewClient, payloadBuilder: PayloadBuilder); - /** - * Sets up state tracking configuration and determines if this is the first run - */ - setupStateTrackingAndDetectFirstRun(): Promise<{ - stateTrackingEnabled: boolean; - firstRun: boolean; - stateInfo?: StateTrackingInfo; - }>; - /** - * Performs a full repository scan when it's the first run - */ - performFullScan(stateInfo: StateTrackingInfo | undefined, failedPayloads: string[], prInfo: PrInfo, userPsDeniedCache: Set, userPsCache: Map>, currentEventSha?: string): Promise; - /** - * Fetch repo commits *before* the current event boundary and send each - * through the PCA / contentActivities pipeline, mirroring how the diff - * path handles commit-level requests. - */ - private processCommitsForFullScan; - private sendCommitContentActivity; - private resolveDefaultBranch; - private ensureBranchExists; - private detectFirstRun; - private detectFirstRunFromWorkflowHistory; - private processFilesByUser; - private writeStateMarker; - private sendContentActivities; -} -//# sourceMappingURL=fullScanService.d.ts.map \ No newline at end of file diff --git a/dist/runner/fullScanService.d.ts.map b/dist/runner/fullScanService.d.ts.map deleted file mode 100644 index 0420e31..0000000 --- a/dist/runner/fullScanService.d.ts.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"fullScanService.d.ts","sourceRoot":"","sources":["../../src/runner/fullScanService.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,YAAY,EAAgB,iBAAiB,EAAE,WAAW,EAAE,wBAAwB,EAAE,MAAM,EAAoE,MAAM,iBAAiB,CAAC;AACjM,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACtD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAK3D,qBAAa,eAAe;IAKxB,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,aAAa;IAC9B,OAAO,CAAC,QAAQ,CAAC,aAAa;IAC9B,OAAO,CAAC,QAAQ,CAAC,cAAc;IAPjC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAChC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAe;gBAGzB,MAAM,EAAE,YAAY,EACpB,aAAa,EAAE,aAAa,EAC5B,aAAa,EAAE,aAAa,EAC5B,cAAc,EAAE,cAAc;IAMjD;;OAEG;IACG,mCAAmC,IAAI,OAAO,CAAC;QACnD,oBAAoB,EAAE,OAAO,CAAC;QAC9B,QAAQ,EAAE,OAAO,CAAC;QAClB,SAAS,CAAC,EAAE,iBAAiB,CAAA;KAC9B,CAAC;IAmEF;;OAEG;IACG,eAAe,CACnB,SAAS,EAAE,iBAAiB,GAAG,SAAS,EACxC,cAAc,EAAE,MAAM,EAAE,EACxB,MAAM,EAAE,MAAM,EACd,iBAAiB,EAAE,GAAG,CAAC,MAAM,CAAC,EAC9B,WAAW,EAAE,GAAG,CAAC,MAAM,EAAE,WAAW,CAAC,wBAAwB,CAAC,CAAC,EAC/D,eAAe,CAAC,EAAE,MAAM,GACvB,OAAO,CAAC,MAAM,CAAC;IAoDlB;;;;OAIG;YACW,yBAAyB;YAkEzB,yBAAyB;YASzB,oBAAoB;YAYpB,kBAAkB;YAkClB,cAAc;YAwBd,iCAAiC;YA6FjC,kBAAkB;YAkElB,gBAAgB;YAuBhB,qBAAqB;CAUpC"} \ No newline at end of file diff --git a/dist/runner/fullScanService.js b/dist/runner/fullScanService.js deleted file mode 100644 index 362d751..0000000 --- a/dist/runner/fullScanService.js +++ /dev/null @@ -1,407 +0,0 @@ -import * as crypto from 'crypto'; -import * as github from '@actions/github'; -import { Logger } from '../utils/logger'; -import { StateService } from '../state/stateService'; -import { tryParseWorkflowRepoFromEnv } from '../utils/workflowRepo'; -export class FullScanService { - config; - fileProcessor; - purviewClient; - payloadBuilder; - logger; - stateService; - constructor(config, fileProcessor, purviewClient, payloadBuilder) { - this.config = config; - this.fileProcessor = fileProcessor; - this.purviewClient = purviewClient; - this.payloadBuilder = payloadBuilder; - this.logger = new Logger('FullScanService'); - this.stateService = new StateService(this.logger); - } - /** - * Sets up state tracking configuration and determines if this is the first run - */ - async setupStateTrackingAndDetectFirstRun() { - const targetOwner = this.config.repository.owner; - const targetRepo = this.config.repository.repo; - const stateTrackingTokenPresent = !!(this.config.stateRepoToken && this.config.stateRepoToken.length > 0); - const statePath = StateService.defaultStatePathForTarget(targetOwner, targetRepo); - const workflowRepo = tryParseWorkflowRepoFromEnv(); - if (stateTrackingTokenPresent && !workflowRepo) { - this.logger.warn('State tracking token provided but GITHUB_WORKFLOW_REF is missing/unparseable; state tracking disabled.'); - } - const workflowRepoIsTarget = !!workflowRepo && - workflowRepo.owner.toLowerCase() === targetOwner.toLowerCase() && - workflowRepo.repo.toLowerCase() === targetRepo.toLowerCase(); - if (stateTrackingTokenPresent && workflowRepoIsTarget) { - this.logger.warn('State tracking token provided but workflow-definition repo is the scanned repo; state tracking disabled (no same-repo updates supported).'); - } - const stateRepoToken = (this.config.stateRepoToken || '').trim(); - const stateRepoOwner = workflowRepo?.owner || ''; - const stateRepoName = workflowRepo?.repo || ''; - const configuredBranch = (this.config.stateRepoBranch || '').trim(); - let stateRepoBranch = configuredBranch; - const stateTrackingEnabled = stateTrackingTokenPresent && !!workflowRepo && !workflowRepoIsTarget; - // Resolve default branch if needed - if (stateTrackingEnabled && !stateRepoBranch) { - stateRepoBranch = await this.resolveDefaultBranch(stateRepoToken, stateRepoOwner, stateRepoName); - } - // Verify/create configured branch if specified - if (stateTrackingEnabled && stateRepoBranch && configuredBranch) { - await this.ensureBranchExists(stateRepoToken, stateRepoOwner, stateRepoName, stateRepoBranch); - } - const stateTrackingEffective = stateTrackingEnabled && !!stateRepoBranch; - // Determine if this is the first run - const firstRun = await this.detectFirstRun(stateTrackingEffective, stateRepoToken, stateRepoOwner, stateRepoName, stateRepoBranch, statePath, targetOwner, targetRepo); - const stateInfo = stateTrackingEffective ? { - token: stateRepoToken, - owner: stateRepoOwner, - repo: stateRepoName, - branch: stateRepoBranch, - path: statePath - } : undefined; - return { - stateTrackingEnabled: stateTrackingEffective, - firstRun, - stateInfo - }; - } - /** - * Performs a full repository scan when it's the first run - */ - async performFullScan(stateInfo, failedPayloads, prInfo, userPsDeniedCache, userPsCache, currentEventSha) { - this.logger.info(stateInfo - ? 'First run detected; scanning full repository.' - : 'State tracking disabled; scanning full repository.'); - const allFiles = await this.fileProcessor.getAllRepoFiles(); - const fullScanFileCount = allFiles.length; - // Mark payloads as full-scan so AiAgentInfo uses email + "fullscan" version - this.payloadBuilder.isFullScan = true; - if (allFiles.length === 0) { - this.logger.warn('No files found in repository for full scan'); - return fullScanFileCount; - } - // Call tenant protection scopes - const psRequest = this.payloadBuilder.buildProtectionScopesRequest(); - this.logger.info('Calling searchTenantProtectionScope for full scan'); - const tenantPsResponse = await this.purviewClient.searchTenantProtectionScope(psRequest); - if (!tenantPsResponse.success) { - // Tenant PS failed → fallback: contentActivities for ALL files - this.logger.error(`Tenant PS failed: ${tenantPsResponse.error}. Falling back to contentActivities for all ${allFiles.length} file(s).`); - failedPayloads.push('tenant-ps'); - await this.sendContentActivities(allFiles, prInfo, failedPayloads); - } - else if (!tenantPsResponse.data?.value || tenantPsResponse.data.value.length === 0) { - // Tenant PS has no scopes → contentActivities for ALL files - this.logger.warn('Tenant PS returned no protection scopes. Falling back to contentActivities for all files.'); - await this.sendContentActivities(allFiles, prInfo, failedPayloads); - } - else { - // Tenant PS has scopes → group files by user and call per-user PS + PCA - this.logger.info(`Tenant PS returned ${tenantPsResponse.data.value.length} scope(s). Grouping files by user for per-user PS + PCA.`); - await this.processFilesByUser(allFiles, prInfo, failedPayloads, psRequest, userPsDeniedCache, userPsCache); - } - // Process every git commit before the current event - await this.processCommitsForFullScan(prInfo, failedPayloads, psRequest, userPsDeniedCache, userPsCache, currentEventSha); - // Reset so subsequent diff-path payloads use normal agent version - this.payloadBuilder.isFullScan = false; - // Write state marker - if (stateInfo) { - await this.writeStateMarker(stateInfo); - } - return fullScanFileCount; - } - /** - * Fetch repo commits *before* the current event boundary and send each - * through the PCA / contentActivities pipeline, mirroring how the diff - * path handles commit-level requests. - */ - async processCommitsForFullScan(prInfo, failedPayloads, psRequest, userPsDeniedCache, userPsCache, currentEventSha) { - const allCommits = await this.fileProcessor.getAllRepoCommits(currentEventSha); - if (allCommits.length === 0) { - this.logger.info('No commits to process during full scan'); - return; - } - this.logger.info(`Full scan: processing ${allCommits.length} commit(s)`); - for (const commitGroup of allCommits) { - const commitUserId = commitGroup.authorId || this.config.userId; - const commitIdentifier = `commit:${commitGroup.sha}`; - // Check user PS cache - if (userPsDeniedCache.has(commitUserId)) { - this.logger.warn(`Skipping commit ${commitGroup.sha} — user ${commitUserId} cached 401.`); - await this.sendCommitContentActivity(commitGroup, prInfo, failedPayloads); - continue; - } - let userPsResponse = userPsCache.get(commitUserId); - if (!userPsResponse) { - userPsResponse = await this.purviewClient.searchUserProtectionScope(commitUserId, psRequest); - if (userPsResponse.success) { - userPsCache.set(commitUserId, userPsResponse); - } - } - if (!userPsResponse.success) { - this.logger.error(`User PS failed for commit ${commitGroup.sha}, user ${commitUserId}: ${userPsResponse.error}`); - failedPayloads.push(`ps-fullscan-commit-${commitGroup.sha}`); - if (userPsResponse.statusCode === 401) { - userPsDeniedCache.add(commitUserId); - } - await this.sendCommitContentActivity(commitGroup, prInfo, failedPayloads); - continue; - } - if (!userPsResponse.data?.value || userPsResponse.data.value.length === 0) { - this.logger.warn(`No scopes for commit ${commitGroup.sha}, user ${commitUserId}. Falling back to contentActivities.`); - await this.sendCommitContentActivity(commitGroup, prInfo, failedPayloads); - continue; - } - // Send via PCA batch - const conversationId = crypto.randomUUID() + '@GA'; - const pcaItem = this.payloadBuilder.buildCommitProcessContentBatchItem(commitGroup, conversationId, 0); - const pcaBatch = { processContentRequests: [pcaItem] }; - const pcaResult = await this.purviewClient.processContentAsync(pcaBatch); - if (!pcaResult.success) { - this.logger.error(`PCA failed for commit ${commitGroup.sha}: ${pcaResult.error}. Falling back to contentActivities.`); - failedPayloads.push(`pca-fullscan-commit-${commitGroup.sha}`); - await this.sendCommitContentActivity(commitGroup, prInfo, failedPayloads); - } - else { - this.logger.info(`Full scan: PCA completed for ${commitIdentifier}`); - } - } - } - async sendCommitContentActivity(commitGroup, prInfo, failedPayloads) { - const req = this.payloadBuilder.buildCommitUploadSignalRequest(commitGroup, prInfo); - const result = await this.purviewClient.uploadSignal(req); - if (!result.success) { - this.logger.error(`ContentActivities upload failed for commit ${commitGroup.sha}: ${result.error}`); - failedPayloads.push(`ca-fullscan-commit-${commitGroup.sha}`); - } - } - async resolveDefaultBranch(token, owner, repo) { - try { - const octokit = github.getOctokit(token); - const { data } = await octokit.rest.repos.get({ owner, repo }); - this.logger.info(`Resolved workflow repo default branch as ${data.default_branch}`); - return data.default_branch; - } - catch (e) { - this.logger.warn('Failed to resolve workflow repo default branch; state tracking disabled.', { error: e }); - return ''; - } - } - async ensureBranchExists(token, owner, repo, branch) { - try { - const octokit = github.getOctokit(token); - try { - await octokit.rest.repos.getBranch({ owner, repo, branch }); - this.logger.info(`State repo branch '${branch}' exists.`); - } - catch (branchErr) { - if (branchErr?.status === 404) { - this.logger.info(`State repo branch '${branch}' not found. Creating from default branch.`); - // Get default branch SHA - const { data: repoData } = await octokit.rest.repos.get({ owner, repo }); - const defaultBranch = repoData.default_branch; - const { data: refData } = await octokit.rest.git.getRef({ - owner, - repo, - ref: `heads/${defaultBranch}`, - }); - // Create the new branch - await octokit.rest.git.createRef({ - owner, - repo, - ref: `refs/heads/${branch}`, - sha: refData.object.sha, - }); - this.logger.info(`Created branch '${branch}' from '${defaultBranch}' (${refData.object.sha}).`); - } - else { - throw branchErr; - } - } - } - catch (e) { - this.logger.warn(`Failed to verify/create state repo branch '${branch}'; state tracking may fail.`, { error: e }); - } - } - async detectFirstRun(stateTrackingEffective, stateRepoToken, stateRepoOwner, stateRepoName, stateRepoBranch, statePath, targetOwner, targetRepo) { - if (stateTrackingEffective) { - const lookup = await this.stateService.lookupStateFile({ - owner: stateRepoOwner, - repo: stateRepoName, - branch: stateRepoBranch, - token: stateRepoToken, - }, statePath); - return !lookup.exists; - } - else { - // State tracking not enabled - check workflow history to determine if this is first run - return await this.detectFirstRunFromWorkflowHistory(targetOwner, targetRepo); - } - } - async detectFirstRunFromWorkflowHistory(targetOwner, targetRepo) { - try { - const githubToken = process.env['GITHUB_TOKEN'] || ''; - if (!githubToken) { - this.logger.warn('GITHUB_TOKEN not available for workflow history check, defaulting to non-first run'); - return false; - } - const octokit = github.getOctokit(githubToken); - // Try to get workflow file path from GITHUB_WORKFLOW_REF - let workflowId = ''; - const workflowRef = process.env['GITHUB_WORKFLOW_REF'] || ''; - if (workflowRef) { - // GITHUB_WORKFLOW_REF format: "octo-org/hello-world/.github/workflows/my-workflow.yml@refs/heads/main" - // Extract just the filename — octokit URL-encodes slashes in the full path, causing 404 - const refMatch = workflowRef.match(/\.github\/workflows\/([^@]+)/); - if (refMatch && refMatch[1]) { - workflowId = refMatch[1]; - this.logger.info(`Extracted workflow filename from GITHUB_WORKFLOW_REF: ${workflowId}`); - } - } - // Fallback to github.context.workflow if available - if (!workflowId && github.context.workflow) { - workflowId = github.context.workflow; - this.logger.info(`Using workflow from github.context: ${workflowId}`); - } - if (!workflowId) { - this.logger.warn('Could not determine workflow file path from GITHUB_WORKFLOW_REF or github.context, defaulting to non-first run'); - return false; - } - // Resolve the numeric workflow ID from the current run - const runId = parseInt(github.context.runId.toString(), 10); - let numericWorkflowId = null; - if (runId) { - try { - const { data: run } = await octokit.rest.actions.getWorkflowRun({ - owner: targetOwner, - repo: targetRepo, - run_id: runId, - }); - numericWorkflowId = run.workflow_id; - this.logger.info(`Resolved workflow ID ${numericWorkflowId} from current run ${runId}`); - } - catch (err) { - this.logger.warn('Failed to resolve workflow ID from current run', { error: err }); - } - } - if (numericWorkflowId === null) { - this.logger.info('Could not resolve workflow ID — defaulting to first run'); - return true; - } - // Use listWorkflowRunsForRepo (not listWorkflowRuns) because in - // cross-repo reusable-workflow setups the numeric workflow_id belongs - // to the external workflow-definition repo, causing 404 on the - // per-workflow endpoint. - const { data: allRuns } = await octokit.rest.actions.listWorkflowRunsForRepo({ - owner: targetOwner, - repo: targetRepo, - status: 'success', - per_page: 20, - }); - const matchingCount = allRuns.workflow_runs.filter((r) => r.workflow_id === numericWorkflowId).length; - // If there are no completed runs for our workflow, this is the first run - const firstRun = matchingCount === 0; - this.logger.info(firstRun - ? 'First workflow run detected based on workflow history' - : `Previous workflow runs found (${matchingCount} successful run(s) in first page), not first run`); - return firstRun; - } - catch (error) { - if (error?.status === 404) { - this.logger.warn('Workflow history returned 404. Ensure the workflow has "actions: read" permission ' + - '(add `permissions: { actions: read }` to your workflow YAML). Defaulting to non-first run.'); - } - else { - this.logger.warn('Failed to check workflow history, defaulting to non-first run', { error }); - } - return false; - } - } - async processFilesByUser(allFiles, prInfo, failedPayloads, psRequest, userPsDeniedCache, userPsCache) { - const filesByUser = new Map(); - for (const file of allFiles) { - const userId = file.authorId || this.config.userId; - const existing = filesByUser.get(userId) || []; - existing.push(file); - filesByUser.set(userId, existing); - } - for (const [userId, userFiles] of filesByUser) { - this.logger.info(`Full scan: processing ${userFiles.length} file(s) for user ${userId}`); - // Call per-user protection scopes (check cache first) - let userPsResponse = userPsCache.get(userId); - if (userPsResponse) { - this.logger.info(`Full scan: using cached PS response for user ${userId}`); - } - else { - userPsResponse = await this.purviewClient.searchUserProtectionScope(userId, psRequest); - if (userPsResponse.success) { - userPsCache.set(userId, userPsResponse); - } - } - if (!userPsResponse.success) { - this.logger.error(`User PS failed for ${userId}: ${userPsResponse.error}. Falling back to contentActivities.`); - failedPayloads.push(`ps-fullscan-${userId}`); - // Cache 401s so we don't retry this user in the diff path - if (userPsResponse.statusCode === 401) { - userPsDeniedCache.add(userId); - this.logger.warn(`User ${userId} returned 401 on PS — cached, will skip in future calls.`); - } - await this.sendContentActivities(userFiles, prInfo, failedPayloads); - continue; - } - if (!userPsResponse.data?.value || userPsResponse.data.value.length === 0) { - this.logger.warn(`User PS returned no scopes for ${userId}. Falling back to contentActivities.`); - await this.sendContentActivities(userFiles, prInfo, failedPayloads); - continue; - } - // User has scopes → send PCA batch - const pcaBatchRequests = this.payloadBuilder.buildProcessContentBatchRequest(userFiles); - this.logger.info(`Full scan: sending ${userFiles.length} file(s) to PCA batch for user ${userId}`); - for (const pcaBatchRequest of pcaBatchRequests) { - const pcaResult = await this.purviewClient.processContentAsync(pcaBatchRequest); - if (!pcaResult.success) { - this.logger.error(`PCA batch failed for user ${userId}: ${pcaResult.error}. Falling back to contentActivities.`); - failedPayloads.push(`pca-fullscan-${userId}`); - await this.sendContentActivities(userFiles, prInfo, failedPayloads); - break; - } - else { - this.logger.info(`Full scan PCA batch completed for user ${userId}`); - } - } - } - } - async writeStateMarker(stateInfo) { - try { - const state = { - version: 1, - targetRepository: `${this.config.repository.owner}/${this.config.repository.repo}`, - initializedAt: new Date().toISOString(), - initializedByRunId: this.config.repository.runId, - initializedByCommit: this.config.repository.sha, - }; - await this.stateService.writeStateFile({ - owner: stateInfo.owner, - repo: stateInfo.repo, - branch: stateInfo.branch, - token: stateInfo.token, - }, stateInfo.path, state, `Initialize Purview scan state for ${this.config.repository.owner}/${this.config.repository.repo}`); - this.logger.info('State marker written successfully'); - } - catch (e) { - this.logger.warn('Failed to write state marker file (non-fatal).', { error: e }); - } - } - async sendContentActivities(files, prInfo, failedPayloads) { - const uploadRequests = this.payloadBuilder.buildUploadSignalRequest(files, prInfo); - for (const req of uploadRequests) { - const result = await this.purviewClient.uploadSignal(req); - if (!result.success) { - this.logger.error(`ContentActivities upload failed for ${req.contentMetadata.contentEntries[0]?.identifier}: ${result.error}`); - failedPayloads.push(req.id); - } - } - } -} -//# sourceMappingURL=fullScanService.js.map \ No newline at end of file diff --git a/dist/runner/fullScanService.js.map b/dist/runner/fullScanService.js.map deleted file mode 100644 index 895dcef..0000000 --- a/dist/runner/fullScanService.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"fullScanService.js","sourceRoot":"","sources":["../../src/runner/fullScanService.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/dist/state/stateService.d.ts b/dist/state/stateService.d.ts deleted file mode 100644 index 443ae82..0000000 --- a/dist/state/stateService.d.ts +++ /dev/null @@ -1,20 +0,0 @@ -import { Logger } from '../utils/logger'; -export interface StateRepo { - owner: string; - repo: string; - branch: string; - token: string; -} -export interface StateFileLookup { - exists: boolean; - sha?: string; -} -export declare class StateService { - private readonly logger; - constructor(logger?: Logger); - static defaultStatePathForTarget(targetOwner: string, targetRepo: string): string; - readStateFile(stateRepo: StateRepo, path: string): Promise; - lookupStateFile(stateRepo: StateRepo, path: string): Promise; - writeStateFile(stateRepo: StateRepo, path: string, state: unknown, message: string): Promise; -} -//# sourceMappingURL=stateService.d.ts.map \ No newline at end of file diff --git a/dist/state/stateService.d.ts.map b/dist/state/stateService.d.ts.map deleted file mode 100644 index 1c36d88..0000000 --- a/dist/state/stateService.d.ts.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"stateService.d.ts","sourceRoot":"","sources":["../../src/state/stateService.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AAEzC,MAAM,WAAW,SAAS;IACxB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE,OAAO,CAAC;IAChB,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED,qBAAa,YAAY;IACvB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;gBAEpB,MAAM,CAAC,EAAE,MAAM;IAI3B,MAAM,CAAC,yBAAyB,CAAC,WAAW,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,MAAM;IAM3E,aAAa,CAAC,CAAC,EAAE,SAAS,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC;IA0BvE,eAAe,CAAC,SAAS,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC;IA0B7E,cAAc,CAAC,SAAS,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAkBzG"} \ No newline at end of file diff --git a/dist/state/stateService.js b/dist/state/stateService.js deleted file mode 100644 index 6d8c8a3..0000000 --- a/dist/state/stateService.js +++ /dev/null @@ -1,74 +0,0 @@ -import * as github from '@actions/github'; -import { Logger } from '../utils/logger'; -export class StateService { - logger; - constructor(logger) { - this.logger = logger ?? new Logger('StateService'); - } - static defaultStatePathForTarget(targetOwner, targetRepo) { - const safeOwner = targetOwner.replace(/[^a-zA-Z0-9_.-]/g, '_'); - const safeRepo = targetRepo.replace(/[^a-zA-Z0-9_.-]/g, '_'); - return `.purview/state/${safeOwner}-${safeRepo}.json`; - } - async readStateFile(stateRepo, path) { - const octokit = github.getOctokit(stateRepo.token); - try { - const { data } = await octokit.rest.repos.getContent({ - owner: stateRepo.owner, - repo: stateRepo.repo, - path, - ref: stateRepo.branch, - }); - if (Array.isArray(data) || !('content' in data) || !data.content) { - return null; - } - const content = Buffer.from(data.content, 'base64').toString('utf8'); - return JSON.parse(content); - } - catch (e) { - if (e?.status === 404) { - return null; - } - this.logger.warn(`Failed to read state file at ${path}`, { error: e }); - return null; - } - } - async lookupStateFile(stateRepo, path) { - const octokit = github.getOctokit(stateRepo.token); - try { - const { data } = await octokit.rest.repos.getContent({ - owner: stateRepo.owner, - repo: stateRepo.repo, - path, - ref: stateRepo.branch, - }); - if (Array.isArray(data) || !('sha' in data)) { - return { exists: true }; - } - return { exists: true, sha: data.sha }; - } - catch (e) { - // GitHub API returns 404 when the file doesn't exist. - if (e?.status === 404) { - return { exists: false }; - } - throw e; - } - } - async writeStateFile(stateRepo, path, state, message) { - const octokit = github.getOctokit(stateRepo.token); - const content = Buffer.from(JSON.stringify(state, null, 2), 'utf8').toString('base64'); - const lookup = await this.lookupStateFile(stateRepo, path); - await octokit.rest.repos.createOrUpdateFileContents({ - owner: stateRepo.owner, - repo: stateRepo.repo, - path, - message, - content, - branch: stateRepo.branch, - sha: lookup.sha, - }); - this.logger.info(`State marker written to ${stateRepo.owner}/${stateRepo.repo}:${path} (${stateRepo.branch})`); - } -} -//# sourceMappingURL=stateService.js.map \ No newline at end of file diff --git a/dist/state/stateService.js.map b/dist/state/stateService.js.map deleted file mode 100644 index bb4e162..0000000 --- a/dist/state/stateService.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"stateService.js","sourceRoot":"","sources":["../../src/state/stateService.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/dist/utils/Logger.d.ts b/dist/utils/Logger.d.ts deleted file mode 100644 index b29c947..0000000 --- a/dist/utils/Logger.d.ts +++ /dev/null @@ -1,23 +0,0 @@ -export declare enum LogLevel { - DEBUG = 0, - INFO = 1, - WARNING = 2, - ERROR = 3 -} -export declare class Logger { - private readonly context; - private readonly isDebug; - constructor(context: string); - debug(message: string, data?: any): void; - info(message: string, data?: any): void; - warn(message: string, data?: any): void; - warning(message: string, data?: any): void; - error(message: string, data?: any): void; - startGroup(name: string): void; - endGroup(): void; - private formatMessage; - private sanitizeData; - private jsonReplacer; - private removeSensitiveData; -} -//# sourceMappingURL=logger.d.ts.map \ No newline at end of file diff --git a/dist/utils/Logger.d.ts.map b/dist/utils/Logger.d.ts.map deleted file mode 100644 index db6afc5..0000000 --- a/dist/utils/Logger.d.ts.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../src/utils/logger.ts"],"names":[],"mappings":"AAEA,oBAAY,QAAQ;IAClB,KAAK,IAAI;IACT,IAAI,IAAI;IACR,OAAO,IAAI;IACX,KAAK,IAAI;CACV;AAED,qBAAa,MAAM;IACjB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;IACjC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAU;gBAEtB,OAAO,EAAE,MAAM;IAK3B,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,GAAG,GAAG,IAAI;IAUxC,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,GAAG,GAAG,IAAI;IAKvC,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,GAAG,GAAG,IAAI;IAKvC,OAAO,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,GAAG,GAAG,IAAI;IAI1C,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,GAAG,GAAG,IAAI;IAKxC,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAI9B,QAAQ,IAAI,IAAI;IAIhB,OAAO,CAAC,aAAa;IAQrB,OAAO,CAAC,YAAY;IAUpB,OAAO,CAAC,YAAY;IAOpB,OAAO,CAAC,mBAAmB;CAwB5B"} \ No newline at end of file diff --git a/dist/utils/Logger.js b/dist/utils/Logger.js deleted file mode 100644 index 57f2b5b..0000000 --- a/dist/utils/Logger.js +++ /dev/null @@ -1,89 +0,0 @@ -import * as core from '@actions/core'; -export var LogLevel; -(function (LogLevel) { - LogLevel[LogLevel["DEBUG"] = 0] = "DEBUG"; - LogLevel[LogLevel["INFO"] = 1] = "INFO"; - LogLevel[LogLevel["WARNING"] = 2] = "WARNING"; - LogLevel[LogLevel["ERROR"] = 3] = "ERROR"; -})(LogLevel || (LogLevel = {})); -export class Logger { - context; - isDebug; - constructor(context) { - this.context = context; - this.isDebug = core.getBooleanInput('debug') || process.env['RUNNER_DEBUG'] === '1'; - } - debug(message, data) { - if (this.isDebug) { - const logMessage = this.formatMessage(LogLevel.DEBUG, message, data); - // Use core.info so debug output is always visible in the Actions log - // when the user has enabled the debug input. core.debug only shows - // when the ACTIONS_STEP_DEBUG repo secret is set. - core.info(logMessage); - } - } - info(message, data) { - const logMessage = this.formatMessage(LogLevel.INFO, message, data); - core.info(logMessage); - } - warn(message, data) { - const logMessage = this.formatMessage(LogLevel.WARNING, message, data); - core.warning(logMessage); - } - warning(message, data) { - this.warn(message, data); - } - error(message, data) { - const logMessage = this.formatMessage(LogLevel.ERROR, message, data); - core.error(logMessage); - } - startGroup(name) { - core.startGroup(name); - } - endGroup() { - core.endGroup(); - } - formatMessage(level, message, data) { - const timestamp = new Date().toISOString(); - const levelStr = LogLevel[level]; - const sanitizedData = data ? this.sanitizeData(data) : ''; - return `[${timestamp}] [${levelStr}] [${this.context}] ${message}${sanitizedData ? ' ' + sanitizedData : ''}`; - } - sanitizeData(data) { - try { - // Remove sensitive information - const sanitized = this.removeSensitiveData(data); - return JSON.stringify(sanitized, this.jsonReplacer, 2); - } - catch (error) { - return '[Unable to serialize data]'; - } - } - jsonReplacer(_key, value) { - if (value instanceof Error) { - return { message: value.message, name: value.name, ...(value.stack ? { stack: value.stack } : {}) }; - } - return value; - } - removeSensitiveData(obj) { - if (typeof obj !== 'object' || obj === null) { - return obj; - } - const sensitiveKeys = [ - 'token', 'password', 'secret', 'key', 'authorization', - 'client_secret', 'access_token', 'refresh_token' - ]; - const cleaned = Array.isArray(obj) ? [...obj] : { ...obj }; - for (const key in cleaned) { - const lowerKey = key.toLowerCase(); - if (sensitiveKeys.some(sensitive => lowerKey.includes(sensitive))) { - cleaned[key] = '[REDACTED]'; - } - else if (typeof cleaned[key] === 'object') { - cleaned[key] = this.removeSensitiveData(cleaned[key]); - } - } - return cleaned; - } -} -//# sourceMappingURL=logger.js.map \ No newline at end of file diff --git a/dist/utils/Logger.js.map b/dist/utils/Logger.js.map deleted file mode 100644 index 796a31b..0000000 --- a/dist/utils/Logger.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"logger.js","sourceRoot":"","sources":["../../src/utils/logger.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/dist/utils/RetryHandler.d.ts b/dist/utils/RetryHandler.d.ts deleted file mode 100644 index b290c5d..0000000 --- a/dist/utils/RetryHandler.d.ts +++ /dev/null @@ -1,17 +0,0 @@ -export interface RetryOptions { - maxAttempts?: number; - initialDelay?: number; - maxDelay?: number; - backoffFactor?: number; - jitter?: boolean; -} -export declare class RetryHandler { - private readonly logger; - private readonly defaultOptions; - constructor(); - executeWithRetry(operation: () => Promise, operationName: string, options?: RetryOptions): Promise; - private isRetryableError; - private calculateDelay; - private sleep; -} -//# sourceMappingURL=retryHandler.d.ts.map \ No newline at end of file diff --git a/dist/utils/RetryHandler.d.ts.map b/dist/utils/RetryHandler.d.ts.map deleted file mode 100644 index 4408df7..0000000 --- a/dist/utils/RetryHandler.d.ts.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"retryHandler.d.ts","sourceRoot":"","sources":["../../src/utils/retryHandler.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,YAAY;IAC3B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED,qBAAa,YAAY;IACvB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAChC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAM7B;;IAMI,gBAAgB,CAAC,CAAC,EACtB,SAAS,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,EAC3B,aAAa,EAAE,MAAM,EACrB,OAAO,CAAC,EAAE,YAAY,GACrB,OAAO,CAAC,CAAC,CAAC;IAuCb,OAAO,CAAC,gBAAgB;IAsCxB,OAAO,CAAC,cAAc;IAgBtB,OAAO,CAAC,KAAK;CAGd"} \ No newline at end of file diff --git a/dist/utils/RetryHandler.js b/dist/utils/RetryHandler.js deleted file mode 100644 index 01c0e0c..0000000 --- a/dist/utils/RetryHandler.js +++ /dev/null @@ -1,90 +0,0 @@ -import { Logger } from './logger'; -export class RetryHandler { - logger; - defaultOptions = { - maxAttempts: 3, - initialDelay: 1000, - maxDelay: 30000, - backoffFactor: 2, - jitter: true - }; - constructor() { - this.logger = new Logger('RetryHandler'); - } - async executeWithRetry(operation, operationName, options) { - const config = { ...this.defaultOptions, ...options }; - let lastError; - for (let attempt = 1; attempt <= config.maxAttempts; attempt++) { - try { - this.logger.debug(`Executing ${operationName} (attempt ${attempt}/${config.maxAttempts})`); - const result = await operation(); - if (attempt > 1) { - this.logger.info(`${operationName} succeeded after ${attempt} attempts`); - } - return result; - } - catch (error) { - lastError = error instanceof Error ? error : new Error(String(error)); - // Don't retry on non-retryable errors - if (!this.isRetryableError(lastError)) { - this.logger.error(`Non-retryable error in ${operationName}`, { error: lastError.message }); - throw lastError; - } - if (attempt < config.maxAttempts) { - const delay = this.calculateDelay(attempt, config); - this.logger.warning(`${operationName} failed (attempt ${attempt}/${config.maxAttempts}), retrying in ${delay}ms`, { error: lastError.message }); - await this.sleep(delay); - } - } - } - this.logger.error(`${operationName} failed after ${config.maxAttempts} attempts`); - throw lastError || new Error(`${operationName} failed after ${config.maxAttempts} attempts`); - } - isRetryableError(error) { - const message = error.message.toLowerCase(); - // Network errors - if (message.includes('network') || - message.includes('timeout') || - message.includes('econnreset') || - message.includes('econnrefused')) { - return true; - } - // Rate limiting - if (message.includes('rate limit') || message.includes('429')) { - return true; - } - // Temporary server errors - if (message.includes('500') || - message.includes('502') || - message.includes('503') || - message.includes('504')) { - return true; - } - // Authentication errors are not retryable - if (message.includes('401') || message.includes('authentication')) { - return false; - } - // Permission errors are not retryable - if (message.includes('403') || message.includes('forbidden')) { - return false; - } - // Default to not retrying unknown errors - return false; - } - calculateDelay(attempt, config) { - let delay = config.initialDelay * Math.pow(config.backoffFactor, attempt - 1); - // Apply jitter - if (config.jitter) { - const jitterFactor = 0.1; // 10% jitter - const jitterAmount = delay * jitterFactor * (Math.random() * 2 - 1); - delay += jitterAmount; - } - // Ensure delay doesn't exceed max delay - delay = Math.min(delay, config.maxDelay); - return Math.round(delay); - } - sleep(ms) { - return new Promise(resolve => setTimeout(resolve, ms)); - } -} -//# sourceMappingURL=retryHandler.js.map \ No newline at end of file diff --git a/dist/utils/RetryHandler.js.map b/dist/utils/RetryHandler.js.map deleted file mode 100644 index 2c490de..0000000 --- a/dist/utils/RetryHandler.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"retryHandler.js","sourceRoot":"","sources":["../../src/utils/retryHandler.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/dist/utils/blockDetector.d.ts b/dist/utils/blockDetector.d.ts deleted file mode 100644 index 764389c..0000000 --- a/dist/utils/blockDetector.d.ts +++ /dev/null @@ -1,13 +0,0 @@ -import { ProcessContentResponse, PolicyAction } from '../config/types'; -/** - * Determines whether a ProcessContent response contains a block action. - * Mirrors the Python agent-framework pattern: - * - action === "blockAccess" - * - restrictionAction === "block" - */ -export declare function isBlocked(response: ProcessContentResponse): boolean; -/** - * Extracts blocking policy actions from a ProcessContent response. - */ -export declare function getBlockingActions(response: ProcessContentResponse): PolicyAction[]; -//# sourceMappingURL=blockDetector.d.ts.map \ No newline at end of file diff --git a/dist/utils/blockDetector.d.ts.map b/dist/utils/blockDetector.d.ts.map deleted file mode 100644 index c181e13..0000000 --- a/dist/utils/blockDetector.d.ts.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"blockDetector.d.ts","sourceRoot":"","sources":["../../src/utils/blockDetector.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAEvE;;;;;GAKG;AACH,wBAAgB,SAAS,CAAC,QAAQ,EAAE,sBAAsB,GAAG,OAAO,CASnE;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,sBAAsB,GAAG,YAAY,EAAE,CAOnF"} \ No newline at end of file diff --git a/dist/utils/blockDetector.js b/dist/utils/blockDetector.js deleted file mode 100644 index 64ccf1d..0000000 --- a/dist/utils/blockDetector.js +++ /dev/null @@ -1,21 +0,0 @@ -/** - * Determines whether a ProcessContent response contains a block action. - * Mirrors the Python agent-framework pattern: - * - action === "blockAccess" - * - restrictionAction === "block" - */ -export function isBlocked(response) { - if (!response.policyActions || response.policyActions.length === 0) { - return false; - } - return response.policyActions.some((pa) => pa.action === 'blockAccess' || pa.restrictionAction === 'block'); -} -/** - * Extracts blocking policy actions from a ProcessContent response. - */ -export function getBlockingActions(response) { - if (!response.policyActions) - return []; - return response.policyActions.filter((pa) => pa.action === 'blockAccess' || pa.restrictionAction === 'block'); -} -//# sourceMappingURL=blockDetector.js.map \ No newline at end of file diff --git a/dist/utils/blockDetector.js.map b/dist/utils/blockDetector.js.map deleted file mode 100644 index 525b603..0000000 --- a/dist/utils/blockDetector.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"blockDetector.js","sourceRoot":"","sources":["../../src/utils/blockDetector.ts"],"names":[],"mappings":"AAEA;;;;;GAKG;AACH,MAAM,UAAU,SAAS,CAAC,QAAgC;IACxD,IAAI,CAAC,QAAQ,CAAC,aAAa,IAAI,QAAQ,CAAC,aAAa,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACnE,OAAO,KAAK,CAAC;IACf,CAAC;IAED,OAAO,QAAQ,CAAC,aAAa,CAAC,IAAI,CAChC,CAAC,EAAgB,EAAE,EAAE,CACnB,EAAE,CAAC,MAAM,KAAK,aAAa,IAAI,EAAE,CAAC,iBAAiB,KAAK,OAAO,CAClE,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,kBAAkB,CAAC,QAAgC;IACjE,IAAI,CAAC,QAAQ,CAAC,aAAa;QAAE,OAAO,EAAE,CAAC;IAEvC,OAAO,QAAQ,CAAC,aAAa,CAAC,MAAM,CAClC,CAAC,EAAgB,EAAE,EAAE,CACnB,EAAE,CAAC,MAAM,KAAK,aAAa,IAAI,EAAE,CAAC,iBAAiB,KAAK,OAAO,CAClE,CAAC;AACJ,CAAC"} \ No newline at end of file diff --git a/dist/utils/fileUtils.d.ts b/dist/utils/fileUtils.d.ts deleted file mode 100644 index 1d29025..0000000 --- a/dist/utils/fileUtils.d.ts +++ /dev/null @@ -1,4 +0,0 @@ -import { FilePayload, ActionConfig } from './types'; -import { Logger } from './logger'; -export declare function createPayloadsFromFile(filePath: string, config: ActionConfig, logger: Logger): FilePayload[] | null; -//# sourceMappingURL=fileUtils.d.ts.map \ No newline at end of file diff --git a/dist/utils/fileUtils.d.ts.map b/dist/utils/fileUtils.d.ts.map deleted file mode 100644 index 82a19fd..0000000 --- a/dist/utils/fileUtils.d.ts.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"fileUtils.d.ts","sourceRoot":"","sources":["../../src/utils/fileUtils.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACpD,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAElC,wBAAgB,sBAAsB,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,GAAG,WAAW,EAAE,GAAG,IAAI,CAyDnH"} \ No newline at end of file diff --git a/dist/utils/fileUtils.js b/dist/utils/fileUtils.js deleted file mode 100644 index c4a1d7e..0000000 --- a/dist/utils/fileUtils.js +++ /dev/null @@ -1,58 +0,0 @@ -import * as fs from 'fs'; -import isBinaryPath from 'is-binary-path'; -export function createPayloadsFromFile(filePath, config, logger) { - try { - const stats = fs.statSync(filePath); - if (stats.size === 0) { - logger.warn(`Skipping empty file: ${filePath}`); - return null; - } - const isBinary = isBinaryPath(filePath); - if (isBinary && config.skipBinary) { - logger.warn(`Skipping binary file: ${filePath}`); - return null; - } - const contentBuffer = fs.readFileSync(filePath); - const totalSize = contentBuffer.byteLength; - if (!config.sliceLargeFiles && totalSize > config.maxFileBytes) { - logger.warn(`Skipping oversized file (slicing disabled): ${filePath} (${totalSize} bytes > ${config.maxFileBytes} bytes)`); - return null; - } - const chunks = []; - if (totalSize > config.maxFileBytes) { - logger.info(`Slicing large file: ${filePath} (${totalSize} bytes) into chunks of max ${config.maxFileBytes} bytes.`); - for (let i = 0; i < totalSize; i += config.maxFileBytes) { - chunks.push(contentBuffer.subarray(i, i + config.maxFileBytes)); - } - } - else { - chunks.push(contentBuffer); - } - return chunks.map((chunk, index) => { - let content; - if (isBinary) { - content = chunk.toString('base64'); - } - else { - content = chunk.toString('utf8'); - if (config.minify) { - // Basic minify: just trim whitespace. More complex minification is out of scope. - content = content.replace(/\s+/g, ' ').trim(); - } - } - return { - filePath, - content, - isBinary, - isSliced: chunks.length > 1, - sliceIndex: chunks.length > 1 ? index + 1 : undefined, - totalSlices: chunks.length > 1 ? chunks.length : undefined, - }; - }); - } - catch (error) { - logger.warn(`Could not process file ${filePath}. Error: ${error.message}`); - return null; - } -} -//# sourceMappingURL=fileUtils.js.map \ No newline at end of file diff --git a/dist/utils/fileUtils.js.map b/dist/utils/fileUtils.js.map deleted file mode 100644 index 0c906eb..0000000 --- a/dist/utils/fileUtils.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"fileUtils.js","sourceRoot":"","sources":["../../src/utils/fileUtils.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/dist/utils/prCommentService.d.ts b/dist/utils/prCommentService.d.ts deleted file mode 100644 index d0b5245..0000000 --- a/dist/utils/prCommentService.d.ts +++ /dev/null @@ -1,18 +0,0 @@ -import { BlockedFileResult } from '../config/types'; -/** - * Posts PR review comments when ProcessContent returns block actions. - */ -export declare class PrCommentService { - private readonly octokit; - private readonly owner; - private readonly repo; - private readonly prNumber; - private readonly logger; - constructor(octokit: ReturnType, owner: string, repo: string, prNumber: number); - /** - * Post a review comment on the PR listing all blocked files with policy details. - */ - postBlockedFilesReview(blockedFiles: BlockedFileResult[]): Promise; - private formatBlockedFilesComment; -} -//# sourceMappingURL=prCommentService.d.ts.map \ No newline at end of file diff --git a/dist/utils/prCommentService.d.ts.map b/dist/utils/prCommentService.d.ts.map deleted file mode 100644 index e183587..0000000 --- a/dist/utils/prCommentService.d.ts.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"prCommentService.d.ts","sourceRoot":"","sources":["../../src/utils/prCommentService.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AAGpD;;GAEG;AACH,qBAAa,gBAAgB;IAIzB,OAAO,CAAC,QAAQ,CAAC,OAAO;IACxB,OAAO,CAAC,QAAQ,CAAC,KAAK;IACtB,OAAO,CAAC,QAAQ,CAAC,IAAI;IACrB,OAAO,CAAC,QAAQ,CAAC,QAAQ;IAN3B,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;gBAGb,OAAO,EAAE,UAAU,CAAC,cAAc,iBAAiB,EAAE,UAAU,CAAC,EAChE,KAAK,EAAE,MAAM,EACb,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,MAAM;IAKnC;;OAEG;IACG,sBAAsB,CAAC,YAAY,EAAE,iBAAiB,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAuB9E,OAAO,CAAC,yBAAyB;CAqBlC"} \ No newline at end of file diff --git a/dist/utils/prCommentService.js b/dist/utils/prCommentService.js deleted file mode 100644 index ef38a53..0000000 --- a/dist/utils/prCommentService.js +++ /dev/null @@ -1,61 +0,0 @@ -import { Logger } from './logger'; -/** - * Posts PR review comments when ProcessContent returns block actions. - */ -export class PrCommentService { - octokit; - owner; - repo; - prNumber; - logger; - constructor(octokit, owner, repo, prNumber) { - this.octokit = octokit; - this.owner = owner; - this.repo = repo; - this.prNumber = prNumber; - this.logger = new Logger('PrCommentService'); - } - /** - * Post a review comment on the PR listing all blocked files with policy details. - */ - async postBlockedFilesReview(blockedFiles) { - if (blockedFiles.length === 0) - return; - this.logger.info(`Posting review comment for ${blockedFiles.length} blocked file(s) on PR #${this.prNumber}`); - const body = this.formatBlockedFilesComment(blockedFiles); - try { - await this.octokit.rest.pulls.createReview({ - owner: this.owner, - repo: this.repo, - pull_number: this.prNumber, - body, - event: 'COMMENT', - }); - this.logger.info(`Review comment posted on PR #${this.prNumber}`); - } - catch (error) { - this.logger.error(`Failed to post review comment on PR #${this.prNumber}`, { error }); - throw error; - } - } - formatBlockedFilesComment(blockedFiles) { - const lines = [ - '## ⚠️ Purview Data Security — Blocked Content Detected', - '', - 'The following file(s) were flagged by data security policies and **blocked**:', - '', - '| File | Policy | Action |', - '|------|--------|--------|', - ]; - for (const bf of blockedFiles) { - for (const pa of bf.policyActions) { - const policy = pa.policyName || pa.policyId || 'Unknown'; - const action = pa.restrictionAction || pa.action; - lines.push(`| \`${bf.filePath}\` | ${policy} | ${action} |`); - } - } - lines.push('', '> This comment was generated by the Purview GitHub Action.'); - return lines.join('\n'); - } -} -//# sourceMappingURL=prCommentService.js.map \ No newline at end of file diff --git a/dist/utils/prCommentService.js.map b/dist/utils/prCommentService.js.map deleted file mode 100644 index c1a7692..0000000 --- a/dist/utils/prCommentService.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"prCommentService.js","sourceRoot":"","sources":["../../src/utils/prCommentService.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAElC;;GAEG;AACH,MAAM,OAAO,gBAAgB;IAIR;IACA;IACA;IACA;IANF,MAAM,CAAS;IAEhC,YACmB,OAAgE,EAChE,KAAa,EACb,IAAY,EACZ,QAAgB;QAHhB,YAAO,GAAP,OAAO,CAAyD;QAChE,UAAK,GAAL,KAAK,CAAQ;QACb,SAAI,GAAJ,IAAI,CAAQ;QACZ,aAAQ,GAAR,QAAQ,CAAQ;QAEjC,IAAI,CAAC,MAAM,GAAG,IAAI,MAAM,CAAC,kBAAkB,CAAC,CAAC;IAC/C,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,sBAAsB,CAAC,YAAiC;QAC5D,IAAI,YAAY,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO;QAEtC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,8BAA8B,YAAY,CAAC,MAAM,2BAA2B,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC;QAE9G,MAAM,IAAI,GAAG,IAAI,CAAC,yBAAyB,CAAC,YAAY,CAAC,CAAC;QAE1D,IAAI,CAAC;YACH,MAAM,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC;gBACzC,KAAK,EAAE,IAAI,CAAC,KAAK;gBACjB,IAAI,EAAE,IAAI,CAAC,IAAI;gBACf,WAAW,EAAE,IAAI,CAAC,QAAQ;gBAC1B,IAAI;gBACJ,KAAK,EAAE,SAAS;aACjB,CAAC,CAAC;YAEH,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,gCAAgC,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC;QACpE,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,wCAAwC,IAAI,CAAC,QAAQ,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC;YACtF,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC;IAEO,yBAAyB,CAAC,YAAiC;QACjE,MAAM,KAAK,GAAa;YACtB,wDAAwD;YACxD,EAAE;YACF,+EAA+E;YAC/E,EAAE;YACF,4BAA4B;YAC5B,4BAA4B;SAC7B,CAAC;QAEF,KAAK,MAAM,EAAE,IAAI,YAAY,EAAE,CAAC;YAC9B,KAAK,MAAM,EAAE,IAAI,EAAE,CAAC,aAAa,EAAE,CAAC;gBAClC,MAAM,MAAM,GAAG,EAAE,CAAC,UAAU,IAAI,EAAE,CAAC,QAAQ,IAAI,SAAS,CAAC;gBACzD,MAAM,MAAM,GAAG,EAAE,CAAC,iBAAiB,IAAI,EAAE,CAAC,MAAM,CAAC;gBACjD,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,QAAQ,QAAQ,MAAM,MAAM,MAAM,IAAI,CAAC,CAAC;YAC/D,CAAC;QACH,CAAC;QAED,KAAK,CAAC,IAAI,CAAC,EAAE,EAAE,4DAA4D,CAAC,CAAC;QAC7E,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC1B,CAAC;CACF"} \ No newline at end of file diff --git a/dist/utils/types.d.ts b/dist/utils/types.d.ts deleted file mode 100644 index a7c1bb0..0000000 --- a/dist/utils/types.d.ts +++ /dev/null @@ -1,26 +0,0 @@ -export interface ActionConfig { - endpoint: string; - userPrincipalName: string; - tenantId: string; - aadResource: string; - includeGlobs: string[]; - excludeGlobs: string[]; - maxFileBytes: number; - sliceLargeFiles: boolean; - skipBinary: boolean; - includeSummaryPayload: boolean; - minify: boolean; - failOnNon2xx: boolean; - appHostName: string; - applicationHostCategories: string[]; - debug: boolean; -} -export interface FilePayload { - filePath: string; - content: string; - isBinary: boolean; - isSliced: boolean; - sliceIndex?: number; - totalSlices?: number; -} -//# sourceMappingURL=types.d.ts.map \ No newline at end of file diff --git a/dist/utils/types.d.ts.map b/dist/utils/types.d.ts.map deleted file mode 100644 index b587db1..0000000 --- a/dist/utils/types.d.ts.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/utils/types.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,YAAY;IAC3B,QAAQ,EAAE,MAAM,CAAC;IACjB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,YAAY,EAAE,MAAM,CAAC;IACrB,eAAe,EAAE,OAAO,CAAC;IACzB,UAAU,EAAE,OAAO,CAAC;IACpB,qBAAqB,EAAE,OAAO,CAAC;IAC/B,MAAM,EAAE,OAAO,CAAC;IAChB,YAAY,EAAE,OAAO,CAAC;IACtB,WAAW,EAAE,MAAM,CAAC;IACpB,yBAAyB,EAAE,MAAM,EAAE,CAAC;IACpC,KAAK,EAAE,OAAO,CAAC;CAChB;AAED,MAAM,WAAW,WAAW;IAC1B,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,OAAO,CAAC;IAClB,QAAQ,EAAE,OAAO,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB"} \ No newline at end of file diff --git a/dist/utils/types.js b/dist/utils/types.js deleted file mode 100644 index a36ee2c..0000000 --- a/dist/utils/types.js +++ /dev/null @@ -1,3 +0,0 @@ -// --- Configuration & Internal Types --- -export {}; -//# sourceMappingURL=types.js.map \ No newline at end of file diff --git a/dist/utils/types.js.map b/dist/utils/types.js.map deleted file mode 100644 index 2d5bc78..0000000 --- a/dist/utils/types.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/utils/types.ts"],"names":[],"mappings":"AAAA,yCAAyC"} \ No newline at end of file diff --git a/dist/utils/userResolver.d.ts b/dist/utils/userResolver.d.ts deleted file mode 100644 index 9700e3e..0000000 --- a/dist/utils/userResolver.d.ts +++ /dev/null @@ -1,32 +0,0 @@ -import { UsersConfig } from '../config/types'; -import { Logger } from './logger'; -/** - * Resolves Azure AD user IDs from a local users.json mapping file. - * - * The file is expected to live in the workflow-definition repo (e.g. PurviewWorkflow) - * and is checked out into $GITHUB_WORKSPACE by actions/checkout. - * - * Format: - * { - * "users": [{ "email": "user@contoso.com", "userId": "" }], - * "defaultUserId": "" - * } - */ -export declare class UserResolver { - private readonly emailToUserId; - private readonly defaultUserId; - private readonly logger; - constructor(usersConfig: UsersConfig, logger?: Logger); - /** - * Resolve an email address to an Azure AD user ID. - * Returns the mapped userId if found, otherwise the defaultUserId. - * Logs which value was chosen. - */ - resolve(email: string | null | undefined): string; - /** - * Load and parse a users.json file from the given path. - * Throws if the file is missing or malformed. - */ - static loadFromFile(filePath: string, logger?: Logger): UserResolver; -} -//# sourceMappingURL=userResolver.d.ts.map \ No newline at end of file diff --git a/dist/utils/userResolver.d.ts.map b/dist/utils/userResolver.d.ts.map deleted file mode 100644 index 06d06e9..0000000 --- a/dist/utils/userResolver.d.ts.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"userResolver.d.ts","sourceRoot":"","sources":["../../src/utils/userResolver.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAC9C,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAElC;;;;;;;;;;;GAWG;AACH,qBAAa,YAAY;IACvB,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAsB;IACpD,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAS;IACvC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;gBAEpB,WAAW,EAAE,WAAW,EAAE,MAAM,CAAC,EAAE,MAAM;IAYrD;;;;OAIG;IACH,OAAO,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,MAAM;IAajD;;;OAGG;IACH,MAAM,CAAC,YAAY,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,YAAY;CAyBrE"} \ No newline at end of file diff --git a/dist/utils/userResolver.js b/dist/utils/userResolver.js deleted file mode 100644 index a65ef43..0000000 --- a/dist/utils/userResolver.js +++ /dev/null @@ -1,69 +0,0 @@ -import * as fs from 'fs'; -import * as path from 'path'; -import { Logger } from './logger'; -/** - * Resolves Azure AD user IDs from a local users.json mapping file. - * - * The file is expected to live in the workflow-definition repo (e.g. PurviewWorkflow) - * and is checked out into $GITHUB_WORKSPACE by actions/checkout. - * - * Format: - * { - * "users": [{ "email": "user@contoso.com", "userId": "" }], - * "defaultUserId": "" - * } - */ -export class UserResolver { - emailToUserId; - defaultUserId; - logger; - constructor(usersConfig, logger) { - this.logger = logger ?? new Logger('UserResolver'); - this.emailToUserId = new Map(); - this.defaultUserId = usersConfig.defaultUserId; - for (const mapping of usersConfig.users) { - this.emailToUserId.set(mapping.email.toLowerCase(), mapping.userId); - } - this.logger.info(`UserResolver initialised with ${this.emailToUserId.size} mapping(s) and default userId: ${this.defaultUserId}`); - } - /** - * Resolve an email address to an Azure AD user ID. - * Returns the mapped userId if found, otherwise the defaultUserId. - * Logs which value was chosen. - */ - resolve(email) { - if (email) { - const userId = this.emailToUserId.get(email.toLowerCase()); - if (userId) { - this.logger.info(`Resolved userId for email '${email}': ${userId} (from users.json mapping)`); - return userId; - } - } - this.logger.info(`No users.json mapping found for email '${email ?? 'unknown'}', using default userId: ${this.defaultUserId}`); - return this.defaultUserId; - } - /** - * Load and parse a users.json file from the given path. - * Throws if the file is missing or malformed. - */ - static loadFromFile(filePath, logger) { - const log = logger ?? new Logger('UserResolver'); - const absolutePath = path.isAbsolute(filePath) - ? filePath - : path.join(process.env['GITHUB_WORKSPACE'] || process.cwd(), filePath); - log.info(`Loading users.json from: ${absolutePath}`); - if (!fs.existsSync(absolutePath)) { - throw new Error(`users.json not found at ${absolutePath}. Ensure the file exists in your workflow-definition repo and is accessible locally or via the GitHub API.`); - } - const raw = fs.readFileSync(absolutePath, 'utf-8'); - const parsed = JSON.parse(raw); - if (!parsed.defaultUserId) { - throw new Error('users.json must contain a "defaultUserId" field.'); - } - if (!Array.isArray(parsed.users)) { - throw new Error('users.json must contain a "users" array.'); - } - return new UserResolver(parsed, log); - } -} -//# sourceMappingURL=userResolver.js.map \ No newline at end of file diff --git a/dist/utils/userResolver.js.map b/dist/utils/userResolver.js.map deleted file mode 100644 index 22fe835..0000000 --- a/dist/utils/userResolver.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"userResolver.js","sourceRoot":"","sources":["../../src/utils/userResolver.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,IAAI,CAAC;AACzB,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAE7B,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAElC;;;;;;;;;;;GAWG;AACH,MAAM,OAAO,YAAY;IACN,aAAa,CAAsB;IACnC,aAAa,CAAS;IACtB,MAAM,CAAS;IAEhC,YAAY,WAAwB,EAAE,MAAe;QACnD,IAAI,CAAC,MAAM,GAAG,MAAM,IAAI,IAAI,MAAM,CAAC,cAAc,CAAC,CAAC;QACnD,IAAI,CAAC,aAAa,GAAG,IAAI,GAAG,EAAE,CAAC;QAC/B,IAAI,CAAC,aAAa,GAAG,WAAW,CAAC,aAAa,CAAC;QAE/C,KAAK,MAAM,OAAO,IAAI,WAAW,CAAC,KAAK,EAAE,CAAC;YACxC,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,WAAW,EAAE,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;QACtE,CAAC;QAED,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,iCAAiC,IAAI,CAAC,aAAa,CAAC,IAAI,mCAAmC,IAAI,CAAC,aAAa,EAAE,CAAC,CAAC;IACpI,CAAC;IAED;;;;OAIG;IACH,OAAO,CAAC,KAAgC;QACtC,IAAI,KAAK,EAAE,CAAC;YACV,MAAM,MAAM,GAAG,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC,CAAC;YAC3D,IAAI,MAAM,EAAE,CAAC;gBACX,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,8BAA8B,KAAK,MAAM,MAAM,4BAA4B,CAAC,CAAC;gBAC9F,OAAO,MAAM,CAAC;YAChB,CAAC;QACH,CAAC;QAED,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,0CAA0C,KAAK,IAAI,SAAS,4BAA4B,IAAI,CAAC,aAAa,EAAE,CAAC,CAAC;QAC/H,OAAO,IAAI,CAAC,aAAa,CAAC;IAC5B,CAAC;IAED;;;OAGG;IACH,MAAM,CAAC,YAAY,CAAC,QAAgB,EAAE,MAAe;QACnD,MAAM,GAAG,GAAG,MAAM,IAAI,IAAI,MAAM,CAAC,cAAc,CAAC,CAAC;QACjD,MAAM,YAAY,GAAG,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC;YAC5C,CAAC,CAAC,QAAQ;YACV,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC,IAAI,OAAO,CAAC,GAAG,EAAE,EAAE,QAAQ,CAAC,CAAC;QAE1E,GAAG,CAAC,IAAI,CAAC,4BAA4B,YAAY,EAAE,CAAC,CAAC;QAErD,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC;YACjC,MAAM,IAAI,KAAK,CAAC,2BAA2B,YAAY,4GAA4G,CAAC,CAAC;QACvK,CAAC;QAED,MAAM,GAAG,GAAG,EAAE,CAAC,YAAY,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC;QACnD,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAgB,CAAC;QAE9C,IAAI,CAAC,MAAM,CAAC,aAAa,EAAE,CAAC;YAC1B,MAAM,IAAI,KAAK,CAAC,kDAAkD,CAAC,CAAC;QACtE,CAAC;QAED,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC;YACjC,MAAM,IAAI,KAAK,CAAC,0CAA0C,CAAC,CAAC;QAC9D,CAAC;QAED,OAAO,IAAI,YAAY,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IACvC,CAAC;CACF"} \ No newline at end of file diff --git a/dist/utils/workflowRepo.d.ts b/dist/utils/workflowRepo.d.ts deleted file mode 100644 index 7fe2b49..0000000 --- a/dist/utils/workflowRepo.d.ts +++ /dev/null @@ -1,19 +0,0 @@ -export interface RepoCoords { - owner: string; - repo: string; -} -export interface WorkflowRepoInfo extends RepoCoords { - ref?: string; -} -/** - * Parse the workflow-definition repository coordinates from the - * GITHUB_WORKFLOW_REF environment variable. - * - * Example values: - * Org/WorkflowRepo/.github/workflows/workflow.yml@refs/heads/main - * Org/CallerRepo/.github/workflows/workflow.yml@v1 - * - * Returns undefined when the variable is missing or unparseable. - */ -export declare function tryParseWorkflowRepoFromEnv(): WorkflowRepoInfo | undefined; -//# sourceMappingURL=workflowRepo.d.ts.map \ No newline at end of file diff --git a/dist/utils/workflowRepo.d.ts.map b/dist/utils/workflowRepo.d.ts.map deleted file mode 100644 index d4ea988..0000000 --- a/dist/utils/workflowRepo.d.ts.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"workflowRepo.d.ts","sourceRoot":"","sources":["../../src/utils/workflowRepo.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,UAAU;IACzB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,gBAAiB,SAAQ,UAAU;IAClD,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED;;;;;;;;;GASG;AACH,wBAAgB,2BAA2B,IAAI,gBAAgB,GAAG,SAAS,CAgB1E"} \ No newline at end of file diff --git a/dist/utils/workflowRepo.js b/dist/utils/workflowRepo.js deleted file mode 100644 index e33a403..0000000 --- a/dist/utils/workflowRepo.js +++ /dev/null @@ -1,26 +0,0 @@ -/** - * Parse the workflow-definition repository coordinates from the - * GITHUB_WORKFLOW_REF environment variable. - * - * Example values: - * Org/WorkflowRepo/.github/workflows/workflow.yml@refs/heads/main - * Org/CallerRepo/.github/workflows/workflow.yml@v1 - * - * Returns undefined when the variable is missing or unparseable. - */ -export function tryParseWorkflowRepoFromEnv() { - const workflowRef = (process.env['GITHUB_WORKFLOW_REF'] || '').trim(); - if (!workflowRef) { - return undefined; - } - const beforeAt = workflowRef.split('@', 1)[0] || ''; - const afterAt = workflowRef.includes('@') - ? workflowRef.slice(workflowRef.indexOf('@') + 1) - : undefined; - const parts = beforeAt.split('/').filter(Boolean); - if (parts.length < 2) { - return undefined; - } - return { owner: parts[0], repo: parts[1], ref: afterAt }; -} -//# sourceMappingURL=workflowRepo.js.map \ No newline at end of file diff --git a/dist/utils/workflowRepo.js.map b/dist/utils/workflowRepo.js.map deleted file mode 100644 index 1534b62..0000000 --- a/dist/utils/workflowRepo.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"workflowRepo.js","sourceRoot":"","sources":["../../src/utils/workflowRepo.ts"],"names":[],"mappings":"AASA;;;;;;;;;GASG;AACH,MAAM,UAAU,2BAA2B;IACzC,MAAM,WAAW,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,qBAAqB,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;IACtE,IAAI,CAAC,WAAW,EAAE,CAAC;QACjB,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,MAAM,QAAQ,GAAG,WAAW,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;IACpD,MAAM,OAAO,GAAG,WAAW,CAAC,QAAQ,CAAC,GAAG,CAAC;QACvC,CAAC,CAAC,WAAW,CAAC,KAAK,CAAC,WAAW,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACjD,CAAC,CAAC,SAAS,CAAC;IACd,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IAClD,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACrB,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,OAAO,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC,CAAE,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC,CAAE,EAAE,GAAG,EAAE,OAAO,EAAE,CAAC;AAC7D,CAAC"} \ No newline at end of file diff --git a/dist/validation/InputValidator.d.ts b/dist/validation/InputValidator.d.ts deleted file mode 100644 index be0971c..0000000 --- a/dist/validation/InputValidator.d.ts +++ /dev/null @@ -1,3 +0,0 @@ -import { ActionConfig } from '../config/types'; -export declare function validateInputs(): Promise; -//# sourceMappingURL=inputValidator.d.ts.map \ No newline at end of file diff --git a/dist/validation/InputValidator.d.ts.map b/dist/validation/InputValidator.d.ts.map deleted file mode 100644 index 3b29304..0000000 --- a/dist/validation/InputValidator.d.ts.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"inputValidator.d.ts","sourceRoot":"","sources":["../../src/validation/inputValidator.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,YAAY,EAAe,MAAM,iBAAiB,CAAC;AAI5D,wBAAsB,cAAc,IAAI,OAAO,CAAC,YAAY,CAAC,CA6M5D"} \ No newline at end of file diff --git a/dist/validation/InputValidator.js b/dist/validation/InputValidator.js deleted file mode 100644 index 64cf011..0000000 --- a/dist/validation/InputValidator.js +++ /dev/null @@ -1,190 +0,0 @@ -import * as core from '@actions/core'; -import * as github from '@actions/github'; -import { Logger } from '../utils/logger'; -import { tryParseWorkflowRepoFromEnv } from '../utils/workflowRepo'; -export async function validateInputs() { - const logger = new Logger('InputValidator'); - try { - // Get and validate required inputs - const clientId = core.getInput('client-id', { required: true }); - const clientCertificatePemRaw = core.getInput('client-certificate', { required: false }); - const tenantId = core.getInput('tenant-id', { required: true }); - const purviewAccountName = core.getInput('purview-account-name'); - var purviewEndpoint = core.getInput('purview-endpoint'); - const usersJsonPath = core.getInput('users-json-path') || 'users.json'; - // Read state-repo-token early — it doubles as the credential for fetching - // users.json from the workflow-definition repo via the GitHub API. - const stateRepoBranch = (core.getInput('state-repo-branch') || '').trim(); - const stateRepoToken = (core.getInput('state-repo-token') || '').trim(); - // --------------- Load users.json --------------- - // The file is expected to live in the workflow-definition repo (e.g. - // PurviewWorkflow), NOT the target repo being scanned. When the workflow - // repo differs from the target repo and a state-repo-token is available, - // the file is fetched via the GitHub API; otherwise we fall back to the - // local filesystem ($GITHUB_WORKSPACE). - let userId; - let userMappings; - const workflowRepo = tryParseWorkflowRepoFromEnv(); - const { context } = github; - const targetRepoFullName = `${context.repo.owner}/${context.repo.repo}`.toLowerCase(); - const workflowRepoFullName = workflowRepo - ? `${workflowRepo.owner}/${workflowRepo.repo}`.toLowerCase() - : ''; - const isExternalWorkflowRepo = !!workflowRepo && workflowRepoFullName !== targetRepoFullName; - // Debug: log workflow repo resolution details - logger.info(`GITHUB_WORKFLOW_REF = '${process.env['GITHUB_WORKFLOW_REF'] || ''}'`); - logger.info(`Parsed workflowRepo = ${workflowRepo ? JSON.stringify(workflowRepo) : 'undefined'}`); - logger.info(`Target repo = '${targetRepoFullName}', Workflow repo = '${workflowRepoFullName}'`); - logger.info(`isExternalWorkflowRepo = ${isExternalWorkflowRepo}`); - logger.info(`stateRepoToken present = ${!!stateRepoToken}`); - let parsed; - // Determine the best token for fetching users.json from the workflow repo. - // Prefer state-repo-token, fall back to GITHUB_TOKEN (works for public repos - // or when the token has cross-repo access via org rulesets). - const apiTokenForUsersJson = stateRepoToken || process.env['GITHUB_TOKEN'] || ''; - if (isExternalWorkflowRepo && apiTokenForUsersJson) { - // Fetch users.json from the workflow-definition repo via the GitHub API - const tokenSource = stateRepoToken ? 'state-repo-token' : 'GITHUB_TOKEN'; - const refLabel = workflowRepo.ref || '(default branch)'; - logger.info(`Fetching users.json from workflow-definition repo ${workflowRepo.owner}/${workflowRepo.repo} (ref: ${refLabel}, token: ${tokenSource})`); - const octokit = github.getOctokit(apiTokenForUsersJson); - try { - const { data } = await octokit.rest.repos.getContent({ - owner: workflowRepo.owner, - repo: workflowRepo.repo, - path: usersJsonPath, - ...(workflowRepo.ref ? { ref: workflowRepo.ref } : {}), - }); - if (Array.isArray(data) || !('content' in data)) { - throw new Error(`${usersJsonPath} in ${workflowRepo.owner}/${workflowRepo.repo} is not a file.`); - } - const content = Buffer.from(data.content, 'base64').toString('utf-8'); - parsed = JSON.parse(content); - logger.info(`Loaded users.json from ${workflowRepo.owner}/${workflowRepo.repo}/${usersJsonPath}`); - } - catch (e) { - if (e?.status === 401 || e?.status === 403) { - throw new Error(`Authentication failed (HTTP ${e.status}) when fetching '${usersJsonPath}' from ${workflowRepo.owner}/${workflowRepo.repo}. ` + - `The ${tokenSource} token does not have read access to this repository. ` + - 'Ensure your state-repo-token (PAT or GitHub App token) has "contents: read" permission on the workflow-definition repo.'); - } - if (e?.status === 404) { - throw new Error(`users.json not found at '${usersJsonPath}' in ${workflowRepo.owner}/${workflowRepo.repo} (ref: ${refLabel}). ` + - `This can also happen when the ${tokenSource} token lacks read access to a private repo (GitHub returns 404 instead of 403). ` + - 'Verify that: (1) the file exists at the expected path and ref, and (2) your state-repo-token has "contents: read" permission on the workflow-definition repo.'); - } - throw e; - } - } - else { - // Local filesystem fallback (same-repo workflow or no token) - const fs = await import('fs'); - const path = await import('path'); - const absPath = path.default.isAbsolute(usersJsonPath) - ? usersJsonPath - : path.default.join(process.env['GITHUB_WORKSPACE'] || process.cwd(), usersJsonPath); - if (!fs.default.existsSync(absPath)) { - throw new Error(`users.json not found at ${absPath}. ` + - 'Create a users.json in your workflow-definition repo with email-to-userId mappings and a defaultUserId.'); - } - parsed = JSON.parse(fs.default.readFileSync(absPath, 'utf-8')); - logger.info(`Loaded users.json from filesystem: ${absPath}`); - } - if (!parsed.defaultUserId) { - throw new Error('users.json must contain a "defaultUserId" field.'); - } - if (!Array.isArray(parsed.users)) { - throw new Error('users.json must contain a "users" array.'); - } - userMappings = parsed.users; - userId = parsed.defaultUserId; - logger.info(`Loaded ${userMappings.length} user mapping(s)`); - logger.info(`Default userId from users.json: ${userId}`); - // Validate format - if (!isValidGuid(clientId)) { - throw new Error('Invalid client-id format. Expected GUID.'); - } - if (!isValidGuid(tenantId)) { - throw new Error('Invalid tenant-id format. Expected GUID.'); - } - if (!isValidUrl(purviewEndpoint)) { - purviewEndpoint = `https://graph.microsoft.com/v1.0`; - } - const clientCertificatePem = clientCertificatePemRaw?.trim() ? clientCertificatePemRaw.trim() : undefined; - if (clientCertificatePem) { - validateClientCertificatePem(clientCertificatePem); - } - // Get optional inputs - const filePatterns = core.getInput('file-patterns') || '**'; - const excludePatternsRaw = core.getInput('exclude-patterns') || ''; - const userExcludePatterns = excludePatternsRaw.split(',').map(p => p.trim()).filter(Boolean); - const maxFileSize = parseInt(core.getInput('max-file-size') || '10485760', 10); - const debug = core.getBooleanInput('debug'); - // (stateRepoBranch and stateRepoToken were read earlier, before users.json loading) - // Validate optional inputs - if (isNaN(maxFileSize) || maxFileSize <= 0) { - throw new Error('Invalid max-file-size. Must be a positive number.'); - } - // Get repository context (context already destructured above for workflow-repo detection) - const repository = { - owner: context.repo.owner, - repo: context.repo.repo, - branch: context.ref.replace('refs/heads/', ''), - sha: context.sha, - runId: context.runId.toString(), - runNumber: context.runNumber.toString() - }; - // State tracking is only supported via an explicit token (writes to the workflow-definition repo). - const hasStateRepoToken = stateRepoToken.length > 0; - if (!hasStateRepoToken && stateRepoBranch.length > 0) { - throw new Error('state-repo-branch is only supported when state-repo-token is provided.'); - } - const config = { - clientId, - clientCertificatePem, - tenantId, - purviewAccountName, - purviewEndpoint, - filePatterns: filePatterns.split(',').map(p => p.trim()).filter(Boolean), - excludePatterns: [...new Set(['**/.git/**', ...userExcludePatterns])], - maxFileSize, - debug, - repository, - userId, - userMappings, - stateRepoBranch, - stateRepoToken - }; - logger.debug('Configuration validated', { - patterns: config.filePatterns.length, - maxSize: config.maxFileSize - }); - return config; - } - catch (error) { - logger.error('Input validation failed', { error }); - throw error; - } -} -function isValidGuid(guid) { - const guidRegex = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i; - return guidRegex.test(guid); -} -function isValidUrl(url) { - try { - new URL(url); - return true; - } - catch { - return false; - } -} -function validateClientCertificatePem(pem) { - // Minimal validation: must contain at least one cert and one private key block. - const hasCert = /-----BEGIN CERTIFICATE-----[\s\S]*?-----END CERTIFICATE-----/m.test(pem); - const hasPrivateKey = /-----BEGIN (?:RSA |EC )?PRIVATE KEY-----[\s\S]*?-----END (?:RSA |EC )?PRIVATE KEY-----/m.test(pem); - if (!hasCert || !hasPrivateKey) { - throw new Error('Invalid client-certificate. Expected a PEM containing both a CERTIFICATE block and a PRIVATE KEY block.'); - } -} -//# sourceMappingURL=inputValidator.js.map \ No newline at end of file diff --git a/dist/validation/InputValidator.js.map b/dist/validation/InputValidator.js.map deleted file mode 100644 index f1b585d..0000000 --- a/dist/validation/InputValidator.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"inputValidator.js","sourceRoot":"","sources":["../../src/validation/inputValidator.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,IAAI,MAAM,eAAe,CAAC;AACtC,OAAO,KAAK,MAAM,MAAM,iBAAiB,CAAC;AAE1C,OAAO,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AACzC,OAAO,EAAE,2BAA2B,EAAE,MAAM,uBAAuB,CAAC;AAEpE,MAAM,CAAC,KAAK,UAAU,cAAc;IAClC,MAAM,MAAM,GAAG,IAAI,MAAM,CAAC,gBAAgB,CAAC,CAAC;IAE5C,IAAI,CAAC;QACH,mCAAmC;QACnC,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;QAChE,MAAM,uBAAuB,GAAG,IAAI,CAAC,QAAQ,CAAC,oBAAoB,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,CAAC;QACzF,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;QAChE,MAAM,kBAAkB,GAAG,IAAI,CAAC,QAAQ,CAAC,sBAAsB,CAAC,CAAC;QACjE,IAAI,eAAe,GAAG,IAAI,CAAC,QAAQ,CAAC,kBAAkB,CAAC,CAAC;QACxD,MAAM,aAAa,GAAG,IAAI,CAAC,QAAQ,CAAC,iBAAiB,CAAC,IAAI,YAAY,CAAC;QAEvE,0EAA0E;QAC1E,mEAAmE;QACnE,MAAM,eAAe,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,mBAAmB,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;QAC1E,MAAM,cAAc,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,kBAAkB,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;QAExE,kDAAkD;QAClD,qEAAqE;QACrE,yEAAyE;QACzE,yEAAyE;QACzE,wEAAwE;QACxE,wCAAwC;QACxC,IAAI,MAAc,CAAC;QACnB,IAAI,YAAiE,CAAC;QAEtE,MAAM,YAAY,GAAG,2BAA2B,EAAE,CAAC;QACnD,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,CAAC;QAC3B,MAAM,kBAAkB,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;QACtF,MAAM,oBAAoB,GAAG,YAAY;YACvC,CAAC,CAAC,GAAG,YAAY,CAAC,KAAK,IAAI,YAAY,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE;YAC5D,CAAC,CAAC,EAAE,CAAC;QACP,MAAM,sBAAsB,GAC1B,CAAC,CAAC,YAAY,IAAI,oBAAoB,KAAK,kBAAkB,CAAC;QAEhE,8CAA8C;QAC9C,MAAM,CAAC,IAAI,CAAC,0BAA0B,OAAO,CAAC,GAAG,CAAC,qBAAqB,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;QACnF,MAAM,CAAC,IAAI,CAAC,yBAAyB,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC;QAClG,MAAM,CAAC,IAAI,CAAC,kBAAkB,kBAAkB,uBAAuB,oBAAoB,GAAG,CAAC,CAAC;QAChG,MAAM,CAAC,IAAI,CAAC,4BAA4B,sBAAsB,EAAE,CAAC,CAAC;QAClE,MAAM,CAAC,IAAI,CAAC,4BAA4B,CAAC,CAAC,cAAc,EAAE,CAAC,CAAC;QAE5D,IAAI,MAAmB,CAAC;QAExB,2EAA2E;QAC3E,6EAA6E;QAC7E,6DAA6D;QAC7D,MAAM,oBAAoB,GAAG,cAAc,IAAI,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,IAAI,EAAE,CAAC;QAEjF,IAAI,sBAAsB,IAAI,oBAAoB,EAAE,CAAC;YACnD,wEAAwE;YACxE,MAAM,WAAW,GAAG,cAAc,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC,cAAc,CAAC;YACzE,MAAM,QAAQ,GAAG,YAAa,CAAC,GAAG,IAAI,kBAAkB,CAAC;YACzD,MAAM,CAAC,IAAI,CACT,qDAAqD,YAAa,CAAC,KAAK,IAAI,YAAa,CAAC,IAAI,UAAU,QAAQ,YAAY,WAAW,GAAG,CAC3I,CAAC;YACF,MAAM,OAAO,GAAG,MAAM,CAAC,UAAU,CAAC,oBAAoB,CAAC,CAAC;YACxD,IAAI,CAAC;gBACH,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC;oBACnD,KAAK,EAAE,YAAa,CAAC,KAAK;oBAC1B,IAAI,EAAE,YAAa,CAAC,IAAI;oBACxB,IAAI,EAAE,aAAa;oBACnB,GAAG,CAAC,YAAa,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,YAAa,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;iBACzD,CAAC,CAAC;gBAEH,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,SAAS,IAAI,IAAI,CAAC,EAAE,CAAC;oBAChD,MAAM,IAAI,KAAK,CACb,GAAG,aAAa,OAAO,YAAa,CAAC,KAAK,IAAI,YAAa,CAAC,IAAI,iBAAiB,CAClF,CAAC;gBACJ,CAAC;gBAED,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;gBACtE,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAgB,CAAC;gBAC5C,MAAM,CAAC,IAAI,CACT,0BAA0B,YAAa,CAAC,KAAK,IAAI,YAAa,CAAC,IAAI,IAAI,aAAa,EAAE,CACvF,CAAC;YACJ,CAAC;YAAC,OAAO,CAAM,EAAE,CAAC;gBAChB,IAAI,CAAC,EAAE,MAAM,KAAK,GAAG,IAAI,CAAC,EAAE,MAAM,KAAK,GAAG,EAAE,CAAC;oBAC3C,MAAM,IAAI,KAAK,CACb,+BAA+B,CAAC,CAAC,MAAM,oBAAoB,aAAa,UAAU,YAAa,CAAC,KAAK,IAAI,YAAa,CAAC,IAAI,IAAI;wBAC/H,OAAO,WAAW,uDAAuD;wBACzE,yHAAyH,CAC1H,CAAC;gBACJ,CAAC;gBACD,IAAI,CAAC,EAAE,MAAM,KAAK,GAAG,EAAE,CAAC;oBACtB,MAAM,IAAI,KAAK,CACb,4BAA4B,aAAa,QAAQ,YAAa,CAAC,KAAK,IAAI,YAAa,CAAC,IAAI,UAAU,QAAQ,KAAK;wBACjH,iCAAiC,WAAW,kFAAkF;wBAC9H,+JAA+J,CAChK,CAAC;gBACJ,CAAC;gBACD,MAAM,CAAC,CAAC;YACV,CAAC;QACH,CAAC;aAAK,CAAC;YACL,6DAA6D;YAC7D,MAAM,EAAE,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,CAAC;YAC9B,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,CAAC;YAClC,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,aAAa,CAAC;gBACpD,CAAC,CAAC,aAAa;gBACf,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CACf,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC,IAAI,OAAO,CAAC,GAAG,EAAE,EAChD,aAAa,CACd,CAAC;YAEN,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;gBACpC,MAAM,IAAI,KAAK,CACb,2BAA2B,OAAO,IAAI;oBACtC,yGAAyG,CAC1G,CAAC;YACJ,CAAC;YAED,MAAM,GAAG,IAAI,CAAC,KAAK,CACjB,EAAE,CAAC,OAAO,CAAC,YAAY,CAAC,OAAO,EAAE,OAAO,CAAC,CAC3B,CAAC;YACjB,MAAM,CAAC,IAAI,CAAC,sCAAsC,OAAO,EAAE,CAAC,CAAC;QAC/D,CAAC;QAED,IAAI,CAAC,MAAM,CAAC,aAAa,EAAE,CAAC;YAC1B,MAAM,IAAI,KAAK,CAAC,kDAAkD,CAAC,CAAC;QACtE,CAAC;QACD,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC;YACjC,MAAM,IAAI,KAAK,CAAC,0CAA0C,CAAC,CAAC;QAC9D,CAAC;QAED,YAAY,GAAG,MAAM,CAAC,KAAK,CAAC;QAC5B,MAAM,GAAG,MAAM,CAAC,aAAa,CAAC;QAC9B,MAAM,CAAC,IAAI,CAAC,UAAU,YAAY,CAAC,MAAM,kBAAkB,CAAC,CAAC;QAC7D,MAAM,CAAC,IAAI,CAAC,mCAAmC,MAAM,EAAE,CAAC,CAAC;QAEzD,kBAAkB;QAClB,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC3B,MAAM,IAAI,KAAK,CAAC,0CAA0C,CAAC,CAAC;QAC9D,CAAC;QAED,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC3B,MAAM,IAAI,KAAK,CAAC,0CAA0C,CAAC,CAAC;QAC9D,CAAC;QAED,IAAI,CAAC,UAAU,CAAC,eAAe,CAAC,EAAE,CAAC;YACjC,eAAe,GAAG,kCAAkC,CAAC;QACvD,CAAC;QAED,MAAM,oBAAoB,GAAG,uBAAuB,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,uBAAuB,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;QAC1G,IAAI,oBAAoB,EAAE,CAAC;YACzB,4BAA4B,CAAC,oBAAoB,CAAC,CAAC;QACrD,CAAC;QAED,sBAAsB;QACtB,MAAM,YAAY,GAAG,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC,IAAI,IAAI,CAAC;QAC5D,MAAM,kBAAkB,GAAG,IAAI,CAAC,QAAQ,CAAC,kBAAkB,CAAC,IAAI,EAAE,CAAC;QACnE,MAAM,mBAAmB,GAAG,kBAAkB,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QAC7F,MAAM,WAAW,GAAG,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC,IAAI,UAAU,EAAE,EAAE,CAAC,CAAC;QAC/E,MAAM,KAAK,GAAG,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC;QAE5C,oFAAoF;QAEpF,2BAA2B;QAC3B,IAAI,KAAK,CAAC,WAAW,CAAC,IAAI,WAAW,IAAI,CAAC,EAAE,CAAC;YAC3C,MAAM,IAAI,KAAK,CAAC,mDAAmD,CAAC,CAAC;QACvE,CAAC;QAED,0FAA0F;QAC1F,MAAM,UAAU,GAA+B;YAC7C,KAAK,EAAE,OAAO,CAAC,IAAI,CAAC,KAAK;YACzB,IAAI,EAAE,OAAO,CAAC,IAAI,CAAC,IAAI;YACvB,MAAM,EAAE,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,aAAa,EAAE,EAAE,CAAC;YAC9C,GAAG,EAAE,OAAO,CAAC,GAAG;YAChB,KAAK,EAAE,OAAO,CAAC,KAAK,CAAC,QAAQ,EAAE;YAC/B,SAAS,EAAE,OAAO,CAAC,SAAS,CAAC,QAAQ,EAAE;SACxC,CAAC;QAEF,mGAAmG;QACnG,MAAM,iBAAiB,GAAG,cAAc,CAAC,MAAM,GAAG,CAAC,CAAC;QACpD,IAAI,CAAC,iBAAiB,IAAI,eAAe,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACrD,MAAM,IAAI,KAAK,CAAC,wEAAwE,CAAC,CAAC;QAC5F,CAAC;QAED,MAAM,MAAM,GAAiB;YAC3B,QAAQ;YACR,oBAAoB;YACpB,QAAQ;YACR,kBAAkB;YAClB,eAAe;YACf,YAAY,EAAE,YAAY,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC;YACxE,eAAe,EAAE,CAAC,GAAG,IAAI,GAAG,CAAC,CAAC,YAAY,EAAE,GAAG,mBAAmB,CAAC,CAAC,CAAC;YACrE,WAAW;YACX,KAAK;YACL,UAAU;YACV,MAAM;YACN,YAAY;YAEZ,eAAe;YACf,cAAc;SACf,CAAC;QAEF,MAAM,CAAC,KAAK,CAAC,yBAAyB,EAAE;YACtC,QAAQ,EAAE,MAAM,CAAC,YAAY,CAAC,MAAM;YACpC,OAAO,EAAE,MAAM,CAAC,WAAW;SAC5B,CAAC,CAAC;QAEH,OAAO,MAAM,CAAC;IAChB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,CAAC,KAAK,CAAC,yBAAyB,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC;QACnD,MAAM,KAAK,CAAC;IACd,CAAC;AACH,CAAC;AAED,SAAS,WAAW,CAAC,IAAY;IAC/B,MAAM,SAAS,GAAG,iEAAiE,CAAC;IACpF,OAAO,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC9B,CAAC;AAED,SAAS,UAAU,CAAC,GAAW;IAC7B,IAAI,CAAC;QACH,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC;QACb,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED,SAAS,4BAA4B,CAAC,GAAW;IAC/C,gFAAgF;IAChF,MAAM,OAAO,GAAG,+DAA+D,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC1F,MAAM,aAAa,GAAG,yFAAyF,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC1H,IAAI,CAAC,OAAO,IAAI,CAAC,aAAa,EAAE,CAAC;QAC/B,MAAM,IAAI,KAAK,CAAC,yGAAyG,CAAC,CAAC;IAC7H,CAAC;AACH,CAAC"} \ No newline at end of file diff --git a/src/file/fileProcessor.ts b/src/file/fileProcessor.ts index 0dab57a..b261f49 100644 --- a/src/file/fileProcessor.ts +++ b/src/file/fileProcessor.ts @@ -169,7 +169,11 @@ export class FileProcessor { } } - async getAllRepoFiles(): Promise { + async getAllRepoFiles(atRef?: string): Promise { + if (atRef) { + return this.getRepoFilesAtRef(atRef); + } + const patterns = this.getGlobPatterns().join('\n'); const globber = await glob.create(patterns); const files = await globber.glob(); @@ -244,6 +248,94 @@ export class FileProcessor { return result; } + /** + * List repository files at a specific git ref using `git ls-tree`. + * This avoids reading from the working tree which may include uncommitted + * or PR-only changes that shouldn't appear in the full scan. + */ + private async getRepoFilesAtRef(ref: string): Promise { + const workspace = process.env['GITHUB_WORKSPACE'] || process.cwd(); + + let treeOutput: string; + try { + treeOutput = execSync( + `git ls-tree -r --long "${ref}"`, + { cwd: workspace, encoding: 'utf-8', maxBuffer: 50 * 1024 * 1024 } + ).trim(); + } catch (e) { + this.logger.warn(`Failed to list files at ref ${ref}`, { error: e }); + return []; + } + + if (!treeOutput) { + return []; + } + + const maxBytes = this.config.maxFileSize; + const result: FileMetadata[] = []; + + for (const line of treeOutput.split('\n')) { + // git ls-tree --long format: blob \t + const match = line.match(/^\d+ blob ([0-9a-f]+)\s+(\d+)\t(.+)$/); + if (!match) continue; + + const blobSha = match[1]!; + const size = parseInt(match[2]!, 10); + const filePath = match[3]!; + + if (!this.shouldIncludePath(filePath)) continue; + if (size === 0) continue; + + if (size > maxBytes) { + this.logger.warn(`Skipping oversized file during full scan: ${filePath} (${size} bytes > ${maxBytes} bytes)`); + continue; + } + + if (isBinaryPath(filePath)) { + this.logger.info(`Skipping binary file: ${filePath}`); + continue; + } + + try { + const content = execSync( + `git cat-file -p ${blobSha}`, + { cwd: workspace, encoding: 'utf-8', maxBuffer: maxBytes } + ); + + result.push({ + path: filePath, + size, + encoding: 'utf-8', + sha: blobSha, + content, + typeOfChange: 'unknown', + commitTimestamp: new Date().toISOString(), + }); + } catch (e) { + this.logger.warn(`Failed reading file at ${ref}: ${filePath}`, { error: e }); + } + } + + this.logger.info(`Full scan selected ${result.length} files after filtering (at ref ${ref}).`); + + // --- Resolve author info for each file --- + const fileAuthorMap = this.getFileAuthorEmails(result); + const uniqueEmails = new Set(Object.values(fileAuthorMap).filter(Boolean) as string[]); + const userIdMap = await this.resolveUserIds(uniqueEmails); + + for (const file of result) { + const authorEmail = fileAuthorMap[file.path]; + if (authorEmail) { + file.authorEmail = authorEmail; + file.authorId = userIdMap[authorEmail.toLowerCase()] || this.config.userId; + file.committerEmail = file.committerEmail || authorEmail; + file.committerId = file.committerId || file.authorId; + } + } + + return result; + } + /** * Fetch recent commits for the default branch (used during full scans). * When `upToSha` is provided, only commits up to and including that SHA are diff --git a/src/runner/fullScanService.ts b/src/runner/fullScanService.ts index 6fe141a..85afe7a 100644 --- a/src/runner/fullScanService.ts +++ b/src/runner/fullScanService.ts @@ -113,7 +113,7 @@ export class FullScanService { : 'State tracking disabled; scanning full repository.' ); - const allFiles = await this.fileProcessor.getAllRepoFiles(); + const allFiles = await this.fileProcessor.getAllRepoFiles(currentEventSha); const fullScanFileCount = allFiles.length; // Mark payloads as full-scan so AiAgentInfo uses email + "fullscan" version From 7643a3fb254c3c81f25759b65b2752a7a9ac70f6 Mon Sep 17 00:00:00 2001 From: Rishabh Chawla Date: Thu, 2 Apr 2026 14:21:18 -0700 Subject: [PATCH 13/20] Some more updates --- dist/index.js | 8 ++++++++ src/file/fileProcessor.ts | 8 ++++++++ 2 files changed, 16 insertions(+) diff --git a/dist/index.js b/dist/index.js index f791977..0e000ea 100644 --- a/dist/index.js +++ b/dist/index.js @@ -62562,6 +62562,14 @@ class FileProcessor { async getRepoFilesAtRef(ref) { const workspace = process.env['GITHUB_WORKSPACE'] || process.cwd(); let treeOutput; + // The ref may not be available in a shallow clone (e.g. PR base SHA). + // Fetch it so git ls-tree can resolve it. + try { + (0,external_child_process_namespaceObject.execSync)(`git fetch --depth=1 origin ${ref}`, { cwd: workspace, encoding: 'utf-8', timeout: 30000 }); + } + catch { + // Already available locally — continue + } try { treeOutput = (0,external_child_process_namespaceObject.execSync)(`git ls-tree -r --long "${ref}"`, { cwd: workspace, encoding: 'utf-8', maxBuffer: 50 * 1024 * 1024 }).trim(); } diff --git a/src/file/fileProcessor.ts b/src/file/fileProcessor.ts index b261f49..4781e00 100644 --- a/src/file/fileProcessor.ts +++ b/src/file/fileProcessor.ts @@ -257,6 +257,14 @@ export class FileProcessor { const workspace = process.env['GITHUB_WORKSPACE'] || process.cwd(); let treeOutput: string; + // The ref may not be available in a shallow clone (e.g. PR base SHA). + // Fetch it so git ls-tree can resolve it. + try { + execSync(`git fetch --depth=1 origin ${ref}`, { cwd: workspace, encoding: 'utf-8', timeout: 30000 }); + } catch { + // Already available locally — continue + } + try { treeOutput = execSync( `git ls-tree -r --long "${ref}"`, From 655f9694cc817d7af827821edb3f20b0ab681000 Mon Sep 17 00:00:00 2001 From: Rishabh Chawla Date: Thu, 2 Apr 2026 14:47:39 -0700 Subject: [PATCH 14/20] Some more updates --- dist/index.js | 67 ++++++++++++++++--------------- src/api/purviewClient.ts | 2 +- src/file/fileProcessor.ts | 20 ++++----- src/payload/payloadBuilder.ts | 6 +-- src/runner/fullScanService.ts | 6 +-- src/runner/gitHubActionsRunner.ts | 20 +++++---- src/utils/userResolver.ts | 4 +- src/validation/inputValidator.ts | 10 ++--- 8 files changed, 71 insertions(+), 64 deletions(-) diff --git a/dist/index.js b/dist/index.js index 0e000ea..feda887 100644 --- a/dist/index.js +++ b/dist/index.js @@ -62070,7 +62070,7 @@ class PurviewClient { if (!this.authToken) { throw new Error('Authentication token not set'); } - this.logger.info(`Uploading signal for ${payload.contentMetadata.contentEntries[0]?.identifier}`); + this.logger.debug(`Uploading signal for ${payload.contentMetadata.contentEntries[0]?.identifier}`); const endpoint = `${this.baseUrl}/users/${payload.userId}/dataSecurityAndGovernance/activities/contentActivities`; let payloadString = JSON.stringify(payload, this.jsonReplacer); try { @@ -62313,11 +62313,11 @@ class UserResolver { if (email) { const userId = this.emailToUserId.get(email.toLowerCase()); if (userId) { - this.logger.info(`Resolved userId for email '${email}': ${userId} (from users.json mapping)`); + this.logger.debug(`Resolved userId for email '${email}': ${userId} (from users.json mapping)`); return userId; } } - this.logger.info(`No users.json mapping found for email '${email ?? 'unknown'}', using default userId: ${this.defaultUserId}`); + this.logger.debug(`No users.json mapping found for email '${email ?? 'unknown'}', using default userId: ${this.defaultUserId}`); return this.defaultUserId; } /** @@ -62400,7 +62400,7 @@ class FileProcessor { const cached = this.graphUserIdCache.get(email); if (cached) { resolved[email] = cached; - this.logger.info(`Graph cache hit for '${email}': ${cached}`); + this.logger.debug(`Graph cache hit for '${email}': ${cached}`); } else { needsGraph.push(email); @@ -62417,7 +62417,7 @@ class FileProcessor { const upn = user.userPrincipalName.toLowerCase(); this.graphUserIdCache.set(upn, user.id); resolved[upn] = user.id; - this.logger.info(`Graph API resolved '${upn}': ${user.id}`); + this.logger.debug(`Graph API resolved '${upn}': ${user.id}`); } } // Cache "not found" for emails that were queried but not in the response @@ -62425,7 +62425,7 @@ class FileProcessor { for (const email of needsGraph) { if (!this.graphUserIdCache.has(email.toLowerCase())) { this.graphUserIdCache.set(email.toLowerCase(), this.config.userId); - this.logger.info(`Graph API: user '${email}' not found, caching as default userId`); + this.logger.debug(`Graph API: user '${email}' not found, caching as default userId`); } } } @@ -62466,12 +62466,12 @@ class FileProcessor { ? true : includePatterns.some(p => esm_minimatch(normalized, p, { dot: true })); if (!included) { - this.logger.info(`Excluding file '${path}' because it does not match any include patterns.`); + this.logger.debug(`Excluding file '${path}' because it does not match any include patterns.`); return false; } const excluded = excludePatterns.some(p => esm_minimatch(normalized, p, { dot: true })); if (excluded) { - this.logger.info(`Excluding file '${path}' due to exclude pattern match.`); + this.logger.debug(`Excluding file '${path}' due to exclude pattern match.`); } return !excluded; } @@ -62515,7 +62515,7 @@ class FileProcessor { const isBinary = isBinaryPath(filePath); const encoding = isBinary ? 'base64' : 'utf-8'; if (isBinary) { - this.logger.info(`Skipping binary file: ${filePath}`); + this.logger.debug(`Skipping binary file: ${filePath}`); continue; } const buffer = external_fs_.readFileSync(filePath); @@ -62599,7 +62599,7 @@ class FileProcessor { continue; } if (isBinaryPath(filePath)) { - this.logger.info(`Skipping binary file: ${filePath}`); + this.logger.debug(`Skipping binary file: ${filePath}`); continue; } try { @@ -62795,10 +62795,10 @@ class FileProcessor { } this.logger.info(`Processing commit ${commit.sha} with ${commit.files.length} changed file(s).`); const filteredCommitFiles = commit.files.filter((f) => this.shouldIncludePath(f.filename)); - this.logger.info(`Commit ${commit.sha}: ${filteredCommitFiles.length}/${commit.files.length} files match the configured patterns.`); + this.logger.debug(`Commit ${commit.sha}: ${filteredCommitFiles.length}/${commit.files.length} files match the configured patterns.`); for (const file of filteredCommitFiles) { if (isBinaryPath(file.filename)) { - this.logger.info(`Skipping binary file: ${file.filename}`); + this.logger.debug(`Skipping binary file: ${file.filename}`); continue; } let fileContent = file.patch || ""; @@ -63137,7 +63137,7 @@ class FileProcessor { const userIdMap = await this.resolveUserIds(allEmails); const result = []; for (const commit of commitsToProcess) { - this.logger.info(`Processing commit: ${commit.sha}`); + this.logger.debug(`Processing commit: ${commit.sha}`); let userId; if (commit.email) { userId = userIdMap[commit.email.toLowerCase()] || this.config.userId; @@ -63291,7 +63291,7 @@ class PayloadBuilder { } if (locationMatch && isIncluded && !isExcluded) { shouldProcessFile = true; - this.logger.info(`File ${file.path} is in scope.`); + this.logger.debug(`File ${file.path} is in scope.`); break; } } @@ -63358,7 +63358,7 @@ class PayloadBuilder { } } } - this.logger.info(`Scope check result: shouldProcess=${shouldProcess}, executionMode=${executionMode}, matchingActions=${dlpActions.length}`); + this.logger.debug(`Scope check result: shouldProcess=${shouldProcess}, executionMode=${executionMode}, matchingActions=${dlpActions.length}`); return { shouldProcess, dlpActions, executionMode }; } /** @@ -63404,7 +63404,7 @@ class PayloadBuilder { const conversationId = crypto.randomUUID() + PayloadBuilder.correlationIdSuffix; let seqNum = 0; for (const file of files) { - this.logger.info(`Building upload signal request for file: ${file.path}`); + this.logger.debug(`Building upload signal request for file: ${file.path}`); const content = file.content || `File: ${file.path} (${file.size} bytes)`; const userId = file.authorId || this.config.userId; const userEmail = file.authorEmail || prInfo.authorEmail; @@ -64072,7 +64072,7 @@ class FullScanService { await this.sendCommitContentActivity(commitGroup, prInfo, failedPayloads); } else { - this.logger.info(`Full scan: PCA completed for ${commitIdentifier}`); + this.logger.debug(`Full scan: PCA completed for ${commitIdentifier}`); } } } @@ -64239,7 +64239,7 @@ class FullScanService { // Call per-user protection scopes (check cache first) let userPsResponse = userPsCache.get(userId); if (userPsResponse) { - this.logger.info(`Full scan: using cached PS response for user ${userId}`); + this.logger.debug(`Full scan: using cached PS response for user ${userId}`); } else { userPsResponse = await this.purviewClient.searchUserProtectionScope(userId, psRequest); @@ -64275,7 +64275,7 @@ class FullScanService { break; } else { - this.logger.info(`Full scan PCA batch completed for user ${userId}`); + this.logger.debug(`Full scan PCA batch completed for user ${userId}`); } } } @@ -64387,6 +64387,7 @@ class GitHubActionsRunner { } // ─── Outputs & Summary ─── const totalProcessed = fullScanFileCount + diffFileCount; + this.logger.info(`Completed: ${totalProcessed} file(s) processed, ${failedPayloads.length} failed, ${blockedFiles.length} blocked`); setOutput('processed-files', totalProcessed); setOutput('failed-requests', failedPayloads.length); setOutput('blocked-files', JSON.stringify(blockedFiles.map(bf => bf.filePath))); @@ -64436,6 +64437,8 @@ class GitHubActionsRunner { this.logger.warn('No new commits to process'); return 0; } + const totalFiles = commitGroups.reduce((sum, cg) => sum + cg.files.length, 0); + this.logger.info(`Diff flow: processing ${commitGroups.length} commit(s) with ${totalFiles} file(s) total`); const psRequest = this.payloadBuilder.buildProtectionScopesRequest(); const requestLocation = psRequest.locations?.[0]; if (!requestLocation) { @@ -64460,7 +64463,7 @@ class GitHubActionsRunner { const { sha, files } = commitGroup; this.logger.info(`── Processing commit ${sha} with ${files.length} file(s) ──`); if (files.length === 0) { - this.logger.info(`Commit ${sha} has no matching files, skipping`); + this.logger.debug(`Commit ${sha} has no matching files, skipping`); return 0; } // Group files by userId @@ -64476,14 +64479,14 @@ class GitHubActionsRunner { await this.processUserFiles(userId, userFiles, ctx); } await this.sendCommitRequest(commitGroup, ctx); - this.logger.info(`Commit ${sha} processed successfully`); + this.logger.debug(`Commit ${sha} processed successfully`); return files.length; } // ────────────────────────────────────────────────────────────────── // Per-user file processing // ────────────────────────────────────────────────────────────────── async processUserFiles(userId, userFiles, ctx) { - this.logger.info(`Processing ${userFiles.length} file(s) for user ${userId}`); + this.logger.debug(`Processing ${userFiles.length} file(s) for user ${userId}`); const psResult = await this.resolveUserPsWithCache(userId, ctx); if (!psResult) { await this.sendContentActivities(userFiles, ctx.prInfo, ctx.failedPayloads); @@ -64493,7 +64496,7 @@ class GitHubActionsRunner { // Check applicable scopes const scopeCheck = this.payloadBuilder.checkApplicableScopes(psResponse.value, Activity.uploadText, ctx.requestLocation); if (!scopeCheck.shouldProcess) { - this.logger.info(`No matching scopes for user ${userId}, routing ${userFiles.length} file(s) to contentActivities`); + this.logger.debug(`No matching scopes for user ${userId}, routing ${userFiles.length} file(s) to contentActivities`); await this.sendContentActivities(userFiles, ctx.prInfo, ctx.failedPayloads); return; } @@ -64505,7 +64508,7 @@ class GitHubActionsRunner { } } async processFilesInline(userId, userFiles, scopeIdentifier, ctx) { - this.logger.info(`evaluateInline: calling processContent for ${userFiles.length} file(s), user ${userId}`); + this.logger.debug(`evaluateInline: calling processContent for ${userFiles.length} file(s), user ${userId}`); const conversationId = crypto.randomUUID(); let seqNum = 0; for (const file of userFiles) { @@ -64550,7 +64553,7 @@ class GitHubActionsRunner { } } async processFilesOffline(userId, userFiles, ctx) { - this.logger.info(`evaluateOffline: sending ${userFiles.length} file(s) to PCA batch for user ${userId}`); + this.logger.debug(`evaluateOffline: sending ${userFiles.length} file(s) to PCA batch for user ${userId}`); const pcaBatchRequests = this.payloadBuilder.buildProcessContentBatchRequest(userFiles); for (const pcaBatchRequest of pcaBatchRequests) { const pcaResult = await this.purviewClient.processContentAsync(pcaBatchRequest); @@ -64575,7 +64578,7 @@ class GitHubActionsRunner { } let psApiResponse = ctx.userPsCache.get(userId); if (psApiResponse) { - this.logger.info(`Using cached PS response for user ${userId}`); + this.logger.debug(`Using cached PS response for user ${userId}`); } else { psApiResponse = await this.purviewClient.searchUserProtectionScope(userId, ctx.psRequest); @@ -64605,7 +64608,7 @@ class GitHubActionsRunner { async sendCommitRequest(commitGroup, ctx) { const commitUserId = commitGroup.authorId || this.config.userId; const commitIdentifier = `commit:${commitGroup.sha}`; - this.logger.info(`Sending commit-level request for ${commitIdentifier}, user ${commitUserId}`); + this.logger.debug(`Sending commit-level request for ${commitIdentifier}, user ${commitUserId}`); const psResult = await this.resolveUserPsWithCache(commitUserId, ctx); if (!psResult) { await this.sendCommitContentActivity(commitGroup, ctx.prInfo, ctx.failedPayloads); @@ -64908,11 +64911,11 @@ async function validateInputs() { : ''; const isExternalWorkflowRepo = !!workflowRepo && workflowRepoFullName !== targetRepoFullName; // Debug: log workflow repo resolution details - logger.info(`GITHUB_WORKFLOW_REF = '${process.env['GITHUB_WORKFLOW_REF'] || ''}'`); - logger.info(`Parsed workflowRepo = ${workflowRepo ? JSON.stringify(workflowRepo) : 'undefined'}`); - logger.info(`Target repo = '${targetRepoFullName}', Workflow repo = '${workflowRepoFullName}'`); - logger.info(`isExternalWorkflowRepo = ${isExternalWorkflowRepo}`); - logger.info(`stateRepoToken present = ${!!stateRepoToken}`); + logger.debug(`GITHUB_WORKFLOW_REF = '${process.env['GITHUB_WORKFLOW_REF'] || ''}'`); + logger.debug(`Parsed workflowRepo = ${workflowRepo ? JSON.stringify(workflowRepo) : 'undefined'}`); + logger.debug(`Target repo = '${targetRepoFullName}', Workflow repo = '${workflowRepoFullName}'`); + logger.debug(`isExternalWorkflowRepo = ${isExternalWorkflowRepo}`); + logger.debug(`stateRepoToken present = ${!!stateRepoToken}`); let parsed; // Determine the best token for fetching users.json from the workflow repo. // Prefer state-repo-token, fall back to GITHUB_TOKEN (works for public repos diff --git a/src/api/purviewClient.ts b/src/api/purviewClient.ts index 5f44b39..ac54b47 100644 --- a/src/api/purviewClient.ts +++ b/src/api/purviewClient.ts @@ -106,7 +106,7 @@ export class PurviewClient { throw new Error('Authentication token not set'); } - this.logger.info(`Uploading signal for ${payload.contentMetadata.contentEntries[0]?.identifier}`); + this.logger.debug(`Uploading signal for ${payload.contentMetadata.contentEntries[0]?.identifier}`); const endpoint = `${this.baseUrl}/users/${payload.userId}/dataSecurityAndGovernance/activities/contentActivities`; let payloadString: string = JSON.stringify(payload, this.jsonReplacer); diff --git a/src/file/fileProcessor.ts b/src/file/fileProcessor.ts index 4781e00..25c12d2 100644 --- a/src/file/fileProcessor.ts +++ b/src/file/fileProcessor.ts @@ -66,7 +66,7 @@ export class FileProcessor { const cached = this.graphUserIdCache.get(email); if (cached) { resolved[email] = cached; - this.logger.info(`Graph cache hit for '${email}': ${cached}`); + this.logger.debug(`Graph cache hit for '${email}': ${cached}`); } else { needsGraph.push(email); } @@ -84,7 +84,7 @@ export class FileProcessor { const upn = user.userPrincipalName.toLowerCase(); this.graphUserIdCache.set(upn, user.id); resolved[upn] = user.id; - this.logger.info(`Graph API resolved '${upn}': ${user.id}`); + this.logger.debug(`Graph API resolved '${upn}': ${user.id}`); } } @@ -93,7 +93,7 @@ export class FileProcessor { for (const email of needsGraph) { if (!this.graphUserIdCache.has(email.toLowerCase())) { this.graphUserIdCache.set(email.toLowerCase(), this.config.userId); - this.logger.info(`Graph API: user '${email}' not found, caching as default userId`); + this.logger.debug(`Graph API: user '${email}' not found, caching as default userId`); } } } catch (e) { @@ -141,14 +141,14 @@ export class FileProcessor { : includePatterns.some(p => minimatch(normalized, p, { dot: true })); if (!included) { - this.logger.info(`Excluding file '${path}' because it does not match any include patterns.`); + this.logger.debug(`Excluding file '${path}' because it does not match any include patterns.`); return false; } const excluded = excludePatterns.some(p => minimatch(normalized, p, { dot: true })); if (excluded) { - this.logger.info(`Excluding file '${path}' due to exclude pattern match.`); + this.logger.debug(`Excluding file '${path}' due to exclude pattern match.`); } return !excluded; @@ -203,7 +203,7 @@ export class FileProcessor { const encoding = isBinary ? 'base64' : 'utf-8'; if (isBinary) { - this.logger.info(`Skipping binary file: ${filePath}`); + this.logger.debug(`Skipping binary file: ${filePath}`); continue; } @@ -300,7 +300,7 @@ export class FileProcessor { } if (isBinaryPath(filePath)) { - this.logger.info(`Skipping binary file: ${filePath}`); + this.logger.debug(`Skipping binary file: ${filePath}`); continue; } @@ -531,11 +531,11 @@ export class FileProcessor { const filteredCommitFiles = commit.files!.filter((f: CommitFile) => this.shouldIncludePath(f.filename)); - this.logger.info(`Commit ${commit.sha}: ${filteredCommitFiles.length}/${commit.files.length} files match the configured patterns.`); + this.logger.debug(`Commit ${commit.sha}: ${filteredCommitFiles.length}/${commit.files.length} files match the configured patterns.`); for (const file of filteredCommitFiles) { if (isBinaryPath(file.filename)) { - this.logger.info(`Skipping binary file: ${file.filename}`); + this.logger.debug(`Skipping binary file: ${file.filename}`); continue; } @@ -919,7 +919,7 @@ export class FileProcessor { const result: CommitFiles[] = []; for (const commit of commitsToProcess) { - this.logger.info(`Processing commit: ${commit.sha}`); + this.logger.debug(`Processing commit: ${commit.sha}`); let userId: string | undefined; if (commit.email) { userId = userIdMap[commit.email.toLowerCase()] || this.config.userId; diff --git a/src/payload/payloadBuilder.ts b/src/payload/payloadBuilder.ts index dd0e517..ad045c8 100644 --- a/src/payload/payloadBuilder.ts +++ b/src/payload/payloadBuilder.ts @@ -122,7 +122,7 @@ export class PayloadBuilder { if (locationMatch && isIncluded && !isExcluded) { shouldProcessFile = true; - this.logger.info(`File ${file.path} is in scope.`); + this.logger.debug(`File ${file.path} is in scope.`); break; } } @@ -203,7 +203,7 @@ export class PayloadBuilder { } } - this.logger.info( + this.logger.debug( `Scope check result: shouldProcess=${shouldProcess}, executionMode=${executionMode}, matchingActions=${dlpActions.length}` ); @@ -260,7 +260,7 @@ export class PayloadBuilder { let seqNum = 0; for (const file of files) { - this.logger.info(`Building upload signal request for file: ${file.path}`); + this.logger.debug(`Building upload signal request for file: ${file.path}`); const content = file.content || `File: ${file.path} (${file.size} bytes)`; const userId = file.authorId || this.config.userId; diff --git a/src/runner/fullScanService.ts b/src/runner/fullScanService.ts index 85afe7a..2d82761 100644 --- a/src/runner/fullScanService.ts +++ b/src/runner/fullScanService.ts @@ -224,7 +224,7 @@ export class FullScanService { failedPayloads.push(`pca-fullscan-commit-${commitGroup.sha}`); await this.sendCommitContentActivity(commitGroup, prInfo, failedPayloads); } else { - this.logger.info(`Full scan: PCA completed for ${commitIdentifier}`); + this.logger.debug(`Full scan: PCA completed for ${commitIdentifier}`); } } } @@ -423,7 +423,7 @@ export class FullScanService { // Call per-user protection scopes (check cache first) let userPsResponse = userPsCache.get(userId); if (userPsResponse) { - this.logger.info(`Full scan: using cached PS response for user ${userId}`); + this.logger.debug(`Full scan: using cached PS response for user ${userId}`); } else { userPsResponse = await this.purviewClient.searchUserProtectionScope(userId, psRequest); if (userPsResponse.success) { @@ -461,7 +461,7 @@ export class FullScanService { await this.sendContentActivities(userFiles, prInfo, failedPayloads); break; } else { - this.logger.info(`Full scan PCA batch completed for user ${userId}`); + this.logger.debug(`Full scan PCA batch completed for user ${userId}`); } } } diff --git a/src/runner/gitHubActionsRunner.ts b/src/runner/gitHubActionsRunner.ts index eae39dc..7579b68 100644 --- a/src/runner/gitHubActionsRunner.ts +++ b/src/runner/gitHubActionsRunner.ts @@ -95,6 +95,7 @@ export class GitHubActionsRunner { // ─── Outputs & Summary ─── const totalProcessed = fullScanFileCount + diffFileCount; + this.logger.info(`Completed: ${totalProcessed} file(s) processed, ${failedPayloads.length} failed, ${blockedFiles.length} blocked`); core.setOutput('processed-files', totalProcessed); core.setOutput('failed-requests', failedPayloads.length); core.setOutput('blocked-files', JSON.stringify(blockedFiles.map(bf => bf.filePath))); @@ -158,6 +159,9 @@ export class GitHubActionsRunner { return 0; } + const totalFiles = commitGroups.reduce((sum, cg) => sum + cg.files.length, 0); + this.logger.info(`Diff flow: processing ${commitGroups.length} commit(s) with ${totalFiles} file(s) total`); + const psRequest = this.payloadBuilder.buildProtectionScopesRequest(); const requestLocation = psRequest.locations?.[0]; if (!requestLocation) { @@ -188,7 +192,7 @@ export class GitHubActionsRunner { this.logger.info(`── Processing commit ${sha} with ${files.length} file(s) ──`); if (files.length === 0) { - this.logger.info(`Commit ${sha} has no matching files, skipping`); + this.logger.debug(`Commit ${sha} has no matching files, skipping`); return 0; } @@ -209,7 +213,7 @@ export class GitHubActionsRunner { await this.sendCommitRequest(commitGroup, ctx); - this.logger.info(`Commit ${sha} processed successfully`); + this.logger.debug(`Commit ${sha} processed successfully`); return files.length; } @@ -222,7 +226,7 @@ export class GitHubActionsRunner { userFiles: FileMetadata[], ctx: DiffPathContext ): Promise { - this.logger.info(`Processing ${userFiles.length} file(s) for user ${userId}`); + this.logger.debug(`Processing ${userFiles.length} file(s) for user ${userId}`); const psResult = await this.resolveUserPsWithCache(userId, ctx); if (!psResult) { @@ -240,7 +244,7 @@ export class GitHubActionsRunner { ); if (!scopeCheck.shouldProcess) { - this.logger.info(`No matching scopes for user ${userId}, routing ${userFiles.length} file(s) to contentActivities`); + this.logger.debug(`No matching scopes for user ${userId}, routing ${userFiles.length} file(s) to contentActivities`); await this.sendContentActivities(userFiles, ctx.prInfo, ctx.failedPayloads); return; } @@ -258,7 +262,7 @@ export class GitHubActionsRunner { scopeIdentifier: string, ctx: DiffPathContext ): Promise { - this.logger.info(`evaluateInline: calling processContent for ${userFiles.length} file(s), user ${userId}`); + this.logger.debug(`evaluateInline: calling processContent for ${userFiles.length} file(s), user ${userId}`); const conversationId = crypto.randomUUID(); let seqNum = 0; @@ -317,7 +321,7 @@ export class GitHubActionsRunner { userFiles: FileMetadata[], ctx: DiffPathContext ): Promise { - this.logger.info(`evaluateOffline: sending ${userFiles.length} file(s) to PCA batch for user ${userId}`); + this.logger.debug(`evaluateOffline: sending ${userFiles.length} file(s) to PCA batch for user ${userId}`); const pcaBatchRequests = this.payloadBuilder.buildProcessContentBatchRequest(userFiles); for (const pcaBatchRequest of pcaBatchRequests) { const pcaResult = await this.purviewClient.processContentAsync(pcaBatchRequest); @@ -349,7 +353,7 @@ export class GitHubActionsRunner { let psApiResponse = ctx.userPsCache.get(userId); if (psApiResponse) { - this.logger.info(`Using cached PS response for user ${userId}`); + this.logger.debug(`Using cached PS response for user ${userId}`); } else { psApiResponse = await this.purviewClient.searchUserProtectionScope(userId, ctx.psRequest); if (psApiResponse.success) { @@ -382,7 +386,7 @@ export class GitHubActionsRunner { private async sendCommitRequest(commitGroup: CommitFiles, ctx: DiffPathContext): Promise { const commitUserId = commitGroup.authorId || this.config.userId; const commitIdentifier = `commit:${commitGroup.sha}`; - this.logger.info(`Sending commit-level request for ${commitIdentifier}, user ${commitUserId}`); + this.logger.debug(`Sending commit-level request for ${commitIdentifier}, user ${commitUserId}`); const psResult = await this.resolveUserPsWithCache(commitUserId, ctx); if (!psResult) { diff --git a/src/utils/userResolver.ts b/src/utils/userResolver.ts index 49c61fc..44e5349 100644 --- a/src/utils/userResolver.ts +++ b/src/utils/userResolver.ts @@ -41,12 +41,12 @@ export class UserResolver { if (email) { const userId = this.emailToUserId.get(email.toLowerCase()); if (userId) { - this.logger.info(`Resolved userId for email '${email}': ${userId} (from users.json mapping)`); + this.logger.debug(`Resolved userId for email '${email}': ${userId} (from users.json mapping)`); return userId; } } - this.logger.info(`No users.json mapping found for email '${email ?? 'unknown'}', using default userId: ${this.defaultUserId}`); + this.logger.debug(`No users.json mapping found for email '${email ?? 'unknown'}', using default userId: ${this.defaultUserId}`); return this.defaultUserId; } diff --git a/src/validation/inputValidator.ts b/src/validation/inputValidator.ts index 72b001e..cc3ee2f 100644 --- a/src/validation/inputValidator.ts +++ b/src/validation/inputValidator.ts @@ -40,11 +40,11 @@ export async function validateInputs(): Promise { !!workflowRepo && workflowRepoFullName !== targetRepoFullName; // Debug: log workflow repo resolution details - logger.info(`GITHUB_WORKFLOW_REF = '${process.env['GITHUB_WORKFLOW_REF'] || ''}'`); - logger.info(`Parsed workflowRepo = ${workflowRepo ? JSON.stringify(workflowRepo) : 'undefined'}`); - logger.info(`Target repo = '${targetRepoFullName}', Workflow repo = '${workflowRepoFullName}'`); - logger.info(`isExternalWorkflowRepo = ${isExternalWorkflowRepo}`); - logger.info(`stateRepoToken present = ${!!stateRepoToken}`); + logger.debug(`GITHUB_WORKFLOW_REF = '${process.env['GITHUB_WORKFLOW_REF'] || ''}'`); + logger.debug(`Parsed workflowRepo = ${workflowRepo ? JSON.stringify(workflowRepo) : 'undefined'}`); + logger.debug(`Target repo = '${targetRepoFullName}', Workflow repo = '${workflowRepoFullName}'`); + logger.debug(`isExternalWorkflowRepo = ${isExternalWorkflowRepo}`); + logger.debug(`stateRepoToken present = ${!!stateRepoToken}`); let parsed: UsersConfig; From d9785bd0d31801d34aea7e2a5dafb7db139f84be Mon Sep 17 00:00:00 2001 From: Rishabh Chawla Date: Thu, 2 Apr 2026 18:20:15 -0700 Subject: [PATCH 15/20] Some more updates --- dist/index.js | 383 +++++++++++++++++++-------- flow.md | 47 ++-- src/config/types.ts | 1 + src/file/fileProcessor.ts | 1 + src/payload/payloadBuilder.ts | 336 ++++++++++++++++++----- src/runner/fullScanService.ts | 38 +-- src/runner/gitHubActionsRunner.ts | 71 ++--- tests/payload/payloadBuilder.test.ts | 16 +- 8 files changed, 653 insertions(+), 240 deletions(-) diff --git a/dist/index.js b/dist/index.js index feda887..a4dea68 100644 --- a/dist/index.js +++ b/dist/index.js @@ -62767,6 +62767,7 @@ class FileProcessor { title: title, url: url, prNumber: pr["number"], + body: pr["body"] || undefined, }; } async getFilesForCommit(commitSha, authorId, committerId) { @@ -63191,7 +63192,8 @@ class FileProcessor { class PayloadBuilder { config; logger; - maxPayloadSize = 1024 * 1024 * 3; // 3MB + maxContentSize = 1024 * 1024 * 3; // 3 MB — max for the content data field + maxRequestSize = 1024 * 1024 * 3.7; // 3.7 MB — max for the complete request static domain = "github.com"; static scopeActivity = "uploadText"; static appName = "GitHub"; @@ -63201,6 +63203,8 @@ class PayloadBuilder { isFullScan = false; /** PR number, set when processing a pull request event. */ prNumber; + /** PR description/body, set when processing a pull request event. */ + prDescription; constructor(config) { this.config = config; this.logger = new logger_Logger('PayloadBuilder'); @@ -63369,18 +63373,20 @@ class PayloadBuilder { const singleCTP = this.createContentToProcess(file, conversationId, messageId); const singleRequest = { contentToProcess: singleCTP }; const requestSize = JSON.stringify(singleRequest).length; - if (requestSize <= this.maxPayloadSize) { + if (requestSize <= this.maxRequestSize) { return [singleRequest]; } - // Split content into chunks that fit within maxPayloadSize + // Split content into chunks that fit within maxContentSize const overhead = requestSize - content.length; - const maxContentPerChunk = this.maxPayloadSize - overhead - 100; // safety margin + const maxContentPerChunk = this.maxContentSize - overhead - 100; // safety margin const requests = []; + let partNumber = 1; for (let i = 0; i < content.length; i += maxContentPerChunk) { const chunk = content.substring(i, Math.min(i + maxContentPerChunk, content.length)); const isLastChunk = i + maxContentPerChunk >= content.length; - const chunkCTP = this.createContentToProcess(file, conversationId, messageId + requests.length, !isLastChunk, chunk); + const chunkCTP = this.createContentToProcess(file, conversationId, messageId + requests.length, !isLastChunk, chunk, partNumber); requests.push({ contentToProcess: chunkCTP }); + partNumber++; } this.logger.info(`Split file ${file.path} into ${requests.length} processContent request(s)`); return requests; @@ -63410,7 +63416,7 @@ class PayloadBuilder { const userEmail = file.authorEmail || prInfo.authorEmail; const singleCTP = this.createContentToProcess(file, conversationId, seqNum); const singleSize = JSON.stringify(singleCTP).length + 200; // account for wrapper fields - if (singleSize <= this.maxPayloadSize) { + if (singleSize <= this.maxRequestSize) { requests.push({ id: crypto.randomUUID() + PayloadBuilder.correlationIdSuffix, userId, @@ -63423,11 +63429,12 @@ class PayloadBuilder { else { // Split content into chunks const overhead = singleSize - content.length; - const maxContentPerChunk = this.maxPayloadSize - overhead - 100; + const maxContentPerChunk = this.maxContentSize - overhead - 100; + let partNumber = 1; for (let i = 0; i < content.length; i += maxContentPerChunk) { const chunk = content.substring(i, Math.min(i + maxContentPerChunk, content.length)); const isLastChunk = i + maxContentPerChunk >= content.length; - const chunkCTP = this.createContentToProcess(file, conversationId, seqNum, !isLastChunk, chunk); + const chunkCTP = this.createContentToProcess(file, conversationId, seqNum, !isLastChunk, chunk, partNumber); requests.push({ id: crypto.randomUUID() + PayloadBuilder.correlationIdSuffix, userId, @@ -63436,6 +63443,7 @@ class PayloadBuilder { contentMetadata: chunkCTP, }); seqNum++; + partNumber++; } this.logger.info(`Split file ${file.path} into multiple upload signal request(s)`); } @@ -63458,18 +63466,19 @@ class PayloadBuilder { requestId: crypto.randomUUID(), }; const itemSize = JSON.stringify(singleItem).length; - if (itemSize <= this.maxPayloadSize) { + if (itemSize <= this.maxRequestSize) { allItems.push(singleItem); seqNum++; } else { // Single file exceeds limit — split its content into chunks const overhead = itemSize - content.length; - const maxContentPerChunk = this.maxPayloadSize - overhead - 100; + const maxContentPerChunk = this.maxContentSize - overhead - 100; + let partNumber = 1; for (let i = 0; i < content.length; i += maxContentPerChunk) { const chunk = content.substring(i, Math.min(i + maxContentPerChunk, content.length)); const isLastChunk = i + maxContentPerChunk >= content.length; - const chunkCTP = this.createContentToProcess(file, conversationId, seqNum, !isLastChunk, chunk); + const chunkCTP = this.createContentToProcess(file, conversationId, seqNum, !isLastChunk, chunk, partNumber); allItems.push({ contentToProcess: chunkCTP, userId, @@ -63477,17 +63486,18 @@ class PayloadBuilder { requestId: crypto.randomUUID(), }); seqNum++; + partNumber++; } } } - // Split items into batches that fit within maxPayloadSize + // Split items into batches that fit within maxRequestSize const batches = []; let currentItems = []; let currentSize = 0; - const batchOverhead = 50; + const batchOverhead = 200; for (const item of allItems) { const itemSize = JSON.stringify(item).length; - if (currentItems.length > 0 && currentSize + itemSize + batchOverhead > this.maxPayloadSize) { + if (currentItems.length > 0 && currentSize + itemSize + batchOverhead > this.maxRequestSize) { batches.push({ processContentRequests: currentItems }); currentItems = []; currentSize = 0; @@ -63500,7 +63510,7 @@ class PayloadBuilder { } return batches; } - createContentToProcess(file, conversationId, messageId, isTruncated = false, contentOverride) { + createContentToProcess(file, conversationId, messageId, isTruncated = false, contentOverride, partNumber) { let userId = file.authorId; const usingDefaultUser = !userId || userId === this.config.userId; if (!userId) { @@ -63535,7 +63545,7 @@ class PayloadBuilder { content: fileContent, accessedResources_v2: [{ identifier: this.buildResourceIdentifier(file.sha || file.path), - name: this.buildFileResourceName(file.path), + name: this.buildFileResourceName(file.path) + (partNumber != null ? ` Part: ${partNumber}` : ''), url: fileUrl, accessType: this.mapChangeTypeToAccessType(file.typeOfChange), status: 'success', @@ -63567,9 +63577,15 @@ class PayloadBuilder { * Build the text content representing a git commit's metadata. */ buildCommitContentText(commitGroup) { - const lines = [ - `Commit: ${commitGroup.sha}`, - ]; + const lines = []; + if (this.prNumber != null) { + lines.push(`PR: #${this.prNumber}`); + if (this.prDescription) { + lines.push(`Description: ${this.prDescription}`); + } + lines.push(''); + } + lines.push(`Commit: ${commitGroup.sha}`); if (commitGroup.message) { lines.push(`Message: ${commitGroup.message}`); } @@ -63594,45 +63610,54 @@ class PayloadBuilder { return lines.join('\n'); } /** - * Build a ContentToProcess for a git commit (commit-level metadata request). + * Build the accessedResources array for a commit. */ - buildCommitContentToProcess(commitGroup, conversationId, sequenceNumber) { - const now = new Date().toISOString(); - const commitContent = this.buildCommitContentText(commitGroup); - const commitIdentifier = `commit:${commitGroup.sha}`; - const usingDefaultUser = !commitGroup.authorId || commitGroup.authorId === this.config.userId; - const fileContent = { - "@odata.type": "microsoft.graph.textContent", - data: commitContent, - }; - const agents = []; - if (commitGroup.committerId || commitGroup.committerEmail) { - agents.push({ - identifier: commitGroup.committerId || commitGroup.committerEmail || '', - name: commitGroup.committerEmail || undefined, - version: this.isFullScan ? 'fullscan' : (usingDefaultUser ? this.config.userId : undefined), - }); - } + buildCommitAccessedResources(commitGroup, partSuffix = '') { const repoBaseUrl = `https://${PayloadBuilder.domain}/${this.config.repository.owner}/${this.config.repository.repo}`; const commitUrl = `${repoBaseUrl}/commit/${commitGroup.sha}`; - const accessedResources = [{ + const resources = [{ identifier: this.buildResourceIdentifier(commitGroup.sha), - name: `Repo: ${this.config.repository.repo} Commit: ${commitGroup.sha}`, + name: `Repo: ${this.config.repository.repo} Commit: ${commitGroup.sha}${partSuffix}`, url: commitUrl, accessType: 'write', status: 'success', isCrossPromptInjectionDetected: false, }]; for (const file of commitGroup.files) { - accessedResources.push({ + resources.push({ identifier: this.buildResourceIdentifier(file.sha || file.path), - name: this.buildFileResourceName(file.path), + name: this.buildFileResourceName(file.path) + partSuffix, url: `${repoBaseUrl}/blob/${this.config.repository.branch}/${file.path}`, accessType: this.mapChangeTypeToAccessType(file.typeOfChange), status: 'success', isCrossPromptInjectionDetected: false, }); } + return resources; + } + /** + * Build a ContentToProcess for a git commit (commit-level metadata request). + * Accepts optional accessedResources override for splitting large resource arrays. + */ + buildCommitContentToProcess(commitGroup, conversationId, sequenceNumber, isTruncated = false, contentOverride, partNumber, accessedResourcesOverride) { + const now = new Date().toISOString(); + const commitContent = contentOverride ?? this.buildCommitContentText(commitGroup); + const commitIdentifier = `commit:${commitGroup.sha}`; + const usingDefaultUser = !commitGroup.authorId || commitGroup.authorId === this.config.userId; + const agents = []; + if (commitGroup.committerId || commitGroup.committerEmail) { + agents.push({ + identifier: commitGroup.committerId || commitGroup.committerEmail || '', + name: commitGroup.committerEmail || undefined, + version: this.isFullScan ? 'fullscan' : (usingDefaultUser ? this.config.userId : undefined), + }); + } + const partSuffix = partNumber != null ? ` Part: ${partNumber}` : ''; + const accessedResources = accessedResourcesOverride ?? this.buildCommitAccessedResources(commitGroup, partSuffix); + const textContent = { + "@odata.type": "microsoft.graph.textContent", + data: commitContent, + }; const entry = { "@odata.type": "microsoft.graph.processConversationMetadata", identifier: commitIdentifier, @@ -63640,18 +63665,16 @@ class PayloadBuilder { correlationId: conversationId, sequenceNumber, length: commitContent.length, - isTruncated: false, + isTruncated, createdDateTime: commitGroup.timestamp || now, modifiedDateTime: commitGroup.timestamp || now, - content: fileContent, + content: textContent, accessedResources_v2: accessedResources, ...(agents.length > 0 ? { agents } : {}), }; return { contentEntries: [entry], - activityMetadata: { - activity: Activity.uploadText, - }, + activityMetadata: { activity: Activity.uploadText }, deviceMetadata: {}, integratedAppMetadata: { name: PayloadBuilder.appName, @@ -63668,39 +63691,181 @@ class PayloadBuilder { }; } /** - * Build a per-user ProcessContentRequest for a git commit (inline PC). + * Build per-user ProcessContentRequest(s) for a git commit (inline PC). + * Splits by content first, then by accessedResources if still too large. */ buildCommitProcessContentRequest(commitGroup, conversationId, sequenceNumber) { const ctp = this.buildCommitContentToProcess(commitGroup, conversationId, sequenceNumber); - return { contentToProcess: ctp }; + const singleRequest = { contentToProcess: ctp }; + const requestSize = JSON.stringify(singleRequest).length; + if (requestSize <= this.maxRequestSize) { + return [singleRequest]; + } + // Split needed — delegate to the common commit splitting helper + return this.splitCommitRequests(commitGroup, conversationId, sequenceNumber, (c) => ({ contentToProcess: c })); } /** - * Build an UploadSignalRequest for a git commit (contentActivities fallback). + * Build UploadSignalRequest(s) for a git commit (contentActivities fallback). + * Splits by content first, then by accessedResources if still too large. */ buildCommitUploadSignalRequest(commitGroup, prInfo) { const conversationId = crypto.randomUUID() + PayloadBuilder.correlationIdSuffix; - const ctp = this.buildCommitContentToProcess(commitGroup, conversationId, 0); const userId = commitGroup.authorId || this.config.userId; const userEmail = commitGroup.authorEmail || prInfo.authorEmail; - return { + const ctp = this.buildCommitContentToProcess(commitGroup, conversationId, 0); + const singleRequest = { id: crypto.randomUUID() + PayloadBuilder.correlationIdSuffix, userId, userEmail, scopeIdentifier: "", contentMetadata: ctp, }; + if (JSON.stringify(singleRequest).length <= this.maxRequestSize) { + return [singleRequest]; + } + // Split needed — delegate to the common commit splitting helper + return this.splitCommitRequests(commitGroup, conversationId, 0, (c) => ({ + id: crypto.randomUUID() + PayloadBuilder.correlationIdSuffix, + userId, + userEmail, + scopeIdentifier: "", + contentMetadata: c, + })); + } + /** + * Common helper: split a commit into multiple requests when it exceeds the + * size limit. Splits content first; if accessedResources alone exceed the + * limit, splits those across parts too. + * + * @param wrap — wraps a ContentToProcess into the final request type (T) + */ + splitCommitRequests(commitGroup, conversationId, startSeqNum, wrap) { + const commitContent = this.buildCommitContentText(commitGroup); + const allResources = this.buildCommitAccessedResources(commitGroup); + // Measure overhead with empty content + full resources + const probeCTP = this.buildCommitContentToProcess(commitGroup, conversationId, startSeqNum, false, '', undefined, allResources); + const probeSize = JSON.stringify(wrap(probeCTP)).length; + if (probeSize <= this.maxRequestSize) { + // Content chunking alone is sufficient + const maxChunk = Math.max(1, this.maxContentSize - (probeSize - commitContent.length) - 200); + const results = []; + let partNumber = 1; + for (let i = 0; i < commitContent.length; i += maxChunk) { + const chunk = commitContent.substring(i, Math.min(i + maxChunk, commitContent.length)); + const isLastChunk = i + maxChunk >= commitContent.length; + const partSuffix = ` Part: ${partNumber}`; + const resources = this.buildCommitAccessedResources(commitGroup, partSuffix); + const ctp = this.buildCommitContentToProcess(commitGroup, conversationId, startSeqNum + results.length, !isLastChunk, chunk, partNumber, resources); + results.push(wrap(ctp)); + partNumber++; + } + this.logger.info(`Split commit ${commitGroup.sha} content into ${results.length} part(s)`); + return results; + } + // accessedResources alone exceed the limit — split resources across parts + const singleResourceSize = allResources.length > 1 + ? JSON.stringify(allResources[1]).length + 2 + : 200; + const resourceBudget = this.maxRequestSize - (probeSize - JSON.stringify(allResources).length) - 500; + const resourcesPerPart = Math.max(1, Math.floor(resourceBudget / singleResourceSize)); + const results = []; + let partNumber = 1; + let contentRemaining = commitContent; + for (let rIdx = 0; rIdx < allResources.length; rIdx += resourcesPerPart) { + const resourceSlice = allResources.slice(rIdx, rIdx + resourcesPerPart); + const partSuffix = ` Part: ${partNumber}`; + const labeledResources = resourceSlice.map(r => ({ ...r, name: r.name + partSuffix })); + // First part gets as much content as fits; subsequent parts get empty content + let chunk = ''; + let isTruncated = false; + if (contentRemaining.length > 0) { + const resourceJsonSize = JSON.stringify(labeledResources).length; + const wrapperOverhead = probeSize - JSON.stringify(allResources).length - commitContent.length; + const contentBudget = Math.max(0, this.maxContentSize - wrapperOverhead - resourceJsonSize - 200); + chunk = contentRemaining.substring(0, contentBudget); + contentRemaining = contentRemaining.substring(contentBudget); + isTruncated = contentRemaining.length > 0; + } + const ctp = this.buildCommitContentToProcess(commitGroup, conversationId, startSeqNum + results.length, isTruncated, chunk, partNumber, labeledResources); + results.push(wrap(ctp)); + partNumber++; + } + // If content still remaining after all resource parts, add content-only parts + if (contentRemaining.length > 0) { + const emptyResources = this.buildCommitAccessedResources(commitGroup, ` Part: ${partNumber}`).slice(0, 1); + const emptyProbe = this.buildCommitContentToProcess(commitGroup, conversationId, 0, false, '', undefined, emptyResources); + const overhead = JSON.stringify(wrap(emptyProbe)).length; + const maxChunk = Math.max(1, this.maxContentSize - overhead - 200); + while (contentRemaining.length > 0) { + const partSuffix = ` Part: ${partNumber}`; + const resources = this.buildCommitAccessedResources(commitGroup, partSuffix).slice(0, 1); + const chunk = contentRemaining.substring(0, maxChunk); + contentRemaining = contentRemaining.substring(maxChunk); + const ctp = this.buildCommitContentToProcess(commitGroup, conversationId, startSeqNum + results.length, contentRemaining.length > 0, chunk, partNumber, resources); + results.push(wrap(ctp)); + partNumber++; + } + } + this.logger.info(`Split commit ${commitGroup.sha} into ${results.length} part(s) (content + accessedResources)`); + return results; } /** * Build a ProcessContentBatchRequest item for a git commit (PCA batch). + * Returns multiple items if the commit content exceeds the size limit. */ - buildCommitProcessContentBatchItem(commitGroup, conversationId, sequenceNumber) { - const ctp = this.buildCommitContentToProcess(commitGroup, conversationId, sequenceNumber); - return { - contentToProcess: ctp, - userId: commitGroup.authorId || this.config.userId, - userEmail: commitGroup.authorEmail || undefined, + buildCommitProcessContentBatchItems(commitGroup, conversationId, startSequenceNumber) { + const userId = commitGroup.authorId || this.config.userId; + const userEmail = commitGroup.authorEmail || undefined; + const singleCTP = this.buildCommitContentToProcess(commitGroup, conversationId, startSequenceNumber); + const singleItem = { + contentToProcess: singleCTP, + userId, + userEmail, requestId: crypto.randomUUID(), }; + if (JSON.stringify(singleItem).length <= this.maxRequestSize) { + return [singleItem]; + } + // Delegate to the common splitting helper + return this.splitCommitRequests(commitGroup, conversationId, startSequenceNumber, (ctp) => ({ + contentToProcess: ctp, + userId, + userEmail, + requestId: crypto.randomUUID(), + })); + } + /** + * Build batched PCA requests for one or more commits, combining items + * into batches that fit within the payload size limit. + */ + buildCommitProcessContentBatchRequest(commitGroups) { + const allItems = []; + const conversationId = crypto.randomUUID() + PayloadBuilder.correlationIdSuffix; + let seqNum = 0; + for (const commitGroup of commitGroups) { + const items = this.buildCommitProcessContentBatchItems(commitGroup, conversationId, seqNum); + allItems.push(...items); + seqNum += items.length; + } + // Split items into batches that fit within maxRequestSize + const batches = []; + let currentItems = []; + let currentSize = 0; + const batchOverhead = 200; + for (const item of allItems) { + const itemSize = JSON.stringify(item).length; + if (currentItems.length > 0 && currentSize + itemSize + batchOverhead > this.maxRequestSize) { + batches.push({ processContentRequests: currentItems }); + currentItems = []; + currentSize = 0; + } + currentItems.push(item); + currentSize += itemSize; + } + if (currentItems.length > 0) { + batches.push({ processContentRequests: currentItems }); + } + return batches; } mapChangeTypeToAccessType(typeOfChange) { switch (typeOfChange) { @@ -63910,7 +64075,6 @@ function tryParseWorkflowRepoFromEnv() { - class FullScanService { config; fileProcessor; @@ -64061,27 +64225,30 @@ class FullScanService { await this.sendCommitContentActivity(commitGroup, prInfo, failedPayloads); continue; } - // Send via PCA batch - const conversationId = external_crypto_.randomUUID() + '@GA'; - const pcaItem = this.payloadBuilder.buildCommitProcessContentBatchItem(commitGroup, conversationId, 0); - const pcaBatch = { processContentRequests: [pcaItem] }; - const pcaResult = await this.purviewClient.processContentAsync(pcaBatch); - if (!pcaResult.success) { - this.logger.error(`PCA failed for commit ${commitGroup.sha}: ${pcaResult.error}. Falling back to contentActivities.`); - failedPayloads.push(`pca-fullscan-commit-${commitGroup.sha}`); - await this.sendCommitContentActivity(commitGroup, prInfo, failedPayloads); - } - else { - this.logger.debug(`Full scan: PCA completed for ${commitIdentifier}`); + // Send via PCA batch (combines and chunks as needed) + const pcaBatches = this.payloadBuilder.buildCommitProcessContentBatchRequest([commitGroup]); + for (const pcaBatch of pcaBatches) { + const pcaResult = await this.purviewClient.processContentAsync(pcaBatch); + if (!pcaResult.success) { + this.logger.error(`PCA failed for commit ${commitGroup.sha}: ${pcaResult.error}. Falling back to contentActivities.`); + failedPayloads.push(`pca-fullscan-commit-${commitGroup.sha}`); + await this.sendCommitContentActivity(commitGroup, prInfo, failedPayloads); + break; + } + else { + this.logger.debug(`Full scan: PCA completed for ${commitIdentifier}`); + } } } } async sendCommitContentActivity(commitGroup, prInfo, failedPayloads) { - const req = this.payloadBuilder.buildCommitUploadSignalRequest(commitGroup, prInfo); - const result = await this.purviewClient.uploadSignal(req); - if (!result.success) { - this.logger.error(`ContentActivities upload failed for commit ${commitGroup.sha}: ${result.error}`); - failedPayloads.push(`ca-fullscan-commit-${commitGroup.sha}`); + const requests = this.payloadBuilder.buildCommitUploadSignalRequest(commitGroup, prInfo); + for (const req of requests) { + const result = await this.purviewClient.uploadSignal(req); + if (!result.success) { + this.logger.error(`ContentActivities upload failed for commit ${commitGroup.sha}: ${result.error}`); + failedPayloads.push(`ca-fullscan-commit-${commitGroup.sha}`); + } } } async resolveDefaultBranch(token, owner, repo) { @@ -64360,6 +64527,7 @@ class GitHubActionsRunner { this.logger.info('Processing repository files'); const prInfo = await this.fileProcessor.getPrInfo(); this.payloadBuilder.prNumber = prInfo.prNumber; + this.payloadBuilder.prDescription = prInfo.body; const failedPayloads = []; const blockedFiles = []; const userPsDeniedCache = new Set(); @@ -64621,34 +64789,37 @@ class GitHubActionsRunner { } if (scopeCheck.executionMode === ExecutionMode.evaluateInline) { const conversationId = crypto.randomUUID(); - const pcRequest = this.payloadBuilder.buildCommitProcessContentRequest(commitGroup, conversationId, 0); - const pcResponse = await this.purviewClient.processContent(commitUserId, pcRequest, psResult.scopeIdentifier, true); - if (!pcResponse.success) { - this.logger.error(`PC failed for commit ${commitGroup.sha}: ${pcResponse.error}. Falling back to contentActivities.`); - ctx.failedPayloads.push(`pc-commit-${commitGroup.sha}`); - await this.sendCommitContentActivity(commitGroup, ctx.prInfo, ctx.failedPayloads); - return; - } - const pcData = pcResponse.data; - if (pcData && isBlocked(pcData)) { - const blockingActions = getBlockingActions(pcData); - this.logger.warn(`BLOCKED: Commit ${commitGroup.sha} blocked by ${blockingActions.length} policy action(s)`); - ctx.blockedFiles.push({ - filePath: commitIdentifier, - userId: commitUserId, - policyActions: blockingActions, - }); + const pcRequests = this.payloadBuilder.buildCommitProcessContentRequest(commitGroup, conversationId, 0); + for (const pcRequest of pcRequests) { + const pcResponse = await this.purviewClient.processContent(commitUserId, pcRequest, psResult.scopeIdentifier, true); + if (!pcResponse.success) { + this.logger.error(`PC failed for commit ${commitGroup.sha}: ${pcResponse.error}. Falling back to contentActivities.`); + ctx.failedPayloads.push(`pc-commit-${commitGroup.sha}`); + await this.sendCommitContentActivity(commitGroup, ctx.prInfo, ctx.failedPayloads); + return; + } + const pcData = pcResponse.data; + if (pcData && isBlocked(pcData)) { + const blockingActions = getBlockingActions(pcData); + this.logger.warn(`BLOCKED: Commit ${commitGroup.sha} blocked by ${blockingActions.length} policy action(s)`); + ctx.blockedFiles.push({ + filePath: commitIdentifier, + userId: commitUserId, + policyActions: blockingActions, + }); + } } } else { - const conversationId = crypto.randomUUID() + '@GA'; - const pcaItem = this.payloadBuilder.buildCommitProcessContentBatchItem(commitGroup, conversationId, 0); - const pcaBatch = { processContentRequests: [pcaItem] }; - const pcaResult = await this.purviewClient.processContentAsync(pcaBatch); - if (!pcaResult.success) { - this.logger.error(`PCA failed for commit ${commitGroup.sha}: ${pcaResult.error}. Falling back to contentActivities.`); - ctx.failedPayloads.push(`pca-commit-${commitGroup.sha}`); - await this.sendCommitContentActivity(commitGroup, ctx.prInfo, ctx.failedPayloads); + const pcaBatches = this.payloadBuilder.buildCommitProcessContentBatchRequest([commitGroup]); + for (const pcaBatch of pcaBatches) { + const pcaResult = await this.purviewClient.processContentAsync(pcaBatch); + if (!pcaResult.success) { + this.logger.error(`PCA failed for commit ${commitGroup.sha}: ${pcaResult.error}. Falling back to contentActivities.`); + ctx.failedPayloads.push(`pca-commit-${commitGroup.sha}`); + await this.sendCommitContentActivity(commitGroup, ctx.prInfo, ctx.failedPayloads); + break; + } } } } @@ -64663,11 +64834,13 @@ class GitHubActionsRunner { } } async sendCommitContentActivity(commitGroup, prInfo, failedPayloads) { - const req = this.payloadBuilder.buildCommitUploadSignalRequest(commitGroup, prInfo); - const result = await this.purviewClient.uploadSignal(req); - if (!result.success) { - this.logger.error(`ContentActivities upload failed for commit ${commitGroup.sha}: ${result.error}`); - failedPayloads.push(`ca-commit-${commitGroup.sha}`); + const requests = this.payloadBuilder.buildCommitUploadSignalRequest(commitGroup, prInfo); + for (const req of requests) { + const result = await this.purviewClient.uploadSignal(req); + if (!result.success) { + this.logger.error(`ContentActivities upload failed for commit ${commitGroup.sha}: ${result.error}`); + failedPayloads.push(`ca-commit-${commitGroup.sha}`); + } } } /** diff --git a/flow.md b/flow.md index c41aed1..1fb6f14 100644 --- a/flow.md +++ b/flow.md @@ -3,11 +3,12 @@ flowchart TD trigger[GitHub Action Triggered
push / pull_request / workflow_dispatch] --> validate[Validate Inputs
validateInputs → config] validate --> stateSetup[State Tracking Setup
resolve workflow repo, branch,
detect first run via state file
or workflow history] stateSetup --> authenticate[Authenticate → MSAL Token] - authenticate --> getEventCtx[Get Event Context Info
getPrInfo: push / PR / dispatch
author, branch, title, url] - getEventCtx --> isFirstRun{First Run or
Manual Dispatch?} + authenticate --> getEventCtx[Get Event Context Info
getPrInfo: push / PR / dispatch
author, branch, title, url,
prNumber, PR description] + getEventCtx --> setPrCtx[Set PR context on PayloadBuilder
prNumber, prDescription] + setPrCtx --> isFirstRun{First Run or
Manual Dispatch?} %% ── Full Scan Path (first run or manual dispatch) ── - isFirstRun -->|Yes| getAllFiles[Get ALL repo files
getAllRepoFiles
binary files auto-skipped] + isFirstRun -->|Yes| getAllFiles[Get repo files at base ref
getAllRepoFiles · atRef = boundary SHA
git ls-tree for PR base state
binary files auto-skipped] getAllFiles --> hasFiles{Files found?} hasFiles -->|No| noFilesLog[Log: no files for full scan] hasFiles -->|Yes| tenantPS[Call searchTenantProtectionScope
POST .../protectionScopes/compute] @@ -26,16 +27,17 @@ flowchart TD fullCache401 --> fullUserFallback fullUserPSOk -->|Yes| fullUserHasScopes{User PS has scopes?} fullUserHasScopes -->|No / empty| fullUserFallback - fullUserHasScopes -->|Yes| fullPCABatch[Build PCA batch for user
processContentAsync
loop over chunked batches] + fullUserHasScopes -->|Yes| fullPCABatch[Build PCA batch for user
processContentAsync
content ≤ 3 MB per chunk
request ≤ 3.7 MB per batch
Part: N in accessedResources on split] fullPCABatch --> fullPCAOk{PCA success?} fullPCAOk -->|No| fullUserFallback - fullPCAOk -->|Yes| fullPCADone[Log: PCA complete for user] + fullPCAOk -->|Yes| fullPCADone[PCA complete for user] end - fullScanFallback --> writeState - fullUserFallback --> writeState - fullPCADone --> writeState - writeState[Write state marker
best-effort] + fullScanFallback --> fullScanCommits + fullUserFallback --> fullScanCommits + fullPCADone --> fullScanCommits + + fullScanCommits[Process full-scan commits
getAllRepoCommits up to boundary SHA
per-commit user PS routing
batched via buildCommitProcessContentBatchRequest
content includes PR description when available] --> writeState[Write state marker
best-effort] writeState --> isManualDispatch{Manual Dispatch?} isManualDispatch -->|Yes| skipDiff[Log: skipping diff processing] isManualDispatch -->|No| getCommits @@ -61,7 +63,7 @@ flowchart TD shouldProcess -->|No| diffNoScopesFallback[Route all files →
contentActivities
uploadSignal per file] shouldProcess -->|Yes| execMode{executionMode?} - execMode -->|evaluateInline| processContent[Per-file: processContent
POST /users/userId/.../processContent
If-None-Match: etag
Prefer: evaluateInline
agents: committer AiAgentInfo] + execMode -->|evaluateInline| processContent[Per-file: processContent
POST /users/userId/.../processContent
If-None-Match: etag
Prefer: evaluateInline
agents: committer AiAgentInfo
content ≤ 3 MB · request ≤ 3.7 MB] processContent --> pcOk{PC success?} pcOk -->|No| pcFallback[Fallback: contentActivities
uploadSignal for file] pcOk -->|Yes| scopeState{protectionScopeState?} @@ -74,7 +76,7 @@ flowchart TD isBlocked -->|Yes| addToBlocked[Add to blockedFiles] isBlocked -->|No| continueInline[Continue] - execMode -->|evaluateOffline| pcaBatch[PCA batch for user
processContentAsync
loop over chunked batches
agents: committer AiAgentInfo] + execMode -->|evaluateOffline| pcaBatch[PCA batch for user
processContentAsync
content ≤ 3 MB per chunk
request ≤ 3.7 MB per batch
Part: N in accessedResources on split] pcaBatch --> pcaBatchOk{PCA success?} pcaBatchOk -->|No| pcaBatchFallback[Fallback: contentActivities
uploadSignal for user's files] pcaBatchOk -->|Yes| continueOffline[Continue] @@ -89,7 +91,7 @@ flowchart TD pcaBatchFallback --> nextUser continueOffline --> nextUser - nextUser --> commitReq[Send commit-level request
commit metadata + file list
same routing: PS → inline/offline/fallback] + nextUser --> commitReq[Send commit-level request
commit metadata + PR description +
file list in accessedResources
batched via buildCommitProcessContentBatchRequest
same routing: PS → inline/offline/fallback
content ≤ 3 MB · request ≤ 3.7 MB] commitReq --> nextCommit[Next commit / done] nextCommit --> hasBlockedFiles{blockedFiles
not empty?} @@ -125,18 +127,31 @@ flowchart TD style postCommitComment fill:#ef5350,color:#fff style actionFailed fill:#ef5350,color:#fff style fullCache401 fill:#ff9800,color:#000 - style diffCache401 fill:#ff9800,color:#000 style resolvePS fill:#ce93d8,color:#000 style findLastProcessed fill:#ce93d8,color:#000 style getGroupedFiles fill:#ce93d8,color:#000 style commitReq fill:#80cbc4,color:#000 + style fullScanCommits fill:#80cbc4,color:#000 + style setPrCtx fill:#e1bee7,color:#000 ``` ### Legend -- 🟣 **Purple** — Shared helpers: `resolveUserPsWithCache`, commit dedup & user resolution (Graph API / users.json) +- 🟣 **Purple** — Setup & shared helpers: validation, PR context, `resolveUserPsWithCache`, commit dedup & user resolution (Graph API / users.json) - 🟡 **Yellow** — processContent (PC) inline: synchronous, per-user, can detect blocks; includes committer AiAgentInfo -- 🟢 **Green** — processContentAsync (PCA) batch: fire-and-forget, chunked; includes committer AiAgentInfo +- 🟢 **Green** — processContentAsync (PCA) batch: fire-and-forget, chunked (content ≤ 3 MB, request ≤ 3.7 MB); includes committer AiAgentInfo - 🔵 **Blue** — contentActivities (uploadSignal): fire-and-forget, fallback on failures - 🔴 **Red** — Block detection, blocked files notification (PR review comment or commit comment) & action failure - 🟠 **Orange** — 401 denial cache (skip user on subsequent calls) -- 🩵 **Teal** — Commit-level request (commit metadata + changed file list, same PS routing as files) \ No newline at end of file +- 🩵 **Teal** — Commit-level request (commit metadata + PR description + changed file list, same PS routing as files) + +### Payload Size Limits +| Limit | Value | Enforced by | +|-------|-------|-------------| +| Content data field | ≤ 3 MB | `maxContentSize` — content chunked into parts with `Part: N` in accessedResources name | +| Total request | ≤ 3.7 MB | `maxRequestSize` — items split across batches; accessedResources included in size check | + +### accessedResources Format +- **Identifier**: `PR: Commit: ` (PR prefix only when available; omitted for full scans) +- **Name (files)**: `Repo: File: Path: ` (+ `Part: N` when chunked) +- **Name (commits)**: `Repo: Commit: ` (+ `Part: N` when chunked) +- **isCrossPromptInjectionDetected**: always `false` \ No newline at end of file diff --git a/src/config/types.ts b/src/config/types.ts index 99fd2b1..ba30dfb 100644 --- a/src/config/types.ts +++ b/src/config/types.ts @@ -311,6 +311,7 @@ export interface PrInfo { title: string, url: string | null | undefined, prNumber?: number, + body?: string, } export interface GraphUserInfoContainer { diff --git a/src/file/fileProcessor.ts b/src/file/fileProcessor.ts index 25c12d2..55082ee 100644 --- a/src/file/fileProcessor.ts +++ b/src/file/fileProcessor.ts @@ -497,6 +497,7 @@ export class FileProcessor { title: title, url: url, prNumber: pr["number"], + body: pr["body"] || undefined, }; } diff --git a/src/payload/payloadBuilder.ts b/src/payload/payloadBuilder.ts index ad045c8..cf3fa88 100644 --- a/src/payload/payloadBuilder.ts +++ b/src/payload/payloadBuilder.ts @@ -3,7 +3,8 @@ import { Logger } from '../utils/logger'; export class PayloadBuilder { private readonly logger: Logger; - private readonly maxPayloadSize = 1024 * 1024 * 3; // 3MB + private readonly maxContentSize = 1024 * 1024 * 3; // 3 MB — max for the content data field + private readonly maxRequestSize = 1024 * 1024 * 3.7; // 3.7 MB — max for the complete request private static readonly domain: string = "github.com"; private static readonly scopeActivity: ProtectionScopeActivities = "uploadText"; private static readonly appName = "GitHub"; @@ -15,6 +16,9 @@ export class PayloadBuilder { /** PR number, set when processing a pull request event. */ public prNumber?: number; + + /** PR description/body, set when processing a pull request event. */ + public prDescription?: string; constructor(private readonly config: ActionConfig) { this.logger = new Logger('PayloadBuilder'); @@ -219,20 +223,22 @@ export class PayloadBuilder { const singleRequest: ProcessContentRequest = { contentToProcess: singleCTP }; const requestSize = JSON.stringify(singleRequest).length; - if (requestSize <= this.maxPayloadSize) { + if (requestSize <= this.maxRequestSize) { return [singleRequest]; } - // Split content into chunks that fit within maxPayloadSize + // Split content into chunks that fit within maxContentSize const overhead = requestSize - content.length; - const maxContentPerChunk = this.maxPayloadSize - overhead - 100; // safety margin + const maxContentPerChunk = this.maxContentSize - overhead - 100; // safety margin const requests: ProcessContentRequest[] = []; + let partNumber = 1; for (let i = 0; i < content.length; i += maxContentPerChunk) { const chunk = content.substring(i, Math.min(i + maxContentPerChunk, content.length)); const isLastChunk = i + maxContentPerChunk >= content.length; - const chunkCTP = this.createContentToProcess(file, conversationId, messageId + requests.length, !isLastChunk, chunk); + const chunkCTP = this.createContentToProcess(file, conversationId, messageId + requests.length, !isLastChunk, chunk, partNumber); requests.push({ contentToProcess: chunkCTP }); + partNumber++; } this.logger.info(`Split file ${file.path} into ${requests.length} processContent request(s)`); @@ -269,7 +275,7 @@ export class PayloadBuilder { const singleCTP = this.createContentToProcess(file, conversationId, seqNum); const singleSize = JSON.stringify(singleCTP).length + 200; // account for wrapper fields - if (singleSize <= this.maxPayloadSize) { + if (singleSize <= this.maxRequestSize) { requests.push({ id: crypto.randomUUID() + PayloadBuilder.correlationIdSuffix, userId, @@ -281,12 +287,13 @@ export class PayloadBuilder { } else { // Split content into chunks const overhead = singleSize - content.length; - const maxContentPerChunk = this.maxPayloadSize - overhead - 100; + const maxContentPerChunk = this.maxContentSize - overhead - 100; + let partNumber = 1; for (let i = 0; i < content.length; i += maxContentPerChunk) { const chunk = content.substring(i, Math.min(i + maxContentPerChunk, content.length)); const isLastChunk = i + maxContentPerChunk >= content.length; - const chunkCTP = this.createContentToProcess(file, conversationId, seqNum, !isLastChunk, chunk); + const chunkCTP = this.createContentToProcess(file, conversationId, seqNum, !isLastChunk, chunk, partNumber); requests.push({ id: crypto.randomUUID() + PayloadBuilder.correlationIdSuffix, userId, @@ -295,6 +302,7 @@ export class PayloadBuilder { contentMetadata: chunkCTP, }); seqNum++; + partNumber++; } this.logger.info(`Split file ${file.path} into multiple upload signal request(s)`); } @@ -321,18 +329,19 @@ export class PayloadBuilder { }; const itemSize = JSON.stringify(singleItem).length; - if (itemSize <= this.maxPayloadSize) { + if (itemSize <= this.maxRequestSize) { allItems.push(singleItem); seqNum++; } else { // Single file exceeds limit — split its content into chunks const overhead = itemSize - content.length; - const maxContentPerChunk = this.maxPayloadSize - overhead - 100; + const maxContentPerChunk = this.maxContentSize - overhead - 100; + let partNumber = 1; for (let i = 0; i < content.length; i += maxContentPerChunk) { const chunk = content.substring(i, Math.min(i + maxContentPerChunk, content.length)); const isLastChunk = i + maxContentPerChunk >= content.length; - const chunkCTP = this.createContentToProcess(file, conversationId, seqNum, !isLastChunk, chunk); + const chunkCTP = this.createContentToProcess(file, conversationId, seqNum, !isLastChunk, chunk, partNumber); allItems.push({ contentToProcess: chunkCTP, userId, @@ -340,19 +349,20 @@ export class PayloadBuilder { requestId: crypto.randomUUID(), }); seqNum++; + partNumber++; } } } - // Split items into batches that fit within maxPayloadSize + // Split items into batches that fit within maxRequestSize const batches: ProcessContentBatchRequest[] = []; let currentItems: ProcessContentRequestItem[] = []; let currentSize = 0; - const batchOverhead = 50; + const batchOverhead = 200; for (const item of allItems) { const itemSize = JSON.stringify(item).length; - if (currentItems.length > 0 && currentSize + itemSize + batchOverhead > this.maxPayloadSize) { + if (currentItems.length > 0 && currentSize + itemSize + batchOverhead > this.maxRequestSize) { batches.push({ processContentRequests: currentItems }); currentItems = []; currentSize = 0; @@ -368,7 +378,7 @@ export class PayloadBuilder { return batches; } - private createContentToProcess(file: FileMetadata, conversationId: string, messageId: number, isTruncated: boolean = false, contentOverride?: string): ContentToProcess { + private createContentToProcess(file: FileMetadata, conversationId: string, messageId: number, isTruncated: boolean = false, contentOverride?: string, partNumber?: number): ContentToProcess { let userId = file.authorId; const usingDefaultUser = !userId || userId === this.config.userId; @@ -409,7 +419,7 @@ export class PayloadBuilder { content: fileContent, accessedResources_v2: [{ identifier: this.buildResourceIdentifier(file.sha || file.path), - name: this.buildFileResourceName(file.path), + name: this.buildFileResourceName(file.path) + (partNumber != null ? ` Part: ${partNumber}` : ''), url: fileUrl, accessType: this.mapChangeTypeToAccessType(file.typeOfChange), status: 'success', @@ -443,9 +453,17 @@ export class PayloadBuilder { * Build the text content representing a git commit's metadata. */ private buildCommitContentText(commitGroup: CommitFiles): string { - const lines: string[] = [ - `Commit: ${commitGroup.sha}`, - ]; + const lines: string[] = []; + + if (this.prNumber != null) { + lines.push(`PR: #${this.prNumber}`); + if (this.prDescription) { + lines.push(`Description: ${this.prDescription}`); + } + lines.push(''); + } + + lines.push(`Commit: ${commitGroup.sha}`); if (commitGroup.message) { lines.push(`Message: ${commitGroup.message}`); @@ -474,50 +492,63 @@ export class PayloadBuilder { } /** - * Build a ContentToProcess for a git commit (commit-level metadata request). + * Build the accessedResources array for a commit. */ - buildCommitContentToProcess(commitGroup: CommitFiles, conversationId: string, sequenceNumber: number): ContentToProcess { - const now = new Date().toISOString(); - const commitContent = this.buildCommitContentText(commitGroup); - const commitIdentifier = `commit:${commitGroup.sha}`; - const usingDefaultUser = !commitGroup.authorId || commitGroup.authorId === this.config.userId; - - const fileContent: TextContent = { - "@odata.type": "microsoft.graph.textContent", - data: commitContent, - }; - - const agents: AiAgentInfo[] = []; - if (commitGroup.committerId || commitGroup.committerEmail) { - agents.push({ - identifier: commitGroup.committerId || commitGroup.committerEmail || '', - name: commitGroup.committerEmail || undefined, - version: this.isFullScan ? 'fullscan' : (usingDefaultUser ? this.config.userId : undefined), - }); - } - + private buildCommitAccessedResources(commitGroup: CommitFiles, partSuffix: string = ''): import('../config/types').AccessedResourceDetails[] { const repoBaseUrl = `https://${PayloadBuilder.domain}/${this.config.repository.owner}/${this.config.repository.repo}`; const commitUrl = `${repoBaseUrl}/commit/${commitGroup.sha}`; - const accessedResources: import('../config/types').AccessedResourceDetails[] = [{ + const resources: import('../config/types').AccessedResourceDetails[] = [{ identifier: this.buildResourceIdentifier(commitGroup.sha), - name: `Repo: ${this.config.repository.repo} Commit: ${commitGroup.sha}`, + name: `Repo: ${this.config.repository.repo} Commit: ${commitGroup.sha}${partSuffix}`, url: commitUrl, accessType: 'write', status: 'success', isCrossPromptInjectionDetected: false, }]; for (const file of commitGroup.files) { - accessedResources.push({ + resources.push({ identifier: this.buildResourceIdentifier(file.sha || file.path), - name: this.buildFileResourceName(file.path), + name: this.buildFileResourceName(file.path) + partSuffix, url: `${repoBaseUrl}/blob/${this.config.repository.branch}/${file.path}`, accessType: this.mapChangeTypeToAccessType(file.typeOfChange), status: 'success', isCrossPromptInjectionDetected: false, }); } + return resources; + } + + /** + * Build a ContentToProcess for a git commit (commit-level metadata request). + * Accepts optional accessedResources override for splitting large resource arrays. + */ + buildCommitContentToProcess( + commitGroup: CommitFiles, conversationId: string, sequenceNumber: number, + isTruncated: boolean = false, contentOverride?: string, partNumber?: number, + accessedResourcesOverride?: import('../config/types').AccessedResourceDetails[] + ): ContentToProcess { + const now = new Date().toISOString(); + const commitContent = contentOverride ?? this.buildCommitContentText(commitGroup); + const commitIdentifier = `commit:${commitGroup.sha}`; + const usingDefaultUser = !commitGroup.authorId || commitGroup.authorId === this.config.userId; + const agents: AiAgentInfo[] = []; + if (commitGroup.committerId || commitGroup.committerEmail) { + agents.push({ + identifier: commitGroup.committerId || commitGroup.committerEmail || '', + name: commitGroup.committerEmail || undefined, + version: this.isFullScan ? 'fullscan' : (usingDefaultUser ? this.config.userId : undefined), + }); + } + + const partSuffix = partNumber != null ? ` Part: ${partNumber}` : ''; + const accessedResources = accessedResourcesOverride ?? this.buildCommitAccessedResources(commitGroup, partSuffix); + + const textContent: TextContent = { + "@odata.type": "microsoft.graph.textContent", + data: commitContent, + }; const entry: ProcessConversationMetadata = { "@odata.type": "microsoft.graph.processConversationMetadata", identifier: commitIdentifier, @@ -525,19 +556,17 @@ export class PayloadBuilder { correlationId: conversationId, sequenceNumber, length: commitContent.length, - isTruncated: false, + isTruncated, createdDateTime: commitGroup.timestamp || now, modifiedDateTime: commitGroup.timestamp || now, - content: fileContent, + content: textContent, accessedResources_v2: accessedResources, ...(agents.length > 0 ? { agents } : {}), }; return { contentEntries: [entry], - activityMetadata: { - activity: Activity.uploadText, - }, + activityMetadata: { activity: Activity.uploadText }, deviceMetadata: {}, integratedAppMetadata: { name: PayloadBuilder.appName, @@ -555,42 +584,225 @@ export class PayloadBuilder { } /** - * Build a per-user ProcessContentRequest for a git commit (inline PC). + * Build per-user ProcessContentRequest(s) for a git commit (inline PC). + * Splits by content first, then by accessedResources if still too large. */ - buildCommitProcessContentRequest(commitGroup: CommitFiles, conversationId: string, sequenceNumber: number): ProcessContentRequest { + buildCommitProcessContentRequest(commitGroup: CommitFiles, conversationId: string, sequenceNumber: number): ProcessContentRequest[] { const ctp = this.buildCommitContentToProcess(commitGroup, conversationId, sequenceNumber); - return { contentToProcess: ctp }; + const singleRequest: ProcessContentRequest = { contentToProcess: ctp }; + const requestSize = JSON.stringify(singleRequest).length; + + if (requestSize <= this.maxRequestSize) { + return [singleRequest]; + } + + // Split needed — delegate to the common commit splitting helper + return this.splitCommitRequests(commitGroup, conversationId, sequenceNumber, + (c) => ({ contentToProcess: c } as ProcessContentRequest)); } /** - * Build an UploadSignalRequest for a git commit (contentActivities fallback). + * Build UploadSignalRequest(s) for a git commit (contentActivities fallback). + * Splits by content first, then by accessedResources if still too large. */ - buildCommitUploadSignalRequest(commitGroup: CommitFiles, prInfo: PrInfo): UploadSignalRequest { + buildCommitUploadSignalRequest(commitGroup: CommitFiles, prInfo: PrInfo): UploadSignalRequest[] { const conversationId = crypto.randomUUID() + PayloadBuilder.correlationIdSuffix; - const ctp = this.buildCommitContentToProcess(commitGroup, conversationId, 0); const userId = commitGroup.authorId || this.config.userId; const userEmail = commitGroup.authorEmail || prInfo.authorEmail; - return { + const ctp = this.buildCommitContentToProcess(commitGroup, conversationId, 0); + const singleRequest: UploadSignalRequest = { id: crypto.randomUUID() + PayloadBuilder.correlationIdSuffix, userId, userEmail, scopeIdentifier: "", contentMetadata: ctp, }; + + if (JSON.stringify(singleRequest).length <= this.maxRequestSize) { + return [singleRequest]; + } + + // Split needed — delegate to the common commit splitting helper + return this.splitCommitRequests(commitGroup, conversationId, 0, (c) => ({ + id: crypto.randomUUID() + PayloadBuilder.correlationIdSuffix, + userId, + userEmail, + scopeIdentifier: "", + contentMetadata: c, + } as UploadSignalRequest)); + } + + /** + * Common helper: split a commit into multiple requests when it exceeds the + * size limit. Splits content first; if accessedResources alone exceed the + * limit, splits those across parts too. + * + * @param wrap — wraps a ContentToProcess into the final request type (T) + */ + private splitCommitRequests( + commitGroup: CommitFiles, conversationId: string, startSeqNum: number, + wrap: (ctp: ContentToProcess) => T + ): T[] { + const commitContent = this.buildCommitContentText(commitGroup); + const allResources = this.buildCommitAccessedResources(commitGroup); + + // Measure overhead with empty content + full resources + const probeCTP = this.buildCommitContentToProcess( + commitGroup, conversationId, startSeqNum, false, '', undefined, allResources + ); + const probeSize = JSON.stringify(wrap(probeCTP)).length; + + if (probeSize <= this.maxRequestSize) { + // Content chunking alone is sufficient + const maxChunk = Math.max(1, this.maxContentSize - (probeSize - commitContent.length) - 200); + const results: T[] = []; + let partNumber = 1; + for (let i = 0; i < commitContent.length; i += maxChunk) { + const chunk = commitContent.substring(i, Math.min(i + maxChunk, commitContent.length)); + const isLastChunk = i + maxChunk >= commitContent.length; + const partSuffix = ` Part: ${partNumber}`; + const resources = this.buildCommitAccessedResources(commitGroup, partSuffix); + const ctp = this.buildCommitContentToProcess( + commitGroup, conversationId, startSeqNum + results.length, + !isLastChunk, chunk, partNumber, resources + ); + results.push(wrap(ctp)); + partNumber++; + } + this.logger.info(`Split commit ${commitGroup.sha} content into ${results.length} part(s)`); + return results; + } + + // accessedResources alone exceed the limit — split resources across parts + const singleResourceSize = allResources.length > 1 + ? JSON.stringify(allResources[1]).length + 2 + : 200; + const resourceBudget = this.maxRequestSize - (probeSize - JSON.stringify(allResources).length) - 500; + const resourcesPerPart = Math.max(1, Math.floor(resourceBudget / singleResourceSize)); + + const results: T[] = []; + let partNumber = 1; + let contentRemaining = commitContent; + + for (let rIdx = 0; rIdx < allResources.length; rIdx += resourcesPerPart) { + const resourceSlice = allResources.slice(rIdx, rIdx + resourcesPerPart); + const partSuffix = ` Part: ${partNumber}`; + const labeledResources = resourceSlice.map(r => ({ ...r, name: r.name + partSuffix })); + + // First part gets as much content as fits; subsequent parts get empty content + let chunk = ''; + let isTruncated = false; + if (contentRemaining.length > 0) { + const resourceJsonSize = JSON.stringify(labeledResources).length; + const wrapperOverhead = probeSize - JSON.stringify(allResources).length - commitContent.length; + const contentBudget = Math.max(0, this.maxContentSize - wrapperOverhead - resourceJsonSize - 200); + chunk = contentRemaining.substring(0, contentBudget); + contentRemaining = contentRemaining.substring(contentBudget); + isTruncated = contentRemaining.length > 0; + } + + const ctp = this.buildCommitContentToProcess( + commitGroup, conversationId, startSeqNum + results.length, + isTruncated, chunk, partNumber, labeledResources + ); + results.push(wrap(ctp)); + partNumber++; + } + + // If content still remaining after all resource parts, add content-only parts + if (contentRemaining.length > 0) { + const emptyResources = this.buildCommitAccessedResources(commitGroup, ` Part: ${partNumber}`).slice(0, 1); + const emptyProbe = this.buildCommitContentToProcess( + commitGroup, conversationId, 0, false, '', undefined, emptyResources + ); + const overhead = JSON.stringify(wrap(emptyProbe)).length; + const maxChunk = Math.max(1, this.maxContentSize - overhead - 200); + + while (contentRemaining.length > 0) { + const partSuffix = ` Part: ${partNumber}`; + const resources = this.buildCommitAccessedResources(commitGroup, partSuffix).slice(0, 1); + const chunk = contentRemaining.substring(0, maxChunk); + contentRemaining = contentRemaining.substring(maxChunk); + const ctp = this.buildCommitContentToProcess( + commitGroup, conversationId, startSeqNum + results.length, + contentRemaining.length > 0, chunk, partNumber, resources + ); + results.push(wrap(ctp)); + partNumber++; + } + } + + this.logger.info(`Split commit ${commitGroup.sha} into ${results.length} part(s) (content + accessedResources)`); + return results; } /** * Build a ProcessContentBatchRequest item for a git commit (PCA batch). + * Returns multiple items if the commit content exceeds the size limit. */ - buildCommitProcessContentBatchItem(commitGroup: CommitFiles, conversationId: string, sequenceNumber: number): ProcessContentRequestItem { - const ctp = this.buildCommitContentToProcess(commitGroup, conversationId, sequenceNumber); - return { - contentToProcess: ctp, - userId: commitGroup.authorId || this.config.userId, - userEmail: commitGroup.authorEmail || undefined, + buildCommitProcessContentBatchItems(commitGroup: CommitFiles, conversationId: string, startSequenceNumber: number): ProcessContentRequestItem[] { + const userId = commitGroup.authorId || this.config.userId; + const userEmail = commitGroup.authorEmail || undefined; + + const singleCTP = this.buildCommitContentToProcess(commitGroup, conversationId, startSequenceNumber); + const singleItem: ProcessContentRequestItem = { + contentToProcess: singleCTP, + userId, + userEmail, requestId: crypto.randomUUID(), }; + + if (JSON.stringify(singleItem).length <= this.maxRequestSize) { + return [singleItem]; + } + + // Delegate to the common splitting helper + return this.splitCommitRequests(commitGroup, conversationId, startSequenceNumber, (ctp) => ({ + contentToProcess: ctp, + userId, + userEmail, + requestId: crypto.randomUUID(), + } as ProcessContentRequestItem)); + } + + /** + * Build batched PCA requests for one or more commits, combining items + * into batches that fit within the payload size limit. + */ + buildCommitProcessContentBatchRequest(commitGroups: CommitFiles[]): ProcessContentBatchRequest[] { + const allItems: ProcessContentRequestItem[] = []; + const conversationId = crypto.randomUUID() + PayloadBuilder.correlationIdSuffix; + let seqNum = 0; + + for (const commitGroup of commitGroups) { + const items = this.buildCommitProcessContentBatchItems(commitGroup, conversationId, seqNum); + allItems.push(...items); + seqNum += items.length; + } + + // Split items into batches that fit within maxRequestSize + const batches: ProcessContentBatchRequest[] = []; + let currentItems: ProcessContentRequestItem[] = []; + let currentSize = 0; + const batchOverhead = 200; + + for (const item of allItems) { + const itemSize = JSON.stringify(item).length; + if (currentItems.length > 0 && currentSize + itemSize + batchOverhead > this.maxRequestSize) { + batches.push({ processContentRequests: currentItems }); + currentItems = []; + currentSize = 0; + } + currentItems.push(item); + currentSize += itemSize; + } + + if (currentItems.length > 0) { + batches.push({ processContentRequests: currentItems }); + } + + return batches; } private mapChangeTypeToAccessType(typeOfChange?: string): import('../config/types').ResourceAccessType { diff --git a/src/runner/fullScanService.ts b/src/runner/fullScanService.ts index 2d82761..c887c06 100644 --- a/src/runner/fullScanService.ts +++ b/src/runner/fullScanService.ts @@ -1,6 +1,5 @@ -import * as crypto from 'crypto'; import * as github from '@actions/github'; -import { ActionConfig, FileMetadata, StateTrackingInfo, ApiResponse, ProtectionScopesResponse, PrInfo, ProtectionScopesRequest, CommitFiles, ProcessContentBatchRequest } from '../config/types'; +import { ActionConfig, FileMetadata, StateTrackingInfo, ApiResponse, ProtectionScopesResponse, PrInfo, ProtectionScopesRequest, CommitFiles } from '../config/types'; import { FileProcessor } from '../file/fileProcessor'; import { PurviewClient } from '../api/purviewClient'; import { PayloadBuilder } from '../payload/payloadBuilder'; @@ -213,28 +212,31 @@ export class FullScanService { continue; } - // Send via PCA batch - const conversationId = crypto.randomUUID() + '@GA'; - const pcaItem = this.payloadBuilder.buildCommitProcessContentBatchItem(commitGroup, conversationId, 0); - const pcaBatch: ProcessContentBatchRequest = { processContentRequests: [pcaItem] }; - const pcaResult = await this.purviewClient.processContentAsync(pcaBatch); + // Send via PCA batch (combines and chunks as needed) + const pcaBatches = this.payloadBuilder.buildCommitProcessContentBatchRequest([commitGroup]); + for (const pcaBatch of pcaBatches) { + const pcaResult = await this.purviewClient.processContentAsync(pcaBatch); - if (!pcaResult.success) { - this.logger.error(`PCA failed for commit ${commitGroup.sha}: ${pcaResult.error}. Falling back to contentActivities.`); - failedPayloads.push(`pca-fullscan-commit-${commitGroup.sha}`); - await this.sendCommitContentActivity(commitGroup, prInfo, failedPayloads); - } else { - this.logger.debug(`Full scan: PCA completed for ${commitIdentifier}`); + if (!pcaResult.success) { + this.logger.error(`PCA failed for commit ${commitGroup.sha}: ${pcaResult.error}. Falling back to contentActivities.`); + failedPayloads.push(`pca-fullscan-commit-${commitGroup.sha}`); + await this.sendCommitContentActivity(commitGroup, prInfo, failedPayloads); + break; + } else { + this.logger.debug(`Full scan: PCA completed for ${commitIdentifier}`); + } } } } private async sendCommitContentActivity(commitGroup: CommitFiles, prInfo: PrInfo, failedPayloads: string[]): Promise { - const req = this.payloadBuilder.buildCommitUploadSignalRequest(commitGroup, prInfo); - const result = await this.purviewClient.uploadSignal(req); - if (!result.success) { - this.logger.error(`ContentActivities upload failed for commit ${commitGroup.sha}: ${result.error}`); - failedPayloads.push(`ca-fullscan-commit-${commitGroup.sha}`); + const requests = this.payloadBuilder.buildCommitUploadSignalRequest(commitGroup, prInfo); + for (const req of requests) { + const result = await this.purviewClient.uploadSignal(req); + if (!result.success) { + this.logger.error(`ContentActivities upload failed for commit ${commitGroup.sha}: ${result.error}`); + failedPayloads.push(`ca-fullscan-commit-${commitGroup.sha}`); + } } } diff --git a/src/runner/gitHubActionsRunner.ts b/src/runner/gitHubActionsRunner.ts index 7579b68..328309f 100644 --- a/src/runner/gitHubActionsRunner.ts +++ b/src/runner/gitHubActionsRunner.ts @@ -1,6 +1,6 @@ import * as core from '@actions/core'; import * as github from '@actions/github'; -import { ActionConfig, FileMetadata, BlockedFileResult, ExecutionMode, Activity, ProcessContentResponse, ApiResponse, ProtectionScopesResponse, CommitFiles, ProcessContentBatchRequest, PrInfo, ProtectionScopesRequest, PolicyLocation } from '../config/types'; +import { ActionConfig, FileMetadata, BlockedFileResult, ExecutionMode, Activity, ProcessContentResponse, ApiResponse, ProtectionScopesResponse, CommitFiles, PrInfo, ProtectionScopesRequest, PolicyLocation } from '../config/types'; import { AuthenticationService } from '../auth/authenticationService'; import { FileProcessor } from '../file/fileProcessor'; import { PurviewClient } from '../api/purviewClient'; @@ -64,6 +64,7 @@ export class GitHubActionsRunner { this.logger.info('Processing repository files'); const prInfo = await this.fileProcessor.getPrInfo(); this.payloadBuilder.prNumber = prInfo.prNumber; + this.payloadBuilder.prDescription = prInfo.body; const failedPayloads: string[] = []; const blockedFiles: BlockedFileResult[] = []; @@ -407,36 +408,40 @@ export class GitHubActionsRunner { if (scopeCheck.executionMode === ExecutionMode.evaluateInline) { const conversationId = crypto.randomUUID(); - const pcRequest = this.payloadBuilder.buildCommitProcessContentRequest(commitGroup, conversationId, 0); - const pcResponse = await this.purviewClient.processContent(commitUserId, pcRequest, psResult.scopeIdentifier, true); + const pcRequests = this.payloadBuilder.buildCommitProcessContentRequest(commitGroup, conversationId, 0); - if (!pcResponse.success) { - this.logger.error(`PC failed for commit ${commitGroup.sha}: ${pcResponse.error}. Falling back to contentActivities.`); - ctx.failedPayloads.push(`pc-commit-${commitGroup.sha}`); - await this.sendCommitContentActivity(commitGroup, ctx.prInfo, ctx.failedPayloads); - return; - } + for (const pcRequest of pcRequests) { + const pcResponse = await this.purviewClient.processContent(commitUserId, pcRequest, psResult.scopeIdentifier, true); - const pcData = pcResponse.data as ProcessContentResponse; - if (pcData && isBlocked(pcData)) { - const blockingActions = getBlockingActions(pcData); - this.logger.warn(`BLOCKED: Commit ${commitGroup.sha} blocked by ${blockingActions.length} policy action(s)`); - ctx.blockedFiles.push({ - filePath: commitIdentifier, - userId: commitUserId, - policyActions: blockingActions, - }); + if (!pcResponse.success) { + this.logger.error(`PC failed for commit ${commitGroup.sha}: ${pcResponse.error}. Falling back to contentActivities.`); + ctx.failedPayloads.push(`pc-commit-${commitGroup.sha}`); + await this.sendCommitContentActivity(commitGroup, ctx.prInfo, ctx.failedPayloads); + return; + } + + const pcData = pcResponse.data as ProcessContentResponse; + if (pcData && isBlocked(pcData)) { + const blockingActions = getBlockingActions(pcData); + this.logger.warn(`BLOCKED: Commit ${commitGroup.sha} blocked by ${blockingActions.length} policy action(s)`); + ctx.blockedFiles.push({ + filePath: commitIdentifier, + userId: commitUserId, + policyActions: blockingActions, + }); + } } } else { - const conversationId = crypto.randomUUID() + '@GA'; - const pcaItem = this.payloadBuilder.buildCommitProcessContentBatchItem(commitGroup, conversationId, 0); - const pcaBatch: ProcessContentBatchRequest = { processContentRequests: [pcaItem] }; - const pcaResult = await this.purviewClient.processContentAsync(pcaBatch); - - if (!pcaResult.success) { - this.logger.error(`PCA failed for commit ${commitGroup.sha}: ${pcaResult.error}. Falling back to contentActivities.`); - ctx.failedPayloads.push(`pca-commit-${commitGroup.sha}`); - await this.sendCommitContentActivity(commitGroup, ctx.prInfo, ctx.failedPayloads); + const pcaBatches = this.payloadBuilder.buildCommitProcessContentBatchRequest([commitGroup]); + for (const pcaBatch of pcaBatches) { + const pcaResult = await this.purviewClient.processContentAsync(pcaBatch); + + if (!pcaResult.success) { + this.logger.error(`PCA failed for commit ${commitGroup.sha}: ${pcaResult.error}. Falling back to contentActivities.`); + ctx.failedPayloads.push(`pca-commit-${commitGroup.sha}`); + await this.sendCommitContentActivity(commitGroup, ctx.prInfo, ctx.failedPayloads); + break; + } } } } @@ -453,11 +458,13 @@ export class GitHubActionsRunner { } private async sendCommitContentActivity(commitGroup: CommitFiles, prInfo: PrInfo, failedPayloads: string[]): Promise { - const req = this.payloadBuilder.buildCommitUploadSignalRequest(commitGroup, prInfo); - const result = await this.purviewClient.uploadSignal(req); - if (!result.success) { - this.logger.error(`ContentActivities upload failed for commit ${commitGroup.sha}: ${result.error}`); - failedPayloads.push(`ca-commit-${commitGroup.sha}`); + const requests = this.payloadBuilder.buildCommitUploadSignalRequest(commitGroup, prInfo); + for (const req of requests) { + const result = await this.purviewClient.uploadSignal(req); + if (!result.success) { + this.logger.error(`ContentActivities upload failed for commit ${commitGroup.sha}: ${result.error}`); + failedPayloads.push(`ca-commit-${commitGroup.sha}`); + } } } diff --git a/tests/payload/payloadBuilder.test.ts b/tests/payload/payloadBuilder.test.ts index 5e09769..7ef7cf1 100644 --- a/tests/payload/payloadBuilder.test.ts +++ b/tests/payload/payloadBuilder.test.ts @@ -503,17 +503,19 @@ describe('PayloadBuilder', () => { timestamp: '2026-01-01T00:00:00Z', }; - it('buildCommitProcessContentBatchItem includes userEmail', () => { - const item = builder.buildCommitProcessContentBatchItem(commitGroup as any, 'conv-1', 0); - expect(item.userId).toBe('author-1'); - expect(item.userEmail).toBe('author@test.com'); + it('buildCommitProcessContentBatchItems includes userEmail', () => { + const items = builder.buildCommitProcessContentBatchItems(commitGroup as any, 'conv-1', 0); + expect(items).toHaveLength(1); + expect(items[0]!.userId).toBe('author-1'); + expect(items[0]!.userEmail).toBe('author@test.com'); }); it('buildCommitUploadSignalRequest includes userEmail', () => { const prInfo = createPrInfo(); - const req = builder.buildCommitUploadSignalRequest(commitGroup as any, prInfo); - expect(req.userId).toBe('author-1'); - expect(req.userEmail).toBe('author@test.com'); + const requests = builder.buildCommitUploadSignalRequest(commitGroup as any, prInfo); + expect(requests).toHaveLength(1); + expect(requests[0]!.userId).toBe('author-1'); + expect(requests[0]!.userEmail).toBe('author@test.com'); }); it('buildCommitContentToProcess agent uses UPN as name', () => { From 7e6a9fc44a92ec18ac5be5296b948350c77bf7ca Mon Sep 17 00:00:00 2001 From: Rishabh Chawla Date: Fri, 3 Apr 2026 13:53:43 -0700 Subject: [PATCH 16/20] Some more updates --- dist/index.js | 46 +++++++++++++++++++++++------------ src/file/fileProcessor.ts | 9 +++++-- src/runner/fullScanService.ts | 42 ++++++++++++++++++++++---------- 3 files changed, 66 insertions(+), 31 deletions(-) diff --git a/dist/index.js b/dist/index.js index a4dea68..372c56e 100644 --- a/dist/index.js +++ b/dist/index.js @@ -62462,14 +62462,17 @@ class FileProcessor { const normalized = this.normalizeRepoPath(path); const includePatterns = (this.config.filePatterns || []).map(p => p.trim()).filter(Boolean); const excludePatterns = (this.config.excludePatterns || []).map(p => p.trim()).filter(Boolean); + // Ensure patterns without path separators or ** match at any depth. + // e.g. '*.ts' → '**/*.ts', '*' → '**/*' + const normalizePattern = (p) => !p.includes('/') && !p.includes('**') ? `**/${p}` : p; const included = includePatterns.length === 0 ? true - : includePatterns.some(p => esm_minimatch(normalized, p, { dot: true })); + : includePatterns.some(p => esm_minimatch(normalized, normalizePattern(p), { dot: true })); if (!included) { this.logger.debug(`Excluding file '${path}' because it does not match any include patterns.`); return false; } - const excluded = excludePatterns.some(p => esm_minimatch(normalized, p, { dot: true })); + const excluded = excludePatterns.some(p => esm_minimatch(normalized, normalizePattern(p), { dot: true })); if (excluded) { this.logger.debug(`Excluding file '${path}' due to exclude pattern match.`); } @@ -64195,13 +64198,14 @@ class FullScanService { return; } this.logger.info(`Full scan: processing ${allCommits.length} commit(s)`); + // Group commits by user so we can batch PCA calls per committer + const commitsByUser = new Map(); + const fallbackCommits = []; for (const commitGroup of allCommits) { const commitUserId = commitGroup.authorId || this.config.userId; - const commitIdentifier = `commit:${commitGroup.sha}`; - // Check user PS cache if (userPsDeniedCache.has(commitUserId)) { this.logger.warn(`Skipping commit ${commitGroup.sha} — user ${commitUserId} cached 401.`); - await this.sendCommitContentActivity(commitGroup, prInfo, failedPayloads); + fallbackCommits.push(commitGroup); continue; } let userPsResponse = userPsCache.get(commitUserId); @@ -64217,27 +64221,36 @@ class FullScanService { if (userPsResponse.statusCode === 401) { userPsDeniedCache.add(commitUserId); } - await this.sendCommitContentActivity(commitGroup, prInfo, failedPayloads); + fallbackCommits.push(commitGroup); continue; } if (!userPsResponse.data?.value || userPsResponse.data.value.length === 0) { this.logger.warn(`No scopes for commit ${commitGroup.sha}, user ${commitUserId}. Falling back to contentActivities.`); - await this.sendCommitContentActivity(commitGroup, prInfo, failedPayloads); + fallbackCommits.push(commitGroup); continue; } - // Send via PCA batch (combines and chunks as needed) - const pcaBatches = this.payloadBuilder.buildCommitProcessContentBatchRequest([commitGroup]); + const existing = commitsByUser.get(commitUserId) || []; + existing.push(commitGroup); + commitsByUser.set(commitUserId, existing); + } + // Send fallback commits via contentActivities + for (const commitGroup of fallbackCommits) { + await this.sendCommitContentActivity(commitGroup, prInfo, failedPayloads); + } + // Send batched PCA calls per user + for (const [userId, userCommits] of commitsByUser) { + const pcaBatches = this.payloadBuilder.buildCommitProcessContentBatchRequest(userCommits); + this.logger.info(`Full scan: sending ${userCommits.length} commit(s) in ${pcaBatches.length} PCA batch(es) for user ${userId}`); for (const pcaBatch of pcaBatches) { const pcaResult = await this.purviewClient.processContentAsync(pcaBatch); if (!pcaResult.success) { - this.logger.error(`PCA failed for commit ${commitGroup.sha}: ${pcaResult.error}. Falling back to contentActivities.`); - failedPayloads.push(`pca-fullscan-commit-${commitGroup.sha}`); - await this.sendCommitContentActivity(commitGroup, prInfo, failedPayloads); + this.logger.error(`PCA batch failed for user ${userId}: ${pcaResult.error}. Falling back to contentActivities for ${userCommits.length} commit(s).`); + failedPayloads.push(`pca-fullscan-commits-${userId}`); + for (const commitGroup of userCommits) { + await this.sendCommitContentActivity(commitGroup, prInfo, failedPayloads); + } break; } - else { - this.logger.debug(`Full scan: PCA completed for ${commitIdentifier}`); - } } } } @@ -64442,7 +64455,8 @@ class FullScanService { break; } else { - this.logger.debug(`Full scan PCA batch completed for user ${userId}`); + const committerEmail = userFiles[0]?.committerEmail || 'unknown'; + this.logger.debug(`Full scan PCA batch completed for user ${userId} (committer: ${committerEmail})`); } } } diff --git a/src/file/fileProcessor.ts b/src/file/fileProcessor.ts index 55082ee..d102850 100644 --- a/src/file/fileProcessor.ts +++ b/src/file/fileProcessor.ts @@ -136,16 +136,21 @@ export class FileProcessor { const includePatterns = (this.config.filePatterns || []).map(p => p.trim()).filter(Boolean); const excludePatterns = (this.config.excludePatterns || []).map(p => p.trim()).filter(Boolean); + // Ensure patterns without path separators or ** match at any depth. + // e.g. '*.ts' → '**/*.ts', '*' → '**/*' + const normalizePattern = (p: string) => + !p.includes('/') && !p.includes('**') ? `**/${p}` : p; + const included = includePatterns.length === 0 ? true - : includePatterns.some(p => minimatch(normalized, p, { dot: true })); + : includePatterns.some(p => minimatch(normalized, normalizePattern(p), { dot: true })); if (!included) { this.logger.debug(`Excluding file '${path}' because it does not match any include patterns.`); return false; } - const excluded = excludePatterns.some(p => minimatch(normalized, p, { dot: true })); + const excluded = excludePatterns.some(p => minimatch(normalized, normalizePattern(p), { dot: true })); if (excluded) { this.logger.debug(`Excluding file '${path}' due to exclude pattern match.`); diff --git a/src/runner/fullScanService.ts b/src/runner/fullScanService.ts index c887c06..078249b 100644 --- a/src/runner/fullScanService.ts +++ b/src/runner/fullScanService.ts @@ -177,14 +177,16 @@ export class FullScanService { } this.logger.info(`Full scan: processing ${allCommits.length} commit(s)`); + // Group commits by user so we can batch PCA calls per committer + const commitsByUser = new Map(); + const fallbackCommits: CommitFiles[] = []; + for (const commitGroup of allCommits) { const commitUserId = commitGroup.authorId || this.config.userId; - const commitIdentifier = `commit:${commitGroup.sha}`; - // Check user PS cache if (userPsDeniedCache.has(commitUserId)) { this.logger.warn(`Skipping commit ${commitGroup.sha} — user ${commitUserId} cached 401.`); - await this.sendCommitContentActivity(commitGroup, prInfo, failedPayloads); + fallbackCommits.push(commitGroup); continue; } @@ -202,28 +204,41 @@ export class FullScanService { if (userPsResponse.statusCode === 401) { userPsDeniedCache.add(commitUserId); } - await this.sendCommitContentActivity(commitGroup, prInfo, failedPayloads); + fallbackCommits.push(commitGroup); continue; } if (!userPsResponse.data?.value || userPsResponse.data.value.length === 0) { this.logger.warn(`No scopes for commit ${commitGroup.sha}, user ${commitUserId}. Falling back to contentActivities.`); - await this.sendCommitContentActivity(commitGroup, prInfo, failedPayloads); + fallbackCommits.push(commitGroup); continue; } - // Send via PCA batch (combines and chunks as needed) - const pcaBatches = this.payloadBuilder.buildCommitProcessContentBatchRequest([commitGroup]); + const existing = commitsByUser.get(commitUserId) || []; + existing.push(commitGroup); + commitsByUser.set(commitUserId, existing); + } + + // Send fallback commits via contentActivities + for (const commitGroup of fallbackCommits) { + await this.sendCommitContentActivity(commitGroup, prInfo, failedPayloads); + } + + // Send batched PCA calls per user + for (const [userId, userCommits] of commitsByUser) { + const pcaBatches = this.payloadBuilder.buildCommitProcessContentBatchRequest(userCommits); + this.logger.info(`Full scan: sending ${userCommits.length} commit(s) in ${pcaBatches.length} PCA batch(es) for user ${userId}`); + for (const pcaBatch of pcaBatches) { const pcaResult = await this.purviewClient.processContentAsync(pcaBatch); if (!pcaResult.success) { - this.logger.error(`PCA failed for commit ${commitGroup.sha}: ${pcaResult.error}. Falling back to contentActivities.`); - failedPayloads.push(`pca-fullscan-commit-${commitGroup.sha}`); - await this.sendCommitContentActivity(commitGroup, prInfo, failedPayloads); + this.logger.error(`PCA batch failed for user ${userId}: ${pcaResult.error}. Falling back to contentActivities for ${userCommits.length} commit(s).`); + failedPayloads.push(`pca-fullscan-commits-${userId}`); + for (const commitGroup of userCommits) { + await this.sendCommitContentActivity(commitGroup, prInfo, failedPayloads); + } break; - } else { - this.logger.debug(`Full scan: PCA completed for ${commitIdentifier}`); } } } @@ -463,7 +478,8 @@ export class FullScanService { await this.sendContentActivities(userFiles, prInfo, failedPayloads); break; } else { - this.logger.debug(`Full scan PCA batch completed for user ${userId}`); + const committerEmail = userFiles[0]?.committerEmail || 'unknown'; + this.logger.debug(`Full scan PCA batch completed for user ${userId} (committer: ${committerEmail})`); } } } From 5554fb6c58ddd9e00e756c74e280377bc8937c17 Mon Sep 17 00:00:00 2001 From: Rishabh Chawla Date: Fri, 3 Apr 2026 14:13:48 -0700 Subject: [PATCH 17/20] Some more updates --- dist/index.js | 5 +++-- src/payload/payloadBuilder.ts | 5 +++-- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/dist/index.js b/dist/index.js index 372c56e..b28ec0e 100644 --- a/dist/index.js +++ b/dist/index.js @@ -63197,6 +63197,7 @@ class PayloadBuilder { logger; maxContentSize = 1024 * 1024 * 3; // 3 MB — max for the content data field maxRequestSize = 1024 * 1024 * 3.7; // 3.7 MB — max for the complete request + maxBatchItems = 64; // API limit on items per PCA batch static domain = "github.com"; static scopeActivity = "uploadText"; static appName = "GitHub"; @@ -63500,7 +63501,7 @@ class PayloadBuilder { const batchOverhead = 200; for (const item of allItems) { const itemSize = JSON.stringify(item).length; - if (currentItems.length > 0 && currentSize + itemSize + batchOverhead > this.maxRequestSize) { + if (currentItems.length > 0 && (currentItems.length >= this.maxBatchItems || currentSize + itemSize + batchOverhead > this.maxRequestSize)) { batches.push({ processContentRequests: currentItems }); currentItems = []; currentSize = 0; @@ -63857,7 +63858,7 @@ class PayloadBuilder { const batchOverhead = 200; for (const item of allItems) { const itemSize = JSON.stringify(item).length; - if (currentItems.length > 0 && currentSize + itemSize + batchOverhead > this.maxRequestSize) { + if (currentItems.length > 0 && (currentItems.length >= this.maxBatchItems || currentSize + itemSize + batchOverhead > this.maxRequestSize)) { batches.push({ processContentRequests: currentItems }); currentItems = []; currentSize = 0; diff --git a/src/payload/payloadBuilder.ts b/src/payload/payloadBuilder.ts index cf3fa88..c2edeea 100644 --- a/src/payload/payloadBuilder.ts +++ b/src/payload/payloadBuilder.ts @@ -5,6 +5,7 @@ export class PayloadBuilder { private readonly logger: Logger; private readonly maxContentSize = 1024 * 1024 * 3; // 3 MB — max for the content data field private readonly maxRequestSize = 1024 * 1024 * 3.7; // 3.7 MB — max for the complete request + private readonly maxBatchItems = 64; // API limit on items per PCA batch private static readonly domain: string = "github.com"; private static readonly scopeActivity: ProtectionScopeActivities = "uploadText"; private static readonly appName = "GitHub"; @@ -362,7 +363,7 @@ export class PayloadBuilder { for (const item of allItems) { const itemSize = JSON.stringify(item).length; - if (currentItems.length > 0 && currentSize + itemSize + batchOverhead > this.maxRequestSize) { + if (currentItems.length > 0 && (currentItems.length >= this.maxBatchItems || currentSize + itemSize + batchOverhead > this.maxRequestSize)) { batches.push({ processContentRequests: currentItems }); currentItems = []; currentSize = 0; @@ -789,7 +790,7 @@ export class PayloadBuilder { for (const item of allItems) { const itemSize = JSON.stringify(item).length; - if (currentItems.length > 0 && currentSize + itemSize + batchOverhead > this.maxRequestSize) { + if (currentItems.length > 0 && (currentItems.length >= this.maxBatchItems || currentSize + itemSize + batchOverhead > this.maxRequestSize)) { batches.push({ processContentRequests: currentItems }); currentItems = []; currentSize = 0; From e2c7a01cfe3409f8b9c06deb439bf20f8ef328b5 Mon Sep 17 00:00:00 2001 From: Rishabh Chawla Date: Fri, 3 Apr 2026 15:43:04 -0700 Subject: [PATCH 18/20] Some more updates --- dist/index.js | 11 ++++++----- src/runner/fullScanService.ts | 11 ++++++----- 2 files changed, 12 insertions(+), 10 deletions(-) diff --git a/dist/index.js b/dist/index.js index b28ec0e..ec8d1c1 100644 --- a/dist/index.js +++ b/dist/index.js @@ -64446,18 +64446,19 @@ class FullScanService { } // User has scopes → send PCA batch const pcaBatchRequests = this.payloadBuilder.buildProcessContentBatchRequest(userFiles); - this.logger.info(`Full scan: sending ${userFiles.length} file(s) to PCA batch for user ${userId}`); - for (const pcaBatchRequest of pcaBatchRequests) { + const committerEmail = userFiles.find(f => f.committerEmail)?.committerEmail || 'unknown'; + this.logger.info(`Full scan: sending ${userFiles.length} file(s) in ${pcaBatchRequests.length} PCA batch(es) for user ${userId} (committer: ${committerEmail})`); + for (let i = 0; i < pcaBatchRequests.length; i++) { + const pcaBatchRequest = pcaBatchRequests[i]; const pcaResult = await this.purviewClient.processContentAsync(pcaBatchRequest); if (!pcaResult.success) { - this.logger.error(`PCA batch failed for user ${userId}: ${pcaResult.error}. Falling back to contentActivities.`); + this.logger.error(`PCA batch ${i + 1}/${pcaBatchRequests.length} failed for user ${userId}: ${pcaResult.error}. Falling back to contentActivities.`); failedPayloads.push(`pca-fullscan-${userId}`); await this.sendContentActivities(userFiles, prInfo, failedPayloads); break; } else { - const committerEmail = userFiles[0]?.committerEmail || 'unknown'; - this.logger.debug(`Full scan PCA batch completed for user ${userId} (committer: ${committerEmail})`); + this.logger.debug(`Full scan PCA batch ${i + 1}/${pcaBatchRequests.length} completed for user ${userId}`); } } } diff --git a/src/runner/fullScanService.ts b/src/runner/fullScanService.ts index 078249b..0d823a2 100644 --- a/src/runner/fullScanService.ts +++ b/src/runner/fullScanService.ts @@ -468,18 +468,19 @@ export class FullScanService { // User has scopes → send PCA batch const pcaBatchRequests = this.payloadBuilder.buildProcessContentBatchRequest(userFiles); - this.logger.info(`Full scan: sending ${userFiles.length} file(s) to PCA batch for user ${userId}`); - for (const pcaBatchRequest of pcaBatchRequests) { + const committerEmail = userFiles.find(f => f.committerEmail)?.committerEmail || 'unknown'; + this.logger.info(`Full scan: sending ${userFiles.length} file(s) in ${pcaBatchRequests.length} PCA batch(es) for user ${userId} (committer: ${committerEmail})`); + for (let i = 0; i < pcaBatchRequests.length; i++) { + const pcaBatchRequest = pcaBatchRequests[i]!; const pcaResult = await this.purviewClient.processContentAsync(pcaBatchRequest); if (!pcaResult.success) { - this.logger.error(`PCA batch failed for user ${userId}: ${pcaResult.error}. Falling back to contentActivities.`); + this.logger.error(`PCA batch ${i + 1}/${pcaBatchRequests.length} failed for user ${userId}: ${pcaResult.error}. Falling back to contentActivities.`); failedPayloads.push(`pca-fullscan-${userId}`); await this.sendContentActivities(userFiles, prInfo, failedPayloads); break; } else { - const committerEmail = userFiles[0]?.committerEmail || 'unknown'; - this.logger.debug(`Full scan PCA batch completed for user ${userId} (committer: ${committerEmail})`); + this.logger.debug(`Full scan PCA batch ${i + 1}/${pcaBatchRequests.length} completed for user ${userId}`); } } } From 2ac592db567a1365f6f5b14085de34b048e4355a Mon Sep 17 00:00:00 2001 From: Rishabh Chawla Date: Fri, 3 Apr 2026 15:54:42 -0700 Subject: [PATCH 19/20] Some more updates --- dist/index.js | 11 ----------- src/api/purviewClient.ts | 11 ----------- 2 files changed, 22 deletions(-) diff --git a/dist/index.js b/dist/index.js index ec8d1c1..7ee7fbf 100644 --- a/dist/index.js +++ b/dist/index.js @@ -62155,11 +62155,6 @@ class PurviewClient { requestId, additionalHeaders: Object.keys(additionalHeaders), }); - if (payload) { - this.logger.debug(`[${operationName}] Request payload`, { - payload: JSON.parse(JSON.stringify(JSON.parse(payload), this.jsonReplacer)), - }); - } try { const response = await fetch(endpoint, { method: method, @@ -62211,12 +62206,6 @@ class PurviewClient { try { const data = responseText ? JSON.parse(responseText) : {}; const etag = response.headers.get('etag')?.replace(/"/g, '') || undefined; - this.logger.debug(`[${operationName}] Response payload`, { - statusCode: response.status, - etag, - correlationId, - data: JSON.parse(JSON.stringify(data, this.jsonReplacer)), - }); this.logger.endGroup(); return { success: true, diff --git a/src/api/purviewClient.ts b/src/api/purviewClient.ts index ac54b47..f50c707 100644 --- a/src/api/purviewClient.ts +++ b/src/api/purviewClient.ts @@ -224,11 +224,6 @@ export class PurviewClient { requestId, additionalHeaders: Object.keys(additionalHeaders), }); - if (payload) { - this.logger.debug(`[${operationName}] Request payload`, { - payload: JSON.parse(JSON.stringify(JSON.parse(payload), this.jsonReplacer)), - }); - } try { const response = await fetch(endpoint, { @@ -287,12 +282,6 @@ export class PurviewClient { try { const data = responseText ? JSON.parse(responseText) : {}; const etag = response.headers.get('etag')?.replace(/"/g, '') || undefined; - this.logger.debug(`[${operationName}] Response payload`, { - statusCode: response.status, - etag, - correlationId, - data: JSON.parse(JSON.stringify(data, this.jsonReplacer)), - }); this.logger.endGroup(); return { success: true, From e3f548e970a5fbd906e928867ad6216d94cd95f8 Mon Sep 17 00:00:00 2001 From: Rishabh Chawla Date: Fri, 3 Apr 2026 16:10:39 -0700 Subject: [PATCH 20/20] Merge master --- package-lock.json | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/package-lock.json b/package-lock.json index f5911da..36ec08d 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1780,9 +1780,9 @@ } }, "node_modules/anymatch/node_modules/picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.2.tgz", + "integrity": "sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA==", "dev": true, "license": "MIT", "engines": { @@ -4333,9 +4333,9 @@ "license": "ISC" }, "node_modules/picomatch": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", - "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.4.tgz", + "integrity": "sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A==", "dev": true, "license": "MIT", "engines": {