@ama-mfe/ng-utils 14.6.0-prerelease.12 → 14.6.0-prerelease.14
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":"ama-mfe-ng-utils.mjs","sources":["../../src/connect/connect-directive.ts","../../src/messages/available-sender.ts","../../src/messages/error-sender.ts","../../src/managers/producer-manager-service.ts","../../src/managers/consumer-manager-service.ts","../../src/managers/abstract-message-consumer-service.ts","../../src/managers/utils.ts","../../src/history/history-consumer-service.ts","../../src/history/history-providers.ts","../../src/host-info/host-info.ts","../../src/host-info/host-info-pipe.ts","../../src/messages/error/base.ts","../../src/messages/user-activity.ts","../../src/utils.ts","../../src/connect/connect-providers.ts","../../src/resize/resize-consumer-service.ts","../../src/resize/scalable-directive.ts","../../src/theme/theme-helpers.ts","../../src/theme/theme-producer-service.ts","../../src/theme/apply-theme-pipe.ts","../../src/iframe-embed/sandbox.directive.ts","../../src/iframe-embed/iframe-embed.component.ts","../../src/iframe-embed/iframe-embed.template.html","../../src/navigation/navigation-consumer-service.ts","../../src/navigation/route-memorize/route-memorize-service.ts","../../src/navigation/restore-route-pipe.ts","../../src/navigation/route-memorize/route-memorize-directive.ts","../../src/navigation/routing-service.ts","../../src/navigation/navigation-exit/block-state/navigation-block.service.ts","../../src/navigation/navigation-exit/block-state/navigation-block-state-producer.service.ts","../../src/navigation/navigation-exit/block-state/navigation-block-state-consumer.service.ts","../../src/navigation/navigation-exit/navigation-request/navigation-request-manager.service.ts","../../src/navigation/navigation-exit/navigation-request/navigation-request-handler.ts","../../src/navigation/navigation-exit/navigation-request/navigation-request-consumer.service.ts","../../src/navigation/navigation-exit/navigation-request/navigation-request-module-handler.ts","../../src/navigation/navigation-exit/navigation-confirmation/strategies/browser-confirmation.strategy.ts","../../src/navigation/navigation-exit/navigation-confirmation/navigation-block-confirmation.interface.ts","../../src/navigation/navigation-exit/navigation-confirmation/navigation-block-confirmation.service.ts","../../src/navigation/navigation-exit/navigation-request/navigation-request-shell-handler.ts","../../src/navigation/navigation-exit/navigation-decision/navigation-decision-consumer.service.ts","../../src/navigation/navigation-exit/guards/navigation-block.shell-guard.ts","../../src/navigation/navigation-exit/guards/navigation-block.module-guard.ts","../../src/navigation/navigation-exit/navigation-confirmation/providers.ts","../../src/navigation/navigation-exit/index.ts","../../src/resize/resize-producer-service.ts","../../src/theme/theme-consumer-service.ts","../../src/user-activity/config.ts","../../src/user-activity/iframe-activity-tracker.service.ts","../../src/user-activity/activity-producer.service.ts","../../src/user-activity/activity-consumer.service.ts","../../src/ama-mfe-ng-utils.ts"],"sourcesContent":["import {\n MessagePeerService,\n} from '@amadeus-it-group/microfrontends-angular';\nimport {\n computed,\n Directive,\n effect,\n ElementRef,\n HostBinding,\n inject,\n input,\n SecurityContext,\n} from '@angular/core';\nimport {\n DomSanitizer,\n SafeResourceUrl,\n} from '@angular/platform-browser';\nimport {\n LoggerService,\n} from '@o3r/logger';\n\n@Directive({\n selector: 'iframe[connect]',\n standalone: true\n})\nexport class ConnectDirective {\n /**\n * The connection ID required for the message peer service.\n */\n public connect = input.required<string>();\n\n /**\n * The sanitized source URL for the iframe.\n */\n public src = input<SafeResourceUrl>();\n\n /**\n * Binds the `src` attribute of the iframe to the sanitized source URL.\n */\n @HostBinding('src')\n public get srcAttr() {\n return this.src();\n }\n\n private readonly messageService = inject(MessagePeerService);\n private readonly domSanitizer = inject(DomSanitizer);\n private readonly iframeElement = inject<ElementRef<HTMLIFrameElement>>(ElementRef).nativeElement;\n\n private readonly clientOrigin = computed(() => {\n const src = this.src();\n const srcString = src && this.domSanitizer.sanitize(SecurityContext.RESOURCE_URL, src);\n return srcString && new URL(srcString).origin;\n });\n\n constructor() {\n const logger = inject(LoggerService);\n\n // When the origin or connection ID change - reconnect the message service\n effect((onCleanup) => {\n let stopHandshakeListening = () => { /* no op */ };\n\n const origin = this.clientOrigin();\n const id = this.connect();\n const source = this.iframeElement.contentWindow;\n\n // listen for handshakes only if we know the origin and were given a connection ID\n if (origin && source && id) {\n try {\n stopHandshakeListening = this.messageService.listen({ id, source, origin });\n } catch (e) {\n logger.error(`Failed to start listening for (connection ID: ${id})`, e);\n }\n }\n\n // stop listening for handshakes and disconnect previous connection when:\n // - origin/connection ID change\n // - the directive is destroyed\n onCleanup(() => {\n stopHandshakeListening();\n this.messageService.disconnect();\n });\n });\n }\n}\n","import type {\n DeclareMessages,\n} from '@amadeus-it-group/microfrontends';\nimport type {\n BasicMessageConsumer,\n} from '../managers/interfaces';\n\n/**\n * Gets the available consumers and formats them into a {@link DeclareMessages} object.\n * @param consumers - The list of registered message consumers.\n * @returns The formatted DeclareMessages object.\n */\nexport const getAvailableConsumers = (consumers: BasicMessageConsumer[]) => {\n return {\n type: 'declare_messages',\n version: '1.0',\n messages: consumers.flatMap(({ type, supportedVersions }) => Object.keys(supportedVersions).map((version) => ({ type, version })))\n } satisfies DeclareMessages;\n};\n","import type {\n VersionedMessage,\n} from '@amadeus-it-group/microfrontends';\nimport type {\n MessagePeerServiceType,\n} from '@amadeus-it-group/microfrontends-angular';\nimport type {\n ERROR_MESSAGE_TYPE,\n ErrorContent,\n ErrorMessageV1_0,\n} from './error/index';\n\n/**\n * Helper function to send an error message by the given endpoint (peer)\n * @param peer The endpoint sending the message\n * @param content the content of the error message to be sent\n */\nexport const sendError = (peer: MessagePeerServiceType<any>, content: ErrorContent) => {\n return peer.send({\n type: 'error',\n version: '1.0',\n ...content\n } satisfies ErrorMessageV1_0);\n};\n\n/**\n * Check if the given message is of type error and the error reson is present too\n * @param message the message to be checked\n */\n// eslint-disable-next-line @stylistic/max-len -- constant definition\nexport const isErrorMessage = (message: any): message is VersionedMessage & { type: typeof ERROR_MESSAGE_TYPE } & ErrorContent => (message && typeof message === 'object' && message.type === 'error' && !!message.reason);\n","import type {\n VersionedMessage,\n} from '@amadeus-it-group/microfrontends';\nimport {\n Injectable,\n} from '@angular/core';\nimport type {\n ErrorContent,\n} from '../messages/index';\nimport type {\n MessageProducer,\n} from './interfaces';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class ProducerManagerService {\n private readonly registeredProducers = new Set<MessageProducer>();\n\n /** Get the list of registered producers of messages. The list will contain unique elements */\n public get producers() {\n return [...this.registeredProducers];\n }\n\n /**\n * Register a producer of a message\n * @param producer The instance of the message producer\n */\n public register(producer: MessageProducer) {\n this.registeredProducers.add((producer));\n }\n\n /**\n * Unregister a producer of a message\n * @param producer The instance of the message producer\n */\n public unregister(producer: MessageProducer) {\n this.registeredProducers.delete((producer));\n }\n\n /**\n * Handles the received error message for the given message type by invoking the appropriate producer handlers.\n * @template T - The type of the message, extending from Message.\n * @param message - The error message to handle.\n * @returns - A promise that resolves to true if the error was handled by at least one handler, false otherwise.\n */\n public async dispatchError<T extends VersionedMessage = VersionedMessage>(message: ErrorContent<T>) {\n const handlers = this.producers\n .filter(({ types }) => (Array.isArray(types) ? types : [types]).includes(message.source.type));\n\n const handlersPresent = handlers.length > 0;\n if (handlersPresent) {\n await Promise.all(\n // eslint-disable-next-line @typescript-eslint/await-thenable -- `handleError` can return void or Promise<void>\n handlers.map((handler) => handler.handleError(message))\n );\n }\n return handlersPresent;\n }\n}\n","import {\n RoutedMessage,\n VersionedMessage,\n} from '@amadeus-it-group/microfrontends';\nimport {\n MessagePeerService,\n} from '@amadeus-it-group/microfrontends-angular';\nimport {\n effect,\n inject,\n Injectable,\n signal,\n} from '@angular/core';\nimport {\n takeUntilDestroyed,\n} from '@angular/core/rxjs-interop';\nimport {\n LoggerService,\n} from '@o3r/logger';\nimport {\n getAvailableConsumers,\n} from '../messages/available-sender';\nimport {\n isErrorMessage,\n sendError,\n} from '../messages/error-sender';\nimport type {\n BasicMessageConsumer,\n} from './interfaces';\nimport {\n ProducerManagerService,\n} from './producer-manager-service';\n\nconst VERSION_MATCH = /^(\\d+)\\.(\\d+)$/;\n\ninterface ParsedVersion {\n major: number;\n minor: number;\n raw: string;\n}\n\n/**\n * Parses a \"major.minor\" version string. Returns undefined if the string is malformed.\n * @param version\n */\nconst parseVersion = (version: string): ParsedVersion | undefined => {\n const match = VERSION_MATCH.exec(version);\n if (!match) {\n return undefined;\n }\n const [major, minor] = match.slice(1).map(Number);\n return { major, minor, raw: version };\n};\n\n@Injectable({\n providedIn: 'root'\n})\nexport class ConsumerManagerService {\n private readonly messageService = inject(MessagePeerService);\n private readonly producerManagerService = inject(ProducerManagerService);\n private readonly registeredConsumers = signal<BasicMessageConsumer[]>([]);\n private readonly logger = inject(LoggerService);\n\n /** The list of registered consumers */\n public readonly consumers = this.registeredConsumers.asReadonly();\n\n constructor() {\n this.messageService.messages$.pipe(takeUntilDestroyed()).subscribe((message) => this.consumeMessage(message));\n\n // Each time a consumer is registered/unregistered update the list of registered messages.\n effect(() => {\n const declareMessages = getAvailableConsumers(this.consumers());\n\n // registering consumed messages locally for validation\n for (const message of declareMessages.messages) {\n this.messageService.registerMessage(message);\n }\n });\n }\n\n /**\n * Consume a received message\n * @param message the received message body\n */\n private async consumeMessage(message: RoutedMessage<VersionedMessage>) {\n if (isErrorMessage(message.payload)) {\n const isHandled = await this.producerManagerService.dispatchError(message.payload);\n if (!isHandled) {\n this.logger.warn('Error message not handled', message);\n }\n return;\n }\n\n return this.consumeAdditionalMessage(message);\n }\n\n /**\n * Call the registered message callback(s) to consume the given message\n * Handle error messages of internal communication protocol messages\n * @param message message to consume\n */\n private async consumeAdditionalMessage(message: RoutedMessage<VersionedMessage>) {\n if (!message.payload) {\n this.logger.warn('Cannot consume a messages with undefined payload.');\n return;\n }\n\n const consumers = this.consumers();\n const typeMatchingConsumers = consumers\n .filter((consumer) => consumer.type === message.payload.type);\n\n if (typeMatchingConsumers.length === 0) {\n this.logger.warn(`No consumer found for message type: ${message.payload.type}`);\n return sendError(this.messageService, { reason: 'unknown_type', source: message.payload });\n }\n\n // Semver-compatible dispatch: for an incoming v{major}.{minor}, pick each consumer's highest\n // declared v{major}.{n} where n <= minor.\n // Major versions are isolated: no cross-major fallback in either direction. An incoming v2.x\n // will never fall back to a v1.x handler (breaking changes), and a consumer that declares\n // only v2.x will not match an incoming v1.x (the consumer is ahead of the producer). Both\n // result in a version_mismatch error.\n const messageVersion = parseVersion(message.payload.version);\n const resolvedConsumers = messageVersion\n ? typeMatchingConsumers\n .map((consumer) => {\n const fallbackVersion = Object.keys(consumer.supportedVersions)\n .map((version) => parseVersion(version))\n .filter((v): v is ParsedVersion =>\n !!v && v.major === messageVersion.major && v.minor <= messageVersion.minor)\n .toSorted((a, b) => b.minor - a.minor)\n .at(0);\n return fallbackVersion && { consumer, version: fallbackVersion.raw };\n })\n .filter((entry): entry is { consumer: typeof typeMatchingConsumers[number]; version: string } => !!entry)\n : [];\n\n if (resolvedConsumers.length === 0) {\n this.logger.warn(`No consumer found for message version: ${message.payload.version}`);\n return sendError(this.messageService, { reason: 'version_mismatch', source: message.payload });\n }\n\n await Promise.all(\n resolvedConsumers\n .map(async ({ consumer, version }) => {\n try {\n await consumer.supportedVersions[version](message);\n } catch (error) {\n this.logger.error('Error while consuming message', error);\n sendError(this.messageService, { reason: 'internal_error', source: message.payload });\n }\n })\n );\n }\n\n /**\n * Register a message consumer\n * @param consumer an instance of message consumer\n */\n public register(consumer: BasicMessageConsumer) {\n this.registeredConsumers.update((consumers) => {\n return [...new Set(consumers).add(consumer)];\n });\n }\n\n /**\n * Unregister a message consumer\n * @param consumer an instance of message consumer\n */\n public unregister(consumer: BasicMessageConsumer) {\n this.registeredConsumers.update((consumers) => {\n return consumers.filter((c) => c !== consumer);\n });\n }\n}\n","import {\n VersionedMessage,\n} from '@amadeus-it-group/microfrontends';\nimport {\n DestroyRef,\n inject,\n} from '@angular/core';\nimport {\n LoggerService,\n} from '@o3r/logger';\nimport {\n ConsumerManagerService,\n} from './consumer-manager-service';\nimport type {\n MessageConsumer,\n} from './interfaces';\n\n/**\n * An abstract base class for message consumers that provides common functionality for registering and unregistering with the ConsumerManagerService.\n *\n * This class implements the MessageConsumer interface and provides a default implementation for the start and stop methods.\n * It also handles the automatic registration and unregistration of the consumer with the ConsumerManagerService when the service is created and destroyed.\n *\n * To use this class, simply extend it and implement the required properties (type and supportedVersions) and any additional logic needed to consume messages.\n */\nexport abstract class AbstractMessageConsumer<T extends VersionedMessage = VersionedMessage> implements MessageConsumer<T> {\n /** The service used to register the consumer */\n protected readonly consumerManagerService = inject(ConsumerManagerService);\n /** The reference used to handle the destruction of the consumer */\n protected readonly destroyRef = inject(DestroyRef);\n /** Logger shared with subclasses. */\n protected readonly logger = inject(LoggerService);\n\n private unregisterCallback?: (() => void);\n\n /** @inheritdoc */\n public abstract readonly type: MessageConsumer<T>['type'];\n\n /** @inheritdoc */\n public abstract readonly supportedVersions: MessageConsumer<T>['supportedVersions'];\n\n /** @inheritdoc */\n public start(): void {\n this.consumerManagerService.register(this);\n this.unregisterCallback?.();\n this.unregisterCallback = this.destroyRef.onDestroy(() => this.stop());\n }\n\n /** @inheritdoc */\n public stop(): void {\n this.consumerManagerService.unregister(this);\n this.unregisterCallback?.();\n this.unregisterCallback = undefined;\n }\n}\n","import {\n DestroyRef,\n inject,\n} from '@angular/core';\nimport {\n ConsumerManagerService,\n} from './consumer-manager-service';\nimport type {\n MessageConsumer,\n MessageProducer,\n} from './interfaces';\nimport {\n ProducerManagerService,\n} from './producer-manager-service';\n\n/**\n * Method to call in the constructor of a producer\n * @note should be used in injection context\n * @param producer\n */\nexport const registerProducer = (producer: MessageProducer) => {\n const producerManagerService = inject(ProducerManagerService);\n producerManagerService.register(producer);\n\n inject(DestroyRef).onDestroy(() => {\n producerManagerService.unregister(producer);\n });\n};\n\n/**\n * Method to call in the constructor of a consumer\n * @note should be used in injection context\n * @param consumer\n */\nexport const registerConsumer = (consumer: MessageConsumer) => {\n const consumerManagerService = inject(ConsumerManagerService);\n consumerManagerService.register(consumer);\n\n inject(DestroyRef).onDestroy(() => {\n consumerManagerService.unregister(consumer);\n });\n};\n","import type {\n HistoryMessage,\n HistoryV1_0,\n} from '@ama-mfe/messages';\nimport {\n HISTORY_MESSAGE_TYPE,\n} from '@ama-mfe/messages';\nimport type {\n RoutedMessage,\n} from '@amadeus-it-group/microfrontends';\nimport {\n Injectable,\n} from '@angular/core';\nimport {\n AbstractMessageConsumer,\n} from '../managers/index';\n\n/**\n * A service that handles history messages.\n *\n * This service listens for history messages and navigates accordingly.\n */\n@Injectable({\n providedIn: 'root'\n})\nexport class HistoryConsumerService extends AbstractMessageConsumer<HistoryMessage> {\n /**\n * The type of messages this service handles.\n */\n public readonly type = HISTORY_MESSAGE_TYPE;\n\n /**\n * @inheritdoc\n */\n public readonly supportedVersions = {\n /**\n * Use the message payload to navigate in the history\n * @param message message to consume\n */\n '1.0': (message: RoutedMessage<HistoryV1_0>) => {\n history.go(message.payload.delta);\n }\n };\n\n constructor() {\n super();\n /**\n * Auto-starts the consumer on creation.\n * @deprecated The constructor auto-starts the consumer for backwards compatibility. It will be removed in v15;\n */\n this.start();\n }\n}\n","import {\n HistoryMessage,\n HistoryV1_0,\n} from '@ama-mfe/messages';\nimport {\n MessagePeerService,\n} from '@amadeus-it-group/microfrontends-angular';\nimport {\n inject,\n provideAppInitializer,\n} from '@angular/core';\n\n/**\n * Provides necessary overrides to make the module navigation in history work in an embedded context :\n * - Prevent pushing states to history, replace state instead\n * - Handle history navigation via History messages to let the host manage the states\n */\nexport function provideHistoryOverrides() {\n return provideAppInitializer(() => {\n const messageService = inject(MessagePeerService<HistoryMessage>);\n const navigate = (delta: number) => {\n messageService.send({\n type: 'history',\n version: '1.0',\n delta\n } satisfies HistoryV1_0);\n };\n Object.defineProperty(history, 'pushState', {\n value: (data: any, unused: string, url?: string | URL | null) => {\n history.replaceState(data, unused, url);\n },\n writable: false,\n configurable: false\n });\n Object.defineProperty(history, 'back', {\n value: () => navigate(-1),\n writable: false,\n configurable: false\n });\n Object.defineProperty(history, 'forward', {\n value: () => navigate(1),\n writable: false,\n configurable: false\n });\n Object.defineProperty(history, 'go', {\n value: (delta: number) => navigate(delta),\n writable: false,\n configurable: false\n });\n });\n}\n","const SESSION_STORAGE_KEY = 'ama-mfe-host-info';\n\n/**\n * Search parameter to add to the URL when embedding an iframe containing the URL of the host.\n * This is needed to support Firefox (on which {@link https://developer.mozilla.org/docs/Web/API/Location/ancestorOrigins | location.ancestorOrigins} is not currently supported)\n * in case of redirection inside the iframe.\n */\nexport const MFE_HOST_URL_PARAM = 'ama-mfe-host-url';\n\n/**\n * Search parameter to add to the URL to let a module know on which application it's embedded\n */\nexport const MFE_HOST_APPLICATION_ID_PARAM = 'ama-mfe-host-app-id';\n\n/**\n * Search parameter to add to the URL to identify the application in the network of peers in the communication protocol\n */\nexport const MFE_MODULE_APPLICATION_ID_PARAM = 'ama-mfe-module-app-id';\n\n/** The list of query parameters which can be set by the host */\nexport const hostQueryParams = [MFE_HOST_URL_PARAM, MFE_HOST_APPLICATION_ID_PARAM, MFE_MODULE_APPLICATION_ID_PARAM];\n\n/**\n * Information set up at host level to use in embedded context\n */\nexport interface MFEHostInformation {\n /**\n * URL of the host application\n */\n hostURL?: string;\n /**\n * ID of the host application\n */\n hostApplicationId?: string;\n\n /**\n * ID of the module to embed defined at host level\n */\n moduleApplicationId?: string;\n}\n\n/**\n * Gather the host information from the url parameters\n * The host url will use the first found among:\n * - look for the search parameter {@link MFE_HOST_URL_PARAM} in the URL of the iframe\n * - use the first item in `location.ancestorOrigins` (currently not supported on Firefox)\n * - use `document.referrer` (will only work if called before any redirection in the iframe)\n * The host application ID is taken from the search parameter {@link MFE_HOST_APPLICATION_ID_PARAM} in the URL of the iframe\n * The module application ID is taken from the search parameter {@link MFE_APPLICATION_ID_PARAM} in the URL of the iframe\n * @param locationParam - A {@link Location} object with information about the current location of the document. Defaults to global {@link location}.\n */\nexport function getHostInfo(locationParam: Location = location): MFEHostInformation {\n const searchParams = new URLSearchParams(locationParam.search);\n const storedHostInfo = JSON.parse(sessionStorage.getItem(SESSION_STORAGE_KEY) || '{}') as MFEHostInformation;\n return {\n hostURL: searchParams.get(MFE_HOST_URL_PARAM) || storedHostInfo.hostURL || locationParam.ancestorOrigins?.[0] || document.referrer,\n hostApplicationId: searchParams.get(MFE_HOST_APPLICATION_ID_PARAM) || storedHostInfo.hostApplicationId,\n moduleApplicationId: searchParams.get(MFE_MODULE_APPLICATION_ID_PARAM) || storedHostInfo.moduleApplicationId\n };\n}\n\n/**\n * Gather the host information from the url parameters and handle the persistence in session storage.\n */\nexport function persistHostInfo() {\n const hostInfo = getHostInfo();\n sessionStorage.setItem(SESSION_STORAGE_KEY, JSON.stringify(hostInfo));\n}\n","import {\n inject,\n Pipe,\n PipeTransform,\n SecurityContext,\n} from '@angular/core';\nimport {\n DomSanitizer,\n type SafeResourceUrl,\n} from '@angular/platform-browser';\nimport {\n MFE_HOST_APPLICATION_ID_PARAM,\n MFE_HOST_URL_PARAM,\n MFE_MODULE_APPLICATION_ID_PARAM,\n} from './host-info';\n\n/**\n * A pipe that adds the host information in the URL of an iframe,\n */\n@Pipe({\n name: 'hostInfo'\n})\nexport class HostInfoPipe implements PipeTransform {\n private readonly domSanitizer = inject(DomSanitizer);\n\n /**\n * Transforms the given URL or SafeResourceUrl by appending query parameters.\n * @param url - The URL or SafeResourceUrl to be transformed.\n * @param options - hostId and moduleId\n * @returns - The transformed SafeResourceUrl or undefined if the input URL is invalid.\n */\n public transform(url: string, options: { hostId: string; moduleId?: string }): string;\n public transform(url: SafeResourceUrl, options: { hostId: string; moduleId?: string }): SafeResourceUrl;\n public transform(url: undefined, options: { hostId: string; moduleId?: string }): undefined;\n public transform(url: string | SafeResourceUrl | undefined, options: { hostId: string; moduleId?: string }): string | SafeResourceUrl | undefined {\n const urlString = typeof url === 'string'\n ? url\n : this.domSanitizer.sanitize(SecurityContext.RESOURCE_URL, url || null);\n\n if (!url) {\n return undefined;\n }\n\n if (urlString) {\n const moduleUrl = new URL(urlString);\n moduleUrl.searchParams.set(MFE_HOST_URL_PARAM, window.location.origin);\n moduleUrl.searchParams.set(MFE_HOST_APPLICATION_ID_PARAM, options.hostId);\n if (options.moduleId) {\n moduleUrl.searchParams.set(MFE_MODULE_APPLICATION_ID_PARAM, options.moduleId);\n }\n\n const moduleUrlStringyfied = moduleUrl.toString();\n return typeof url === 'string' ? moduleUrlStringyfied : this.domSanitizer.bypassSecurityTrustResourceUrl(moduleUrlStringyfied);\n }\n }\n}\n","import type {\n VersionedMessage,\n} from '@amadeus-it-group/microfrontends';\n\n/** the error message type */\nexport const ERROR_MESSAGE_TYPE = 'error';\n\n/**\n * The possible reasons for an error.\n */\nexport type ErrorReason = 'unknown_type' | 'version_mismatch' | 'internal_error';\n\n/**\n * The content of an error message.\n * @template S - The type of the source message.\n */\nexport interface ErrorContent<S extends VersionedMessage = VersionedMessage> {\n /** The reason for the error */\n reason: ErrorReason;\n /** The source message that caused the error */\n source: S;\n}\n","import {\n USER_ACTIVITY_MESSAGE_TYPE,\n type UserActivityMessage,\n} from '@ama-mfe/messages';\n\n/**\n * Type guard to check if a message is a user activity message\n * @param message The message to check\n */\nexport function isUserActivityMessage(message: unknown): message is UserActivityMessage {\n return (\n typeof message === 'object'\n && message !== null\n && 'type' in message\n && message.type === USER_ACTIVITY_MESSAGE_TYPE\n );\n}\n","import type {\n Message,\n PeerConnectionOptions,\n} from '@amadeus-it-group/microfrontends';\nimport {\n getHostInfo,\n} from './host-info';\nimport {\n ERROR_MESSAGE_TYPE,\n} from './messages';\n\n/**\n * A constant array of known message types and their versions.\n */\nexport const KNOWN_MESSAGES = [\n {\n type: ERROR_MESSAGE_TYPE,\n version: '1.0'\n }\n] as const satisfies Message[];\n\n/**\n * Returns the default options for starting a client endpoint peer connection.\n * As `origin`, it will take the hostURL from {@link getHostInfo} and the `window` will be the parent window.\n */\nexport function getDefaultClientEndpointStartOptions(): PeerConnectionOptions {\n const hostInfo = getHostInfo();\n if (hostInfo.hostURL) {\n return {\n origin: new URL(hostInfo.hostURL).origin,\n window: window.parent\n };\n }\n return {};\n}\n\n/**\n * Return `true` if embedded inside an iframe, `false` otherwise\n * @param windowParam - A {@link window} object with information about the current window of the document. Defaults to global {@link window}.\n */\nexport function isEmbedded(windowParam: Window = window) {\n return windowParam.top !== windowParam.self;\n}\n\n/**\n * Generate a string id suitable for correlating asynchronous request/reply messages across the micro-frontend bus.\n * Uses `crypto.randomUUID` when the runtime supports it, otherwise falls back to a timestamp + random suffix.\n * @param prefix Optional prefix used by the fallback path to make ids easier to identify in logs (ignored when `crypto.randomUUID` is available).\n */\nexport function generateCorrelationId(prefix = 'corr'): string {\n if (typeof crypto !== 'undefined' && typeof crypto.randomUUID === 'function') {\n return crypto.randomUUID();\n }\n return `${prefix}-${Date.now()}-${Math.random().toString(36).slice(2, 10)}`;\n}\n","import {\n MESSAGE_PEER_CONFIG,\n MESSAGE_PEER_CONNECT_OPTIONS,\n MessagePeerConfig,\n MessagePeerService,\n} from '@amadeus-it-group/microfrontends-angular';\nimport {\n makeEnvironmentProviders,\n} from '@angular/core';\nimport {\n type Logger,\n} from '@o3r/logger';\nimport {\n provideHistoryOverrides,\n} from '../history';\nimport {\n getHostInfo,\n persistHostInfo,\n} from '../host-info';\nimport {\n getDefaultClientEndpointStartOptions,\n isEmbedded,\n KNOWN_MESSAGES,\n} from '../utils';\nimport {\n ConnectionConfig,\n ConnectionService,\n} from './connect-resources';\n\n/** Options to configure the connection inside the communication protocol */\nexport interface ConnectionConfigOptions extends Omit<ConnectionConfig, 'id'> {\n /** @inheritdoc */\n id?: string;\n /** Logger used to gather information */\n logger?: Logger;\n}\n\n/**\n * Provide the communication protocol connection configuration\n * @param connectionConfigOptions The identifier of the application in the communication protocol ecosystem plus the types of messages able to exchange and a logger object\n */\nexport function provideConnection(connectionConfigOptions?: ConnectionConfigOptions) {\n persistHostInfo();\n const connectionId = (isEmbedded() && getHostInfo().moduleApplicationId) || connectionConfigOptions?.id;\n if (!connectionId) {\n (connectionConfigOptions?.logger || console).error('An id (moduleId) needs to be provided for the application in order to establish a connection inside the communication protocol');\n return makeEnvironmentProviders([]);\n }\n const config: MessagePeerConfig = {\n id: connectionId,\n messageCheckStrategy: 'version',\n knownMessages: [...KNOWN_MESSAGES, ...(connectionConfigOptions?.knownMessages || [])]\n };\n return makeEnvironmentProviders([\n {\n provide: MESSAGE_PEER_CONFIG, useValue: config\n },\n {\n provide: MESSAGE_PEER_CONNECT_OPTIONS, useValue: getDefaultClientEndpointStartOptions()\n },\n {\n // in the case of the ConnectionService will extend the base service 'useExisting' should be used\n provide: MessagePeerService, useClass: ConnectionService, deps: [MESSAGE_PEER_CONFIG]\n },\n ...isEmbedded() ? [provideHistoryOverrides()] : []\n ]);\n}\n","import type {\n ResizeMessage,\n ResizeV1_0,\n} from '@ama-mfe/messages';\nimport {\n RESIZE_MESSAGE_TYPE,\n} from '@ama-mfe/messages';\nimport type {\n RoutedMessage,\n} from '@amadeus-it-group/microfrontends';\nimport {\n Injectable,\n signal,\n} from '@angular/core';\nimport {\n AbstractMessageConsumer,\n} from '../managers/index';\n\n/**\n * This service listens for resize messages and updates the height of elements based on the received messages.\n */\n@Injectable({\n providedIn: 'root'\n})\nexport class ResizeConsumerService extends AbstractMessageConsumer<ResizeMessage> {\n private readonly newHeight = signal<{ height: number; channelId: string } | undefined>(undefined);\n\n /**\n * A readonly signal that provides the new height information from the channel.\n */\n public readonly newHeightFromChannel = this.newHeight.asReadonly();\n\n /**\n * The type of messages this service handles ('resize').\n */\n public readonly type = RESIZE_MESSAGE_TYPE;\n\n /**\n * The supported versions of resize messages and their handlers.\n */\n public supportedVersions = {\n /**\n * Use the message paylod to compute a new height and emit it via the public signal\n * @param message message to consume\n */\n '1.0': (message: RoutedMessage<ResizeV1_0>) => this.newHeight.set({ height: message.payload.height, channelId: message.from })\n };\n\n constructor() {\n super();\n /**\n * Auto-starts the consumer on creation.\n * @deprecated The constructor auto-starts the consumer for backwards compatibility. It will be removed in v15;\n */\n this.start();\n }\n}\n","import {\n afterNextRender,\n computed,\n DestroyRef,\n Directive,\n effect,\n ElementRef,\n inject,\n input,\n Renderer2,\n signal,\n} from '@angular/core';\nimport {\n takeUntilDestroyed,\n} from '@angular/core/rxjs-interop';\nimport {\n fromEvent,\n throttleTime,\n} from 'rxjs';\nimport {\n ResizeConsumerService,\n} from './resize-consumer-service';\n\n/**\n * A directive that adjusts the min-height of an element based on resize messages from a specified channel.\n *\n * This directive observes both resize messages from embedded modules and layout changes (window resize,\n * container resize via `ResizeObserver`) to dynamically set the element's min-height. This ensures:\n * - No blank space when the window or container grows (min-height fills available space)\n * - No double scrollbar when the window shrinks (element height adapts to available space)\n *\n * The available height is calculated by:\n * 1. Finding the nearest scrollable parent container and using its `clientHeight`\n * 2. Falling back to viewport calculation: `window.innerHeight - element's top position`\n *\n * The element's min-height is updated whenever:\n * - A resize message is received from the matching channel (using `scalable` or `connect` input as channel ID)\n * - The window is resized\n * - The parent container's size changes (detected via `ResizeObserver`)\n */\n@Directive({\n selector: '[scalable]',\n standalone: true\n})\nexport class ScalableDirective {\n /**\n * The connection ID for the element, used as channel id backup\n */\n public connect = input<string>();\n\n /**\n * The channel id\n */\n public scalable = input<string>();\n\n private readonly resizeHandler = inject(ResizeConsumerService);\n private readonly destroyRef = inject(DestroyRef);\n private readonly elem = inject<ElementRef<HTMLElement>>(ElementRef);\n private readonly renderer = inject(Renderer2);\n\n /** Signal holding the current available container height */\n private readonly availableHeight = signal<number | undefined>(undefined);\n\n /** Tracks the last applied min-height to avoid redundant style updates */\n private lastAppliedMinHeight: number | undefined;\n\n /** ResizeObserver for watching parent container size changes */\n private resizeObserver?: ResizeObserver;\n\n /** Cached container element */\n private container: HTMLElement | null = null;\n\n /**\n * This signal checks if the current channel requesting the resize matches the channel ID from the resize handler.\n * If they match, it returns the new height information; otherwise, it returns undefined.\n */\n private readonly newHeightFromChannel = computed(() => {\n const channelAskingResize = this.scalable() || this.connect();\n const newHeightFromChannel = this.resizeHandler.newHeightFromChannel();\n if (channelAskingResize && newHeightFromChannel?.channelId === channelAskingResize) {\n return newHeightFromChannel;\n }\n return undefined;\n });\n\n constructor() {\n this.resizeHandler.start();\n\n // Start height observer after layout is complete (read phase ensures styles are applied)\n afterNextRender({\n read: () => this.startHeightObserver()\n });\n\n // Apply height from module's resize message\n effect(() => this.applyMinHeight(this.newHeightFromChannel()?.height));\n\n // Apply height from viewport when window/layout changes\n effect(() => this.applyMinHeight(this.availableHeight()));\n\n // Cleanup ResizeObserver on destroy\n this.destroyRef.onDestroy(() => {\n this.resizeObserver?.disconnect();\n });\n }\n\n /**\n * Calculate the available height from the scrollable container.\n */\n private calculateAvailableHeight(): number | undefined {\n if (this.container) {\n return this.container.clientHeight || undefined;\n }\n\n // Fallback: use viewport\n const rect = this.elem.nativeElement.getBoundingClientRect();\n const availableHeight = window.innerHeight - rect.top;\n return availableHeight > 0 ? availableHeight : undefined;\n }\n\n /**\n * Find the nearest scrollable parent element.\n * @param element\n */\n private findScrollableParent(element: HTMLElement): HTMLElement | null {\n let parent = element.parentElement;\n while (parent) {\n const style = window.getComputedStyle(parent);\n const { overflowY, overflow } = style;\n if (overflowY === 'auto' || overflowY === 'scroll' || overflow === 'auto' || overflow === 'scroll') {\n return parent;\n }\n parent = parent.parentElement;\n }\n return null;\n }\n\n /**\n * Start observing size changes.\n */\n private startHeightObserver(): void {\n // Find and cache the scrollable container\n this.container = this.findScrollableParent(this.elem.nativeElement);\n this.observeWindowResize();\n\n this.resizeObserver = new ResizeObserver(() => this.updateAvailableHeight());\n this.resizeObserver.observe(this.container || document.body);\n\n this.updateAvailableHeight();\n }\n\n /**\n * Subscribe to window resize events and update the available height.\n */\n private observeWindowResize(): void {\n fromEvent(window, 'resize').pipe(\n throttleTime(16),\n takeUntilDestroyed(this.destroyRef)\n ).subscribe(() => {\n this.updateAvailableHeight();\n });\n }\n\n /**\n * Update the available height signal with the current container height.\n */\n private updateAvailableHeight(): void {\n const height = this.calculateAvailableHeight();\n if (height && height !== this.availableHeight()) {\n this.availableHeight.set(height);\n }\n }\n\n /**\n * Apply min-height style only if defined and changed.\n * @param height\n */\n private applyMinHeight(height: number | undefined): void {\n if (height && height !== this.lastAppliedMinHeight) {\n this.lastAppliedMinHeight = height;\n this.renderer.setStyle(this.elem.nativeElement, 'min-height', `${height}px`);\n }\n }\n}\n","import {\n type Logger,\n} from '@o3r/logger';\nimport {\n getHostInfo,\n} from '../host-info';\n\n/** Default suffix for an url containing a theme css file */\nexport const THEME_URL_SUFFIX = '-theme.css';\n/** Default name for the query parameter containing the theme name */\nexport const THEME_QUERY_PARAM_NAME = 'theme';\n\n/** Options and context for Style helpers */\nexport interface StyleHelperOptions {\n /**\n * Logger to reporter the logs\n */\n logger?: Logger;\n}\n\n/**\n * Fetches a CSS document and returns the content as a string.\n * @param cssPath - The path to download the CSS.\n * @param options Options and context for Style helpers\n * @returns The content of the CSS document as a string, empty string if the fetch fails.\n */\nexport async function getStyle(cssPath: string, options?: StyleHelperOptions): Promise<string> {\n try {\n const myRequest = new Request(cssPath);\n const response = await fetch(myRequest);\n const cssText = response.ok ? await response.text() : '';\n return cssText;\n } catch (error) {\n options?.logger?.warn(`Failed to download style from: ${cssPath} with error: ${error?.toString()}`);\n }\n return '';\n}\n\n/**\n * Applies the given CSS theme as a stylesheet.\n * @param themeValue - CSS as text containing a theme definition.\n * @param cleanPrevious - Whether to remove previously applied stylesheets if no themeValue provided. Default is true.\n */\nexport function applyTheme(themeValue?: string, cleanPrevious = true): void {\n if (themeValue !== undefined) {\n const sheet = new CSSStyleSheet();\n sheet.replaceSync(themeValue);\n document.adoptedStyleSheets = cleanPrevious ? [sheet] : [...document.adoptedStyleSheets, sheet];\n } else if (cleanPrevious) { // remove the styles if the theme value comes undefined or empty string\n document.adoptedStyleSheets = [];\n }\n}\n\n/**\n * Download the application additional theme\n * @param theme Name of the theme to download from the current application\n * @param options Options and context for Style helpers\n */\nexport function downloadApplicationThemeCss(theme: string, options?: StyleHelperOptions) {\n const cssHref = `${theme.endsWith('.css') ? theme : theme + THEME_URL_SUFFIX}`;\n return getStyle(cssHref, options);\n}\n\n/**\n * Applies the initial theme based on the URL query parameters.\n *\n * This function fetches the CSS theme specified in the URL query parameters and applies it as a stylesheet.\n * If a referrer is present, it also attempts to fetch and apply the theme from the referrer's URL.\n * @param options Options and context for Style helpers\n */\nexport async function applyInitialTheme(options?: StyleHelperOptions): Promise<PromiseSettledResult<void>[] | undefined> {\n const searchParams = new URLSearchParams(window.location.search);\n const theme = searchParams.get(THEME_QUERY_PARAM_NAME);\n document.adoptedStyleSheets = [];\n if (theme) {\n const themeRequest: Promise<void>[] = [\n downloadApplicationThemeCss(theme, options).then((styleToApply) => applyTheme(styleToApply, false))\n ];\n const hostInfo = getHostInfo();\n if (hostInfo.hostURL) {\n const url = new URL(hostInfo.hostURL);\n url.pathname += `${url.pathname.endsWith('/') ? '' : '/'}${theme}`;\n themeRequest.unshift(getStyle(url.toString(), options).then((styleToApply) => applyTheme(styleToApply, false)));\n }\n\n return Promise.allSettled(themeRequest);\n }\n return undefined;\n}\n","import type {\n ThemeMessage,\n ThemeV1_0,\n} from '@ama-mfe/messages';\nimport {\n THEME_MESSAGE_TYPE,\n ThemeStructure,\n} from '@ama-mfe/messages';\nimport {\n MessagePeerService,\n} from '@amadeus-it-group/microfrontends-angular';\nimport {\n effect,\n inject,\n Injectable,\n signal,\n} from '@angular/core';\nimport {\n LoggerService,\n} from '@o3r/logger';\nimport {\n type MessageProducer,\n registerProducer,\n} from '../managers/index';\nimport {\n type ErrorContent,\n} from '../messages/index';\nimport {\n applyTheme,\n getStyle,\n THEME_QUERY_PARAM_NAME,\n THEME_URL_SUFFIX,\n} from './theme-helpers';\n/**\n * This service exposing the current theme signal\n */\n@Injectable({\n providedIn: 'root'\n})\nexport class ThemeProducerService implements MessageProducer<ThemeMessage> {\n private readonly messageService = inject(MessagePeerService<ThemeMessage>);\n private readonly logger = inject(LoggerService);\n private previousTheme: ThemeStructure | undefined;\n private readonly window = inject(Window, { optional: true }) || window;\n\n private readonly currentThemeSelection;\n /** Current selected theme signal */\n public readonly currentTheme;\n\n /**\n * The type of messages this service handles ('theme').\n */\n public readonly types = THEME_MESSAGE_TYPE;\n\n constructor() {\n registerProducer(this);\n\n // get the current theme name from the url (if any) and emit a first value for the current theme\n const parentUrl = new URL(this.window.location.toString());\n const selectedThemeName = parentUrl.searchParams.get(THEME_QUERY_PARAM_NAME);\n this.currentThemeSelection = signal<ThemeStructure | undefined>(selectedThemeName\n ? {\n name: selectedThemeName,\n css: null\n }\n : undefined);\n this.currentTheme = this.currentThemeSelection.asReadonly();\n\n if (selectedThemeName) {\n void this.changeTheme(selectedThemeName);\n }\n\n // When the current theme changes, apply it to the current application\n effect(() => {\n const themeObj = this.currentTheme();\n if (themeObj?.css !== null) {\n applyTheme(themeObj?.css);\n }\n });\n\n /**\n * This effect listens for changes in the `currentTheme` signal. If a valid theme object with CSS is present,\n * it creates a theme message and sends it via the message service.\n */\n effect(() => {\n const themeObj = this.currentTheme();\n if (themeObj && themeObj.css !== null) {\n const messageV10 = {\n type: 'theme',\n name: themeObj.name,\n css: themeObj.css,\n version: '1.0'\n } satisfies ThemeV1_0;\n // TODO: sendBest() is not yet implemented -- https://github.com/AmadeusITGroup/microfrontends/issues/11\n this.messageService.send(messageV10);\n }\n });\n }\n\n /**\n * Changes the current theme to the specified theme name.\n * @param themeName - The name of the theme to change to.\n */\n public async changeTheme(themeName?: string): Promise<void> {\n const cssHref = themeName && `${themeName}${THEME_URL_SUFFIX}`;\n const styleObj = cssHref ? await getStyle(cssHref) : '';\n this.currentThemeSelection.update((theme) => {\n this.previousTheme = theme;\n return themeName\n ? { name: themeName, css: styleObj }\n : undefined;\n });\n }\n\n /**\n * Reverts to the previous theme.\n */\n public revertToPreviousTheme(): void {\n this.currentThemeSelection.set(this.previousTheme);\n }\n\n /**\n * @inheritdoc\n */\n public handleError(message: ErrorContent<ThemeV1_0>): void {\n this.logger.error('Error in theme service message', message);\n this.revertToPreviousTheme();\n }\n}\n","import {\n inject,\n Pipe,\n PipeTransform,\n SecurityContext,\n} from '@angular/core';\nimport {\n DomSanitizer,\n type SafeResourceUrl,\n} from '@angular/platform-browser';\nimport {\n ThemeProducerService,\n} from './theme-producer-service';\n\n/**\n * A pipe that applies the current theme from a theme manager service, to a given URL or SafeResourceUrl, as query param\n */\n@Pipe({\n name: 'applyTheme'\n})\nexport class ApplyTheme implements PipeTransform {\n private readonly themeManagerService = inject(ThemeProducerService);\n private readonly domSanitizer = inject(DomSanitizer);\n\n /**\n * Transforms the given URL or SafeResourceUrl by appending the current theme value as a query parameter.\n * @param url - The URL or SafeResourceUrl to be transformed.\n * @returns The transformed SafeResourceUrl or undefined if the input URL is invalid.\n */\n public transform(url: string): string;\n public transform(url: SafeResourceUrl): SafeResourceUrl;\n public transform(url: undefined): undefined;\n public transform(url: string | SafeResourceUrl | undefined): string | SafeResourceUrl | undefined {\n if (!url) {\n return undefined;\n }\n const currentTheme = this.themeManagerService.currentTheme();\n const urlString = typeof url === 'string'\n ? url\n : this.domSanitizer.sanitize(SecurityContext.RESOURCE_URL, url);\n\n if (urlString) {\n const moduleUrl = new URL(urlString);\n if (currentTheme) {\n moduleUrl.searchParams.set('theme', currentTheme.name);\n }\n const moduleUrlStringyfied = moduleUrl.toString();\n return typeof url === 'string' ? moduleUrlStringyfied : this.domSanitizer.bypassSecurityTrustResourceUrl(moduleUrlStringyfied);\n }\n\n return undefined;\n }\n}\n","import {\n Directive,\n ElementRef,\n inject,\n input,\n OnInit,\n Renderer2,\n} from '@angular/core';\n\n/**\n * Directive to set the sandbox attribute on an iframe element.\n * Uses Renderer2 to set the attribute once at initialization, respecting the security intent (no runtime changes).\n * @example\n * ```html\n * <iframe [mfeSandbox]=\"'allow-scripts allow-same-origin'\" />\n * ```\n */\n@Directive({\n selector: 'iframe[mfeSandbox]'\n})\nexport class SandboxDirective implements OnInit {\n private readonly elementRef = inject(ElementRef);\n private readonly renderer = inject(Renderer2);\n\n /**\n * The sandbox permissions to apply to the iframe.\n * Defaults to empty string (most restrictive: all restrictions apply).\n * Set once at initialization; runtime changes are ignored for security reasons.\n */\n public readonly mfeSandbox = input('');\n\n public ngOnInit(): void {\n this.renderer.setAttribute(this.elementRef.nativeElement, 'sandbox', this.mfeSandbox());\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n inject,\n input,\n ViewEncapsulation,\n} from '@angular/core';\nimport {\n DomSanitizer,\n} from '@angular/platform-browser';\nimport type {\n SafeResourceUrl,\n} from '@angular/platform-browser';\nimport {\n ConnectDirective,\n} from '../connect/connect-directive';\nimport {\n HostInfoPipe,\n} from '../host-info/host-info-pipe';\nimport {\n ScalableDirective,\n} from '../resize/scalable-directive';\nimport {\n ApplyTheme,\n} from '../theme/apply-theme-pipe';\nimport {\n SandboxDirective,\n} from './sandbox.directive';\n\n/**\n * Presentational component for rendering an iframe with MFE integration directives.\n * Applies host info injection, theming and cross-iframe communication.\n */\n@Component({\n selector: 'mfe-iframe-embed',\n imports: [\n ConnectDirective,\n ScalableDirective,\n ApplyTheme,\n HostInfoPipe,\n SandboxDirective\n ],\n templateUrl: './iframe-embed.template.html',\n styleUrl: './iframe-embed.style.scss',\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class IframeEmbedComponent {\n private readonly domSanitizer = inject(DomSanitizer);\n\n /** The URL for the iframe source (plain string or pre-sanitized SafeResourceUrl). */\n public readonly src = input.required<string | SafeResourceUrl>();\n\n /** The sanitized URL, auto-sanitized if a plain string is provided. */\n public readonly safeSrc = computed(() => {\n const value = this.src();\n return typeof value === 'string'\n ? this.domSanitizer.bypassSecurityTrustResourceUrl(value)\n : value;\n });\n\n /** The unique identifier for the module, used for cross-iframe communication. */\n public readonly moduleId = input.required<string>();\n\n /** The host application identifier sent to the embedded module. */\n public readonly hostApplicationId = input.required<string>();\n\n /**\n * The sandbox attribute for the iframe.\n * Pass through to the SandboxDirective on the iframe element.\n */\n public readonly sandbox = input('allow-scripts allow-same-origin');\n}\n","@let hostInfoOptions = {hostId: hostApplicationId(), moduleId: moduleId()};\n<iframe\n [connect]=\"hostInfoOptions.moduleId\"\n scalable\n [src]=\"safeSrc() | hostInfo: hostInfoOptions | applyTheme\"\n [mfeSandbox]=\"sandbox()\">\n</iframe>\n","import {\n NAVIGATION_MESSAGE_TYPE,\n} from '@ama-mfe/messages';\nimport type {\n NavigationMessage,\n NavigationV1_0,\n NavigationV1_1,\n} from '@ama-mfe/messages';\nimport type {\n RoutedMessage,\n} from '@amadeus-it-group/microfrontends';\nimport {\n inject,\n Injectable,\n} from '@angular/core';\nimport {\n ActivatedRoute,\n Router,\n} from '@angular/router';\nimport {\n Subject,\n} from 'rxjs';\nimport {\n hostQueryParams,\n} from '../host-info';\nimport {\n AbstractMessageConsumer,\n} from '../managers/index';\n\n/**\n * A service that handles navigation messages and routing.\n *\n * This service listens for navigation messages and updates the router state accordingly.\n */\n@Injectable({\n providedIn: 'root'\n})\nexport class NavigationConsumerService extends AbstractMessageConsumer<NavigationMessage> {\n private readonly router = inject(Router);\n private readonly activeRoute = inject(ActivatedRoute);\n private readonly requestedUrl = new Subject<{ url: string; channelId?: string }>();\n\n /**\n * An observable that emits the requested URL and optional channel ID.\n */\n public readonly requestedUrl$ = this.requestedUrl.asObservable();\n\n /**\n * The type of messages this service handles.\n */\n public readonly type = NAVIGATION_MESSAGE_TYPE;\n\n /**\n * @inheritdoc\n */\n public readonly supportedVersions = {\n /**\n * Use the message paylod to compute a new url and emit it via the public subject\n * Additionally navigate to the new url\n * @param message message to consume\n */\n '1.0': (message: RoutedMessage<NavigationV1_0>) => {\n const channelId = message.from || undefined;\n this.requestedUrl.next({ url: message.payload.url, channelId });\n this.navigate(message.payload.url);\n },\n /**\n * Same as 1.0 but applies the navigation extras (e.g. replaceUrl) forwarded by the producer\n * so the host router reproduces the original history semantics.\n * @param message message to consume\n */\n // eslint-disable-next-line @stylistic/quote-props -- keep quotes for consistency with '1.0'\n '1.1': (message: RoutedMessage<NavigationV1_1>) => {\n const channelId = message.from || undefined;\n this.requestedUrl.next({ url: message.payload.url, channelId });\n this.navigate(message.payload.url, message.payload.extras);\n }\n };\n\n constructor() {\n super();\n /**\n * Auto-starts the consumer on creation.\n * @deprecated The constructor auto-starts the consumer for backwards compatibility. It will be removed in v15;\n */\n this.start();\n }\n\n /**\n * Parses a URL and returns an object containing the paths and query parameters.\n * @param url - The URL to parse.\n * @returns An object containing the paths and query parameters.\n */\n private parseUrl(url: string): { paths: string[]; queryParams: { [key: string]: string } } {\n const urlObject = new URL(window.origin + url);\n const paths = urlObject.pathname.split('/').filter((segment) => !!segment);\n const queryParams = Object.fromEntries(urlObject.searchParams.entries());\n return { paths, queryParams };\n }\n\n /**\n * Navigates to the specified URL.\n * @param url - The URL to navigate to.\n * @param extras - Optional navigation extras forwarded from the embedded application.\n */\n private navigate(url: string, extras?: NavigationV1_1['extras']) {\n const { paths, queryParams } = this.parseUrl(url);\n // No need to keep these in the URL\n hostQueryParams.forEach((key) => delete queryParams[key]);\n void this.router.navigate(paths, {\n relativeTo: this.activeRoute.children.at(-1),\n queryParams,\n replaceUrl: extras?.replaceUrl\n });\n }\n}\n","import {\n Injectable,\n} from '@angular/core';\n\n/**\n * This service allows routes to be memorized with an optional lifetime and provides methods to retrieve and manage these routes.\n */\n@Injectable({\n providedIn: 'root'\n})\nexport class RouteMemorizeService {\n private readonly routeTimers: { [x: string]: ReturnType<typeof setTimeout> } = {};\n /** All memorized routes */\n public readonly routeStack: { [x: string]: string } = {};\n\n /**\n * Memorizes a route for a given channel ID with an optional lifetime.\n * @param channelId - The ID of the channel to memorize the route for.\n * @param url - The URL of the route to memorize.\n * @param liveTime - The optional lifetime of the memorized route in milliseconds. If provided, the route will be removed after this time.\n */\n public memorizeRoute(channelId: string, url: string, liveTime?: number): void {\n this.routeStack[channelId] = url;\n\n const timerRef = this.routeTimers[channelId];\n if (timerRef) {\n clearTimeout(timerRef);\n }\n if (liveTime && liveTime > 0) {\n this.routeTimers[channelId] = setTimeout(() => {\n delete this.routeStack[channelId];\n delete this.routeTimers[channelId];\n }, liveTime);\n }\n }\n\n /**\n * Retrieves the memorized route for a given channel ID.\n * @param channelId - The ID of the channel to retrieve the memorized route for.\n * @returns The memorized route URL or undefined if no route is memorized for the given channel ID.\n */\n public getRoute(channelId: string): string | undefined {\n return this.routeStack[channelId];\n }\n}\n","import {\n inject,\n Pipe,\n PipeTransform,\n SecurityContext,\n} from '@angular/core';\nimport {\n DomSanitizer,\n type SafeResourceUrl,\n} from '@angular/platform-browser';\nimport {\n ActivatedRoute,\n} from '@angular/router';\nimport {\n RouteMemorizeService,\n} from './route-memorize/route-memorize-service';\n\n/**\n * Options for restoring a route with optional query parameters and memory channel ID.\n */\nexport interface RestoreRouteOptions {\n /**\n * Whether to propagate query parameters from the top window to the module URL.\n */\n propagateQueryParams?: boolean;\n\n /**\n * Whether to override existing query parameters in the module URL with those from the top window.\n */\n overrideQueryParams?: boolean;\n\n /**\n * The memory channel ID used to retrieve the memorized route.\n * If provided, the memorized route associated with this ID will be used.\n */\n memoryChannelId?: string;\n}\n\n/**\n * A pipe that restores a route with optional query parameters and memory channel ID.\n *\n * This pipe is used to transform a URL or SafeResourceUrl by appending query parameters\n * and adjusting the pathname based on the current active route and memorized route.\n */\n@Pipe({\n name: 'restoreRoute'\n})\nexport class RestoreRoute implements PipeTransform {\n private readonly activeRoute = inject(ActivatedRoute);\n private readonly domSanitizer = inject(DomSanitizer);\n private readonly routeMemorizeService = inject(RouteMemorizeService, { optional: true });\n private readonly window = inject(Window, { optional: true }) || window;\n\n /**\n * Transforms the given URL or SafeResourceUrl by appending query parameters and adjusting the pathname.\n * @param url - The URL or SafeResourceUrl to be transformed.\n * @param options - Optional parameters to control the transformation. {@link RestoreRouteOptions}\n * @returns - The transformed SafeResourceUrl or undefined if the input URL is invalid.\n */\n public transform(url: string, options?: Partial<RestoreRouteOptions>): string;\n public transform(url: SafeResourceUrl, options?: Partial<RestoreRouteOptions>): SafeResourceUrl;\n public transform(url: undefined, options?: Partial<RestoreRouteOptions>): undefined;\n public transform(url: string | SafeResourceUrl | undefined, options?: Partial<RestoreRouteOptions>): string | SafeResourceUrl | undefined {\n const urlString = typeof url === 'string'\n ? url\n : this.domSanitizer.sanitize(SecurityContext.RESOURCE_URL, url || null);\n\n if (!url) {\n return undefined;\n }\n\n if (urlString) {\n const moduleUrl = new URL(urlString);\n const queryParamsModule = new URLSearchParams(moduleUrl.searchParams);\n\n const channelId = options?.memoryChannelId;\n const memorizedRoute = channelId && this.routeMemorizeService?.getRoute(channelId);\n const topWindowUrl = new URL(memorizedRoute ? this.window.origin + memorizedRoute : this.window.location.href);\n const queryParamsTopWindow = new URLSearchParams(topWindowUrl.search);\n\n if (options?.propagateQueryParams) {\n for (const [key, value] of queryParamsTopWindow) {\n if (options?.overrideQueryParams || !queryParamsModule.has(key)) {\n queryParamsModule.set(key, value);\n }\n }\n }\n moduleUrl.search = queryParamsModule.toString();\n moduleUrl.pathname += topWindowUrl.pathname.split(`/${this.activeRoute.routeConfig?.path}`).pop() || '';\n moduleUrl.pathname = moduleUrl.pathname.replace(/\\/{2,}/g, '/');\n const moduleUrlStringyfied = moduleUrl.toString();\n return typeof url === 'string' ? moduleUrlStringyfied : this.domSanitizer.bypassSecurityTrustResourceUrl(moduleUrlStringyfied);\n }\n }\n}\n","import {\n computed,\n Directive,\n effect,\n inject,\n input,\n untracked,\n} from '@angular/core';\nimport {\n toSignal,\n} from '@angular/core/rxjs-interop';\nimport {\n NavigationConsumerService,\n} from '../navigation-consumer-service';\nimport {\n RouteMemorizeService,\n} from './route-memorize-service';\n\n@Directive({\n selector: 'iframe[memorizeRoute]',\n standalone: true\n})\nexport class RouteMemorizeDirective {\n /**\n * Whether to memorize the route.\n * Default is true.\n */\n public memorizeRoute = input<boolean | undefined | ''>(true);\n\n /**\n * The ID used to memorize the route.\n */\n public memorizeRouteId = input<string>();\n\n /**\n * The maximum age for memorizing the route.\n * Default is 0.\n */\n public memorizeMaxAge = input<number>(0);\n\n /**\n * The maximum age for memorizing the route, used as a fallback.\n * Default is 0.\n */\n public memorizeRouteMaxAge = input<number>(0);\n\n /**\n * The connection ID for the iframe where the actual directive is applied.\n */\n public connect = input<string>();\n\n private readonly maxAge = computed(() => {\n return this.memorizeMaxAge() || this.memorizeRouteMaxAge();\n });\n\n constructor() {\n const memory = inject(RouteMemorizeService);\n const requestedUrlSignal = toSignal(inject(NavigationConsumerService).requestedUrl$);\n\n /**\n * This effect listens for changes in the `memorizeRoute`, `requestedUrlSignal`, and `memorizeRouteId` or `connect` inputs.\n * If `memorizeRoute` is not false and a requested URL with a matching channel ID is found, it memorizes the route using the route memory service.\n */\n effect(() => {\n const memorizeRoute = this.memorizeRoute();\n if (memorizeRoute === false) {\n return;\n }\n const requested = requestedUrlSignal();\n const channelId = this.connect();\n const id = this.memorizeRouteId() || channelId;\n if (requested && id && requested.channelId === channelId) {\n memory.memorizeRoute(id, requested.url, untracked(this.maxAge));\n }\n });\n }\n}\n","import type {\n NavigationMessage,\n NavigationV1_0,\n NavigationV1_1,\n} from '@ama-mfe/messages';\nimport {\n NAVIGATION_MESSAGE_TYPE,\n} from '@ama-mfe/messages';\nimport type {\n RoutedMessage,\n} from '@amadeus-it-group/microfrontends';\nimport {\n MessagePeerService,\n} from '@amadeus-it-group/microfrontends-angular';\nimport {\n inject,\n Injectable,\n} from '@angular/core';\nimport {\n takeUntilDestroyed,\n} from '@angular/core/rxjs-interop';\nimport {\n ActivatedRoute,\n NavigationEnd,\n Router,\n} from '@angular/router';\nimport {\n LoggerService,\n} from '@o3r/logger';\nimport {\n filter,\n map,\n} from 'rxjs';\nimport {\n type MessageConsumer,\n type MessageProducer,\n registerConsumer,\n registerProducer,\n} from '../managers/index';\nimport {\n type ErrorContent,\n} from '../messages/error';\nimport {\n isEmbedded,\n} from '../utils';\n\n/** Options for the routing handling in case of navigation producer message */\nexport interface RoutingServiceOptions {\n /**\n * Whether to handle only sub-routes.\n * If true, the routing service will handle only sub-routes.\n * Default is false.\n */\n subRouteOnly?: boolean;\n}\n\n/**\n * A service that keeps in sync Router navigation and navigation messages.\n *\n * - listens to Router events and sends navigation messages\n * - handles incoming navigation messages and triggers Router navigation\n */\n@Injectable({\n providedIn: 'root'\n})\nexport class RoutingService implements MessageProducer<NavigationMessage>, MessageConsumer<NavigationMessage> {\n private readonly router = inject(Router);\n private readonly activatedRoute = inject(ActivatedRoute);\n private readonly messageService = inject(MessagePeerService<NavigationMessage>);\n private readonly logger = inject(LoggerService);\n private readonly window = inject(Window, { optional: true }) || window;\n\n /**\n * @inheritdoc\n */\n public readonly types = NAVIGATION_MESSAGE_TYPE;\n\n /**\n * @inheritdoc\n */\n public readonly type = 'navigation';\n\n /**\n * Use the message payload to navigate to the specified URL.\n * @param message message to consume\n */\n public readonly supportedVersions = {\n '1.0': async (message: RoutedMessage<any>) => {\n // Navigation has been triggered from the communication protocol request.\n await this.router.navigateByUrl(message.payload.url, { state: { triggeredByMessage: true } });\n },\n // eslint-disable-next-line @stylistic/quote-props -- keep quotes for consistency with '1.0'\n '1.1': async (message: RoutedMessage<any>) => {\n // Navigation has been triggered from the communication protocol request.\n await this.router.navigateByUrl(message.payload.url, {\n state: { triggeredByMessage: true },\n replaceUrl: message.payload.extras?.replaceUrl\n });\n }\n };\n\n constructor() {\n registerProducer(this);\n registerConsumer(this);\n }\n\n /**\n * @inheritdoc\n */\n public start(): void {}\n\n /**\n * @inheritdoc\n */\n public stop(): void {}\n\n /**\n * @inheritdoc\n */\n public handleError(message: ErrorContent<NavigationV1_0>): void {\n this.logger.error('Error in navigation service message', message);\n }\n\n /**\n * Handles embedded routing by listening to router events and sending navigation messages to the connected endpoints.\n * It can be a parent window or another iframe\n * @note - This method has to be called in an injection context\n * @param options - Optional parameters to control the routing behavior {@link RoutingServiceOptions}.\n */\n public handleEmbeddedRouting(options?: RoutingServiceOptions): void {\n const subRouteOnly = options?.subRouteOnly ?? false;\n this.router.events.pipe(\n takeUntilDestroyed(),\n filter((event): event is NavigationEnd => event instanceof NavigationEnd),\n filter((_event) => {\n const extras = this.router.getCurrentNavigation()?.extras || {};\n // Navigation triggered by the application host, no need to request it to navigate to the same route\n return !extras.skipLocationChange && !extras.state?.triggeredByMessage;\n }),\n map(({ urlAfterRedirects }) => {\n const extras = this.router.getCurrentNavigation()?.extras || {};\n const { channelId } = extras.state || {};\n const currentRouteRegExp = subRouteOnly && this.activatedRoute.routeConfig?.path && new RegExp('^' + this.activatedRoute.routeConfig.path.replace(/(?=\\W)/g, '\\\\'), 'i');\n return ({\n url: currentRouteRegExp ? urlAfterRedirects.replace(currentRouteRegExp, '') : urlAfterRedirects,\n channelId,\n replaceUrl: extras.replaceUrl\n });\n })\n ).subscribe(({ url, channelId, replaceUrl }) => {\n // Always emit the latest version we produce. The ConsumerManagerService dispatches to the\n // highest compatible minor a consumer has declared, so v1.0-only peers still navigate\n // correctly — they just ignore the optional extras.\n const message: NavigationV1_1 = {\n type: 'navigation',\n version: '1.1',\n url,\n ...(replaceUrl ? { extras: { replaceUrl: true } } : {})\n };\n // TODO: sendBest() is not implemented -- https://github.com/AmadeusITGroup/microfrontends/issues/11\n // When multiple majors are supported, sendBest should receive the latest minor of each\n // supported major and dispatch to peers according to their declared compatibility.\n if (isEmbedded(this.window)) {\n this.messageService.send(message);\n } else if (channelId === undefined) {\n this.logger.warn('No channelId provided for navigation message');\n } else {\n try {\n this.messageService.send(message, { to: [channelId] });\n } catch (error) {\n this.logger.error('Error sending navigation message', error);\n }\n }\n });\n }\n}\n","import {\n Injectable,\n signal,\n type Signal,\n} from '@angular/core';\n\n/**\n * Current navigation block state held by a module.\n */\nexport interface NavigationBlockState {\n /** `true` when the module holds unsaved work and navigation must be confirmed. */\n blocked: boolean;\n /** Optional reason displayed in the confirmation modal. */\n reason?: string;\n}\n\n/**\n * Module-side writable source of truth for the navigation block state.\n *\n * Feature code (forms, editors, etc.) calls {@link block} when unsaved changes appear and {@link unblock} once they are saved or discarded.\n * The {@link NavigationBlockStateProducerService} watches this signal and mirrors the state to the shell;\n * the {@link navigationBlockModuleGuard} reads it to decide whether to intercept in-module navigation.\n */\n@Injectable({\n providedIn: 'root'\n})\nexport class NavigationBlockService {\n private readonly stateSignal = signal<NavigationBlockState>({ blocked: false });\n\n /** Readonly view of the current navigation block state. */\n public readonly state: Signal<NavigationBlockState> = this.stateSignal.asReadonly();\n\n /**\n * Mark the module as blocked (unsaved changes present).\n * @param reason Optional human-readable reason shown in the confirmation modal.\n */\n public block(reason?: string): void {\n this.stateSignal.set({ blocked: true, reason });\n }\n\n /** Mark the module as unblocked (no unsaved changes). */\n public unblock(): void {\n this.stateSignal.set({ blocked: false });\n }\n}\n","import {\n NAVIGATION_BLOCK_STATE_MESSAGE_TYPE,\n type NavigationBlockStateV1_0,\n} from '@ama-mfe/messages';\nimport {\n DestroyRef,\n effect,\n inject,\n Injectable,\n} from '@angular/core';\nimport {\n LoggerService,\n} from '@o3r/logger';\nimport {\n ConnectionService,\n} from '../../../connect/connect-resources';\nimport {\n type MessageProducer,\n ProducerManagerService,\n} from '../../../managers';\nimport type {\n ErrorContent,\n} from '../../../messages/error/base';\nimport {\n NavigationBlockService,\n} from './navigation-block.service';\n\n/**\n * Module-side producer that mirrors {@link NavigationBlockService} to the shell via `navigation-block-state` messages.\n * Every state change triggers a broadcast so the shell guard can decide without a round-trip.\n *\n * Runs module-side only (it watches the module's writable state). The shell never instantiates it.\n */\n@Injectable({\n providedIn: 'root'\n})\nexport class NavigationBlockStateProducerService\nimplements MessageProducer<NavigationBlockStateV1_0> {\n /**\n * @inheritdoc\n */\n public readonly types = NAVIGATION_BLOCK_STATE_MESSAGE_TYPE;\n\n private readonly connectionService = inject(ConnectionService);\n private readonly producerManagerService = inject(ProducerManagerService);\n private readonly logger = inject(LoggerService);\n private readonly store = inject(NavigationBlockService);\n\n constructor() {\n this.producerManagerService.register(this);\n inject(DestroyRef).onDestroy(() => this.producerManagerService.unregister(this));\n effect(() => {\n const state = this.store.state();\n const message: NavigationBlockStateV1_0 = {\n type: NAVIGATION_BLOCK_STATE_MESSAGE_TYPE,\n version: '1.0',\n blocked: state.blocked,\n reason: state.reason\n };\n this.connectionService.send(message);\n });\n }\n\n /**\n * @inheritdoc\n */\n public handleError(message: ErrorContent<NavigationBlockStateV1_0>): void {\n this.logger.error('navigation-block state message could not be consumed by the shell', message);\n }\n}\n","import {\n NAVIGATION_BLOCK_STATE_MESSAGE_TYPE,\n type NavigationBlockStateMessage,\n type NavigationBlockStateV1_0,\n} from '@ama-mfe/messages';\nimport type {\n RoutedMessage,\n} from '@amadeus-it-group/microfrontends';\nimport {\n Injectable,\n signal,\n type Signal,\n} from '@angular/core';\nimport {\n AbstractMessageConsumer,\n} from '../../../managers';\nimport type {\n NavigationBlockState,\n} from './navigation-block.service';\n\n/**\n * Navigation block state as observed by the shell, extended with the originating channel ID\n * so the shell knows which module to notify when navigation is confirmed.\n */\nexport interface ObservedNavigationBlockState extends NavigationBlockState {\n /** Id of the module (channel) that sent the last state message. */\n channelId?: string;\n}\n\n/**\n * Shell-side consumer for `navigation-block-state` messages sent by modules.\n *\n * Keeps the last received state in a signal that the shell guard reads to decide whether to intercept shell-initiated navigation.\n * The state stays `undefined` until any module reports a value (interpreted as \"no block known\" which means navigation is allowed).\n */\n@Injectable({\n providedIn: 'root'\n})\nexport class NavigationBlockStateConsumerService extends AbstractMessageConsumer<NavigationBlockStateMessage> {\n /**\n * @inheritdoc\n */\n public readonly type = NAVIGATION_BLOCK_STATE_MESSAGE_TYPE;\n\n /**\n * @inheritdoc\n */\n public readonly supportedVersions = {\n // eslint-disable-next-line @typescript-eslint/naming-convention -- expected naming for versions\n '1.0': (message: RoutedMessage<NavigationBlockStateV1_0>) => {\n this.blockStateSignal.set({\n blocked: message.payload.blocked,\n reason: message.payload.reason,\n channelId: message.from\n });\n }\n };\n\n private readonly blockStateSignal = signal<ObservedNavigationBlockState | undefined>(undefined);\n\n /** Last navigation block state reported by any module. */\n public readonly blockState: Signal<ObservedNavigationBlockState | undefined> = this.blockStateSignal.asReadonly();\n\n /**\n * Mark the state as unblocked after the shell has resolved a confirmation (e.g. the user confirmed a sidebar-initiated navigation).\n */\n public clear(): void {\n this.blockStateSignal.set({ blocked: false });\n }\n}\n","import {\n NAVIGATION_DECISION_MESSAGE_TYPE,\n NAVIGATION_REQUEST_MESSAGE_TYPE,\n type NavigationDecisionV1_0,\n type NavigationRequestV1_0,\n} from '@ama-mfe/messages';\nimport {\n inject,\n Injectable,\n type OnDestroy,\n} from '@angular/core';\nimport {\n LoggerService,\n} from '@o3r/logger';\nimport {\n ConnectionService,\n} from '../../../connect/connect-resources';\nimport {\n type MessageProducer,\n ProducerManagerService,\n} from '../../../managers';\nimport type {\n ErrorContent,\n} from '../../../messages/error/base';\nimport {\n generateCorrelationId,\n} from '../../../utils';\n\ntype ProducedMessage = NavigationRequestV1_0 | NavigationDecisionV1_0;\n\n/**\n * Manages navigation request/decision round-trip communication for **both** shell and module.\n * Sends `navigation-request` messages, tracks pending requests, and sends `navigation-decision` replies.\n * Correlates responses with their originating requests using correlation IDs.\n *\n * - Module-initiated navigation → guard calls `requestNavigation()` with no target, broadcasting to the shell;\n * the shell's handler opens the modal and replies.\n * - Shell-initiated navigation → guard calls `requestNavigation(channelId)` after the user already confirmed locally,\n * so the module can run its unblock / draft-persistence logic and reply.\n *\n * If the peer never replies the returned promise stays pending and the navigation is held — callers rely on Angular\n * tearing their context down (the producer's `ngOnDestroy` resolves pending promises to `false`).\n */\n@Injectable({\n providedIn: 'root'\n})\nexport class NavigationRequestManagerService\nimplements MessageProducer<ProducedMessage>, OnDestroy {\n /**\n * @inheritdoc\n */\n public readonly types = [NAVIGATION_REQUEST_MESSAGE_TYPE, NAVIGATION_DECISION_MESSAGE_TYPE] as [typeof NAVIGATION_REQUEST_MESSAGE_TYPE, typeof NAVIGATION_DECISION_MESSAGE_TYPE];\n\n private readonly connectionService = inject(ConnectionService);\n private readonly producerManagerService = inject(ProducerManagerService);\n private readonly logger = inject(LoggerService);\n\n /**\n * Single-flight slot for the in-progress negotiation. Only one request is ever pending: navigations are sequential\n * (one active module, and a blocking shell modal prevents the user from starting another while it is open), so this\n * is not about concurrent navigations. Its purpose is to de-duplicate the *re-entrant* guard calls a single navigation\n * produces — `canActivate` + `canActivateChild` on the same route, or re-runs from `runGuardsAndResolvers: 'always'`.\n * Those fire before any decision returns, and on the module side there is no local modal to serialize them, so without\n * this slot one navigation would emit multiple `navigation-request` messages. Reusing the slot makes every re-entrant\n * call await the same round-trip.\n */\n private pendingRequest?: {\n correlationId: string;\n promise: Promise<boolean>;\n resolve: (value: boolean) => void;\n };\n\n constructor() {\n this.producerManagerService.register(this);\n }\n\n /**\n * Ask the peer to handle the navigation. Resolves when the peer replies with a `navigation-decision`.\n * If the peer never replies the promise stays pending.\n *\n * Re-entrant calls while a request is pending (e.g. the same navigation firing both `canActivate` and `canActivateChild`)\n * return the same promise, so only one round-trip is sent.\n * @param target Optional target peer id. Omit to broadcast (module → shell).\n * @param reason Optional human-readable reason surfaced in the shell modal.\n */\n public requestNavigation(target?: string, reason?: string): Promise<boolean> {\n if (this.pendingRequest) {\n return this.pendingRequest.promise;\n }\n const correlationId = generateCorrelationId('nav-req');\n let resolveFn!: (value: boolean) => void;\n const promise = new Promise<boolean>((resolve) => {\n resolveFn = resolve;\n });\n this.pendingRequest = { correlationId, promise, resolve: resolveFn };\n const message: NavigationRequestV1_0 = {\n type: NAVIGATION_REQUEST_MESSAGE_TYPE,\n version: '1.0',\n correlationId,\n reason\n };\n this.connectionService.send(message, target ? { to: target } : undefined);\n return promise;\n }\n\n /**\n * Send a `navigation-decision` reply with the given `correlationId`.\n * Called by {@link NavigationNegotiationConsumerService} after the side-specific handler has finished.\n * @param correlationId id echoed from the request\n * @param target peer id of the original sender\n * @param proceed whether to allow navigation (default true)\n */\n public sendDecision(correlationId: string, target: string, proceed = true): void {\n const message: NavigationDecisionV1_0 = {\n type: NAVIGATION_DECISION_MESSAGE_TYPE,\n version: '1.0',\n correlationId,\n proceed\n };\n this.connectionService.send(message, { to: target });\n }\n\n /**\n * Called by {@link NavigationDecisionConsumerService} when a decision arrives.\n * Resolves the pending promise if the `correlationId` matches.\n * @param correlationId\n * @param proceed\n */\n public resolvePendingRequest(correlationId: string, proceed: boolean): void {\n const pending = this.pendingRequest;\n if (!pending || pending.correlationId !== correlationId) {\n return;\n }\n this.pendingRequest = undefined;\n pending.resolve(proceed);\n }\n\n /**\n * @inheritdoc\n */\n public handleError(message: ErrorContent<ProducedMessage>): void {\n this.logger.error('navigation negotiation message could not be consumed by a peer', message);\n }\n\n public ngOnDestroy(): void {\n if (this.pendingRequest) {\n this.pendingRequest.resolve(false);\n this.pendingRequest = undefined;\n }\n this.producerManagerService.unregister(this);\n }\n}\n","import {\n inject,\n InjectionToken,\n} from '@angular/core';\nimport {\n NavigationBlockService,\n} from '../block-state/navigation-block.service';\n\n/** Context passed to a {@link NavigationRequestHandler} for each incoming request. */\nexport interface NavigationRequestContext {\n /** Peer id that sent the request. */\n from: string;\n /** Optional human-readable reason attached to the request. */\n reason?: string;\n}\n\n/**\n * Side-specific handler invoked by {@link NavigationRequestConsumerService} whenever a `navigation-request` arrives from a peer.\n *\n * Responsibilities per side:\n * - **Shell application** — open the confirmation modal and await the user's answer. If the user confirms, resolve;\n * if the user cancels, throw / reject so the consumer skips sending the decision. See {@link createNavigationRequestShellHandler}.\n * - **Module** — run the module's local cleanup (at minimum `state.unblock()`; later: persist drafts) and resolve.\n * The module cannot refuse — only the shell modal can. See {@link createNavigationRequestHandler} (the default).\n *\n * Exposed as an interface so apps can supply either a function-style implementation (`{ handle: (ctx) => ... }`)\n * or a class instance — useful when the handler needs its own dependencies.\n */\nexport interface NavigationRequestHandler {\n handle: (context: NavigationRequestContext) => Promise<void> | void;\n}\n\n/**\n * Default module-side `navigation-request` handler. Runs the module's local cleanup — at minimum clearing the block state — and resolves.\n * Modules cannot refuse a navigation (only the shell modal can), so this always resolves and a `navigation-decision` is always sent back.\n *\n * Used as the default factory of {@link NAVIGATION_REQUEST_HANDLER}, so a module gets this behavior without any explicit provider.\n * Apps that need to persist drafts before unblocking can override the token with their own handler.\n */\nexport const createNavigationRequestHandler = (): NavigationRequestHandler => {\n const store = inject(NavigationBlockService);\n return {\n handle: () => {\n store.unblock();\n }\n };\n};\n\n/**\n * Injection token for the per-side request handler.\n *\n * **Default behavior (modules):** Clears the block state (unblock) — see {@link createNavigationRequestHandler}.\n * **Shell override:** Opens confirmation modal and awaits user decision.\n *\n * The module handler is provided by default at root level. Only the shell application needs to override it\n * with `provideNavigationRequestShellHandler()`.\n */\nexport const NAVIGATION_REQUEST_HANDLER = new InjectionToken<NavigationRequestHandler>(\n 'NAVIGATION_REQUEST_HANDLER',\n {\n providedIn: 'root',\n factory: createNavigationRequestHandler\n }\n);\n","import {\n NAVIGATION_REQUEST_MESSAGE_TYPE,\n type NavigationRequestMessage,\n type NavigationRequestV1_0,\n} from '@ama-mfe/messages';\nimport type {\n RoutedMessage,\n} from '@amadeus-it-group/microfrontends';\nimport {\n inject,\n Injectable,\n} from '@angular/core';\nimport {\n AbstractMessageConsumer,\n} from '../../../managers';\nimport {\n NAVIGATION_REQUEST_HANDLER,\n} from './navigation-request-handler';\nimport {\n NavigationRequestManagerService,\n} from './navigation-request-manager.service';\n\n/**\n * Agnostic consumer for `navigation-request` messages.\n *\n * On each incoming request, invokes the side-specific handler registered under {@link NAVIGATION_REQUEST_HANDLER}:\n * - **Cockpit side** — handler opens the confirmation modal and awaits the user's answer. If the user cancels the handler\n * throws; this consumer catches it and replies with a decision carrying `proceed: false`, so the module's pending promise\n * resolves to `false` and the in-iframe navigation is held until a fresh request is made.\n * - **Module side** — handler runs the unblock / future draft-persistence logic and resolves. Modules cannot refuse;\n * a decision is always sent.\n */\n@Injectable({\n providedIn: 'root'\n})\nexport class NavigationRequestConsumerService extends AbstractMessageConsumer<NavigationRequestMessage> {\n /**\n * @inheritdoc\n */\n public readonly type = NAVIGATION_REQUEST_MESSAGE_TYPE;\n\n /**\n * @inheritdoc\n */\n public readonly supportedVersions = {\n // eslint-disable-next-line @typescript-eslint/naming-convention -- expected naming for versions\n '1.0': (message: RoutedMessage<NavigationRequestV1_0>) => this.handleRequest(message)\n };\n\n private readonly producerService = inject(NavigationRequestManagerService);\n private readonly handler = inject(NAVIGATION_REQUEST_HANDLER);\n\n private async handleRequest(message: RoutedMessage<NavigationRequestV1_0>): Promise<void> {\n try {\n await this.handler.handle({ from: message.from, reason: message.payload.reason });\n } catch (error) {\n // Handler rejected — usually the user cancelled, but any unexpected\n // exception ends up here too. Log it so the failure is observable, then\n // send a decision with proceed=false so the requester's pending promise\n // resolves and subsequent navigation attempts can create a fresh request.\n this.logger.error('navigation-request handler rejected', error, message);\n this.producerService.sendDecision(message.payload.correlationId, message.from, false);\n return;\n }\n this.producerService.sendDecision(message.payload.correlationId, message.from);\n }\n}\n","import {\n type EnvironmentProviders,\n makeEnvironmentProviders,\n} from '@angular/core';\nimport {\n createNavigationRequestHandler,\n NAVIGATION_REQUEST_HANDLER,\n} from './navigation-request-handler';\n\n/**\n * Provider wiring {@link NAVIGATION_REQUEST_HANDLER} to the module handler.\n * Not normally needed — the token already defaults to this handler — but\n * available for apps that want to register it explicitly.\n */\nexport const provideNavigationRequestModuleHandler = (): EnvironmentProviders =>\n makeEnvironmentProviders([\n {\n provide: NAVIGATION_REQUEST_HANDLER,\n useFactory: createNavigationRequestHandler\n }\n ]);\n","import {\n Injectable,\n} from '@angular/core';\nimport type {\n NavigationBlockConfirmation,\n} from '../navigation-block-confirmation.interface';\n\n/**\n * Default confirmation strategy using browser's native `window.confirm()`.\n * Simple, no dependencies, works in any environment. Suitable for:\n * - Development/testing\n * - Apps without custom modal libraries\n * - `@ama-mfe` packages that need basic confirmation\n *\n * Production apps typically override this with a modal-based strategy.\n */\n@Injectable({\n providedIn: 'root'\n})\nexport class BrowserConfirmationStrategy implements NavigationBlockConfirmation {\n /**\n * Show native browser confirmation dialog.\n * @param reason Optional reason displayed in the message\n * @returns Promise<true> if user clicks OK, Promise<false> if user clicks Cancel\n */\n public confirm(reason?: string): Promise<boolean> {\n const message = `${reason ? reason + '\\n' : ''}Do you want to leave this page?`;\n\n // eslint-disable-next-line no-alert -- intentional use of window.confirm for basic confirmation strategy\n return Promise.resolve(window.confirm(message));\n }\n}\n","import {\n inject,\n InjectionToken,\n} from '@angular/core';\nimport {\n BrowserConfirmationStrategy,\n} from './strategies/browser-confirmation.strategy';\n\n/**\n * Strategy interface for confirming navigation when unsaved changes exist.\n * Implementations provide different UI mechanisms (browser confirm, modal, etc.)\n */\nexport interface NavigationBlockConfirmation {\n /**\n * Show confirmation UI and await user's decision.\n * @param reason Optional human-readable reason for the block (e.g., \"Unsaved order changes\")\n * @returns Promise<true> if user confirms navigation, Promise<false> if cancelled\n */\n confirm(reason?: string): Promise<boolean>;\n}\n\n/**\n * Injection token for the navigation block confirmation strategy.\n * Defaults to {@link BrowserConfirmationStrategy} (uses `window.confirm()`).\n * Apps with a styled modal override the default by passing their own class via `provideNavigationConfig({ confirmationStrategy })`\n * or by binding this token directly.\n */\nexport const NAVIGATION_BLOCK_CONFIRMATION = new InjectionToken<NavigationBlockConfirmation>(\n 'NAVIGATION_BLOCK_CONFIRMATION',\n {\n providedIn: 'root',\n factory: () => inject(BrowserConfirmationStrategy)\n }\n);\n","import {\n inject,\n Injectable,\n} from '@angular/core';\nimport {\n NAVIGATION_BLOCK_CONFIRMATION,\n} from './navigation-block-confirmation.interface';\n\n/**\n * Orchestrates navigation block confirmation by delegating to a pluggable strategy.\n * Handles concurrent call deduplication to prevent duplicate confirmations when guards run multiple times.\n *\n * The confirmation UI is read from the `NAVIGATION_BLOCK_CONFIRMATION` token, which defaults to {@link BrowserConfirmationStrategy}\n * (no setup required). Apps with a styled modal override the token via `provideNavigationConfig({ confirmationStrategy })`\n * or by binding the token directly.\n */\n@Injectable({\n providedIn: 'root'\n})\nexport class NavigationBlockConfirmationService {\n private readonly strategy = inject(NAVIGATION_BLOCK_CONFIRMATION);\n private pendingConfirmation?: Promise<boolean>;\n\n /**\n * Show confirmation and await user decision. Concurrent calls return the same promise to prevent duplicate confirmations.\n * @param reason Optional reason displayed in the confirmation UI\n * @returns `true` when the user confirms, `false` when they cancel\n */\n public confirm(reason?: string): Promise<boolean> {\n // Deduplication: if confirmation already in progress, return same promise\n if (this.pendingConfirmation) {\n return this.pendingConfirmation;\n }\n\n // Delegate to injected strategy. Clear the slot only once the promise\n // settles, so concurrent callers in the meantime get the same promise.\n const pending = this.strategy.confirm(reason).finally(() => {\n this.pendingConfirmation = undefined;\n });\n this.pendingConfirmation = pending;\n return pending;\n }\n}\n","import {\n type EnvironmentProviders,\n inject,\n makeEnvironmentProviders,\n} from '@angular/core';\nimport {\n NavigationBlockStateConsumerService,\n} from '../block-state/navigation-block-state-consumer.service';\nimport {\n NavigationBlockConfirmationService,\n} from '../navigation-confirmation/navigation-block-confirmation.service';\nimport {\n NAVIGATION_REQUEST_HANDLER,\n type NavigationRequestHandler,\n} from './navigation-request-handler';\n\n/**\n * Shell application `navigation-request` handler used when a module initiates the navigation (in-iframe link click).\n * Opens the shared confirmation modal, awaits the user's answer, and — on confirm — clears the shell's block mirror.\n * On cancel the handler throws; the consumer catches it and replies with a `navigation-decision` carrying `proceed: false`,\n * so the module's pending promise resolves to `false` and the iframe navigation is held until a fresh request is made.\n */\nexport const createNavigationRequestShellHandler = (): NavigationRequestHandler => {\n const confirmation = inject(NavigationBlockConfirmationService);\n const blockConsumer = inject(NavigationBlockStateConsumerService);\n return {\n handle: async ({ reason }) => {\n const confirmed = await confirmation.confirm(reason);\n if (!confirmed) {\n throw new Error('navigation-request cancelled by user');\n }\n blockConsumer.clear();\n }\n };\n};\n\n/**\n * Provider wiring {@link NAVIGATION_REQUEST_HANDLER} to the shell application\n * handler. Register once in the shell app providers to override the default\n * module handler.\n */\nexport const provideNavigationRequestShellHandler = (): EnvironmentProviders =>\n makeEnvironmentProviders([\n {\n provide: NAVIGATION_REQUEST_HANDLER,\n useFactory: createNavigationRequestShellHandler\n }\n ]);\n","import {\n NAVIGATION_DECISION_MESSAGE_TYPE,\n type NavigationDecisionMessage,\n type NavigationDecisionV1_0,\n} from '@ama-mfe/messages';\nimport type {\n RoutedMessage,\n} from '@amadeus-it-group/microfrontends';\nimport {\n inject,\n Injectable,\n} from '@angular/core';\nimport {\n AbstractMessageConsumer,\n} from '../../../managers';\nimport {\n NavigationRequestManagerService,\n} from '../navigation-request/navigation-request-manager.service';\n\n/**\n * Agnostic consumer for `navigation-decision` messages — the reply to a\n * previously sent `navigation-request`. Forwards the decision to\n * {@link NavigationRequestManagerService.resolvePendingRequest} so\n * the awaiting caller's promise resolves.\n */\n@Injectable({\n providedIn: 'root'\n})\nexport class NavigationDecisionConsumerService extends AbstractMessageConsumer<NavigationDecisionMessage> {\n /**\n * @inheritdoc\n */\n public readonly type = NAVIGATION_DECISION_MESSAGE_TYPE;\n\n /**\n * @inheritdoc\n */\n public readonly supportedVersions = {\n // eslint-disable-next-line @typescript-eslint/naming-convention -- expected naming for versions\n '1.0': (message: RoutedMessage<NavigationDecisionV1_0>) => {\n this.producerService.resolvePendingRequest(message.payload.correlationId, message.payload.proceed);\n }\n };\n\n private readonly producerService = inject(NavigationRequestManagerService);\n}\n","import {\n inject,\n} from '@angular/core';\nimport {\n type CanActivateChildFn,\n type CanActivateFn,\n} from '@angular/router';\nimport {\n NavigationBlockStateConsumerService,\n} from '../block-state/navigation-block-state-consumer.service';\nimport {\n NavigationBlockConfirmationService,\n} from '../navigation-confirmation/navigation-block-confirmation.service';\nimport {\n NavigationRequestManagerService,\n} from '../navigation-request/navigation-request-manager.service';\n\n/**\n * Shell application guard intercepting shell-initiated navigation (sidebar clicks, URL bar, programmatic `router.navigate`)\n * when the last state received from a module is `blocked`.\n *\n * Can be used as both `canActivate` and `canActivateChild` to ensure the guard runs when entering a route directly\n * or navigating to its children.\n *\n * Flow:\n * - No state received, or `blocked === false` → navigation proceeds.\n * - `blocked === true` → open the confirmation modal.\n * - On cancel/dismiss → return `false`, state is untouched, no message sent to the module.\n * - On confirm → clear the shell mirror, send a `navigation-request` to the originating module (so it can run its unblock /\n * future draft-persistence logic), await its `navigation-decision`, then return `true`.\n */\nexport const navigationBlockShellGuard: CanActivateFn & CanActivateChildFn = async () => {\n const consumer = inject(NavigationBlockStateConsumerService);\n const confirmation = inject(NavigationBlockConfirmationService);\n const negotiation = inject(NavigationRequestManagerService);\n const state = consumer.blockState();\n if (!state?.blocked) {\n return true;\n }\n const confirmed = await confirmation.confirm(state.reason);\n if (!confirmed) {\n return false;\n }\n consumer.clear();\n if (!state.channelId) {\n return true;\n }\n return negotiation.requestNavigation(state.channelId, state.reason);\n};\n","import {\n inject,\n} from '@angular/core';\nimport {\n type CanDeactivateFn,\n} from '@angular/router';\nimport {\n NavigationBlockService,\n} from '../block-state/navigation-block.service';\nimport {\n NavigationRequestManagerService,\n} from '../navigation-request/navigation-request-manager.service';\n\n/**\n * Module-side guard intercepting navigation away from a page that holds unsaved changes.\n *\n * - `blocked === false` → navigation proceeds.\n * - `blocked === true` → broadcast a `navigation-request` to the shell and await the reply. The shell opens the confirmation modal\n * and replies in both cases: `proceed === true` on confirm, `proceed === false` on cancel/dismiss. On proceed, clear the local\n * state and return `true`; on cancel, return `false` and leave the block state intact so the navigation is held and a later\n * attempt can negotiate again.\n *\n * Wire it as `canDeactivate` only on the routes that can actually hold unsaved work — modules opt in per page.\n */\nexport const navigationBlockModuleGuard: CanDeactivateFn<boolean> = async () => {\n const store = inject(NavigationBlockService);\n const negotiation = inject(NavigationRequestManagerService);\n const { blocked, reason } = store.state();\n if (!blocked) {\n return true;\n }\n const proceed = await negotiation.requestNavigation(undefined, reason);\n if (proceed) {\n store.unblock();\n }\n return proceed;\n};\n","import {\n type EnvironmentProviders,\n makeEnvironmentProviders,\n} from '@angular/core';\nimport {\n NAVIGATION_BLOCK_CONFIRMATION,\n} from './navigation-block-confirmation.interface';\nimport {\n BrowserConfirmationStrategy,\n} from './strategies/browser-confirmation.strategy';\n\n/**\n * Convenience helper that explicitly binds the {@link NAVIGATION_BLOCK_CONFIRMATION} token to {@link BrowserConfirmationStrategy}.\n *\n * **Usually unnecessary** — the token already defaults to `BrowserConfirmationStrategy` via its tree-shakable factory,\n * so the helper only re-binds the same value. Use it when you want the binding to be visible at the call site\n * (e.g. for documentation in `app.config.ts`) or when you've previously overridden the token and want to switch back\n * to the default in a child injector.\n *\n * Production apps with a styled modal pass their own strategy via `provideNavigationConfig({ confirmationStrategy })` instead.\n * @example\n * ```typescript\n * // app.config.ts\n * export const appConfig: ApplicationConfig = {\n * providers: [\n * provideDefaultNavigationBlockConfirmation(),\n * // ... other providers\n * ]\n * };\n * ```\n */\nexport function provideDefaultNavigationBlockConfirmation(): EnvironmentProviders {\n return makeEnvironmentProviders([\n {\n provide: NAVIGATION_BLOCK_CONFIRMATION,\n useClass: BrowserConfirmationStrategy\n }\n ]);\n}\n","// Block state (module state, its producer, and the shell-side mirror consumer)\nexport * from './block-state/navigation-block.service';\nexport * from './block-state/navigation-block-state-producer.service';\nexport * from './block-state/navigation-block-state-consumer.service';\n\n// Navigation request (request/decision producer, request consumer, side-specific handlers)\nexport * from './navigation-request/navigation-request-manager.service';\nexport * from './navigation-request/navigation-request-consumer.service';\nexport * from './navigation-request/navigation-request-handler';\nexport * from './navigation-request/navigation-request-module-handler';\nexport * from './navigation-request/navigation-request-shell-handler';\n\n// Navigation decision (decision reply consumer)\nexport * from './navigation-decision/navigation-decision-consumer.service';\n\n// Guards (router guards)\nexport * from './guards/navigation-block.shell-guard';\nexport * from './guards/navigation-block.module-guard';\n\n// UI (confirmation - framework agnostic, browser-based only)\nexport * from './navigation-confirmation/navigation-block-confirmation.interface';\nexport * from './navigation-confirmation/navigation-block-confirmation.service';\nexport * from './navigation-confirmation/strategies/browser-confirmation.strategy';\nexport * from './navigation-confirmation/providers';\n","import type {\n ResizeMessage,\n ResizeV1_0,\n} from '@ama-mfe/messages';\nimport {\n RESIZE_MESSAGE_TYPE,\n} from '@ama-mfe/messages';\nimport {\n MessagePeerService,\n} from '@amadeus-it-group/microfrontends-angular';\nimport {\n afterNextRender,\n inject,\n Injectable,\n} from '@angular/core';\nimport {\n type MessageProducer,\n registerProducer,\n} from '../managers/index';\nimport {\n type ErrorContent,\n} from '../messages/index';\n\n/**\n * This service observe changes in the document's body height.\n * When the height changes, it sends a resize message with the new height, to the connected peers\n */\n@Injectable({\n providedIn: 'root'\n})\nexport class ResizeService implements MessageProducer<ResizeMessage> {\n private actualHeight?: number;\n private readonly messageService = inject(MessagePeerService<ResizeMessage>);\n private resizeObserver?: ResizeObserver;\n\n /**\n * @inheritdoc\n */\n public readonly types = RESIZE_MESSAGE_TYPE;\n\n constructor() {\n registerProducer(this);\n }\n\n /**\n * @inheritdoc\n */\n public handleError(message: ErrorContent<ResizeMessage>): void {\n // eslint-disable-next-line no-console -- error handling placeholder\n console.error('Error in resize service message', message);\n }\n\n /**\n * This method sets up a `ResizeObserver` to observe changes in the document's body height.\n * When the height changes, it sends a resize message with the new height, to the connected peers\n */\n public startResizeObserver() {\n this.resizeObserver = new ResizeObserver(() => {\n const newHeight = document.body.getBoundingClientRect().height;\n if (!this.actualHeight || newHeight !== this.actualHeight) {\n this.actualHeight = newHeight;\n const messageV10 = {\n type: 'resize',\n version: '1.0',\n height: this.actualHeight\n } satisfies ResizeV1_0;\n // TODO: sendBest() is not implemented -- https://github.com/AmadeusITGroup/microfrontends/issues/11\n this.messageService.send(messageV10);\n }\n });\n\n afterNextRender(() => this.resizeObserver?.observe(document.body));\n }\n}\n","import type {\n ThemeMessage,\n ThemeV1_0,\n} from '@ama-mfe/messages';\nimport {\n THEME_MESSAGE_TYPE,\n} from '@ama-mfe/messages';\nimport type {\n RoutedMessage,\n} from '@amadeus-it-group/microfrontends';\nimport {\n inject,\n Injectable,\n SecurityContext,\n} from '@angular/core';\nimport {\n DomSanitizer,\n} from '@angular/platform-browser';\nimport {\n AbstractMessageConsumer,\n} from '../managers/index';\nimport {\n applyTheme,\n downloadApplicationThemeCss,\n} from './theme-helpers';\n\n/**\n * A service that handles theme messages and applies the received theme.\n */\n@Injectable({\n providedIn: 'root'\n})\nexport class ThemeConsumerService extends AbstractMessageConsumer<ThemeMessage> {\n private readonly domSanitizer = inject(DomSanitizer);\n /**\n * The type of messages this service handles ('theme').\n */\n public readonly type = THEME_MESSAGE_TYPE;\n\n /**\n * The supported versions of theme messages and their handlers.\n */\n public readonly supportedVersions = {\n /**\n * Use the message paylod to get the theme and apply it\n * @param message message to consume\n */\n '1.0': async (message: RoutedMessage<ThemeV1_0>) => {\n const sanitizedCss = this.domSanitizer.sanitize(SecurityContext.STYLE, message.payload.css);\n if (sanitizedCss !== null) {\n applyTheme(sanitizedCss);\n }\n try {\n const css = await downloadApplicationThemeCss(message.payload.name, { logger: this.logger });\n applyTheme(css, false);\n } catch (e) {\n this.logger.warn(`No CSS variable for the theme ${message.payload.name}`, e);\n }\n }\n };\n\n constructor() {\n super();\n /**\n * Auto-starts the consumer on creation.\n * @deprecated The constructor auto-starts the consumer for backwards compatibility. It will be removed in v15;\n */\n this.start();\n }\n}\n","import type {\n UserActivityEventType,\n} from '@ama-mfe/messages';\nimport type {\n ActivityProducerConfig,\n} from './interfaces';\n\n/**\n * DOM events that indicate user activity\n */\nexport const ACTIVITY_EVENTS: readonly Exclude<UserActivityEventType, 'visibilitychange'>[] = [\n 'click',\n 'keydown',\n 'scroll',\n 'touchstart',\n 'focus'\n];\n\n/**\n * Custom activity event type for iframe interactions.\n * Emitted programmatically when an iframe gains focus, not from a DOM event listener.\n */\nexport const IFRAME_INTERACTION_EVENT: UserActivityEventType = 'iframeinteraction';\n\n/**\n * Custom activity event type for visibility changes.\n * Emitted programmatically when the document becomes visible, not from a DOM event listener.\n */\nexport const VISIBILITY_CHANGE_EVENT: UserActivityEventType = 'visibilitychange';\n\n/**\n * High-frequency events that require throttling to avoid performance issues\n */\nexport const HIGH_FREQUENCY_EVENTS: readonly UserActivityEventType[] = [\n 'scroll'\n];\n\n/**\n * Default configuration values for the ActivityProducerService\n */\nexport const DEFAULT_ACTIVITY_PRODUCER_CONFIG: Readonly<ActivityProducerConfig> = {\n /** Default throttle time in milliseconds between activity messages */\n throttleMs: 1000,\n /** Default throttle time in milliseconds for high-frequency events */\n highFrequencyThrottleMs: 300,\n /** Whether to track nested iframes by default */\n trackNestedIframes: false,\n /** Default interval for iframe activity signals (30 seconds) */\n nestedIframeActivityEmitIntervalMs: 30_000,\n /** Default polling interval for detecting iframe focus changes (1 second) */\n nestedIframePollIntervalMs: 1000\n};\n","import {\n Injectable,\n} from '@angular/core';\nimport type {\n IframeActivityTrackerConfig,\n} from './interfaces';\n\n/**\n * Service that tracks user activity within nested iframes.\n *\n * Polls document.activeElement frequently to detect when an iframe has focus.\n * When an iframe gains focus, emits immediately and then at the configured interval.\n * When focus leaves the iframe, it stops emitting.\n *\n * This is needed because cross-origin iframes don't fire focus/blur events\n * that bubble to the parent, and the regular activity tracker can't detect\n * user interactions inside iframes.\n */\n@Injectable({\n providedIn: 'root'\n})\nexport class IframeActivityTrackerService {\n /**\n * Interval ID for polling activeElement\n */\n private pollIntervalId?: ReturnType<typeof setInterval>;\n\n /**\n * Interval ID for emitting activity at configured interval\n */\n private activityIntervalId?: ReturnType<typeof setInterval>;\n\n /**\n * Current configuration\n */\n private config?: IframeActivityTrackerConfig;\n\n /**\n * Bound visibility change handler for cleanup\n */\n private readonly visibilityChangeHandler = () => this.handleVisibilityChange();\n\n /**\n * Whether the service has been started\n */\n private get started() {\n return this.config !== undefined;\n }\n\n /**\n * Whether we are currently tracking iframe activity (iframe had focus on last poll)\n */\n private get isTrackingIframeActivity() {\n return this.activityIntervalId !== undefined;\n }\n\n /**\n * Polls document.activeElement to detect iframe focus changes.\n * When iframe gains focus: emit immediately and start activity interval.\n * When iframe loses focus: stop activity interval.\n */\n private checkActiveElement(): void {\n const activeElement = document.activeElement;\n const iframeFocused = activeElement instanceof HTMLIFrameElement;\n\n if (iframeFocused && !this.isTrackingIframeActivity) {\n // Iframe just gained focus - emit immediately and start activity interval\n this.config?.onActivity();\n this.startActivityInterval();\n } else if (!iframeFocused && this.isTrackingIframeActivity) {\n // Focus left the iframe - stop activity interval\n this.stopActivityInterval();\n }\n }\n\n /**\n * Handles visibility change events to pause/resume polling when tab visibility changes.\n */\n private handleVisibilityChange(): void {\n if (document.visibilityState === 'visible') {\n this.startPolling();\n } else {\n this.stopPolling();\n this.stopActivityInterval();\n }\n }\n\n /**\n * Starts polling for active element changes.\n */\n private startPolling(): void {\n if (this.pollIntervalId) {\n return;\n }\n this.pollIntervalId = setInterval(\n () => this.checkActiveElement(),\n this.config!.pollIntervalMs\n );\n }\n\n /**\n * Stops polling for active element changes.\n */\n private stopPolling(): void {\n if (this.pollIntervalId) {\n clearInterval(this.pollIntervalId);\n this.pollIntervalId = undefined;\n }\n }\n\n /**\n * Starts the activity emission interval.\n */\n private startActivityInterval(): void {\n this.stopActivityInterval();\n this.activityIntervalId = setInterval(() => {\n this.config?.onActivity();\n }, this.config!.activityIntervalMs);\n }\n\n /**\n * Stops the activity emission interval.\n */\n private stopActivityInterval(): void {\n if (this.activityIntervalId) {\n clearInterval(this.activityIntervalId);\n this.activityIntervalId = undefined;\n }\n }\n\n /**\n * Starts tracking nested iframes within the document.\n * @param config Configuration for the tracker\n */\n public start(config: IframeActivityTrackerConfig): void {\n if (this.started) {\n return;\n }\n this.config = config;\n\n // Listen for visibility changes to pause/resume polling\n document.addEventListener('visibilitychange', this.visibilityChangeHandler);\n\n // Only start polling if document is currently visible\n if (document.visibilityState === 'visible') {\n this.startPolling();\n }\n }\n\n /**\n * Stops tracking nested iframes and cleans up resources.\n */\n public stop(): void {\n if (!this.started) {\n return;\n }\n\n document.removeEventListener('visibilitychange', this.visibilityChangeHandler);\n this.stopPolling();\n this.stopActivityInterval();\n this.config = undefined;\n }\n}\n","import {\n USER_ACTIVITY_MESSAGE_TYPE,\n type UserActivityEventType,\n type UserActivityMessage,\n type UserActivityMessageV1_0,\n} from '@ama-mfe/messages';\nimport {\n afterNextRender,\n DestroyRef,\n inject,\n Injectable,\n signal,\n} from '@angular/core';\nimport {\n LoggerService,\n} from '@o3r/logger';\nimport {\n ConnectionService,\n} from '../connect/index';\nimport {\n type MessageProducer,\n registerProducer,\n} from '../managers';\nimport type {\n ErrorContent,\n} from '../messages';\nimport {\n ACTIVITY_EVENTS,\n DEFAULT_ACTIVITY_PRODUCER_CONFIG,\n HIGH_FREQUENCY_EVENTS,\n IFRAME_INTERACTION_EVENT,\n VISIBILITY_CHANGE_EVENT,\n} from './config';\nimport {\n IframeActivityTrackerService,\n} from './iframe-activity-tracker.service';\nimport type {\n ActivityInfo,\n ActivityProducerConfig,\n} from './interfaces';\n\n/**\n * Generic service that tracks user activity and sends messages.\n * Can be configured for different contexts (cockpit or modules) via start() method parameter.\n */\n@Injectable({\n providedIn: 'root'\n})\nexport class ActivityProducerService implements MessageProducer<UserActivityMessage> {\n private readonly messageService = inject(ConnectionService);\n private readonly destroyRef = inject(DestroyRef);\n private readonly iframeActivityTracker = inject(IframeActivityTrackerService);\n private readonly logger = inject(LoggerService);\n\n /**\n * Timestamp of the last sent activity message\n */\n private lastSentTimestamp = 0;\n\n /**\n * Bound event listeners for cleanup\n */\n private readonly boundListeners = new Map<UserActivityEventType, EventListener>();\n\n /**\n * Last emission timestamps for throttled high-frequency events\n */\n private readonly lastEmitTimestamps = new Map<UserActivityEventType, number>();\n\n /**\n * Whether the service has been started\n */\n private started = false;\n\n /**\n * Signal that emits local activity information.\n * This allows consumers to react to activity detected by this producer.\n */\n private readonly localActivityWritable = signal<ActivityInfo | undefined>(undefined);\n\n /**\n * Read-only signal containing the latest local activity info.\n * Use this signal to react to locally detected activity.\n */\n public readonly localActivity = this.localActivityWritable.asReadonly();\n\n /**\n * @inheritdoc\n */\n public readonly types = USER_ACTIVITY_MESSAGE_TYPE;\n\n constructor() {\n registerProducer(this);\n this.destroyRef.onDestroy(() => this.stop());\n }\n\n /**\n * Checks if a high-frequency event should be processed based on throttle timing.\n * This is called before shouldBroadcast to avoid expensive filter operations on every event.\n * @param eventType The type of activity event\n * @param throttleMs The throttle interval in milliseconds\n * @returns true if the event should be processed, false if it should be skipped\n */\n private shouldProcessHighFrequencyEvent(eventType: UserActivityEventType, throttleMs: number): boolean {\n const now = Date.now();\n const lastEmit = this.lastEmitTimestamps.get(eventType) ?? 0;\n\n if (now - lastEmit >= throttleMs) {\n this.lastEmitTimestamps.set(eventType, now);\n return true;\n }\n return false;\n }\n\n /**\n * Handles activity by sending a throttled message and emitting to local signal.\n * @param eventType The type of activity event that occurred\n * @param configObject\n */\n private onActivity(eventType: UserActivityEventType, configObject: ActivityProducerConfig): void {\n const now = Date.now();\n\n // Always emit local activity signal (not throttled for local detection)\n this.localActivityWritable.set({\n channelId: 'local',\n eventType,\n timestamp: now\n });\n\n // Send message with throttling\n if (now - this.lastSentTimestamp >= configObject.throttleMs) {\n this.lastSentTimestamp = now;\n this.sendActivityMessage(eventType, now);\n }\n }\n\n /**\n * Sends an activity message.\n * @param eventType The type of activity event\n * @param timestamp The timestamp of the event\n */\n private sendActivityMessage(eventType: UserActivityEventType, timestamp: number): void {\n const message: UserActivityMessageV1_0 = {\n type: USER_ACTIVITY_MESSAGE_TYPE,\n version: '1.0',\n eventType,\n timestamp\n };\n const registeredPeersIdsForUserActivity = [...this.messageService.knownPeers.entries()]\n .filter(([peerId]) => peerId !== this.messageService.id)\n .filter(([, messages]) => messages.some((msg) => msg.type === USER_ACTIVITY_MESSAGE_TYPE))\n .map((peer) => peer[0]);\n // send messages to the peers waiting for user activity\n // avoids sending the message to modules which are not using it\n if (registeredPeersIdsForUserActivity.length > 0) {\n this.messageService.send(message, { to: registeredPeersIdsForUserActivity });\n }\n }\n\n /**\n * @inheritdoc\n */\n public handleError(message: ErrorContent<UserActivityMessage>): void {\n this.logger.error('Error in user activity service message', message);\n }\n\n /**\n * Starts observing user activity events.\n * When activity is detected, it sends a throttled message.\n * Event listeners are attached after the next render to ensure DOM is ready.\n * @param config Configuration for the activity producer\n */\n public start(config?: Partial<ActivityProducerConfig>): void {\n if (this.started) {\n return;\n }\n this.started = true;\n const configObject: ActivityProducerConfig = { ...DEFAULT_ACTIVITY_PRODUCER_CONFIG, ...config };\n\n // Always use afterNextRender to ensure DOM is ready in all contexts\n afterNextRender(() => {\n ACTIVITY_EVENTS.forEach((eventType) => {\n const isHighFrequency = HIGH_FREQUENCY_EVENTS.includes(eventType);\n const listener = (event: Event) => {\n // do nothing if the event is a key kept pressed\n if (eventType === 'keydown' && event instanceof KeyboardEvent && event.repeat) {\n return;\n }\n // For high-frequency events, apply throttle BEFORE shouldBroadcast\n // to avoid expensive filter operations on every event (e.g. reflows)\n if (isHighFrequency && !this.shouldProcessHighFrequencyEvent(eventType, configObject.highFrequencyThrottleMs!)) {\n return;\n }\n // Apply filter if provided\n if (configObject.shouldBroadcast?.(event) === false) {\n return;\n }\n this.onActivity(eventType, configObject);\n };\n this.boundListeners.set(eventType, listener);\n document.addEventListener(eventType, listener, { passive: true, capture: true });\n });\n\n // Also listen for visibility changes\n const visibilityListener = () => {\n if (document.visibilityState === 'visible') {\n this.onActivity(VISIBILITY_CHANGE_EVENT, configObject);\n }\n };\n this.boundListeners.set(VISIBILITY_CHANGE_EVENT, visibilityListener);\n document.addEventListener(VISIBILITY_CHANGE_EVENT, visibilityListener, { passive: true, capture: true });\n\n // Set up nested iframe tracking if enabled\n if (configObject.trackNestedIframes) {\n this.iframeActivityTracker.start({\n pollIntervalMs: configObject.nestedIframePollIntervalMs,\n activityIntervalMs: configObject.nestedIframeActivityEmitIntervalMs,\n onActivity: () => this.onActivity(IFRAME_INTERACTION_EVENT, configObject)\n });\n }\n });\n }\n\n /**\n * Stops observing user activity events.\n */\n public stop(): void {\n this.boundListeners.forEach((listener, eventType) => {\n document.removeEventListener(eventType, listener, { capture: true });\n });\n this.boundListeners.clear();\n this.lastEmitTimestamps.clear();\n this.iframeActivityTracker.stop();\n }\n}\n","import {\n USER_ACTIVITY_MESSAGE_TYPE,\n type UserActivityMessageV1_0,\n} from '@ama-mfe/messages';\nimport type {\n RoutedMessage,\n} from '@amadeus-it-group/microfrontends';\nimport {\n inject,\n Injectable,\n signal,\n} from '@angular/core';\nimport {\n type BasicMessageConsumer,\n ConsumerManagerService,\n} from '../managers';\nimport {\n ActivityInfo,\n} from './interfaces';\n\n/**\n * Generic service that consumes user activity messages.\n * Can be used in both shell (to receive from modules) and modules (to receive from shell).\n */\n@Injectable({\n providedIn: 'root'\n})\nexport class ActivityConsumerService implements BasicMessageConsumer<UserActivityMessageV1_0> {\n private readonly consumerManagerService = inject(ConsumerManagerService);\n\n /**\n * Signal containing the latest activity info\n */\n private readonly latestReceivedActivityWritable = signal<ActivityInfo | undefined>(undefined);\n\n /**\n * Read-only signal containing the latest activity info received from other peers via the message protocol.\n * Access the timestamp via latestReceivedActivity()?.timestamp\n */\n public readonly latestReceivedActivity = this.latestReceivedActivityWritable.asReadonly();\n\n /**\n * @inheritdoc\n */\n public readonly type = USER_ACTIVITY_MESSAGE_TYPE;\n\n /**\n * @inheritdoc\n */\n public readonly supportedVersions: Record<string, (message: RoutedMessage<UserActivityMessageV1_0>) => void> = {\n // eslint-disable-next-line @typescript-eslint/naming-convention -- Version keys follow message versioning convention\n '1.0': (message) => {\n this.latestReceivedActivityWritable.set({\n channelId: message.from || 'unknown',\n eventType: message.payload.eventType,\n timestamp: message.payload.timestamp\n });\n }\n };\n\n /**\n * Starts the activity consumer service by registering it with the consumer manager.\n */\n public start(): void {\n this.consumerManagerService.register(this);\n }\n\n /**\n * Stops the activity consumer service by unregistering it from the consumer manager.\n */\n public stop(): void {\n this.consumerManagerService.unregister(this);\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":["ConnectionService"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ama-mfe-ng-utils.mjs","sources":["../../src/connect/connect-directive.ts","../../src/messages/available-sender.ts","../../src/messages/error-sender.ts","../../src/managers/producer-manager-service.ts","../../src/managers/consumer-manager-service.ts","../../src/managers/abstract-message-consumer-service.ts","../../src/managers/utils.ts","../../src/history/history-consumer-service.ts","../../src/history/history-providers.ts","../../src/host-info/host-info.ts","../../src/host-info/host-info-pipe.ts","../../src/messages/error/base.ts","../../src/messages/user-activity.ts","../../src/utils.ts","../../src/connect/connect-providers.ts","../../src/resize/resize-consumer-service.ts","../../src/resize/scalable-directive.ts","../../src/theme/theme-helpers.ts","../../src/theme/theme-producer-service.ts","../../src/theme/apply-theme-pipe.ts","../../src/iframe-embed/sandbox.directive.ts","../../src/iframe-embed/iframe-embed.component.ts","../../src/iframe-embed/iframe-embed.template.html","../../src/navigation/navigation-consumer-service.ts","../../src/navigation/route-memorize/route-memorize-service.ts","../../src/navigation/restore-route-pipe.ts","../../src/navigation/route-memorize/route-memorize-directive.ts","../../src/navigation/routing-service.ts","../../src/navigation/navigation-exit/block-state/navigation-block.service.ts","../../src/navigation/navigation-exit/block-state/navigation-block-state-producer.service.ts","../../src/navigation/navigation-exit/block-state/navigation-block-state-consumer.service.ts","../../src/navigation/navigation-exit/navigation-request/navigation-request-manager.service.ts","../../src/navigation/navigation-exit/navigation-request/navigation-request-handler.ts","../../src/navigation/navigation-exit/navigation-request/navigation-request-consumer.service.ts","../../src/navigation/navigation-exit/navigation-request/navigation-request-module-handler.ts","../../src/navigation/navigation-exit/navigation-confirmation/strategies/browser-confirmation.strategy.ts","../../src/navigation/navigation-exit/navigation-confirmation/navigation-block-confirmation.interface.ts","../../src/navigation/navigation-exit/navigation-confirmation/navigation-block-confirmation.service.ts","../../src/navigation/navigation-exit/navigation-request/navigation-request-shell-handler.ts","../../src/navigation/navigation-exit/navigation-decision/navigation-decision-consumer.service.ts","../../src/navigation/navigation-exit/guards/navigation-block.shell-guard.ts","../../src/navigation/navigation-exit/guards/navigation-block.module-guard.ts","../../src/navigation/navigation-exit/navigation-confirmation/providers.ts","../../src/navigation/navigation-exit/index.ts","../../src/resize/resize-producer-service.ts","../../src/theme/theme-consumer-service.ts","../../src/user-activity/config.ts","../../src/user-activity/iframe-activity-tracker.service.ts","../../src/user-activity/activity-producer.service.ts","../../src/user-activity/activity-consumer.service.ts","../../src/ama-mfe-ng-utils.ts"],"sourcesContent":["import {\n MessagePeerService,\n} from '@amadeus-it-group/microfrontends-angular';\nimport {\n computed,\n Directive,\n effect,\n ElementRef,\n HostBinding,\n inject,\n input,\n SecurityContext,\n} from '@angular/core';\nimport {\n DomSanitizer,\n SafeResourceUrl,\n} from '@angular/platform-browser';\nimport {\n LoggerService,\n} from '@o3r/logger';\n\n@Directive({\n selector: 'iframe[connect]',\n standalone: true\n})\nexport class ConnectDirective {\n /**\n * The connection ID required for the message peer service.\n */\n public readonly connect = input.required<string>();\n\n /**\n * The sanitized source URL for the iframe.\n */\n public readonly src = input<SafeResourceUrl>();\n\n /**\n * Binds the `src` attribute of the iframe to the sanitized source URL.\n */\n @HostBinding('src')\n public get srcAttr() {\n return this.src();\n }\n\n private readonly messageService = inject(MessagePeerService);\n private readonly domSanitizer = inject(DomSanitizer);\n private readonly iframeElement = inject<ElementRef<HTMLIFrameElement>>(ElementRef).nativeElement;\n\n private readonly clientOrigin = computed(() => {\n const src = this.src();\n const srcString = src && this.domSanitizer.sanitize(SecurityContext.RESOURCE_URL, src);\n return srcString && new URL(srcString).origin;\n });\n\n constructor() {\n const logger = inject(LoggerService);\n\n // When the origin or connection ID change - reconnect the message service\n effect((onCleanup) => {\n let stopHandshakeListening = () => { /* no op */ };\n\n const origin = this.clientOrigin();\n const id = this.connect();\n const source = this.iframeElement.contentWindow;\n\n // listen for handshakes only if we know the origin and were given a connection ID\n if (origin && source && id) {\n try {\n stopHandshakeListening = this.messageService.listen({ id, source, origin });\n } catch (e) {\n logger.error(`Failed to start listening for (connection ID: ${id})`, e);\n }\n }\n\n // stop listening for handshakes and disconnect previous connection when:\n // - origin/connection ID change\n // - the directive is destroyed\n onCleanup(() => {\n stopHandshakeListening();\n this.messageService.disconnect();\n });\n });\n }\n}\n","import type {\n DeclareMessages,\n} from '@amadeus-it-group/microfrontends';\nimport type {\n BasicMessageConsumer,\n} from '../managers/interfaces';\n\n/**\n * Gets the available consumers and formats them into a {@link DeclareMessages} object.\n * @param consumers - The list of registered message consumers.\n * @returns The formatted DeclareMessages object.\n */\nexport const getAvailableConsumers = (consumers: BasicMessageConsumer[]) => {\n return {\n type: 'declare_messages',\n version: '1.0',\n messages: consumers.flatMap(({ type, supportedVersions }) => Object.keys(supportedVersions).map((version) => ({ type, version })))\n } satisfies DeclareMessages;\n};\n","import type {\n VersionedMessage,\n} from '@amadeus-it-group/microfrontends';\nimport type {\n MessagePeerServiceType,\n} from '@amadeus-it-group/microfrontends-angular';\nimport type {\n ERROR_MESSAGE_TYPE,\n ErrorContent,\n ErrorMessageV1_0,\n} from './error/index';\n\n/**\n * Helper function to send an error message by the given endpoint (peer)\n * @param peer The endpoint sending the message\n * @param content the content of the error message to be sent\n */\nexport const sendError = (peer: MessagePeerServiceType<any>, content: ErrorContent) => {\n return peer.send({\n type: 'error',\n version: '1.0',\n ...content\n } satisfies ErrorMessageV1_0);\n};\n\n/**\n * Check if the given message is of type error and the error reson is present too\n * @param message the message to be checked\n */\n// eslint-disable-next-line @stylistic/max-len -- constant definition\nexport const isErrorMessage = (message: any): message is VersionedMessage & { type: typeof ERROR_MESSAGE_TYPE } & ErrorContent => (message && typeof message === 'object' && message.type === 'error' && !!message.reason);\n","import type {\n VersionedMessage,\n} from '@amadeus-it-group/microfrontends';\nimport {\n Injectable,\n} from '@angular/core';\nimport type {\n ErrorContent,\n} from '../messages/index';\nimport type {\n MessageProducer,\n} from './interfaces';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class ProducerManagerService {\n private readonly registeredProducers = new Set<MessageProducer>();\n\n /** Get the list of registered producers of messages. The list will contain unique elements */\n public get producers() {\n return [...this.registeredProducers];\n }\n\n /**\n * Register a producer of a message\n * @param producer The instance of the message producer\n */\n public register(producer: MessageProducer) {\n this.registeredProducers.add((producer));\n }\n\n /**\n * Unregister a producer of a message\n * @param producer The instance of the message producer\n */\n public unregister(producer: MessageProducer) {\n this.registeredProducers.delete((producer));\n }\n\n /**\n * Handles the received error message for the given message type by invoking the appropriate producer handlers.\n * @template T - The type of the message, extending from Message.\n * @param message - The error message to handle.\n * @returns - A promise that resolves to true if the error was handled by at least one handler, false otherwise.\n */\n public async dispatchError<T extends VersionedMessage = VersionedMessage>(message: ErrorContent<T>) {\n const handlers = this.producers\n .filter(({ types }) => (Array.isArray(types) ? types : [types]).includes(message.source.type));\n\n const handlersPresent = handlers.length > 0;\n if (handlersPresent) {\n await Promise.all(\n // eslint-disable-next-line @typescript-eslint/await-thenable -- `handleError` can return void or Promise<void>\n handlers.map((handler) => handler.handleError(message))\n );\n }\n return handlersPresent;\n }\n}\n","import {\n RoutedMessage,\n VersionedMessage,\n} from '@amadeus-it-group/microfrontends';\nimport {\n MessagePeerService,\n} from '@amadeus-it-group/microfrontends-angular';\nimport {\n effect,\n inject,\n Injectable,\n signal,\n} from '@angular/core';\nimport {\n takeUntilDestroyed,\n} from '@angular/core/rxjs-interop';\nimport {\n LoggerService,\n} from '@o3r/logger';\nimport {\n getAvailableConsumers,\n} from '../messages/available-sender';\nimport {\n isErrorMessage,\n sendError,\n} from '../messages/error-sender';\nimport type {\n BasicMessageConsumer,\n} from './interfaces';\nimport {\n ProducerManagerService,\n} from './producer-manager-service';\n\nconst VERSION_MATCH = /^(\\d+)\\.(\\d+)$/;\n\ninterface ParsedVersion {\n major: number;\n minor: number;\n raw: string;\n}\n\n/**\n * Parses a \"major.minor\" version string. Returns undefined if the string is malformed.\n * @param version\n */\nconst parseVersion = (version: string): ParsedVersion | undefined => {\n const match = VERSION_MATCH.exec(version);\n if (!match) {\n return undefined;\n }\n const [major, minor] = match.slice(1).map(Number);\n return { major, minor, raw: version };\n};\n\n@Injectable({\n providedIn: 'root'\n})\nexport class ConsumerManagerService {\n private readonly messageService = inject(MessagePeerService);\n private readonly producerManagerService = inject(ProducerManagerService);\n private readonly registeredConsumers = signal<BasicMessageConsumer[]>([]);\n private readonly logger = inject(LoggerService);\n\n /** The list of registered consumers */\n public readonly consumers = this.registeredConsumers.asReadonly();\n\n constructor() {\n this.messageService.messages$.pipe(takeUntilDestroyed()).subscribe((message) => this.consumeMessage(message));\n\n // Each time a consumer is registered/unregistered update the list of registered messages.\n effect(() => {\n const declareMessages = getAvailableConsumers(this.consumers());\n\n // registering consumed messages locally for validation\n for (const message of declareMessages.messages) {\n this.messageService.registerMessage(message);\n }\n });\n }\n\n /**\n * Consume a received message\n * @param message the received message body\n */\n private async consumeMessage(message: RoutedMessage<VersionedMessage>) {\n if (isErrorMessage(message.payload)) {\n const isHandled = await this.producerManagerService.dispatchError(message.payload);\n if (!isHandled) {\n this.logger.warn('Error message not handled', message);\n }\n return;\n }\n\n return this.consumeAdditionalMessage(message);\n }\n\n /**\n * Call the registered message callback(s) to consume the given message\n * Handle error messages of internal communication protocol messages\n * @param message message to consume\n */\n private async consumeAdditionalMessage(message: RoutedMessage<VersionedMessage>) {\n if (!message.payload) {\n this.logger.warn('Cannot consume a messages with undefined payload.');\n return;\n }\n\n const consumers = this.consumers();\n const typeMatchingConsumers = consumers\n .filter((consumer) => consumer.type === message.payload.type);\n\n if (typeMatchingConsumers.length === 0) {\n this.logger.warn(`No consumer found for message type: ${message.payload.type}`);\n return sendError(this.messageService, { reason: 'unknown_type', source: message.payload });\n }\n\n // Semver-compatible dispatch: for an incoming v{major}.{minor}, pick each consumer's highest\n // declared v{major}.{n} where n <= minor.\n // Major versions are isolated: no cross-major fallback in either direction. An incoming v2.x\n // will never fall back to a v1.x handler (breaking changes), and a consumer that declares\n // only v2.x will not match an incoming v1.x (the consumer is ahead of the producer). Both\n // result in a version_mismatch error.\n const messageVersion = parseVersion(message.payload.version);\n const resolvedConsumers = messageVersion\n ? typeMatchingConsumers\n .map((consumer) => {\n const fallbackVersion = Object.keys(consumer.supportedVersions)\n .map((version) => parseVersion(version))\n .filter((v): v is ParsedVersion =>\n !!v && v.major === messageVersion.major && v.minor <= messageVersion.minor)\n .toSorted((a, b) => b.minor - a.minor)\n .at(0);\n return fallbackVersion && { consumer, version: fallbackVersion.raw };\n })\n .filter((entry): entry is { consumer: typeof typeMatchingConsumers[number]; version: string } => !!entry)\n : [];\n\n if (resolvedConsumers.length === 0) {\n this.logger.warn(`No consumer found for message version: ${message.payload.version}`);\n return sendError(this.messageService, { reason: 'version_mismatch', source: message.payload });\n }\n\n await Promise.all(\n resolvedConsumers\n .map(async ({ consumer, version }) => {\n try {\n await consumer.supportedVersions[version](message);\n } catch (error) {\n this.logger.error('Error while consuming message', error);\n sendError(this.messageService, { reason: 'internal_error', source: message.payload });\n }\n })\n );\n }\n\n /**\n * Register a message consumer\n * @param consumer an instance of message consumer\n */\n public register(consumer: BasicMessageConsumer) {\n this.registeredConsumers.update((consumers) => {\n return [...new Set(consumers).add(consumer)];\n });\n }\n\n /**\n * Unregister a message consumer\n * @param consumer an instance of message consumer\n */\n public unregister(consumer: BasicMessageConsumer) {\n this.registeredConsumers.update((consumers) => {\n return consumers.filter((c) => c !== consumer);\n });\n }\n}\n","import {\n VersionedMessage,\n} from '@amadeus-it-group/microfrontends';\nimport {\n DestroyRef,\n inject,\n} from '@angular/core';\nimport {\n LoggerService,\n} from '@o3r/logger';\nimport {\n ConsumerManagerService,\n} from './consumer-manager-service';\nimport type {\n MessageConsumer,\n} from './interfaces';\n\n/**\n * An abstract base class for message consumers that provides common functionality for registering and unregistering with the ConsumerManagerService.\n *\n * This class implements the MessageConsumer interface and provides a default implementation for the start and stop methods.\n * It also handles the automatic registration and unregistration of the consumer with the ConsumerManagerService when the service is created and destroyed.\n *\n * To use this class, simply extend it and implement the required properties (type and supportedVersions) and any additional logic needed to consume messages.\n */\nexport abstract class AbstractMessageConsumer<T extends VersionedMessage = VersionedMessage> implements MessageConsumer<T> {\n /** The service used to register the consumer */\n protected readonly consumerManagerService = inject(ConsumerManagerService);\n /** The reference used to handle the destruction of the consumer */\n protected readonly destroyRef = inject(DestroyRef);\n /** Logger shared with subclasses. */\n protected readonly logger = inject(LoggerService);\n\n private unregisterCallback?: (() => void);\n\n /** @inheritdoc */\n public abstract readonly type: MessageConsumer<T>['type'];\n\n /** @inheritdoc */\n public abstract readonly supportedVersions: MessageConsumer<T>['supportedVersions'];\n\n /** @inheritdoc */\n public start(): void {\n this.consumerManagerService.register(this);\n this.unregisterCallback?.();\n this.unregisterCallback = this.destroyRef.onDestroy(() => this.stop());\n }\n\n /** @inheritdoc */\n public stop(): void {\n this.consumerManagerService.unregister(this);\n this.unregisterCallback?.();\n this.unregisterCallback = undefined;\n }\n}\n","import {\n DestroyRef,\n inject,\n} from '@angular/core';\nimport {\n ConsumerManagerService,\n} from './consumer-manager-service';\nimport type {\n MessageConsumer,\n MessageProducer,\n} from './interfaces';\nimport {\n ProducerManagerService,\n} from './producer-manager-service';\n\n/**\n * Method to call in the constructor of a producer\n * @note should be used in injection context\n * @param producer\n */\nexport const registerProducer = (producer: MessageProducer) => {\n const producerManagerService = inject(ProducerManagerService);\n producerManagerService.register(producer);\n\n inject(DestroyRef).onDestroy(() => {\n producerManagerService.unregister(producer);\n });\n};\n\n/**\n * Method to call in the constructor of a consumer\n * @note should be used in injection context\n * @param consumer\n */\nexport const registerConsumer = (consumer: MessageConsumer) => {\n const consumerManagerService = inject(ConsumerManagerService);\n consumerManagerService.register(consumer);\n\n inject(DestroyRef).onDestroy(() => {\n consumerManagerService.unregister(consumer);\n });\n};\n","import type {\n HistoryMessage,\n HistoryV1_0,\n} from '@ama-mfe/messages';\nimport {\n HISTORY_MESSAGE_TYPE,\n} from '@ama-mfe/messages';\nimport type {\n RoutedMessage,\n} from '@amadeus-it-group/microfrontends';\nimport {\n Injectable,\n} from '@angular/core';\nimport {\n AbstractMessageConsumer,\n} from '../managers/index';\n\n/**\n * A service that handles history messages.\n *\n * This service listens for history messages and navigates accordingly.\n */\n@Injectable({\n providedIn: 'root'\n})\nexport class HistoryConsumerService extends AbstractMessageConsumer<HistoryMessage> {\n /**\n * The type of messages this service handles.\n */\n public readonly type = HISTORY_MESSAGE_TYPE;\n\n /**\n * @inheritdoc\n */\n public readonly supportedVersions = {\n /**\n * Use the message payload to navigate in the history\n * @param message message to consume\n */\n '1.0': (message: RoutedMessage<HistoryV1_0>) => {\n history.go(message.payload.delta);\n }\n };\n\n constructor() {\n super();\n /**\n * Auto-starts the consumer on creation.\n * @deprecated The constructor auto-starts the consumer for backwards compatibility. It will be removed in v15;\n */\n this.start();\n }\n}\n","import {\n HistoryMessage,\n HistoryV1_0,\n} from '@ama-mfe/messages';\nimport {\n MessagePeerService,\n} from '@amadeus-it-group/microfrontends-angular';\nimport {\n inject,\n provideAppInitializer,\n} from '@angular/core';\n\n/**\n * Provides necessary overrides to make the module navigation in history work in an embedded context :\n * - Prevent pushing states to history, replace state instead\n * - Handle history navigation via History messages to let the host manage the states\n */\nexport function provideHistoryOverrides() {\n return provideAppInitializer(() => {\n const messageService = inject(MessagePeerService<HistoryMessage>);\n const navigate = (delta: number) => {\n messageService.send({\n type: 'history',\n version: '1.0',\n delta\n } satisfies HistoryV1_0);\n };\n Object.defineProperty(history, 'pushState', {\n value: (data: any, unused: string, url?: string | URL | null) => {\n history.replaceState(data, unused, url);\n },\n writable: false,\n configurable: false\n });\n Object.defineProperty(history, 'back', {\n value: () => navigate(-1),\n writable: false,\n configurable: false\n });\n Object.defineProperty(history, 'forward', {\n value: () => navigate(1),\n writable: false,\n configurable: false\n });\n Object.defineProperty(history, 'go', {\n value: (delta: number) => navigate(delta),\n writable: false,\n configurable: false\n });\n });\n}\n","const SESSION_STORAGE_KEY = 'ama-mfe-host-info';\n\n/**\n * Search parameter to add to the URL when embedding an iframe containing the URL of the host.\n * This is needed to support Firefox (on which {@link https://developer.mozilla.org/docs/Web/API/Location/ancestorOrigins | location.ancestorOrigins} is not currently supported)\n * in case of redirection inside the iframe.\n */\nexport const MFE_HOST_URL_PARAM = 'ama-mfe-host-url';\n\n/**\n * Search parameter to add to the URL to let a module know on which application it's embedded\n */\nexport const MFE_HOST_APPLICATION_ID_PARAM = 'ama-mfe-host-app-id';\n\n/**\n * Search parameter to add to the URL to identify the application in the network of peers in the communication protocol\n */\nexport const MFE_MODULE_APPLICATION_ID_PARAM = 'ama-mfe-module-app-id';\n\n/** The list of query parameters which can be set by the host */\nexport const hostQueryParams = [MFE_HOST_URL_PARAM, MFE_HOST_APPLICATION_ID_PARAM, MFE_MODULE_APPLICATION_ID_PARAM];\n\n/**\n * Information set up at host level to use in embedded context\n */\nexport interface MFEHostInformation {\n /**\n * URL of the host application\n */\n hostURL?: string;\n /**\n * ID of the host application\n */\n hostApplicationId?: string;\n\n /**\n * ID of the module to embed defined at host level\n */\n moduleApplicationId?: string;\n}\n\n/**\n * Gather the host information from the url parameters\n * The host url will use the first found among:\n * - look for the search parameter {@link MFE_HOST_URL_PARAM} in the URL of the iframe\n * - use the first item in `location.ancestorOrigins` (currently not supported on Firefox)\n * - use `document.referrer` (will only work if called before any redirection in the iframe)\n * The host application ID is taken from the search parameter {@link MFE_HOST_APPLICATION_ID_PARAM} in the URL of the iframe\n * The module application ID is taken from the search parameter {@link MFE_APPLICATION_ID_PARAM} in the URL of the iframe\n * @param locationParam - A {@link Location} object with information about the current location of the document. Defaults to global {@link location}.\n */\nexport function getHostInfo(locationParam: Location = location): MFEHostInformation {\n const searchParams = new URLSearchParams(locationParam.search);\n const storedHostInfo = JSON.parse(sessionStorage.getItem(SESSION_STORAGE_KEY) || '{}') as MFEHostInformation;\n return {\n hostURL: searchParams.get(MFE_HOST_URL_PARAM) || storedHostInfo.hostURL || locationParam.ancestorOrigins?.[0] || document.referrer,\n hostApplicationId: searchParams.get(MFE_HOST_APPLICATION_ID_PARAM) || storedHostInfo.hostApplicationId,\n moduleApplicationId: searchParams.get(MFE_MODULE_APPLICATION_ID_PARAM) || storedHostInfo.moduleApplicationId\n };\n}\n\n/**\n * Gather the host information from the url parameters and handle the persistence in session storage.\n */\nexport function persistHostInfo() {\n const hostInfo = getHostInfo();\n sessionStorage.setItem(SESSION_STORAGE_KEY, JSON.stringify(hostInfo));\n}\n","import {\n inject,\n Pipe,\n PipeTransform,\n SecurityContext,\n} from '@angular/core';\nimport {\n DomSanitizer,\n type SafeResourceUrl,\n} from '@angular/platform-browser';\nimport {\n MFE_HOST_APPLICATION_ID_PARAM,\n MFE_HOST_URL_PARAM,\n MFE_MODULE_APPLICATION_ID_PARAM,\n} from './host-info';\n\n/**\n * A pipe that adds the host information in the URL of an iframe,\n */\n@Pipe({\n name: 'hostInfo'\n})\nexport class HostInfoPipe implements PipeTransform {\n private readonly domSanitizer = inject(DomSanitizer);\n\n /**\n * Transforms the given URL or SafeResourceUrl by appending query parameters.\n * @param url - The URL or SafeResourceUrl to be transformed.\n * @param options - hostId and moduleId\n * @returns - The transformed SafeResourceUrl or undefined if the input URL is invalid.\n */\n public transform(url: string, options: { hostId: string; moduleId?: string }): string;\n public transform(url: SafeResourceUrl, options: { hostId: string; moduleId?: string }): SafeResourceUrl;\n public transform(url: undefined, options: { hostId: string; moduleId?: string }): undefined;\n public transform(url: string | SafeResourceUrl | undefined, options: { hostId: string; moduleId?: string }): string | SafeResourceUrl | undefined {\n const urlString = typeof url === 'string'\n ? url\n : this.domSanitizer.sanitize(SecurityContext.RESOURCE_URL, url || null);\n\n if (!url) {\n return undefined;\n }\n\n if (urlString) {\n const moduleUrl = new URL(urlString);\n moduleUrl.searchParams.set(MFE_HOST_URL_PARAM, window.location.origin);\n moduleUrl.searchParams.set(MFE_HOST_APPLICATION_ID_PARAM, options.hostId);\n if (options.moduleId) {\n moduleUrl.searchParams.set(MFE_MODULE_APPLICATION_ID_PARAM, options.moduleId);\n }\n\n const moduleUrlStringyfied = moduleUrl.toString();\n return typeof url === 'string' ? moduleUrlStringyfied : this.domSanitizer.bypassSecurityTrustResourceUrl(moduleUrlStringyfied);\n }\n }\n}\n","import type {\n VersionedMessage,\n} from '@amadeus-it-group/microfrontends';\n\n/** the error message type */\nexport const ERROR_MESSAGE_TYPE = 'error';\n\n/**\n * The possible reasons for an error.\n */\nexport type ErrorReason = 'unknown_type' | 'version_mismatch' | 'internal_error';\n\n/**\n * The content of an error message.\n * @template S - The type of the source message.\n */\nexport interface ErrorContent<S extends VersionedMessage = VersionedMessage> {\n /** The reason for the error */\n reason: ErrorReason;\n /** The source message that caused the error */\n source: S;\n}\n","import {\n USER_ACTIVITY_MESSAGE_TYPE,\n type UserActivityMessage,\n} from '@ama-mfe/messages';\n\n/**\n * Type guard to check if a message is a user activity message\n * @param message The message to check\n */\nexport function isUserActivityMessage(message: unknown): message is UserActivityMessage {\n return (\n typeof message === 'object'\n && message !== null\n && 'type' in message\n && message.type === USER_ACTIVITY_MESSAGE_TYPE\n );\n}\n","import type {\n Message,\n PeerConnectionOptions,\n} from '@amadeus-it-group/microfrontends';\nimport {\n getHostInfo,\n} from './host-info';\nimport {\n ERROR_MESSAGE_TYPE,\n} from './messages';\n\n/**\n * A constant array of known message types and their versions.\n */\nexport const KNOWN_MESSAGES = [\n {\n type: ERROR_MESSAGE_TYPE,\n version: '1.0'\n }\n] as const satisfies Message[];\n\n/**\n * Returns the default options for starting a client endpoint peer connection.\n * As `origin`, it will take the hostURL from {@link getHostInfo} and the `window` will be the parent window.\n */\nexport function getDefaultClientEndpointStartOptions(): PeerConnectionOptions {\n const hostInfo = getHostInfo();\n if (hostInfo.hostURL) {\n return {\n origin: new URL(hostInfo.hostURL).origin,\n window: window.parent\n };\n }\n return {};\n}\n\n/**\n * Return `true` if embedded inside an iframe, `false` otherwise\n * @param windowParam - A {@link window} object with information about the current window of the document. Defaults to global {@link window}.\n */\nexport function isEmbedded(windowParam: Window = window) {\n return windowParam.top !== windowParam.self;\n}\n\n/**\n * Generate a string id suitable for correlating asynchronous request/reply messages across the micro-frontend bus.\n * Uses `crypto.randomUUID` when the runtime supports it, otherwise falls back to a timestamp + random suffix.\n * @param prefix Optional prefix used by the fallback path to make ids easier to identify in logs (ignored when `crypto.randomUUID` is available).\n */\nexport function generateCorrelationId(prefix = 'corr'): string {\n if (typeof crypto !== 'undefined' && typeof crypto.randomUUID === 'function') {\n return crypto.randomUUID();\n }\n return `${prefix}-${Date.now()}-${Math.random().toString(36).slice(2, 10)}`;\n}\n","import {\n MESSAGE_PEER_CONFIG,\n MESSAGE_PEER_CONNECT_OPTIONS,\n MessagePeerConfig,\n MessagePeerService,\n} from '@amadeus-it-group/microfrontends-angular';\nimport {\n makeEnvironmentProviders,\n} from '@angular/core';\nimport {\n type Logger,\n} from '@o3r/logger';\nimport {\n provideHistoryOverrides,\n} from '../history';\nimport {\n getHostInfo,\n persistHostInfo,\n} from '../host-info';\nimport {\n getDefaultClientEndpointStartOptions,\n isEmbedded,\n KNOWN_MESSAGES,\n} from '../utils';\nimport {\n ConnectionConfig,\n ConnectionService,\n} from './connect-resources';\n\n/** Options to configure the connection inside the communication protocol */\nexport interface ConnectionConfigOptions extends Omit<ConnectionConfig, 'id'> {\n /** @inheritdoc */\n id?: string;\n /** Logger used to gather information */\n logger?: Logger;\n}\n\n/**\n * Provide the communication protocol connection configuration\n * @param connectionConfigOptions The identifier of the application in the communication protocol ecosystem plus the types of messages able to exchange and a logger object\n */\nexport function provideConnection(connectionConfigOptions?: ConnectionConfigOptions) {\n persistHostInfo();\n const connectionId = (isEmbedded() && getHostInfo().moduleApplicationId) || connectionConfigOptions?.id;\n if (!connectionId) {\n (connectionConfigOptions?.logger || console).error('An id (moduleId) needs to be provided for the application in order to establish a connection inside the communication protocol');\n return makeEnvironmentProviders([]);\n }\n const config: MessagePeerConfig = {\n id: connectionId,\n messageCheckStrategy: 'version',\n knownMessages: [...KNOWN_MESSAGES, ...(connectionConfigOptions?.knownMessages || [])]\n };\n return makeEnvironmentProviders([\n {\n provide: MESSAGE_PEER_CONFIG, useValue: config\n },\n {\n provide: MESSAGE_PEER_CONNECT_OPTIONS, useValue: getDefaultClientEndpointStartOptions()\n },\n {\n // in the case of the ConnectionService will extend the base service 'useExisting' should be used\n provide: MessagePeerService, useClass: ConnectionService, deps: [MESSAGE_PEER_CONFIG]\n },\n ...isEmbedded() ? [provideHistoryOverrides()] : []\n ]);\n}\n","import type {\n ResizeMessage,\n ResizeV1_0,\n} from '@ama-mfe/messages';\nimport {\n RESIZE_MESSAGE_TYPE,\n} from '@ama-mfe/messages';\nimport type {\n RoutedMessage,\n} from '@amadeus-it-group/microfrontends';\nimport {\n Injectable,\n signal,\n} from '@angular/core';\nimport {\n AbstractMessageConsumer,\n} from '../managers/index';\n\n/**\n * This service listens for resize messages and updates the height of elements based on the received messages.\n */\n@Injectable({\n providedIn: 'root'\n})\nexport class ResizeConsumerService extends AbstractMessageConsumer<ResizeMessage> {\n private readonly newHeight = signal<{ height: number; channelId: string } | undefined>(undefined);\n\n /**\n * A readonly signal that provides the new height information from the channel.\n */\n public readonly newHeightFromChannel = this.newHeight.asReadonly();\n\n /**\n * The type of messages this service handles ('resize').\n */\n public readonly type = RESIZE_MESSAGE_TYPE;\n\n /**\n * The supported versions of resize messages and their handlers.\n */\n public supportedVersions = {\n /**\n * Use the message paylod to compute a new height and emit it via the public signal\n * @param message message to consume\n */\n '1.0': (message: RoutedMessage<ResizeV1_0>) => this.newHeight.set({ height: message.payload.height, channelId: message.from })\n };\n\n constructor() {\n super();\n /**\n * Auto-starts the consumer on creation.\n * @deprecated The constructor auto-starts the consumer for backwards compatibility. It will be removed in v15;\n */\n this.start();\n }\n}\n","import {\n afterNextRender,\n computed,\n DestroyRef,\n Directive,\n effect,\n ElementRef,\n inject,\n input,\n Renderer2,\n signal,\n} from '@angular/core';\nimport {\n takeUntilDestroyed,\n} from '@angular/core/rxjs-interop';\nimport {\n fromEvent,\n throttleTime,\n} from 'rxjs';\nimport {\n ResizeConsumerService,\n} from './resize-consumer-service';\n\n/**\n * A directive that adjusts the min-height of an element based on resize messages from a specified channel.\n *\n * This directive observes both resize messages from embedded modules and layout changes (window resize,\n * container resize via `ResizeObserver`) to dynamically set the element's min-height. This ensures:\n * - No blank space when the window or container grows (min-height fills available space)\n * - No double scrollbar when the window shrinks (element height adapts to available space)\n *\n * The available height is calculated by:\n * 1. Finding the nearest scrollable parent container and using its `clientHeight`\n * 2. Falling back to viewport calculation: `window.innerHeight - element's top position`\n *\n * The element's min-height is updated whenever:\n * - A resize message is received from the matching channel (using `scalable` or `connect` input as channel ID)\n * - The window is resized\n * - The parent container's size changes (detected via `ResizeObserver`)\n */\n@Directive({\n selector: '[scalable]',\n standalone: true\n})\nexport class ScalableDirective {\n /**\n * The connection ID for the element, used as channel id backup\n */\n public readonly connect = input<string>();\n\n /**\n * The channel id\n */\n public readonly scalable = input<string>();\n\n private readonly resizeHandler = inject(ResizeConsumerService);\n private readonly destroyRef = inject(DestroyRef);\n private readonly elem = inject<ElementRef<HTMLElement>>(ElementRef);\n private readonly renderer = inject(Renderer2);\n\n /** Signal holding the current available container height */\n private readonly availableHeight = signal<number | undefined>(undefined);\n\n /** Tracks the last applied min-height to avoid redundant style updates */\n private lastAppliedMinHeight: number | undefined;\n\n /** ResizeObserver for watching parent container size changes */\n private resizeObserver?: ResizeObserver;\n\n /** Cached container element */\n private container: HTMLElement | null = null;\n\n /**\n * This signal checks if the current channel requesting the resize matches the channel ID from the resize handler.\n * If they match, it returns the new height information; otherwise, it returns undefined.\n */\n private readonly newHeightFromChannel = computed(() => {\n const channelAskingResize = this.scalable() || this.connect();\n const newHeightFromChannel = this.resizeHandler.newHeightFromChannel();\n if (channelAskingResize && newHeightFromChannel?.channelId === channelAskingResize) {\n return newHeightFromChannel;\n }\n return undefined;\n });\n\n constructor() {\n this.resizeHandler.start();\n\n // Start height observer after layout is complete (read phase ensures styles are applied)\n afterNextRender({\n read: () => this.startHeightObserver()\n });\n\n // Apply height from module's resize message\n effect(() => this.applyMinHeight(this.newHeightFromChannel()?.height));\n\n // Apply height from viewport when window/layout changes\n effect(() => this.applyMinHeight(this.availableHeight()));\n\n // Cleanup ResizeObserver on destroy\n this.destroyRef.onDestroy(() => {\n this.resizeObserver?.disconnect();\n });\n }\n\n /**\n * Calculate the available height from the scrollable container.\n */\n private calculateAvailableHeight(): number | undefined {\n if (this.container) {\n return this.container.clientHeight || undefined;\n }\n\n // Fallback: use viewport\n const rect = this.elem.nativeElement.getBoundingClientRect();\n const availableHeight = window.innerHeight - rect.top;\n return availableHeight > 0 ? availableHeight : undefined;\n }\n\n /**\n * Find the nearest scrollable parent element.\n * @param element\n */\n private findScrollableParent(element: HTMLElement): HTMLElement | null {\n let parent = element.parentElement;\n while (parent) {\n const style = window.getComputedStyle(parent);\n const { overflowY, overflow } = style;\n if (overflowY === 'auto' || overflowY === 'scroll' || overflow === 'auto' || overflow === 'scroll') {\n return parent;\n }\n parent = parent.parentElement;\n }\n return null;\n }\n\n /**\n * Start observing size changes.\n */\n private startHeightObserver(): void {\n // Find and cache the scrollable container\n this.container = this.findScrollableParent(this.elem.nativeElement);\n this.observeWindowResize();\n\n this.resizeObserver = new ResizeObserver(() => this.updateAvailableHeight());\n this.resizeObserver.observe(this.container || document.body);\n\n this.updateAvailableHeight();\n }\n\n /**\n * Subscribe to window resize events and update the available height.\n */\n private observeWindowResize(): void {\n fromEvent(window, 'resize').pipe(\n throttleTime(16),\n takeUntilDestroyed(this.destroyRef)\n ).subscribe(() => {\n this.updateAvailableHeight();\n });\n }\n\n /**\n * Update the available height signal with the current container height.\n */\n private updateAvailableHeight(): void {\n const height = this.calculateAvailableHeight();\n if (height && height !== this.availableHeight()) {\n this.availableHeight.set(height);\n }\n }\n\n /**\n * Apply min-height style only if defined and changed.\n * @param height\n */\n private applyMinHeight(height: number | undefined): void {\n if (height && height !== this.lastAppliedMinHeight) {\n this.lastAppliedMinHeight = height;\n this.renderer.setStyle(this.elem.nativeElement, 'min-height', `${height}px`);\n }\n }\n}\n","import {\n type Logger,\n} from '@o3r/logger';\nimport {\n getHostInfo,\n} from '../host-info';\n\n/** Default suffix for an url containing a theme css file */\nexport const THEME_URL_SUFFIX = '-theme.css';\n/** Default name for the query parameter containing the theme name */\nexport const THEME_QUERY_PARAM_NAME = 'theme';\n\n/** Options and context for Style helpers */\nexport interface StyleHelperOptions {\n /**\n * Logger to reporter the logs\n */\n logger?: Logger;\n}\n\n/**\n * Fetches a CSS document and returns the content as a string.\n * @param cssPath - The path to download the CSS.\n * @param options Options and context for Style helpers\n * @returns The content of the CSS document as a string, empty string if the fetch fails.\n */\nexport async function getStyle(cssPath: string, options?: StyleHelperOptions): Promise<string> {\n try {\n const myRequest = new Request(cssPath);\n const response = await fetch(myRequest);\n const cssText = response.ok ? await response.text() : '';\n return cssText;\n } catch (error) {\n options?.logger?.warn(`Failed to download style from: ${cssPath} with error: ${error?.toString()}`);\n }\n return '';\n}\n\n/**\n * Applies the given CSS theme as a stylesheet.\n * @param themeValue - CSS as text containing a theme definition.\n * @param cleanPrevious - Whether to remove previously applied stylesheets if no themeValue provided. Default is true.\n */\nexport function applyTheme(themeValue?: string, cleanPrevious = true): void {\n if (themeValue !== undefined) {\n const sheet = new CSSStyleSheet();\n sheet.replaceSync(themeValue);\n document.adoptedStyleSheets = cleanPrevious ? [sheet] : [...document.adoptedStyleSheets, sheet];\n } else if (cleanPrevious) { // remove the styles if the theme value comes undefined or empty string\n document.adoptedStyleSheets = [];\n }\n}\n\n/**\n * Download the application additional theme\n * @param theme Name of the theme to download from the current application\n * @param options Options and context for Style helpers\n */\nexport function downloadApplicationThemeCss(theme: string, options?: StyleHelperOptions) {\n const cssHref = `${theme.endsWith('.css') ? theme : theme + THEME_URL_SUFFIX}`;\n return getStyle(cssHref, options);\n}\n\n/**\n * Applies the initial theme based on the URL query parameters.\n *\n * This function fetches the CSS theme specified in the URL query parameters and applies it as a stylesheet.\n * If a referrer is present, it also attempts to fetch and apply the theme from the referrer's URL.\n * @param options Options and context for Style helpers\n */\nexport async function applyInitialTheme(options?: StyleHelperOptions): Promise<PromiseSettledResult<void>[] | undefined> {\n const searchParams = new URLSearchParams(window.location.search);\n const theme = searchParams.get(THEME_QUERY_PARAM_NAME);\n document.adoptedStyleSheets = [];\n if (theme) {\n const themeRequest: Promise<void>[] = [\n downloadApplicationThemeCss(theme, options).then((styleToApply) => applyTheme(styleToApply, false))\n ];\n const hostInfo = getHostInfo();\n if (hostInfo.hostURL) {\n const url = new URL(hostInfo.hostURL);\n url.pathname += `${url.pathname.endsWith('/') ? '' : '/'}${theme}`;\n themeRequest.unshift(getStyle(url.toString(), options).then((styleToApply) => applyTheme(styleToApply, false)));\n }\n\n return Promise.allSettled(themeRequest);\n }\n return undefined;\n}\n","import type {\n ThemeMessage,\n ThemeV1_0,\n} from '@ama-mfe/messages';\nimport {\n THEME_MESSAGE_TYPE,\n ThemeStructure,\n} from '@ama-mfe/messages';\nimport {\n MessagePeerService,\n} from '@amadeus-it-group/microfrontends-angular';\nimport {\n effect,\n inject,\n Injectable,\n signal,\n} from '@angular/core';\nimport {\n LoggerService,\n} from '@o3r/logger';\nimport {\n type MessageProducer,\n registerProducer,\n} from '../managers/index';\nimport {\n type ErrorContent,\n} from '../messages/index';\nimport {\n applyTheme,\n getStyle,\n THEME_QUERY_PARAM_NAME,\n THEME_URL_SUFFIX,\n} from './theme-helpers';\n/**\n * This service exposing the current theme signal\n */\n@Injectable({\n providedIn: 'root'\n})\nexport class ThemeProducerService implements MessageProducer<ThemeMessage> {\n private readonly messageService = inject(MessagePeerService<ThemeMessage>);\n private readonly logger = inject(LoggerService);\n private previousTheme: ThemeStructure | undefined;\n private readonly window = inject(Window, { optional: true }) || window;\n\n private readonly currentThemeSelection;\n /** Current selected theme signal */\n public readonly currentTheme;\n\n /**\n * The type of messages this service handles ('theme').\n */\n public readonly types = THEME_MESSAGE_TYPE;\n\n constructor() {\n registerProducer(this);\n\n // get the current theme name from the url (if any) and emit a first value for the current theme\n const parentUrl = new URL(this.window.location.toString());\n const selectedThemeName = parentUrl.searchParams.get(THEME_QUERY_PARAM_NAME);\n this.currentThemeSelection = signal<ThemeStructure | undefined>(selectedThemeName\n ? {\n name: selectedThemeName,\n css: null\n }\n : undefined);\n this.currentTheme = this.currentThemeSelection.asReadonly();\n\n if (selectedThemeName) {\n void this.changeTheme(selectedThemeName);\n }\n\n // When the current theme changes, apply it to the current application\n effect(() => {\n const themeObj = this.currentTheme();\n if (themeObj?.css !== null) {\n applyTheme(themeObj?.css);\n }\n });\n\n /**\n * This effect listens for changes in the `currentTheme` signal. If a valid theme object with CSS is present,\n * it creates a theme message and sends it via the message service.\n */\n effect(() => {\n const themeObj = this.currentTheme();\n if (themeObj && themeObj.css !== null) {\n const messageV10 = {\n type: 'theme',\n name: themeObj.name,\n css: themeObj.css,\n version: '1.0'\n } satisfies ThemeV1_0;\n // TODO: sendBest() is not yet implemented -- https://github.com/AmadeusITGroup/microfrontends/issues/11\n this.messageService.send(messageV10);\n }\n });\n }\n\n /**\n * Changes the current theme to the specified theme name.\n * @param themeName - The name of the theme to change to.\n */\n public async changeTheme(themeName?: string): Promise<void> {\n const cssHref = themeName && `${themeName}${THEME_URL_SUFFIX}`;\n const styleObj = cssHref ? await getStyle(cssHref) : '';\n this.currentThemeSelection.update((theme) => {\n this.previousTheme = theme;\n return themeName\n ? { name: themeName, css: styleObj }\n : undefined;\n });\n }\n\n /**\n * Reverts to the previous theme.\n */\n public revertToPreviousTheme(): void {\n this.currentThemeSelection.set(this.previousTheme);\n }\n\n /**\n * @inheritdoc\n */\n public handleError(message: ErrorContent<ThemeV1_0>): void {\n this.logger.error('Error in theme service message', message);\n this.revertToPreviousTheme();\n }\n}\n","import {\n inject,\n Pipe,\n PipeTransform,\n SecurityContext,\n} from '@angular/core';\nimport {\n DomSanitizer,\n type SafeResourceUrl,\n} from '@angular/platform-browser';\nimport {\n ThemeProducerService,\n} from './theme-producer-service';\n\n/**\n * A pipe that applies the current theme from a theme manager service, to a given URL or SafeResourceUrl, as query param\n */\n@Pipe({\n name: 'applyTheme'\n})\nexport class ApplyTheme implements PipeTransform {\n private readonly themeManagerService = inject(ThemeProducerService);\n private readonly domSanitizer = inject(DomSanitizer);\n\n /**\n * Transforms the given URL or SafeResourceUrl by appending the current theme value as a query parameter.\n * @param url - The URL or SafeResourceUrl to be transformed.\n * @returns The transformed SafeResourceUrl or undefined if the input URL is invalid.\n */\n public transform(url: string): string;\n public transform(url: SafeResourceUrl): SafeResourceUrl;\n public transform(url: undefined): undefined;\n public transform(url: string | SafeResourceUrl | undefined): string | SafeResourceUrl | undefined {\n if (!url) {\n return undefined;\n }\n const currentTheme = this.themeManagerService.currentTheme();\n const urlString = typeof url === 'string'\n ? url\n : this.domSanitizer.sanitize(SecurityContext.RESOURCE_URL, url);\n\n if (urlString) {\n const moduleUrl = new URL(urlString);\n if (currentTheme) {\n moduleUrl.searchParams.set('theme', currentTheme.name);\n }\n const moduleUrlStringyfied = moduleUrl.toString();\n return typeof url === 'string' ? moduleUrlStringyfied : this.domSanitizer.bypassSecurityTrustResourceUrl(moduleUrlStringyfied);\n }\n\n return undefined;\n }\n}\n","import {\n Directive,\n ElementRef,\n inject,\n input,\n OnInit,\n Renderer2,\n} from '@angular/core';\n\n/**\n * Directive to set the sandbox attribute on an iframe element.\n * Uses Renderer2 to set the attribute once at initialization, respecting the security intent (no runtime changes).\n * @example\n * ```html\n * <iframe [mfeSandbox]=\"'allow-scripts allow-same-origin'\" />\n * ```\n */\n@Directive({\n selector: 'iframe[mfeSandbox]'\n})\nexport class SandboxDirective implements OnInit {\n private readonly elementRef = inject(ElementRef);\n private readonly renderer = inject(Renderer2);\n\n /**\n * The sandbox permissions to apply to the iframe.\n * Defaults to empty string (most restrictive: all restrictions apply).\n * Set once at initialization; runtime changes are ignored for security reasons.\n */\n public readonly mfeSandbox = input('');\n\n public ngOnInit(): void {\n this.renderer.setAttribute(this.elementRef.nativeElement, 'sandbox', this.mfeSandbox());\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n inject,\n input,\n ViewEncapsulation,\n} from '@angular/core';\nimport {\n DomSanitizer,\n} from '@angular/platform-browser';\nimport type {\n SafeResourceUrl,\n} from '@angular/platform-browser';\nimport {\n ConnectDirective,\n} from '../connect/connect-directive';\nimport {\n HostInfoPipe,\n} from '../host-info/host-info-pipe';\nimport {\n ScalableDirective,\n} from '../resize/scalable-directive';\nimport {\n ApplyTheme,\n} from '../theme/apply-theme-pipe';\nimport {\n SandboxDirective,\n} from './sandbox.directive';\n\n/**\n * Presentational component for rendering an iframe with MFE integration directives.\n * Applies host info injection, theming and cross-iframe communication.\n */\n@Component({\n selector: 'mfe-iframe-embed',\n imports: [\n ConnectDirective,\n ScalableDirective,\n ApplyTheme,\n HostInfoPipe,\n SandboxDirective\n ],\n templateUrl: './iframe-embed.template.html',\n styleUrl: './iframe-embed.style.scss',\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class IframeEmbedComponent {\n private readonly domSanitizer = inject(DomSanitizer);\n\n /** The URL for the iframe source (plain string or pre-sanitized SafeResourceUrl). */\n public readonly src = input.required<string | SafeResourceUrl>();\n\n /** The sanitized URL, auto-sanitized if a plain string is provided. */\n public readonly safeSrc = computed(() => {\n const value = this.src();\n return typeof value === 'string'\n ? this.domSanitizer.bypassSecurityTrustResourceUrl(value)\n : value;\n });\n\n /** The unique identifier for the module, used for cross-iframe communication. */\n public readonly moduleId = input.required<string>();\n\n /** The host application identifier sent to the embedded module. */\n public readonly hostApplicationId = input.required<string>();\n\n /**\n * The sandbox attribute for the iframe.\n * Pass through to the SandboxDirective on the iframe element.\n */\n public readonly sandbox = input('allow-scripts allow-same-origin');\n}\n","@let hostInfoOptions = {hostId: hostApplicationId(), moduleId: moduleId()};\n<iframe\n [connect]=\"hostInfoOptions.moduleId\"\n scalable\n [src]=\"safeSrc() | hostInfo: hostInfoOptions | applyTheme\"\n [mfeSandbox]=\"sandbox()\">\n</iframe>\n","import {\n NAVIGATION_MESSAGE_TYPE,\n} from '@ama-mfe/messages';\nimport type {\n NavigationMessage,\n NavigationV1_0,\n NavigationV1_1,\n} from '@ama-mfe/messages';\nimport type {\n RoutedMessage,\n} from '@amadeus-it-group/microfrontends';\nimport {\n inject,\n Injectable,\n} from '@angular/core';\nimport {\n ActivatedRoute,\n Router,\n} from '@angular/router';\nimport {\n Subject,\n} from 'rxjs';\nimport {\n hostQueryParams,\n} from '../host-info';\nimport {\n AbstractMessageConsumer,\n} from '../managers/index';\n\n/**\n * A service that handles navigation messages and routing.\n *\n * This service listens for navigation messages and updates the router state accordingly.\n */\n@Injectable({\n providedIn: 'root'\n})\nexport class NavigationConsumerService extends AbstractMessageConsumer<NavigationMessage> {\n private readonly router = inject(Router);\n private readonly activeRoute = inject(ActivatedRoute);\n private readonly requestedUrl = new Subject<{ url: string; channelId?: string }>();\n\n /**\n * An observable that emits the requested URL and optional channel ID.\n */\n public readonly requestedUrl$ = this.requestedUrl.asObservable();\n\n /**\n * The type of messages this service handles.\n */\n public readonly type = NAVIGATION_MESSAGE_TYPE;\n\n /**\n * @inheritdoc\n */\n public readonly supportedVersions = {\n /**\n * Use the message paylod to compute a new url and emit it via the public subject\n * Additionally navigate to the new url\n * @param message message to consume\n */\n '1.0': (message: RoutedMessage<NavigationV1_0>) => {\n const channelId = message.from || undefined;\n this.requestedUrl.next({ url: message.payload.url, channelId });\n this.navigate(message.payload.url);\n },\n /**\n * Same as 1.0 but applies the navigation extras (e.g. replaceUrl) forwarded by the producer\n * so the host router reproduces the original history semantics.\n * @param message message to consume\n */\n // eslint-disable-next-line @stylistic/quote-props -- keep quotes for consistency with '1.0'\n '1.1': (message: RoutedMessage<NavigationV1_1>) => {\n const channelId = message.from || undefined;\n this.requestedUrl.next({ url: message.payload.url, channelId });\n this.navigate(message.payload.url, message.payload.extras);\n }\n };\n\n constructor() {\n super();\n /**\n * Auto-starts the consumer on creation.\n * @deprecated The constructor auto-starts the consumer for backwards compatibility. It will be removed in v15;\n */\n this.start();\n }\n\n /**\n * Parses a URL and returns an object containing the paths and query parameters.\n * @param url - The URL to parse.\n * @returns An object containing the paths and query parameters.\n */\n private parseUrl(url: string): { paths: string[]; queryParams: { [key: string]: string } } {\n const urlObject = new URL(window.origin + url);\n const paths = urlObject.pathname.split('/').filter((segment) => !!segment);\n const queryParams = Object.fromEntries(urlObject.searchParams.entries());\n return { paths, queryParams };\n }\n\n /**\n * Navigates to the specified URL.\n * @param url - The URL to navigate to.\n * @param extras - Optional navigation extras forwarded from the embedded application.\n */\n private navigate(url: string, extras?: NavigationV1_1['extras']) {\n const { paths, queryParams } = this.parseUrl(url);\n // No need to keep these in the URL\n hostQueryParams.forEach((key) => delete queryParams[key]);\n void this.router.navigate(paths, {\n relativeTo: this.activeRoute.children.at(-1),\n queryParams,\n replaceUrl: extras?.replaceUrl\n });\n }\n}\n","import {\n Injectable,\n} from '@angular/core';\n\n/**\n * This service allows routes to be memorized with an optional lifetime and provides methods to retrieve and manage these routes.\n */\n@Injectable({\n providedIn: 'root'\n})\nexport class RouteMemorizeService {\n private readonly routeTimers: { [x: string]: ReturnType<typeof setTimeout> } = {};\n /** All memorized routes */\n public readonly routeStack: { [x: string]: string } = {};\n\n /**\n * Memorizes a route for a given channel ID with an optional lifetime.\n * @param channelId - The ID of the channel to memorize the route for.\n * @param url - The URL of the route to memorize.\n * @param liveTime - The optional lifetime of the memorized route in milliseconds. If provided, the route will be removed after this time.\n */\n public memorizeRoute(channelId: string, url: string, liveTime?: number): void {\n this.routeStack[channelId] = url;\n\n const timerRef = this.routeTimers[channelId];\n if (timerRef) {\n clearTimeout(timerRef);\n }\n if (liveTime && liveTime > 0) {\n this.routeTimers[channelId] = setTimeout(() => {\n delete this.routeStack[channelId];\n delete this.routeTimers[channelId];\n }, liveTime);\n }\n }\n\n /**\n * Retrieves the memorized route for a given channel ID.\n * @param channelId - The ID of the channel to retrieve the memorized route for.\n * @returns The memorized route URL or undefined if no route is memorized for the given channel ID.\n */\n public getRoute(channelId: string): string | undefined {\n return this.routeStack[channelId];\n }\n}\n","import {\n inject,\n Pipe,\n PipeTransform,\n SecurityContext,\n} from '@angular/core';\nimport {\n DomSanitizer,\n type SafeResourceUrl,\n} from '@angular/platform-browser';\nimport {\n ActivatedRoute,\n} from '@angular/router';\nimport {\n RouteMemorizeService,\n} from './route-memorize/route-memorize-service';\n\n/**\n * Options for restoring a route with optional query parameters and memory channel ID.\n */\nexport interface RestoreRouteOptions {\n /**\n * Whether to propagate query parameters from the top window to the module URL.\n */\n propagateQueryParams?: boolean;\n\n /**\n * Whether to override existing query parameters in the module URL with those from the top window.\n */\n overrideQueryParams?: boolean;\n\n /**\n * The memory channel ID used to retrieve the memorized route.\n * If provided, the memorized route associated with this ID will be used.\n */\n memoryChannelId?: string;\n}\n\n/**\n * A pipe that restores a route with optional query parameters and memory channel ID.\n *\n * This pipe is used to transform a URL or SafeResourceUrl by appending query parameters\n * and adjusting the pathname based on the current active route and memorized route.\n */\n@Pipe({\n name: 'restoreRoute'\n})\nexport class RestoreRoute implements PipeTransform {\n private readonly activeRoute = inject(ActivatedRoute);\n private readonly domSanitizer = inject(DomSanitizer);\n private readonly routeMemorizeService = inject(RouteMemorizeService, { optional: true });\n private readonly window = inject(Window, { optional: true }) || window;\n\n /**\n * Transforms the given URL or SafeResourceUrl by appending query parameters and adjusting the pathname.\n * @param url - The URL or SafeResourceUrl to be transformed.\n * @param options - Optional parameters to control the transformation. {@link RestoreRouteOptions}\n * @returns - The transformed SafeResourceUrl or undefined if the input URL is invalid.\n */\n public transform(url: string, options?: Partial<RestoreRouteOptions>): string;\n public transform(url: SafeResourceUrl, options?: Partial<RestoreRouteOptions>): SafeResourceUrl;\n public transform(url: undefined, options?: Partial<RestoreRouteOptions>): undefined;\n public transform(url: string | SafeResourceUrl | undefined, options?: Partial<RestoreRouteOptions>): string | SafeResourceUrl | undefined {\n const urlString = typeof url === 'string'\n ? url\n : this.domSanitizer.sanitize(SecurityContext.RESOURCE_URL, url || null);\n\n if (!url) {\n return undefined;\n }\n\n if (urlString) {\n const moduleUrl = new URL(urlString);\n const queryParamsModule = new URLSearchParams(moduleUrl.searchParams);\n\n const channelId = options?.memoryChannelId;\n const memorizedRoute = channelId && this.routeMemorizeService?.getRoute(channelId);\n const topWindowUrl = new URL(memorizedRoute ? this.window.origin + memorizedRoute : this.window.location.href);\n const queryParamsTopWindow = new URLSearchParams(topWindowUrl.search);\n\n if (options?.propagateQueryParams) {\n for (const [key, value] of queryParamsTopWindow) {\n if (options?.overrideQueryParams || !queryParamsModule.has(key)) {\n queryParamsModule.set(key, value);\n }\n }\n }\n moduleUrl.search = queryParamsModule.toString();\n moduleUrl.pathname += topWindowUrl.pathname.split(`/${this.activeRoute.routeConfig?.path}`).pop() || '';\n moduleUrl.pathname = moduleUrl.pathname.replace(/\\/{2,}/g, '/');\n const moduleUrlStringyfied = moduleUrl.toString();\n return typeof url === 'string' ? moduleUrlStringyfied : this.domSanitizer.bypassSecurityTrustResourceUrl(moduleUrlStringyfied);\n }\n }\n}\n","import {\n computed,\n Directive,\n effect,\n inject,\n input,\n untracked,\n} from '@angular/core';\nimport {\n toSignal,\n} from '@angular/core/rxjs-interop';\nimport {\n NavigationConsumerService,\n} from '../navigation-consumer-service';\nimport {\n RouteMemorizeService,\n} from './route-memorize-service';\n\n@Directive({\n selector: 'iframe[memorizeRoute]',\n standalone: true\n})\nexport class RouteMemorizeDirective {\n /**\n * Whether to memorize the route.\n * Default is true.\n */\n public readonly memorizeRoute = input<boolean | undefined | ''>(true);\n\n /**\n * The ID used to memorize the route.\n */\n public readonly memorizeRouteId = input<string>();\n\n /**\n * The maximum age for memorizing the route.\n * Default is 0.\n */\n public readonly memorizeMaxAge = input<number>(0);\n\n /**\n * The maximum age for memorizing the route, used as a fallback.\n * Default is 0.\n */\n public readonly memorizeRouteMaxAge = input<number>(0);\n\n /**\n * The connection ID for the iframe where the actual directive is applied.\n */\n public readonly connect = input<string>();\n\n private readonly maxAge = computed(() => {\n return this.memorizeMaxAge() || this.memorizeRouteMaxAge();\n });\n\n constructor() {\n const memory = inject(RouteMemorizeService);\n const requestedUrlSignal = toSignal(inject(NavigationConsumerService).requestedUrl$);\n\n /**\n * This effect listens for changes in the `memorizeRoute`, `requestedUrlSignal`, and `memorizeRouteId` or `connect` inputs.\n * If `memorizeRoute` is not false and a requested URL with a matching channel ID is found, it memorizes the route using the route memory service.\n */\n effect(() => {\n const memorizeRoute = this.memorizeRoute();\n if (memorizeRoute === false) {\n return;\n }\n const requested = requestedUrlSignal();\n const channelId = this.connect();\n const id = this.memorizeRouteId() || channelId;\n if (requested && id && requested.channelId === channelId) {\n memory.memorizeRoute(id, requested.url, untracked(this.maxAge));\n }\n });\n }\n}\n","import type {\n NavigationMessage,\n NavigationV1_0,\n NavigationV1_1,\n} from '@ama-mfe/messages';\nimport {\n NAVIGATION_MESSAGE_TYPE,\n} from '@ama-mfe/messages';\nimport type {\n RoutedMessage,\n} from '@amadeus-it-group/microfrontends';\nimport {\n MessagePeerService,\n} from '@amadeus-it-group/microfrontends-angular';\nimport {\n inject,\n Injectable,\n} from '@angular/core';\nimport {\n takeUntilDestroyed,\n} from '@angular/core/rxjs-interop';\nimport {\n ActivatedRoute,\n NavigationEnd,\n Router,\n} from '@angular/router';\nimport {\n LoggerService,\n} from '@o3r/logger';\nimport {\n filter,\n map,\n} from 'rxjs';\nimport {\n type MessageConsumer,\n type MessageProducer,\n registerConsumer,\n registerProducer,\n} from '../managers/index';\nimport {\n type ErrorContent,\n} from '../messages/error';\nimport {\n isEmbedded,\n} from '../utils';\n\n/** Options for the routing handling in case of navigation producer message */\nexport interface RoutingServiceOptions {\n /**\n * Whether to handle only sub-routes.\n * If true, the routing service will handle only sub-routes.\n * Default is false.\n */\n subRouteOnly?: boolean;\n}\n\n/**\n * A service that keeps in sync Router navigation and navigation messages.\n *\n * - listens to Router events and sends navigation messages\n * - handles incoming navigation messages and triggers Router navigation\n */\n@Injectable({\n providedIn: 'root'\n})\nexport class RoutingService implements MessageProducer<NavigationMessage>, MessageConsumer<NavigationMessage> {\n private readonly router = inject(Router);\n private readonly activatedRoute = inject(ActivatedRoute);\n private readonly messageService = inject(MessagePeerService<NavigationMessage>);\n private readonly logger = inject(LoggerService);\n private readonly window = inject(Window, { optional: true }) || window;\n\n /**\n * @inheritdoc\n */\n public readonly types = NAVIGATION_MESSAGE_TYPE;\n\n /**\n * @inheritdoc\n */\n public readonly type = 'navigation';\n\n /**\n * Use the message payload to navigate to the specified URL.\n * @param message message to consume\n */\n public readonly supportedVersions = {\n '1.0': async (message: RoutedMessage<any>) => {\n // Navigation has been triggered from the communication protocol request.\n await this.router.navigateByUrl(message.payload.url, { state: { triggeredByMessage: true } });\n },\n // eslint-disable-next-line @stylistic/quote-props -- keep quotes for consistency with '1.0'\n '1.1': async (message: RoutedMessage<any>) => {\n // Navigation has been triggered from the communication protocol request.\n await this.router.navigateByUrl(message.payload.url, {\n state: { triggeredByMessage: true },\n replaceUrl: message.payload.extras?.replaceUrl\n });\n }\n };\n\n constructor() {\n registerProducer(this);\n registerConsumer(this);\n }\n\n /**\n * @inheritdoc\n */\n public start(): void {}\n\n /**\n * @inheritdoc\n */\n public stop(): void {}\n\n /**\n * @inheritdoc\n */\n public handleError(message: ErrorContent<NavigationV1_0>): void {\n this.logger.error('Error in navigation service message', message);\n }\n\n /**\n * Handles embedded routing by listening to router events and sending navigation messages to the connected endpoints.\n * It can be a parent window or another iframe\n * @note - This method has to be called in an injection context\n * @param options - Optional parameters to control the routing behavior {@link RoutingServiceOptions}.\n */\n public handleEmbeddedRouting(options?: RoutingServiceOptions): void {\n const subRouteOnly = options?.subRouteOnly ?? false;\n this.router.events.pipe(\n takeUntilDestroyed(),\n filter((event): event is NavigationEnd => event instanceof NavigationEnd),\n filter((_event) => {\n const extras = this.router.getCurrentNavigation()?.extras || {};\n // Navigation triggered by the application host, no need to request it to navigate to the same route\n return !extras.skipLocationChange && !extras.state?.triggeredByMessage;\n }),\n map(({ urlAfterRedirects }) => {\n const extras = this.router.getCurrentNavigation()?.extras || {};\n const { channelId } = extras.state || {};\n const currentRouteRegExp = subRouteOnly && this.activatedRoute.routeConfig?.path && new RegExp('^' + this.activatedRoute.routeConfig.path.replace(/(?=\\W)/g, '\\\\'), 'i');\n return ({\n url: currentRouteRegExp ? urlAfterRedirects.replace(currentRouteRegExp, '') : urlAfterRedirects,\n channelId,\n replaceUrl: extras.replaceUrl\n });\n })\n ).subscribe(({ url, channelId, replaceUrl }) => {\n // Always emit the latest version we produce. The ConsumerManagerService dispatches to the\n // highest compatible minor a consumer has declared, so v1.0-only peers still navigate\n // correctly — they just ignore the optional extras.\n const message: NavigationV1_1 = {\n type: 'navigation',\n version: '1.1',\n url,\n ...(replaceUrl ? { extras: { replaceUrl: true } } : {})\n };\n // TODO: sendBest() is not implemented -- https://github.com/AmadeusITGroup/microfrontends/issues/11\n // When multiple majors are supported, sendBest should receive the latest minor of each\n // supported major and dispatch to peers according to their declared compatibility.\n if (isEmbedded(this.window)) {\n this.messageService.send(message);\n } else if (channelId === undefined) {\n this.logger.warn('No channelId provided for navigation message');\n } else {\n try {\n this.messageService.send(message, { to: [channelId] });\n } catch (error) {\n this.logger.error('Error sending navigation message', error);\n }\n }\n });\n }\n}\n","import {\n Injectable,\n signal,\n type Signal,\n} from '@angular/core';\n\n/**\n * Current navigation block state held by a module.\n */\nexport interface NavigationBlockState {\n /** `true` when the module holds unsaved work and navigation must be confirmed. */\n blocked: boolean;\n /** Optional reason displayed in the confirmation modal. */\n reason?: string;\n}\n\n/**\n * Module-side writable source of truth for the navigation block state.\n *\n * Feature code (forms, editors, etc.) calls {@link block} when unsaved changes appear and {@link unblock} once they are saved or discarded.\n * The {@link NavigationBlockStateProducerService} watches this signal and mirrors the state to the shell;\n * the {@link navigationBlockModuleGuard} reads it to decide whether to intercept in-module navigation.\n */\n@Injectable({\n providedIn: 'root'\n})\nexport class NavigationBlockService {\n private readonly stateSignal = signal<NavigationBlockState>({ blocked: false });\n\n /** Readonly view of the current navigation block state. */\n public readonly state: Signal<NavigationBlockState> = this.stateSignal.asReadonly();\n\n /**\n * Mark the module as blocked (unsaved changes present).\n * @param reason Optional human-readable reason shown in the confirmation modal.\n */\n public block(reason?: string): void {\n this.stateSignal.set({ blocked: true, reason });\n }\n\n /** Mark the module as unblocked (no unsaved changes). */\n public unblock(): void {\n this.stateSignal.set({ blocked: false });\n }\n}\n","import {\n NAVIGATION_BLOCK_STATE_MESSAGE_TYPE,\n type NavigationBlockStateV1_0,\n} from '@ama-mfe/messages';\nimport {\n DestroyRef,\n effect,\n inject,\n Injectable,\n} from '@angular/core';\nimport {\n LoggerService,\n} from '@o3r/logger';\nimport {\n ConnectionService,\n} from '../../../connect/connect-resources';\nimport {\n type MessageProducer,\n ProducerManagerService,\n} from '../../../managers';\nimport type {\n ErrorContent,\n} from '../../../messages/error/base';\nimport {\n NavigationBlockService,\n} from './navigation-block.service';\n\n/**\n * Module-side producer that mirrors {@link NavigationBlockService} to the shell via `navigation-block-state` messages.\n * Every state change triggers a broadcast so the shell guard can decide without a round-trip.\n *\n * Runs module-side only (it watches the module's writable state). The shell never instantiates it.\n */\n@Injectable({\n providedIn: 'root'\n})\nexport class NavigationBlockStateProducerService\nimplements MessageProducer<NavigationBlockStateV1_0> {\n /**\n * @inheritdoc\n */\n public readonly types = NAVIGATION_BLOCK_STATE_MESSAGE_TYPE;\n\n private readonly connectionService = inject(ConnectionService);\n private readonly producerManagerService = inject(ProducerManagerService);\n private readonly logger = inject(LoggerService);\n private readonly store = inject(NavigationBlockService);\n\n constructor() {\n this.producerManagerService.register(this);\n inject(DestroyRef).onDestroy(() => this.producerManagerService.unregister(this));\n effect(() => {\n const state = this.store.state();\n const message: NavigationBlockStateV1_0 = {\n type: NAVIGATION_BLOCK_STATE_MESSAGE_TYPE,\n version: '1.0',\n blocked: state.blocked,\n reason: state.reason\n };\n this.connectionService.send(message);\n });\n }\n\n /**\n * @inheritdoc\n */\n public handleError(message: ErrorContent<NavigationBlockStateV1_0>): void {\n this.logger.error('navigation-block state message could not be consumed by the shell', message);\n }\n}\n","import {\n NAVIGATION_BLOCK_STATE_MESSAGE_TYPE,\n type NavigationBlockStateMessage,\n type NavigationBlockStateV1_0,\n} from '@ama-mfe/messages';\nimport type {\n RoutedMessage,\n} from '@amadeus-it-group/microfrontends';\nimport {\n Injectable,\n signal,\n type Signal,\n} from '@angular/core';\nimport {\n AbstractMessageConsumer,\n} from '../../../managers';\nimport type {\n NavigationBlockState,\n} from './navigation-block.service';\n\n/**\n * Navigation block state as observed by the shell, extended with the originating channel ID\n * so the shell knows which module to notify when navigation is confirmed.\n */\nexport interface ObservedNavigationBlockState extends NavigationBlockState {\n /** Id of the module (channel) that sent the last state message. */\n channelId?: string;\n}\n\n/**\n * Shell-side consumer for `navigation-block-state` messages sent by modules.\n *\n * Keeps the last received state in a signal that the shell guard reads to decide whether to intercept shell-initiated navigation.\n * The state stays `undefined` until any module reports a value (interpreted as \"no block known\" which means navigation is allowed).\n */\n@Injectable({\n providedIn: 'root'\n})\nexport class NavigationBlockStateConsumerService extends AbstractMessageConsumer<NavigationBlockStateMessage> {\n /**\n * @inheritdoc\n */\n public readonly type = NAVIGATION_BLOCK_STATE_MESSAGE_TYPE;\n\n /**\n * @inheritdoc\n */\n public readonly supportedVersions = {\n // eslint-disable-next-line @typescript-eslint/naming-convention -- expected naming for versions\n '1.0': (message: RoutedMessage<NavigationBlockStateV1_0>) => {\n this.blockStateSignal.set({\n blocked: message.payload.blocked,\n reason: message.payload.reason,\n channelId: message.from\n });\n }\n };\n\n private readonly blockStateSignal = signal<ObservedNavigationBlockState | undefined>(undefined);\n\n /** Last navigation block state reported by any module. */\n public readonly blockState: Signal<ObservedNavigationBlockState | undefined> = this.blockStateSignal.asReadonly();\n\n /**\n * Mark the state as unblocked after the shell has resolved a confirmation (e.g. the user confirmed a sidebar-initiated navigation).\n */\n public clear(): void {\n this.blockStateSignal.set({ blocked: false });\n }\n}\n","import {\n NAVIGATION_DECISION_MESSAGE_TYPE,\n NAVIGATION_REQUEST_MESSAGE_TYPE,\n type NavigationDecisionV1_0,\n type NavigationRequestV1_0,\n} from '@ama-mfe/messages';\nimport {\n inject,\n Injectable,\n type OnDestroy,\n} from '@angular/core';\nimport {\n LoggerService,\n} from '@o3r/logger';\nimport {\n ConnectionService,\n} from '../../../connect/connect-resources';\nimport {\n type MessageProducer,\n ProducerManagerService,\n} from '../../../managers';\nimport type {\n ErrorContent,\n} from '../../../messages/error/base';\nimport {\n generateCorrelationId,\n} from '../../../utils';\n\ntype ProducedMessage = NavigationRequestV1_0 | NavigationDecisionV1_0;\n\n/**\n * Manages navigation request/decision round-trip communication for **both** shell and module.\n * Sends `navigation-request` messages, tracks pending requests, and sends `navigation-decision` replies.\n * Correlates responses with their originating requests using correlation IDs.\n *\n * - Module-initiated navigation → guard calls `requestNavigation()` with no target, broadcasting to the shell;\n * the shell's handler opens the modal and replies.\n * - Shell-initiated navigation → guard calls `requestNavigation(channelId)` after the user already confirmed locally,\n * so the module can run its unblock / draft-persistence logic and reply.\n *\n * If the peer never replies the returned promise stays pending and the navigation is held — callers rely on Angular\n * tearing their context down (the producer's `ngOnDestroy` resolves pending promises to `false`).\n */\n@Injectable({\n providedIn: 'root'\n})\nexport class NavigationRequestManagerService\nimplements MessageProducer<ProducedMessage>, OnDestroy {\n /**\n * @inheritdoc\n */\n public readonly types = [NAVIGATION_REQUEST_MESSAGE_TYPE, NAVIGATION_DECISION_MESSAGE_TYPE] as [typeof NAVIGATION_REQUEST_MESSAGE_TYPE, typeof NAVIGATION_DECISION_MESSAGE_TYPE];\n\n private readonly connectionService = inject(ConnectionService);\n private readonly producerManagerService = inject(ProducerManagerService);\n private readonly logger = inject(LoggerService);\n\n /**\n * Single-flight slot for the in-progress negotiation. Only one request is ever pending: navigations are sequential\n * (one active module, and a blocking shell modal prevents the user from starting another while it is open), so this\n * is not about concurrent navigations. Its purpose is to de-duplicate the *re-entrant* guard calls a single navigation\n * produces — `canActivate` + `canActivateChild` on the same route, or re-runs from `runGuardsAndResolvers: 'always'`.\n * Those fire before any decision returns, and on the module side there is no local modal to serialize them, so without\n * this slot one navigation would emit multiple `navigation-request` messages. Reusing the slot makes every re-entrant\n * call await the same round-trip.\n */\n private pendingRequest?: {\n correlationId: string;\n promise: Promise<boolean>;\n resolve: (value: boolean) => void;\n };\n\n constructor() {\n this.producerManagerService.register(this);\n }\n\n /**\n * Ask the peer to handle the navigation. Resolves when the peer replies with a `navigation-decision`.\n * If the peer never replies the promise stays pending.\n *\n * Re-entrant calls while a request is pending (e.g. the same navigation firing both `canActivate` and `canActivateChild`)\n * return the same promise, so only one round-trip is sent.\n * @param target Optional target peer id. Omit to broadcast (module → shell).\n * @param reason Optional human-readable reason surfaced in the shell modal.\n */\n public requestNavigation(target?: string, reason?: string): Promise<boolean> {\n if (this.pendingRequest) {\n return this.pendingRequest.promise;\n }\n const correlationId = generateCorrelationId('nav-req');\n let resolveFn!: (value: boolean) => void;\n const promise = new Promise<boolean>((resolve) => {\n resolveFn = resolve;\n });\n this.pendingRequest = { correlationId, promise, resolve: resolveFn };\n const message: NavigationRequestV1_0 = {\n type: NAVIGATION_REQUEST_MESSAGE_TYPE,\n version: '1.0',\n correlationId,\n reason\n };\n this.connectionService.send(message, target ? { to: target } : undefined);\n return promise;\n }\n\n /**\n * Send a `navigation-decision` reply with the given `correlationId`.\n * Called by {@link NavigationNegotiationConsumerService} after the side-specific handler has finished.\n * @param correlationId id echoed from the request\n * @param target peer id of the original sender\n * @param proceed whether to allow navigation (default true)\n */\n public sendDecision(correlationId: string, target: string, proceed = true): void {\n const message: NavigationDecisionV1_0 = {\n type: NAVIGATION_DECISION_MESSAGE_TYPE,\n version: '1.0',\n correlationId,\n proceed\n };\n this.connectionService.send(message, { to: target });\n }\n\n /**\n * Called by {@link NavigationDecisionConsumerService} when a decision arrives.\n * Resolves the pending promise if the `correlationId` matches.\n * @param correlationId\n * @param proceed\n */\n public resolvePendingRequest(correlationId: string, proceed: boolean): void {\n const pending = this.pendingRequest;\n if (!pending || pending.correlationId !== correlationId) {\n return;\n }\n this.pendingRequest = undefined;\n pending.resolve(proceed);\n }\n\n /**\n * @inheritdoc\n */\n public handleError(message: ErrorContent<ProducedMessage>): void {\n this.logger.error('navigation negotiation message could not be consumed by a peer', message);\n }\n\n public ngOnDestroy(): void {\n if (this.pendingRequest) {\n this.pendingRequest.resolve(false);\n this.pendingRequest = undefined;\n }\n this.producerManagerService.unregister(this);\n }\n}\n","import {\n inject,\n InjectionToken,\n} from '@angular/core';\nimport {\n NavigationBlockService,\n} from '../block-state/navigation-block.service';\n\n/** Context passed to a {@link NavigationRequestHandler} for each incoming request. */\nexport interface NavigationRequestContext {\n /** Peer id that sent the request. */\n from: string;\n /** Optional human-readable reason attached to the request. */\n reason?: string;\n}\n\n/**\n * Side-specific handler invoked by {@link NavigationRequestConsumerService} whenever a `navigation-request` arrives from a peer.\n *\n * Responsibilities per side:\n * - **Shell application** — open the confirmation modal and await the user's answer. If the user confirms, resolve;\n * if the user cancels, throw / reject so the consumer skips sending the decision. See {@link createNavigationRequestShellHandler}.\n * - **Module** — run the module's local cleanup (at minimum `state.unblock()`; later: persist drafts) and resolve.\n * The module cannot refuse — only the shell modal can. See {@link createNavigationRequestHandler} (the default).\n *\n * Exposed as an interface so apps can supply either a function-style implementation (`{ handle: (ctx) => ... }`)\n * or a class instance — useful when the handler needs its own dependencies.\n */\nexport interface NavigationRequestHandler {\n handle: (context: NavigationRequestContext) => Promise<void> | void;\n}\n\n/**\n * Default module-side `navigation-request` handler. Runs the module's local cleanup — at minimum clearing the block state — and resolves.\n * Modules cannot refuse a navigation (only the shell modal can), so this always resolves and a `navigation-decision` is always sent back.\n *\n * Used as the default factory of {@link NAVIGATION_REQUEST_HANDLER}, so a module gets this behavior without any explicit provider.\n * Apps that need to persist drafts before unblocking can override the token with their own handler.\n */\nexport const createNavigationRequestHandler = (): NavigationRequestHandler => {\n const store = inject(NavigationBlockService);\n return {\n handle: () => {\n store.unblock();\n }\n };\n};\n\n/**\n * Injection token for the per-side request handler.\n *\n * **Default behavior (modules):** Clears the block state (unblock) — see {@link createNavigationRequestHandler}.\n * **Shell override:** Opens confirmation modal and awaits user decision.\n *\n * The module handler is provided by default at root level. Only the shell application needs to override it\n * with `provideNavigationRequestShellHandler()`.\n */\nexport const NAVIGATION_REQUEST_HANDLER = new InjectionToken<NavigationRequestHandler>(\n 'NAVIGATION_REQUEST_HANDLER',\n {\n providedIn: 'root',\n factory: createNavigationRequestHandler\n }\n);\n","import {\n NAVIGATION_REQUEST_MESSAGE_TYPE,\n type NavigationRequestMessage,\n type NavigationRequestV1_0,\n} from '@ama-mfe/messages';\nimport type {\n RoutedMessage,\n} from '@amadeus-it-group/microfrontends';\nimport {\n inject,\n Injectable,\n} from '@angular/core';\nimport {\n AbstractMessageConsumer,\n} from '../../../managers';\nimport {\n NAVIGATION_REQUEST_HANDLER,\n} from './navigation-request-handler';\nimport {\n NavigationRequestManagerService,\n} from './navigation-request-manager.service';\n\n/**\n * Agnostic consumer for `navigation-request` messages.\n *\n * On each incoming request, invokes the side-specific handler registered under {@link NAVIGATION_REQUEST_HANDLER}:\n * - **Cockpit side** — handler opens the confirmation modal and awaits the user's answer. If the user cancels the handler\n * throws; this consumer catches it and replies with a decision carrying `proceed: false`, so the module's pending promise\n * resolves to `false` and the in-iframe navigation is held until a fresh request is made.\n * - **Module side** — handler runs the unblock / future draft-persistence logic and resolves. Modules cannot refuse;\n * a decision is always sent.\n */\n@Injectable({\n providedIn: 'root'\n})\nexport class NavigationRequestConsumerService extends AbstractMessageConsumer<NavigationRequestMessage> {\n /**\n * @inheritdoc\n */\n public readonly type = NAVIGATION_REQUEST_MESSAGE_TYPE;\n\n /**\n * @inheritdoc\n */\n public readonly supportedVersions = {\n // eslint-disable-next-line @typescript-eslint/naming-convention -- expected naming for versions\n '1.0': (message: RoutedMessage<NavigationRequestV1_0>) => this.handleRequest(message)\n };\n\n private readonly producerService = inject(NavigationRequestManagerService);\n private readonly handler = inject(NAVIGATION_REQUEST_HANDLER);\n\n private async handleRequest(message: RoutedMessage<NavigationRequestV1_0>): Promise<void> {\n try {\n await this.handler.handle({ from: message.from, reason: message.payload.reason });\n } catch (error) {\n // Handler rejected — usually the user cancelled, but any unexpected\n // exception ends up here too. Log it so the failure is observable, then\n // send a decision with proceed=false so the requester's pending promise\n // resolves and subsequent navigation attempts can create a fresh request.\n this.logger.error('navigation-request handler rejected', error, message);\n this.producerService.sendDecision(message.payload.correlationId, message.from, false);\n return;\n }\n this.producerService.sendDecision(message.payload.correlationId, message.from);\n }\n}\n","import {\n type EnvironmentProviders,\n makeEnvironmentProviders,\n} from '@angular/core';\nimport {\n createNavigationRequestHandler,\n NAVIGATION_REQUEST_HANDLER,\n} from './navigation-request-handler';\n\n/**\n * Provider wiring {@link NAVIGATION_REQUEST_HANDLER} to the module handler.\n * Not normally needed — the token already defaults to this handler — but\n * available for apps that want to register it explicitly.\n */\nexport const provideNavigationRequestModuleHandler = (): EnvironmentProviders =>\n makeEnvironmentProviders([\n {\n provide: NAVIGATION_REQUEST_HANDLER,\n useFactory: createNavigationRequestHandler\n }\n ]);\n","import {\n Injectable,\n} from '@angular/core';\nimport type {\n NavigationBlockConfirmation,\n} from '../navigation-block-confirmation.interface';\n\n/**\n * Default confirmation strategy using browser's native `window.confirm()`.\n * Simple, no dependencies, works in any environment. Suitable for:\n * - Development/testing\n * - Apps without custom modal libraries\n * - `@ama-mfe` packages that need basic confirmation\n *\n * Production apps typically override this with a modal-based strategy.\n */\n@Injectable({\n providedIn: 'root'\n})\nexport class BrowserConfirmationStrategy implements NavigationBlockConfirmation {\n /**\n * Show native browser confirmation dialog.\n * @param reason Optional reason displayed in the message\n * @returns Promise<true> if user clicks OK, Promise<false> if user clicks Cancel\n */\n public confirm(reason?: string): Promise<boolean> {\n const message = `${reason ? reason + '\\n' : ''}Do you want to leave this page?`;\n\n // eslint-disable-next-line no-alert -- intentional use of window.confirm for basic confirmation strategy\n return Promise.resolve(window.confirm(message));\n }\n}\n","import {\n inject,\n InjectionToken,\n} from '@angular/core';\nimport {\n BrowserConfirmationStrategy,\n} from './strategies/browser-confirmation.strategy';\n\n/**\n * Strategy interface for confirming navigation when unsaved changes exist.\n * Implementations provide different UI mechanisms (browser confirm, modal, etc.)\n */\nexport interface NavigationBlockConfirmation {\n /**\n * Show confirmation UI and await user's decision.\n * @param reason Optional human-readable reason for the block (e.g., \"Unsaved order changes\")\n * @returns Promise<true> if user confirms navigation, Promise<false> if cancelled\n */\n confirm(reason?: string): Promise<boolean>;\n}\n\n/**\n * Injection token for the navigation block confirmation strategy.\n * Defaults to {@link BrowserConfirmationStrategy} (uses `window.confirm()`).\n * Apps with a styled modal override the default by passing their own class via `provideNavigationConfig({ confirmationStrategy })`\n * or by binding this token directly.\n */\nexport const NAVIGATION_BLOCK_CONFIRMATION = new InjectionToken<NavigationBlockConfirmation>(\n 'NAVIGATION_BLOCK_CONFIRMATION',\n {\n providedIn: 'root',\n factory: () => inject(BrowserConfirmationStrategy)\n }\n);\n","import {\n inject,\n Injectable,\n} from '@angular/core';\nimport {\n NAVIGATION_BLOCK_CONFIRMATION,\n} from './navigation-block-confirmation.interface';\n\n/**\n * Orchestrates navigation block confirmation by delegating to a pluggable strategy.\n * Handles concurrent call deduplication to prevent duplicate confirmations when guards run multiple times.\n *\n * The confirmation UI is read from the `NAVIGATION_BLOCK_CONFIRMATION` token, which defaults to {@link BrowserConfirmationStrategy}\n * (no setup required). Apps with a styled modal override the token via `provideNavigationConfig({ confirmationStrategy })`\n * or by binding the token directly.\n */\n@Injectable({\n providedIn: 'root'\n})\nexport class NavigationBlockConfirmationService {\n private readonly strategy = inject(NAVIGATION_BLOCK_CONFIRMATION);\n private pendingConfirmation?: Promise<boolean>;\n\n /**\n * Show confirmation and await user decision. Concurrent calls return the same promise to prevent duplicate confirmations.\n * @param reason Optional reason displayed in the confirmation UI\n * @returns `true` when the user confirms, `false` when they cancel\n */\n public confirm(reason?: string): Promise<boolean> {\n // Deduplication: if confirmation already in progress, return same promise\n if (this.pendingConfirmation) {\n return this.pendingConfirmation;\n }\n\n // Delegate to injected strategy. Clear the slot only once the promise\n // settles, so concurrent callers in the meantime get the same promise.\n const pending = this.strategy.confirm(reason).finally(() => {\n this.pendingConfirmation = undefined;\n });\n this.pendingConfirmation = pending;\n return pending;\n }\n}\n","import {\n type EnvironmentProviders,\n inject,\n makeEnvironmentProviders,\n} from '@angular/core';\nimport {\n NavigationBlockStateConsumerService,\n} from '../block-state/navigation-block-state-consumer.service';\nimport {\n NavigationBlockConfirmationService,\n} from '../navigation-confirmation/navigation-block-confirmation.service';\nimport {\n NAVIGATION_REQUEST_HANDLER,\n type NavigationRequestHandler,\n} from './navigation-request-handler';\n\n/**\n * Shell application `navigation-request` handler used when a module initiates the navigation (in-iframe link click).\n * Opens the shared confirmation modal, awaits the user's answer, and — on confirm — clears the shell's block mirror.\n * On cancel the handler throws; the consumer catches it and replies with a `navigation-decision` carrying `proceed: false`,\n * so the module's pending promise resolves to `false` and the iframe navigation is held until a fresh request is made.\n */\nexport const createNavigationRequestShellHandler = (): NavigationRequestHandler => {\n const confirmation = inject(NavigationBlockConfirmationService);\n const blockConsumer = inject(NavigationBlockStateConsumerService);\n return {\n handle: async ({ reason }) => {\n const confirmed = await confirmation.confirm(reason);\n if (!confirmed) {\n throw new Error('navigation-request cancelled by user');\n }\n blockConsumer.clear();\n }\n };\n};\n\n/**\n * Provider wiring {@link NAVIGATION_REQUEST_HANDLER} to the shell application\n * handler. Register once in the shell app providers to override the default\n * module handler.\n */\nexport const provideNavigationRequestShellHandler = (): EnvironmentProviders =>\n makeEnvironmentProviders([\n {\n provide: NAVIGATION_REQUEST_HANDLER,\n useFactory: createNavigationRequestShellHandler\n }\n ]);\n","import {\n NAVIGATION_DECISION_MESSAGE_TYPE,\n type NavigationDecisionMessage,\n type NavigationDecisionV1_0,\n} from '@ama-mfe/messages';\nimport type {\n RoutedMessage,\n} from '@amadeus-it-group/microfrontends';\nimport {\n inject,\n Injectable,\n} from '@angular/core';\nimport {\n AbstractMessageConsumer,\n} from '../../../managers';\nimport {\n NavigationRequestManagerService,\n} from '../navigation-request/navigation-request-manager.service';\n\n/**\n * Agnostic consumer for `navigation-decision` messages — the reply to a\n * previously sent `navigation-request`. Forwards the decision to\n * {@link NavigationRequestManagerService.resolvePendingRequest} so\n * the awaiting caller's promise resolves.\n */\n@Injectable({\n providedIn: 'root'\n})\nexport class NavigationDecisionConsumerService extends AbstractMessageConsumer<NavigationDecisionMessage> {\n /**\n * @inheritdoc\n */\n public readonly type = NAVIGATION_DECISION_MESSAGE_TYPE;\n\n /**\n * @inheritdoc\n */\n public readonly supportedVersions = {\n // eslint-disable-next-line @typescript-eslint/naming-convention -- expected naming for versions\n '1.0': (message: RoutedMessage<NavigationDecisionV1_0>) => {\n this.producerService.resolvePendingRequest(message.payload.correlationId, message.payload.proceed);\n }\n };\n\n private readonly producerService = inject(NavigationRequestManagerService);\n}\n","import {\n inject,\n} from '@angular/core';\nimport {\n type CanActivateChildFn,\n type CanActivateFn,\n} from '@angular/router';\nimport {\n NavigationBlockStateConsumerService,\n} from '../block-state/navigation-block-state-consumer.service';\nimport {\n NavigationBlockConfirmationService,\n} from '../navigation-confirmation/navigation-block-confirmation.service';\nimport {\n NavigationRequestManagerService,\n} from '../navigation-request/navigation-request-manager.service';\n\n/**\n * Shell application guard intercepting shell-initiated navigation (sidebar clicks, URL bar, programmatic `router.navigate`)\n * when the last state received from a module is `blocked`.\n *\n * Can be used as both `canActivate` and `canActivateChild` to ensure the guard runs when entering a route directly\n * or navigating to its children.\n *\n * Flow:\n * - No state received, or `blocked === false` → navigation proceeds.\n * - `blocked === true` → open the confirmation modal.\n * - On cancel/dismiss → return `false`, state is untouched, no message sent to the module.\n * - On confirm → clear the shell mirror, send a `navigation-request` to the originating module (so it can run its unblock /\n * future draft-persistence logic), await its `navigation-decision`, then return `true`.\n */\nexport const navigationBlockShellGuard: CanActivateFn & CanActivateChildFn = async () => {\n const consumer = inject(NavigationBlockStateConsumerService);\n const confirmation = inject(NavigationBlockConfirmationService);\n const negotiation = inject(NavigationRequestManagerService);\n const state = consumer.blockState();\n if (!state?.blocked) {\n return true;\n }\n const confirmed = await confirmation.confirm(state.reason);\n if (!confirmed) {\n return false;\n }\n consumer.clear();\n if (!state.channelId) {\n return true;\n }\n return negotiation.requestNavigation(state.channelId, state.reason);\n};\n","import {\n inject,\n} from '@angular/core';\nimport {\n type CanDeactivateFn,\n} from '@angular/router';\nimport {\n NavigationBlockService,\n} from '../block-state/navigation-block.service';\nimport {\n NavigationRequestManagerService,\n} from '../navigation-request/navigation-request-manager.service';\n\n/**\n * Module-side guard intercepting navigation away from a page that holds unsaved changes.\n *\n * - `blocked === false` → navigation proceeds.\n * - `blocked === true` → broadcast a `navigation-request` to the shell and await the reply. The shell opens the confirmation modal\n * and replies in both cases: `proceed === true` on confirm, `proceed === false` on cancel/dismiss. On proceed, clear the local\n * state and return `true`; on cancel, return `false` and leave the block state intact so the navigation is held and a later\n * attempt can negotiate again.\n *\n * Wire it as `canDeactivate` only on the routes that can actually hold unsaved work — modules opt in per page.\n */\nexport const navigationBlockModuleGuard: CanDeactivateFn<boolean> = async () => {\n const store = inject(NavigationBlockService);\n const negotiation = inject(NavigationRequestManagerService);\n const { blocked, reason } = store.state();\n if (!blocked) {\n return true;\n }\n const proceed = await negotiation.requestNavigation(undefined, reason);\n if (proceed) {\n store.unblock();\n }\n return proceed;\n};\n","import {\n type EnvironmentProviders,\n makeEnvironmentProviders,\n} from '@angular/core';\nimport {\n NAVIGATION_BLOCK_CONFIRMATION,\n} from './navigation-block-confirmation.interface';\nimport {\n BrowserConfirmationStrategy,\n} from './strategies/browser-confirmation.strategy';\n\n/**\n * Convenience helper that explicitly binds the {@link NAVIGATION_BLOCK_CONFIRMATION} token to {@link BrowserConfirmationStrategy}.\n *\n * **Usually unnecessary** — the token already defaults to `BrowserConfirmationStrategy` via its tree-shakable factory,\n * so the helper only re-binds the same value. Use it when you want the binding to be visible at the call site\n * (e.g. for documentation in `app.config.ts`) or when you've previously overridden the token and want to switch back\n * to the default in a child injector.\n *\n * Production apps with a styled modal pass their own strategy via `provideNavigationConfig({ confirmationStrategy })` instead.\n * @example\n * ```typescript\n * // app.config.ts\n * export const appConfig: ApplicationConfig = {\n * providers: [\n * provideDefaultNavigationBlockConfirmation(),\n * // ... other providers\n * ]\n * };\n * ```\n */\nexport function provideDefaultNavigationBlockConfirmation(): EnvironmentProviders {\n return makeEnvironmentProviders([\n {\n provide: NAVIGATION_BLOCK_CONFIRMATION,\n useClass: BrowserConfirmationStrategy\n }\n ]);\n}\n","// Block state (module state, its producer, and the shell-side mirror consumer)\nexport * from './block-state/navigation-block.service';\nexport * from './block-state/navigation-block-state-producer.service';\nexport * from './block-state/navigation-block-state-consumer.service';\n\n// Navigation request (request/decision producer, request consumer, side-specific handlers)\nexport * from './navigation-request/navigation-request-manager.service';\nexport * from './navigation-request/navigation-request-consumer.service';\nexport * from './navigation-request/navigation-request-handler';\nexport * from './navigation-request/navigation-request-module-handler';\nexport * from './navigation-request/navigation-request-shell-handler';\n\n// Navigation decision (decision reply consumer)\nexport * from './navigation-decision/navigation-decision-consumer.service';\n\n// Guards (router guards)\nexport * from './guards/navigation-block.shell-guard';\nexport * from './guards/navigation-block.module-guard';\n\n// UI (confirmation - framework agnostic, browser-based only)\nexport * from './navigation-confirmation/navigation-block-confirmation.interface';\nexport * from './navigation-confirmation/navigation-block-confirmation.service';\nexport * from './navigation-confirmation/strategies/browser-confirmation.strategy';\nexport * from './navigation-confirmation/providers';\n","import type {\n ResizeMessage,\n ResizeV1_0,\n} from '@ama-mfe/messages';\nimport {\n RESIZE_MESSAGE_TYPE,\n} from '@ama-mfe/messages';\nimport {\n MessagePeerService,\n} from '@amadeus-it-group/microfrontends-angular';\nimport {\n afterNextRender,\n inject,\n Injectable,\n} from '@angular/core';\nimport {\n type MessageProducer,\n registerProducer,\n} from '../managers/index';\nimport {\n type ErrorContent,\n} from '../messages/index';\n\n/**\n * This service observe changes in the document's body height.\n * When the height changes, it sends a resize message with the new height, to the connected peers\n */\n@Injectable({\n providedIn: 'root'\n})\nexport class ResizeService implements MessageProducer<ResizeMessage> {\n private actualHeight?: number;\n private readonly messageService = inject(MessagePeerService<ResizeMessage>);\n private resizeObserver?: ResizeObserver;\n\n /**\n * @inheritdoc\n */\n public readonly types = RESIZE_MESSAGE_TYPE;\n\n constructor() {\n registerProducer(this);\n }\n\n /**\n * @inheritdoc\n */\n public handleError(message: ErrorContent<ResizeMessage>): void {\n // eslint-disable-next-line no-console -- error handling placeholder\n console.error('Error in resize service message', message);\n }\n\n /**\n * This method sets up a `ResizeObserver` to observe changes in the document's body height.\n * When the height changes, it sends a resize message with the new height, to the connected peers\n */\n public startResizeObserver() {\n this.resizeObserver = new ResizeObserver(() => {\n const newHeight = document.body.getBoundingClientRect().height;\n if (!this.actualHeight || newHeight !== this.actualHeight) {\n this.actualHeight = newHeight;\n const messageV10 = {\n type: 'resize',\n version: '1.0',\n height: this.actualHeight\n } satisfies ResizeV1_0;\n // TODO: sendBest() is not implemented -- https://github.com/AmadeusITGroup/microfrontends/issues/11\n this.messageService.send(messageV10);\n }\n });\n\n afterNextRender(() => this.resizeObserver?.observe(document.body));\n }\n}\n","import type {\n ThemeMessage,\n ThemeV1_0,\n} from '@ama-mfe/messages';\nimport {\n THEME_MESSAGE_TYPE,\n} from '@ama-mfe/messages';\nimport type {\n RoutedMessage,\n} from '@amadeus-it-group/microfrontends';\nimport {\n inject,\n Injectable,\n SecurityContext,\n} from '@angular/core';\nimport {\n DomSanitizer,\n} from '@angular/platform-browser';\nimport {\n AbstractMessageConsumer,\n} from '../managers/index';\nimport {\n applyTheme,\n downloadApplicationThemeCss,\n} from './theme-helpers';\n\n/**\n * A service that handles theme messages and applies the received theme.\n */\n@Injectable({\n providedIn: 'root'\n})\nexport class ThemeConsumerService extends AbstractMessageConsumer<ThemeMessage> {\n private readonly domSanitizer = inject(DomSanitizer);\n /**\n * The type of messages this service handles ('theme').\n */\n public readonly type = THEME_MESSAGE_TYPE;\n\n /**\n * The supported versions of theme messages and their handlers.\n */\n public readonly supportedVersions = {\n /**\n * Use the message paylod to get the theme and apply it\n * @param message message to consume\n */\n '1.0': async (message: RoutedMessage<ThemeV1_0>) => {\n const sanitizedCss = this.domSanitizer.sanitize(SecurityContext.STYLE, message.payload.css);\n if (sanitizedCss !== null) {\n applyTheme(sanitizedCss);\n }\n try {\n const css = await downloadApplicationThemeCss(message.payload.name, { logger: this.logger });\n applyTheme(css, false);\n } catch (e) {\n this.logger.warn(`No CSS variable for the theme ${message.payload.name}`, e);\n }\n }\n };\n\n constructor() {\n super();\n /**\n * Auto-starts the consumer on creation.\n * @deprecated The constructor auto-starts the consumer for backwards compatibility. It will be removed in v15;\n */\n this.start();\n }\n}\n","import type {\n UserActivityEventType,\n} from '@ama-mfe/messages';\nimport type {\n ActivityProducerConfig,\n} from './interfaces';\n\n/**\n * DOM events that indicate user activity\n */\nexport const ACTIVITY_EVENTS: readonly Exclude<UserActivityEventType, 'visibilitychange'>[] = [\n 'click',\n 'keydown',\n 'scroll',\n 'touchstart',\n 'focus'\n];\n\n/**\n * Custom activity event type for iframe interactions.\n * Emitted programmatically when an iframe gains focus, not from a DOM event listener.\n */\nexport const IFRAME_INTERACTION_EVENT: UserActivityEventType = 'iframeinteraction';\n\n/**\n * Custom activity event type for visibility changes.\n * Emitted programmatically when the document becomes visible, not from a DOM event listener.\n */\nexport const VISIBILITY_CHANGE_EVENT: UserActivityEventType = 'visibilitychange';\n\n/**\n * High-frequency events that require throttling to avoid performance issues\n */\nexport const HIGH_FREQUENCY_EVENTS: readonly UserActivityEventType[] = [\n 'scroll'\n];\n\n/**\n * Default configuration values for the ActivityProducerService\n */\nexport const DEFAULT_ACTIVITY_PRODUCER_CONFIG: Readonly<ActivityProducerConfig> = {\n /** Default throttle time in milliseconds between activity messages */\n throttleMs: 1000,\n /** Default throttle time in milliseconds for high-frequency events */\n highFrequencyThrottleMs: 300,\n /** Whether to track nested iframes by default */\n trackNestedIframes: false,\n /** Default interval for iframe activity signals (30 seconds) */\n nestedIframeActivityEmitIntervalMs: 30_000,\n /** Default polling interval for detecting iframe focus changes (1 second) */\n nestedIframePollIntervalMs: 1000\n};\n","import {\n Injectable,\n} from '@angular/core';\nimport type {\n IframeActivityTrackerConfig,\n} from './interfaces';\n\n/**\n * Service that tracks user activity within nested iframes.\n *\n * Polls document.activeElement frequently to detect when an iframe has focus.\n * When an iframe gains focus, emits immediately and then at the configured interval.\n * When focus leaves the iframe, it stops emitting.\n *\n * This is needed because cross-origin iframes don't fire focus/blur events\n * that bubble to the parent, and the regular activity tracker can't detect\n * user interactions inside iframes.\n */\n@Injectable({\n providedIn: 'root'\n})\nexport class IframeActivityTrackerService {\n /**\n * Interval ID for polling activeElement\n */\n private pollIntervalId?: ReturnType<typeof setInterval>;\n\n /**\n * Interval ID for emitting activity at configured interval\n */\n private activityIntervalId?: ReturnType<typeof setInterval>;\n\n /**\n * Current configuration\n */\n private config?: IframeActivityTrackerConfig;\n\n /**\n * Bound visibility change handler for cleanup\n */\n private readonly visibilityChangeHandler = () => this.handleVisibilityChange();\n\n /**\n * Whether the service has been started\n */\n private get started() {\n return this.config !== undefined;\n }\n\n /**\n * Whether we are currently tracking iframe activity (iframe had focus on last poll)\n */\n private get isTrackingIframeActivity() {\n return this.activityIntervalId !== undefined;\n }\n\n /**\n * Polls document.activeElement to detect iframe focus changes.\n * When iframe gains focus: emit immediately and start activity interval.\n * When iframe loses focus: stop activity interval.\n */\n private checkActiveElement(): void {\n const activeElement = document.activeElement;\n const iframeFocused = activeElement instanceof HTMLIFrameElement;\n\n if (iframeFocused && !this.isTrackingIframeActivity) {\n // Iframe just gained focus - emit immediately and start activity interval\n this.config?.onActivity();\n this.startActivityInterval();\n } else if (!iframeFocused && this.isTrackingIframeActivity) {\n // Focus left the iframe - stop activity interval\n this.stopActivityInterval();\n }\n }\n\n /**\n * Handles visibility change events to pause/resume polling when tab visibility changes.\n */\n private handleVisibilityChange(): void {\n if (document.visibilityState === 'visible') {\n this.startPolling();\n } else {\n this.stopPolling();\n this.stopActivityInterval();\n }\n }\n\n /**\n * Starts polling for active element changes.\n */\n private startPolling(): void {\n if (this.pollIntervalId) {\n return;\n }\n this.pollIntervalId = setInterval(\n () => this.checkActiveElement(),\n this.config!.pollIntervalMs\n );\n }\n\n /**\n * Stops polling for active element changes.\n */\n private stopPolling(): void {\n if (this.pollIntervalId) {\n clearInterval(this.pollIntervalId);\n this.pollIntervalId = undefined;\n }\n }\n\n /**\n * Starts the activity emission interval.\n */\n private startActivityInterval(): void {\n this.stopActivityInterval();\n this.activityIntervalId = setInterval(() => {\n this.config?.onActivity();\n }, this.config!.activityIntervalMs);\n }\n\n /**\n * Stops the activity emission interval.\n */\n private stopActivityInterval(): void {\n if (this.activityIntervalId) {\n clearInterval(this.activityIntervalId);\n this.activityIntervalId = undefined;\n }\n }\n\n /**\n * Starts tracking nested iframes within the document.\n * @param config Configuration for the tracker\n */\n public start(config: IframeActivityTrackerConfig): void {\n if (this.started) {\n return;\n }\n this.config = config;\n\n // Listen for visibility changes to pause/resume polling\n document.addEventListener('visibilitychange', this.visibilityChangeHandler);\n\n // Only start polling if document is currently visible\n if (document.visibilityState === 'visible') {\n this.startPolling();\n }\n }\n\n /**\n * Stops tracking nested iframes and cleans up resources.\n */\n public stop(): void {\n if (!this.started) {\n return;\n }\n\n document.removeEventListener('visibilitychange', this.visibilityChangeHandler);\n this.stopPolling();\n this.stopActivityInterval();\n this.config = undefined;\n }\n}\n","import {\n USER_ACTIVITY_MESSAGE_TYPE,\n type UserActivityEventType,\n type UserActivityMessage,\n type UserActivityMessageV1_0,\n} from '@ama-mfe/messages';\nimport {\n afterNextRender,\n DestroyRef,\n inject,\n Injectable,\n signal,\n} from '@angular/core';\nimport {\n LoggerService,\n} from '@o3r/logger';\nimport {\n ConnectionService,\n} from '../connect/index';\nimport {\n type MessageProducer,\n registerProducer,\n} from '../managers';\nimport type {\n ErrorContent,\n} from '../messages';\nimport {\n ACTIVITY_EVENTS,\n DEFAULT_ACTIVITY_PRODUCER_CONFIG,\n HIGH_FREQUENCY_EVENTS,\n IFRAME_INTERACTION_EVENT,\n VISIBILITY_CHANGE_EVENT,\n} from './config';\nimport {\n IframeActivityTrackerService,\n} from './iframe-activity-tracker.service';\nimport type {\n ActivityInfo,\n ActivityProducerConfig,\n} from './interfaces';\n\n/**\n * Generic service that tracks user activity and sends messages.\n * Can be configured for different contexts (cockpit or modules) via start() method parameter.\n */\n@Injectable({\n providedIn: 'root'\n})\nexport class ActivityProducerService implements MessageProducer<UserActivityMessage> {\n private readonly messageService = inject(ConnectionService);\n private readonly destroyRef = inject(DestroyRef);\n private readonly iframeActivityTracker = inject(IframeActivityTrackerService);\n private readonly logger = inject(LoggerService);\n\n /**\n * Timestamp of the last sent activity message\n */\n private lastSentTimestamp = 0;\n\n /**\n * Bound event listeners for cleanup\n */\n private readonly boundListeners = new Map<UserActivityEventType, EventListener>();\n\n /**\n * Last emission timestamps for throttled high-frequency events\n */\n private readonly lastEmitTimestamps = new Map<UserActivityEventType, number>();\n\n /**\n * Whether the service has been started\n */\n private started = false;\n\n /**\n * Signal that emits local activity information.\n * This allows consumers to react to activity detected by this producer.\n */\n private readonly localActivityWritable = signal<ActivityInfo | undefined>(undefined);\n\n /**\n * Read-only signal containing the latest local activity info.\n * Use this signal to react to locally detected activity.\n */\n public readonly localActivity = this.localActivityWritable.asReadonly();\n\n /**\n * @inheritdoc\n */\n public readonly types = USER_ACTIVITY_MESSAGE_TYPE;\n\n constructor() {\n registerProducer(this);\n this.destroyRef.onDestroy(() => this.stop());\n }\n\n /**\n * Checks if a high-frequency event should be processed based on throttle timing.\n * This is called before shouldBroadcast to avoid expensive filter operations on every event.\n * @param eventType The type of activity event\n * @param throttleMs The throttle interval in milliseconds\n * @returns true if the event should be processed, false if it should be skipped\n */\n private shouldProcessHighFrequencyEvent(eventType: UserActivityEventType, throttleMs: number): boolean {\n const now = Date.now();\n const lastEmit = this.lastEmitTimestamps.get(eventType) ?? 0;\n\n if (now - lastEmit >= throttleMs) {\n this.lastEmitTimestamps.set(eventType, now);\n return true;\n }\n return false;\n }\n\n /**\n * Handles activity by sending a throttled message and emitting to local signal.\n * @param eventType The type of activity event that occurred\n * @param configObject\n */\n private onActivity(eventType: UserActivityEventType, configObject: ActivityProducerConfig): void {\n const now = Date.now();\n\n // Always emit local activity signal (not throttled for local detection)\n this.localActivityWritable.set({\n channelId: 'local',\n eventType,\n timestamp: now\n });\n\n // Send message with throttling\n if (now - this.lastSentTimestamp >= configObject.throttleMs) {\n this.lastSentTimestamp = now;\n this.sendActivityMessage(eventType, now);\n }\n }\n\n /**\n * Sends an activity message.\n * @param eventType The type of activity event\n * @param timestamp The timestamp of the event\n */\n private sendActivityMessage(eventType: UserActivityEventType, timestamp: number): void {\n const message: UserActivityMessageV1_0 = {\n type: USER_ACTIVITY_MESSAGE_TYPE,\n version: '1.0',\n eventType,\n timestamp\n };\n const registeredPeersIdsForUserActivity = [...this.messageService.knownPeers.entries()]\n .filter(([peerId]) => peerId !== this.messageService.id)\n .filter(([, messages]) => messages.some((msg) => msg.type === USER_ACTIVITY_MESSAGE_TYPE))\n .map((peer) => peer[0]);\n // send messages to the peers waiting for user activity\n // avoids sending the message to modules which are not using it\n if (registeredPeersIdsForUserActivity.length > 0) {\n this.messageService.send(message, { to: registeredPeersIdsForUserActivity });\n }\n }\n\n /**\n * @inheritdoc\n */\n public handleError(message: ErrorContent<UserActivityMessage>): void {\n this.logger.error('Error in user activity service message', message);\n }\n\n /**\n * Starts observing user activity events.\n * When activity is detected, it sends a throttled message.\n * Event listeners are attached after the next render to ensure DOM is ready.\n * @param config Configuration for the activity producer\n */\n public start(config?: Partial<ActivityProducerConfig>): void {\n if (this.started) {\n return;\n }\n this.started = true;\n const configObject: ActivityProducerConfig = { ...DEFAULT_ACTIVITY_PRODUCER_CONFIG, ...config };\n\n // Always use afterNextRender to ensure DOM is ready in all contexts\n afterNextRender(() => {\n ACTIVITY_EVENTS.forEach((eventType) => {\n const isHighFrequency = HIGH_FREQUENCY_EVENTS.includes(eventType);\n const listener = (event: Event) => {\n // do nothing if the event is a key kept pressed\n if (eventType === 'keydown' && event instanceof KeyboardEvent && event.repeat) {\n return;\n }\n // For high-frequency events, apply throttle BEFORE shouldBroadcast\n // to avoid expensive filter operations on every event (e.g. reflows)\n if (isHighFrequency && !this.shouldProcessHighFrequencyEvent(eventType, configObject.highFrequencyThrottleMs!)) {\n return;\n }\n // Apply filter if provided\n if (configObject.shouldBroadcast?.(event) === false) {\n return;\n }\n this.onActivity(eventType, configObject);\n };\n this.boundListeners.set(eventType, listener);\n document.addEventListener(eventType, listener, { passive: true, capture: true });\n });\n\n // Also listen for visibility changes\n const visibilityListener = () => {\n if (document.visibilityState === 'visible') {\n this.onActivity(VISIBILITY_CHANGE_EVENT, configObject);\n }\n };\n this.boundListeners.set(VISIBILITY_CHANGE_EVENT, visibilityListener);\n document.addEventListener(VISIBILITY_CHANGE_EVENT, visibilityListener, { passive: true, capture: true });\n\n // Set up nested iframe tracking if enabled\n if (configObject.trackNestedIframes) {\n this.iframeActivityTracker.start({\n pollIntervalMs: configObject.nestedIframePollIntervalMs,\n activityIntervalMs: configObject.nestedIframeActivityEmitIntervalMs,\n onActivity: () => this.onActivity(IFRAME_INTERACTION_EVENT, configObject)\n });\n }\n });\n }\n\n /**\n * Stops observing user activity events.\n */\n public stop(): void {\n this.boundListeners.forEach((listener, eventType) => {\n document.removeEventListener(eventType, listener, { capture: true });\n });\n this.boundListeners.clear();\n this.lastEmitTimestamps.clear();\n this.iframeActivityTracker.stop();\n }\n}\n","import {\n USER_ACTIVITY_MESSAGE_TYPE,\n type UserActivityMessageV1_0,\n} from '@ama-mfe/messages';\nimport type {\n RoutedMessage,\n} from '@amadeus-it-group/microfrontends';\nimport {\n inject,\n Injectable,\n signal,\n} from '@angular/core';\nimport {\n type BasicMessageConsumer,\n ConsumerManagerService,\n} from '../managers';\nimport {\n ActivityInfo,\n} from './interfaces';\n\n/**\n * Generic service that consumes user activity messages.\n * Can be used in both shell (to receive from modules) and modules (to receive from shell).\n */\n@Injectable({\n providedIn: 'root'\n})\nexport class ActivityConsumerService implements BasicMessageConsumer<UserActivityMessageV1_0> {\n private readonly consumerManagerService = inject(ConsumerManagerService);\n\n /**\n * Signal containing the latest activity info\n */\n private readonly latestReceivedActivityWritable = signal<ActivityInfo | undefined>(undefined);\n\n /**\n * Read-only signal containing the latest activity info received from other peers via the message protocol.\n * Access the timestamp via latestReceivedActivity()?.timestamp\n */\n public readonly latestReceivedActivity = this.latestReceivedActivityWritable.asReadonly();\n\n /**\n * @inheritdoc\n */\n public readonly type = USER_ACTIVITY_MESSAGE_TYPE;\n\n /**\n * @inheritdoc\n */\n public readonly supportedVersions: Record<string, (message: RoutedMessage<UserActivityMessageV1_0>) => void> = {\n // eslint-disable-next-line @typescript-eslint/naming-convention -- Version keys follow message versioning convention\n '1.0': (message) => {\n this.latestReceivedActivityWritable.set({\n channelId: message.from || 'unknown',\n eventType: message.payload.eventType,\n timestamp: message.payload.timestamp\n });\n }\n };\n\n /**\n * Starts the activity consumer service by registering it with the consumer manager.\n */\n public start(): void {\n this.consumerManagerService.register(this);\n }\n\n /**\n * Stops the activity consumer service by unregistering it from the consumer manager.\n */\n public stop(): void {\n this.consumerManagerService.unregister(this);\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":["ConnectionService"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@ama-mfe/ng-utils",
|
|
3
|
-
"version": "14.6.0-prerelease.
|
|
3
|
+
"version": "14.6.0-prerelease.14",
|
|
4
4
|
"publishConfig": {
|
|
5
5
|
"access": "public"
|
|
6
6
|
},
|
|
7
7
|
"peerDependencies": {
|
|
8
|
-
"@ama-mfe/messages": "~14.6.0-prerelease.
|
|
8
|
+
"@ama-mfe/messages": "~14.6.0-prerelease.14",
|
|
9
9
|
"@amadeus-it-group/microfrontends": "0.0.11",
|
|
10
10
|
"@amadeus-it-group/microfrontends-angular": "0.0.11",
|
|
11
11
|
"@angular-devkit/core": "^21.0.0",
|
|
@@ -14,16 +14,16 @@
|
|
|
14
14
|
"@angular/core": "^21.0.0",
|
|
15
15
|
"@angular/platform-browser": "^21.0.0",
|
|
16
16
|
"@angular/router": "^21.0.0",
|
|
17
|
-
"@o3r/logger": "~14.6.0-prerelease.
|
|
18
|
-
"@o3r/schematics": "~14.6.0-prerelease.
|
|
17
|
+
"@o3r/logger": "~14.6.0-prerelease.14",
|
|
18
|
+
"@o3r/schematics": "~14.6.0-prerelease.14",
|
|
19
19
|
"rxjs": "^7.8.1",
|
|
20
20
|
"type-fest": "^5.3.1"
|
|
21
21
|
},
|
|
22
22
|
"dependencies": {
|
|
23
23
|
"@amadeus-it-group/microfrontends": "0.0.11",
|
|
24
24
|
"@amadeus-it-group/microfrontends-angular": "0.0.11",
|
|
25
|
-
"@o3r/logger": "~14.6.0-prerelease.
|
|
26
|
-
"@o3r/schematics": "~14.6.0-prerelease.
|
|
25
|
+
"@o3r/logger": "~14.6.0-prerelease.14",
|
|
26
|
+
"@o3r/schematics": "~14.6.0-prerelease.14",
|
|
27
27
|
"tslib": "^2.6.2"
|
|
28
28
|
},
|
|
29
29
|
"sideEffects": false,
|
|
@@ -13,11 +13,11 @@ declare class ConnectDirective {
|
|
|
13
13
|
/**
|
|
14
14
|
* The connection ID required for the message peer service.
|
|
15
15
|
*/
|
|
16
|
-
connect: i0.InputSignal<string>;
|
|
16
|
+
readonly connect: i0.InputSignal<string>;
|
|
17
17
|
/**
|
|
18
18
|
* The sanitized source URL for the iframe.
|
|
19
19
|
*/
|
|
20
|
-
src: i0.InputSignal<SafeResourceUrl | undefined>;
|
|
20
|
+
readonly src: i0.InputSignal<SafeResourceUrl | undefined>;
|
|
21
21
|
/**
|
|
22
22
|
* Binds the `src` attribute of the iframe to the sanitized source URL.
|
|
23
23
|
*/
|
|
@@ -482,25 +482,25 @@ declare class RouteMemorizeDirective {
|
|
|
482
482
|
* Whether to memorize the route.
|
|
483
483
|
* Default is true.
|
|
484
484
|
*/
|
|
485
|
-
memorizeRoute: i0.InputSignal<boolean | "" | undefined>;
|
|
485
|
+
readonly memorizeRoute: i0.InputSignal<boolean | "" | undefined>;
|
|
486
486
|
/**
|
|
487
487
|
* The ID used to memorize the route.
|
|
488
488
|
*/
|
|
489
|
-
memorizeRouteId: i0.InputSignal<string | undefined>;
|
|
489
|
+
readonly memorizeRouteId: i0.InputSignal<string | undefined>;
|
|
490
490
|
/**
|
|
491
491
|
* The maximum age for memorizing the route.
|
|
492
492
|
* Default is 0.
|
|
493
493
|
*/
|
|
494
|
-
memorizeMaxAge: i0.InputSignal<number>;
|
|
494
|
+
readonly memorizeMaxAge: i0.InputSignal<number>;
|
|
495
495
|
/**
|
|
496
496
|
* The maximum age for memorizing the route, used as a fallback.
|
|
497
497
|
* Default is 0.
|
|
498
498
|
*/
|
|
499
|
-
memorizeRouteMaxAge: i0.InputSignal<number>;
|
|
499
|
+
readonly memorizeRouteMaxAge: i0.InputSignal<number>;
|
|
500
500
|
/**
|
|
501
501
|
* The connection ID for the iframe where the actual directive is applied.
|
|
502
502
|
*/
|
|
503
|
-
connect: i0.InputSignal<string | undefined>;
|
|
503
|
+
readonly connect: i0.InputSignal<string | undefined>;
|
|
504
504
|
private readonly maxAge;
|
|
505
505
|
constructor();
|
|
506
506
|
static ɵfac: i0.ɵɵFactoryDeclaration<RouteMemorizeDirective, never>;
|
|
@@ -1054,11 +1054,11 @@ declare class ScalableDirective {
|
|
|
1054
1054
|
/**
|
|
1055
1055
|
* The connection ID for the element, used as channel id backup
|
|
1056
1056
|
*/
|
|
1057
|
-
connect: i0.InputSignal<string | undefined>;
|
|
1057
|
+
readonly connect: i0.InputSignal<string | undefined>;
|
|
1058
1058
|
/**
|
|
1059
1059
|
* The channel id
|
|
1060
1060
|
*/
|
|
1061
|
-
scalable: i0.InputSignal<string | undefined>;
|
|
1061
|
+
readonly scalable: i0.InputSignal<string | undefined>;
|
|
1062
1062
|
private readonly resizeHandler;
|
|
1063
1063
|
private readonly destroyRef;
|
|
1064
1064
|
private readonly elem;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ama-mfe-ng-utils.d.ts","sources":["../../src/connect/connect-directive.ts","../../src/connect/connect-providers.ts","../../src/messages/available-sender.ts","../../src/messages/error/base.ts","../../src/messages/error/error-versions.ts","../../src/messages/error/index.ts","../../src/messages/error-sender.ts","../../src/messages/user-activity.ts","../../src/managers/interfaces.ts","../../src/managers/consumer-manager-service.ts","../../src/managers/abstract-message-consumer-service.ts","../../src/managers/producer-manager-service.ts","../../src/managers/utils.ts","../../src/history/history-consumer-service.ts","../../src/history/history-providers.ts","../../src/host-info/host-info.ts","../../src/host-info/host-info-pipe.ts","../../src/iframe-embed/iframe-embed.component.ts","../../src/navigation/navigation-consumer-service.ts","../../src/navigation/restore-route-pipe.ts","../../src/navigation/route-memorize/route-memorize-directive.ts","../../src/navigation/route-memorize/route-memorize-service.ts","../../src/navigation/routing-service.ts","../../src/navigation/navigation-exit/block-state/navigation-block.service.ts","../../src/navigation/navigation-exit/block-state/navigation-block-state-producer.service.ts","../../src/navigation/navigation-exit/block-state/navigation-block-state-consumer.service.ts","../../src/navigation/navigation-exit/navigation-request/navigation-request-manager.service.ts","../../src/navigation/navigation-exit/navigation-request/navigation-request-consumer.service.ts","../../src/navigation/navigation-exit/navigation-request/navigation-request-handler.ts","../../src/navigation/navigation-exit/navigation-request/navigation-request-module-handler.ts","../../src/navigation/navigation-exit/navigation-request/navigation-request-shell-handler.ts","../../src/navigation/navigation-exit/navigation-decision/navigation-decision-consumer.service.ts","../../src/navigation/navigation-exit/guards/navigation-block.shell-guard.ts","../../src/navigation/navigation-exit/guards/navigation-block.module-guard.ts","../../src/navigation/navigation-exit/navigation-confirmation/navigation-block-confirmation.interface.ts","../../src/navigation/navigation-exit/navigation-confirmation/navigation-block-confirmation.service.ts","../../src/navigation/navigation-exit/navigation-confirmation/strategies/browser-confirmation.strategy.ts","../../src/navigation/navigation-exit/navigation-confirmation/providers.ts","../../src/resize/resize-consumer-service.ts","../../src/resize/resize-producer-service.ts","../../src/resize/scalable-directive.ts","../../src/theme/apply-theme-pipe.ts","../../src/theme/theme-consumer-service.ts","../../src/theme/theme-helpers.ts","../../src/theme/theme-producer-service.ts","../../src/user-activity/interfaces.ts","../../src/user-activity/config.ts","../../src/user-activity/activity-producer.service.ts","../../src/user-activity/activity-consumer.service.ts","../../src/user-activity/iframe-activity-tracker.service.ts","../../src/utils.ts"],"mappings":"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","names":["_angular_core","ConnectionConfig"]}
|
|
1
|
+
{"version":3,"file":"ama-mfe-ng-utils.d.ts","sources":["../../src/connect/connect-directive.ts","../../src/connect/connect-providers.ts","../../src/messages/available-sender.ts","../../src/messages/error/base.ts","../../src/messages/error/error-versions.ts","../../src/messages/error/index.ts","../../src/messages/error-sender.ts","../../src/messages/user-activity.ts","../../src/managers/interfaces.ts","../../src/managers/consumer-manager-service.ts","../../src/managers/abstract-message-consumer-service.ts","../../src/managers/producer-manager-service.ts","../../src/managers/utils.ts","../../src/history/history-consumer-service.ts","../../src/history/history-providers.ts","../../src/host-info/host-info.ts","../../src/host-info/host-info-pipe.ts","../../src/iframe-embed/iframe-embed.component.ts","../../src/navigation/navigation-consumer-service.ts","../../src/navigation/restore-route-pipe.ts","../../src/navigation/route-memorize/route-memorize-directive.ts","../../src/navigation/route-memorize/route-memorize-service.ts","../../src/navigation/routing-service.ts","../../src/navigation/navigation-exit/block-state/navigation-block.service.ts","../../src/navigation/navigation-exit/block-state/navigation-block-state-producer.service.ts","../../src/navigation/navigation-exit/block-state/navigation-block-state-consumer.service.ts","../../src/navigation/navigation-exit/navigation-request/navigation-request-manager.service.ts","../../src/navigation/navigation-exit/navigation-request/navigation-request-consumer.service.ts","../../src/navigation/navigation-exit/navigation-request/navigation-request-handler.ts","../../src/navigation/navigation-exit/navigation-request/navigation-request-module-handler.ts","../../src/navigation/navigation-exit/navigation-request/navigation-request-shell-handler.ts","../../src/navigation/navigation-exit/navigation-decision/navigation-decision-consumer.service.ts","../../src/navigation/navigation-exit/guards/navigation-block.shell-guard.ts","../../src/navigation/navigation-exit/guards/navigation-block.module-guard.ts","../../src/navigation/navigation-exit/navigation-confirmation/navigation-block-confirmation.interface.ts","../../src/navigation/navigation-exit/navigation-confirmation/navigation-block-confirmation.service.ts","../../src/navigation/navigation-exit/navigation-confirmation/strategies/browser-confirmation.strategy.ts","../../src/navigation/navigation-exit/navigation-confirmation/providers.ts","../../src/resize/resize-consumer-service.ts","../../src/resize/resize-producer-service.ts","../../src/resize/scalable-directive.ts","../../src/theme/apply-theme-pipe.ts","../../src/theme/theme-consumer-service.ts","../../src/theme/theme-helpers.ts","../../src/theme/theme-producer-service.ts","../../src/user-activity/interfaces.ts","../../src/user-activity/config.ts","../../src/user-activity/activity-producer.service.ts","../../src/user-activity/activity-consumer.service.ts","../../src/user-activity/iframe-activity-tracker.service.ts","../../src/utils.ts"],"mappings":"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","names":["_angular_core","ConnectionConfig"]}
|