@acorex-platform/extension-google-client 0.0.33 → 0.0.37

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"acorex-platform-extension-google-client-complete-google-oauth.command-BE9n_4Yn.mjs","sources":["../../../../libs/extensions/google/client/src/lib/features/connect/complete-google-oauth.command.ts"],"sourcesContent":["//#region ---- Complete Google OAuth callback ----\n\nimport { AXPCommand, type AXPCommandExecuteResultPromise } from '@acorex-platform/framework-shared/runtime';\nimport type { AXPRuntimeCommandResult, AXPSafeIntegrationConnectionDto } from '@acorex-platform/framework-shared/core';\nimport { AXP_INTEGRATION_CONNECTION_ESTABLISHED } from '@acorex-platform/framework-client/common';\nimport {\n AXMIntegrationConnectionManager,\n toSafeIntegrationConnectionDto,\n} from '@acorex-platform/module-integration-management-client';\nimport { AXEGoogleOAuthHttpClient } from '../../api/google-oauth-http.client';\nimport { Injectable, inject } from '@angular/core';\n\nexport interface CompleteGoogleOAuthCommandInput {\n state: string;\n code: string;\n}\n\n@Injectable({ providedIn: 'root' })\nexport class CompleteGoogleOAuthCommand\n implements AXPCommand<CompleteGoogleOAuthCommandInput, AXPSafeIntegrationConnectionDto>\n{\n private readonly http = inject(AXEGoogleOAuthHttpClient);\n private readonly connectionManager = inject(AXMIntegrationConnectionManager);\n private readonly establishedHandlers = inject(AXP_INTEGRATION_CONNECTION_ESTABLISHED, { optional: true });\n\n async execute(\n input: CompleteGoogleOAuthCommandInput,\n ): AXPCommandExecuteResultPromise<AXPSafeIntegrationConnectionDto> {\n try {\n const { connectionId } = await this.http.completeOAuth({\n state: input.state,\n code: input.code,\n });\n\n const connection = await this.connectionManager.getByIdForCurrentUser(connectionId);\n if (!connection) {\n return { success: false, message: { text: 'Connection not found after Google OAuth callback.' } };\n }\n\n const safe = toSafeIntegrationConnectionDto(connection);\n await this.dispatchEstablished(safe);\n return { success: true, kind: 'object', data: safe };\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : 'Google OAuth callback failed.';\n return { success: false, message: { text: message } };\n }\n }\n\n private async dispatchEstablished(connection: AXPSafeIntegrationConnectionDto): Promise<void> {\n const list = this.establishedHandlers ?? [];\n for (const handler of list) {\n const resolved = handler instanceof Promise ? await handler : handler;\n if (resolved.providerId === connection.providerId) {\n await resolved.onEstablished(connection);\n }\n }\n }\n}\n\n//#endregion\n"],"names":[],"mappings":";;;;;;MAkBa,0BAA0B,CAAA;AADvC,IAAA,WAAA,GAAA;AAImB,QAAA,IAAA,CAAA,IAAI,GAAG,MAAM,CAAC,wBAAwB,CAAC;AACvC,QAAA,IAAA,CAAA,iBAAiB,GAAG,MAAM,CAAC,+BAA+B,CAAC;QAC3D,IAAA,CAAA,mBAAmB,GAAG,MAAM,CAAC,sCAAsC,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;AAkC1G,IAAA;IAhCC,MAAM,OAAO,CACX,KAAsC,EAAA;AAEtC,QAAA,IAAI;YACF,MAAM,EAAE,YAAY,EAAE,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC;gBACrD,KAAK,EAAE,KAAK,CAAC,KAAK;gBAClB,IAAI,EAAE,KAAK,CAAC,IAAI;AACjB,aAAA,CAAC;YAEF,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,iBAAiB,CAAC,qBAAqB,CAAC,YAAY,CAAC;YACnF,IAAI,CAAC,UAAU,EAAE;AACf,gBAAA,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,mDAAmD,EAAE,EAAE;YACnG;AAEA,YAAA,MAAM,IAAI,GAAG,8BAA8B,CAAC,UAAU,CAAC;AACvD,YAAA,MAAM,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC;AACpC,YAAA,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,EAAE;QACtD;QAAE,OAAO,KAAc,EAAE;AACvB,YAAA,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,GAAG,KAAK,CAAC,OAAO,GAAG,+BAA+B;AACxF,YAAA,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE;QACvD;IACF;IAEQ,MAAM,mBAAmB,CAAC,UAA2C,EAAA;AAC3E,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,mBAAmB,IAAI,EAAE;AAC3C,QAAA,KAAK,MAAM,OAAO,IAAI,IAAI,EAAE;AAC1B,YAAA,MAAM,QAAQ,GAAG,OAAO,YAAY,OAAO,GAAG,MAAM,OAAO,GAAG,OAAO;YACrE,IAAI,QAAQ,CAAC,UAAU,KAAK,UAAU,CAAC,UAAU,EAAE;AACjD,gBAAA,MAAM,QAAQ,CAAC,aAAa,CAAC,UAAU,CAAC;YAC1C;QACF;IACF;8GAtCW,0BAA0B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAA1B,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,0BAA0B,cADb,MAAM,EAAA,CAAA,CAAA;;2FACnB,0BAA0B,EAAA,UAAA,EAAA,CAAA;kBADtC,UAAU;mBAAC,EAAE,UAAU,EAAE,MAAM,EAAE;;;;;"}
1
+ {"version":3,"file":"acorex-platform-extension-google-client-complete-google-oauth.command-BE9n_4Yn.mjs","sources":["../../../../libs/extensions/google/client/src/lib/features/connect/complete-google-oauth.command.ts"],"sourcesContent":["//#region ---- Complete Google OAuth callback ----\n\nimport { AXPCommand, type AXPCommandExecuteResultPromise } from '@acorex-platform/framework-shared/runtime';\nimport type { AXPRuntimeCommandResult, AXPSafeIntegrationConnectionDto } from '@acorex-platform/framework-shared/core';\nimport { AXP_INTEGRATION_CONNECTION_ESTABLISHED } from '@acorex-platform/framework-client/common';\nimport {\n AXMIntegrationConnectionManager,\n toSafeIntegrationConnectionDto,\n} from '@acorex-platform/module-integration-management-client';\nimport { AXEGoogleOAuthHttpClient } from '../../api/google-oauth-http.client';\nimport { Injectable, inject } from '@angular/core';\n\nexport interface CompleteGoogleOAuthCommandInput {\n state: string;\n code: string;\n}\n\n@Injectable({ providedIn: 'root' })\nexport class CompleteGoogleOAuthCommand\n implements AXPCommand<CompleteGoogleOAuthCommandInput, AXPSafeIntegrationConnectionDto>\n{\n private readonly http = inject(AXEGoogleOAuthHttpClient);\n private readonly connectionManager = inject(AXMIntegrationConnectionManager);\n private readonly establishedHandlers = inject(AXP_INTEGRATION_CONNECTION_ESTABLISHED, { optional: true });\n\n async execute(\n input: CompleteGoogleOAuthCommandInput,\n ): AXPCommandExecuteResultPromise<AXPSafeIntegrationConnectionDto> {\n try {\n const { connectionId } = await this.http.completeOAuth({\n state: input.state,\n code: input.code,\n });\n\n const connection = await this.connectionManager.getByIdForCurrentUser(connectionId);\n if (!connection) {\n return { success: false, message: { text: 'Connection not found after Google OAuth callback.' } };\n }\n\n const safe = toSafeIntegrationConnectionDto(connection);\n await this.dispatchEstablished(safe);\n return { success: true, kind: 'object', data: safe };\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : 'Google OAuth callback failed.';\n return { success: false, message: { text: message } };\n }\n }\n\n private async dispatchEstablished(connection: AXPSafeIntegrationConnectionDto): Promise<void> {\n const list = this.establishedHandlers ?? [];\n for (const handler of list) {\n const resolved = handler instanceof Promise ? await handler : handler;\n if (resolved.providerId === connection.providerId) {\n await resolved.onEstablished(connection);\n }\n }\n }\n}\n\n//#endregion\n"],"names":[],"mappings":";;;;;;MAkBa,0BAA0B,CAAA;AADvC,IAAA,WAAA,GAAA;AAImB,QAAA,IAAA,CAAA,IAAI,GAAG,MAAM,CAAC,wBAAwB,CAAC;AACvC,QAAA,IAAA,CAAA,iBAAiB,GAAG,MAAM,CAAC,+BAA+B,CAAC;QAC3D,IAAA,CAAA,mBAAmB,GAAG,MAAM,CAAC,sCAAsC,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;AAkC1G,IAAA;IAhCC,MAAM,OAAO,CACX,KAAsC,EAAA;AAEtC,QAAA,IAAI;YACF,MAAM,EAAE,YAAY,EAAE,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC;gBACrD,KAAK,EAAE,KAAK,CAAC,KAAK;gBAClB,IAAI,EAAE,KAAK,CAAC,IAAI;AACjB,aAAA,CAAC;YAEF,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,iBAAiB,CAAC,qBAAqB,CAAC,YAAY,CAAC;YACnF,IAAI,CAAC,UAAU,EAAE;AACf,gBAAA,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,mDAAmD,EAAE,EAAE;YACnG;AAEA,YAAA,MAAM,IAAI,GAAG,8BAA8B,CAAC,UAAU,CAAC;AACvD,YAAA,MAAM,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC;AACpC,YAAA,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,EAAE;QACtD;QAAE,OAAO,KAAc,EAAE;AACvB,YAAA,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,GAAG,KAAK,CAAC,OAAO,GAAG,+BAA+B;AACxF,YAAA,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE;QACvD;IACF;IAEQ,MAAM,mBAAmB,CAAC,UAA2C,EAAA;AAC3E,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,mBAAmB,IAAI,EAAE;AAC3C,QAAA,KAAK,MAAM,OAAO,IAAI,IAAI,EAAE;AAC1B,YAAA,MAAM,QAAQ,GAAG,OAAO,YAAY,OAAO,GAAG,MAAM,OAAO,GAAG,OAAO;YACrE,IAAI,QAAQ,CAAC,UAAU,KAAK,UAAU,CAAC,UAAU,EAAE;AACjD,gBAAA,MAAM,QAAQ,CAAC,aAAa,CAAC,UAAU,CAAC;YAC1C;QACF;IACF;8GAtCW,0BAA0B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAA1B,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,0BAA0B,cADb,MAAM,EAAA,CAAA,CAAA;;2FACnB,0BAA0B,EAAA,UAAA,EAAA,CAAA;kBADtC,UAAU;mBAAC,EAAE,UAAU,EAAE,MAAM,EAAE;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"acorex-platform-extension-google-client-connect-google.command-DZ1pU8xZ.mjs","sources":["../../../../libs/extensions/google/client/src/lib/features/connect/connect-google.command.ts"],"sourcesContent":["//#region ---- Connect Google (OAuth 2.0) ----\n\nimport { AXPCommand, type AXPCommandExecuteResultPromise } from '@acorex-platform/framework-shared/runtime';\nimport {\n type AXPRuntimeCommandResult,\n type AXPIntegrationConnectionScope,\n} from '@acorex-platform/framework-shared/core';\nimport { AXPSessionService } from '@acorex-platform/framework-client/auth';\nimport { type ConnectCommandResult } from '@acorex-platform/module-integration-management-client';\nimport { AXEGoogleOAuthHttpClient } from '../../api/google-oauth-http.client';\nimport { Injectable, inject } from '@angular/core';\n\nexport interface ConnectGoogleCommandInput {\n providerId?: string;\n connectionScope?: AXPIntegrationConnectionScope;\n}\n\n@Injectable({ providedIn: 'root' })\nexport class ConnectGoogleCommand implements AXPCommand<ConnectGoogleCommandInput, ConnectCommandResult> {\n private readonly oauthHttp = inject(AXEGoogleOAuthHttpClient);\n private readonly sessionService = inject(AXPSessionService);\n\n async execute(input: ConnectGoogleCommandInput = {}): AXPCommandExecuteResultPromise<ConnectCommandResult> {\n try {\n const providerId = input.providerId ?? 'google';\n const connectionScope = input.connectionScope ?? 'user';\n\n const appName = this.sessionService.application?.name ?? 'demo';\n const redirectUri = `${window.location.origin}/${appName}/integrations/oauth/callback/${providerId}`;\n const result = await this.oauthHttp.startOAuth({\n redirectUri,\n connectionScope,\n displayName: providerId,\n });\n\n if (!result.redirectUrl) {\n return {\n success: false,\n message: { text: 'OAuth redirect URL was not returned.' },\n };\n }\n\n return { success: true, kind: 'object', data: { outcome: 'redirect', redirectUrl: result.redirectUrl } };\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : 'Failed to connect Google.';\n return { success: false, message: { text: message } };\n }\n }\n}\n\n//#endregion\n"],"names":[],"mappings":";;;;;MAkBa,oBAAoB,CAAA;AADjC,IAAA,WAAA,GAAA;AAEmB,QAAA,IAAA,CAAA,SAAS,GAAG,MAAM,CAAC,wBAAwB,CAAC;AAC5C,QAAA,IAAA,CAAA,cAAc,GAAG,MAAM,CAAC,iBAAiB,CAAC;AA4B5D,IAAA;AA1BC,IAAA,MAAM,OAAO,CAAC,KAAA,GAAmC,EAAE,EAAA;AACjD,QAAA,IAAI;AACF,YAAA,MAAM,UAAU,GAAG,KAAK,CAAC,UAAU,IAAI,QAAQ;AAC/C,YAAA,MAAM,eAAe,GAAG,KAAK,CAAC,eAAe,IAAI,MAAM;YAEvD,MAAM,OAAO,GAAG,IAAI,CAAC,cAAc,CAAC,WAAW,EAAE,IAAI,IAAI,MAAM;AAC/D,YAAA,MAAM,WAAW,GAAG,CAAA,EAAG,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAA,CAAA,EAAI,OAAO,CAAA,6BAAA,EAAgC,UAAU,EAAE;YACpG,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC;gBAC7C,WAAW;gBACX,eAAe;AACf,gBAAA,WAAW,EAAE,UAAU;AACxB,aAAA,CAAC;AAEF,YAAA,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE;gBACvB,OAAO;AACL,oBAAA,OAAO,EAAE,KAAK;AACd,oBAAA,OAAO,EAAE,EAAE,IAAI,EAAE,sCAAsC,EAAE;iBAC1D;YACH;YAEA,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,EAAE,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,CAAC,WAAW,EAAE,EAAE;QAC1G;QAAE,OAAO,KAAc,EAAE;AACvB,YAAA,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,GAAG,KAAK,CAAC,OAAO,GAAG,2BAA2B;AACpF,YAAA,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE;QACvD;IACF;8GA7BW,oBAAoB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAApB,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,oBAAoB,cADP,MAAM,EAAA,CAAA,CAAA;;2FACnB,oBAAoB,EAAA,UAAA,EAAA,CAAA;kBADhC,UAAU;mBAAC,EAAE,UAAU,EAAE,MAAM,EAAE;;;;;"}
1
+ {"version":3,"file":"acorex-platform-extension-google-client-connect-google.command-DZ1pU8xZ.mjs","sources":["../../../../libs/extensions/google/client/src/lib/features/connect/connect-google.command.ts"],"sourcesContent":["//#region ---- Connect Google (OAuth 2.0) ----\n\nimport { AXPCommand, type AXPCommandExecuteResultPromise } from '@acorex-platform/framework-shared/runtime';\nimport {\n type AXPRuntimeCommandResult,\n type AXPIntegrationConnectionScope,\n} from '@acorex-platform/framework-shared/core';\nimport { AXPSessionService } from '@acorex-platform/framework-client/auth';\nimport { type ConnectCommandResult } from '@acorex-platform/module-integration-management-client';\nimport { AXEGoogleOAuthHttpClient } from '../../api/google-oauth-http.client';\nimport { Injectable, inject } from '@angular/core';\n\nexport interface ConnectGoogleCommandInput {\n providerId?: string;\n connectionScope?: AXPIntegrationConnectionScope;\n}\n\n@Injectable({ providedIn: 'root' })\nexport class ConnectGoogleCommand implements AXPCommand<ConnectGoogleCommandInput, ConnectCommandResult> {\n private readonly oauthHttp = inject(AXEGoogleOAuthHttpClient);\n private readonly sessionService = inject(AXPSessionService);\n\n async execute(input: ConnectGoogleCommandInput = {}): AXPCommandExecuteResultPromise<ConnectCommandResult> {\n try {\n const providerId = input.providerId ?? 'google';\n const connectionScope = input.connectionScope ?? 'user';\n\n const appName = this.sessionService.application?.name ?? 'demo';\n const redirectUri = `${window.location.origin}/${appName}/integrations/oauth/callback/${providerId}`;\n const result = await this.oauthHttp.startOAuth({\n redirectUri,\n connectionScope,\n displayName: providerId,\n });\n\n if (!result.redirectUrl) {\n return {\n success: false,\n message: { text: 'OAuth redirect URL was not returned.' },\n };\n }\n\n return { success: true, kind: 'object', data: { outcome: 'redirect', redirectUrl: result.redirectUrl } };\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : 'Failed to connect Google.';\n return { success: false, message: { text: message } };\n }\n }\n}\n\n//#endregion\n"],"names":[],"mappings":";;;;;MAkBa,oBAAoB,CAAA;AADjC,IAAA,WAAA,GAAA;AAEmB,QAAA,IAAA,CAAA,SAAS,GAAG,MAAM,CAAC,wBAAwB,CAAC;AAC5C,QAAA,IAAA,CAAA,cAAc,GAAG,MAAM,CAAC,iBAAiB,CAAC;AA4B5D,IAAA;AA1BC,IAAA,MAAM,OAAO,CAAC,KAAA,GAAmC,EAAE,EAAA;AACjD,QAAA,IAAI;AACF,YAAA,MAAM,UAAU,GAAG,KAAK,CAAC,UAAU,IAAI,QAAQ;AAC/C,YAAA,MAAM,eAAe,GAAG,KAAK,CAAC,eAAe,IAAI,MAAM;YAEvD,MAAM,OAAO,GAAG,IAAI,CAAC,cAAc,CAAC,WAAW,EAAE,IAAI,IAAI,MAAM;AAC/D,YAAA,MAAM,WAAW,GAAG,CAAA,EAAG,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAA,CAAA,EAAI,OAAO,CAAA,6BAAA,EAAgC,UAAU,EAAE;YACpG,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC;gBAC7C,WAAW;gBACX,eAAe;AACf,gBAAA,WAAW,EAAE,UAAU;AACxB,aAAA,CAAC;AAEF,YAAA,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE;gBACvB,OAAO;AACL,oBAAA,OAAO,EAAE,KAAK;AACd,oBAAA,OAAO,EAAE,EAAE,IAAI,EAAE,sCAAsC,EAAE;iBAC1D;YACH;YAEA,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,EAAE,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,CAAC,WAAW,EAAE,EAAE;QAC1G;QAAE,OAAO,KAAc,EAAE;AACvB,YAAA,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,GAAG,KAAK,CAAC,OAAO,GAAG,2BAA2B;AACpF,YAAA,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE;QACvD;IACF;8GA7BW,oBAAoB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAApB,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,oBAAoB,cADP,MAAM,EAAA,CAAA,CAAA;;2FACnB,oBAAoB,EAAA,UAAA,EAAA,CAAA;kBADhC,UAAU;mBAAC,EAAE,UAAU,EAAE,MAAM,EAAE;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"acorex-platform-extension-google-client-contracts.mjs","sources":["../../../../libs/extensions/google/contracts/src/root-config.ts","../../../../libs/extensions/google/contracts/src/google.settings.keys.ts","../../../../libs/extensions/google/contracts/src/commands.keys.ts","../../../../libs/extensions/google/contracts/src/oauth.api.types.ts","../../../../libs/extensions/google/contracts/src/acorex-platform-extension-google-client-contracts.ts"],"sourcesContent":["//#region ---- Module Config ----\n\nconst config = {\n i18n: 'extensions-google',\n module: 'google-extension',\n};\n\nexport const RootConfig = {\n config,\n module: {\n name: config.module,\n icon: 'fa-brands fa-google',\n },\n};\n\n//#endregion\n","/**\n * User-scoped settings for Google sync preferences (Google extension).\n */\nexport enum AXEGoogleSettings {\n /** When true, Gmail sync is enabled for the connected Google account. */\n GmailSyncEnabled = 'Google:Setting:Sync.GmailEnabled',\n\n /** When true, Google Calendar sync is enabled for the connected Google account. */\n CalendarSyncEnabled = 'Google:Setting:Sync.CalendarEnabled',\n}\n","export enum AXEGoogleCommandKeys {\n ConnectionConnect = 'GoogleExtension:Connection:Connect',\n ConnectionCompleteOAuth = 'GoogleExtension:Connection:CompleteOAuth',\n /** Server runtime: start OAuth authorization (not the client connect UI command). */\n OAuthStart = 'GoogleExtension:OAuth:Start',\n /** Server runtime: complete OAuth after redirect callback. */\n OAuthComplete = 'GoogleExtension:OAuth:Complete',\n}\n","//#region ---- Google OAuth API (client ↔ server) ----\n\nexport interface AXEGoogleOAuthStartRequest {\n redirectUri: string;\n connectionScope?: 'user' | 'tenant';\n connectionKey?: string;\n displayName?: string;\n scopes?: string[];\n}\n\nexport interface AXEGoogleOAuthStartResponse {\n redirectUrl: string;\n state: string;\n}\n\nexport interface AXEGoogleOAuthCompleteRequest {\n state: string;\n code: string;\n}\n\nexport interface AXEGoogleOAuthCompleteResponse {\n connectionId: string;\n}\n\n//#endregion\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"AAAA;AAEA,MAAM,MAAM,GAAG;AACb,IAAA,IAAI,EAAE,mBAAmB;AACzB,IAAA,MAAM,EAAE,kBAAkB;CAC3B;AAEM,MAAM,UAAU,GAAG;IACxB,MAAM;AACN,IAAA,MAAM,EAAE;QACN,IAAI,EAAE,MAAM,CAAC,MAAM;AACnB,QAAA,IAAI,EAAE,qBAAqB;AAC5B,KAAA;;AAGH;;ACfA;;AAEG;IACS;AAAZ,CAAA,UAAY,iBAAiB,EAAA;;AAE3B,IAAA,iBAAA,CAAA,kBAAA,CAAA,GAAA,kCAAqD;;AAGrD,IAAA,iBAAA,CAAA,qBAAA,CAAA,GAAA,qCAA2D;AAC7D,CAAC,EANW,iBAAiB,KAAjB,iBAAiB,GAAA,EAAA,CAAA,CAAA;;ICHjB;AAAZ,CAAA,UAAY,oBAAoB,EAAA;AAC9B,IAAA,oBAAA,CAAA,mBAAA,CAAA,GAAA,oCAAwD;AACxD,IAAA,oBAAA,CAAA,yBAAA,CAAA,GAAA,0CAAoE;;AAEpE,IAAA,oBAAA,CAAA,YAAA,CAAA,GAAA,6BAA0C;;AAE1C,IAAA,oBAAA,CAAA,eAAA,CAAA,GAAA,gCAAgD;AAClD,CAAC,EAPW,oBAAoB,KAApB,oBAAoB,GAAA,EAAA,CAAA,CAAA;;ACAhC;AAwBA;;ACxBA;;AAEG;;;;"}
1
+ {"version":3,"file":"acorex-platform-extension-google-client-contracts.mjs","sources":["../../../../libs/extensions/google/contracts/src/root-config.ts","../../../../libs/extensions/google/contracts/src/google.settings.keys.ts","../../../../libs/extensions/google/contracts/src/commands.keys.ts","../../../../libs/extensions/google/contracts/src/oauth.api.types.ts","../../../../libs/extensions/google/contracts/src/acorex-platform-extension-google-client-contracts.ts"],"sourcesContent":["//#region ---- Module Config ----\n\nconst config = {\n i18n: 'extensions-google',\n module: 'google-extension',\n};\n\nexport const RootConfig = {\n config,\n module: {\n name: config.module,\n icon: 'fa-brands fa-google',\n },\n};\n\n//#endregion\n","/**\n * User-scoped settings for Google sync preferences (Google extension).\n */\nexport enum AXEGoogleSettings {\n /** When true, Gmail sync is enabled for the connected Google account. */\n GmailSyncEnabled = 'Google:Setting:Sync.GmailEnabled',\n\n /** When true, Google Calendar sync is enabled for the connected Google account. */\n CalendarSyncEnabled = 'Google:Setting:Sync.CalendarEnabled',\n}\n","export enum AXEGoogleCommandKeys {\n ConnectionConnect = 'GoogleExtension:Connection:Connect',\n ConnectionCompleteOAuth = 'GoogleExtension:Connection:CompleteOAuth',\n /** Server runtime: start OAuth authorization (not the client connect UI command). */\n OAuthStart = 'GoogleExtension:OAuth:Start',\n /** Server runtime: complete OAuth after redirect callback. */\n OAuthComplete = 'GoogleExtension:OAuth:Complete',\n}\n","//#region ---- Google OAuth API (client ↔ server) ----\n\nexport interface AXEGoogleOAuthStartRequest {\n redirectUri: string;\n connectionScope?: 'user' | 'tenant';\n connectionKey?: string;\n displayName?: string;\n scopes?: string[];\n}\n\nexport interface AXEGoogleOAuthStartResponse {\n redirectUrl: string;\n state: string;\n}\n\nexport interface AXEGoogleOAuthCompleteRequest {\n state: string;\n code: string;\n}\n\nexport interface AXEGoogleOAuthCompleteResponse {\n connectionId: string;\n}\n\n//#endregion\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"AAAA;AAEA,MAAM,MAAM,GAAG;AACb,IAAA,IAAI,EAAE,mBAAmB;AACzB,IAAA,MAAM,EAAE,kBAAkB;CAC3B;AAEM,MAAM,UAAU,GAAG;IACxB,MAAM;AACN,IAAA,MAAM,EAAE;QACN,IAAI,EAAE,MAAM,CAAC,MAAM;AACnB,QAAA,IAAI,EAAE,qBAAqB;AAC5B,KAAA;;AAGH;;ACfA;;AAEG;IACS;AAAZ,CAAA,UAAY,iBAAiB,EAAA;;AAE3B,IAAA,iBAAA,CAAA,kBAAA,CAAA,GAAA,kCAAqD;;AAGrD,IAAA,iBAAA,CAAA,qBAAA,CAAA,GAAA,qCAA2D;AAC7D,CAAC,EANW,iBAAiB,KAAjB,iBAAiB,GAAA,EAAA,CAAA,CAAA;;ICHjB;AAAZ,CAAA,UAAY,oBAAoB,EAAA;AAC9B,IAAA,oBAAA,CAAA,mBAAA,CAAA,GAAA,oCAAwD;AACxD,IAAA,oBAAA,CAAA,yBAAA,CAAA,GAAA,0CAAoE;;AAEpE,IAAA,oBAAA,CAAA,YAAA,CAAA,GAAA,6BAA0C;;AAE1C,IAAA,oBAAA,CAAA,eAAA,CAAA,GAAA,gCAAgD;AAClD,CAAC,EAPW,oBAAoB,KAApB,oBAAoB,GAAA,EAAA,CAAA,CAAA;;ACAhC;AAwBA;;ACxBA;;AAEG;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"acorex-platform-extension-google-client-google-oauth-http.client-BygIfysu.mjs","sources":["../../../../libs/extensions/google/client/src/lib/api/google-oauth-http.client.ts"],"sourcesContent":["import { commandMessageTextForError } from '@acorex-platform/framework-client/common';\nimport { AXPCommandService } from '@acorex-platform/framework-client/runtime';\nimport {\n AXEGoogleCommandKeys,\n type AXEGoogleOAuthCompleteRequest,\n type AXEGoogleOAuthCompleteResponse,\n type AXEGoogleOAuthStartRequest,\n type AXEGoogleOAuthStartResponse,\n} from '@acorex-platform/extension-google-client/contracts';\nimport { inject, Injectable } from '@angular/core';\n\n@Injectable({ providedIn: 'root' })\nexport class AXEGoogleOAuthHttpClient {\n private readonly commandService = inject(AXPCommandService);\n\n startOAuth(body: AXEGoogleOAuthStartRequest): Promise<AXEGoogleOAuthStartResponse> {\n return this.runCommand(AXEGoogleCommandKeys.OAuthStart, body);\n }\n\n completeOAuth(body: AXEGoogleOAuthCompleteRequest): Promise<AXEGoogleOAuthCompleteResponse> {\n return this.runCommand(AXEGoogleCommandKeys.OAuthComplete, body);\n }\n\n private async runCommand<TInput, TResult>(key: string, input: TInput): Promise<TResult> {\n const result = await this.commandService.execute<TInput, TResult>(key, input);\n if (!result?.success) {\n throw new Error(commandMessageTextForError(result?.message?.text) || `Google OAuth command failed: ${key}`);\n }\n return result.data as TResult;\n }\n}\n"],"names":[],"mappings":";;;;;;MAYa,wBAAwB,CAAA;AADrC,IAAA,WAAA,GAAA;AAEmB,QAAA,IAAA,CAAA,cAAc,GAAG,MAAM,CAAC,iBAAiB,CAAC;AAiB5D,IAAA;AAfC,IAAA,UAAU,CAAC,IAAgC,EAAA;QACzC,OAAO,IAAI,CAAC,UAAU,CAAC,oBAAoB,CAAC,UAAU,EAAE,IAAI,CAAC;IAC/D;AAEA,IAAA,aAAa,CAAC,IAAmC,EAAA;QAC/C,OAAO,IAAI,CAAC,UAAU,CAAC,oBAAoB,CAAC,aAAa,EAAE,IAAI,CAAC;IAClE;AAEQ,IAAA,MAAM,UAAU,CAAkB,GAAW,EAAE,KAAa,EAAA;AAClE,QAAA,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,OAAO,CAAkB,GAAG,EAAE,KAAK,CAAC;AAC7E,QAAA,IAAI,CAAC,MAAM,EAAE,OAAO,EAAE;AACpB,YAAA,MAAM,IAAI,KAAK,CAAC,0BAA0B,CAAC,MAAM,EAAE,OAAO,EAAE,IAAI,CAAC,IAAI,CAAA,6BAAA,EAAgC,GAAG,CAAA,CAAE,CAAC;QAC7G;QACA,OAAO,MAAM,CAAC,IAAe;IAC/B;8GAjBW,wBAAwB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAAxB,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,wBAAwB,cADX,MAAM,EAAA,CAAA,CAAA;;2FACnB,wBAAwB,EAAA,UAAA,EAAA,CAAA;kBADpC,UAAU;mBAAC,EAAE,UAAU,EAAE,MAAM,EAAE;;;;;"}
1
+ {"version":3,"file":"acorex-platform-extension-google-client-google-oauth-http.client-BygIfysu.mjs","sources":["../../../../libs/extensions/google/client/src/lib/api/google-oauth-http.client.ts"],"sourcesContent":["import { commandMessageTextForError } from '@acorex-platform/framework-client/common';\nimport { AXPCommandService } from '@acorex-platform/framework-client/runtime';\nimport {\n AXEGoogleCommandKeys,\n type AXEGoogleOAuthCompleteRequest,\n type AXEGoogleOAuthCompleteResponse,\n type AXEGoogleOAuthStartRequest,\n type AXEGoogleOAuthStartResponse,\n} from '@acorex-platform/extension-google-client/contracts';\nimport { inject, Injectable } from '@angular/core';\n\n@Injectable({ providedIn: 'root' })\nexport class AXEGoogleOAuthHttpClient {\n private readonly commandService = inject(AXPCommandService);\n\n startOAuth(body: AXEGoogleOAuthStartRequest): Promise<AXEGoogleOAuthStartResponse> {\n return this.runCommand(AXEGoogleCommandKeys.OAuthStart, body);\n }\n\n completeOAuth(body: AXEGoogleOAuthCompleteRequest): Promise<AXEGoogleOAuthCompleteResponse> {\n return this.runCommand(AXEGoogleCommandKeys.OAuthComplete, body);\n }\n\n private async runCommand<TInput, TResult>(key: string, input: TInput): Promise<TResult> {\n const result = await this.commandService.execute<TInput, TResult>(key, input);\n if (!result?.success) {\n throw new Error(commandMessageTextForError(result?.message?.text) || `Google OAuth command failed: ${key}`);\n }\n return result.data as TResult;\n }\n}\n"],"names":[],"mappings":";;;;;;MAYa,wBAAwB,CAAA;AADrC,IAAA,WAAA,GAAA;AAEmB,QAAA,IAAA,CAAA,cAAc,GAAG,MAAM,CAAC,iBAAiB,CAAC;AAiB5D,IAAA;AAfC,IAAA,UAAU,CAAC,IAAgC,EAAA;QACzC,OAAO,IAAI,CAAC,UAAU,CAAC,oBAAoB,CAAC,UAAU,EAAE,IAAI,CAAC;IAC/D;AAEA,IAAA,aAAa,CAAC,IAAmC,EAAA;QAC/C,OAAO,IAAI,CAAC,UAAU,CAAC,oBAAoB,CAAC,aAAa,EAAE,IAAI,CAAC;IAClE;AAEQ,IAAA,MAAM,UAAU,CAAkB,GAAW,EAAE,KAAa,EAAA;AAClE,QAAA,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,OAAO,CAAkB,GAAG,EAAE,KAAK,CAAC;AAC7E,QAAA,IAAI,CAAC,MAAM,EAAE,OAAO,EAAE;AACpB,YAAA,MAAM,IAAI,KAAK,CAAC,0BAA0B,CAAC,MAAM,EAAE,OAAO,EAAE,IAAI,CAAC,IAAI,CAAA,6BAAA,EAAgC,GAAG,CAAA,CAAE,CAAC;QAC7G;QACA,OAAO,MAAM,CAAC,IAAe;IAC/B;8GAjBW,wBAAwB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAAxB,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,wBAAwB,cADX,MAAM,EAAA,CAAA,CAAA;;2FACnB,wBAAwB,EAAA,UAAA,EAAA,CAAA;kBADpC,UAAU;mBAAC,EAAE,UAAU,EAAE,MAAM,EAAE;;;"}
@@ -43,7 +43,7 @@ class AXEGooglePlatformLoginSlotComponent {
43
43
  }
44
44
  }
45
45
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXEGooglePlatformLoginSlotComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
46
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.8", type: AXEGooglePlatformLoginSlotComponent, isStandalone: true, selector: "ng-component", ngImport: i0, template: "<ax-button\n class=\"w-full mt-2\"\n text=\"{{ '@auth:authentication.with-google' | translate | async }}\"\n [color]=\"'default'\"\n id=\"google-platform-login\"\n (onClick)=\"handleGoogleSignIn()\"\n [disabled]=\"isLoading()\"\n>\n <ax-prefix>\n <axp-logo [logoKey]=\"logoKey\" appearance=\"colored\" [size]=\"20\" />\n </ax-prefix>\n @if (isLoading()) {\n <ax-loading></ax-loading>\n }\n</ax-button>\n", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: AXButtonModule }, { kind: "component", type: i1.AXButtonComponent, selector: "ax-button", inputs: ["disabled", "size", "tabIndex", "color", "look", "text", "toggleable", "selected", "iconOnly", "type", "loadingText"], outputs: ["onBlur", "onFocus", "onClick", "selectedChange", "toggleableChange", "lookChange", "colorChange", "disabledChange", "loadingTextChange"] }, { kind: "ngmodule", type: AXDecoratorModule }, { kind: "component", type: i2.AXDecoratorGenericComponent, selector: "ax-footer, ax-header, ax-content, ax-divider, ax-form-hint, ax-prefix, ax-suffix, ax-text, ax-title, ax-subtitle, ax-placeholder, ax-overlay" }, { kind: "ngmodule", type: AXLoadingModule }, { kind: "component", type: i3.AXLoadingComponent, selector: "ax-loading", inputs: ["visible", "type", "context"], outputs: ["visibleChange"] }, { kind: "ngmodule", type: AXTranslationModule }, { kind: "component", type: AXPLogoComponent, selector: "axp-logo", inputs: ["logoKey", "appearance", "size", "format"] }, { kind: "pipe", type: i4.AsyncPipe, name: "async" }, { kind: "pipe", type: i5.AXTranslatorPipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.Eager }); }
46
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.8", type: AXEGooglePlatformLoginSlotComponent, isStandalone: true, selector: "ng-component", ngImport: i0, template: "<ax-button\n class=\"w-full mt-2\"\n text=\"{{ '@auth:authentication.with-google' | translate | async }}\"\n [color]=\"'default'\"\n id=\"google-platform-login\"\n (onClick)=\"handleGoogleSignIn()\"\n [disabled]=\"isLoading()\"\n>\n <ax-prefix>\n <axp-logo [logoKey]=\"logoKey\" appearance=\"colored\" [size]=\"20\" />\n </ax-prefix>\n @if (isLoading()) {\n <ax-loading></ax-loading>\n }\n</ax-button>\n", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: AXButtonModule }, { kind: "component", type: i1.AXButtonComponent, selector: "ax-button", inputs: ["disabled", "tabIndex", "color", "look", "text", "toggleable", "selected", "iconOnly", "type", "loadingText"], outputs: ["onBlur", "onFocus", "onClick", "selectedChange", "toggleableChange", "lookChange", "colorChange", "disabledChange", "loadingTextChange"] }, { kind: "ngmodule", type: AXDecoratorModule }, { kind: "component", type: i2.AXDecoratorGenericComponent, selector: "ax-footer, ax-header, ax-content, ax-divider, ax-form-hint, ax-prefix, ax-suffix, ax-text, ax-title, ax-subtitle, ax-placeholder, ax-overlay" }, { kind: "ngmodule", type: AXLoadingModule }, { kind: "component", type: i3.AXLoadingComponent, selector: "ax-loading", inputs: ["visible", "type", "context"], outputs: ["visibleChange"] }, { kind: "ngmodule", type: AXTranslationModule }, { kind: "component", type: AXPLogoComponent, selector: "axp-logo", inputs: ["logoKey", "appearance", "size", "format"] }, { kind: "pipe", type: i4.AsyncPipe, name: "async" }, { kind: "pipe", type: i5.AXTranslatorPipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.Eager }); }
47
47
  }
48
48
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXEGooglePlatformLoginSlotComponent, decorators: [{
49
49
  type: Component,
@@ -51,4 +51,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImpor
51
51
  }] });
52
52
 
53
53
  export { AXEGooglePlatformLoginSlotComponent };
54
- //# sourceMappingURL=acorex-platform-extension-google-client-google-platform-login-slot.component-WO8_R8Zh.mjs.map
54
+ //# sourceMappingURL=acorex-platform-extension-google-client-google-platform-login-slot.component-CuMUv7eD.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"acorex-platform-extension-google-client-google-platform-login-slot.component-WO8_R8Zh.mjs","sources":["../../../../libs/extensions/google/client/src/lib/platform-auth/google-platform-login-slot.component.ts","../../../../libs/extensions/google/client/src/lib/platform-auth/google-platform-login-slot.component.html"],"sourcesContent":["import { AXButtonModule } from '@acorex/components/button';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXLoadingModule } from '@acorex/components/loading';\nimport { AXTranslationModule } from '@acorex/core/translation';\nimport { AXToastService } from '@acorex/components/toast';\nimport { AXPSessionService } from '@acorex-platform/framework-client/auth';\nimport { AXPLogoComponent } from '@acorex-platform/framework-client/core';\nimport { CommonModule } from '@angular/common';\nimport { Component, inject, signal, ChangeDetectionStrategy } from '@angular/core';\nimport { axpGoogleLogoKey } from '../brand/google-logo-key';\n\n//#region ---- Google platform login slot ----\n\n@Component({\n templateUrl: './google-platform-login-slot.component.html',\n changeDetection: ChangeDetectionStrategy.Eager,\n imports: [CommonModule, AXButtonModule, AXDecoratorModule, AXLoadingModule, AXTranslationModule, AXPLogoComponent],\n})\nexport class AXEGooglePlatformLoginSlotComponent {\n protected readonly logoKey = axpGoogleLogoKey;\n\n private readonly sessionService = inject(AXPSessionService);\n private readonly toastService = inject(AXToastService);\n protected isLoading = signal(false);\n\n protected async handleGoogleSignIn(): Promise<void> {\n this.isLoading.set(true);\n try {\n this.sessionService.setStrategy('google');\n await this.sessionService.signin({ strategy: 'google' });\n } catch (error) {\n const message = error instanceof Error ? error.message : 'Google sign-in failed.';\n this.toastService.show({\n color: 'danger',\n content: message,\n timeOut: 6000,\n });\n } finally {\n this.isLoading.set(false);\n }\n }\n}\n\n//#endregion\n","<ax-button\n class=\"w-full mt-2\"\n text=\"{{ '@auth:authentication.with-google' | translate | async }}\"\n [color]=\"'default'\"\n id=\"google-platform-login\"\n (onClick)=\"handleGoogleSignIn()\"\n [disabled]=\"isLoading()\"\n>\n <ax-prefix>\n <axp-logo [logoKey]=\"logoKey\" appearance=\"colored\" [size]=\"20\" />\n </ax-prefix>\n @if (isLoading()) {\n <ax-loading></ax-loading>\n }\n</ax-button>\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"acorex-platform-extension-google-client-google-platform-login-slot.component-CuMUv7eD.mjs","sources":["../../../../libs/extensions/google/client/src/lib/platform-auth/google-platform-login-slot.component.ts","../../../../libs/extensions/google/client/src/lib/platform-auth/google-platform-login-slot.component.html"],"sourcesContent":["import { AXButtonModule } from '@acorex/components/button';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXLoadingModule } from '@acorex/components/loading';\nimport { AXTranslationModule } from '@acorex/core/translation';\nimport { AXToastService } from '@acorex/components/toast';\nimport { AXPSessionService } from '@acorex-platform/framework-client/auth';\nimport { AXPLogoComponent } from '@acorex-platform/framework-client/core';\nimport { CommonModule } from '@angular/common';\nimport { Component, inject, signal, ChangeDetectionStrategy } from '@angular/core';\nimport { axpGoogleLogoKey } from '../brand/google-logo-key';\n\n//#region ---- Google platform login slot ----\n\n@Component({\n templateUrl: './google-platform-login-slot.component.html',\n changeDetection: ChangeDetectionStrategy.Eager,\n imports: [CommonModule, AXButtonModule, AXDecoratorModule, AXLoadingModule, AXTranslationModule, AXPLogoComponent],\n})\nexport class AXEGooglePlatformLoginSlotComponent {\n protected readonly logoKey = axpGoogleLogoKey;\n\n private readonly sessionService = inject(AXPSessionService);\n private readonly toastService = inject(AXToastService);\n protected isLoading = signal(false);\n\n protected async handleGoogleSignIn(): Promise<void> {\n this.isLoading.set(true);\n try {\n this.sessionService.setStrategy('google');\n await this.sessionService.signin({ strategy: 'google' });\n } catch (error) {\n const message = error instanceof Error ? error.message : 'Google sign-in failed.';\n this.toastService.show({\n color: 'danger',\n content: message,\n timeOut: 6000,\n });\n } finally {\n this.isLoading.set(false);\n }\n }\n}\n\n//#endregion\n","<ax-button\n class=\"w-full mt-2\"\n text=\"{{ '@auth:authentication.with-google' | translate | async }}\"\n [color]=\"'default'\"\n id=\"google-platform-login\"\n (onClick)=\"handleGoogleSignIn()\"\n [disabled]=\"isLoading()\"\n>\n <ax-prefix>\n <axp-logo [logoKey]=\"logoKey\" appearance=\"colored\" [size]=\"20\" />\n </ax-prefix>\n @if (isLoading()) {\n <ax-loading></ax-loading>\n }\n</ax-button>\n"],"names":[],"mappings":"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"}
@@ -1,7 +1,7 @@
1
1
  import { AXMIntegrationManagementModule } from '@acorex-platform/module-integration-management-client';
2
2
  import { AXP_INTEGRATION_SECRET_STORE, AXP_INTEGRATION_PROVIDER, AXP_INTEGRATION_RUNTIME_PROVIDER, AXP_SETTING_DEFINITION_PROVIDER } from '@acorex-platform/framework-client/common';
3
3
  import * as i3 from '@acorex-platform/framework-client/auth';
4
- import { AXPAuthStrategy, AXPSessionService, AXPPlatformAuthRuntimeService, resolvePlatformOAuthIssuer, resolvePlatformOAuthClientConfig, PkceUtil, toPlatformOAuthSignInResult, shouldPlatformOAuthBindSession, platformOAuthSessionUpdateParams, resolvePlatformOAuthTokenEndpoint, JwtUtil, TimeUtil, resolvePlatformOAuthAuthorizeEndpoint, AXPAuthModule } from '@acorex-platform/framework-client/auth';
4
+ import { AXPAuthStrategy, AXPSessionService, AXPPlatformAuthRuntimeService, resolvePlatformOAuthIssuer, resolvePlatformOAuthClientConfig, initPlatformOAuthAuthorization, toPlatformOAuthSignInResult, shouldPlatformOAuthBindSession, platformOAuthSessionUpdateParams, exchangePlatformOAuthAuthorizationCode, JwtUtil, TimeUtil, AXPAuthModule } from '@acorex-platform/framework-client/auth';
5
5
  import { provideCommandSetups } from '@acorex-platform/framework-client/runtime';
6
6
  import { RootConfig, AXEGoogleCommandKeys, AXEGoogleSettings } from '@acorex-platform/extension-google-client/contracts';
7
7
  import * as i1 from '@acorex-platform/framework-client/core';
@@ -174,26 +174,18 @@ class AXEGooglePlatformAuthStrategy extends AXPAuthStrategy {
174
174
  async redirectToGooglePlatformAuthorize() {
175
175
  const issuer = this.resolveIssuer();
176
176
  const { clientId, redirectUri, scope } = this.resolveClientConfig();
177
- const codeVerifier = PkceUtil.generateRandomString(128);
178
- localStorage.setItem('pkce_code_verifier', codeVerifier);
179
- const codeChallenge = await PkceUtil.generateCodeChallenge(codeVerifier);
180
- // Ensure callback can resolve strategy even if restoreSession cleared AXP_SESSION.
181
177
  this.sessionService.setStrategy('google');
182
- const params = new URLSearchParams({
183
- response_type: 'code',
184
- client_id: clientId,
185
- redirect_uri: redirectUri,
178
+ const { authorizeUrl } = await initPlatformOAuthAuthorization({
179
+ issuer,
180
+ clientId,
181
+ redirectUri,
186
182
  scope,
187
- code_challenge: codeChallenge,
188
- code_challenge_method: 'S256',
189
- prompt: 'login',
190
- acr_values: 'google',
183
+ provider: 'google',
191
184
  });
192
- window.location.assign(`${issuer}/connect/authorize?${params.toString()}`);
185
+ window.location.assign(authorizeUrl);
193
186
  await this.waitForOAuthRedirect();
194
187
  }
195
188
  async signout() {
196
- localStorage.removeItem('pkce_code_verifier');
197
189
  localStorage.removeItem('oauth_provider');
198
190
  await this.platformAuthRuntime.logout();
199
191
  }
@@ -244,31 +236,14 @@ class AXEGooglePlatformAuthStrategy extends AXPAuthStrategy {
244
236
  const { clientId, redirectUri } = this.resolveClientConfig();
245
237
  const resolvedRedirectUri = params['redirectUri'] || redirectUri;
246
238
  const resolvedClientId = params['clientId'] || clientId;
247
- const tokenEndpoint = resolvePlatformOAuthTokenEndpoint(issuer);
248
- const codeVerifier = localStorage.getItem('pkce_code_verifier');
249
- if (!codeVerifier) {
250
- throw new Error('Code verifier not found. Please try signing in again.');
251
- }
252
- const body = new URLSearchParams({
253
- grant_type: 'authorization_code',
254
- client_id: resolvedClientId,
255
- code_verifier: codeVerifier,
239
+ const tokenData = await exchangePlatformOAuthAuthorizationCode({
240
+ issuer,
241
+ clientId: resolvedClientId,
242
+ redirectUri: resolvedRedirectUri,
256
243
  code,
257
- redirect_uri: resolvedRedirectUri,
258
- });
259
- const response = await fetch(tokenEndpoint, {
260
- method: 'POST',
261
- credentials: 'include',
262
- headers: { 'Content-Type': 'application/x-www-form-urlencoded' },
263
- body: body.toString(),
264
244
  });
265
- if (!response.ok) {
266
- const detail = await response.text().catch(() => '');
267
- throw new Error(`Token exchange failed: ${response.status} ${response.statusText}${detail ? ` — ${detail}` : ''}`);
268
- }
269
- localStorage.removeItem('pkce_code_verifier');
270
- const tokenData = await response.json();
271
- const payload = JwtUtil.parseJwt(tokenData.id_token);
245
+ const idToken = tokenData['id_token'] ?? null;
246
+ const payload = idToken ? JwtUtil.parseJwt(idToken) : null;
272
247
  if (!payload) {
273
248
  throw new Error('Payload not found');
274
249
  }
@@ -281,10 +256,10 @@ class AXEGooglePlatformAuthStrategy extends AXPAuthStrategy {
281
256
  return {
282
257
  succeed: true,
283
258
  data: {
284
- accessToken: tokenData.access_token ?? tokenData.accessToken,
285
- refreshToken: tokenData.refresh_token ?? tokenData.refreshToken,
286
- idToken: tokenData.id_token ?? null,
287
- expiresIn: TimeUtil.calculateExpireInDate(tokenData.expires_in || 0),
259
+ accessToken: tokenData['access_token'] ?? '',
260
+ refreshToken: tokenData['refresh_token'] ?? '',
261
+ idToken,
262
+ expiresIn: TimeUtil.calculateExpireInDate(Number(tokenData['expires_in'] ?? 0)),
288
263
  user,
289
264
  tenant: null,
290
265
  application: null,
@@ -293,31 +268,17 @@ class AXEGooglePlatformAuthStrategy extends AXPAuthStrategy {
293
268
  }
294
269
  async beginAuthorizationCodeFlow(params) {
295
270
  const issuer = this.resolveIssuer();
296
- const tenantId = params['tenantId'] ?? params['tenant']?.id ?? null;
297
- const applicationId = params['applicationId'] ?? params['application']?.id ?? null;
298
271
  const { clientId, redirectUri, scope } = this.resolveClientConfig();
299
272
  const resolvedRedirectUri = params['redirectUri'] || redirectUri;
300
273
  const resolvedScope = params['scope'] || scope;
301
- const codeVerifier = PkceUtil.generateRandomString(128);
302
- localStorage.setItem('pkce_code_verifier', codeVerifier);
303
- const codeChallenge = await PkceUtil.generateCodeChallenge(codeVerifier);
304
- const authorizeEndpoint = resolvePlatformOAuthAuthorizeEndpoint(issuer);
305
- const state = Math.random().toString(36).substring(2);
306
- const queryParams = [
307
- `response_type=code`,
308
- `client_id=${encodeURIComponent(clientId)}`,
309
- `redirect_uri=${encodeURIComponent(resolvedRedirectUri)}`,
310
- `scope=${encodeURIComponent(resolvedScope)}`,
311
- `state=${encodeURIComponent(state)}`,
312
- tenantId ? `tenant_id=${encodeURIComponent(tenantId)}` : null,
313
- applicationId ? `application_id=${encodeURIComponent(applicationId)}` : null,
314
- `code_challenge=${encodeURIComponent(codeChallenge)}`,
315
- `code_challenge_method=S256`,
316
- `acr_values=google`,
317
- ]
318
- .filter(Boolean)
319
- .join('&');
320
- window.location.href = `${authorizeEndpoint}?${queryParams}`;
274
+ const { authorizeUrl } = await initPlatformOAuthAuthorization({
275
+ issuer,
276
+ clientId,
277
+ redirectUri: resolvedRedirectUri,
278
+ scope: resolvedScope,
279
+ provider: 'google',
280
+ });
281
+ window.location.href = authorizeUrl;
321
282
  await this.waitForOAuthRedirect();
322
283
  return undefined;
323
284
  }
@@ -462,7 +423,7 @@ class AXEGoogleExtensionModule {
462
423
  registry.register(AUTH_LOGIN_EXTERNAL_PROVIDERS_SLOT, {
463
424
  name: 'google-platform-login',
464
425
  priority: 10,
465
- loadComponent: () => import('./acorex-platform-extension-google-client-google-platform-login-slot.component-WO8_R8Zh.mjs').then((component) => component.AXEGooglePlatformLoginSlotComponent),
426
+ loadComponent: () => import('./acorex-platform-extension-google-client-google-platform-login-slot.component-CuMUv7eD.mjs').then((component) => component.AXEGooglePlatformLoginSlotComponent),
466
427
  condition: () => googlePlatformLogin.isEnabled(),
467
428
  });
468
429
  }
@@ -1 +1 @@
1
- {"version":3,"file":"acorex-platform-extension-google-client.mjs","sources":["../../../../libs/extensions/google/client/src/lib/brand/google-logo-key.ts","../../../../libs/extensions/google/client/src/lib/integration/google.integration.constants.ts","../../../../libs/extensions/google/client/src/lib/integration/google.integration.provider.ts","../../../../libs/extensions/google/client/src/lib/integration/google.integration-runtime.provider.ts","../../../../libs/extensions/google/client/src/lib/platform-auth/google-platform-auth.strategy.ts","../../../../libs/extensions/google/client/src/lib/platform-auth/google-platform-login-availability.service.ts","../../../../libs/extensions/google/client/src/lib/settings/google.settings.provider.ts","../../../../libs/extensions/google/client/src/lib/brand/google-logo.provider.ts","../../../../libs/extensions/google/client/src/lib/google-extension.module.ts","../../../../libs/extensions/google/client/src/lib/brand/google-logo.component.ts","../../../../libs/extensions/google/client/src/acorex-platform-extension-google-client.ts"],"sourcesContent":["//#region ---- Google logo registry key ----\n\nexport const axpGoogleLogoKey = 'google' as const;\n\n//#endregion\n","//#region ---- Google OAuth scopes ----\n\n/** Default OAuth scopes requested when connecting a Google account. */\nexport const AXE_GOOGLE_OAUTH_DEFAULT_SCOPES = [\n 'openid',\n 'email',\n 'profile',\n 'https://www.googleapis.com/auth/gmail.readonly',\n 'https://www.googleapis.com/auth/calendar',\n] as const;\n\n//#endregion\n","//#region ---- Imports ----\n\nimport { AXP_INTEGRATION_AUTH_METHOD_TYPE, AXP_INTEGRATION_CAPABILITY, AXP_INTEGRATION_CONNECTION_SCOPE } from '@acorex-platform/framework-shared/core';\nimport {\n AXPIntegrationProvider,\n AXPIntegrationProviderContext,\n} from '@acorex-platform/framework-client/common';\nimport { Injectable } from '@angular/core';\nimport { AXEGoogleCommandKeys, RootConfig } from '@acorex-platform/extension-google-client/contracts';\nimport { axpGoogleLogoKey } from '../brand/google-logo-key';\nimport { AXE_GOOGLE_OAUTH_DEFAULT_SCOPES } from './google.integration.constants';\n\n//#endregion\n\n//#region ---- Provider ----\n\n@Injectable()\nexport class AXEGoogleIntegrationProvider implements AXPIntegrationProvider {\n async provide(context: AXPIntegrationProviderContext): Promise<void> {\n const I18N = `@${RootConfig.config.i18n}:integration`;\n\n context.register({\n domainId: 'other',\n id: 'google',\n module: RootConfig.module.name,\n displayName: `${I18N}.display-name`,\n description: `${I18N}.description`,\n icon: RootConfig.module.icon,\n logoKey: axpGoogleLogoKey,\n capabilities: [\n AXP_INTEGRATION_CAPABILITY.Messaging,\n AXP_INTEGRATION_CAPABILITY.Calendar,\n AXP_INTEGRATION_CAPABILITY.Sync,\n AXP_INTEGRATION_CAPABILITY.Identity,\n ],\n connectionScopes: [AXP_INTEGRATION_CONNECTION_SCOPE.User],\n allowMultipleConnections: false,\n defaultConnectionKey: 'default',\n connectCommandKey: AXEGoogleCommandKeys.ConnectionConnect,\n completeOAuthCommandKey: AXEGoogleCommandKeys.ConnectionCompleteOAuth,\n authMethods: [\n {\n type: AXP_INTEGRATION_AUTH_METHOD_TYPE.OAuth2,\n label: `${I18N}.auth.oauth.label`,\n instructions: `${I18N}.auth.oauth.instructions`,\n usesRedirect: true,\n supportsRefresh: true,\n supportsRevoke: true,\n supportsValidation: true,\n defaultScopes: [...AXE_GOOGLE_OAUTH_DEFAULT_SCOPES],\n fields: [],\n },\n ],\n });\n }\n}\n\n//#endregion\n","//#region ---- Imports ----\n\nimport { AXP_INTEGRATION_CONNECTION_STATUS, type AXPIntegrationProviderRuntimeHooks, type AXPIntegrationRuntimeContext, type AXPIntegrationValidationResult } from '@acorex-platform/framework-shared/core';\nimport {\n AXP_INTEGRATION_SECRET_STORE,\n type AXPIntegrationRuntimeProvider,\n} from '@acorex-platform/framework-client/common';\nimport { Injectable, inject } from '@angular/core';\nimport { defaultTo, trim } from 'lodash-es';\n\n//#endregion\n\n//#region ---- Types ----\n\nexport interface AXEGoogleIntegrationClient {\n accessToken: string;\n refreshToken?: string;\n email?: string;\n}\n\ninterface GoogleConnectionCredentials {\n accessToken: string;\n refreshToken?: string;\n email?: string;\n}\n\n//#endregion\n\n//#region ---- Runtime Provider ----\n\n@Injectable()\nexport class AXEGoogleIntegrationRuntimeProvider implements AXPIntegrationRuntimeProvider {\n readonly providerId = 'google';\n\n private readonly secretStore = inject(AXP_INTEGRATION_SECRET_STORE, { optional: true });\n\n async getHooks(): Promise<AXPIntegrationProviderRuntimeHooks> {\n return {\n validateConnection: (ctx) => this.validateConnection(ctx),\n createClient: (ctx) => this.createClient(ctx),\n };\n }\n\n private async validateConnection(ctx: AXPIntegrationRuntimeContext): Promise<AXPIntegrationValidationResult> {\n try {\n const credentials = await this.resolveCredentials(ctx);\n if (!credentials.accessToken) {\n return {\n valid: false,\n status: AXP_INTEGRATION_CONNECTION_STATUS.Invalid,\n errorMessage: 'No access token available for Google connection.',\n };\n }\n\n return {\n valid: true,\n status: AXP_INTEGRATION_CONNECTION_STATUS.Connected,\n externalAccountName: defaultTo(credentials.email, 'Google'),\n externalAccountId: defaultTo(credentials.email, undefined),\n };\n } catch {\n return {\n valid: false,\n status: AXP_INTEGRATION_CONNECTION_STATUS.Invalid,\n errorMessage: 'Failed to validate Google credentials.',\n };\n }\n }\n\n private async createClient(ctx: AXPIntegrationRuntimeContext): Promise<AXEGoogleIntegrationClient> {\n const credentials = await this.resolveCredentials(ctx);\n if (!credentials.accessToken) {\n throw new Error('Google connection has no usable access token.');\n }\n\n return {\n accessToken: credentials.accessToken,\n refreshToken: credentials.refreshToken,\n email: credentials.email,\n };\n }\n\n private async resolveCredentials(ctx: AXPIntegrationRuntimeContext): Promise<GoogleConnectionCredentials> {\n const config = (ctx.config ?? {}) as Record<string, unknown>;\n const configAccessToken = trim(String(config['accessToken'] ?? ''));\n if (configAccessToken) {\n return {\n accessToken: configAccessToken,\n refreshToken: trim(String(config['refreshToken'] ?? '')) || undefined,\n email: trim(String(config['email'] ?? '')) || undefined,\n };\n }\n\n if (!this.secretStore || !ctx.secretRef || ctx.secretRef === 'config') {\n throw new Error('Google connection credentials are not available.');\n }\n\n const credentials = await this.secretStore.resolve(ctx.secretRef, ctx);\n return {\n accessToken: trim(defaultTo(credentials.accessToken, '')),\n refreshToken: trim(defaultTo(credentials.refreshToken, '')) || undefined,\n email: trim(defaultTo(credentials.email, '')) || undefined,\n };\n }\n}\n\n//#endregion\n","import { AXM_AUTH_CONFIG_TOKEN, AXMAuthConfigs } from '@acorex-platform/module-auth-client';\nimport {\n AXPAuthStrategy,\n AXPBaseCredentials,\n AXPPlatformAuthRuntimeService,\n AXPSessionContext,\n AXPSessionData,\n AXPSessionService,\n AXPSignInResult,\n AXPUser,\n JwtUtil,\n PkceUtil,\n platformOAuthSessionUpdateParams,\n resolvePlatformOAuthAuthorizeEndpoint,\n resolvePlatformOAuthClientConfig,\n resolvePlatformOAuthIssuer,\n resolvePlatformOAuthTokenEndpoint,\n shouldPlatformOAuthBindSession,\n TimeUtil,\n toPlatformOAuthSignInResult,\n} from '@acorex-platform/framework-client/auth';\nimport { inject, Injectable } from '@angular/core';\n\n//#region ---- Google platform auth strategy ----\n\n@Injectable()\nexport class AXEGooglePlatformAuthStrategy extends AXPAuthStrategy {\n private readonly authConfigs: AXMAuthConfigs = inject(AXM_AUTH_CONFIG_TOKEN);\n private readonly sessionService = inject(AXPSessionService);\n private readonly platformAuthRuntime = inject(AXPPlatformAuthRuntimeService);\n\n get name(): string {\n return 'google';\n }\n\n private resolveIssuer(): string {\n return resolvePlatformOAuthIssuer(this.authConfigs.baseUrl);\n }\n\n private resolveClientConfig() {\n return resolvePlatformOAuthClientConfig(this.authConfigs.authConfig);\n }\n\n override async signin(_credentials: AXPBaseCredentials): Promise<void> {\n await this.redirectToGooglePlatformAuthorize();\n }\n\n private async redirectToGooglePlatformAuthorize(): Promise<void> {\n const issuer = this.resolveIssuer();\n const { clientId, redirectUri, scope } = this.resolveClientConfig();\n\n const codeVerifier = PkceUtil.generateRandomString(128);\n localStorage.setItem('pkce_code_verifier', codeVerifier);\n const codeChallenge = await PkceUtil.generateCodeChallenge(codeVerifier);\n\n // Ensure callback can resolve strategy even if restoreSession cleared AXP_SESSION.\n this.sessionService.setStrategy('google');\n\n const params = new URLSearchParams({\n response_type: 'code',\n client_id: clientId,\n redirect_uri: redirectUri,\n scope,\n code_challenge: codeChallenge,\n code_challenge_method: 'S256',\n prompt: 'login',\n acr_values: 'google',\n });\n\n window.location.assign(`${issuer}/connect/authorize?${params.toString()}`);\n await this.waitForOAuthRedirect();\n }\n\n async signout(): Promise<void> {\n localStorage.removeItem('pkce_code_verifier');\n localStorage.removeItem('oauth_provider');\n await this.platformAuthRuntime.logout();\n }\n\n async refreshToken(_context: AXPSessionContext): Promise<AXPSignInResult> {\n try {\n const authData = this.loadAuthData();\n const tokenData = await this.platformAuthRuntime.refresh();\n return toPlatformOAuthSignInResult(tokenData, {\n user: tokenData.user,\n tenant: authData?.tenant ?? null,\n application: authData?.application ?? null,\n });\n } catch (error) {\n console.error('Error refreshing token', error);\n return { succeed: false };\n }\n }\n\n override async updateToken(params: { [key: string]: any }): Promise<AXPSignInResult | undefined> {\n try {\n if (params['code']) {\n return this.exchangeAuthorizationCode(params);\n }\n\n if (shouldPlatformOAuthBindSession(this.sessionService.hasSessionCredentials(), params)) {\n const { tenant, application, tenantId, applicationId } = platformOAuthSessionUpdateParams(params);\n const result = await this.platformAuthRuntime.updateSession({\n tenantId,\n applicationId,\n tenant,\n application,\n });\n return toPlatformOAuthSignInResult(result, {\n user: (params['user'] as AXPUser) ?? null,\n tenant: tenant ?? null,\n application: application ?? null,\n });\n }\n\n return this.beginAuthorizationCodeFlow(params);\n } catch (error) {\n console.error('Error in updateToken:', error);\n throw error;\n }\n }\n\n private async exchangeAuthorizationCode(params: { [key: string]: any }): Promise<AXPSignInResult> {\n const code = params['code'];\n const issuer = this.resolveIssuer();\n const { clientId, redirectUri } = this.resolveClientConfig();\n const resolvedRedirectUri = params['redirectUri'] || redirectUri;\n const resolvedClientId = params['clientId'] || clientId;\n const tokenEndpoint = resolvePlatformOAuthTokenEndpoint(issuer);\n\n const codeVerifier = localStorage.getItem('pkce_code_verifier');\n if (!codeVerifier) {\n throw new Error('Code verifier not found. Please try signing in again.');\n }\n\n const body = new URLSearchParams({\n grant_type: 'authorization_code',\n client_id: resolvedClientId,\n code_verifier: codeVerifier,\n code,\n redirect_uri: resolvedRedirectUri,\n });\n\n const response = await fetch(tokenEndpoint, {\n method: 'POST',\n credentials: 'include',\n headers: { 'Content-Type': 'application/x-www-form-urlencoded' },\n body: body.toString(),\n });\n\n if (!response.ok) {\n const detail = await response.text().catch(() => '');\n throw new Error(\n `Token exchange failed: ${response.status} ${response.statusText}${detail ? ` — ${detail}` : ''}`,\n );\n }\n\n localStorage.removeItem('pkce_code_verifier');\n\n const tokenData = await response.json();\n const payload = JwtUtil.parseJwt(tokenData.id_token);\n if (!payload) {\n throw new Error('Payload not found');\n }\n\n const user = {\n id: payload['sub'] || '',\n title: payload['name'] || payload['email'] || '',\n name: payload['name'] || payload['email'] || '',\n avatar: payload['picture'] || '',\n } as AXPUser;\n\n return {\n succeed: true,\n data: {\n accessToken: tokenData.access_token ?? tokenData.accessToken,\n refreshToken: tokenData.refresh_token ?? tokenData.refreshToken,\n idToken: tokenData.id_token ?? null,\n expiresIn: TimeUtil.calculateExpireInDate(tokenData.expires_in || 0),\n user,\n tenant: null,\n application: null,\n },\n };\n }\n\n private async beginAuthorizationCodeFlow(params: { [key: string]: any }): Promise<undefined> {\n const issuer = this.resolveIssuer();\n const tenantId = params['tenantId'] ?? params['tenant']?.id ?? null;\n const applicationId = params['applicationId'] ?? params['application']?.id ?? null;\n const { clientId, redirectUri, scope } = this.resolveClientConfig();\n const resolvedRedirectUri = params['redirectUri'] || redirectUri;\n const resolvedScope = params['scope'] || scope;\n\n const codeVerifier = PkceUtil.generateRandomString(128);\n localStorage.setItem('pkce_code_verifier', codeVerifier);\n const codeChallenge = await PkceUtil.generateCodeChallenge(codeVerifier);\n\n const authorizeEndpoint = resolvePlatformOAuthAuthorizeEndpoint(issuer);\n const state = Math.random().toString(36).substring(2);\n\n const queryParams = [\n `response_type=code`,\n `client_id=${encodeURIComponent(clientId)}`,\n `redirect_uri=${encodeURIComponent(resolvedRedirectUri)}`,\n `scope=${encodeURIComponent(resolvedScope)}`,\n `state=${encodeURIComponent(state)}`,\n tenantId ? `tenant_id=${encodeURIComponent(tenantId)}` : null,\n applicationId ? `application_id=${encodeURIComponent(applicationId)}` : null,\n `code_challenge=${encodeURIComponent(codeChallenge)}`,\n `code_challenge_method=S256`,\n `acr_values=google`,\n ]\n .filter(Boolean)\n .join('&');\n\n window.location.href = `${authorizeEndpoint}?${queryParams}`;\n await this.waitForOAuthRedirect();\n\n return undefined;\n }\n\n private waitForOAuthRedirect(): Promise<void> {\n return new Promise<void>(() => {});\n }\n\n private loadAuthData(): AXPSessionData | undefined {\n return this.sessionService.getSessionData() || undefined;\n }\n}\n\n//#endregion\n","import { AXPPlatformAuthRuntimeService } from '@acorex-platform/framework-client/auth';\nimport { Injectable, inject } from '@angular/core';\n\n//#region ---- Google platform login availability ----\n\n@Injectable()\nexport class AXEGooglePlatformLoginAvailabilityService {\n private readonly platformAuthRuntime = inject(AXPPlatformAuthRuntimeService);\n private cachedEnabled: boolean | null = null;\n\n async isEnabled(): Promise<boolean> {\n if (this.cachedEnabled !== null) {\n return this.cachedEnabled;\n }\n\n try {\n const providers = await this.platformAuthRuntime.listProviders();\n this.cachedEnabled = providers.identityProviders.some((p) => p.id === 'google');\n return this.cachedEnabled;\n } catch {\n this.cachedEnabled = false;\n return false;\n }\n }\n}\n\n//#endregion\n","//#region ---- Imports ----\n\nimport { AXPSessionService } from '@acorex-platform/framework-client/auth';\nimport { AXPSettingDefinitionProvider, AXPSettingDefinitionProviderContext } from '@acorex-platform/framework-client/common';\nimport { AXPWidgetsList } from '@acorex-platform/framework-shared/core';\nimport { Injectable, inject } from '@angular/core';\nimport { AXEGoogleSettings, RootConfig } from '@acorex-platform/extension-google-client/contracts';\n\n//#endregion\n\n//#region ---- Constants ----\n\n/** Must match the settings group `name` from integration-management (`AXMIntegrationManagementSettingProvider`). */\nconst INTEGRATIONS_SETTINGS_GROUP = 'integrations';\n\nconst GOOGLE_I18N = '@extensions-google:settings.google';\n\n//#endregion\n\n//#region ---- Settings Provider ----\n\n@Injectable()\nexport class AXEGoogleSettingsProvider implements AXPSettingDefinitionProvider {\n private readonly sessionService = inject(AXPSessionService);\n\n async provide(context: AXPSettingDefinitionProviderContext): Promise<void> {\n // Only register when the edition entitles Google (same gate as Integrations provider list).\n if (!this.sessionService.isModuleEnabled(RootConfig.module.name)) {\n return;\n }\n\n if (!context.hasGroup(INTEGRATIONS_SETTINGS_GROUP)) {\n return;\n }\n\n const integrations = context.group(INTEGRATIONS_SETTINGS_GROUP);\n if (!integrations) {\n return;\n }\n\n integrations\n .addSection('google', `${GOOGLE_I18N}.section-title`, `${GOOGLE_I18N}.section-description`)\n .addSetting({\n key: 'Google:Setting:ConnectionPanel',\n title: `${GOOGLE_I18N}.connection-title`,\n scope: 'U',\n overridableAt: [],\n isInherited: false,\n widget: {\n type: AXPWidgetsList.Advanced.IntegrationConnectionsPanel,\n layout: { stacked: true },\n options: { providerId: 'google' },\n },\n description: `${GOOGLE_I18N}.connection-description`,\n })\n .addSetting({\n key: AXEGoogleSettings.GmailSyncEnabled,\n title: `${GOOGLE_I18N}.gmail-enabled-title`,\n scope: 'U',\n overridableAt: [],\n isInherited: false,\n defaultValue: false,\n widget: {\n type: AXPWidgetsList.Editors.ToggleSwitch,\n },\n description: `${GOOGLE_I18N}.gmail-enabled-description`,\n })\n .addSetting({\n key: AXEGoogleSettings.CalendarSyncEnabled,\n title: `${GOOGLE_I18N}.calendar-enabled-title`,\n scope: 'U',\n overridableAt: [],\n isInherited: false,\n defaultValue: false,\n widget: {\n type: AXPWidgetsList.Editors.ToggleSwitch,\n },\n description: `${GOOGLE_I18N}.calendar-enabled-description`,\n })\n .endSection();\n }\n}\n\n//#endregion\n","import {\n AXP_LOGO_PROVIDER,\n type AXPLogoProvider,\n type AXPLogoRequest,\n type AXPLogoView,\n} from '@acorex-platform/framework-client/core';\nimport { axpGoogleLogoKey } from './google-logo-key';\n\nconst googleLogoProvider: AXPLogoProvider = {\n key: axpGoogleLogoKey,\n resolve: async (request: AXPLogoRequest): Promise<AXPLogoView> => ({\n kind: 'component',\n load: () => import('./google-logo.component').then((module) => module.AXEGoogleLogoComponent),\n inputs: {\n appearance: request.appearance,\n size: request.size,\n },\n }),\n};\n\nexport const AXE_GOOGLE_LOGO_PROVIDER = {\n provide: AXP_LOGO_PROVIDER,\n useValue: googleLogoProvider,\n multi: true,\n} as const;\n","//#region ---- Imports ----\n\nimport { AXMIntegrationManagementModule } from '@acorex-platform/module-integration-management-client';\nimport {\n AXP_INTEGRATION_PROVIDER,\n AXP_INTEGRATION_RUNTIME_PROVIDER,\n AXP_SETTING_DEFINITION_PROVIDER,\n} from '@acorex-platform/framework-client/common';\nimport { AXPAuthModule } from '@acorex-platform/framework-client/auth';\nimport { provideCommandSetups } from '@acorex-platform/framework-client/runtime';\nimport { AXEGoogleCommandKeys } from '@acorex-platform/extension-google-client/contracts';\nimport { AXPComponentSlotRegistryService } from '@acorex-platform/framework-client/core';\nimport { AUTH_LOGIN_EXTERNAL_PROVIDERS_SLOT } from '@acorex-platform/module-auth-client';\nimport { NgModule } from '@angular/core';\nimport { AXEGoogleIntegrationProvider } from './integration/google.integration.provider';\nimport { AXEGoogleIntegrationRuntimeProvider } from './integration/google.integration-runtime.provider';\nimport { AXEGooglePlatformAuthStrategy } from './platform-auth/google-platform-auth.strategy';\nimport { AXEGooglePlatformLoginAvailabilityService } from './platform-auth/google-platform-login-availability.service';\nimport { AXEGoogleSettingsProvider } from './settings/google.settings.provider';\nimport { AXE_GOOGLE_LOGO_PROVIDER } from './brand/google-logo.provider';\n\n//#endregion\n\n//#region ---- Module ----\n\n/**\n * Google Workspace integration (Gmail, Calendar) and platform login via Google OAuth.\n * Register in the app after {@link AXMIntegrationManagementModule}.\n */\n@NgModule({\n imports: [\n AXMIntegrationManagementModule,\n AXPAuthModule.forChild({ strategies: [AXEGooglePlatformAuthStrategy] }),\n ],\n providers: [\n AXEGooglePlatformLoginAvailabilityService,\n AXE_GOOGLE_LOGO_PROVIDER,\n {\n provide: AXP_INTEGRATION_PROVIDER,\n useClass: AXEGoogleIntegrationProvider,\n multi: true,\n },\n {\n provide: AXP_INTEGRATION_RUNTIME_PROVIDER,\n useClass: AXEGoogleIntegrationRuntimeProvider,\n multi: true,\n },\n {\n provide: AXP_SETTING_DEFINITION_PROVIDER,\n useClass: AXEGoogleSettingsProvider,\n multi: true,\n },\n provideCommandSetups([\n {\n key: AXEGoogleCommandKeys.ConnectionConnect,\n command: () => import('./features/connect/connect-google.command').then((c) => c.ConnectGoogleCommand),\n },\n {\n key: AXEGoogleCommandKeys.ConnectionCompleteOAuth,\n command: () =>\n import('./features/connect/complete-google-oauth.command').then((c) => c.CompleteGoogleOAuthCommand),\n },\n ]),\n ],\n})\nexport class AXEGoogleExtensionModule {\n constructor(\n registry: AXPComponentSlotRegistryService,\n googlePlatformLogin: AXEGooglePlatformLoginAvailabilityService,\n ) {\n registry.register(AUTH_LOGIN_EXTERNAL_PROVIDERS_SLOT, {\n name: 'google-platform-login',\n priority: 10,\n loadComponent: () =>\n import('./platform-auth/google-platform-login-slot.component').then(\n (component) => component.AXEGooglePlatformLoginSlotComponent,\n ),\n condition: () => googlePlatformLogin.isEnabled(),\n });\n }\n}\n\n//#endregion\n","import type { AXPLogoAppearance } from '@acorex-platform/framework-client/core';\nimport { Component, computed, input, ChangeDetectionStrategy } from '@angular/core';\n\n//#region ---- Google brand logo (owned by Google extension) ----\n\n@Component({\n selector: 'axe-google-logo',\n host: { class: 'inline-flex items-center justify-center' },\n changeDetection: ChangeDetectionStrategy.Eager,\n template: `\n @switch (resolvedAppearance()) {\n @case ('monochrome') {\n <svg [attr.width]=\"size()\" [attr.height]=\"size()\" viewBox=\"0 0 24 24\" aria-hidden=\"true\">\n <path\n fill=\"currentColor\"\n d=\"M12 5.38c1.62 0 3.06.56 4.21 1.64l3.15-3.15C17.45 2.09 14.97 1 12 1 7.7 1 3.99 3.47 2.18 7.07l3.66 2.84c.87-2.6 3.3-4.53 6.16-4.53z\"\n />\n </svg>\n }\n @default {\n <svg [attr.width]=\"size()\" [attr.height]=\"size()\" viewBox=\"0 0 24 24\" aria-hidden=\"true\">\n <path\n fill=\"#4285F4\"\n d=\"M22.56 12.25c0-.78-.07-1.53-.2-2.25H12v4.26h5.92c-.26 1.37-1.04 2.53-2.21 3.31v2.77h3.57c2.08-1.92 3.28-4.74 3.28-8.09z\"\n />\n <path\n fill=\"#34A853\"\n d=\"M12 23c2.97 0 5.46-.98 7.28-2.66l-3.57-2.77c-.98.66-2.23 1.06-3.71 1.06-2.86 0-5.29-1.93-6.16-4.53H2.18v2.84C3.99 20.53 7.7 23 12 23z\"\n />\n <path\n fill=\"#FBBC05\"\n d=\"M5.84 14.09c-.22-.66-.35-1.36-.35-2.09s.13-1.43.35-2.09V7.07H2.18C1.43 8.55 1 10.22 1 12s.43 3.45 1.18 4.93l2.85-2.22.81-.62z\"\n />\n <path\n fill=\"#EA4335\"\n d=\"M12 5.38c1.62 0 3.06.56 4.21 1.64l3.15-3.15C17.45 2.09 14.97 1 12 1 7.7 1 3.99 3.47 2.18 7.07l3.66 2.84c.87-2.6 3.3-4.53 6.16-4.53z\"\n />\n </svg>\n }\n }\n `,\n})\nexport class AXEGoogleLogoComponent {\n appearance = input<AXPLogoAppearance>('colored');\n size = input(20);\n\n protected readonly resolvedAppearance = computed(() => {\n const value = this.appearance();\n return value === 'monochrome' ? 'monochrome' : 'colored';\n });\n}\n\n//#endregion\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i2.AXEGooglePlatformLoginAvailabilityService"],"mappings":";;;;;;;;;;;;;;AAAA;AAEO,MAAM,gBAAgB,GAAG;AAEhC;;ACJA;AAEA;AACO,MAAM,+BAA+B,GAAG;IAC7C,QAAQ;IACR,OAAO;IACP,SAAS;IACT,gDAAgD;IAChD,0CAA0C;;AAG5C;;ACXA;AAYA;AAEA;MAGa,4BAA4B,CAAA;IACvC,MAAM,OAAO,CAAC,OAAsC,EAAA;QAClD,MAAM,IAAI,GAAG,CAAA,CAAA,EAAI,UAAU,CAAC,MAAM,CAAC,IAAI,CAAA,YAAA,CAAc;QAErD,OAAO,CAAC,QAAQ,CAAC;AACf,YAAA,QAAQ,EAAE,OAAO;AACjB,YAAA,EAAE,EAAE,QAAQ;AACZ,YAAA,MAAM,EAAE,UAAU,CAAC,MAAM,CAAC,IAAI;YAC9B,WAAW,EAAE,CAAA,EAAG,IAAI,CAAA,aAAA,CAAe;YACnC,WAAW,EAAE,CAAA,EAAG,IAAI,CAAA,YAAA,CAAc;AAClC,YAAA,IAAI,EAAE,UAAU,CAAC,MAAM,CAAC,IAAI;AAC5B,YAAA,OAAO,EAAE,gBAAgB;AACzB,YAAA,YAAY,EAAE;AACZ,gBAAA,0BAA0B,CAAC,SAAS;AACpC,gBAAA,0BAA0B,CAAC,QAAQ;AACnC,gBAAA,0BAA0B,CAAC,IAAI;AAC/B,gBAAA,0BAA0B,CAAC,QAAQ;AACpC,aAAA;AACD,YAAA,gBAAgB,EAAE,CAAC,gCAAgC,CAAC,IAAI,CAAC;AACzD,YAAA,wBAAwB,EAAE,KAAK;AAC/B,YAAA,oBAAoB,EAAE,SAAS;YAC/B,iBAAiB,EAAE,oBAAoB,CAAC,iBAAiB;YACzD,uBAAuB,EAAE,oBAAoB,CAAC,uBAAuB;AACrE,YAAA,WAAW,EAAE;AACX,gBAAA;oBACE,IAAI,EAAE,gCAAgC,CAAC,MAAM;oBAC7C,KAAK,EAAE,CAAA,EAAG,IAAI,CAAA,iBAAA,CAAmB;oBACjC,YAAY,EAAE,CAAA,EAAG,IAAI,CAAA,wBAAA,CAA0B;AAC/C,oBAAA,YAAY,EAAE,IAAI;AAClB,oBAAA,eAAe,EAAE,IAAI;AACrB,oBAAA,cAAc,EAAE,IAAI;AACpB,oBAAA,kBAAkB,EAAE,IAAI;AACxB,oBAAA,aAAa,EAAE,CAAC,GAAG,+BAA+B,CAAC;AACnD,oBAAA,MAAM,EAAE,EAAE;AACX,iBAAA;AACF,aAAA;AACF,SAAA,CAAC;IACJ;8GArCW,4BAA4B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;kHAA5B,4BAA4B,EAAA,CAAA,CAAA;;2FAA5B,4BAA4B,EAAA,UAAA,EAAA,CAAA;kBADxC;;;AChBD;AA0BA;AAEA;MAGa,mCAAmC,CAAA;AADhD,IAAA,WAAA,GAAA;QAEW,IAAA,CAAA,UAAU,GAAG,QAAQ;QAEb,IAAA,CAAA,WAAW,GAAG,MAAM,CAAC,4BAA4B,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;AAsExF,IAAA;AApEC,IAAA,MAAM,QAAQ,GAAA;QACZ,OAAO;YACL,kBAAkB,EAAE,CAAC,GAAG,KAAK,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC;YACzD,YAAY,EAAE,CAAC,GAAG,KAAK,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC;SAC9C;IACH;IAEQ,MAAM,kBAAkB,CAAC,GAAiC,EAAA;AAChE,QAAA,IAAI;YACF,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC;AACtD,YAAA,IAAI,CAAC,WAAW,CAAC,WAAW,EAAE;gBAC5B,OAAO;AACL,oBAAA,KAAK,EAAE,KAAK;oBACZ,MAAM,EAAE,iCAAiC,CAAC,OAAO;AACjD,oBAAA,YAAY,EAAE,kDAAkD;iBACjE;YACH;YAEA,OAAO;AACL,gBAAA,KAAK,EAAE,IAAI;gBACX,MAAM,EAAE,iCAAiC,CAAC,SAAS;gBACnD,mBAAmB,EAAE,SAAS,CAAC,WAAW,CAAC,KAAK,EAAE,QAAQ,CAAC;gBAC3D,iBAAiB,EAAE,SAAS,CAAC,WAAW,CAAC,KAAK,EAAE,SAAS,CAAC;aAC3D;QACH;AAAE,QAAA,MAAM;YACN,OAAO;AACL,gBAAA,KAAK,EAAE,KAAK;gBACZ,MAAM,EAAE,iCAAiC,CAAC,OAAO;AACjD,gBAAA,YAAY,EAAE,wCAAwC;aACvD;QACH;IACF;IAEQ,MAAM,YAAY,CAAC,GAAiC,EAAA;QAC1D,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC;AACtD,QAAA,IAAI,CAAC,WAAW,CAAC,WAAW,EAAE;AAC5B,YAAA,MAAM,IAAI,KAAK,CAAC,+CAA+C,CAAC;QAClE;QAEA,OAAO;YACL,WAAW,EAAE,WAAW,CAAC,WAAW;YACpC,YAAY,EAAE,WAAW,CAAC,YAAY;YACtC,KAAK,EAAE,WAAW,CAAC,KAAK;SACzB;IACH;IAEQ,MAAM,kBAAkB,CAAC,GAAiC,EAAA;QAChE,MAAM,MAAM,IAAI,GAAG,CAAC,MAAM,IAAI,EAAE,CAA4B;AAC5D,QAAA,MAAM,iBAAiB,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC,IAAI,EAAE,CAAC,CAAC;QACnE,IAAI,iBAAiB,EAAE;YACrB,OAAO;AACL,gBAAA,WAAW,EAAE,iBAAiB;AAC9B,gBAAA,YAAY,EAAE,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,cAAc,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,SAAS;AACrE,gBAAA,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,SAAS;aACxD;QACH;AAEA,QAAA,IAAI,CAAC,IAAI,CAAC,WAAW,IAAI,CAAC,GAAG,CAAC,SAAS,IAAI,GAAG,CAAC,SAAS,KAAK,QAAQ,EAAE;AACrE,YAAA,MAAM,IAAI,KAAK,CAAC,kDAAkD,CAAC;QACrE;AAEA,QAAA,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,GAAG,CAAC,SAAS,EAAE,GAAG,CAAC;QACtE,OAAO;YACL,WAAW,EAAE,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC;AACzD,YAAA,YAAY,EAAE,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,YAAY,EAAE,EAAE,CAAC,CAAC,IAAI,SAAS;AACxE,YAAA,KAAK,EAAE,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,IAAI,SAAS;SAC3D;IACH;8GAxEW,mCAAmC,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;kHAAnC,mCAAmC,EAAA,CAAA,CAAA;;2FAAnC,mCAAmC,EAAA,UAAA,EAAA,CAAA;kBAD/C;;;ACPD;AAGM,MAAO,6BAA8B,SAAQ,eAAe,CAAA;AADlE,IAAA,WAAA,GAAA;;AAEmB,QAAA,IAAA,CAAA,WAAW,GAAmB,MAAM,CAAC,qBAAqB,CAAC;AAC3D,QAAA,IAAA,CAAA,cAAc,GAAG,MAAM,CAAC,iBAAiB,CAAC;AAC1C,QAAA,IAAA,CAAA,mBAAmB,GAAG,MAAM,CAAC,6BAA6B,CAAC;AAwM7E,IAAA;AAtMC,IAAA,IAAI,IAAI,GAAA;AACN,QAAA,OAAO,QAAQ;IACjB;IAEQ,aAAa,GAAA;QACnB,OAAO,0BAA0B,CAAC,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC;IAC7D;IAEQ,mBAAmB,GAAA;QACzB,OAAO,gCAAgC,CAAC,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC;IACtE;IAES,MAAM,MAAM,CAAC,YAAgC,EAAA;AACpD,QAAA,MAAM,IAAI,CAAC,iCAAiC,EAAE;IAChD;AAEQ,IAAA,MAAM,iCAAiC,GAAA;AAC7C,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,aAAa,EAAE;AACnC,QAAA,MAAM,EAAE,QAAQ,EAAE,WAAW,EAAE,KAAK,EAAE,GAAG,IAAI,CAAC,mBAAmB,EAAE;QAEnE,MAAM,YAAY,GAAG,QAAQ,CAAC,oBAAoB,CAAC,GAAG,CAAC;AACvD,QAAA,YAAY,CAAC,OAAO,CAAC,oBAAoB,EAAE,YAAY,CAAC;QACxD,MAAM,aAAa,GAAG,MAAM,QAAQ,CAAC,qBAAqB,CAAC,YAAY,CAAC;;AAGxE,QAAA,IAAI,CAAC,cAAc,CAAC,WAAW,CAAC,QAAQ,CAAC;AAEzC,QAAA,MAAM,MAAM,GAAG,IAAI,eAAe,CAAC;AACjC,YAAA,aAAa,EAAE,MAAM;AACrB,YAAA,SAAS,EAAE,QAAQ;AACnB,YAAA,YAAY,EAAE,WAAW;YACzB,KAAK;AACL,YAAA,cAAc,EAAE,aAAa;AAC7B,YAAA,qBAAqB,EAAE,MAAM;AAC7B,YAAA,MAAM,EAAE,OAAO;AACf,YAAA,UAAU,EAAE,QAAQ;AACrB,SAAA,CAAC;AAEF,QAAA,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAA,EAAG,MAAM,CAAA,mBAAA,EAAsB,MAAM,CAAC,QAAQ,EAAE,CAAA,CAAE,CAAC;AAC1E,QAAA,MAAM,IAAI,CAAC,oBAAoB,EAAE;IACnC;AAEA,IAAA,MAAM,OAAO,GAAA;AACX,QAAA,YAAY,CAAC,UAAU,CAAC,oBAAoB,CAAC;AAC7C,QAAA,YAAY,CAAC,UAAU,CAAC,gBAAgB,CAAC;AACzC,QAAA,MAAM,IAAI,CAAC,mBAAmB,CAAC,MAAM,EAAE;IACzC;IAEA,MAAM,YAAY,CAAC,QAA2B,EAAA;AAC5C,QAAA,IAAI;AACF,YAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,YAAY,EAAE;YACpC,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,mBAAmB,CAAC,OAAO,EAAE;YAC1D,OAAO,2BAA2B,CAAC,SAAS,EAAE;gBAC5C,IAAI,EAAE,SAAS,CAAC,IAAI;AACpB,gBAAA,MAAM,EAAE,QAAQ,EAAE,MAAM,IAAI,IAAI;AAChC,gBAAA,WAAW,EAAE,QAAQ,EAAE,WAAW,IAAI,IAAI;AAC3C,aAAA,CAAC;QACJ;QAAE,OAAO,KAAK,EAAE;AACd,YAAA,OAAO,CAAC,KAAK,CAAC,wBAAwB,EAAE,KAAK,CAAC;AAC9C,YAAA,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE;QAC3B;IACF;IAES,MAAM,WAAW,CAAC,MAA8B,EAAA;AACvD,QAAA,IAAI;AACF,YAAA,IAAI,MAAM,CAAC,MAAM,CAAC,EAAE;AAClB,gBAAA,OAAO,IAAI,CAAC,yBAAyB,CAAC,MAAM,CAAC;YAC/C;AAEA,YAAA,IAAI,8BAA8B,CAAC,IAAI,CAAC,cAAc,CAAC,qBAAqB,EAAE,EAAE,MAAM,CAAC,EAAE;AACvF,gBAAA,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,QAAQ,EAAE,aAAa,EAAE,GAAG,gCAAgC,CAAC,MAAM,CAAC;gBACjG,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,mBAAmB,CAAC,aAAa,CAAC;oBAC1D,QAAQ;oBACR,aAAa;oBACb,MAAM;oBACN,WAAW;AACZ,iBAAA,CAAC;gBACF,OAAO,2BAA2B,CAAC,MAAM,EAAE;AACzC,oBAAA,IAAI,EAAG,MAAM,CAAC,MAAM,CAAa,IAAI,IAAI;oBACzC,MAAM,EAAE,MAAM,IAAI,IAAI;oBACtB,WAAW,EAAE,WAAW,IAAI,IAAI;AACjC,iBAAA,CAAC;YACJ;AAEA,YAAA,OAAO,IAAI,CAAC,0BAA0B,CAAC,MAAM,CAAC;QAChD;QAAE,OAAO,KAAK,EAAE;AACd,YAAA,OAAO,CAAC,KAAK,CAAC,uBAAuB,EAAE,KAAK,CAAC;AAC7C,YAAA,MAAM,KAAK;QACb;IACF;IAEQ,MAAM,yBAAyB,CAAC,MAA8B,EAAA;AACpE,QAAA,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC;AAC3B,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,aAAa,EAAE;QACnC,MAAM,EAAE,QAAQ,EAAE,WAAW,EAAE,GAAG,IAAI,CAAC,mBAAmB,EAAE;QAC5D,MAAM,mBAAmB,GAAG,MAAM,CAAC,aAAa,CAAC,IAAI,WAAW;QAChE,MAAM,gBAAgB,GAAG,MAAM,CAAC,UAAU,CAAC,IAAI,QAAQ;AACvD,QAAA,MAAM,aAAa,GAAG,iCAAiC,CAAC,MAAM,CAAC;QAE/D,MAAM,YAAY,GAAG,YAAY,CAAC,OAAO,CAAC,oBAAoB,CAAC;QAC/D,IAAI,CAAC,YAAY,EAAE;AACjB,YAAA,MAAM,IAAI,KAAK,CAAC,uDAAuD,CAAC;QAC1E;AAEA,QAAA,MAAM,IAAI,GAAG,IAAI,eAAe,CAAC;AAC/B,YAAA,UAAU,EAAE,oBAAoB;AAChC,YAAA,SAAS,EAAE,gBAAgB;AAC3B,YAAA,aAAa,EAAE,YAAY;YAC3B,IAAI;AACJ,YAAA,YAAY,EAAE,mBAAmB;AAClC,SAAA,CAAC;AAEF,QAAA,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,aAAa,EAAE;AAC1C,YAAA,MAAM,EAAE,MAAM;AACd,YAAA,WAAW,EAAE,SAAS;AACtB,YAAA,OAAO,EAAE,EAAE,cAAc,EAAE,mCAAmC,EAAE;AAChE,YAAA,IAAI,EAAE,IAAI,CAAC,QAAQ,EAAE;AACtB,SAAA,CAAC;AAEF,QAAA,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE;AAChB,YAAA,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;YACpD,MAAM,IAAI,KAAK,CACb,CAAA,uBAAA,EAA0B,QAAQ,CAAC,MAAM,CAAA,CAAA,EAAI,QAAQ,CAAC,UAAU,CAAA,EAAG,MAAM,GAAG,CAAA,GAAA,EAAM,MAAM,CAAA,CAAE,GAAG,EAAE,CAAA,CAAE,CAClG;QACH;AAEA,QAAA,YAAY,CAAC,UAAU,CAAC,oBAAoB,CAAC;AAE7C,QAAA,MAAM,SAAS,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE;QACvC,MAAM,OAAO,GAAG,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC,QAAQ,CAAC;QACpD,IAAI,CAAC,OAAO,EAAE;AACZ,YAAA,MAAM,IAAI,KAAK,CAAC,mBAAmB,CAAC;QACtC;AAEA,QAAA,MAAM,IAAI,GAAG;AACX,YAAA,EAAE,EAAE,OAAO,CAAC,KAAK,CAAC,IAAI,EAAE;YACxB,KAAK,EAAE,OAAO,CAAC,MAAM,CAAC,IAAI,OAAO,CAAC,OAAO,CAAC,IAAI,EAAE;YAChD,IAAI,EAAE,OAAO,CAAC,MAAM,CAAC,IAAI,OAAO,CAAC,OAAO,CAAC,IAAI,EAAE;AAC/C,YAAA,MAAM,EAAE,OAAO,CAAC,SAAS,CAAC,IAAI,EAAE;SACtB;QAEZ,OAAO;AACL,YAAA,OAAO,EAAE,IAAI;AACb,YAAA,IAAI,EAAE;AACJ,gBAAA,WAAW,EAAE,SAAS,CAAC,YAAY,IAAI,SAAS,CAAC,WAAW;AAC5D,gBAAA,YAAY,EAAE,SAAS,CAAC,aAAa,IAAI,SAAS,CAAC,YAAY;AAC/D,gBAAA,OAAO,EAAE,SAAS,CAAC,QAAQ,IAAI,IAAI;gBACnC,SAAS,EAAE,QAAQ,CAAC,qBAAqB,CAAC,SAAS,CAAC,UAAU,IAAI,CAAC,CAAC;gBACpE,IAAI;AACJ,gBAAA,MAAM,EAAE,IAAI;AACZ,gBAAA,WAAW,EAAE,IAAI;AAClB,aAAA;SACF;IACH;IAEQ,MAAM,0BAA0B,CAAC,MAA8B,EAAA;AACrE,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,aAAa,EAAE;AACnC,QAAA,MAAM,QAAQ,GAAG,MAAM,CAAC,UAAU,CAAC,IAAI,MAAM,CAAC,QAAQ,CAAC,EAAE,EAAE,IAAI,IAAI;AACnE,QAAA,MAAM,aAAa,GAAG,MAAM,CAAC,eAAe,CAAC,IAAI,MAAM,CAAC,aAAa,CAAC,EAAE,EAAE,IAAI,IAAI;AAClF,QAAA,MAAM,EAAE,QAAQ,EAAE,WAAW,EAAE,KAAK,EAAE,GAAG,IAAI,CAAC,mBAAmB,EAAE;QACnE,MAAM,mBAAmB,GAAG,MAAM,CAAC,aAAa,CAAC,IAAI,WAAW;QAChE,MAAM,aAAa,GAAG,MAAM,CAAC,OAAO,CAAC,IAAI,KAAK;QAE9C,MAAM,YAAY,GAAG,QAAQ,CAAC,oBAAoB,CAAC,GAAG,CAAC;AACvD,QAAA,YAAY,CAAC,OAAO,CAAC,oBAAoB,EAAE,YAAY,CAAC;QACxD,MAAM,aAAa,GAAG,MAAM,QAAQ,CAAC,qBAAqB,CAAC,YAAY,CAAC;AAExE,QAAA,MAAM,iBAAiB,GAAG,qCAAqC,CAAC,MAAM,CAAC;AACvE,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC;AAErD,QAAA,MAAM,WAAW,GAAG;YAClB,CAAA,kBAAA,CAAoB;AACpB,YAAA,CAAA,UAAA,EAAa,kBAAkB,CAAC,QAAQ,CAAC,CAAA,CAAE;AAC3C,YAAA,CAAA,aAAA,EAAgB,kBAAkB,CAAC,mBAAmB,CAAC,CAAA,CAAE;AACzD,YAAA,CAAA,MAAA,EAAS,kBAAkB,CAAC,aAAa,CAAC,CAAA,CAAE;AAC5C,YAAA,CAAA,MAAA,EAAS,kBAAkB,CAAC,KAAK,CAAC,CAAA,CAAE;AACpC,YAAA,QAAQ,GAAG,CAAA,UAAA,EAAa,kBAAkB,CAAC,QAAQ,CAAC,CAAA,CAAE,GAAG,IAAI;AAC7D,YAAA,aAAa,GAAG,CAAA,eAAA,EAAkB,kBAAkB,CAAC,aAAa,CAAC,CAAA,CAAE,GAAG,IAAI;AAC5E,YAAA,CAAA,eAAA,EAAkB,kBAAkB,CAAC,aAAa,CAAC,CAAA,CAAE;YACrD,CAAA,0BAAA,CAA4B;YAC5B,CAAA,iBAAA,CAAmB;AACpB;aACE,MAAM,CAAC,OAAO;aACd,IAAI,CAAC,GAAG,CAAC;QAEZ,MAAM,CAAC,QAAQ,CAAC,IAAI,GAAG,GAAG,iBAAiB,CAAA,CAAA,EAAI,WAAW,CAAA,CAAE;AAC5D,QAAA,MAAM,IAAI,CAAC,oBAAoB,EAAE;AAEjC,QAAA,OAAO,SAAS;IAClB;IAEQ,oBAAoB,GAAA;QAC1B,OAAO,IAAI,OAAO,CAAO,MAAK,EAAE,CAAC,CAAC;IACpC;IAEQ,YAAY,GAAA;QAClB,OAAO,IAAI,CAAC,cAAc,CAAC,cAAc,EAAE,IAAI,SAAS;IAC1D;8GA1MW,6BAA6B,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;kHAA7B,6BAA6B,EAAA,CAAA,CAAA;;2FAA7B,6BAA6B,EAAA,UAAA,EAAA,CAAA;kBADzC;;;ACtBD;MAGa,yCAAyC,CAAA;AADtD,IAAA,WAAA,GAAA;AAEmB,QAAA,IAAA,CAAA,mBAAmB,GAAG,MAAM,CAAC,6BAA6B,CAAC;QACpE,IAAA,CAAA,aAAa,GAAmB,IAAI;AAgB7C,IAAA;AAdC,IAAA,MAAM,SAAS,GAAA;AACb,QAAA,IAAI,IAAI,CAAC,aAAa,KAAK,IAAI,EAAE;YAC/B,OAAO,IAAI,CAAC,aAAa;QAC3B;AAEA,QAAA,IAAI;YACF,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,mBAAmB,CAAC,aAAa,EAAE;YAChE,IAAI,CAAC,aAAa,GAAG,SAAS,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,QAAQ,CAAC;YAC/E,OAAO,IAAI,CAAC,aAAa;QAC3B;AAAE,QAAA,MAAM;AACN,YAAA,IAAI,CAAC,aAAa,GAAG,KAAK;AAC1B,YAAA,OAAO,KAAK;QACd;IACF;8GAjBW,yCAAyC,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;kHAAzC,yCAAyC,EAAA,CAAA,CAAA;;2FAAzC,yCAAyC,EAAA,UAAA,EAAA,CAAA;kBADrD;;;ACLD;AAQA;AAEA;AAEA;AACA,MAAM,2BAA2B,GAAG,cAAc;AAElD,MAAM,WAAW,GAAG,oCAAoC;AAExD;AAEA;MAGa,yBAAyB,CAAA;AADtC,IAAA,WAAA,GAAA;AAEmB,QAAA,IAAA,CAAA,cAAc,GAAG,MAAM,CAAC,iBAAiB,CAAC;AA0D5D,IAAA;IAxDC,MAAM,OAAO,CAAC,OAA4C,EAAA;;AAExD,QAAA,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,eAAe,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE;YAChE;QACF;QAEA,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,2BAA2B,CAAC,EAAE;YAClD;QACF;QAEA,MAAM,YAAY,GAAG,OAAO,CAAC,KAAK,CAAC,2BAA2B,CAAC;QAC/D,IAAI,CAAC,YAAY,EAAE;YACjB;QACF;QAEA;aACG,UAAU,CAAC,QAAQ,EAAE,CAAA,EAAG,WAAW,gBAAgB,EAAE,CAAA,EAAG,WAAW,CAAA,oBAAA,CAAsB;AACzF,aAAA,UAAU,CAAC;AACV,YAAA,GAAG,EAAE,gCAAgC;YACrC,KAAK,EAAE,CAAA,EAAG,WAAW,CAAA,iBAAA,CAAmB;AACxC,YAAA,KAAK,EAAE,GAAG;AACV,YAAA,aAAa,EAAE,EAAE;AACjB,YAAA,WAAW,EAAE,KAAK;AAClB,YAAA,MAAM,EAAE;AACN,gBAAA,IAAI,EAAE,cAAc,CAAC,QAAQ,CAAC,2BAA2B;AACzD,gBAAA,MAAM,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE;AACzB,gBAAA,OAAO,EAAE,EAAE,UAAU,EAAE,QAAQ,EAAE;AAClC,aAAA;YACD,WAAW,EAAE,CAAA,EAAG,WAAW,CAAA,uBAAA,CAAyB;SACrD;AACA,aAAA,UAAU,CAAC;YACV,GAAG,EAAE,iBAAiB,CAAC,gBAAgB;YACvC,KAAK,EAAE,CAAA,EAAG,WAAW,CAAA,oBAAA,CAAsB;AAC3C,YAAA,KAAK,EAAE,GAAG;AACV,YAAA,aAAa,EAAE,EAAE;AACjB,YAAA,WAAW,EAAE,KAAK;AAClB,YAAA,YAAY,EAAE,KAAK;AACnB,YAAA,MAAM,EAAE;AACN,gBAAA,IAAI,EAAE,cAAc,CAAC,OAAO,CAAC,YAAY;AAC1C,aAAA;YACD,WAAW,EAAE,CAAA,EAAG,WAAW,CAAA,0BAAA,CAA4B;SACxD;AACA,aAAA,UAAU,CAAC;YACV,GAAG,EAAE,iBAAiB,CAAC,mBAAmB;YAC1C,KAAK,EAAE,CAAA,EAAG,WAAW,CAAA,uBAAA,CAAyB;AAC9C,YAAA,KAAK,EAAE,GAAG;AACV,YAAA,aAAa,EAAE,EAAE;AACjB,YAAA,WAAW,EAAE,KAAK;AAClB,YAAA,YAAY,EAAE,KAAK;AACnB,YAAA,MAAM,EAAE;AACN,gBAAA,IAAI,EAAE,cAAc,CAAC,OAAO,CAAC,YAAY;AAC1C,aAAA;YACD,WAAW,EAAE,CAAA,EAAG,WAAW,CAAA,6BAAA,CAA+B;SAC3D;AACA,aAAA,UAAU,EAAE;IACjB;8GA1DW,yBAAyB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;kHAAzB,yBAAyB,EAAA,CAAA,CAAA;;2FAAzB,yBAAyB,EAAA,UAAA,EAAA,CAAA;kBADrC;;;ACbD,MAAM,kBAAkB,GAAoB;AAC1C,IAAA,GAAG,EAAE,gBAAgB;AACrB,IAAA,OAAO,EAAE,OAAO,OAAuB,MAA4B;AACjE,QAAA,IAAI,EAAE,WAAW;AACjB,QAAA,IAAI,EAAE,MAAM,oEAAiC,CAAC,IAAI,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC,sBAAsB,CAAC;AAC7F,QAAA,MAAM,EAAE;YACN,UAAU,EAAE,OAAO,CAAC,UAAU;YAC9B,IAAI,EAAE,OAAO,CAAC,IAAI;AACnB,SAAA;KACF,CAAC;CACH;AAEM,MAAM,wBAAwB,GAAG;AACtC,IAAA,OAAO,EAAE,iBAAiB;AAC1B,IAAA,QAAQ,EAAE,kBAAkB;AAC5B,IAAA,KAAK,EAAE,IAAI;;;ACvBb;AAqBA;AAEA;AAEA;;;AAGG;MAqCU,wBAAwB,CAAA;IACnC,WAAA,CACE,QAAyC,EACzC,mBAA8D,EAAA;AAE9D,QAAA,QAAQ,CAAC,QAAQ,CAAC,kCAAkC,EAAE;AACpD,YAAA,IAAI,EAAE,uBAAuB;AAC7B,YAAA,QAAQ,EAAE,EAAE;AACZ,YAAA,aAAa,EAAE,MACb,OAAO,6FAAsD,CAAC,CAAC,IAAI,CACjE,CAAC,SAAS,KAAK,SAAS,CAAC,mCAAmC,CAC7D;AACH,YAAA,SAAS,EAAE,MAAM,mBAAmB,CAAC,SAAS,EAAE;AACjD,SAAA,CAAC;IACJ;8GAdW,wBAAwB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,+BAAA,EAAA,EAAA,EAAA,KAAA,EAAAA,yCAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA;AAAxB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,wBAAwB,YAlCjC,8BAA8B,EAAA,EAAA,CAAA,aAAA,CAAA,EAAA,CAAA,CAAA;AAkCrB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,wBAAwB,EAAA,SAAA,EA/BxB;YACT,yCAAyC;YACzC,wBAAwB;AACxB,YAAA;AACE,gBAAA,OAAO,EAAE,wBAAwB;AACjC,gBAAA,QAAQ,EAAE,4BAA4B;AACtC,gBAAA,KAAK,EAAE,IAAI;AACZ,aAAA;AACD,YAAA;AACE,gBAAA,OAAO,EAAE,gCAAgC;AACzC,gBAAA,QAAQ,EAAE,mCAAmC;AAC7C,gBAAA,KAAK,EAAE,IAAI;AACZ,aAAA;AACD,YAAA;AACE,gBAAA,OAAO,EAAE,+BAA+B;AACxC,gBAAA,QAAQ,EAAE,yBAAyB;AACnC,gBAAA,KAAK,EAAE,IAAI;AACZ,aAAA;AACD,YAAA,oBAAoB,CAAC;AACnB,gBAAA;oBACE,GAAG,EAAE,oBAAoB,CAAC,iBAAiB;AAC3C,oBAAA,OAAO,EAAE,MAAM,OAAO,+EAA2C,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,oBAAoB,CAAC;AACvG,iBAAA;AACD,gBAAA;oBACE,GAAG,EAAE,oBAAoB,CAAC,uBAAuB;AACjD,oBAAA,OAAO,EAAE,MACP,OAAO,sFAAkD,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,0BAA0B,CAAC;AACvG,iBAAA;aACF,CAAC;AACH,SAAA,EAAA,OAAA,EAAA,CAhCC,8BAA8B;YAC9B,aAAa,CAAC,QAAQ,CAAC,EAAE,UAAU,EAAE,CAAC,6BAA6B,CAAC,EAAE,CAAC,CAAA,EAAA,CAAA,CAAA;;2FAiC9D,wBAAwB,EAAA,UAAA,EAAA,CAAA;kBApCpC,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,OAAO,EAAE;wBACP,8BAA8B;wBAC9B,aAAa,CAAC,QAAQ,CAAC,EAAE,UAAU,EAAE,CAAC,6BAA6B,CAAC,EAAE,CAAC;AACxE,qBAAA;AACD,oBAAA,SAAS,EAAE;wBACT,yCAAyC;wBACzC,wBAAwB;AACxB,wBAAA;AACE,4BAAA,OAAO,EAAE,wBAAwB;AACjC,4BAAA,QAAQ,EAAE,4BAA4B;AACtC,4BAAA,KAAK,EAAE,IAAI;AACZ,yBAAA;AACD,wBAAA;AACE,4BAAA,OAAO,EAAE,gCAAgC;AACzC,4BAAA,QAAQ,EAAE,mCAAmC;AAC7C,4BAAA,KAAK,EAAE,IAAI;AACZ,yBAAA;AACD,wBAAA;AACE,4BAAA,OAAO,EAAE,+BAA+B;AACxC,4BAAA,QAAQ,EAAE,yBAAyB;AACnC,4BAAA,KAAK,EAAE,IAAI;AACZ,yBAAA;AACD,wBAAA,oBAAoB,CAAC;AACnB,4BAAA;gCACE,GAAG,EAAE,oBAAoB,CAAC,iBAAiB;AAC3C,gCAAA,OAAO,EAAE,MAAM,OAAO,+EAA2C,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,oBAAoB,CAAC;AACvG,6BAAA;AACD,4BAAA;gCACE,GAAG,EAAE,oBAAoB,CAAC,uBAAuB;AACjD,gCAAA,OAAO,EAAE,MACP,OAAO,sFAAkD,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,0BAA0B,CAAC;AACvG,6BAAA;yBACF,CAAC;AACH,qBAAA;AACF,iBAAA;;;AC7DD;MAuCa,sBAAsB,CAAA;AArCnC,IAAA,WAAA,GAAA;QAsCE,IAAA,CAAA,UAAU,GAAG,KAAK,CAAoB,SAAS;uFAAC;QAChD,IAAA,CAAA,IAAI,GAAG,KAAK,CAAC,EAAE;iFAAC;AAEG,QAAA,IAAA,CAAA,kBAAkB,GAAG,QAAQ,CAAC,MAAK;AACpD,YAAA,MAAM,KAAK,GAAG,IAAI,CAAC,UAAU,EAAE;YAC/B,OAAO,KAAK,KAAK,YAAY,GAAG,YAAY,GAAG,SAAS;QAC1D,CAAC;+FAAC;AACH,IAAA;8GARY,sBAAsB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAtB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,sBAAsB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,EAAA,UAAA,EAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,UAAA,EAAA,YAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,IAAA,EAAA,EAAA,cAAA,EAAA,yCAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAjCvB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA+BT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,KAAA,EAAA,CAAA,CAAA;;2FAEU,sBAAsB,EAAA,UAAA,EAAA,CAAA;kBArClC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,iBAAiB;AAC3B,oBAAA,IAAI,EAAE,EAAE,KAAK,EAAE,yCAAyC,EAAE;oBAC1D,eAAe,EAAE,uBAAuB,CAAC,KAAK;AAC9C,oBAAA,QAAQ,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA+BT,EAAA,CAAA;AACF,iBAAA;;;;;;;;ACzCD;;AAEG;;;;"}
1
+ {"version":3,"file":"acorex-platform-extension-google-client.mjs","sources":["../../../../libs/extensions/google/client/src/lib/brand/google-logo-key.ts","../../../../libs/extensions/google/client/src/lib/integration/google.integration.constants.ts","../../../../libs/extensions/google/client/src/lib/integration/google.integration.provider.ts","../../../../libs/extensions/google/client/src/lib/integration/google.integration-runtime.provider.ts","../../../../libs/extensions/google/client/src/lib/platform-auth/google-platform-auth.strategy.ts","../../../../libs/extensions/google/client/src/lib/platform-auth/google-platform-login-availability.service.ts","../../../../libs/extensions/google/client/src/lib/settings/google.settings.provider.ts","../../../../libs/extensions/google/client/src/lib/brand/google-logo.provider.ts","../../../../libs/extensions/google/client/src/lib/google-extension.module.ts","../../../../libs/extensions/google/client/src/lib/brand/google-logo.component.ts","../../../../libs/extensions/google/client/src/acorex-platform-extension-google-client.ts"],"sourcesContent":["//#region ---- Google logo registry key ----\n\nexport const axpGoogleLogoKey = 'google' as const;\n\n//#endregion\n","//#region ---- Google OAuth scopes ----\n\n/** Default OAuth scopes requested when connecting a Google account. */\nexport const AXE_GOOGLE_OAUTH_DEFAULT_SCOPES = [\n 'openid',\n 'email',\n 'profile',\n 'https://www.googleapis.com/auth/gmail.readonly',\n 'https://www.googleapis.com/auth/calendar',\n] as const;\n\n//#endregion\n","//#region ---- Imports ----\n\nimport { AXP_INTEGRATION_AUTH_METHOD_TYPE, AXP_INTEGRATION_CAPABILITY, AXP_INTEGRATION_CONNECTION_SCOPE } from '@acorex-platform/framework-shared/core';\nimport {\n AXPIntegrationProvider,\n AXPIntegrationProviderContext,\n} from '@acorex-platform/framework-client/common';\nimport { Injectable } from '@angular/core';\nimport { AXEGoogleCommandKeys, RootConfig } from '@acorex-platform/extension-google-client/contracts';\nimport { axpGoogleLogoKey } from '../brand/google-logo-key';\nimport { AXE_GOOGLE_OAUTH_DEFAULT_SCOPES } from './google.integration.constants';\n\n//#endregion\n\n//#region ---- Provider ----\n\n@Injectable()\nexport class AXEGoogleIntegrationProvider implements AXPIntegrationProvider {\n async provide(context: AXPIntegrationProviderContext): Promise<void> {\n const I18N = `@${RootConfig.config.i18n}:integration`;\n\n context.register({\n domainId: 'other',\n id: 'google',\n module: RootConfig.module.name,\n displayName: `${I18N}.display-name`,\n description: `${I18N}.description`,\n icon: RootConfig.module.icon,\n logoKey: axpGoogleLogoKey,\n capabilities: [\n AXP_INTEGRATION_CAPABILITY.Messaging,\n AXP_INTEGRATION_CAPABILITY.Calendar,\n AXP_INTEGRATION_CAPABILITY.Sync,\n AXP_INTEGRATION_CAPABILITY.Identity,\n ],\n connectionScopes: [AXP_INTEGRATION_CONNECTION_SCOPE.User],\n allowMultipleConnections: false,\n defaultConnectionKey: 'default',\n connectCommandKey: AXEGoogleCommandKeys.ConnectionConnect,\n completeOAuthCommandKey: AXEGoogleCommandKeys.ConnectionCompleteOAuth,\n authMethods: [\n {\n type: AXP_INTEGRATION_AUTH_METHOD_TYPE.OAuth2,\n label: `${I18N}.auth.oauth.label`,\n instructions: `${I18N}.auth.oauth.instructions`,\n usesRedirect: true,\n supportsRefresh: true,\n supportsRevoke: true,\n supportsValidation: true,\n defaultScopes: [...AXE_GOOGLE_OAUTH_DEFAULT_SCOPES],\n fields: [],\n },\n ],\n });\n }\n}\n\n//#endregion\n","//#region ---- Imports ----\n\nimport { AXP_INTEGRATION_CONNECTION_STATUS, type AXPIntegrationProviderRuntimeHooks, type AXPIntegrationRuntimeContext, type AXPIntegrationValidationResult } from '@acorex-platform/framework-shared/core';\nimport {\n AXP_INTEGRATION_SECRET_STORE,\n type AXPIntegrationRuntimeProvider,\n} from '@acorex-platform/framework-client/common';\nimport { Injectable, inject } from '@angular/core';\nimport { defaultTo, trim } from 'lodash-es';\n\n//#endregion\n\n//#region ---- Types ----\n\nexport interface AXEGoogleIntegrationClient {\n accessToken: string;\n refreshToken?: string;\n email?: string;\n}\n\ninterface GoogleConnectionCredentials {\n accessToken: string;\n refreshToken?: string;\n email?: string;\n}\n\n//#endregion\n\n//#region ---- Runtime Provider ----\n\n@Injectable()\nexport class AXEGoogleIntegrationRuntimeProvider implements AXPIntegrationRuntimeProvider {\n readonly providerId = 'google';\n\n private readonly secretStore = inject(AXP_INTEGRATION_SECRET_STORE, { optional: true });\n\n async getHooks(): Promise<AXPIntegrationProviderRuntimeHooks> {\n return {\n validateConnection: (ctx) => this.validateConnection(ctx),\n createClient: (ctx) => this.createClient(ctx),\n };\n }\n\n private async validateConnection(ctx: AXPIntegrationRuntimeContext): Promise<AXPIntegrationValidationResult> {\n try {\n const credentials = await this.resolveCredentials(ctx);\n if (!credentials.accessToken) {\n return {\n valid: false,\n status: AXP_INTEGRATION_CONNECTION_STATUS.Invalid,\n errorMessage: 'No access token available for Google connection.',\n };\n }\n\n return {\n valid: true,\n status: AXP_INTEGRATION_CONNECTION_STATUS.Connected,\n externalAccountName: defaultTo(credentials.email, 'Google'),\n externalAccountId: defaultTo(credentials.email, undefined),\n };\n } catch {\n return {\n valid: false,\n status: AXP_INTEGRATION_CONNECTION_STATUS.Invalid,\n errorMessage: 'Failed to validate Google credentials.',\n };\n }\n }\n\n private async createClient(ctx: AXPIntegrationRuntimeContext): Promise<AXEGoogleIntegrationClient> {\n const credentials = await this.resolveCredentials(ctx);\n if (!credentials.accessToken) {\n throw new Error('Google connection has no usable access token.');\n }\n\n return {\n accessToken: credentials.accessToken,\n refreshToken: credentials.refreshToken,\n email: credentials.email,\n };\n }\n\n private async resolveCredentials(ctx: AXPIntegrationRuntimeContext): Promise<GoogleConnectionCredentials> {\n const config = (ctx.config ?? {}) as Record<string, unknown>;\n const configAccessToken = trim(String(config['accessToken'] ?? ''));\n if (configAccessToken) {\n return {\n accessToken: configAccessToken,\n refreshToken: trim(String(config['refreshToken'] ?? '')) || undefined,\n email: trim(String(config['email'] ?? '')) || undefined,\n };\n }\n\n if (!this.secretStore || !ctx.secretRef || ctx.secretRef === 'config') {\n throw new Error('Google connection credentials are not available.');\n }\n\n const credentials = await this.secretStore.resolve(ctx.secretRef, ctx);\n return {\n accessToken: trim(defaultTo(credentials.accessToken, '')),\n refreshToken: trim(defaultTo(credentials.refreshToken, '')) || undefined,\n email: trim(defaultTo(credentials.email, '')) || undefined,\n };\n }\n}\n\n//#endregion\n","import { AXM_AUTH_CONFIG_TOKEN, AXMAuthConfigs } from '@acorex-platform/module-auth-client';\nimport {\n AXPAuthStrategy,\n AXPBaseCredentials,\n AXPPlatformAuthRuntimeService,\n AXPSessionContext,\n AXPSessionData,\n AXPSessionService,\n AXPSignInResult,\n AXPUser,\n JwtUtil,\n exchangePlatformOAuthAuthorizationCode,\n initPlatformOAuthAuthorization,\n platformOAuthSessionUpdateParams,\n resolvePlatformOAuthClientConfig,\n resolvePlatformOAuthIssuer,\n shouldPlatformOAuthBindSession,\n TimeUtil,\n toPlatformOAuthSignInResult,\n} from '@acorex-platform/framework-client/auth';\nimport { inject, Injectable } from '@angular/core';\n\n//#region ---- Google platform auth strategy ----\n\n@Injectable()\nexport class AXEGooglePlatformAuthStrategy extends AXPAuthStrategy {\n private readonly authConfigs: AXMAuthConfigs = inject(AXM_AUTH_CONFIG_TOKEN);\n private readonly sessionService = inject(AXPSessionService);\n private readonly platformAuthRuntime = inject(AXPPlatformAuthRuntimeService);\n\n get name(): string {\n return 'google';\n }\n\n private resolveIssuer(): string {\n return resolvePlatformOAuthIssuer(this.authConfigs.baseUrl);\n }\n\n private resolveClientConfig() {\n return resolvePlatformOAuthClientConfig(this.authConfigs.authConfig);\n }\n\n override async signin(_credentials: AXPBaseCredentials): Promise<void> {\n await this.redirectToGooglePlatformAuthorize();\n }\n\n private async redirectToGooglePlatformAuthorize(): Promise<void> {\n const issuer = this.resolveIssuer();\n const { clientId, redirectUri, scope } = this.resolveClientConfig();\n\n this.sessionService.setStrategy('google');\n\n const { authorizeUrl } = await initPlatformOAuthAuthorization({\n issuer,\n clientId,\n redirectUri,\n scope,\n provider: 'google',\n });\n\n window.location.assign(authorizeUrl);\n await this.waitForOAuthRedirect();\n }\n\n async signout(): Promise<void> {\n localStorage.removeItem('oauth_provider');\n await this.platformAuthRuntime.logout();\n }\n\n async refreshToken(_context: AXPSessionContext): Promise<AXPSignInResult> {\n try {\n const authData = this.loadAuthData();\n const tokenData = await this.platformAuthRuntime.refresh();\n return toPlatformOAuthSignInResult(tokenData, {\n user: tokenData.user,\n tenant: authData?.tenant ?? null,\n application: authData?.application ?? null,\n });\n } catch (error) {\n console.error('Error refreshing token', error);\n return { succeed: false };\n }\n }\n\n override async updateToken(params: { [key: string]: any }): Promise<AXPSignInResult | undefined> {\n try {\n if (params['code']) {\n return this.exchangeAuthorizationCode(params);\n }\n\n if (shouldPlatformOAuthBindSession(this.sessionService.hasSessionCredentials(), params)) {\n const { tenant, application, tenantId, applicationId } = platformOAuthSessionUpdateParams(params);\n const result = await this.platformAuthRuntime.updateSession({\n tenantId,\n applicationId,\n tenant,\n application,\n });\n return toPlatformOAuthSignInResult(result, {\n user: (params['user'] as AXPUser) ?? null,\n tenant: tenant ?? null,\n application: application ?? null,\n });\n }\n\n return this.beginAuthorizationCodeFlow(params);\n } catch (error) {\n console.error('Error in updateToken:', error);\n throw error;\n }\n }\n\n private async exchangeAuthorizationCode(params: { [key: string]: any }): Promise<AXPSignInResult> {\n const code = params['code'];\n const issuer = this.resolveIssuer();\n const { clientId, redirectUri } = this.resolveClientConfig();\n const resolvedRedirectUri = params['redirectUri'] || redirectUri;\n const resolvedClientId = params['clientId'] || clientId;\n\n const tokenData = await exchangePlatformOAuthAuthorizationCode({\n issuer,\n clientId: resolvedClientId,\n redirectUri: resolvedRedirectUri,\n code,\n });\n\n const idToken = (tokenData['id_token'] as string | undefined) ?? null;\n const payload = idToken ? JwtUtil.parseJwt(idToken) : null;\n if (!payload) {\n throw new Error('Payload not found');\n }\n\n const user = {\n id: payload['sub'] || '',\n title: payload['name'] || payload['email'] || '',\n name: payload['name'] || payload['email'] || '',\n avatar: payload['picture'] || '',\n } as AXPUser;\n\n return {\n succeed: true,\n data: {\n accessToken: (tokenData['access_token'] as string | undefined) ?? '',\n refreshToken: (tokenData['refresh_token'] as string | undefined) ?? '',\n idToken,\n expiresIn: TimeUtil.calculateExpireInDate(Number(tokenData['expires_in'] ?? 0)),\n user,\n tenant: null,\n application: null,\n },\n };\n }\n\n private async beginAuthorizationCodeFlow(params: { [key: string]: any }): Promise<undefined> {\n const issuer = this.resolveIssuer();\n const { clientId, redirectUri, scope } = this.resolveClientConfig();\n const resolvedRedirectUri = params['redirectUri'] || redirectUri;\n const resolvedScope = params['scope'] || scope;\n\n const { authorizeUrl } = await initPlatformOAuthAuthorization({\n issuer,\n clientId,\n redirectUri: resolvedRedirectUri,\n scope: resolvedScope,\n provider: 'google',\n });\n\n window.location.href = authorizeUrl;\n await this.waitForOAuthRedirect();\n\n return undefined;\n }\n\n private waitForOAuthRedirect(): Promise<void> {\n return new Promise<void>(() => {});\n }\n\n private loadAuthData(): AXPSessionData | undefined {\n return this.sessionService.getSessionData() || undefined;\n }\n}\n\n//#endregion\n","import { AXPPlatformAuthRuntimeService } from '@acorex-platform/framework-client/auth';\nimport { Injectable, inject } from '@angular/core';\n\n//#region ---- Google platform login availability ----\n\n@Injectable()\nexport class AXEGooglePlatformLoginAvailabilityService {\n private readonly platformAuthRuntime = inject(AXPPlatformAuthRuntimeService);\n private cachedEnabled: boolean | null = null;\n\n async isEnabled(): Promise<boolean> {\n if (this.cachedEnabled !== null) {\n return this.cachedEnabled;\n }\n\n try {\n const providers = await this.platformAuthRuntime.listProviders();\n this.cachedEnabled = providers.identityProviders.some((p) => p.id === 'google');\n return this.cachedEnabled;\n } catch {\n this.cachedEnabled = false;\n return false;\n }\n }\n}\n\n//#endregion\n","//#region ---- Imports ----\n\nimport { AXPSessionService } from '@acorex-platform/framework-client/auth';\nimport { AXPSettingDefinitionProvider, AXPSettingDefinitionProviderContext } from '@acorex-platform/framework-client/common';\nimport { AXPWidgetsList } from '@acorex-platform/framework-shared/core';\nimport { Injectable, inject } from '@angular/core';\nimport { AXEGoogleSettings, RootConfig } from '@acorex-platform/extension-google-client/contracts';\n\n//#endregion\n\n//#region ---- Constants ----\n\n/** Must match the settings group `name` from integration-management (`AXMIntegrationManagementSettingProvider`). */\nconst INTEGRATIONS_SETTINGS_GROUP = 'integrations';\n\nconst GOOGLE_I18N = '@extensions-google:settings.google';\n\n//#endregion\n\n//#region ---- Settings Provider ----\n\n@Injectable()\nexport class AXEGoogleSettingsProvider implements AXPSettingDefinitionProvider {\n private readonly sessionService = inject(AXPSessionService);\n\n async provide(context: AXPSettingDefinitionProviderContext): Promise<void> {\n // Only register when the edition entitles Google (same gate as Integrations provider list).\n if (!this.sessionService.isModuleEnabled(RootConfig.module.name)) {\n return;\n }\n\n if (!context.hasGroup(INTEGRATIONS_SETTINGS_GROUP)) {\n return;\n }\n\n const integrations = context.group(INTEGRATIONS_SETTINGS_GROUP);\n if (!integrations) {\n return;\n }\n\n integrations\n .addSection('google', `${GOOGLE_I18N}.section-title`, `${GOOGLE_I18N}.section-description`)\n .addSetting({\n key: 'Google:Setting:ConnectionPanel',\n title: `${GOOGLE_I18N}.connection-title`,\n scope: 'U',\n overridableAt: [],\n isInherited: false,\n widget: {\n type: AXPWidgetsList.Advanced.IntegrationConnectionsPanel,\n layout: { stacked: true },\n options: { providerId: 'google' },\n },\n description: `${GOOGLE_I18N}.connection-description`,\n })\n .addSetting({\n key: AXEGoogleSettings.GmailSyncEnabled,\n title: `${GOOGLE_I18N}.gmail-enabled-title`,\n scope: 'U',\n overridableAt: [],\n isInherited: false,\n defaultValue: false,\n widget: {\n type: AXPWidgetsList.Editors.ToggleSwitch,\n },\n description: `${GOOGLE_I18N}.gmail-enabled-description`,\n })\n .addSetting({\n key: AXEGoogleSettings.CalendarSyncEnabled,\n title: `${GOOGLE_I18N}.calendar-enabled-title`,\n scope: 'U',\n overridableAt: [],\n isInherited: false,\n defaultValue: false,\n widget: {\n type: AXPWidgetsList.Editors.ToggleSwitch,\n },\n description: `${GOOGLE_I18N}.calendar-enabled-description`,\n })\n .endSection();\n }\n}\n\n//#endregion\n","import {\n AXP_LOGO_PROVIDER,\n type AXPLogoProvider,\n type AXPLogoRequest,\n type AXPLogoView,\n} from '@acorex-platform/framework-client/core';\nimport { axpGoogleLogoKey } from './google-logo-key';\n\nconst googleLogoProvider: AXPLogoProvider = {\n key: axpGoogleLogoKey,\n resolve: async (request: AXPLogoRequest): Promise<AXPLogoView> => ({\n kind: 'component',\n load: () => import('./google-logo.component').then((module) => module.AXEGoogleLogoComponent),\n inputs: {\n appearance: request.appearance,\n size: request.size,\n },\n }),\n};\n\nexport const AXE_GOOGLE_LOGO_PROVIDER = {\n provide: AXP_LOGO_PROVIDER,\n useValue: googleLogoProvider,\n multi: true,\n} as const;\n","//#region ---- Imports ----\n\nimport { AXMIntegrationManagementModule } from '@acorex-platform/module-integration-management-client';\nimport {\n AXP_INTEGRATION_PROVIDER,\n AXP_INTEGRATION_RUNTIME_PROVIDER,\n AXP_SETTING_DEFINITION_PROVIDER,\n} from '@acorex-platform/framework-client/common';\nimport { AXPAuthModule } from '@acorex-platform/framework-client/auth';\nimport { provideCommandSetups } from '@acorex-platform/framework-client/runtime';\nimport { AXEGoogleCommandKeys } from '@acorex-platform/extension-google-client/contracts';\nimport { AXPComponentSlotRegistryService } from '@acorex-platform/framework-client/core';\nimport { AUTH_LOGIN_EXTERNAL_PROVIDERS_SLOT } from '@acorex-platform/module-auth-client';\nimport { NgModule } from '@angular/core';\nimport { AXEGoogleIntegrationProvider } from './integration/google.integration.provider';\nimport { AXEGoogleIntegrationRuntimeProvider } from './integration/google.integration-runtime.provider';\nimport { AXEGooglePlatformAuthStrategy } from './platform-auth/google-platform-auth.strategy';\nimport { AXEGooglePlatformLoginAvailabilityService } from './platform-auth/google-platform-login-availability.service';\nimport { AXEGoogleSettingsProvider } from './settings/google.settings.provider';\nimport { AXE_GOOGLE_LOGO_PROVIDER } from './brand/google-logo.provider';\n\n//#endregion\n\n//#region ---- Module ----\n\n/**\n * Google Workspace integration (Gmail, Calendar) and platform login via Google OAuth.\n * Register in the app after {@link AXMIntegrationManagementModule}.\n */\n@NgModule({\n imports: [\n AXMIntegrationManagementModule,\n AXPAuthModule.forChild({ strategies: [AXEGooglePlatformAuthStrategy] }),\n ],\n providers: [\n AXEGooglePlatformLoginAvailabilityService,\n AXE_GOOGLE_LOGO_PROVIDER,\n {\n provide: AXP_INTEGRATION_PROVIDER,\n useClass: AXEGoogleIntegrationProvider,\n multi: true,\n },\n {\n provide: AXP_INTEGRATION_RUNTIME_PROVIDER,\n useClass: AXEGoogleIntegrationRuntimeProvider,\n multi: true,\n },\n {\n provide: AXP_SETTING_DEFINITION_PROVIDER,\n useClass: AXEGoogleSettingsProvider,\n multi: true,\n },\n provideCommandSetups([\n {\n key: AXEGoogleCommandKeys.ConnectionConnect,\n command: () => import('./features/connect/connect-google.command').then((c) => c.ConnectGoogleCommand),\n },\n {\n key: AXEGoogleCommandKeys.ConnectionCompleteOAuth,\n command: () =>\n import('./features/connect/complete-google-oauth.command').then((c) => c.CompleteGoogleOAuthCommand),\n },\n ]),\n ],\n})\nexport class AXEGoogleExtensionModule {\n constructor(\n registry: AXPComponentSlotRegistryService,\n googlePlatformLogin: AXEGooglePlatformLoginAvailabilityService,\n ) {\n registry.register(AUTH_LOGIN_EXTERNAL_PROVIDERS_SLOT, {\n name: 'google-platform-login',\n priority: 10,\n loadComponent: () =>\n import('./platform-auth/google-platform-login-slot.component').then(\n (component) => component.AXEGooglePlatformLoginSlotComponent,\n ),\n condition: () => googlePlatformLogin.isEnabled(),\n });\n }\n}\n\n//#endregion\n","import type { AXPLogoAppearance } from '@acorex-platform/framework-client/core';\nimport { Component, computed, input, ChangeDetectionStrategy } from '@angular/core';\n\n//#region ---- Google brand logo (owned by Google extension) ----\n\n@Component({\n selector: 'axe-google-logo',\n host: { class: 'inline-flex items-center justify-center' },\n changeDetection: ChangeDetectionStrategy.Eager,\n template: `\n @switch (resolvedAppearance()) {\n @case ('monochrome') {\n <svg [attr.width]=\"size()\" [attr.height]=\"size()\" viewBox=\"0 0 24 24\" aria-hidden=\"true\">\n <path\n fill=\"currentColor\"\n d=\"M12 5.38c1.62 0 3.06.56 4.21 1.64l3.15-3.15C17.45 2.09 14.97 1 12 1 7.7 1 3.99 3.47 2.18 7.07l3.66 2.84c.87-2.6 3.3-4.53 6.16-4.53z\"\n />\n </svg>\n }\n @default {\n <svg [attr.width]=\"size()\" [attr.height]=\"size()\" viewBox=\"0 0 24 24\" aria-hidden=\"true\">\n <path\n fill=\"#4285F4\"\n d=\"M22.56 12.25c0-.78-.07-1.53-.2-2.25H12v4.26h5.92c-.26 1.37-1.04 2.53-2.21 3.31v2.77h3.57c2.08-1.92 3.28-4.74 3.28-8.09z\"\n />\n <path\n fill=\"#34A853\"\n d=\"M12 23c2.97 0 5.46-.98 7.28-2.66l-3.57-2.77c-.98.66-2.23 1.06-3.71 1.06-2.86 0-5.29-1.93-6.16-4.53H2.18v2.84C3.99 20.53 7.7 23 12 23z\"\n />\n <path\n fill=\"#FBBC05\"\n d=\"M5.84 14.09c-.22-.66-.35-1.36-.35-2.09s.13-1.43.35-2.09V7.07H2.18C1.43 8.55 1 10.22 1 12s.43 3.45 1.18 4.93l2.85-2.22.81-.62z\"\n />\n <path\n fill=\"#EA4335\"\n d=\"M12 5.38c1.62 0 3.06.56 4.21 1.64l3.15-3.15C17.45 2.09 14.97 1 12 1 7.7 1 3.99 3.47 2.18 7.07l3.66 2.84c.87-2.6 3.3-4.53 6.16-4.53z\"\n />\n </svg>\n }\n }\n `,\n})\nexport class AXEGoogleLogoComponent {\n appearance = input<AXPLogoAppearance>('colored');\n size = input(20);\n\n protected readonly resolvedAppearance = computed(() => {\n const value = this.appearance();\n return value === 'monochrome' ? 'monochrome' : 'colored';\n });\n}\n\n//#endregion\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i2.AXEGooglePlatformLoginAvailabilityService"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@acorex-platform/extension-google-client",
3
- "version": "0.0.33",
3
+ "version": "0.0.37",
4
4
  "sideEffects": false,
5
5
  "peerDependencies": {
6
6
  "@angular/common": "^21.0.0 || ^22.0.0",