{"version":3,"file":"service-worker.mjs","sources":["../../../../../darwin_arm64-fastbuild-ST-fdfa778d11ba/bin/packages/service-worker/src/low_level.ts","../../../../../darwin_arm64-fastbuild-ST-fdfa778d11ba/bin/packages/service-worker/src/push.ts","../../../../../darwin_arm64-fastbuild-ST-fdfa778d11ba/bin/packages/service-worker/src/update.ts","../../../../../darwin_arm64-fastbuild-ST-fdfa778d11ba/bin/packages/service-worker/src/provider.ts","../../../../../darwin_arm64-fastbuild-ST-fdfa778d11ba/bin/packages/service-worker/src/module.ts"],"sourcesContent":["/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.dev/license\n */\n\nimport {ApplicationRef, type Injector, ɵRuntimeError as RuntimeError} from '@angular/core';\nimport {Observable, Subject} from 'rxjs';\nimport {filter, map, switchMap, take} from 'rxjs/operators';\n\nimport {RuntimeErrorCode} from './errors';\n\nexport const ERR_SW_NOT_SUPPORTED = 'Service workers are disabled or not supported by this browser';\n\n/**\n * An event emitted when the service worker has checked the version of the app on the server and it\n * didn't find a new version that it doesn't have already downloaded.\n *\n * @see {@link /ecosystem/service-workers/communications Service Worker Communication Guide}\n\n *\n * @publicApi\n */\nexport interface NoNewVersionDetectedEvent {\n  type: 'NO_NEW_VERSION_DETECTED';\n  version: {hash: string; appData?: Object};\n}\n\n/**\n * An event emitted when the service worker has detected a new version of the app on the server and\n * is about to start downloading it.\n *\n * @see {@link /ecosystem/service-workers/communications Service Worker Communication Guide}\n\n *\n * @publicApi\n */\nexport interface VersionDetectedEvent {\n  type: 'VERSION_DETECTED';\n  version: {hash: string; appData?: object};\n}\n\n/**\n * An event emitted when the installation of a new version failed.\n * It may be used for logging/monitoring purposes.\n *\n * @see {@link /ecosystem/service-workers/communications Service Worker Communication Guide}\n *a\n * @publicApi\n */\nexport interface VersionInstallationFailedEvent {\n  type: 'VERSION_INSTALLATION_FAILED';\n  version: {hash: string; appData?: object};\n  error: string;\n}\n\n/**\n * An event emitted when a new version of the app is available.\n *\n * @see {@link /ecosystem/service-workers/communications Service Worker Communication Guide}\n\n *\n * @publicApi\n */\nexport interface VersionReadyEvent {\n  type: 'VERSION_READY';\n  currentVersion: {hash: string; appData?: object};\n  latestVersion: {hash: string; appData?: object};\n}\n\n/**\n * A union of all event types that can be emitted by\n * {@link SwUpdate#versionUpdates}.\n *\n * @publicApi\n */\nexport type VersionEvent =\n  | VersionDetectedEvent\n  | VersionInstallationFailedEvent\n  | VersionReadyEvent\n  | NoNewVersionDetectedEvent;\n\n/**\n * An event emitted when the version of the app used by the service worker to serve this client is\n * in a broken state that cannot be recovered from and a full page reload is required.\n *\n * For example, the service worker may not be able to retrieve a required resource, neither from the\n * cache nor from the server. This could happen if a new version is deployed to the server and the\n * service worker cache has been partially cleaned by the browser, removing some files of a previous\n * app version but not all.\n *\n * @see [Handling an unrecoverable state](ecosystem/service-workers/communications#handling-an-unrecoverable-state)\n\n *\n * @publicApi\n */\nexport interface UnrecoverableStateEvent {\n  type: 'UNRECOVERABLE_STATE';\n  reason: string;\n}\n\n/**\n * An event emitted when a `PushEvent` is received by the service worker.\n */\nexport interface PushEvent {\n  type: 'PUSH';\n  data: any;\n}\n\nexport type IncomingEvent = UnrecoverableStateEvent | VersionEvent;\n\nexport interface TypedEvent {\n  type: string;\n}\n\ntype OperationCompletedEvent =\n  | {\n      type: 'OPERATION_COMPLETED';\n      nonce: number;\n      result: boolean;\n    }\n  | {\n      type: 'OPERATION_COMPLETED';\n      nonce: number;\n      result?: undefined;\n      error: string;\n    };\n\n/**\n * @publicApi\n */\nexport class NgswCommChannel {\n  readonly worker: Observable<ServiceWorker>;\n\n  readonly registration: Observable<ServiceWorkerRegistration>;\n\n  readonly events: Observable<TypedEvent>;\n\n  constructor(\n    private serviceWorker: ServiceWorkerContainer | undefined,\n    injector?: Injector,\n  ) {\n    if (!serviceWorker) {\n      this.worker =\n        this.events =\n        this.registration =\n          new Observable<never>((subscriber) =>\n            subscriber.error(\n              new RuntimeError(\n                RuntimeErrorCode.SERVICE_WORKER_DISABLED_OR_NOT_SUPPORTED_BY_THIS_BROWSER,\n                (typeof ngDevMode === 'undefined' || ngDevMode) && ERR_SW_NOT_SUPPORTED,\n              ),\n            ),\n          );\n    } else {\n      let currentWorker: ServiceWorker | null = null;\n      const workerSubject = new Subject<ServiceWorker>();\n      this.worker = new Observable((subscriber) => {\n        if (currentWorker !== null) {\n          subscriber.next(currentWorker);\n        }\n        return workerSubject.subscribe((v) => subscriber.next(v));\n      });\n      const updateController = () => {\n        const {controller} = serviceWorker;\n        if (controller === null) {\n          return;\n        }\n        currentWorker = controller;\n        workerSubject.next(currentWorker);\n      };\n      serviceWorker.addEventListener('controllerchange', updateController);\n      updateController();\n\n      this.registration = this.worker.pipe(\n        switchMap(() =>\n          serviceWorker.getRegistration().then((registration) => {\n            // The `getRegistration()` method may return undefined in\n            // non-secure contexts or incognito mode, where service worker\n            // registration might not be allowed.\n            if (!registration) {\n              throw new RuntimeError(\n                RuntimeErrorCode.SERVICE_WORKER_DISABLED_OR_NOT_SUPPORTED_BY_THIS_BROWSER,\n                (typeof ngDevMode === 'undefined' || ngDevMode) && ERR_SW_NOT_SUPPORTED,\n              );\n            }\n\n            return registration;\n          }),\n        ),\n      );\n\n      const _events = new Subject<TypedEvent>();\n      this.events = _events.asObservable();\n\n      const messageListener = (event: MessageEvent) => {\n        const {data} = event;\n        if (data?.type) {\n          _events.next(data);\n        }\n      };\n      serviceWorker.addEventListener('message', messageListener);\n\n      // The injector is optional to avoid breaking changes.\n      const appRef = injector?.get(ApplicationRef, null, {optional: true});\n      appRef?.onDestroy(() => {\n        serviceWorker.removeEventListener('controllerchange', updateController);\n        serviceWorker.removeEventListener('message', messageListener);\n      });\n    }\n  }\n\n  postMessage(action: string, payload: Object): Promise<void> {\n    return new Promise<void>((resolve) => {\n      this.worker.pipe(take(1)).subscribe((sw) => {\n        sw.postMessage({\n          action,\n          ...payload,\n        });\n\n        resolve();\n      });\n    });\n  }\n\n  postMessageWithOperation(\n    type: string,\n    payload: Object,\n    operationNonce: number,\n  ): Promise<boolean> {\n    const waitForOperationCompleted = this.waitForOperationCompleted(operationNonce);\n    const postMessage = this.postMessage(type, payload);\n    return Promise.all([postMessage, waitForOperationCompleted]).then(([, result]) => result);\n  }\n\n  generateNonce(): number {\n    return Math.round(Math.random() * 10000000);\n  }\n\n  eventsOfType<T extends TypedEvent>(type: T['type'] | T['type'][]): Observable<T> {\n    let filterFn: (event: TypedEvent) => event is T;\n    if (typeof type === 'string') {\n      filterFn = (event: TypedEvent): event is T => event.type === type;\n    } else {\n      filterFn = (event: TypedEvent): event is T => type.includes(event.type);\n    }\n    return this.events.pipe(filter(filterFn));\n  }\n\n  nextEventOfType<T extends TypedEvent>(type: T['type']): Observable<T> {\n    return this.eventsOfType(type).pipe(take(1));\n  }\n\n  waitForOperationCompleted(nonce: number): Promise<boolean> {\n    return new Promise<boolean>((resolve, reject) => {\n      this.eventsOfType<OperationCompletedEvent>('OPERATION_COMPLETED')\n        .pipe(\n          filter((event) => event.nonce === nonce),\n          take(1),\n          map((event) => {\n            if (event.result !== undefined) {\n              return event.result;\n            }\n            throw new Error(event.error!);\n          }),\n        )\n        .subscribe({\n          next: resolve,\n          error: reject,\n        });\n    });\n  }\n\n  get isEnabled(): boolean {\n    return !!this.serviceWorker;\n  }\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.dev/license\n */\n\nimport {Injectable, ɵRuntimeError as RuntimeError} from '@angular/core';\nimport {NEVER, Observable, Subject} from 'rxjs';\nimport {map, switchMap, take} from 'rxjs/operators';\n\nimport {RuntimeErrorCode} from './errors';\nimport {ERR_SW_NOT_SUPPORTED, NgswCommChannel, PushEvent} from './low_level';\n\n/**\n * Subscribe and listen to\n * [Web Push\n * Notifications](https://developer.mozilla.org/en-US/docs/Web/API/Push_API/Best_Practices) through\n * Angular Service Worker.\n *\n * @usageNotes\n *\n * You can inject a `SwPush` instance into any component or service\n * as a dependency.\n *\n * <code-example path=\"service-worker/push/service_worker_component.ts\" region=\"inject-sw-push\"\n * header=\"app.component.ts\"></code-example>\n *\n * To subscribe, call `SwPush.requestSubscription()`, which asks the user for permission.\n * The call returns a `Promise` with a new\n * [`PushSubscription`](https://developer.mozilla.org/en-US/docs/Web/API/PushSubscription)\n * instance.\n *\n * <code-example path=\"service-worker/push/service_worker_component.ts\" region=\"subscribe-to-push\"\n * header=\"app.component.ts\"></code-example>\n *\n * A request is rejected if the user denies permission, or if the browser\n * blocks or does not support the Push API or ServiceWorkers.\n * Check `SwPush.isEnabled` to confirm status.\n *\n * Invoke Push Notifications by pushing a message with the following payload.\n *\n * ```ts\n * {\n *   \"notification\": {\n *     \"actions\": NotificationAction[],\n *     \"badge\": USVString,\n *     \"body\": DOMString,\n *     \"data\": any,\n *     \"dir\": \"auto\"|\"ltr\"|\"rtl\",\n *     \"icon\": USVString,\n *     \"image\": USVString,\n *     \"lang\": DOMString,\n *     \"renotify\": boolean,\n *     \"requireInteraction\": boolean,\n *     \"silent\": boolean,\n *     \"tag\": DOMString,\n *     \"timestamp\": DOMTimeStamp,\n *     \"title\": DOMString,\n *     \"vibrate\": number[]\n *   }\n * }\n * ```\n *\n * Only `title` is required. See `Notification`\n * [instance\n * properties](https://developer.mozilla.org/en-US/docs/Web/API/Notification#Instance_properties).\n *\n * While the subscription is active, Service Worker listens for\n * [PushEvent](https://developer.mozilla.org/en-US/docs/Web/API/PushEvent)\n * occurrences and creates\n * [Notification](https://developer.mozilla.org/en-US/docs/Web/API/Notification)\n * instances in response.\n *\n * Unsubscribe using `SwPush.unsubscribe()`.\n *\n * An application can subscribe to `SwPush.notificationClicks` observable to be notified when a user\n * clicks on a notification. For example:\n *\n * <code-example path=\"service-worker/push/service_worker_component.ts\" region=\"subscribe-to-notification-clicks\"\n * header=\"app.component.ts\"></code-example>\n *\n * You can read more on handling notification clicks in the [Service worker notifications\n * guide](ecosystem/service-workers/push-notifications).\n *\n * @see [Push Notifications](https://developers.google.com/web/fundamentals/codelabs/push-notifications/)\n * @see [Angular Push Notifications](https://blog.angular-university.io/angular-push-notifications/)\n * @see [MDN: Push API](https://developer.mozilla.org/en-US/docs/Web/API/Push_API)\n * @see [MDN: Notifications API](https://developer.mozilla.org/en-US/docs/Web/API/Notifications_API)\n * @see [MDN: Web Push API Notifications best practices](https://developer.mozilla.org/en-US/docs/Web/API/Push_API/Best_Practices)\n * @see [Push notifications guide](ecosystem/service-workers/push-notifications)\n *\n * @publicApi\n */\n@Injectable()\nexport class SwPush {\n  /**\n   * Emits the payloads of the received push notification messages.\n   */\n  readonly messages: Observable<object>;\n\n  /**\n   * Emits the payloads of the received push notification messages as well as the action the user\n   * interacted with. If no action was used the `action` property contains an empty string `''`.\n   *\n   * Note that the `notification` property does **not** contain a\n   * [Notification][Mozilla Notification] object but rather a\n   * [NotificationOptions](https://notifications.spec.whatwg.org/#dictdef-notificationoptions)\n   * object that also includes the `title` of the [Notification][Mozilla Notification] object.\n   *\n   * [Mozilla Notification]: https://developer.mozilla.org/en-US/docs/Web/API/Notification\n   *\n   * @see [Notification click handling](ecosystem/service-workers/push-notifications#notification-click-handling)\n   *\n   */\n  readonly notificationClicks: Observable<{\n    action: string;\n    notification: NotificationOptions & {\n      title: string;\n    };\n  }>;\n\n  /**\n   * Emits the payloads of notifications that were closed, along with the action (if any)\n   * associated with the close event. If no action was used, the `action` property contains\n   * an empty string `''`.\n   *\n   * Note that the `notification` property does **not** contain a\n   * [Notification][Mozilla Notification] object but rather a\n   * [NotificationOptions](https://notifications.spec.whatwg.org/#dictdef-notificationoptions)\n   * object that also includes the `title` of the [Notification][Mozilla Notification] object.\n   *\n   * [Mozilla Notification]: https://developer.mozilla.org/en-US/docs/Web/API/Notification\n   */\n  readonly notificationCloses: Observable<{\n    action: string;\n    notification: NotificationOptions & {\n      title: string;\n    };\n  }>;\n\n  /**\n   * Emits updates to the push subscription, including both the previous (`oldSubscription`)\n   * and current (`newSubscription`) values. Either subscription may be `null`, depending on\n   * the context:\n   *\n   * - `oldSubscription` is `null` if no previous subscription existed.\n   * - `newSubscription` is `null` if the subscription was invalidated and not replaced.\n   *\n   * This stream allows clients to react to automatic changes in push subscriptions,\n   * such as those triggered by browser expiration or key rotation.\n   *\n   * [Push API]: https://w3c.github.io/push-api\n   */\n  readonly pushSubscriptionChanges: Observable<{\n    oldSubscription: PushSubscription | null;\n    newSubscription: PushSubscription | null;\n  }>;\n\n  /**\n   * Emits the currently active\n   * [PushSubscription](https://developer.mozilla.org/en-US/docs/Web/API/PushSubscription)\n   * associated to the Service Worker registration or `null` if there is no subscription.\n   */\n  readonly subscription: Observable<PushSubscription | null>;\n\n  /**\n   * True if the Service Worker is enabled (supported by the browser and enabled via\n   * `ServiceWorkerModule`).\n   */\n  get isEnabled(): boolean {\n    return this.sw.isEnabled;\n  }\n\n  private pushManager: Observable<PushManager> | null = null;\n  private subscriptionChanges = new Subject<PushSubscription | null>();\n\n  constructor(private sw: NgswCommChannel) {\n    if (!sw.isEnabled) {\n      this.messages = NEVER;\n      this.notificationClicks = NEVER;\n      this.notificationCloses = NEVER;\n      this.pushSubscriptionChanges = NEVER;\n      this.subscription = NEVER;\n      return;\n    }\n\n    this.messages = this.sw.eventsOfType<PushEvent>('PUSH').pipe(map((message) => message.data));\n\n    this.notificationClicks = this.sw\n      .eventsOfType('NOTIFICATION_CLICK')\n      .pipe(map((message: any) => message.data));\n\n    this.notificationCloses = this.sw\n      .eventsOfType('NOTIFICATION_CLOSE')\n      .pipe(map((message: any) => message.data));\n\n    this.pushSubscriptionChanges = this.sw\n      .eventsOfType('PUSH_SUBSCRIPTION_CHANGE')\n      .pipe(map((message: any) => message.data));\n\n    this.pushManager = this.sw.registration.pipe(\n      map(\n        (registration) =>\n          (registration as ServiceWorkerRegistration & {pushManager: PushManager}).pushManager,\n      ),\n    );\n\n    const workerDrivenSubscriptions = this.pushManager.pipe(\n      switchMap((pm) => pm.getSubscription()),\n    );\n    this.subscription = new Observable((subscriber) => {\n      const workerDrivenSubscription = workerDrivenSubscriptions.subscribe(subscriber);\n      const subscriptionChanges = this.subscriptionChanges.subscribe(subscriber);\n      return () => {\n        workerDrivenSubscription.unsubscribe();\n        subscriptionChanges.unsubscribe();\n      };\n    });\n  }\n\n  /**\n   * Subscribes to Web Push Notifications,\n   * after requesting and receiving user permission.\n   *\n   * @param options An object containing the `serverPublicKey` string.\n   * @returns A Promise that resolves to the new subscription object.\n   */\n  requestSubscription(options: {serverPublicKey: string}): Promise<PushSubscription> {\n    if (!this.sw.isEnabled || this.pushManager === null) {\n      return Promise.reject(new Error(ERR_SW_NOT_SUPPORTED));\n    }\n    const pushOptions: PushSubscriptionOptionsInit = {userVisibleOnly: true};\n    let key = this.decodeBase64(options.serverPublicKey.replace(/_/g, '/').replace(/-/g, '+'));\n    let applicationServerKey = new Uint8Array(new ArrayBuffer(key.length));\n    for (let i = 0; i < key.length; i++) {\n      applicationServerKey[i] = key.charCodeAt(i);\n    }\n    pushOptions.applicationServerKey = applicationServerKey;\n\n    return new Promise((resolve, reject) => {\n      this.pushManager!.pipe(\n        switchMap((pm) => pm.subscribe(pushOptions)),\n        take(1),\n      ).subscribe({\n        next: (sub) => {\n          this.subscriptionChanges.next(sub);\n          resolve(sub);\n        },\n        error: reject,\n      });\n    });\n  }\n\n  /**\n   * Unsubscribes from Service Worker push notifications.\n   *\n   * @returns A Promise that is resolved when the operation succeeds, or is rejected if there is no\n   *          active subscription or the unsubscribe operation fails.\n   */\n  unsubscribe(): Promise<void> {\n    if (!this.sw.isEnabled) {\n      return Promise.reject(new Error(ERR_SW_NOT_SUPPORTED));\n    }\n\n    const doUnsubscribe = (sub: PushSubscription | null) => {\n      if (sub === null) {\n        throw new RuntimeError(\n          RuntimeErrorCode.NOT_SUBSCRIBED_TO_PUSH_NOTIFICATIONS,\n          (typeof ngDevMode === 'undefined' || ngDevMode) &&\n            'Not subscribed to push notifications.',\n        );\n      }\n\n      return sub.unsubscribe().then((success) => {\n        if (!success) {\n          throw new RuntimeError(\n            RuntimeErrorCode.PUSH_SUBSCRIPTION_UNSUBSCRIBE_FAILED,\n            (typeof ngDevMode === 'undefined' || ngDevMode) && 'Unsubscribe failed!',\n          );\n        }\n\n        this.subscriptionChanges.next(null);\n      });\n    };\n\n    return new Promise((resolve, reject) => {\n      this.subscription\n        .pipe(take(1), switchMap(doUnsubscribe))\n        .subscribe({next: resolve, error: reject});\n    });\n  }\n\n  private decodeBase64(input: string): string {\n    return atob(input);\n  }\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.dev/license\n */\n\nimport {Injectable, ɵRuntimeError as RuntimeError} from '@angular/core';\nimport {NEVER, Observable} from 'rxjs';\n\nimport {RuntimeErrorCode} from './errors';\nimport {\n  ERR_SW_NOT_SUPPORTED,\n  NgswCommChannel,\n  UnrecoverableStateEvent,\n  VersionEvent,\n} from './low_level';\n\n/**\n * Subscribe to update notifications from the Service Worker, trigger update\n * checks, and forcibly activate updates.\n *\n * @see {@link /ecosystem/service-workers/communications Service Worker Communication Guide}\n *\n * @publicApi\n */\n@Injectable()\nexport class SwUpdate {\n  /**\n   * Emits a `VersionDetectedEvent` event whenever a new version is detected on the server.\n   *\n   * Emits a `VersionInstallationFailedEvent` event whenever checking for or downloading a new\n   * version fails.\n   *\n   * Emits a `VersionReadyEvent` event whenever a new version has been downloaded and is ready for\n   * activation.\n   *\n   * @see [Version updates](ecosystem/service-workers/communications#version-updates)\n   *\n   */\n  readonly versionUpdates: Observable<VersionEvent>;\n\n  /**\n   * Emits an `UnrecoverableStateEvent` event whenever the version of the app used by the service\n   * worker to serve this client is in a broken state that cannot be recovered from without a full\n   * page reload.\n   */\n  readonly unrecoverable: Observable<UnrecoverableStateEvent>;\n\n  /**\n   * True if the Service Worker is enabled (supported by the browser and enabled via\n   * `ServiceWorkerModule`).\n   */\n  get isEnabled(): boolean {\n    return this.sw.isEnabled;\n  }\n\n  private ongoingCheckForUpdate: Promise<boolean> | null = null;\n\n  constructor(private sw: NgswCommChannel) {\n    if (!sw.isEnabled) {\n      this.versionUpdates = NEVER;\n      this.unrecoverable = NEVER;\n      return;\n    }\n    this.versionUpdates = this.sw.eventsOfType<VersionEvent>([\n      'VERSION_DETECTED',\n      'VERSION_INSTALLATION_FAILED',\n      'VERSION_READY',\n      'NO_NEW_VERSION_DETECTED',\n    ]);\n    this.unrecoverable = this.sw.eventsOfType<UnrecoverableStateEvent>('UNRECOVERABLE_STATE');\n  }\n\n  /**\n   * Checks for an update and waits until the new version is downloaded from the server and ready\n   * for activation.\n   *\n   * @returns a promise that\n   * - resolves to `true` if a new version was found and is ready to be activated.\n   * - resolves to `false` if no new version was found\n   * - rejects if any error occurs\n   */\n  checkForUpdate(): Promise<boolean> {\n    if (!this.sw.isEnabled) {\n      return Promise.reject(new Error(ERR_SW_NOT_SUPPORTED));\n    }\n    if (this.ongoingCheckForUpdate) {\n      return this.ongoingCheckForUpdate;\n    }\n    const nonce = this.sw.generateNonce();\n    this.ongoingCheckForUpdate = this.sw\n      .postMessageWithOperation('CHECK_FOR_UPDATES', {nonce}, nonce)\n      .finally(() => {\n        this.ongoingCheckForUpdate = null;\n      });\n    return this.ongoingCheckForUpdate;\n  }\n\n  /**\n   * Updates the current client (i.e. browser tab) to the latest version that is ready for\n   * activation.\n   *\n   * In most cases, you should not use this method and instead should update a client by reloading\n   * the page.\n   *\n   * <div class=\"docs-alert docs-alert-important\">\n   *\n   * Updating a client without reloading can easily result in a broken application due to a version\n   * mismatch between the application shell and other page resources,\n   * such as lazy-loaded chunks, whose filenames may change between\n   * versions.\n   *\n   * Only use this method, if you are certain it is safe for your specific use case.\n   *\n   * </div>\n   *\n   * @returns a promise that\n   *  - resolves to `true` if an update was activated successfully\n   *  - resolves to `false` if no update was available (for example, the client was already on the\n   *    latest version).\n   *  - rejects if any error occurs\n   */\n  activateUpdate(): Promise<boolean> {\n    if (!this.sw.isEnabled) {\n      return Promise.reject(\n        new RuntimeError(\n          RuntimeErrorCode.SERVICE_WORKER_DISABLED_OR_NOT_SUPPORTED_BY_THIS_BROWSER,\n          (typeof ngDevMode === 'undefined' || ngDevMode) && ERR_SW_NOT_SUPPORTED,\n        ),\n      );\n    }\n    const nonce = this.sw.generateNonce();\n    return this.sw.postMessageWithOperation('ACTIVATE_UPDATE', {nonce}, nonce);\n  }\n}\n","/*!\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.dev/license\n */\n\nimport {\n  ApplicationRef,\n  EnvironmentProviders,\n  inject,\n  InjectionToken,\n  Injector,\n  makeEnvironmentProviders,\n  NgZone,\n  provideAppInitializer,\n  ɵRuntimeError as RuntimeError,\n  ɵformatRuntimeError as formatRuntimeError,\n} from '@angular/core';\nimport type {Observable} from 'rxjs';\n\nimport {NgswCommChannel} from './low_level';\nimport {SwPush} from './push';\nimport {SwUpdate} from './update';\nimport {RuntimeErrorCode} from './errors';\n\nexport const SCRIPT = new InjectionToken<string>(\n  typeof ngDevMode !== 'undefined' && ngDevMode ? 'NGSW_REGISTER_SCRIPT' : '',\n);\n\nexport function ngswAppInitializer(): void {\n  if (typeof ngServerMode !== 'undefined' && ngServerMode) {\n    return;\n  }\n\n  const options = inject(SwRegistrationOptions);\n\n  if (!('serviceWorker' in navigator && options.enabled !== false)) {\n    return;\n  }\n\n  const script = inject(SCRIPT);\n  const ngZone = inject(NgZone);\n  const appRef = inject(ApplicationRef);\n\n  // Set up the `controllerchange` event listener outside of\n  // the Angular zone to avoid unnecessary change detections,\n  // as this event has no impact on view updates.\n  ngZone.runOutsideAngular(() => {\n    // Wait for service worker controller changes, and fire an INITIALIZE action when a new SW\n    // becomes active. This allows the SW to initialize itself even if there is no application\n    // traffic.\n    const sw = navigator.serviceWorker;\n    const onControllerChange = () => sw.controller?.postMessage({action: 'INITIALIZE'});\n\n    sw.addEventListener('controllerchange', onControllerChange);\n\n    appRef.onDestroy(() => {\n      sw.removeEventListener('controllerchange', onControllerChange);\n    });\n  });\n\n  // Run outside the Angular zone to avoid preventing the app from stabilizing (especially\n  // given that some registration strategies wait for the app to stabilize).\n  ngZone.runOutsideAngular(() => {\n    let readyToRegister: Promise<void>;\n\n    const {registrationStrategy} = options;\n    if (typeof registrationStrategy === 'function') {\n      readyToRegister = new Promise((resolve) => registrationStrategy().subscribe(() => resolve()));\n    } else {\n      const [strategy, ...args] = (registrationStrategy || 'registerWhenStable:30000').split(':');\n\n      switch (strategy) {\n        case 'registerImmediately':\n          readyToRegister = Promise.resolve();\n          break;\n        case 'registerWithDelay':\n          readyToRegister = delayWithTimeout(+args[0] || 0);\n          break;\n        case 'registerWhenStable':\n          readyToRegister = Promise.race([appRef.whenStable(), delayWithTimeout(+args[0])]);\n          break;\n        default:\n          // Unknown strategy.\n          throw new RuntimeError(\n            RuntimeErrorCode.UNKNOWN_REGISTRATION_STRATEGY,\n            (typeof ngDevMode === 'undefined' || ngDevMode) &&\n              `Unknown ServiceWorker registration strategy: ${options.registrationStrategy}`,\n          );\n      }\n    }\n\n    // Don't return anything to avoid blocking the application until the SW is registered.\n    // Catch and log the error if SW registration fails to avoid uncaught rejection warning.\n    readyToRegister.then(() => {\n      // If the registration strategy has resolved after the application has\n      // been explicitly destroyed by the user (e.g., by navigating away to\n      // another application), we simply should not register the worker.\n      if (appRef.destroyed) {\n        return;\n      }\n\n      navigator.serviceWorker\n        .register(script, {\n          scope: options.scope,\n          updateViaCache: options.updateViaCache,\n          type: options.type,\n        })\n        .catch((err) =>\n          console.error(\n            formatRuntimeError(\n              RuntimeErrorCode.SERVICE_WORKER_REGISTRATION_FAILED,\n              (typeof ngDevMode === 'undefined' || ngDevMode) &&\n                'Service worker registration failed with: ' + err,\n            ),\n          ),\n        );\n    });\n  });\n}\n\nfunction delayWithTimeout(timeout: number): Promise<void> {\n  return new Promise((resolve) => setTimeout(resolve, timeout));\n}\n\nexport function ngswCommChannelFactory(): NgswCommChannel {\n  const opts = inject(SwRegistrationOptions);\n  const injector = inject(Injector);\n  const isBrowser = !(typeof ngServerMode !== 'undefined' && ngServerMode);\n\n  return new NgswCommChannel(\n    isBrowser && opts.enabled !== false ? navigator.serviceWorker : undefined,\n    injector,\n  );\n}\n\n/**\n * Token that can be used to provide options for `ServiceWorkerModule` outside of\n * `ServiceWorkerModule.register()`.\n *\n * You can use this token to define a provider that generates the registration options at runtime,\n * for example via a function call:\n *\n * {@example service-worker/registration-options/module.ts region=\"registration-options\"\n *     header=\"app.module.ts\"}\n *\n * @see [Service worker configuration](ecosystem/service-workers/getting-started#service-worker-configuration)\n *\n * @publicApi\n */\nexport abstract class SwRegistrationOptions {\n  /**\n   * Whether the ServiceWorker will be registered and the related services (such as `SwPush` and\n   * `SwUpdate`) will attempt to communicate and interact with it.\n   *\n   * Default: true\n   */\n  enabled?: boolean;\n\n  /**\n   * The value of the setting used to determine the circumstances in which the browser\n   * will consult the HTTP cache when it tries to update the service worker or any scripts that are imported via importScripts().\n   * [ServiceWorkerRegistration.updateViaCache](https://developer.mozilla.org/en-US/docs/Web/API/ServiceWorkerRegistration/updateViaCache)\n   */\n  updateViaCache?: ServiceWorkerUpdateViaCache;\n\n  /**\n   * The type of the ServiceWorker script to register.\n   * [ServiceWorkerRegistration#type](https://developer.mozilla.org/en-US/docs/Web/API/ServiceWorkerContainer/register#type)\n   * - `classic`: Registers the script as a classic worker. ES module features such as `import` and `export` are NOT allowed in the script.\n   * - `module`: Registers the script as an ES module. Allows use of `import`/`export` syntax and module features.\n   *\n   * @default 'classic'\n   */\n  type?: WorkerType;\n\n  /**\n   * A URL that defines the ServiceWorker's registration scope; that is, what range of URLs it can\n   * control. It will be used when calling\n   * [ServiceWorkerContainer#register()](https://developer.mozilla.org/en-US/docs/Web/API/ServiceWorkerContainer/register).\n   */\n  scope?: string;\n\n  /**\n   * Defines the ServiceWorker registration strategy, which determines when it will be registered\n   * with the browser.\n   *\n   * The default behavior of registering once the application stabilizes (i.e. as soon as there are\n   * no pending micro- and macro-tasks) is designed to register the ServiceWorker as soon as\n   * possible but without affecting the application's first time load.\n   *\n   * Still, there might be cases where you want more control over when the ServiceWorker is\n   * registered (for example, there might be a long-running timeout or polling interval, preventing\n   * the app from stabilizing). The available option are:\n   *\n   * - `registerWhenStable:<timeout>`: Register as soon as the application stabilizes (no pending\n   *     micro-/macro-tasks) but no later than `<timeout>` milliseconds. If the app hasn't\n   *     stabilized after `<timeout>` milliseconds (for example, due to a recurrent asynchronous\n   *     task), the ServiceWorker will be registered anyway.\n   *     If `<timeout>` is omitted, the ServiceWorker will only be registered once the app\n   *     stabilizes.\n   * - `registerImmediately`: Register immediately.\n   * - `registerWithDelay:<timeout>`: Register with a delay of `<timeout>` milliseconds. For\n   *     example, use `registerWithDelay:5000` to register the ServiceWorker after 5 seconds. If\n   *     `<timeout>` is omitted, is defaults to `0`, which will register the ServiceWorker as soon\n   *     as possible but still asynchronously, once all pending micro-tasks are completed.\n   * - An Observable factory function: A function that returns an `Observable`.\n   *     The function will be used at runtime to obtain and subscribe to the `Observable` and the\n   *     ServiceWorker will be registered as soon as the first value is emitted.\n   *\n   * Default: 'registerWhenStable:30000'\n   */\n  registrationStrategy?: string | (() => Observable<unknown>);\n}\n\n/**\n * @publicApi\n *\n * Sets up providers to register the given Angular Service Worker script.\n *\n * If `enabled` is set to `false` in the given options, the module will behave as if service\n * workers are not supported by the browser, and the service worker will not be registered.\n *\n * Example usage:\n * ```ts\n * bootstrapApplication(AppComponent, {\n *   providers: [\n *     provideServiceWorker('ngsw-worker.js')\n *   ],\n * });\n * ```\n *\n * @see [Custom service worker script](ecosystem/service-workers/custom-service-worker-scripts)\n *\n * @see [Service worker configuration](ecosystem/service-workers/getting-started#service-worker-configuration)\n *\n */\nexport function provideServiceWorker(\n  script: string,\n  options: SwRegistrationOptions = {},\n): EnvironmentProviders {\n  return makeEnvironmentProviders([\n    SwPush,\n    SwUpdate,\n    {provide: SCRIPT, useValue: script},\n    {provide: SwRegistrationOptions, useValue: options},\n    {\n      provide: NgswCommChannel,\n      useFactory: ngswCommChannelFactory,\n    },\n    provideAppInitializer(ngswAppInitializer),\n  ]);\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.dev/license\n */\n\nimport {ModuleWithProviders, NgModule} from '@angular/core';\n\nimport {provideServiceWorker, SwRegistrationOptions} from './provider';\nimport {SwPush} from './push';\nimport {SwUpdate} from './update';\n\n/**\n *\n * @see [Custom service worker script](ecosystem/service-workers/custom-service-worker-scripts)\n * @see [Service worker configuration](ecosystem/service-workers/getting-started#service-worker-configuration)\n *\n * @publicApi\n */\n@NgModule({providers: [SwPush, SwUpdate]})\nexport class ServiceWorkerModule {\n  /**\n   * Register the given Angular Service Worker script.\n   *\n   * If `enabled` is set to `false` in the given options, the module will behave as if service\n   * workers are not supported by the browser, and the service worker will not be registered.\n   */\n  static register(\n    script: string,\n    options: SwRegistrationOptions = {},\n  ): ModuleWithProviders<ServiceWorkerModule> {\n    return {\n      ngModule: ServiceWorkerModule,\n      providers: [provideServiceWorker(script, options)],\n    };\n  }\n}\n"],"names":["ERR_SW_NOT_SUPPORTED","NgswCommChannel","serviceWorker","worker","registration","events","constructor","injector","Observable","subscriber","error","RuntimeError","ngDevMode","currentWorker","workerSubject","Subject","next","subscribe","v","updateController","controller","addEventListener","pipe","switchMap","getRegistration","then","_events","asObservable","messageListener","event","data","type","appRef","get","ApplicationRef","optional","onDestroy","removeEventListener","postMessage","action","payload","Promise","resolve","take","sw","postMessageWithOperation","operationNonce","waitForOperationCompleted","all","result","generateNonce","Math","round","random","eventsOfType","filterFn","includes","filter","nextEventOfType","nonce","reject","map","undefined","Error","isEnabled","SwPush","messages","notificationClicks","notificationCloses","pushSubscriptionChanges","subscription","pushManager","subscriptionChanges","NEVER","message","workerDrivenSubscriptions","pm","getSubscription","workerDrivenSubscription","unsubscribe","requestSubscription","options","pushOptions","userVisibleOnly","key","decodeBase64","serverPublicKey","replace","applicationServerKey","Uint8Array","ArrayBuffer","length","i","charCodeAt","sub","doUnsubscribe","success","input","atob","deps","token","i1","target","i0","ɵɵFactoryTarget","Injectable","decorators","SwUpdate","versionUpdates","unrecoverable","ongoingCheckForUpdate","checkForUpdate","finally","activateUpdate","SCRIPT","InjectionToken","ngswAppInitializer","ngServerMode","inject","SwRegistrationOptions","navigator","enabled","script","ngZone","NgZone","runOutsideAngular","onControllerChange","readyToRegister","registrationStrategy","strategy","args","split","delayWithTimeout","race","whenStable","destroyed","register","scope","updateViaCache","catch","err","console","formatRuntimeError","timeout","setTimeout","ngswCommChannelFactory","opts","Injector","isBrowser","provideServiceWorker","makeEnvironmentProviders","provide","useValue","useFactory","provideAppInitializer","ServiceWorkerModule","ngModule","providers","NgModule","ɵinj","ɵɵngDeclareInjector","minVersion","version","ngImport"],"mappings":"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"}