@ethlete/query 6.0.0-next.3 → 6.0.0-next.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +12 -0
- package/fesm2022/ethlete-query.mjs +38 -5
- package/fesm2022/ethlete-query.mjs.map +1 -1
- package/generators/migrate-to-query-v3/cleanup-migration.js +242 -0
- package/generators/migrate-to-query-v3/legacy-prepare-migration.js +773 -0
- package/generators/migrate-to-query-v3/legacy-query-creator-migration.js +589 -0
- package/generators/migrate-to-query-v3/migration.js +16 -2928
- package/generators/migrate-to-query-v3/query-client-migration.js +477 -0
- package/generators/migrate-to-query-v3/report.js +136 -0
- package/generators/migrate-to-query-v3/shared.js +97 -0
- package/package.json +1 -1
- package/types/ethlete-query.d.ts +26 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ethlete-query.mjs","sources":["../../../../libs/query/src/lib/gql/gql-transformer.ts","../../../../libs/query/src/lib/gql/gql-query-execute.ts","../../../../libs/query/src/lib/gql/gql-query.ts","../../../../libs/query/src/lib/http/observable-signal.ts","../../../../libs/query/src/lib/http/query-context.ts","../../../../libs/query/src/lib/http/query-dependencies.ts","../../../../libs/query/src/lib/http/query-errors.ts","../../../../libs/query/src/lib/http/query-features.ts","../../../../libs/query/src/lib/http/query-state.ts","../../../../libs/query/src/lib/http/query-snapshot.ts","../../../../libs/query/src/lib/http/base-query-factory.ts","../../../../libs/query/src/lib/http/query-execute-utils.ts","../../../../libs/query/src/lib/http/query-execute.ts","../../../../libs/query/src/lib/http/query.ts","../../../../libs/query/src/lib/http/query-creator.ts","../../../../libs/query/src/lib/http/base-query-creator-factory.ts","../../../../libs/query/src/lib/http/query-error-response-utils.ts","../../../../libs/query/src/lib/legacy/logger/logger.ts","../../../../libs/query/src/lib/legacy/request/request.util.ts","../../../../libs/query/src/lib/legacy/request/request.ts","../../../../libs/query/src/lib/http/query-cache-utils.ts","../../../../libs/query/src/lib/http/query-retry-utils.ts","../../../../libs/query/src/lib/http/query-error-response.ts","../../../../libs/query/src/lib/http/http-request.ts","../../../../libs/query/src/lib/http/query-stack.ts","../../../../libs/query/src/lib/http/paged-query-stack.ts","../../../../libs/query/src/lib/legacy/auth/custom-header-auth-provider.ts","../../../../libs/query/src/lib/legacy/auth/basic-auth-provider.ts","../../../../libs/query/src/lib/legacy/utils/data.utils.ts","../../../../libs/query/src/lib/legacy/utils/deep-freeze.util.ts","../../../../libs/query/src/lib/legacy/utils/def.util.ts","../../../../libs/query/src/lib/legacy/query-creator/query-creator.ts","../../../../libs/query/src/lib/legacy/query-store/query-store.ts","../../../../libs/query/src/lib/legacy/query-client/query-client.ts","../../../../libs/query/src/lib/legacy/query-client/query-client.utils.ts","../../../../libs/query/src/lib/gql/gql-query-creator.ts","../../../../libs/query/src/lib/http/secure-query-execute-factory.ts","../../../../libs/query/src/lib/gql/secure-gql-query-execute.ts","../../../../libs/query/src/lib/gql/secure-gql-query.ts","../../../../libs/query/src/lib/gql/secure-gql-query-creator.ts","../../../../libs/query/src/lib/gql/gql-query-creator-templates.ts","../../../../libs/query/src/lib/legacy/interop/legacy-query.ts","../../../../libs/query/src/lib/legacy/interop/legacy-query-creator.ts","../../../../libs/query/src/lib/legacy/query/query.utils.ts","../../../../libs/query/src/lib/legacy/query/query.ts","../../../../libs/query/src/lib/legacy/auth/auth-provider.utils.ts","../../../../libs/query/src/lib/legacy/auth/bearer-auth-provider.ts","../../../../libs/query/src/lib/legacy/directives/infinity-query-response-delay-provider.ts","../../../../libs/query/src/lib/legacy/infinite-query/infinity-query.ts","../../../../libs/query/src/lib/legacy/infinite-query/infinity-query.utils.ts","../../../../libs/query/src/lib/legacy/directives/infinity-query.directive.ts","../../../../libs/query/src/lib/legacy/directives/infinity-query-trigger.directive.ts","../../../../libs/query/src/lib/legacy/directives/query.directive.ts","../../../../libs/query/src/lib/legacy/devtools/pipes/query-short-name.pipe.ts","../../../../libs/query/src/lib/legacy/devtools/utils/query-client.utils.ts","../../../../libs/query/src/lib/legacy/devtools/components/query-devtools/query-devtools.component.ts","../../../../libs/query/src/lib/legacy/devtools/components/query-devtools/query-devtools.component.html","../../../../libs/query/src/lib/legacy/entity/entity-store.ts","../../../../libs/query/src/lib/legacy/entity/entity.utils.ts","../../../../libs/query/src/lib/http/query-repository.ts","../../../../libs/query/src/lib/http/query-client.ts","../../../../libs/query/src/lib/http/secure-query-execute.ts","../../../../libs/query/src/lib/http/secure-query.ts","../../../../libs/query/src/lib/http/secure-query-creator.ts","../../../../libs/query/src/lib/http/query-creator-templates.ts","../../../../libs/query/src/lib/auth/internal/leader-election.ts","../../../../libs/query/src/lib/auth/utils/token-encryption.ts","../../../../libs/query/src/lib/auth/internal/multi-tab-sync.ts","../../../../libs/query/src/lib/auth/bearer-auth-provider.ts","../../../../libs/query/src/lib/auth/bearer-auth-query-builders.ts","../../../../libs/query/src/lib/auth/features/bearer-auth-inactivity-logout.ts","../../../../libs/query/src/lib/auth/features/bearer-auth-persistent-auth.ts","../../../../libs/query/src/lib/auth/features/bearer-auth-token-expiration-warning.ts","../../../../libs/query/src/lib/auth/features/bearer-auth-token-revocation.ts","../../../../libs/query/src/lib/auth/features/bearer-auth-tracking.ts","../../../../libs/query/src/lib/pipes/parse-http-error-code-de.ts","../../../../libs/query/src/lib/pipes/parse-http-error-code-de.pipe.ts","../../../../libs/query/src/lib/pipes/parse-http-error-code-en.ts","../../../../libs/query/src/lib/pipes/parse-http-error-code-en.pipe.ts","../../../../libs/query/src/lib/query-form/query-form.utils.ts","../../../../libs/query/src/lib/query-form/query-form.ts","../../../../libs/query/src/lib/ws/web-socket-errors.ts","../../../../libs/query/src/lib/ws/web-socket-client.ts","../../../../libs/query/src/ethlete-query.ts"],"sourcesContent":["import { isDevMode } from '@angular/core';\n\nconst getOpName = /(query|mutation) ?([\\w\\d-_]+)? ?\\(.*?\\)? \\{/;\n\nexport type TransformedGqlQuery = {\n query: string;\n variables?: string;\n operationName?: string;\n};\n\nexport type GqlTransformer = (variables: Record<string, unknown> | null | undefined) => TransformedGqlQuery;\n\nexport const transformGql = (str: string | string[]): GqlTransformer => {\n const normalizedStr = Array.isArray(str) ? str.join('') : str;\n\n const name = getOpName.exec(normalizedStr);\n\n return (variables: Record<string, unknown> | null | undefined): TransformedGqlQuery => {\n const data: TransformedGqlQuery = { query: normalizedStr };\n\n if (variables) {\n data['variables'] = JSON.stringify(variables);\n }\n\n if (name && name.length) {\n const operationName = name[2];\n if (operationName) {\n data['operationName'] = operationName;\n }\n }\n\n if (!isDevMode()) {\n // minify the query\n data.query = data.query.replace(/\\s+/g, ' ').trim();\n }\n\n return data;\n };\n};\n\nexport type GQL = string & { readonly __gql: unique symbol };\n\nexport const gql = (strings: TemplateStringsArray, ...values: unknown[]): GQL => {\n const str = strings.reduce((acc, cur, i) => {\n return acc + cur + (values[i] ?? '');\n }, '');\n return str as GQL;\n};\n","import {\n circularQueryDependencyChecker,\n CreateQueryExecuteOptions,\n InternalQueryExecute,\n QueryArgs,\n QueryConfig,\n QueryDependencies,\n queryExecute,\n QueryExecuteArgs,\n QueryState,\n RequestArgs,\n resetExecuteState,\n RouteType,\n setupQueryExecuteState,\n} from '../http';\nimport { GqlQueryArgs } from './gql-query';\nimport { AnyCreateGqlQueryCreatorOptions, InternalCreateGqlQueryCreatorOptions } from './gql-query-creator';\nimport { transformGql } from './gql-transformer';\n\nexport type CreateGqlQueryExecuteOptions<TArgs extends QueryArgs> = {\n deps: QueryDependencies;\n state: QueryState<TArgs>;\n creator?: AnyCreateGqlQueryCreatorOptions;\n creatorInternals: InternalCreateGqlQueryCreatorOptions;\n queryConfig: QueryConfig;\n};\n\nexport const createGqlExecuteFn = <TArgs extends GqlQueryArgs>(\n executeOptions: CreateGqlQueryExecuteOptions<TArgs>,\n): InternalQueryExecute<TArgs> => {\n const executeState = setupQueryExecuteState();\n const circularChecker = circularQueryDependencyChecker();\n\n const reset = () => resetExecuteState({ executeState, executeOptions });\n\n const exec = (executeArgs?: QueryExecuteArgs<TArgs>) => {\n circularChecker.check();\n\n // Make sure all effects are flushed before reading the args.\n // A withArgs feature effect might still be pending otherwise resulting in the wrong args being read.\n executeOptions.deps.effectScheduler.flush();\n\n const { args = executeOptions.state.args(), options } = executeArgs ?? {};\n\n const query = transformGql(executeOptions.creatorInternals.query);\n let gqlParams = query(args?.variables);\n\n if (args?.queryParams && executeOptions.creatorInternals.transport === 'GET') {\n gqlParams = { ...gqlParams, ...args.queryParams };\n }\n\n const computedArgs = args ?? ({} as RequestArgs<TArgs>);\n\n if (executeOptions.creatorInternals.transport === 'GET') {\n computedArgs.queryParams = gqlParams;\n } else {\n computedArgs.body = gqlParams;\n }\n\n const normalizedOpts: CreateQueryExecuteOptions<TArgs> = {\n creator: {\n ...(executeOptions.creator ?? {}),\n subtle: {\n ...(executeOptions.creator?.subtle ?? {}),\n useQueryRepositoryCache:\n executeOptions.creator?.subtle?.useQueryRepositoryCache ??\n executeOptions.creatorInternals.method === 'QUERY',\n },\n },\n creatorInternals: {\n client: executeOptions.creatorInternals.client,\n method: executeOptions.creatorInternals.transport,\n route: (executeOptions.creator?.route ?? '') as RouteType<TArgs>,\n },\n deps: executeOptions.deps,\n queryConfig: executeOptions.queryConfig,\n state: executeOptions.state,\n };\n\n queryExecute({\n executeOptions: normalizedOpts,\n executeState,\n args: computedArgs,\n options,\n });\n };\n\n exec['reset'] = reset;\n\n exec['currentRepositoryKey'] = executeState.previousKey.asReadonly();\n\n return exec;\n};\n","import { createBaseQuery, CreateQueryOptions, QueryArgs } from '../http';\nimport { CreateGqlQueryCreatorOptions, InternalCreateGqlQueryCreatorOptions } from './gql-query-creator';\nimport { createGqlExecuteFn } from './gql-query-execute';\n\nexport type GqlQueryArgs<TResponse = unknown> = QueryArgs & {\n response: TResponse;\n rawResponse?: { data: TResponse };\n variables?: Record<string, unknown>;\n};\n\nexport type CreateGqlQueryOptions<TArgs extends GqlQueryArgs> = Omit<\n CreateQueryOptions<TArgs>,\n 'creator' | 'creatorInternals'\n> & {\n creator?: CreateGqlQueryCreatorOptions<TArgs>;\n creatorInternals: InternalCreateGqlQueryCreatorOptions;\n};\n\nexport type GqlVariablesType<T extends GqlQueryArgs | null> = T extends GqlQueryArgs ? T['variables'] : never;\n\nexport const isCreateGqlQueryOptions = <TArgs extends QueryArgs>(\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n options: CreateQueryOptions<TArgs> | CreateGqlQueryOptions<any>,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n): options is CreateGqlQueryOptions<any> => {\n return 'transport' in options.creatorInternals;\n};\n\nexport const createGqlQuery = <TArgs extends GqlQueryArgs>(options: CreateGqlQueryOptions<TArgs>) =>\n createBaseQuery({\n creator: options.creator,\n creatorInternals: options.creatorInternals,\n features: options.features,\n queryConfig: options.queryConfig,\n executeFactory: createGqlExecuteFn,\n });\n","import { DestroyRef, Injector, Signal } from '@angular/core';\nimport { takeUntilDestroyed, toObservable } from '@angular/core/rxjs-interop';\nimport { Observable } from 'rxjs';\n\nexport type ObservableSignal<T> = Signal<T> & {\n /**\n * Converts this signal to an Observable.\n *\n * The observable lifetime is bounded by the signal owner's injector by default.\n * When an override injector is provided, the observable is bounded by whichever lifetime ends\n * first: `min(override injector lifetime, signal owner injector lifetime)`.\n */\n asObservable(options?: { injector?: Injector }): Observable<T>;\n};\n\nexport const wrapAsObservableSignal = <T>(source: Signal<T>, defaultInjector: Injector): ObservableSignal<T> => {\n const asObservable = (options?: { injector?: Injector }): Observable<T> => {\n const effectiveInjector = options?.injector ?? defaultInjector;\n const base$ = toObservable(source, { injector: effectiveInjector });\n\n if (options?.injector) {\n return base$.pipe(takeUntilDestroyed(defaultInjector.get(DestroyRef)));\n }\n\n return base$;\n };\n\n return Object.assign(source, { asObservable }) as unknown as ObservableSignal<T>;\n};\n","import { inject, InjectionToken } from '@angular/core';\nimport { createStaticProvider } from '@ethlete/core';\nimport { QueryDependencies } from './query-dependencies';\n\nexport type QueryContext = {\n /** All query dependencies (client, injector, destroy refs, etc.) */\n deps: QueryDependencies;\n};\n\nconst QUERY_CONTEXT_TOKEN = new InjectionToken<QueryContext>('QUERY_CONTEXT');\n\nexport const createQueryContext = (context: QueryContext) =>\n createStaticProvider(context, {\n name: 'Query Context',\n extraInjectionToken: QUERY_CONTEXT_TOKEN,\n });\n\nexport const injectQueryContext = () => inject(QUERY_CONTEXT_TOKEN);\n","import { HttpClient } from '@angular/common/http';\nimport {\n createEnvironmentInjector,\n DestroyRef,\n EnvironmentInjector,\n ErrorHandler,\n inject,\n Injector,\n ɵEffectScheduler,\n} from '@angular/core';\nimport { AnyCreateQueryClientResult, QueryClient } from './query-client';\nimport { createQueryContext, QueryContext } from './query-context';\nimport { QueryConfig } from './query-creator';\n\nexport type SetupQueryDependenciesOptions = {\n /** The query client tuple from createQueryClient */\n client: AnyCreateQueryClientResult;\n\n /** Optional query configuration */\n queryConfig: QueryConfig | undefined;\n};\n\nexport type QueryDependencies = {\n /** The destroy ref of the query. */\n destroyRef: DestroyRef;\n\n /** The destroy ref of the scope the query is in (e.g. a component) */\n scopeDestroyRef: DestroyRef;\n\n /** The query client */\n client: QueryClient;\n\n /** The injector of the query */\n injector: EnvironmentInjector;\n\n /** The effect scheduler */\n effectScheduler: ɵEffectScheduler;\n\n /** The error handler */\n ngErrorHandler: ErrorHandler;\n\n /** The http client */\n httpClient: HttpClient;\n};\n\nexport const setupQueryDependencies = (options: SetupQueryDependenciesOptions) => {\n const hostInjector = options.queryConfig?.injector ?? inject(Injector);\n const environmentInjector =\n options.queryConfig?.injector?.get(EnvironmentInjector) ?? hostInjector.get(EnvironmentInjector);\n\n const [, , clientToken] = options.client;\n\n const dependencies: QueryDependencies = {\n destroyRef: undefined as unknown as DestroyRef, // Will be set after injector creation\n scopeDestroyRef: hostInjector.get(DestroyRef),\n client: hostInjector.get<QueryClient>(clientToken),\n injector: undefined as unknown as EnvironmentInjector, // Will be set after injector creation\n effectScheduler: hostInjector.get(ɵEffectScheduler),\n ngErrorHandler: hostInjector.get(ErrorHandler),\n httpClient: hostInjector.get(HttpClient),\n };\n\n const queryContext: QueryContext = {\n deps: dependencies,\n };\n\n const [provideQueryContext] = createQueryContext(queryContext);\n\n const queryEnvironmentInjector = createEnvironmentInjector([provideQueryContext()], environmentInjector);\n\n dependencies.destroyRef = queryEnvironmentInjector.get(DestroyRef);\n dependencies.injector = queryEnvironmentInjector;\n\n // cleanup the environment injector when the scope (e.g. the component the query is in) is destroyed\n const scopeDestroyListener = dependencies.scopeDestroyRef.onDestroy(() => {\n try {\n queryEnvironmentInjector.destroy();\n } catch {\n // ignore\n }\n });\n\n dependencies.destroyRef.onDestroy(() => {\n // cleanup the scope destroy listener\n try {\n scopeDestroyListener();\n } catch {\n // ignore\n }\n });\n\n return dependencies;\n};\n","import { RuntimeError } from '@ethlete/core';\nimport { QueryFeatureType } from './query-features';\n\n// codes 0-999\nexport const QueryRuntimeErrorCode = {\n // Query\n QUERY_FEATURE_USED_MULTIPLE_TIMES: 0,\n\n // Query features\n WITH_ARGS_QUERY_FEATURE_MISSING_BUT_ROUTE_IS_FUNCTION: 100,\n WITH_POLLING_USED_ON_UNSUPPORTED_HTTP_METHOD: 101,\n WITH_AUTO_REFRESH_USED_ON_UNSUPPORTED_HTTP_METHOD: 102,\n WITH_AUTO_REFRESH_USED_IN_MANUAL_QUERY: 103,\n SILENCE_MISSING_WITH_ARGS_FEATURE_ERROR_USED_BUT_WITH_ARGS_PRESENT: 104,\n\n // Auth provider\n AUTH_EXTRACT_TOKENS_RESPONSE_NOT_OBJECT: 200,\n AUTH_EXTRACT_TOKENS_RESPONSE_MISSING_ACCESS_TOKEN: 201,\n AUTH_EXTRACT_TOKENS_RESPONSE_MISSING_REFRESH_TOKEN: 202,\n AUTH_PROVIDER_FEATURE_USED_MULTIPLE_TIMES: 203,\n\n // Query Repository\n UNCACHEABLE_REQUEST_HAS_CACHE_KEY_PARAM: 300,\n UNCACHEABLE_REQUEST_HAS_ALLOW_CACHE_PARAM: 301,\n\n // Paged Query Stack\n PAGED_QUERY_STACK_PAGE_BIGGER_THAN_TOTAL_PAGES: 400,\n PAGED_QUERY_STACK_NEXT_PAGE_CALLED_WITHOUT_PREVIOUS_PAGE: 401,\n PAGED_QUERY_STACK_PREVIOUS_PAGE_CALLED_BUT_ALREADY_AT_FIRST_PAGE: 402,\n\n // Query Stack\n QUERY_STACK_WITH_ARGS_USED: 500,\n QUERY_STACK_WITH_RESPONSE_UPDATE_USED: 501,\n QUERY_STACK_TOTAL_QUERIES_AND_EXPECTED_QUERIES_MISMATCH: 502,\n\n // GQL\n GQL_DATA_PROPERTY_MISSING_IN_RESPONSE: 600,\n\n // Secure Execute\n TOKENS_NOT_AVAILABLE_INSIDE_AUTH_AND_EXEC: 700,\n INVALID_STATE_INSIDE_SECURE_EXECUTE_FACTORY: 701,\n\n // Query Execution\n CIRCULAR_QUERY_DEPENDENCY: 800,\n} as const;\n\nexport type QueryRuntimeErrorCode = (typeof QueryRuntimeErrorCode)[keyof typeof QueryRuntimeErrorCode];\n\nexport const queryFeatureUsedMultipleTimes = (type: QueryFeatureType) => {\n return new RuntimeError(\n QueryRuntimeErrorCode.QUERY_FEATURE_USED_MULTIPLE_TIMES,\n `The query feature \"${type}()\" was used multiple times.`,\n );\n};\n\nexport const withArgsQueryFeatureMissingButRouteIsFunction = () => {\n return new RuntimeError(\n QueryRuntimeErrorCode.WITH_ARGS_QUERY_FEATURE_MISSING_BUT_ROUTE_IS_FUNCTION,\n `This queries route is a function, but a \"withArgs()\" feature is missing.`,\n );\n};\n\nexport const withPollingUsedOnUnsupportedHttpMethod = (method: string) => {\n return new RuntimeError(\n QueryRuntimeErrorCode.WITH_POLLING_USED_ON_UNSUPPORTED_HTTP_METHOD,\n `This is a \"${method}\" request, \"withPolling()\" is only supported for GET, HEAD, OPTIONS requests and GQL queries.`,\n );\n};\n\nexport const withAutoRefreshUsedOnUnsupportedHttpMethod = (method: string) => {\n return new RuntimeError(\n QueryRuntimeErrorCode.WITH_AUTO_REFRESH_USED_ON_UNSUPPORTED_HTTP_METHOD,\n `This is a \"${method}\" request, \"withAutoRefresh()\" is only supported for GET, HEAD, OPTIONS requests and GQL queries.`,\n );\n};\n\nexport const withAutoRefreshUsedInManualQuery = () => {\n return new RuntimeError(\n QueryRuntimeErrorCode.WITH_AUTO_REFRESH_USED_IN_MANUAL_QUERY,\n `\"withAutoRefresh()\" has been used inside a query that has \"onlyManualExecution\" set to true.` +\n ` If this is intentional, set \"ignoreOnlyManualExecution\" to true inside the auto refresh config.`,\n );\n};\n\nexport const silenceMissingWithArgsFeatureErrorUsedButWithArgsPresent = () => {\n return new RuntimeError(\n QueryRuntimeErrorCode.SILENCE_MISSING_WITH_ARGS_FEATURE_ERROR_USED_BUT_WITH_ARGS_PRESENT,\n `The \"silenceMissingWithArgsFeatureError\" config is set to true, but a \"withArgs()\" feature is present.`,\n );\n};\n\nexport const authExtractTokensResponseNotObject = () => {\n return new RuntimeError(\n QueryRuntimeErrorCode.AUTH_EXTRACT_TOKENS_RESPONSE_NOT_OBJECT,\n `The auth token extractor expects the response to be an object.`,\n );\n};\n\nexport const authExtractTokensResponseMissingAccessToken = () => {\n return new RuntimeError(\n QueryRuntimeErrorCode.AUTH_EXTRACT_TOKENS_RESPONSE_MISSING_ACCESS_TOKEN,\n `The auth token extractor expects the response to contain a string \"accessToken\" property.`,\n );\n};\n\nexport const authExtractTokensResponseMissingRefreshToken = () => {\n return new RuntimeError(\n QueryRuntimeErrorCode.AUTH_EXTRACT_TOKENS_RESPONSE_MISSING_REFRESH_TOKEN,\n `The auth token extractor expects the response to contain a string \"refreshToken\" property.`,\n );\n};\n\nexport const authProviderFeatureUsedMultipleTimes = (type: string) => {\n return new RuntimeError(\n QueryRuntimeErrorCode.AUTH_PROVIDER_FEATURE_USED_MULTIPLE_TIMES,\n `Bearer auth feature \"${type}\" was used multiple times.`,\n );\n};\n\nexport const uncacheableRequestHasCacheKeyParam = (key: string) => {\n return new RuntimeError(\n QueryRuntimeErrorCode.UNCACHEABLE_REQUEST_HAS_CACHE_KEY_PARAM,\n `This request is uncacheable, but a cache key was provided: ${key}. Please remove it.`,\n );\n};\n\nexport const uncacheableRequestHasAllowCacheParam = () => {\n return new RuntimeError(\n QueryRuntimeErrorCode.UNCACHEABLE_REQUEST_HAS_ALLOW_CACHE_PARAM,\n `This request is uncacheable, but allowCache is set to true. Please remove it.`,\n );\n};\n\nexport const pagedQueryStackPageBiggerThanTotalPages = (page: number, totalPages: number) => {\n return new RuntimeError(\n QueryRuntimeErrorCode.PAGED_QUERY_STACK_PAGE_BIGGER_THAN_TOTAL_PAGES,\n `The page \"${page}\" is bigger than the total pages \"${totalPages}\".`,\n );\n};\n\nexport const pagedQueryStackNextPageCalledWithoutPreviousPage = () => {\n return new RuntimeError(\n QueryRuntimeErrorCode.PAGED_QUERY_STACK_NEXT_PAGE_CALLED_WITHOUT_PREVIOUS_PAGE,\n `fetchNextPage() has been called but the current page is not yet loaded. Please call it after the previous page has been loaded.`,\n );\n};\n\nexport const pagedQueryStackPreviousPageCalledButAlreadyAtFirstPage = () => {\n return new RuntimeError(\n QueryRuntimeErrorCode.PAGED_QUERY_STACK_PREVIOUS_PAGE_CALLED_BUT_ALREADY_AT_FIRST_PAGE,\n `fetchPreviousPage() has been called but the current page is already the first page.`,\n );\n};\n\nexport const queryStackWithArgsUsed = () => {\n return new RuntimeError(\n QueryRuntimeErrorCode.QUERY_STACK_WITH_ARGS_USED,\n `withArgs() has been used in a query stack or a paged query stack. This is not supported.`,\n );\n};\n\nexport const queryStackWithResponseUpdateUsed = () => {\n return new RuntimeError(\n QueryRuntimeErrorCode.QUERY_STACK_WITH_RESPONSE_UPDATE_USED,\n `withResponseUpdate() has been used in a query stack or a paged query stack. This is not supported.`,\n );\n};\n\nexport const queryStackTotalQueriesAndExpectedQueriesMismatch = (totalQueries: number, expectedQueries: number) => {\n return new RuntimeError(\n QueryRuntimeErrorCode.QUERY_STACK_TOTAL_QUERIES_AND_EXPECTED_QUERIES_MISMATCH,\n `The total queries \"${totalQueries}\" and the expected queries \"${expectedQueries}\" do not match. This usually happens if a query depends on the response of the previous query to calculate its pagination values. Set blockExecutionDuringLoading to true to prevent this.`,\n );\n};\n\nexport const gqlDataPropertyMissingInResponse = () => {\n return new RuntimeError(\n QueryRuntimeErrorCode.GQL_DATA_PROPERTY_MISSING_IN_RESPONSE,\n `The GraphQL response is missing the required \"data\" property. Please add a custom transformResponse param to the query creator to handle this response format.`,\n );\n};\n\nexport const tokensNotAvailableInsideAuthAndExec = () => {\n return new RuntimeError(\n QueryRuntimeErrorCode.TOKENS_NOT_AVAILABLE_INSIDE_AUTH_AND_EXEC,\n `Tokens are not available inside authAndExec.`,\n );\n};\n\nexport const invalidStateInsideSecureExecuteFactory = () => {\n return new RuntimeError(\n QueryRuntimeErrorCode.INVALID_STATE_INSIDE_SECURE_EXECUTE_FACTORY,\n `An invalid state occurred inside the secure execute factory.`,\n );\n};\n\nexport const circularQueryDependency = () => {\n return new RuntimeError(\n QueryRuntimeErrorCode.CIRCULAR_QUERY_DEPENDENCY,\n `Query was executed more than 5 times in less than 100ms. This is usually a sign of a circular dependency.`,\n );\n};\n","import { computed, CreateEffectOptions, effect, Signal, untracked } from '@angular/core';\nimport { getActiveConsumer, setActiveConsumer } from '@angular/core/primitives/signals';\nimport { RequestHttpEvent } from './http-request';\nimport { QueryArgs, RequestArgs, ResponseType } from './query';\nimport { QueryDependencies } from './query-dependencies';\nimport { QueryErrorResponse } from './query-error-response';\nimport {\n withAutoRefreshUsedInManualQuery,\n withAutoRefreshUsedOnUnsupportedHttpMethod,\n withPollingUsedOnUnsupportedHttpMethod,\n} from './query-errors';\nimport { InternalQueryExecute } from './query-execute';\nimport { QueryState } from './query-state';\n\n/**\n * Returning this inside a withArgs feature will reset the query args to null.\n * This will also pause polling and auto refresh until new args are set.\n */\nexport const CLEAR_QUERY_ARGS = Symbol('CLEAR_QUERY_ARGS');\nexport type ClearQueryArgs = typeof CLEAR_QUERY_ARGS;\n\n/** A angular effect that can be nested inside another effect */\nexport const nestedEffect = (fn: () => void, options?: CreateEffectOptions) => {\n const activeConsumer = getActiveConsumer();\n\n setActiveConsumer(null);\n\n const eff = effect(() => {\n fn();\n }, options);\n\n setActiveConsumer(activeConsumer);\n\n return eff;\n};\n\nexport type QueryFeatureFlags = {\n hasWithArgsFeature: boolean;\n shouldAutoExecuteMethod: boolean;\n shouldAutoExecute: boolean;\n hasRouteFunction: boolean;\n onlyManualExecution?: boolean;\n\n /** Human readable method name */\n method: string;\n};\n\nexport const QueryFeatureType = {\n WITH_ARGS: 'WITH_ARGS',\n WITH_LOGGING: 'WITH_LOGGING',\n WITH_ERROR_HANDLING: 'WITH_ERROR_HANDLING',\n WITH_SUCCESS_HANDLING: 'WITH_SUCCESS_HANDLING',\n WITH_POLLING: 'WITH_POLLING',\n WITH_AUTO_REFRESH: 'WITH_AUTO_REFRESH',\n WITH_RESPONSE_UPDATE: 'WITH_RESPONSE_UPDATE',\n} as const;\nexport type QueryFeatureType = (typeof QueryFeatureType)[keyof typeof QueryFeatureType];\n\nexport type QueryFeatureContext<TArgs extends QueryArgs> = {\n state: QueryState<TArgs>;\n execute: InternalQueryExecute<TArgs>;\n deps: QueryDependencies;\n flags: QueryFeatureFlags;\n};\n\nexport type QueryFeatureFn<TArgs extends QueryArgs> = (context: QueryFeatureContext<TArgs>) => void;\n\nexport type QueryFeature<TArgs extends QueryArgs> = {\n type: QueryFeatureType;\n fn: (context: QueryFeatureContext<TArgs>) => void;\n};\n\nexport const createQueryFeature = <TArgs extends QueryArgs>(config: {\n type: QueryFeatureType;\n fn: QueryFeatureFn<TArgs>;\n}) => {\n return config as QueryFeature<TArgs>;\n};\n\n/**\n * A query feature that allows you to set the arguments of the query.\n * The arguments are read within a computed function, so you can use reactive values.\n *\n * To set the arguments to `null`, return the symbol `CLEAR_QUERY_ARGS`.\n * If you instead return `null`, the arguments won't change.\n *\n * Changing arguments will automatically trigger a new execution of the query if it is eligible for auto execution (e.g. a GET request).\n */\nexport const withArgs = <TArgs extends QueryArgs>(args: () => NoInfer<RequestArgs<TArgs>> | ClearQueryArgs | null) => {\n return createQueryFeature<TArgs>({\n type: QueryFeatureType.WITH_ARGS,\n fn: (context) => {\n const currArgs = computed(() => args());\n\n nestedEffect(\n () => {\n const currArgsNow = currArgs();\n\n if (currArgsNow === null) return;\n\n untracked(() => {\n if (currArgsNow === CLEAR_QUERY_ARGS) {\n context.state.args.set(null);\n return;\n }\n\n context.state.args.set(currArgsNow);\n\n if (context.flags.shouldAutoExecute) context.execute({ args: currArgsNow });\n });\n },\n { injector: context.deps.injector },\n );\n },\n });\n};\n\nexport type WithPollingFeatureOptions = {\n /** The interval in milliseconds at which the query should be executed */\n interval: number;\n\n /**\n * Whether the query should be executed initially.\n * By default, the query will be executed after the first interval.\n * @default false\n */\n executeInitially?: boolean;\n};\n\n/**\n * A query feature that will automatically execute the query at a given interval.\n * The interval will be cleared when the query is destroyed.\n * The interval will be reset when the arguments of the query change.\n *\n * @throws If the query is not eligible for auto execution (e.g. a POST request)\n */\nexport const withPolling = <TArgs extends QueryArgs>(options: WithPollingFeatureOptions) => {\n return createQueryFeature<TArgs>({\n type: QueryFeatureType.WITH_POLLING,\n fn: (context) => {\n if (!context.flags.shouldAutoExecuteMethod) {\n throw withPollingUsedOnUnsupportedHttpMethod(context.flags.method);\n }\n\n let intervalId: number | null = null;\n\n nestedEffect(\n () => {\n const args = context.state.args();\n\n untracked(() => {\n if (intervalId !== null) clearInterval(intervalId);\n\n // Don't start polling if the query doesn't have args.\n // It should have args because a withArgs feature is present.\n if (args === null && context.flags.hasWithArgsFeature) return;\n\n if (options.executeInitially) {\n context.execute({ args });\n }\n\n intervalId = window.setInterval(() => {\n context.execute({ args });\n }, options.interval);\n });\n },\n { injector: context.deps.injector },\n );\n\n context.deps.destroyRef.onDestroy(() => intervalId !== null && clearInterval(intervalId));\n },\n });\n};\n\nexport type WithLoggingFeatureOptions<TArgs extends QueryArgs> = {\n /** A function that will be called with the latest http event */\n logFn: (v: RequestHttpEvent<TArgs> | null) => void;\n};\n\n/** A query feature that can be used to log the latest http event */\nexport const withLogging = <TArgs extends QueryArgs>(options: WithLoggingFeatureOptions<TArgs>) => {\n return createQueryFeature<TArgs>({\n type: QueryFeatureType.WITH_LOGGING,\n fn: (context) => {\n nestedEffect(\n () => {\n const event = context.state.latestHttpEvent();\n\n if (event === null) return;\n\n untracked(() => {\n options.logFn(event);\n });\n },\n { injector: context.deps.injector },\n );\n },\n });\n};\n\nexport type WithErrorHandlingFeatureOptions = {\n /** A function that will be called with the latest error */\n handler: (e: QueryErrorResponse) => void;\n};\n\n/** A query feature that can be used to handle errors */\nexport const withErrorHandling = <TArgs extends QueryArgs>(options: WithErrorHandlingFeatureOptions) => {\n return createQueryFeature<TArgs>({\n type: QueryFeatureType.WITH_ERROR_HANDLING,\n fn: (context) => {\n nestedEffect(\n () => {\n const error = context.state.error();\n\n if (error === null) return;\n\n untracked(() => {\n options.handler(error);\n });\n },\n { injector: context.deps.injector },\n );\n },\n });\n};\n\nexport type WithSuccessHandlingFeatureOptions<TArgs extends QueryArgs> = {\n /** A function that will be called with the latest response */\n handler: (data: NonNullable<ResponseType<TArgs>>) => void;\n};\n\n/** A query feature that can be used to handle successful responses */\nexport const withSuccessHandling = <TArgs extends QueryArgs>(options: WithSuccessHandlingFeatureOptions<TArgs>) => {\n return createQueryFeature<TArgs>({\n type: QueryFeatureType.WITH_SUCCESS_HANDLING,\n fn: (context) => {\n nestedEffect(\n () => {\n const response = context.state.response();\n\n if (response === null) return;\n\n untracked(() => {\n options.handler(response as NonNullable<ResponseType<TArgs>>);\n });\n },\n { injector: context.deps.injector },\n );\n },\n });\n};\n\nexport type WithAutoRefreshFeatureOptions = {\n /** The signals that should trigger a refresh of the query */\n onSignalChanges: Signal<unknown>[];\n\n /** Whether to ignore the `onlyManualExecution` query config flag */\n ignoreOnlyManualExecution?: boolean;\n};\n\n/**\n * A query feature that will automatically execute the query when any of the provided signals change\n * @throws If the query is not eligible for auto execution (e.g. a POST request)\n * @throws If the query has the `onlyManualExecution` query config flag set and `ignoreOnlyManualExecution` is not set\n */\nexport const withAutoRefresh = <TArgs extends QueryArgs>(options: WithAutoRefreshFeatureOptions) => {\n return createQueryFeature<TArgs>({\n type: QueryFeatureType.WITH_AUTO_REFRESH,\n fn: (context) => {\n if (!context.flags.shouldAutoExecuteMethod) {\n throw withAutoRefreshUsedOnUnsupportedHttpMethod(context.flags.method);\n }\n\n if (context.flags.onlyManualExecution && !options.ignoreOnlyManualExecution) {\n throw withAutoRefreshUsedInManualQuery();\n }\n\n nestedEffect(\n () => {\n for (const signal of options.onSignalChanges) {\n signal();\n }\n\n untracked(() => {\n const args = context.state.args();\n\n // Don't start polling if the query doesn't have args.\n // It should have args because a withArgs feature is present.\n if (args === null && context.flags.hasWithArgsFeature) return;\n\n context.execute({ args });\n });\n },\n { injector: context.deps.injector },\n );\n },\n });\n};\n\nexport type WithResponseUpdateFeatureFnData<TArgs extends QueryArgs> = {\n /** The current response of the query */\n currentResponse: ResponseType<TArgs> | null;\n};\n\nexport type WithResponseUpdateFeatureOptions<TArgs extends QueryArgs> = {\n /**\n * A function that will be called with the latest response\n * If the function returns `null`, the response will not be updated.\n * Otherwise, the response will be updated with the returned value.\n * The function will be called in a reactive signal context.\n * If the query get's executed after the response was updated, the response will be set the the fresh data received from the server.\n *\n * This feature is most useful in combination with web sockets where the data received from the socket might be more up-to-date than the data received previously.\n *\n * @example\n * const matchEvents = mySocket.joinRoom('match-events');\n *\n * const myMatchQuery = getMatch(\n * withArgs(() => ({ matchId: 1 })),\n * withResponseUpdate(({ currentResponse }) => {\n * const matchEvent = matchEvents();\n *\n * if (!matchEvent) return null;\n *\n * // Do some checks here. This is just a very simple example.\n * // To apply partial updates, you can use the spread operator in combination with the current response.\n *\n * return matchEvent;\n * })\n * )\n */\n updater: (data: WithResponseUpdateFeatureFnData<TArgs>) => ResponseType<TArgs> | null;\n};\n\nexport const withResponseUpdate = <TArgs extends QueryArgs>(options: WithResponseUpdateFeatureOptions<TArgs>) => {\n return createQueryFeature<TArgs>({\n type: QueryFeatureType.WITH_RESPONSE_UPDATE,\n fn: (context) => {\n nestedEffect(\n () => {\n const currentResponse = untracked(() => context.state.response());\n const response = options.updater({ currentResponse });\n\n if (response === null) return;\n\n untracked(() => {\n context.state.rawResponse.set(response);\n });\n },\n { injector: context.deps.injector },\n );\n },\n });\n};\n","import { Signal, WritableSignal, computed, linkedSignal, signal } from '@angular/core';\nimport { HttpRequest, HttpRequestLoadingState, RequestHttpEvent } from './http-request';\nimport { QueryArgs, RawResponseType, RequestArgs, ResponseType } from './query';\nimport { QueryErrorResponse } from './query-error-response';\n\nexport type SetupQueryStateOptions<TArgs extends QueryArgs> = {\n transformResponse?: (rawResponse: RawResponseType<TArgs>) => ResponseType<TArgs>;\n};\n\nexport type QueryStateSubtle<TArgs extends QueryArgs> = {\n request: WritableSignal<HttpRequest<TArgs> | null>;\n rawResponse: WritableSignal<RawResponseType<TArgs> | null>;\n};\n\nexport type QueryState<TArgs extends QueryArgs> = {\n rawResponse: WritableSignal<RawResponseType<TArgs> | null>;\n response: Signal<ResponseType<TArgs> | null>;\n args: WritableSignal<RequestArgs<TArgs> | null>;\n latestHttpEvent: WritableSignal<RequestHttpEvent<TArgs> | null>;\n loading: WritableSignal<HttpRequestLoadingState | null>;\n error: WritableSignal<QueryErrorResponse | null>;\n lastTimeExecutedAt: WritableSignal<number | null>;\n lastTriggeredBy: WritableSignal<string | null>;\n executionState: Signal<QueryExecutionState<TArgs> | null>;\n subtle: QueryStateSubtle<TArgs>;\n};\n\nexport type QueryExecutionStateSuccess<TArgs extends QueryArgs> = {\n type: 'success';\n response: ResponseType<TArgs>;\n};\n\nexport type QueryExecutionStateFailure = {\n type: 'failure';\n error: QueryErrorResponse;\n};\n\nexport type QueryExecutionStateLoadingWithNoResponse = {\n type: 'loading';\n hasCachedResponse: false;\n loading: HttpRequestLoadingState;\n};\n\nexport type QueryExecutionStateLoadingWithCachedResponse<TArgs extends QueryArgs> = {\n type: 'loading';\n hasCachedResponse: true;\n loading: HttpRequestLoadingState;\n cachedResponse: ResponseType<TArgs>;\n};\n\nexport type QueryExecutionStateLoading<TArgs extends QueryArgs> =\n | QueryExecutionStateLoadingWithNoResponse\n | QueryExecutionStateLoadingWithCachedResponse<TArgs>;\n\nexport type QueryExecutionState<TArgs extends QueryArgs> =\n | QueryExecutionStateSuccess<TArgs>\n | QueryExecutionStateFailure\n | QueryExecutionStateLoading<TArgs>;\n\nexport const setupQueryState = <TArgs extends QueryArgs>(options: SetupQueryStateOptions<TArgs>) => {\n const request = signal<HttpRequest<TArgs> | null>(null);\n\n const rawResponse = linkedSignal(() => request()?.response() ?? null);\n const response = computed(() => {\n const raw = rawResponse();\n if (raw === null) return null;\n return options.transformResponse ? options.transformResponse(raw) : (raw as ResponseType<TArgs>);\n });\n const loading = linkedSignal(() => request()?.loading() ?? null);\n const error = linkedSignal(() => request()?.error() ?? null);\n const latestHttpEvent = linkedSignal(() => request()?.currentEvent() ?? null);\n\n const args = signal<RequestArgs<TArgs> | null>(null);\n const lastTimeExecutedAt = signal<number | null>(null);\n const lastTriggeredBy = signal<string | null>(null);\n\n const executionState = computed<QueryExecutionState<TArgs> | null>(() => {\n const currentResponse = response();\n const currentError = error();\n const currentLoading = loading();\n\n if (currentLoading) {\n if (currentResponse) {\n return {\n type: 'loading',\n hasCachedResponse: true,\n loading: currentLoading,\n cachedResponse: currentResponse,\n };\n }\n\n return {\n type: 'loading',\n hasCachedResponse: false,\n loading: currentLoading,\n };\n } else if (currentError) {\n return {\n type: 'failure',\n error: currentError,\n };\n } else if (currentResponse) {\n return {\n type: 'success',\n response: currentResponse,\n };\n } else {\n return null;\n }\n });\n\n const state: QueryState<TArgs> = {\n rawResponse,\n response,\n args,\n latestHttpEvent,\n loading,\n error,\n lastTimeExecutedAt,\n lastTriggeredBy,\n executionState,\n subtle: {\n request,\n rawResponse,\n },\n };\n\n return state;\n};\n","import { effect, signal, untracked } from '@angular/core';\nimport { wrapAsObservableSignal } from './observable-signal';\nimport { QueryArgs, QuerySnapshot } from './query';\nimport { injectQueryContext } from './query-context';\nimport { QueryDependencies } from './query-dependencies';\nimport { InternalQueryExecute } from './query-execute';\nimport { QueryState, setupQueryState } from './query-state';\n\nexport type CreateQuerySnapshotOptions<TArgs extends QueryArgs> = {\n state: QueryState<TArgs>;\n execute: InternalQueryExecute<TArgs>;\n deps: QueryDependencies;\n};\n\nexport const createQuerySnapshotFn = <TArgs extends QueryArgs>(options: CreateQuerySnapshotOptions<TArgs>) => {\n const { state } = options;\n const context = injectQueryContext();\n\n const snapshotFn = () => {\n const snapshotState = setupQueryState<TArgs>({});\n const isAlive = signal(true);\n\n const killEffectRef = effect(\n () => {\n const currentLoading = state.loading();\n const currentError = state.error();\n const currentResponse = state.response();\n const currentArgs = state.args();\n const currentLatestHttpEvent = state.latestHttpEvent();\n const currentLastTimeExecutedAt = state.lastTimeExecutedAt();\n const currentLastTriggeredBy = state.lastTriggeredBy();\n\n untracked(() => {\n snapshotState.args.set(currentArgs);\n snapshotState.error.set(currentError);\n snapshotState.lastTimeExecutedAt.set(currentLastTimeExecutedAt);\n snapshotState.lastTriggeredBy.set(currentLastTriggeredBy);\n snapshotState.latestHttpEvent.set(currentLatestHttpEvent);\n snapshotState.loading.set(currentLoading);\n snapshotState.rawResponse.set(currentResponse);\n\n if (currentLoading) return;\n\n if (!currentResponse && !currentError) return;\n\n // kill the effect once loading is done and we either have a response or an error\n killEffectRef.destroy();\n isAlive.set(false);\n });\n },\n { injector: context.deps.injector },\n );\n\n const snapshot: QuerySnapshot<TArgs> = {\n args: wrapAsObservableSignal(snapshotState.args.asReadonly(), context.deps.injector),\n response: wrapAsObservableSignal(snapshotState.response, context.deps.injector),\n latestHttpEvent: wrapAsObservableSignal(snapshotState.latestHttpEvent.asReadonly(), context.deps.injector),\n loading: wrapAsObservableSignal(snapshotState.loading.asReadonly(), context.deps.injector),\n error: wrapAsObservableSignal(snapshotState.error.asReadonly(), context.deps.injector),\n lastTimeExecutedAt: wrapAsObservableSignal(snapshotState.lastTimeExecutedAt.asReadonly(), context.deps.injector),\n triggeredBy: wrapAsObservableSignal(snapshotState.lastTriggeredBy.asReadonly(), context.deps.injector),\n isAlive: wrapAsObservableSignal(isAlive.asReadonly(), context.deps.injector),\n id: wrapAsObservableSignal(options.execute.currentRepositoryKey, context.deps.injector),\n executionState: wrapAsObservableSignal(snapshotState.executionState, context.deps.injector),\n };\n\n return snapshot;\n };\n\n return snapshotFn;\n};\n","import { runInInjectionContext } from '@angular/core';\nimport { CreateGqlQueryOptions, isCreateGqlQueryOptions } from '../gql/gql-query';\nimport { AnyCreateGqlQueryCreatorOptions, GqlQueryMethod } from '../gql/gql-query-creator';\nimport { wrapAsObservableSignal } from './observable-signal';\nimport { CreateQueryOptions, Query, QueryArgs, RawResponseType, ReadonlyQuery, ResponseType } from './query';\nimport { AnyCreateQueryClientResult } from './query-client';\nimport {\n CreateQueryCreatorOptions,\n InternalCreateQueryCreatorOptions,\n QueryConfig,\n QueryMethod,\n} from './query-creator';\nimport { QueryDependencies, setupQueryDependencies } from './query-dependencies';\nimport {\n queryFeatureUsedMultipleTimes,\n silenceMissingWithArgsFeatureErrorUsedButWithArgsPresent,\n withArgsQueryFeatureMissingButRouteIsFunction,\n} from './query-errors';\nimport { InternalQueryExecute } from './query-execute';\nimport { QueryFeature, QueryFeatureContext, QueryFeatureFlags, QueryFeatureType } from './query-features';\nimport { createQuerySnapshotFn } from './query-snapshot';\nimport { QueryState, setupQueryState } from './query-state';\n\nexport const shouldAutoExecuteQuery = (method: QueryMethod) => {\n return method === 'GET' || method === 'HEAD' || method === 'OPTIONS';\n};\n\nexport const shouldAutoExecuteGqlQuery = (method: GqlQueryMethod) => {\n return method === 'QUERY';\n};\n\nexport const getQueryFeatureUsage = <TArgs extends QueryArgs>(\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n options: CreateQueryOptions<TArgs> | CreateGqlQueryOptions<any>,\n) => {\n const { creator, features, queryConfig, creatorInternals } = options;\n\n const hasWithArgsFeature = features.some((f) => f.type == QueryFeatureType.WITH_ARGS);\n const shouldAutoExecuteMethod = isCreateGqlQueryOptions(options)\n ? shouldAutoExecuteGqlQuery(options.creatorInternals.method)\n : shouldAutoExecuteQuery(options.creatorInternals.method);\n const hasRouteFunction =\n typeof (creatorInternals as InternalCreateQueryCreatorOptions<TArgs>)?.route === 'function' ||\n typeof (creator as AnyCreateGqlQueryCreatorOptions)?.route === 'function';\n const shouldAutoExecute = shouldAutoExecuteMethod && !queryConfig.onlyManualExecution;\n\n if (hasRouteFunction && !hasWithArgsFeature && !queryConfig.silenceMissingWithArgsFeatureError) {\n throw withArgsQueryFeatureMissingButRouteIsFunction();\n }\n\n if (hasWithArgsFeature && queryConfig.silenceMissingWithArgsFeatureError) {\n throw silenceMissingWithArgsFeatureErrorUsedButWithArgsPresent();\n }\n\n const featureFnContext: QueryFeatureFlags = {\n hasWithArgsFeature,\n shouldAutoExecuteMethod,\n shouldAutoExecute,\n hasRouteFunction,\n onlyManualExecution: queryConfig.onlyManualExecution,\n method: isCreateGqlQueryOptions(options)\n ? `GQL ${options.creatorInternals.method}`\n : options.creatorInternals.method,\n };\n\n return featureFnContext;\n};\n\nexport const applyQueryFeatures = <TArgs extends QueryArgs>(\n features: QueryFeature<TArgs>[],\n context: QueryFeatureContext<TArgs>,\n) => {\n const featureTypes = new Set<QueryFeatureType>();\n\n for (const feature of features) {\n if (featureTypes.has(feature.type)) {\n throw queryFeatureUsedMultipleTimes(feature.type);\n }\n\n featureTypes.add(feature.type);\n feature.fn(context);\n }\n};\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport const maybeExecute = (options: { flags: QueryFeatureFlags; execute: InternalQueryExecute<any> }) => {\n if (options.flags.shouldAutoExecute && !options.flags.hasRouteFunction && !options.flags.hasWithArgsFeature) {\n options.execute();\n }\n};\n\nexport type CreateQueryObjectOptions<TArgs extends QueryArgs> = {\n state: QueryState<TArgs>;\n deps: QueryDependencies;\n execute: InternalQueryExecute<TArgs>;\n};\n\nexport const createQueryObject = <TArgs extends QueryArgs>(options: CreateQueryObjectOptions<TArgs>) => {\n const { state, execute, deps } = options;\n\n const destroy = () => deps.injector.destroy();\n const setResponse = (response: ResponseType<TArgs>) => state.rawResponse.set(response as RawResponseType<TArgs>);\n const createSnapshot = createQuerySnapshotFn({ state, execute, deps });\n\n // Pre-wrap all public signals once so both `query` and `roQuery` share the same instances.\n const wrappedArgs = wrapAsObservableSignal(state.args.asReadonly(), deps.injector);\n const wrappedResponse = wrapAsObservableSignal(state.response, deps.injector);\n const wrappedLatestHttpEvent = wrapAsObservableSignal(state.latestHttpEvent.asReadonly(), deps.injector);\n const wrappedLoading = wrapAsObservableSignal(state.loading.asReadonly(), deps.injector);\n const wrappedError = wrapAsObservableSignal(state.error.asReadonly(), deps.injector);\n const wrappedLastTimeExecutedAt = wrapAsObservableSignal(state.lastTimeExecutedAt.asReadonly(), deps.injector);\n const wrappedTriggeredBy = wrapAsObservableSignal(state.lastTriggeredBy.asReadonly(), deps.injector);\n const wrappedId = wrapAsObservableSignal(execute.currentRepositoryKey, deps.injector);\n const wrappedExecutionState = wrapAsObservableSignal(state.executionState, deps.injector);\n const wrappedRequest = wrapAsObservableSignal(state.subtle.request.asReadonly(), deps.injector);\n\n const asReadonly = () => {\n const roQuery: ReadonlyQuery<TArgs> = {\n args: wrappedArgs,\n response: wrappedResponse,\n latestHttpEvent: wrappedLatestHttpEvent,\n loading: wrappedLoading,\n error: wrappedError,\n lastTimeExecutedAt: wrappedLastTimeExecutedAt,\n triggeredBy: wrappedTriggeredBy,\n id: wrappedId,\n createSnapshot,\n executionState: wrappedExecutionState,\n };\n\n return roQuery;\n };\n\n const query: Query<TArgs> = {\n execute,\n args: wrappedArgs,\n response: wrappedResponse,\n latestHttpEvent: wrappedLatestHttpEvent,\n loading: wrappedLoading,\n error: wrappedError,\n lastTimeExecutedAt: wrappedLastTimeExecutedAt,\n triggeredBy: wrappedTriggeredBy,\n id: wrappedId,\n createSnapshot,\n reset: execute.reset,\n asReadonly,\n executionState: wrappedExecutionState,\n subtle: {\n destroy,\n setResponse,\n request: wrappedRequest,\n destroyRef: deps.scopeDestroyRef,\n injector: deps.injector,\n },\n };\n\n return query;\n};\n\nexport type ExecuteFactory<TArgs extends QueryArgs, TInternals> = (options: {\n deps: QueryDependencies;\n state: QueryState<TArgs>;\n creator?: CreateQueryCreatorOptions;\n creatorInternals: TInternals;\n queryConfig: QueryConfig;\n}) => InternalQueryExecute<TArgs>;\n\nexport type CreateBaseQueryOptions<TArgs extends QueryArgs, TInternals> = {\n creator?: CreateQueryCreatorOptions;\n creatorInternals: TInternals;\n features: QueryFeature<TArgs>[];\n queryConfig: QueryConfig;\n executeFactory: ExecuteFactory<TArgs, TInternals>;\n};\n\nexport const createBaseQuery = <TArgs extends QueryArgs, TInternals extends { client: AnyCreateQueryClientResult }>(\n options: CreateBaseQueryOptions<TArgs, TInternals>,\n) => {\n const client = options.creatorInternals.client;\n\n const deps = setupQueryDependencies({\n client,\n queryConfig: options.queryConfig,\n });\n\n return runInInjectionContext(deps.injector, () => {\n const state = setupQueryState<TArgs>({\n transformResponse: options.creator?.transformResponse,\n });\n const flags = getQueryFeatureUsage(options as unknown as Parameters<typeof getQueryFeatureUsage>[0]);\n\n const execute = options.executeFactory({\n deps,\n state,\n creator: options.creator,\n creatorInternals: options.creatorInternals,\n queryConfig: options.queryConfig,\n });\n\n const featureFnContext: QueryFeatureContext<TArgs> = {\n state,\n execute,\n flags,\n deps,\n };\n\n applyQueryFeatures(options.features, featureFnContext);\n\n maybeExecute({ execute, flags });\n\n return createQueryObject({ state, execute, deps });\n });\n};\n","import { signal, WritableSignal } from '@angular/core';\nimport { QueryArgs, RequestArgs } from './query';\nimport { circularQueryDependency } from './query-errors';\nimport { CreateQueryExecuteOptions } from './query-execute';\n\nexport type ResetExecuteStateOptions<TArgs extends QueryArgs> = {\n executeOptions: Pick<CreateQueryExecuteOptions<TArgs>, 'state' | 'deps'>;\n executeState: QueryExecuteState;\n};\n\nexport const resetExecuteState = <TArgs extends QueryArgs>(options: ResetExecuteStateOptions<TArgs>) => {\n const { executeState, executeOptions: opts } = options;\n const { state } = opts;\n\n opts.deps.client.repository.unbind(executeState.previousKey(), opts.deps.destroyRef);\n\n state.args.set(null);\n state.error.set(null);\n state.latestHttpEvent.set(null);\n state.loading.set(null);\n state.rawResponse.set(null);\n state.lastTimeExecutedAt.set(null);\n state.lastTriggeredBy.set(null);\n};\n\nexport type QueryExecuteState = {\n previousKey: WritableSignal<string | null>;\n};\n\nexport const setupQueryExecuteState = (): QueryExecuteState => {\n return {\n previousKey: signal(null),\n };\n};\n\nexport type RunQueryExecuteOptions = {\n allowCache?: boolean;\n triggeredBy?: string;\n};\n\nexport type QueryExecuteOptions<TArgs extends QueryArgs> = {\n executeOptions: CreateQueryExecuteOptions<TArgs>;\n executeState: QueryExecuteState;\n\n args: RequestArgs<TArgs> | null;\n options?: RunQueryExecuteOptions;\n\n isSecure?: boolean;\n};\n\nexport const queryExecute = <TArgs extends QueryArgs>(options: QueryExecuteOptions<TArgs>) => {\n const { executeOptions, args, executeState, options: runQueryOptions, isSecure } = options;\n const { deps, state, creator, creatorInternals, queryConfig } = executeOptions;\n\n const { key, request } = deps.client.repository.request({\n route: creatorInternals.route,\n method: creatorInternals.method,\n args,\n creatorOptions: creator,\n retryFn: creator?.retryFn,\n consumerDestroyRef: deps.destroyRef,\n key: queryConfig.key,\n previousKey: executeState.previousKey(),\n runQueryOptions,\n isSecure,\n });\n\n executeState.previousKey.set(key);\n state.lastTimeExecutedAt.set(Date.now());\n state.lastTriggeredBy.set(runQueryOptions?.triggeredBy ?? null);\n state.subtle.request.set(request);\n};\n\nexport const circularQueryDependencyChecker = () => {\n let lastTriggerTs = 0;\n let illegalWrites = 0;\n\n // Typing this as number will throw an type error during testing since it is of type Timeout in a node env.\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n let timeout: any = null;\n\n const check = () => {\n const now = performance.now();\n\n if (now - lastTriggerTs < 100) {\n illegalWrites++;\n\n if (illegalWrites > 5) {\n throw circularQueryDependency();\n }\n }\n\n lastTriggerTs = now;\n\n if (timeout) clearTimeout(timeout);\n\n timeout = setTimeout(() => {\n illegalWrites = 0;\n }, 100);\n };\n\n return {\n check,\n };\n};\n","import { Signal } from '@angular/core';\nimport { QueryArgs, RequestArgs } from './query';\nimport { CreateQueryCreatorOptions, InternalCreateQueryCreatorOptions, QueryConfig } from './query-creator';\nimport { QueryDependencies } from './query-dependencies';\nimport {\n circularQueryDependencyChecker,\n queryExecute,\n resetExecuteState,\n RunQueryExecuteOptions,\n setupQueryExecuteState,\n} from './query-execute-utils';\nimport { QueryKey } from './query-repository';\nimport { QueryState } from './query-state';\n\nexport type CreateQueryExecuteOptions<TArgs extends QueryArgs> = {\n deps: QueryDependencies;\n state: QueryState<TArgs>;\n creator?: CreateQueryCreatorOptions;\n creatorInternals: InternalCreateQueryCreatorOptions<TArgs>;\n queryConfig: QueryConfig;\n};\n\nexport type QueryExecuteArgs<TArgs extends QueryArgs> = {\n args?: RequestArgs<TArgs> | null;\n options?: RunQueryExecuteOptions;\n};\n\nexport type InternalQueryExecute<TArgs extends QueryArgs> = {\n (executeArgs?: QueryExecuteArgs<TArgs>): void;\n reset: () => void;\n currentRepositoryKey: Signal<QueryKey | null>;\n};\n\nexport type QueryExecute<TArgs extends QueryArgs> = (executeArgs?: QueryExecuteArgs<TArgs>) => void;\n\nexport const createExecuteFn = <TArgs extends QueryArgs>(\n executeOptions: CreateQueryExecuteOptions<TArgs>,\n): InternalQueryExecute<TArgs> => {\n const executeState = setupQueryExecuteState();\n const circularChecker = circularQueryDependencyChecker();\n\n const reset = () => resetExecuteState({ executeState, executeOptions });\n\n const exec = (executeArgs?: QueryExecuteArgs<TArgs>) => {\n circularChecker.check();\n\n // Make sure all effects are flushed before reading the args.\n // A withArgs feature effect might still be pending otherwise resulting in the wrong args being read.\n executeOptions.deps.effectScheduler.flush();\n\n const { args = executeOptions.state.args(), options } = executeArgs ?? {};\n\n queryExecute({ executeOptions, executeState, args, options });\n };\n\n exec['reset'] = reset;\n\n exec['currentRepositoryKey'] = executeState.previousKey.asReadonly();\n\n return exec;\n};\n","/* eslint-disable @typescript-eslint/no-explicit-any */\n\nimport { HttpHeaders } from '@angular/common/http';\nimport { DestroyRef, Injector } from '@angular/core';\nimport { createBaseQuery } from './base-query-factory';\nimport { HttpRequest, HttpRequestLoadingState, RequestHttpEvent } from './http-request';\nimport { ObservableSignal } from './observable-signal';\nimport { CreateQueryCreatorOptions, InternalCreateQueryCreatorOptions, QueryConfig } from './query-creator';\nimport { QueryErrorResponse } from './query-error-response';\nimport { createExecuteFn, QueryExecute } from './query-execute';\nimport { QueryFeature } from './query-features';\nimport { QueryExecutionState } from './query-state';\n\nexport type QueryArgs = {\n response?: any;\n rawResponse?: any;\n pathParams?: Record<string, string | number>;\n queryParams?: any;\n body?: any;\n headers?: HttpHeaders | (() => HttpHeaders);\n};\n\nexport type ResponseType<T extends QueryArgs | null> = T extends QueryArgs ? T['response'] : never;\nexport type RawResponseType<T extends QueryArgs | null> = T extends QueryArgs\n ? T['rawResponse'] extends undefined\n ? T['response']\n : T['rawResponse']\n : never;\nexport type PathParamsType<T extends QueryArgs | null> = T extends QueryArgs ? T['pathParams'] : never;\nexport type QueryParamsType<T extends QueryArgs | null> = T extends QueryArgs ? T['queryParams'] : never;\nexport type BodyType<T extends QueryArgs | null> = T extends QueryArgs ? T['body'] : never;\n\nexport type RequestArgs<T extends QueryArgs | null> = T extends QueryArgs ? Omit<T, 'response'> : never;\n\nexport type CreateQueryOptions<TArgs extends QueryArgs> = {\n creator?: CreateQueryCreatorOptions;\n creatorInternals: InternalCreateQueryCreatorOptions<TArgs>;\n features: QueryFeature<TArgs>[];\n queryConfig: QueryConfig;\n};\n\nexport type QueryBase<TArgs extends QueryArgs> = {\n /** The arguments of the last execution of the query. Will be `null` if the query has never been executed */\n args: ObservableSignal<RequestArgs<TArgs> | null>;\n\n /**\n * The latest response of the query. Will be `null` if the query has never been executed.\n * Responses are cached until a new response is received.\n * If a response is present but the next execution of the query fails, the response will be set to `null` again.\n */\n response: ObservableSignal<ResponseType<TArgs> | null>;\n\n /** The latest Angular HTTP client native http event that occurred during the last execution of the query. Will be `null` if no event occurred. */\n latestHttpEvent: ObservableSignal<RequestHttpEvent<TArgs> | null>;\n\n /** The loading state of the query. Will be `null` if the query currently isn't loading. */\n loading: ObservableSignal<HttpRequestLoadingState | null>;\n\n /** The error that occurred during the last execution of the query. Will be `null` if no error occurred. */\n error: ObservableSignal<QueryErrorResponse | null>;\n\n /** The time the query was last executed at. Will be `null` if the query has never been executed. */\n lastTimeExecutedAt: ObservableSignal<number | null>;\n\n /** Who or what triggered the last execution. Will be `null` for user-triggered executions. */\n triggeredBy: ObservableSignal<string | null>;\n\n /** The id of the query */\n id: ObservableSignal<string | null>;\n\n /** The current state of the query. Will be `null` if the query has never been executed. */\n executionState: ObservableSignal<QueryExecutionState<TArgs> | null>;\n};\n\n/** A snapshot of a query state at a specific point in time */\nexport type QuerySnapshot<TArgs extends QueryArgs> = QueryBase<TArgs> & {\n /** This signal is `true` until the latest execution of the query has completed in any way (success, error, or cancellation) */\n isAlive: ObservableSignal<boolean>;\n};\n\nexport type AnyQuerySnapshot = QuerySnapshot<any>;\nexport type AnyNewQuery = Query<any>;\n\nexport type QuerySubtle<TArgs extends QueryArgs> = {\n /** Destroys the query and cleans up all resources. The query should not be used after this method is called. */\n destroy: () => void;\n\n /** Manually sets the response of the query. This will not trigger a new execution of the query. */\n setResponse: (response: ResponseType<TArgs>) => void;\n\n /** The currently underlying HTTP request of the query. Will be `null` if the query has never been executed. */\n request: ObservableSignal<HttpRequest<TArgs> | null>;\n\n /** The destroy reference used to clean up the query when it is no longer needed */\n destroyRef: DestroyRef;\n\n /** The Angular injector used to resolve dependencies for the query */\n injector: Injector;\n};\n\nexport type Query<TArgs extends QueryArgs> = QueryBase<TArgs> & {\n /** Executes the query */\n execute: QueryExecute<TArgs>;\n\n /** Creates an immutable snapshot of the current query state */\n createSnapshot: () => QuerySnapshot<TArgs>;\n\n /** Resets the query state to its initial state */\n reset: () => void;\n\n /** Returns a readonly version of the query */\n asReadonly: () => ReadonlyQuery<TArgs>;\n\n /** Advanced query features. **WARNING!** Incorrectly using these features will likely **BREAK** your application. You have been warned! */\n subtle: QuerySubtle<TArgs>;\n};\n\nexport type ReadonlyQuery<TArgs extends QueryArgs> = Omit<Query<TArgs>, 'execute' | 'subtle' | 'reset' | 'asReadonly'>;\n\nexport const createQuery = <TArgs extends QueryArgs>(options: CreateQueryOptions<TArgs>) =>\n createBaseQuery({\n creator: options.creator,\n creatorInternals: options.creatorInternals,\n features: options.features,\n queryConfig: options.queryConfig,\n executeFactory: createExecuteFn,\n });\n","import { Injector } from '@angular/core';\nimport { createBaseQueryCreator } from './base-query-creator-factory';\nimport { HttpRequestResponseType, HttpRequestTransferCacheConfig } from './http-request';\nimport { AnyNewQuery, PathParamsType, Query, QueryArgs, RawResponseType, ResponseType, createQuery } from './query';\nimport { AnyCreateQueryClientResult } from './query-client';\nimport { QueryFeature } from './query-features';\nimport { ShouldRetryRequestFn } from './query-retry-utils';\n\nexport type RouteType<TArgs extends QueryArgs> =\n PathParamsType<TArgs> extends { [key: string]: unknown } ? (args: TArgs['pathParams']) => RouteString : RouteString;\n\nexport type RouteString = `/${string}`;\n\nexport type BaseQueryCreatorOptionsSubtle = {\n /**\n * If true, the request will be forced to be cached (saved inside the query repository).\n * Can be used to e.g. cache GQL queries transported via POST\n *\n * - `true` means the request will always be cached\n * - `false` means the request will never be cached\n * - `undefined` means the request will be cached if the method is GET, OPTIONS or HEAD\n */\n useQueryRepositoryCache?: boolean;\n};\n\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nexport type BaseQueryCreatorOptions<TArgs extends QueryArgs = QueryArgs> = {\n /**\n * If true, the query loading state will include progress information.\n * This is useful for file uploads and downloads.\n *\n * **Warning**: Upload progress events are not supported by browsers when using the fetch API, such as with `provideHttpClient(withFetch())`.\n * In this case, you should use the older XHR implementation by omitting `withFetch()`. But take into account that XHR is not supported in server-side rendering environments.\n *\n * @see https://angular.dev/guide/http/making-requests#receiving-raw-progress-events\n *\n * @default false\n */\n reportProgress?: boolean;\n\n /**\n * The response type of the query.\n * @default 'json'\n */\n responseType?: HttpRequestResponseType;\n\n /**\n * Whether to include credentials (cookies) in the request or not.\n * @default false\n */\n withCredentials?: boolean;\n\n /**\n * This property accepts either a boolean to enable/disable transferring cache for eligible\n * requests performed using `HttpClient`, or an object, which allows to configure cache\n * parameters, such as which headers should be included (no headers are included by default).\n *\n * Setting this property will override the options passed to `provideClientHydration()` for this\n * particular request\n */\n transferCache?: HttpRequestTransferCacheConfig;\n\n /**\n * Custom retry function for this specific query creator.\n * If provided, overrides the retry function configured at the client level.\n *\n * @default Client's retryFn or shouldRetryRequest()\n */\n retryFn?: ShouldRetryRequestFn;\n\n /** Advanced query creator features. **WARNING!** Incorrectly using these features will likely **BREAK** your application. You have been warned! */\n subtle?: BaseQueryCreatorOptionsSubtle;\n};\n\ntype HasKey<T, K extends PropertyKey> = K extends keyof T\n ? undefined extends T[K]\n ? K extends keyof Required<T>\n ? true\n : false\n : true\n : false;\n\n/**\n * Determines if rawResponse type differs from response type.\n * Returns true if rawResponse is explicitly defined and differs from response.\n */\nexport type RequiresTransform<TArgs extends QueryArgs> =\n HasKey<TArgs, 'rawResponse'> extends false\n ? false\n : RawResponseType<TArgs> extends ResponseType<TArgs>\n ? ResponseType<TArgs> extends RawResponseType<TArgs>\n ? false\n : true\n : true;\n\nexport type CreateQueryCreatorOptions<TArgs extends QueryArgs = QueryArgs> = BaseQueryCreatorOptions<TArgs> &\n (RequiresTransform<TArgs> extends true\n ? {\n /**\n * Transforms the raw HTTP response to the final response type.\n * **Required** because rawResponse type differs from response type.\n *\n * @example\n * ```ts\n * transformResponse: (raw) => raw.data\n * ```\n */\n transformResponse: (rawResponse: RawResponseType<TArgs>) => ResponseType<TArgs>;\n }\n : {\n /**\n * Transforms the raw HTTP response to the final response type.\n * Useful for unwrapping response wrappers (e.g., GraphQL's `{ data: ... }` format).\n *\n * @example\n * ```ts\n * transformResponse: (raw) => raw.data\n * ```\n */\n transformResponse?: (rawResponse: RawResponseType<TArgs>) => ResponseType<TArgs>;\n });\n\nexport type QueryCreator<TArgs extends QueryArgs> = {\n (...features: QueryFeature<TArgs>[]): Query<TArgs>;\n (queryConfig: QueryConfig, ...features: QueryFeature<TArgs>[]): Query<TArgs>;\n\n /**\n * Creates a new query creator with merged options.\n * The new creator inherits all options from the original and overrides them with the provided options.\n *\n * @example\n * ```ts\n * const originalCreator = myApiPost('/api/data');\n * const creatorWithRetry = originalCreator.clone({ retryFn: customRetryFn });\n * ```\n */\n clone: (additionalOptions: Partial<BaseQueryCreatorOptions<TArgs>>) => QueryCreator<TArgs>;\n};\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport type AnyQueryCreator = QueryCreator<any>;\n\nexport type QueryArgsOf<T extends AnyQueryCreator | AnyNewQuery> =\n T extends QueryCreator<infer TArgs> ? TArgs : T extends Query<infer TArgs> ? TArgs : never;\n\nexport type RunQueryCreator<TCreator extends AnyQueryCreator> = ReturnType<TCreator>;\n\nexport type QueryMethod = 'GET' | 'OPTIONS' | 'HEAD' | 'POST' | 'PUT' | 'DELETE' | 'PATCH' | 'TRACE' | 'CONNECT';\n\nexport type InternalCreateQueryCreatorOptions<TArgs extends QueryArgs> = {\n /**\n * The route of the query.\n * If the query has path params, the route should be a function that takes the path params as an argument.\n * Otherwise, it should be a string.\n */\n route: RouteType<TArgs>;\n\n method: QueryMethod;\n client: AnyCreateQueryClientResult;\n};\n\nexport type QueryConfig = {\n /** A custom id to use for this query. Only affects queries that can be cached. */\n key?: string;\n\n /**\n * If true, the query will not be executed automatically.\n * Does not affect mutations such as POST, PUT etc. since those are never executed automatically.\n */\n onlyManualExecution?: boolean;\n\n /**\n * If true, the query will not throw an error because a \"withArgs()\" feature is missing.\n */\n silenceMissingWithArgsFeatureError?: boolean;\n\n /**\n * A custom injector to use for this query.\n */\n injector?: Injector;\n};\n\nexport const splitQueryConfig = <TArgs extends QueryArgs>(args: (QueryFeature<TArgs> | QueryConfig)[]) => {\n let queryConfig: QueryConfig = {};\n let features: QueryFeature<TArgs>[] = [];\n\n const first = args[0];\n\n if (first) {\n if ('type' in first) {\n features = args as QueryFeature<TArgs>[];\n } else {\n [queryConfig, ...features] = args as [QueryConfig, ...QueryFeature<TArgs>[]];\n }\n }\n return { features, queryConfig };\n};\n\nexport const createQueryCreator = <TArgs extends QueryArgs>(\n options: CreateQueryCreatorOptions | undefined,\n internals: InternalCreateQueryCreatorOptions<TArgs>,\n): QueryCreator<TArgs> =>\n createBaseQueryCreator({\n options,\n internals,\n queryFactory: createQuery,\n });\n","import { Query, QueryArgs } from './query';\nimport { BaseQueryCreatorOptions, QueryConfig, QueryCreator, splitQueryConfig } from './query-creator';\nimport { QueryFeature } from './query-features';\n\nexport type BaseQueryCreatorFactoryOptions<TArgs extends QueryArgs, TOptions, TInternals> = {\n /** Creator-specific options (e.g., CreateQueryCreatorOptions or CreateGqlQueryCreatorOptions) */\n options: TOptions | undefined;\n\n /** Creator-specific internals (e.g., InternalCreateQueryCreatorOptions or InternalCreateGqlQueryCreatorOptions) */\n internals: TInternals;\n\n /** Factory function that creates the actual query */\n queryFactory: (config: {\n creator: TOptions | undefined;\n creatorInternals: TInternals;\n features: QueryFeature<TArgs>[];\n queryConfig: QueryConfig;\n }) => Query<TArgs>;\n};\n\nexport const createBaseQueryCreator = <TArgs extends QueryArgs, TOptions, TInternals>(\n config: BaseQueryCreatorFactoryOptions<TArgs, TOptions, TInternals>,\n): QueryCreator<TArgs> => {\n function queryCreator(...features: QueryFeature<TArgs>[]): Query<TArgs>;\n function queryCreator(queryConfig: QueryConfig, ...features: QueryFeature<TArgs>[]): Query<TArgs>;\n\n function queryCreator(...args: (QueryFeature<TArgs> | QueryConfig)[]): Query<TArgs> {\n const { features, queryConfig } = splitQueryConfig<TArgs>(args);\n\n return config.queryFactory({\n creator: config.options,\n creatorInternals: config.internals,\n features,\n queryConfig,\n });\n }\n\n // Add clone method to create a new creator with merged options\n // Cast to match QueryCreator's expected signature while preserving TOptions internally\n queryCreator.clone = (additionalOptions: Partial<BaseQueryCreatorOptions>) => {\n return createBaseQueryCreator({\n ...config,\n options: { ...config.options, ...additionalOptions } as TOptions,\n });\n };\n\n return queryCreator;\n};\n","import { FormViolationListView, FormViolationView } from '@ethlete/types';\n\nexport type ClassValidatorError = {\n statusCode: number;\n message: string[];\n error: string;\n};\n\nexport const isClassValidatorError = (error: unknown): error is ClassValidatorError => {\n return typeof error === 'object' && error !== null && 'statusCode' in error && 'message' in error && 'error' in error;\n};\n\nexport type SymfonyErrorTrace = {\n args: string[];\n class: string;\n file: string;\n function: string;\n line: number;\n namespace: string;\n short_class: string;\n type: string;\n};\n\nexport type SymfonyError = {\n class: string;\n detail: string;\n status: number;\n title: string;\n trace: SymfonyErrorTrace[];\n type: string;\n};\n\nexport const isSymfonyError = (error: unknown): error is SymfonyError => {\n if (!error || typeof error !== 'object') {\n return false;\n }\n\n const symfonyError = error as SymfonyError;\n\n return (\n symfonyError.class !== undefined &&\n symfonyError.detail !== undefined &&\n symfonyError.status !== undefined &&\n symfonyError.title !== undefined &&\n symfonyError.trace !== undefined &&\n symfonyError.type !== undefined\n );\n};\n\nexport const isSymfonyPagerfantaOutOfRangeError = (error: unknown): error is SymfonyError => {\n if (!isSymfonyError(error)) {\n return false;\n }\n\n return error.class.startsWith('Pagerfanta') && error.class.endsWith('OutOfRangeCurrentPageException');\n};\n\nexport const isSymfonyFormViolationListError = (error: unknown): error is FormViolationListView => {\n return typeof error === 'object' && error !== null && 'violations' in error;\n};\n\nexport const isSymfonyListError = (error: unknown): error is FormViolationView[] => {\n return (\n !!error &&\n typeof error === 'object' &&\n Array.isArray(error) &&\n !!error.length &&\n typeof error[0] === 'object' &&\n 'message' in error[0] &&\n 'propertyPath' in error[0] &&\n 'invalidValue' in error[0]\n );\n};\n","export const buildErrorMessage = (code: string, message: string) => `[@ethlete\\\\query:${code}] ${message}`;\n\nexport class QueryError extends Error {\n data?: unknown;\n\n constructor(code: string, message: string, data?: unknown) {\n super(buildErrorMessage(code, message));\n this.name = 'QueryError';\n this.data = data;\n }\n}\n\nexport const invalidBaseRouteError = (data: unknown) =>\n new QueryError('001', 'The baseRoute must not end with a slash', data);\n\nexport const invalidRouteError = (data: unknown) => new QueryError('002', 'The route must start with a slash', data);\n\nexport const pathParamsMissingInRouteFunctionError = (data: unknown) =>\n new QueryError('003', 'The route is a function but pathParams are missing', data);\n\nexport const queryStateAlreadyHasKeyError = (data: unknown) =>\n new QueryError('004', 'The query state already contains the provided key', data);\n\nexport const queryStateDoesNotContainKeyError = (data: unknown) =>\n new QueryError('005', 'The query state does not contain the provided key', data);\n\nexport const queryStateCannotTransformError = (data: unknown) =>\n new QueryError('006', 'The query state cannot be transformed because it is not loading', data);\n\nexport const invalidBodyError = (data: unknown) => new QueryError('007', 'The body is not valid or upsupported', data);\n","import { isSymfonyPagerfantaOutOfRangeError } from '../../http/query-error-response-utils';\nimport { invalidBaseRouteError, invalidRouteError, pathParamsMissingInRouteFunctionError } from '../logger';\nimport { AnyRoute } from '../query';\nimport {\n BuildQueryStringConfig,\n Method,\n PathParams,\n QueryParams,\n RequestError,\n RequestHeaders,\n RequestRetryFn,\n} from './request.types';\n\nexport const isNaN = (value: unknown): boolean => typeof value === 'number' && Number.isNaN(value);\nexport const isEmptyString = (value: unknown): boolean => typeof value === 'string' && value.trim() === '';\n\nexport const isRequestError = <T = unknown>(error: unknown): error is RequestError<T> =>\n error instanceof Object && 'status' in error && 'statusText' in error && 'url' in error;\n\nexport const buildRoute = (options: {\n base: string;\n route: AnyRoute | null | undefined;\n pathParams?: PathParams;\n queryParams?: QueryParams;\n queryParamConfig?: BuildQueryStringConfig;\n}) => {\n if (options.base.endsWith('/')) {\n throw invalidBaseRouteError(options.base);\n }\n\n let route: string | null;\n\n if (typeof options.route === 'function') {\n if (!options.pathParams) {\n throw pathParamsMissingInRouteFunctionError(options.route({}));\n }\n\n route = options.route(options.pathParams);\n } else {\n route = options.route ?? null;\n }\n\n if (route && !route.startsWith('/')) {\n throw invalidRouteError(route);\n }\n\n if (options.queryParams) {\n const queryString = buildQueryString(options.queryParams, options.queryParamConfig);\n\n if (queryString) {\n route = route ? `${route}?${queryString}` : `/?${queryString}`;\n }\n }\n\n return `${options.base}${route ?? ''}`;\n};\n\nexport const buildQueryString = (params: QueryParams, config?: BuildQueryStringConfig): string | null => {\n const objectNotation = config?.objectNotation ?? 'bracket';\n const writeArrayIndexes = config?.writeArrayIndexes ?? false;\n const ignoredValues = config?.ignoredValues ?? [undefined, null, Infinity, -Infinity];\n const ignoredValuesFns = config?.ignoredValuesFns ?? [isNaN, isEmptyString];\n\n const queryParams: string[] = [];\n\n function processValue(key: string, value: unknown) {\n if (config?.objectNotation === 'json-stringify') {\n if (value === undefined) {\n return false;\n }\n\n if (ignoredValues.includes(value)) {\n return false;\n }\n\n if (ignoredValuesFns.some((fn) => fn(value))) {\n return false;\n }\n\n const encodedKey = encodeURIComponent(key);\n\n const val = typeof value === 'object' ? JSON.stringify(value) : value;\n\n const encodedValue = encodeURIComponent(val as string | number | boolean);\n\n queryParams.push(`${encodedKey}=${encodedValue}`);\n\n return true;\n } else if (Array.isArray(value)) {\n let currentFilteredIndex = 0;\n for (const arrayValue of value) {\n const nestedKey = writeArrayIndexes ? `${key}[${currentFilteredIndex}]` : `${key}[]`;\n\n const didAddValue = processValue(nestedKey, arrayValue);\n\n if (didAddValue) {\n currentFilteredIndex++;\n }\n }\n\n return null;\n } else if (typeof value === 'object' && value !== null) {\n for (const [objKey, val] of Object.entries(value)) {\n const nestedKey = objectNotation === 'dot' ? `${key}.${objKey}` : `${key}[${objKey}]`;\n processValue(nestedKey, val);\n }\n\n return null;\n } else {\n if (ignoredValues.includes(value)) {\n return false;\n }\n\n if (ignoredValuesFns.some((fn) => fn(value))) {\n return false;\n }\n\n const encodedKey = encodeURIComponent(key);\n const encodedValue = encodeURIComponent(value as string);\n\n queryParams.push(`${encodedKey}=${encodedValue}`);\n\n return true;\n }\n }\n\n for (const [key, val] of Object.entries(params)) {\n processValue(key, val);\n }\n\n return queryParams.length ? queryParams.join('&') : null;\n};\n\nexport const v2ExtractExpiresInSeconds = (headers: RequestHeaders) => {\n const cacheControl = headers['cache-control'];\n const age = headers['age'];\n const expires = headers['expires'];\n\n // In seconds\n let expiresIn: number | null = null;\n let maxAge: number | null = null;\n\n if (cacheControl?.includes('no-cache')) {\n return null;\n }\n\n if (cacheControl?.includes('max-age')) {\n const m = cacheControl.split('max-age=')[1];\n\n if (m) {\n maxAge = parseInt(m);\n }\n } else if (cacheControl?.includes('s-maxage')) {\n const m = cacheControl.split('s-maxage=')[1];\n\n if (m) {\n maxAge = parseInt(m);\n }\n }\n\n if (maxAge && age) {\n const ageSeconds = parseInt(age);\n\n expiresIn = maxAge - ageSeconds;\n } else if (maxAge) {\n expiresIn = maxAge / 2; // We assume the response is half way to its expiration\n } else if (expires) {\n // Used by some apis to tell the response will never expire\n // In this case we let the response expire after 1 hour\n if (expires === '-1') {\n expiresIn = 3600;\n } else {\n const expiresDate = new Date(expires);\n\n // check if the date is valid\n if (expiresDate.toString() !== 'Invalid Date') {\n expiresIn = Math.floor((expiresDate.getTime() - Date.now()) / 1000);\n }\n }\n }\n\n return expiresIn;\n};\n\nexport const buildTimestampFromSeconds = (seconds: number | null) => {\n if (seconds === null) {\n return null;\n }\n\n return new Date(Date.now() + seconds * 1000).getTime();\n};\n\nexport const serializeBody = (body: unknown): ArrayBuffer | URLSearchParams | Blob | FormData | string | null => {\n if (body === null || body === undefined) {\n return null;\n }\n\n if (\n body instanceof ArrayBuffer ||\n body instanceof Blob ||\n body instanceof FormData ||\n body instanceof URLSearchParams ||\n typeof body === 'string'\n ) {\n return body as ArrayBuffer | URLSearchParams | Blob | FormData | string;\n }\n\n if (typeof body === 'object' || typeof body === 'boolean' || Array.isArray(body)) {\n return JSON.stringify(body);\n }\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n return (body as any).toString();\n};\n\nexport const transformMethod = (config: { method: Method; transferVia?: 'GET' | 'POST' }) => {\n if (config.method === 'GQL_QUERY' || config.method === 'GQL_MUTATE') {\n if (!config.transferVia) {\n return 'POST';\n }\n\n return config.transferVia;\n }\n\n return config.method;\n};\n\nexport const detectContentTypeHeader = (body: unknown) => {\n // An empty body has no content type.\n if (body === null) {\n return null;\n }\n // FormData bodies rely on the browser's content type assignment.\n if (body instanceof FormData) {\n return null;\n }\n // Blobs usually have their own content type. If it doesn't, then\n // no type can be inferred.\n if (body instanceof Blob) {\n return body.type || null;\n }\n // Array buffers have unknown contents and thus no type can be inferred.\n if (body instanceof ArrayBuffer) {\n return null;\n }\n // Technically, strings could be a form of JSON data, but it's safe enough\n // to assume they're plain strings.\n if (typeof body === 'string') {\n return 'text/plain';\n }\n\n // Arrays, objects, boolean and numbers will be encoded as JSON.\n if (typeof body === 'object' || typeof body === 'number' || typeof body === 'boolean') {\n return 'application/json';\n }\n // No type could be inferred.\n return null;\n};\n\nexport const hasHeader = (headers: RequestHeaders, header: string) => {\n return Object.keys(headers).some((key) => key.toLowerCase() === header.toLowerCase());\n};\n\nexport const forEachHeader = (headers: RequestHeaders, callback: (value: string, key: string) => void) => {\n Object.entries(headers).forEach(([key, value]) => {\n callback(key, value);\n });\n};\n\nexport const parseAllXhrResponseHeaders = (xhr: XMLHttpRequest) => {\n const headers = xhr.getAllResponseHeaders();\n const parsedHeaders: RequestHeaders = {};\n\n for (const line of headers.split('\\n')) {\n const index = line.indexOf(':');\n if (index > 0) {\n const name = line.slice(0, index);\n const key = name.toLowerCase();\n const value = line.slice(index + 1).trim();\n\n parsedHeaders[key] = value;\n }\n }\n\n return parsedHeaders;\n};\n\nexport const getResponseUrl = (xhr: XMLHttpRequest): string | null => {\n if ('responseURL' in xhr && xhr.responseURL) {\n return xhr.responseURL;\n }\n if (/^X-Request-URL:/m.test(xhr.getAllResponseHeaders())) {\n return xhr.getResponseHeader('X-Request-URL');\n }\n return null;\n};\n\nexport const v2ShouldRetryRequest: RequestRetryFn = (config) => {\n const defaultRetryDelay = 1000 + 1000 * config.currentRetryCount;\n\n if (config.currentRetryCount > 3) {\n return { retry: false };\n }\n\n if (!isRequestError(config.error)) {\n return { retry: false };\n }\n\n const { status, detail } = config.error;\n\n // Retry on 5xx errors\n if (status >= 500) {\n // Don't retry if a requested page is out of range\n if (isSymfonyPagerfantaOutOfRangeError(detail)) {\n return { retry: false };\n }\n\n return { retry: true, delay: defaultRetryDelay };\n }\n\n // Retry on 408 or 425 errors\n if (status === 408 || status === 425) {\n return { retry: true, delay: defaultRetryDelay };\n }\n\n // Retry on 429 errors\n if (status === 429) {\n const retryAfter =\n config.headers['retry-after'] ||\n config.headers['Retry-After'] ||\n config.headers['x-retry-after'] ||\n config.headers['X-Retry-After'];\n\n if (retryAfter) {\n const delay = parseInt(retryAfter) * 1000;\n return { retry: true, delay: Number.isNaN(delay) ? defaultRetryDelay : delay };\n }\n\n return { retry: true, delay: defaultRetryDelay };\n }\n\n // Code 0 usually means the internet connection is down. We retry in this case.\n // It could also be a CORS issue but that should not be the case in production.\n if ((status as number) === 0) {\n return { retry: true, delay: defaultRetryDelay };\n }\n\n return { retry: false };\n};\n","import { HttpErrorResponse } from '@angular/common/http';\nimport { Observable, Observer } from 'rxjs';\nimport { PartialXhrState, RequestConfig, RequestError, RequestEvent } from './request.types';\nimport {\n buildTimestampFromSeconds,\n detectContentTypeHeader,\n forEachHeader,\n getResponseUrl,\n hasHeader,\n parseAllXhrResponseHeaders,\n serializeBody,\n v2ExtractExpiresInSeconds,\n v2ShouldRetryRequest,\n} from './request.util';\n\nconst XSSI_PREFIX = /^\\)\\]\\}',?\\n/;\n\nexport const request = <Response = unknown>(config: RequestConfig): Observable<RequestEvent<Response>> => {\n const headers = config.headers || {};\n const responseType = config.responseType || 'json';\n const body = config.body || null;\n const url = config.urlWithParams.split('?')[0] || '';\n const retryFn = config.retryFn || v2ShouldRetryRequest;\n let currentRetryCount = 0;\n let retryTimeout: number | null = null;\n\n return new Observable((observer: Observer<RequestEvent<Response>>) => {\n const xhr = new XMLHttpRequest();\n const reqBody = serializeBody(body);\n\n const setupXhr = () => {\n xhr.open(config.method, config.urlWithParams);\n if (config.withCredentials) {\n xhr.withCredentials = true;\n }\n\n forEachHeader(headers, (name, value) => xhr.setRequestHeader(name, value));\n\n if (!hasHeader(headers, 'Accept')) {\n xhr.setRequestHeader('Accept', 'application/json, text/plain, */*');\n }\n\n if (!hasHeader(headers, 'Content-Type')) {\n const detectedType = detectContentTypeHeader(body);\n\n if (detectedType) {\n xhr.setRequestHeader('Content-Type', detectedType);\n }\n }\n\n xhr.responseType = responseType !== 'json' ? responseType : 'text';\n };\n\n setupXhr();\n\n const partialFromXhr = (): PartialXhrState => {\n const statusText = xhr.statusText || 'OK';\n const headers = parseAllXhrResponseHeaders(xhr);\n const _url = getResponseUrl(xhr) || url;\n\n return { headers, status: xhr.status, statusText, url: _url };\n };\n\n const handleRetry = (error: RequestError) => {\n const newRetryCount = currentRetryCount + 1;\n const { headers } = partialFromXhr();\n const { retry, delay } = retryFn({ currentRetryCount: newRetryCount, headers, error });\n\n if (!retry) {\n observer.next({ type: 'failure', headers, error });\n observer.complete();\n return;\n }\n\n const _delay = delay ?? 1000;\n observer.next({ type: 'delay-retry', headers, retryNumber: newRetryCount, retryDelay: _delay });\n\n retryTimeout = window.setTimeout(() => {\n setupXhr();\n xhr.send(reqBody);\n currentRetryCount = newRetryCount;\n observer.next({ type: 'start', headers, isRetry: true, retryNumber: currentRetryCount, retryDelay: _delay });\n }, _delay);\n };\n\n const onLoad = async () => {\n const { headers, statusText, url } = partialFromXhr();\n\n let { status } = partialFromXhr();\n\n let body: unknown | null = null;\n\n if (status !== 204) {\n body = typeof xhr.response === 'undefined' ? xhr.responseText : xhr.response;\n }\n\n if (status === 0) {\n status = body ? 200 : 0;\n }\n\n let ok = status >= 200 && status < 300;\n\n if (responseType === 'json' && typeof body === 'string') {\n const originalBody = body;\n body = body.replace(XSSI_PREFIX, '');\n try {\n body = body !== '' ? JSON.parse(body as string) : null;\n } catch (error) {\n body = originalBody;\n\n if (ok) {\n ok = false;\n body = { error, text: body };\n }\n }\n } else if (!ok && body instanceof Blob) {\n try {\n const text = await body.text();\n\n if (body.type === 'application/json') {\n body = JSON.parse(text);\n } else {\n body = text;\n }\n } catch (error) {\n // Ignore the error.\n }\n }\n\n if (ok) {\n const successEvent: RequestEvent<Response> = {\n type: 'success',\n headers,\n response: body as Response,\n };\n\n const expiresInSeconds = config.cacheAdapter?.(headers) ?? v2ExtractExpiresInSeconds(headers);\n const expiresInTimestamp = buildTimestampFromSeconds(expiresInSeconds);\n\n if (expiresInTimestamp) {\n successEvent.expiresInTimestamp = expiresInTimestamp;\n }\n\n observer.next(successEvent);\n\n observer.complete();\n } else {\n handleRetry({\n url,\n detail: body,\n status,\n statusText,\n httpErrorResponse: new HttpErrorResponse({\n error: body,\n status,\n statusText,\n url,\n }),\n });\n }\n };\n\n const onError = (error: Event) => {\n const { url } = partialFromXhr();\n\n handleRetry({\n url,\n detail: error,\n status: xhr.status || 0,\n statusText: xhr.statusText || 'Unknown Error',\n httpErrorResponse: new HttpErrorResponse({\n error: error,\n status: xhr.status || 0,\n statusText: xhr.statusText || 'Unknown Error',\n url,\n }),\n });\n };\n\n const onDownProgress = (event: ProgressEvent) => {\n const { headers } = partialFromXhr();\n\n const progress: RequestEvent = {\n type: 'download-progress',\n headers,\n progress: {\n current: event.loaded,\n },\n };\n\n if (event.lengthComputable) {\n const progressPercent = (event.loaded / event.total) * 100;\n progress.progress.percentage = Math.round(progressPercent * 100) / 100;\n progress.progress.total = event.total;\n }\n\n if (responseType === 'text' && !!xhr.responseText) {\n progress.partialText = xhr.responseText;\n }\n\n observer.next(progress);\n };\n\n const onUpProgress = (event: ProgressEvent) => {\n const { headers } = partialFromXhr();\n\n const progress: RequestEvent = {\n type: 'upload-progress',\n headers,\n progress: {\n current: event.loaded,\n },\n };\n\n if (event.lengthComputable) {\n const progressPercent = (event.loaded / event.total) * 100;\n progress.progress.percentage = Math.round(progressPercent * 100) / 100;\n progress.progress.total = event.total;\n }\n\n observer.next(progress);\n };\n\n xhr.addEventListener('load', onLoad);\n xhr.addEventListener('error', onError);\n xhr.addEventListener('timeout', onError);\n xhr.addEventListener('abort', onError);\n\n if (config.reportProgress) {\n xhr.addEventListener('progress', onDownProgress);\n\n if (reqBody !== null && xhr.upload) {\n xhr.upload.addEventListener('progress', onUpProgress);\n }\n }\n\n xhr.send(reqBody);\n observer.next({ type: 'start', headers });\n\n return () => {\n xhr.removeEventListener('error', onError);\n xhr.removeEventListener('abort', onError);\n xhr.removeEventListener('load', onLoad);\n xhr.removeEventListener('timeout', onError);\n\n if (retryTimeout) {\n window.clearTimeout(retryTimeout);\n }\n\n if (config.reportProgress) {\n xhr.removeEventListener('progress', onDownProgress);\n\n if (reqBody !== null && xhr.upload) {\n xhr.upload.removeEventListener('progress', onUpProgress);\n }\n }\n\n if (xhr.readyState !== xhr.DONE) {\n xhr.abort();\n }\n\n observer.next({ type: 'cancel', headers });\n };\n });\n};\n","import { HttpHeaders } from '@angular/common/http';\nimport { QueryArgs, RequestArgs } from './query';\nimport { QueryMethod } from './query-creator';\n\nexport const extractExpiresInSeconds = (headers: HttpHeaders) => {\n const cacheControl = headers.get('cache-control');\n const age = headers.get('age');\n const expires = headers.get('expires');\n\n // In seconds\n let expiresIn: number | null = null;\n let maxAge: number | null = null;\n\n if (cacheControl?.includes('no-cache')) {\n return null;\n }\n\n if (cacheControl?.includes('max-age')) {\n const m = cacheControl.split('max-age=')[1];\n\n if (m) {\n maxAge = parseInt(m);\n }\n } else if (cacheControl?.includes('s-maxage')) {\n const m = cacheControl.split('s-maxage=')[1];\n\n if (m) {\n maxAge = parseInt(m);\n }\n }\n\n if (maxAge && age) {\n const ageSeconds = parseInt(age);\n\n expiresIn = maxAge - ageSeconds;\n } else if (maxAge) {\n expiresIn = maxAge / 2; // We assume the response is half way to its expiration\n } else if (expires) {\n // Used by some apis to tell the response will never expire\n // In this case we let the response expire after 1 hour\n if (expires === '-1') {\n expiresIn = 3600;\n } else {\n const expiresDate = new Date(expires);\n\n // check if the date is valid\n if (expiresDate.toString() !== 'Invalid Date') {\n expiresIn = Math.floor((expiresDate.getTime() - Date.now()) / 1000);\n }\n }\n }\n\n return expiresIn;\n};\n\nexport const shouldCacheQuery = (method: QueryMethod) => {\n return method === 'GET' || method === 'OPTIONS' || method === 'HEAD';\n};\n\nexport const buildQueryCacheKey = (route: string, args: RequestArgs<QueryArgs> | undefined) => {\n // We need to hash the body in case it's a gql query and the query get's transported in the body\n const body = JSON.stringify(args?.body || {})\n // replace all curly braces with empty string\n .replace(/{|}/g, '')\n // replace new lines and whitespaces with empty string\n .replace(/\\s/g, '');\n\n const seed = `${route}_${body}`;\n\n let hash = 0;\n\n for (const char of seed) {\n hash = (Math.imul(31, hash) + char.charCodeAt(0)) << 0;\n }\n\n // Force positive number hash.\n // 2147483647 = equivalent of Integer.MAX_VALUE.\n hash += 2147483647 + 1;\n\n return hash.toString();\n};\n","import { HttpErrorResponse } from '@angular/common/http';\nimport { clamp } from '@ethlete/core';\nimport { isSymfonyPagerfantaOutOfRangeError } from './query-error-response-utils';\n\nexport type ShouldRetryRequestOptions = {\n retryCount: number;\n error: HttpErrorResponse;\n};\n\nexport type ShouldRetryRequestResult =\n | {\n retry: false;\n }\n | {\n retry: true;\n delay: number;\n };\n\nexport type ShouldRetryRequestFn = (options: ShouldRetryRequestOptions) => ShouldRetryRequestResult;\n\nexport const shouldRetryRequest = (\n options: ShouldRetryRequestOptions | HttpErrorResponse,\n): ShouldRetryRequestResult => {\n const normalizedOptions =\n options instanceof HttpErrorResponse ? { retryCount: 0, error: options } : (options as ShouldRetryRequestOptions);\n const { retryCount, error } = normalizedOptions;\n const defaultRetryDelay = clamp(1000 + 1000 * retryCount, 1000, 5000);\n const { status, error: detail, headers } = error;\n\n // Code 0 usually means the internet connection is down. We retry in this case.\n // It could also be a CORS issue but that should not be the case in production.\n // We will retry in this case until the connection is back.\n if (status === 0) {\n return { retry: true, delay: defaultRetryDelay };\n }\n\n // Don't retry if we already retried 3 times\n if (retryCount > 3) {\n return { retry: false };\n }\n\n // Don't retry if it's not an http error\n if (!(error instanceof HttpErrorResponse)) {\n return { retry: false };\n }\n\n // Retry on 5xx errors (except 500 internal server error since those are usually not recoverable)\n if (status >= 501) {\n // Don't retry if a requested page is out of range\n if (isSymfonyPagerfantaOutOfRangeError(detail)) {\n return { retry: false };\n }\n\n return { retry: true, delay: defaultRetryDelay };\n }\n\n // Retry on 408 or 425 errors\n if (status === 408 || status === 425) {\n return { retry: true, delay: defaultRetryDelay };\n }\n\n // Retry on 429 errors\n if (status === 429) {\n const retryAfter = headers.get('retry-after') || headers.get('x-retry-after');\n\n if (retryAfter) {\n const delay = parseInt(retryAfter) * 1000;\n return { retry: true, delay: Number.isNaN(delay) ? defaultRetryDelay : delay };\n }\n\n return { retry: true, delay: defaultRetryDelay };\n }\n\n return { retry: false };\n};\n","import { HttpErrorResponse } from '@angular/common/http';\nimport {\n isClassValidatorError,\n isSymfonyFormViolationListError,\n isSymfonyListError,\n} from './query-error-response-utils';\nimport { shouldRetryRequest, ShouldRetryRequestResult } from './query-retry-utils';\n\nexport type QueryErrorResponseList = {\n isList: true;\n errors: QueryErrorResponseItem[];\n};\n\nexport type QueryErrorResponseSingle = {\n isList: false;\n error: QueryErrorResponseItem;\n};\n\nexport type QueryErrorResponse = {\n raw: HttpErrorResponse;\n retryState: ShouldRetryRequestResult;\n code: number;\n} & (QueryErrorResponseList | QueryErrorResponseSingle);\n\nexport type QueryErrorResponseItem = {\n message: string;\n};\n\nexport const createQueryErrorResponse = (error: unknown): QueryErrorResponse => {\n let err = error instanceof HttpErrorResponse ? error : null;\n\n if (!err) {\n err = new HttpErrorResponse({\n error: error,\n status: 0,\n statusText: 'Unknown Error',\n });\n }\n const retryState = shouldRetryRequest(err);\n\n const detail = err.error;\n const errorList: QueryErrorResponseItem[] = [];\n\n if (isClassValidatorError(detail)) {\n for (const error of detail.message) {\n errorList.push({ message: error });\n }\n } else if (isSymfonyFormViolationListError(detail)) {\n for (const violation of detail.violations) {\n errorList.push({ message: violation.message });\n }\n } else if (isSymfonyListError(detail)) {\n for (const error of detail) {\n errorList.push({ message: error.message });\n }\n } else if (typeof detail === 'object' && !!detail && 'message' in detail && typeof detail.message === 'string') {\n errorList.push({ message: detail.message });\n } else if (typeof detail === 'object' && !!detail && 'detail' in detail && typeof detail.detail === 'string') {\n // Symfony error response (during development)\n errorList.push({ message: detail.detail });\n } else if (typeof detail === 'string') {\n errorList.push({ message: detail });\n } else if (Array.isArray(detail) && detail.length > 0 && typeof detail[0] === 'string') {\n for (const error of detail) {\n errorList.push({ message: error });\n }\n }\n\n if (errorList.length > 1) {\n return {\n isList: true,\n errors: errorList,\n raw: err,\n retryState,\n code: err.status,\n };\n } else {\n const singleError = errorList[0] ?? { message: err.message };\n\n return {\n isList: false,\n error: singleError,\n raw: err,\n retryState,\n code: err.status,\n };\n }\n};\n","import { HttpClient, HttpEvent, HttpEventType, HttpProgressEvent } from '@angular/common/http';\nimport { ErrorHandler, Signal, computed, signal } from '@angular/core';\nimport { Subscription, catchError, retry, tap, throwError, timer } from 'rxjs';\nimport { buildTimestampFromSeconds } from '../legacy/request';\nimport { QueryArgs, RequestArgs, ResponseType } from './query';\nimport { extractExpiresInSeconds } from './query-cache-utils';\nimport { CacheAdapterFn } from './query-client';\nimport { CreateQueryCreatorOptions, QueryMethod } from './query-creator';\nimport { QueryErrorResponse, createQueryErrorResponse } from './query-error-response';\nimport { QueryRepositoryDependencies } from './query-repository';\nimport { ShouldRetryRequestFn, ShouldRetryRequestOptions, shouldRetryRequest } from './query-retry-utils';\n\nexport const SPEED_BUFFER_TIME_IN_MS = 2000;\n\nexport type HttpRequestTransferCacheConfig =\n | boolean\n | {\n includeHeaders?: string[];\n };\n\nexport type HttpRequestResponseType = 'json' | 'text' | 'blob' | 'arraybuffer';\n\nexport type CreateHttpRequestDependencies = {\n /** The http client instance to use for the request */\n httpClient: HttpClient;\n\n /** The error handler instance to use for the request */\n ngErrorHandler: ErrorHandler;\n};\n\nexport type CreateHttpRequestOptions<TArgs extends QueryArgs> = {\n /** The HTTP method of the request */\n method: QueryMethod;\n\n /**\n * The full path of the request\n * @example 'https://api.example.com/v1/users'\n */\n fullPath: string;\n\n /** The data of the request */\n args?: RequestArgs<TArgs> | null;\n\n /** The dependencies of the request */\n dependencies: QueryRepositoryDependencies;\n\n /** The client options of the request */\n clientOptions?: CreateQueryCreatorOptions;\n\n /**\n * The cache adapter function to use for the request\n * @default extractExpiresInSeconds()\n */\n cacheAdapter?: CacheAdapterFn;\n\n /**\n * The retry function to use for the request\n * @default shouldRetryRequest()\n */\n retryFn?: ShouldRetryRequestFn;\n};\n\nexport type HttpRequestLoadingState = {\n /** The time when the request was executed in ms */\n executeTime: number;\n\n /** The progress of the request. Null if reportProgress is false or progress is not available / unsupported */\n progress: HttpRequestLoadingProgressState | null;\n};\n\nexport type HttpRequestLoadingProgressState = {\n /** The total number of bytes to be transferred */\n total: number;\n\n /** The number of bytes transferred */\n loaded: number;\n\n /** The percentage of the transfer that is completed */\n percentage: number;\n\n /** The speed of the transfer in bytes per millisecond */\n speed: number | null;\n\n /** The estimated remaining time in milliseconds */\n remainingTime: number | null;\n};\n\nexport type HttpRequest<TArgs extends QueryArgs> = {\n /** Executes the request */\n execute: (options?: { allowCache?: boolean }) => boolean;\n\n /** Destroys the request (cancels it if in progress) */\n destroy: () => boolean;\n\n /** The loading state of the request */\n loading: Signal<HttpRequestLoadingState | null>;\n\n /** The error state of the request */\n error: Signal<QueryErrorResponse | null>;\n\n /** The response state of the request */\n response: Signal<ResponseType<TArgs> | null>;\n\n /** The current event of the request */\n currentEvent: Signal<RequestHttpEvent<TArgs> | null>;\n\n /** Whether the request is stale or not aka the cache header has expired */\n isStale: Signal<boolean>;\n};\n\n/** A custom error event since the Angular http client does not provide a specific event for errors */\nexport type HttpErrorEvent = {\n type: 'error';\n error: QueryErrorResponse;\n};\n\nexport type RequestHttpEvent<TArgs extends QueryArgs> = HttpEvent<ResponseType<TArgs>> | HttpErrorEvent;\n\nexport const createHttpRequest = <TArgs extends QueryArgs>(options: CreateHttpRequestOptions<TArgs>) => {\n let currentStreamSubscription = Subscription.EMPTY;\n\n const { args, clientOptions, dependencies } = options;\n\n const currentEvent = signal<RequestHttpEvent<TArgs> | null>(null);\n const loading = signal<HttpRequestLoadingState | null>(null);\n const error = signal<QueryErrorResponse | null>(null);\n const response = signal<ResponseType<TArgs> | null>(null);\n\n const lastLoadEventTime = signal(0);\n const lastLoadEventAmount = signal(0);\n const lastExecuteTime = signal(0);\n const expiresIn = signal<number | null>(null);\n\n const isStale = computed(() => {\n const expiresInTs = expiresIn();\n\n return expiresInTs === null || expiresInTs < Date.now();\n });\n\n const createStream = () => {\n const headers = typeof args?.headers === 'function' ? args.headers() : args?.headers;\n\n return dependencies.httpClient\n .request(options.method, options.fullPath, {\n observe: 'events',\n body: args?.body,\n reportProgress: clientOptions?.reportProgress,\n withCredentials: clientOptions?.withCredentials,\n transferCache: clientOptions?.transferCache,\n responseType: clientOptions?.responseType || 'json',\n headers,\n })\n .pipe(\n tap((event) => updateState(event)),\n retry({\n delay: (error, retryCount) => {\n const retryOptions: ShouldRetryRequestOptions = { error, retryCount };\n\n const retryResult = options.retryFn?.(retryOptions) || shouldRetryRequest(retryOptions);\n\n if (!retryResult.retry) {\n return throwError(() => error);\n }\n\n return timer(retryResult.delay);\n },\n }),\n catchError((e) => {\n updateErrorState(e);\n\n return throwError(() => e);\n }),\n );\n };\n\n const execute = (options?: { allowCache?: boolean }) => {\n if (loading() || (!isStale() && options?.allowCache)) {\n // Do not execute if there is already a request in progress or caching is allowed\n return false;\n }\n\n currentStreamSubscription.unsubscribe();\n\n lastExecuteTime.set(Date.now());\n lastLoadEventTime.set(lastExecuteTime());\n\n loading.set({\n executeTime: lastExecuteTime(),\n progress: null,\n });\n error.set(null);\n expiresIn.set(null);\n\n const stream = createStream();\n\n currentStreamSubscription = stream.subscribe({\n error: () => {\n // Errors are already handled in updateErrorState via catchError\n // This empty handler prevents \"unhandled error\" warnings in tests\n },\n });\n\n return true;\n };\n\n const destroy = () => {\n if (currentStreamSubscription.closed) {\n return false;\n }\n\n currentStreamSubscription.unsubscribe();\n\n return true;\n };\n\n const updateState = (event: HttpEvent<ResponseType<TArgs>>) => {\n currentEvent.set(event);\n\n switch (event.type) {\n case HttpEventType.Response:\n {\n loading.set(null);\n response.set(event.body);\n\n const expiresInSeconds = options.cacheAdapter\n ? options.cacheAdapter(event.headers)\n : extractExpiresInSeconds(event.headers);\n const expiresInTimestamp = buildTimestampFromSeconds(expiresInSeconds);\n expiresIn.set(expiresInTimestamp);\n }\n break;\n\n case HttpEventType.UploadProgress:\n case HttpEventType.DownloadProgress:\n {\n updateLoadingState(event);\n }\n break;\n\n case HttpEventType.Sent:\n case HttpEventType.ResponseHeader:\n case HttpEventType.User:\n {\n // we don't care about these events\n }\n break;\n }\n };\n\n const updateErrorState = (errorResponse: unknown) => {\n const errorRes = createQueryErrorResponse(errorResponse);\n\n error.set(errorRes);\n loading.set(null);\n currentEvent.set({ type: 'error', error: errorRes });\n\n options.dependencies.ngErrorHandler.handleError(errorRes.raw);\n };\n\n const updateLoadingState = (event: HttpProgressEvent) => {\n if (event.total === undefined) {\n return;\n }\n\n const progress: HttpRequestLoadingProgressState = {\n total: event.total,\n loaded: event.loaded,\n percentage: (event.loaded / event.total) * 100,\n speed: null,\n remainingTime: null,\n };\n\n const state: HttpRequestLoadingState = {\n executeTime: lastExecuteTime(),\n progress,\n };\n\n const currentTime = Date.now();\n const elapsedTimeSinceLastEvent = currentTime - lastLoadEventTime();\n const elapsedTimeSinceLastExecute = currentTime - lastExecuteTime();\n const loadedAmount = event.loaded - lastLoadEventAmount();\n\n // We only want to calculate speed and remaining time after 2 seconds of the execution\n // This is to avoid showing incorrect speed and remaining time when the request is very fast\n if (elapsedTimeSinceLastExecute > SPEED_BUFFER_TIME_IN_MS) {\n const speed = (loadedAmount / elapsedTimeSinceLastEvent) * 1000;\n\n progress.speed = speed * 1000;\n progress.remainingTime = Math.round((event.total - event.loaded) / speed) * 1000;\n }\n\n lastLoadEventTime.set(currentTime);\n lastLoadEventAmount.set(event.loaded);\n\n loading.set(state);\n };\n\n const httpRequest: HttpRequest<TArgs> = {\n execute,\n destroy,\n loading: loading.asReadonly(),\n error: error.asReadonly(),\n response: response.asReadonly(),\n currentEvent: currentEvent.asReadonly(),\n isStale,\n };\n\n return httpRequest;\n};\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { computed, effect, inject, Injector, runInInjectionContext, Signal, signal, untracked } from '@angular/core';\nimport { AnyNewQuery, RequestArgs, ResponseType } from './query';\nimport { AnyQueryCreator, QueryArgsOf, RunQueryCreator } from './query-creator';\nimport { QueryErrorResponse } from './query-error-response';\nimport { queryStackWithArgsUsed, queryStackWithResponseUpdateUsed } from './query-errors';\nimport { QueryFeature, QueryFeatureType, withArgs } from './query-features';\n\nexport type QueryStackSubtle<TCreator extends AnyQueryCreator, TQuery extends AnyNewQuery> = {\n /** Create a new query with the given arguments. You should always prefer the `args` option instead of this. */\n runWithArgs: (\n args: RequestArgs<QueryArgsOf<TCreator>> | RequestArgs<QueryArgsOf<TCreator>>[] | null,\n ) => TQuery | null;\n};\n\nexport type QueryStack<TQuery extends AnyNewQuery, TCreator extends AnyQueryCreator, TTransform> = {\n /** Contains all queries in the stack. */\n queries: Signal<TQuery[]>;\n\n /** Contains the first query in the stack. */\n firstQuery: Signal<TQuery | null>;\n\n /** Contains the last query in the stack. Useful for getting current pagination values. */\n lastQuery: Signal<TQuery | null>;\n\n /** True if any query in the stack is loading. */\n anyLoading: Signal<boolean>;\n\n /** Count of queries currently loading */\n loadingCount: Signal<number>;\n\n /** True if ALL queries are loading */\n allLoading: Signal<boolean>;\n\n /** Progress tracking */\n loadingProgress: Signal<{ loaded: number; total: number }>;\n\n /** Contains the first error that occurred in the stack. */\n anyError: Signal<QueryErrorResponse | null>;\n\n /** All errors from all queries */\n errors: Signal<QueryErrorResponse[]>;\n\n /** Contains the responses of all queries in the stack. Will be `null` for queries that are loading or errored. */\n response: Signal<TTransform>;\n\n /** Executes all queries in the stack. */\n execute: (options?: { allowCache?: boolean }) => void;\n\n /** Destroys all queries in the stack and empties it. This should only be used if `append` is true. */\n clear: () => void;\n\n /** Retry all queries that have errors */\n retryFailed: () => void;\n\n /** Advanced query stack features. **WARNING!** Incorrectly using these features will likely **BREAK** your application. You have been warned! */\n subtle: QueryStackSubtle<TCreator, TQuery>;\n};\n\nexport type AnyQueryStack = QueryStack<AnyNewQuery, AnyQueryCreator, any>;\n\nexport type CreateQueryStackOptions<\n TCreator extends AnyQueryCreator,\n TDeps extends () => any,\n TTransform = (ResponseType<QueryArgsOf<TCreator>> | null)[],\n> = {\n /**\n * The query creator function that will be used to create the query stack.\n */\n queryCreator: TCreator;\n\n /**\n * The dependencies that should trigger a new query stack creation.\n * This function can be treated like a computed function. It reacts to signal changes.\n * The return value of this function will be passed to the `args` function.\n *\n * This option can be ignored if `append` is false.\n */\n dependencies?: TDeps;\n\n /**\n * The features that should be used for all queries in the stack.\n *\n * @throws If the `withArgs` feature is used. This feature is internally used.\n *\n * @example\n * // Due to limitations in TypeScript, you have to manually add the needed generic types if needed.\n * features: [E.withSuccessHandling<GetPostQueryArgs>({ handler: (post) => console.log(post.title) })]\n *\n * @example\n * // If typings are not needed, you can use the feature without generics.\n * features: [E.withPolling({ interval: 5000 })]\n */\n features?: QueryFeature<any>[];\n\n /**\n * The arguments to create queries with.\n * This function can be treated like a computed function. It reacts to signal changes.\n * If a signal changes, a new query will be created (and appended to the existing ones if `append` is true).\n * If this function returns `null`, the args will be ignored.\n * If this function returns an array, multiple queries will be created.\n *\n * @example\n * // One query\n * () => ({ queryParams: { postId: myId() } }),\n *\n * @example\n * // Multiple queries (these can of cause also be created using a loop)\n * () => [\n * { queryParams: { postId: myId() } },\n * { queryParams: { postId: myOtherId() } },\n * ],\n *\n * @example\n * // One query with dependencies\n * (deps) => ({ queryParams: { postId: myId(), limit: deps.limit } }),\n */\n args: (deps: ReturnType<TDeps>) => RequestArgs<QueryArgsOf<TCreator>> | RequestArgs<QueryArgsOf<TCreator>>[] | null;\n\n /**\n * If true, new queries will be appended to the existing ones. Otherwise, existing queries will be destroyed.\n * This should be used for things like infinite scrolling where already fetched queries should not be destroyed.\n */\n append?: boolean;\n\n /**\n * If append is true, this function will be called to merge the old and new queries.\n * Useful if you want to append the new queries in a specific order (e.g. at the beginning).\n */\n appendFn?: (\n oldQueries: RunQueryCreator<TCreator>[],\n newQueries: RunQueryCreator<TCreator>[],\n ) => {\n /** The new queries merged with the old ones. */\n queries: RunQueryCreator<TCreator>[];\n\n /** The last query in the new queries. */\n lastQuery: RunQueryCreator<TCreator> | null;\n };\n\n /**\n * Transforms the responses of all queries in the stack. Useful for merging or filtering responses.\n */\n transform?: (responses: ResponseType<QueryArgsOf<TCreator>>[]) => TTransform;\n\n /**\n * If true, prevents creating queries with identical args.\n * Useful for append mode to avoid duplicate data fetching.\n * @default true\n */\n deduplicateArgs?: boolean;\n\n /**\n * Custom function to generate a unique key from args for deduplication.\n * If not provided, uses JSON.stringify.\n */\n argsKeyFn?: (args: RequestArgs<QueryArgsOf<TCreator>> | null) => string;\n\n /**\n * Maximum number of queries to keep when append is true.\n * When limit is reached, queries will be removed based on removeStrategy.\n * @default Infinity\n */\n maxQueries?: number;\n\n /**\n * Strategy for removing queries when maxQueries is reached.\n * - 'oldest': Remove oldest queries first (FIFO)\n * - 'newest': Remove newest queries first (LIFO)\n * @default 'oldest'\n */\n removeStrategy?: 'oldest' | 'newest';\n};\n\n/** Transforms an array of arrays into a single array and filters out `null` values. */\nexport const transformArrayResponse = <T extends (unknown | null)[]>(responses: T) =>\n responses.filter((r) => !!r).flatMap((r) => r) as NonNullable<T[0]>[];\n\n/** Transforms an array of paginated responses into a single array and filters out `null` values. */\nexport const transformPaginatedResponse = <T extends ({ items: unknown[] } | null)[]>(responses: T) =>\n responses.filter((r) => !!r).flatMap((r) => r.items) as NonNullable<NonNullable<T[0]>['items']>;\n\nexport const createQueryStack = <\n TCreator extends AnyQueryCreator,\n TArgs extends QueryArgsOf<TCreator>,\n TDeps extends () => any,\n TTransform = (ResponseType<TArgs> | null)[],\n>(\n options: CreateQueryStackOptions<TCreator, TDeps, TTransform>,\n) => {\n type QueryType = RunQueryCreator<TCreator>;\n\n const {\n args,\n queryCreator,\n dependencies,\n append,\n features = [],\n appendFn = (oldQueries: QueryType[], newQueries: QueryType[]) => {\n const queries = [...oldQueries, ...newQueries];\n const lastQuery = newQueries[newQueries.length - 1] ?? oldQueries[oldQueries.length - 1] ?? null;\n\n return { queries, lastQuery };\n },\n transform,\n argsKeyFn,\n deduplicateArgs,\n maxQueries = Infinity,\n removeStrategy = 'oldest',\n } = options ?? {};\n\n const injector = inject(Injector);\n\n const queries = signal<QueryType[]>([]);\n const lastQuery = signal<QueryType | null>(null);\n const firstQuery = computed(() => queries()[0] ?? null);\n\n const hasWithArgsFeature = features.some((f) => f.type == QueryFeatureType.WITH_ARGS);\n const hasWithOptimisticUpdateFeature = features.some((f) => f.type == QueryFeatureType.WITH_RESPONSE_UPDATE);\n\n if (hasWithArgsFeature) {\n throw queryStackWithArgsUsed();\n }\n\n if (hasWithOptimisticUpdateFeature) {\n throw queryStackWithResponseUpdateUsed();\n }\n\n const runWithArgs = (args: RequestArgs<QueryArgsOf<TCreator>> | RequestArgs<QueryArgsOf<TCreator>>[] | null) => {\n if (args === null) return null;\n\n return untracked(() => {\n const newArgsArray = Array.isArray(args) ? args : [args];\n\n let filteredArgs = newArgsArray;\n if (deduplicateArgs !== false && append) {\n const keyFn = argsKeyFn ?? ((a) => JSON.stringify(a));\n const existingKeys = new Set(\n queries().map((q) => keyFn(q.args() as RequestArgs<QueryArgsOf<TCreator>> | null)),\n );\n\n filteredArgs = newArgsArray.filter((a) => {\n const key = keyFn(a);\n if (existingKeys.has(key)) return false;\n existingKeys.add(key);\n return true;\n });\n }\n\n const newQueries = runInInjectionContext(injector, () =>\n filteredArgs.map(\n (newArgsEntry) =>\n queryCreator(\n withArgs(() => newArgsEntry),\n ...features,\n ) as QueryType,\n ),\n );\n\n const oldQueries = queries();\n\n if (append) {\n const { queries: appendedQueries, lastQuery: lastAppendedQuery } = appendFn(oldQueries, newQueries);\n\n let finalQueries = appendedQueries;\n if (maxQueries && finalQueries.length > maxQueries) {\n const excessCount = finalQueries.length - maxQueries;\n\n const queriesToRemove =\n removeStrategy === 'newest' ? finalQueries.slice(-excessCount) : finalQueries.slice(0, excessCount);\n\n queriesToRemove.forEach((q) => q.subtle.destroy());\n\n finalQueries =\n removeStrategy === 'newest' ? finalQueries.slice(0, maxQueries) : finalQueries.slice(-maxQueries);\n }\n\n queries.set(finalQueries);\n lastQuery.set(lastAppendedQuery);\n return lastAppendedQuery;\n } else {\n const keyFn = argsKeyFn ?? ((a) => JSON.stringify(a));\n const newArgsKeys = new Set(newArgsArray.map((a) => keyFn(a)));\n\n const preservedQueries = oldQueries.filter((oldQuery) => {\n const oldKey = keyFn(oldQuery.args() as RequestArgs<QueryArgsOf<TCreator>> | null);\n return newArgsKeys.has(oldKey);\n });\n\n const preservedMap = new Map(\n preservedQueries.map((q) => [keyFn(q.args() as RequestArgs<QueryArgsOf<TCreator>> | null), q]),\n );\n\n const finalQueries = newArgsArray.map((newArgsEntry) => {\n const key = keyFn(newArgsEntry);\n const preserved = preservedMap.get(key);\n\n if (preserved) {\n return preserved;\n }\n\n return runInInjectionContext(\n injector,\n () =>\n queryCreator(\n withArgs(() => newArgsEntry),\n ...features,\n ) as QueryType,\n );\n });\n\n for (const oldQuery of oldQueries) {\n if (!finalQueries.includes(oldQuery)) {\n oldQuery.subtle.destroy();\n }\n }\n\n queries.set(finalQueries);\n\n const last = finalQueries[finalQueries.length - 1] ?? null;\n\n lastQuery.set(last);\n\n return last;\n }\n });\n };\n\n const clear = () => {\n for (const query of queries()) {\n query.subtle.destroy();\n }\n\n queries.set([]);\n lastQuery.set(null);\n };\n\n effect(() => {\n dependencies?.();\n\n untracked(() => clear());\n });\n\n effect(() => runWithArgs(args(dependencies?.())));\n\n const anyLoading = computed(() => queries().some((q) => q.loading()));\n\n const loadingCount = computed(() => queries().filter((q) => q.loading()).length);\n\n const allLoading = computed(() => {\n const qs = queries();\n return qs.length > 0 && qs.every((q) => q.loading());\n });\n\n const loadingProgress = computed(() => {\n const total = queries().length;\n const loaded = queries().filter((q) => !q.loading()).length;\n return { loaded, total };\n });\n\n const anyError = computed(\n () =>\n queries()\n .map((q) => q.error())\n .find((e) => e !== null) ?? null,\n );\n\n const errors = computed(() =>\n queries()\n .map((q) => q.error())\n .filter((e): e is QueryErrorResponse => e !== null),\n );\n\n const response = computed(() => {\n const responses = queries().map((q) => q.response());\n return transform?.(responses) ?? responses;\n }) as Signal<TTransform>;\n\n const execute = (options?: { allowCache?: boolean }) => {\n for (const query of queries()) {\n query.execute({ options: { allowCache: options?.allowCache } });\n }\n };\n\n const retryFailed = () => {\n for (const query of queries()) {\n if (query.error()) {\n query.execute({ options: { allowCache: false } });\n }\n }\n };\n\n const stack: QueryStack<QueryType, TCreator, TTransform> = {\n queries: queries.asReadonly(),\n lastQuery: lastQuery.asReadonly(),\n firstQuery,\n anyLoading,\n loadingCount,\n allLoading,\n loadingProgress,\n anyError,\n errors,\n response,\n execute,\n clear,\n retryFailed,\n subtle: {\n runWithArgs,\n },\n };\n\n return stack;\n};\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { computed, effect, isDevMode, Signal, signal, untracked } from '@angular/core';\nimport {\n ContentfulGqlLikePaginated,\n DynLikePaginated,\n GgLikePaginated,\n NormalizedPagination,\n Paginated,\n} from '@ethlete/types';\nimport { AnyNewQuery, Query, QueryArgs, RequestArgs, ResponseType } from './query';\nimport { AnyQueryCreator, QueryArgsOf, QueryCreator } from './query-creator';\nimport { QueryErrorResponse } from './query-error-response';\nimport {\n pagedQueryStackNextPageCalledWithoutPreviousPage,\n pagedQueryStackPageBiggerThanTotalPages,\n pagedQueryStackPreviousPageCalledButAlreadyAtFirstPage,\n queryStackTotalQueriesAndExpectedQueriesMismatch,\n} from './query-errors';\nimport { QueryFeature } from './query-features';\nimport { shouldRetryRequest } from './query-retry-utils';\nimport { createQueryStack, transformArrayResponse } from './query-stack';\n\nexport const ethletePaginationAdapter = <T>(response: Paginated<T>) => {\n const pagination: NormalizedPagination<T> = {\n items: response.items,\n totalPages: response.totalPageCount,\n currentPage: response.currentPage,\n itemsPerPage: response.itemsPerPage,\n totalHits: response.totalHits,\n };\n\n return pagination;\n};\n\nexport const ggLikePaginationAdapter = <T>(response: GgLikePaginated<T>) => {\n const pagination: NormalizedPagination<T> = {\n items: response.items,\n totalPages: response.totalPageCount,\n currentPage: response.currentPage,\n itemsPerPage: response.itemsPerPage,\n totalHits: response.totalHits,\n };\n\n return pagination;\n};\n\nexport const dynLikePaginationAdapter = <T>(response: DynLikePaginated<T>) => {\n const pagination: NormalizedPagination<T> = {\n items: response.items,\n totalPages: response.totalPages,\n currentPage: response.currentPage,\n itemsPerPage: response.limit,\n totalHits: response.totalHits,\n };\n\n return pagination;\n};\n\nexport const contentfulGqlLikePaginationAdapter = <T>(response: ContentfulGqlLikePaginated<T>) => {\n const totalPages = Math.max(Math.ceil(response.total / response.limit), 1); // If there are no items, there is still one page\n const currentPage = Math.max(Math.ceil(response.skip / response.limit) + 1, 1);\n\n const pagination: NormalizedPagination<T> = {\n items: response.items,\n totalPages,\n currentPage,\n itemsPerPage: response.limit,\n totalHits: response.total,\n };\n\n return pagination;\n};\n\nexport const fakePaginationAdapter = (totalHits = 10) => {\n return <T>(response: T) => {\n const pagination: NormalizedPagination<T> = {\n items: [response],\n totalPages: totalHits,\n currentPage: 1,\n itemsPerPage: 1,\n totalHits,\n };\n\n return pagination;\n };\n};\n\nexport type CreatePagedQueryStackOptions<\n TArgs extends QueryArgs,\n TNormPagination extends NormalizedPagination<unknown>,\n> = {\n /**\n * The normalizer function that will be used to normalize the response to a format that the paged query can understand.\n *\n * There are some built-in normalizers that can be used:\n * - `ethletePaginationAdapter`\n * - `ggLikePaginationAdapter`\n * - `dynLikePaginationAdapter`\n * - `contentfulGqlLikePaginationAdapter`\n * - `fakePaginationAdapter` (for testing purposes)\n *\n * @param currentResponse The current response that was fetched.\n * @param allResponses All responses that were fetched till now including the current response and pagination.\n */\n responseNormalizer: (\n currentResponse: ResponseType<TArgs>,\n allResponses: NonNullable<ResponseType<TArgs>>[],\n ) => TNormPagination;\n\n /**\n * The query creator function that will be used to create the paged query.\n */\n queryCreator: QueryCreator<TArgs>;\n\n /**\n * The arguments to create the query.\n * The current page will be passed as an argument.\n * This function can be treated like a computed function. It reacts to signal changes.\n * If a signal changes, the paged query will be reset to the initial page.\n *\n * @example (page) => ({ queryParams: { page, limit:20 } }),\n *\n * @param page The page to fetch next. **Do not modify this argument.**\n * @param allResponses All responses that were fetched till now including pagination.\n */\n args: (page: number, allResponses: NonNullable<ResponseType<TArgs>>[]) => RequestArgs<TArgs> | null;\n\n /**\n * The features that should be used for all queries in the stack.\n *\n * @throws If the `withArgs` feature is used. This feature is internally used.\n *\n * @example\n * // Due to limitations in TypeScript, you have to manually add the needed generic types if needed.\n * features: [E.withSuccessHandling<GetPostQueryArgs>({ handler: (post) => console.log(post.title) })]\n *\n * @example\n * // If typings are not needed, you can use the feature without generics.\n * features: [E.withPolling({ interval: 5000 })]\n */\n features?: QueryFeature<any>[];\n\n /**\n * The page to start this paged query from.\n * @default 1\n */\n initialPage?: number;\n\n /**\n * If true, no queries will be executed while the paged query is loading.\n * This is useful if you need the current response to be used in the next query.\n */\n blockExecutionDuringLoading?: boolean;\n};\n\nexport type PagedQueryStackResetOptions = {\n /**\n * The page to reset this paged query to.\n * This will clear everything and start from this page.\n * @default 1 // or the value passed in the `initialPage` option when creating the paged query.\n */\n initialPage?: number;\n};\n\nexport type PagedQueryStackExecuteOptions<TNormPagination extends NormalizedPagination<unknown>> = {\n /**\n * If provided, only the queries that match the condition will be executed.\n * This will also execute the previous and next query to the one that matched the condition.\n * If not provided, all queries will be executed.\n *\n * @example\n * myPagedQuery.execute({ where: (item) => item.id === 4 });\n */\n where?: (item: TNormPagination['items'][number], index: number, array: TNormPagination['items']) => boolean;\n\n /**\n * If true, the cache will be used (if not expired) and the request will not be made.\n * @default false\n */\n allowCache?: boolean;\n};\n\nexport type PagedQueryStackDirection = 'next' | 'previous';\n\nexport type AnyPagedQueryStack = PagedQueryStack<AnyNewQuery, NormalizedPagination<unknown>>;\n\nexport type PagedQueryStack<TQuery extends AnyNewQuery, TNormPagination extends NormalizedPagination<unknown>> = {\n /**\n * The pagination of the last executed query in the paged query.\n */\n maxPagination: Signal<TNormPagination | null>;\n\n /**\n * The pagination of the first executed query in the paged query.\n */\n minPagination: Signal<TNormPagination | null>;\n\n /**\n * Whether the last page of the paged query is loaded or not.\n */\n isLastPageLoaded: Signal<boolean>;\n\n /**\n * Whether the first page of the paged query is loaded or not.\n */\n isFirstPageLoaded: Signal<boolean>;\n\n /**\n * Fetches the previous page of the paged query.\n *\n * @throws If the paged query is already at the first page.\n */\n fetchPreviousPage: () => TQuery | null;\n\n /**\n * Fetches the next page of the paged query.\n *\n * @throws If the paged query is already at the last page.\n */\n fetchNextPage: () => TQuery | null;\n\n /**\n * Whether the previous page can be fetched or not.\n *\n * This will be false if the paged query is already at the first page or if the paged query is loading.\n */\n canFetchPreviousPage: Signal<boolean>;\n\n /**\n * Whether the next page can be fetched or not.\n *\n * This will be false if the paged query is already at the last page or if the paged query is loading.\n */\n canFetchNextPage: Signal<boolean>;\n\n /**\n * The items of the paged query.\n */\n items: Signal<TNormPagination['items']>;\n\n /**\n * Whether the paged query is loading or not.\n */\n loading: Signal<boolean>;\n\n /**\n * The error that occurred during the last execution of the paged query.\n */\n error: Signal<QueryErrorResponse | null>;\n\n /**\n * The last query executed in the paged query.\n */\n lastQuery: Signal<Query<QueryArgsOf<TQuery>> | null>;\n\n /**\n * Whether the paged query is on its first load or not.\n */\n isFirstLoad: Signal<boolean>;\n\n /**\n * The queries in the paged query stack.\n */\n queries: Signal<TQuery[]>;\n\n /**\n * Resets the paged query to the initial page.\n */\n reset: (resetOptions?: PagedQueryStackResetOptions) => void;\n\n /**\n * Executes the paged query.\n */\n execute: (options?: PagedQueryStackExecuteOptions<TNormPagination>) => void;\n\n /**\n * The current direction of the paged query.\n */\n direction: Signal<PagedQueryStackDirection>;\n};\n\nexport const createPagedQueryStack = <\n TCreator extends AnyQueryCreator,\n TArgs extends QueryArgsOf<TCreator>,\n TNormPagination extends NormalizedPagination<unknown>,\n>(\n options: CreatePagedQueryStackOptions<TArgs, TNormPagination>,\n) => {\n const { responseNormalizer, queryCreator, features } = options;\n\n const currentPageArgs = signal<RequestArgs<TArgs> | null>(null);\n const initialPage = signal(options.initialPage ?? 1);\n const loadedMinPage = signal(initialPage());\n const loadedMaxPage = signal(initialPage());\n const lastResetTimestamp = signal(Date.now());\n\n const pageDirection = signal<PagedQueryStackDirection>('next');\n\n const stack = createQueryStack({\n args: () => null,\n queryCreator,\n append: true,\n features,\n appendFn: (oldQueries, newQueries) => {\n const newQuery = newQueries[0];\n const dir = pageDirection();\n\n if (!newQuery) {\n const lastQuery = oldQueries[oldQueries.length - 1] ?? null;\n return { queries: oldQueries, lastQuery };\n } else if (dir === 'previous') {\n return { queries: [newQuery, ...oldQueries], lastQuery: newQuery };\n } else {\n return { queries: [...oldQueries, newQuery], lastQuery: newQuery };\n }\n },\n transform: transformArrayResponse,\n });\n\n effect(() => {\n lastResetTimestamp();\n\n const args = options.args(initialPage(), []);\n\n untracked(() => {\n stack.clear();\n currentPageArgs.set(args);\n loadedMinPage.set(initialPage());\n loadedMaxPage.set(initialPage());\n stack.subtle.runWithArgs(args);\n });\n });\n\n const maxPagination = computed(() => {\n const res = stack.lastQuery()?.response();\n const all = stack.response();\n\n if (!res) return null;\n\n return responseNormalizer(res, all);\n });\n\n const minPagination = computed(() => {\n const res = stack.firstQuery()?.response();\n const all = stack.response();\n\n if (!res) return null;\n\n return responseNormalizer(res, all);\n });\n\n const isFirstPageLoaded = computed(() => {\n const min = minPagination();\n\n return min ? loadedMinPage() === min.currentPage : false;\n });\n\n const isLastPageLoaded = computed(() => {\n const max = maxPagination();\n\n return max ? loadedMaxPage() === max.totalPages : false;\n });\n\n const fetchPreviousPage = () => {\n const page = loadedMinPage() - 1;\n const allResponses = stack.response();\n\n if (!canFetchNewPage(page)) {\n return null;\n }\n\n if (page < 1) {\n if (isDevMode()) {\n throw pagedQueryStackPreviousPageCalledButAlreadyAtFirstPage();\n }\n\n return null;\n }\n\n currentPageArgs.set(options.args(page, allResponses));\n loadedMinPage.set(page);\n pageDirection.set('previous');\n\n return stack.subtle.runWithArgs(currentPageArgs());\n };\n\n const fetchNextPage = () => {\n const page = loadedMaxPage() + 1;\n const currentPagination = maxPagination();\n const allResponses = stack.response();\n\n if (!canFetchNewPage(page)) {\n return null;\n }\n\n if (!currentPagination) {\n if (isDevMode()) {\n throw pagedQueryStackNextPageCalledWithoutPreviousPage();\n }\n\n return null;\n }\n\n if (page > currentPagination.totalPages) {\n if (isDevMode()) {\n throw pagedQueryStackPageBiggerThanTotalPages(page, currentPagination.totalPages);\n }\n\n return null;\n }\n\n currentPageArgs.set(options.args(page, allResponses));\n loadedMaxPage.set(page);\n pageDirection.set('next');\n\n return stack.subtle.runWithArgs(currentPageArgs());\n };\n\n const canFetchNewPage = (pageToLoad: number) => {\n const currentMaxPagination = maxPagination();\n const currentMinPagination = minPagination();\n\n if (!currentMaxPagination || !currentMinPagination) {\n return true;\n }\n\n const isOneMinusMinPagination = pageToLoad === currentMinPagination.currentPage - 1;\n const isOnePlusMaxPagination = pageToLoad === currentMaxPagination.currentPage + 1;\n\n if (!options.blockExecutionDuringLoading) {\n const totalQueries = stack.queries().length;\n const expectedQueries = Math.abs(loadedMaxPage() - loadedMinPage()) + 1;\n\n if (totalQueries !== expectedQueries) {\n if (isDevMode()) {\n throw queryStackTotalQueriesAndExpectedQueriesMismatch(totalQueries, expectedQueries);\n }\n }\n\n return true;\n }\n\n if (stack.anyLoading()) {\n return false;\n }\n\n return isOneMinusMinPagination || isOnePlusMaxPagination;\n };\n\n const reset = (resetOptions?: PagedQueryStackResetOptions) => {\n const page = resetOptions?.initialPage ?? initialPage();\n\n initialPage.set(page);\n pageDirection.set('next');\n lastResetTimestamp.set(Date.now());\n };\n\n const canFetchPreviousPage = computed(() => {\n const currentMinPagination = minPagination();\n\n if (!currentMinPagination) return false;\n\n return loadedMinPage() > 1;\n });\n const canFetchNextPage = computed(() => {\n const currentMaxPagination = maxPagination();\n\n return currentMaxPagination ? loadedMaxPage() < currentMaxPagination.totalPages : false;\n });\n\n const items = computed(() => {\n const res = stack.response();\n return res.map((r) => responseNormalizer(r, res).items).flat();\n });\n\n const isFirstLoad = computed(() => {\n return stack.queries().length === 1 && !!stack.lastQuery()?.loading();\n });\n\n const execute = (options?: PagedQueryStackExecuteOptions<TArgs>) => {\n const whereFn = options?.where;\n\n if (whereFn) {\n const queriesToExecute = new Set<Query<TArgs>>();\n const all = stack.response();\n\n for (const [index, query] of stack.queries().entries()) {\n const res = query.response();\n const err = query.error();\n const isErroredAndCanBeRetried = err && shouldRetryRequest(err.raw);\n\n if (isErroredAndCanBeRetried) {\n queriesToExecute.add(query);\n } else if (res) {\n if (responseNormalizer(res, all).items.some((item, i, a) => whereFn(item, i, a))) {\n queriesToExecute.add(query);\n\n // Also execute the previous and next query to the one that matched the condition.\n\n if (index !== 0) {\n const prevQuery = stack.queries()[index - 1];\n\n if (prevQuery) {\n queriesToExecute.add(prevQuery);\n }\n }\n\n if (index !== stack.queries().length - 1) {\n const nextQuery = stack.queries()[index + 1];\n\n if (nextQuery) {\n queriesToExecute.add(nextQuery);\n }\n }\n }\n }\n }\n\n for (const query of queriesToExecute) {\n query.execute({ options: { allowCache: options.allowCache } });\n }\n } else {\n stack.execute({ allowCache: options?.allowCache });\n }\n };\n\n const pagedQuery: PagedQueryStack<Query<TArgs>, TNormPagination> = {\n maxPagination,\n minPagination,\n fetchPreviousPage,\n fetchNextPage,\n canFetchPreviousPage,\n canFetchNextPage,\n items,\n direction: pageDirection.asReadonly(),\n loading: stack.anyLoading,\n error: stack.anyError,\n lastQuery: stack.lastQuery,\n isFirstLoad,\n queries: stack.queries,\n isLastPageLoaded,\n isFirstPageLoaded,\n reset,\n execute,\n };\n\n return pagedQuery;\n};\n","import { AuthProvider, AuthProviderCustomHeaderConfig } from './auth-provider.types';\n\nexport class CustomHeaderAuthProvider implements AuthProvider {\n get header() {\n return { [this._config.name]: this._config.value };\n }\n\n constructor(public _config: AuthProviderCustomHeaderConfig) {}\n\n cleanUp(): void {\n // noop\n }\n}\n","import { AuthProvider, AuthProviderBasicConfig } from './auth-provider.types';\n\nexport class BasicAuthProvider implements AuthProvider {\n get header() {\n return { Authorization: `Basic ${this._basicAuthString}` };\n }\n\n private get _basicAuthString() {\n return btoa(`${this._config.username}:${this._config.password}`);\n }\n\n constructor(public _config: AuthProviderBasicConfig) {}\n\n cleanUp(): void {\n // noop\n }\n}\n","import {\n CreateComputedOptions,\n Injector,\n Signal,\n assertInInjectionContext,\n computed,\n effect,\n inject,\n linkedSignal,\n runInInjectionContext,\n signal,\n untracked,\n} from '@angular/core';\nimport { ToObservableOptions, ToSignalOptions, toObservable, toSignal } from '@angular/core/rxjs-interop';\nimport { computedTillTruthy, createDestroy } from '@ethlete/core';\nimport { Observable, Subscribable, of, pairwise, startWith, switchMap, takeUntil, tap } from 'rxjs';\nimport { AnyLegacyQuery } from '../interop';\nimport {\n AnyQueryCollection,\n AnyV2Query,\n QueryOf,\n QueryStateType,\n V2QueryState,\n extractQuery,\n filterQueryStates,\n isQuery,\n isQueryStateFailure,\n isQueryStateLoading,\n isQueryStateSuccess,\n} from '../query';\nimport { QueryDataOf } from '../query-creator';\n\nexport type QueryContainerConfig = {\n /**\n * If `true`, the previous query will be aborted when a new query is pushed into the container.\n * @default true // Only if the request can be cached (GET, OPTIONS, HEAD and GQL_QUERY). Otherwise false.\n */\n abortPrevious?: boolean;\n\n /**\n * If `true`, the query will be aborted when the container is destroyed.\n * @default true // Only if the request can be cached (GET, OPTIONS, HEAD and GQL_QUERY). Otherwise false.\n */\n abortOnDestroy?: boolean;\n\n /**\n * If `true`, the previous polling will be stopped when a new query is pushed into the container.\n * @default true // Only if the query has no other dependents and the request can be cached (GET, OPTIONS, HEAD and GQL_QUERY). Otherwise false.\n */\n stopPreviousPolling?: boolean;\n};\n\nexport type QueryFilterConfig = {\n /**\n * If `true`, the response will be cached until the next response is received or the query fails.\n * @default false\n */\n cacheResponse?: boolean;\n};\n\nexport const addQueryContainerHandling = (\n obs: Observable<AnyV2Query | AnyV2Query[] | AnyLegacyQuery | AnyLegacyQuery[] | null>,\n valueFn: () => AnyV2Query | AnyV2Query[] | AnyLegacyQuery | AnyLegacyQuery[] | null | undefined,\n config?: QueryContainerConfig,\n) => {\n assertInInjectionContext(addQueryContainerHandling);\n\n const { abortPrevious, abortOnDestroy, stopPreviousPolling } = config ?? {};\n\n const injector = inject(Injector);\n const destroy$ = createDestroy();\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const tNode = (injector as any)._tNode;\n const componentId = tNode?.index ?? -1;\n\n obs\n .pipe(\n takeUntil(destroy$),\n startWith(null),\n pairwise(),\n tap(([prevQuery, currQuery]) => {\n const cleanQuery = (q: AnyV2Query | AnyLegacyQuery | null | undefined) => {\n if (!q?._hasDependents() && ((abortPrevious === undefined && q?.canBeCached) || abortPrevious)) {\n q?.abort();\n }\n\n if (\n !q?._hasDependents() &&\n ((stopPreviousPolling === undefined && q?.canBeCached) || stopPreviousPolling) &&\n q?.isPolling\n ) {\n q?.stopPolling();\n }\n\n (q as unknown as AnyLegacyQuery)?.destroy?.();\n };\n\n if ((isQuery(prevQuery) || prevQuery === null) && (isQuery(currQuery) || currQuery === null)) {\n prevQuery?._removeDependent(componentId);\n currQuery?._addDependent(componentId);\n\n cleanQuery(prevQuery);\n } else if (\n (Array.isArray(prevQuery) || prevQuery === null) &&\n (Array.isArray(currQuery) || currQuery === null)\n ) {\n if (prevQuery) {\n for (let i = 0; i < prevQuery.length; i++) {\n prevQuery[i]?._removeDependent(componentId);\n }\n }\n\n if (currQuery) {\n for (let i = 0; i < currQuery.length; i++) {\n currQuery[i]?._addDependent(componentId);\n }\n }\n\n if (prevQuery) {\n for (let i = 0; i < prevQuery.length; i++) {\n cleanQuery(prevQuery[i]);\n }\n }\n } else if (\n (isQuery(prevQuery) && Array.isArray(currQuery)) ||\n (Array.isArray(prevQuery) && isQuery(currQuery))\n ) {\n throw new Error('Cannot mix queries and arrays of queries in the same query container.');\n }\n }),\n )\n .subscribe();\n\n destroy$.subscribe(() => {\n const query = valueFn();\n\n const handleQuery = (q: AnyV2Query | AnyLegacyQuery | null | undefined) => {\n q?._removeDependent(componentId);\n\n if (!q?._hasDependents() && ((q?.canBeCached && abortOnDestroy === undefined) || abortOnDestroy)) {\n q?.abort();\n (q as unknown as AnyLegacyQuery)?.destroy?.();\n }\n };\n\n if (isQuery(query)) {\n handleQuery(query);\n } else if (Array.isArray(query)) {\n for (const q of query) {\n handleQuery(q);\n }\n }\n });\n};\n\nexport function toQuerySignal<T extends AnyV2Query | AnyLegacyQuery | null>(\n source: Observable<T> | Subscribable<T>,\n): Signal<T | undefined>;\nexport function toQuerySignal<T extends AnyV2Query | AnyLegacyQuery | null>(\n source: Observable<T> | Subscribable<T>,\n options: NoInfer<ToSignalOptions<T | undefined>> & {\n initialValue?: undefined;\n requireSync?: false;\n } & QueryContainerConfig,\n): Signal<T | undefined>;\nexport function toQuerySignal<T extends AnyV2Query | AnyLegacyQuery | null>(\n source: Observable<T> | Subscribable<T>,\n options: NoInfer<ToSignalOptions<T | null>> & {\n initialValue?: null;\n requireSync?: false;\n } & QueryContainerConfig,\n): Signal<T | null>;\nexport function toQuerySignal<T extends AnyV2Query | AnyLegacyQuery | null>(\n source: Observable<T> | Subscribable<T>,\n options: NoInfer<ToSignalOptions<T>> & {\n initialValue?: undefined;\n requireSync: true;\n } & QueryContainerConfig,\n): Signal<T>;\nexport function toQuerySignal<T extends AnyV2Query | AnyLegacyQuery | null, const U extends T>(\n source: Observable<T> | Subscribable<T>,\n options: NoInfer<ToSignalOptions<T | U>> & {\n initialValue: U;\n requireSync?: false;\n } & QueryContainerConfig,\n): Signal<T | U>;\n\nexport function toQuerySignal<T extends AnyV2Query | AnyLegacyQuery | null, U = undefined>(\n source: Observable<T> | Subscribable<T>,\n options?: ToSignalOptions<T | U> & { initialValue?: U } & QueryContainerConfig,\n): Signal<T | U> {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const s = toSignal(source, options as any);\n\n addQueryContainerHandling(source as Observable<T>, () => s() as T, options);\n\n return s as Signal<T | U>;\n}\n\nexport function effectComputed<T extends AnyV2Query | AnyLegacyQuery | AnyV2Query[] | AnyLegacyQuery[] | null>(\n computation: () => T,\n injector: Injector,\n) {\n let initialData = null;\n\n try {\n initialData = runInInjectionContext(injector, () => computation());\n } catch {\n // Ignore errors in the initial computation\n // Angular might throw an error if required inputs are read but not available yet\n }\n\n const lastResult = signal<T>(initialData as T);\n\n effect(() => {\n const data = runInInjectionContext(injector, () => computation());\n\n untracked(() => {\n if (data === lastResult()) return;\n\n lastResult.set(data);\n });\n });\n\n return lastResult.asReadonly();\n}\n\nexport function queryComputed<T extends AnyV2Query | AnyLegacyQuery | null>(\n computation: () => T,\n options?: CreateComputedOptions<T> & QueryContainerConfig & ToObservableOptions,\n): Signal<T> {\n const injector = inject(Injector);\n\n const c = effectComputed(computation, injector);\n const obs = toObservable(c, options);\n\n addQueryContainerHandling(obs, () => c(), options);\n\n return c;\n}\n\n/**\n * Creates a signal that will only be reactive until the first query is created.\n * All subsequent changes inside the computation will be ignored.\n */\nexport function queryComputedTillTruthy<T extends AnyV2Query | AnyLegacyQuery | null>(\n computation: () => T,\n options?: CreateComputedOptions<T> & QueryContainerConfig & ToObservableOptions,\n): Signal<T | null> {\n const injector = inject(Injector);\n\n const c = computedTillTruthy(effectComputed(computation, injector));\n const obs = toObservable(c, options);\n\n addQueryContainerHandling(obs, () => c(), options);\n\n return c;\n}\n\nexport function queryArrayComputed<T extends AnyV2Query[] | AnyLegacyQuery[] | null>(\n computation: () => T,\n options?: CreateComputedOptions<T> & QueryContainerConfig & ToObservableOptions,\n): Signal<T> {\n const injector = inject(Injector);\n\n const c = effectComputed(computation, injector);\n const obs = toObservable(c, options);\n\n addQueryContainerHandling(obs, () => c(), options);\n\n return c;\n}\n\nexport function toQuerySubject<T extends AnyV2Query | AnyLegacyQuery | null>(\n source: Signal<T>,\n options?: ToObservableOptions & QueryContainerConfig,\n): Observable<T> {\n const obs = toObservable(source, options);\n\n addQueryContainerHandling(obs, () => source(), options);\n\n return obs;\n}\n\nexport function queryStateSignal<T extends Signal<AnyV2Query | AnyLegacyQuery | AnyQueryCollection | null>>(\n source: T,\n options?: QueryFilterConfig,\n) {\n const { cacheResponse } = options ?? {};\n\n const roSignal = toSignal(\n toObservable(source).pipe(\n switchMap((q) => extractQuery(q)?.state$ ?? of(null)),\n switchMap((state) => {\n if (cacheResponse) {\n return of(state).pipe(filterQueryStates([QueryStateType.Success, QueryStateType.Failure]));\n }\n\n return of(state);\n }),\n ),\n {\n initialValue: null,\n },\n ) as Signal<V2QueryState<QueryDataOf<QueryOf<ReturnType<T>>>> | null>;\n\n const rwSignal = linkedSignal<V2QueryState<QueryDataOf<QueryOf<ReturnType<T>>>> | null>(roSignal);\n\n return rwSignal;\n}\n\nexport type QueryStateSignal<T extends Signal<AnyV2Query | AnyLegacyQuery | AnyQueryCollection | null>> =\n Signal<QueryDataOf<QueryOf<ReturnType<T>>> | null> & { reset: () => void };\n\nexport function queryStateResponseSignal<T extends Signal<AnyV2Query | AnyLegacyQuery | AnyQueryCollection | null>>(\n source: T,\n options?: QueryFilterConfig,\n) {\n const s = queryStateSignal(source, options);\n\n const dataSignal = computed(() => {\n const state = s();\n\n return isQueryStateSuccess(state) ? state.response : null;\n });\n\n (dataSignal as QueryStateSignal<T>)['reset'] = () => {\n s.set(null);\n };\n\n return dataSignal as QueryStateSignal<T>;\n}\n\nexport function queryStateErrorSignal<T extends Signal<AnyV2Query | AnyLegacyQuery | AnyQueryCollection | null>>(\n source: T,\n) {\n const s = queryStateSignal(source);\n\n return computed(() => {\n const state = s();\n\n return isQueryStateFailure(state) ? state.error : null;\n });\n}\n\nexport function queryStateLoadingSignal<T extends Signal<AnyV2Query | AnyLegacyQuery | AnyQueryCollection | null>>(\n source: T,\n) {\n const s = queryStateSignal(source);\n\n return computed(() => {\n const state = s();\n\n return isQueryStateLoading(state) ? state : null;\n });\n}\n","export const deepFreeze = <T extends Record<string, unknown>>(object: T) => {\n // check if object is actually an object or frozen\n if (!object || typeof object !== 'object' || Object.isFrozen(object)) {\n return object;\n }\n\n // Retrieve the property names defined on object\n const propNames = Object.getOwnPropertyNames(object);\n\n // Freeze properties before freezing self\n\n for (const name of propNames) {\n const value = object[name];\n\n if (value && typeof value === 'object') {\n deepFreeze(value as T);\n }\n }\n\n return Object.freeze(object);\n};\n","/**\n * Dummy function for providing types while not breaking inference.\n * **This function always returns null.**\n * @see https://github.com/microsoft/TypeScript/issues/26242\n * @returns null\n */\nexport const def = <Data>() => null as unknown as Data;\n","import { assertInInjectionContext, signal } from '@angular/core';\nimport { toObservable } from '@angular/core/rxjs-interop';\nimport { BehaviorSubject } from 'rxjs';\nimport { EntityStore } from '../entity';\nimport { V2Query, computeQueryQueryParams } from '../query';\nimport { V2QueryClient, v2BuildQueryCacheKey, v2ShouldCacheQuery } from '../query-client';\nimport { QueryStore } from '../query-store';\nimport {\n AnyRoute,\n BaseArguments,\n GqlQueryConfig,\n RestQueryConfig,\n V2RouteType,\n WithConfig,\n WithHeaders,\n WithMock,\n} from '../query/query.types';\nimport { buildRoute } from '../request';\nimport { QueryContainerConfig, addQueryContainerHandling } from '../utils';\nimport { QueryPrepareFn } from './query-creator.types';\n\nexport class V2QueryCreator<\n Arguments extends BaseArguments | undefined,\n Response,\n Route extends V2RouteType<Arguments>,\n Store extends EntityStore<unknown>,\n Data,\n Id,\n> {\n constructor(\n private _queryConfig:\n | RestQueryConfig<Route, Response, Arguments, Store, Data, Id>\n | GqlQueryConfig<Route, Response, Arguments, Store, Data, Id>,\n private _client: V2QueryClient,\n private _store: QueryStore,\n ) {}\n\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n prepare: QueryPrepareFn<Arguments, Response, Route, Store, Data, Id> = (\n args?: Arguments & WithHeaders & WithConfig & WithMock<Response>,\n ) => {\n const route = buildRoute({\n base: this._client.config.baseRoute,\n route: this._queryConfig.route as AnyRoute,\n pathParams: args?.pathParams,\n queryParams: computeQueryQueryParams({ config: this._queryConfig, client: this._client, args }),\n queryParamConfig: this._client.config.request?.queryParams,\n }) as Route;\n\n const cacheKey = (args?.config?.queryStoreCacheKey ?? '') + v2BuildQueryCacheKey(route as string, args);\n\n if (v2ShouldCacheQuery(this._queryConfig.method) && !args?.config?.skipQueryStore) {\n const existingQuery = this._store.get<V2Query<Response, Arguments, Route, Store, Data, Id>>(cacheKey);\n\n if (existingQuery) {\n return existingQuery;\n }\n }\n\n const query = new V2Query<Response, Arguments, Route, Store, Data, Id>(\n this._client,\n this._queryConfig,\n route,\n args ?? ({} as Arguments),\n cacheKey,\n );\n\n if (v2ShouldCacheQuery(this._queryConfig.method) && !args?.config?.skipQueryStore) {\n this._store.add(cacheKey, query);\n }\n\n this._store._dispatchQueryCreated(query);\n\n return query;\n };\n\n createSubject = (initialValue?: ReturnType<typeof this.prepare> | null, config?: QueryContainerConfig) => {\n assertInInjectionContext(this.createSubject);\n\n const subject = new BehaviorSubject<ReturnType<typeof this.prepare> | null>(initialValue ?? null);\n\n addQueryContainerHandling(subject, () => subject.getValue(), config);\n\n return subject;\n };\n\n createSignal = (initialValue?: ReturnType<typeof this.prepare> | null, config?: QueryContainerConfig) => {\n assertInInjectionContext(this.createSignal);\n\n const _signal = signal<ReturnType<typeof this.prepare> | null>(initialValue ?? null);\n\n addQueryContainerHandling(toObservable(_signal), () => _signal(), config);\n\n return _signal;\n };\n\n behaviorSubject = (initialValue?: ReturnType<typeof this.prepare> | null) =>\n new BehaviorSubject<ReturnType<typeof this.prepare> | null>(initialValue ?? null);\n}\n","import { Subject, fromEvent, take, takeUntil, timer } from 'rxjs';\nimport { AnyV2Query } from '../query';\n\nexport class QueryStore {\n /**\n * @internal\n */\n readonly _store = new Map<string, AnyV2Query>();\n\n private _garbageCollector: number | null = null;\n private _isInLowResourceMode = false;\n private _lastBlurTimestamp = Date.now();\n\n private _storeChange$ = new Subject<string>();\n private _queryCreated$ = new Subject<AnyV2Query>();\n\n readonly storeChange$ = this._storeChange$.asObservable();\n readonly queryCreated$ = this._queryCreated$.asObservable();\n\n constructor(\n private _config?: {\n enableChangeLogging?: boolean;\n enableGarbageCollectorLogging?: boolean;\n autoRefreshQueriesOnWindowFocus?: boolean;\n enableSmartPolling?: boolean;\n },\n ) {\n this._initSmartQueryHandling();\n }\n\n add(id: string, query: AnyV2Query) {\n this._store.set(id, query);\n\n this._initGarbageCollector();\n\n this._logState(id, query, 'SET');\n\n this._storeChange$.next(id);\n }\n\n get<T extends AnyV2Query>(id: string): T | null {\n return (this._store.get(id) as T) ?? null;\n }\n\n remove(id: string) {\n this._store.delete(id);\n\n this._logState(id, null, 'REMOVE');\n\n this._storeChange$.next(id);\n }\n\n forEach(callback: (value: AnyV2Query, key: string) => void) {\n for (const [key, query] of this._store) {\n callback(query, key);\n }\n }\n\n refreshQueriesInUse(config?: { ignoreCacheValidity?: boolean; purgeUnused?: boolean }) {\n const { ignoreCacheValidity, purgeUnused } = config ?? {};\n\n for (const [key, query] of this._store) {\n if (\n query.isInUse &&\n (query.isExpired || ignoreCacheValidity) &&\n query.autoRefreshOnConfig.queryClientDefaultHeadersChange\n ) {\n query.execute({ skipCache: true, _triggeredVia: 'auto' });\n } else if (purgeUnused && !query.isInUse) {\n this.remove(key);\n }\n }\n }\n\n /**\n * @internal\n */\n _dispatchQueryCreated(query: AnyV2Query) {\n this._queryCreated$.next(query);\n }\n\n private _initSmartQueryHandling() {\n const windowBlur$ = fromEvent<Event>(window, 'blur');\n const windowFocus$ = fromEvent<Event>(window, 'focus');\n\n windowBlur$.subscribe(() => {\n timer(5000)\n .pipe(takeUntil(windowFocus$), take(1))\n .subscribe(() => {\n this._lastBlurTimestamp = Date.now();\n this._isInLowResourceMode = true;\n this._stopGarbageCollector();\n\n if (this._config?.enableSmartPolling) {\n this.forEach((query) => {\n if (!query.isPolling || !query._enableSmartPolling) {\n return;\n }\n\n query.pausePolling();\n });\n }\n });\n });\n\n windowFocus$.subscribe(() => {\n if (!this._isInLowResourceMode) {\n return;\n }\n\n this._isInLowResourceMode = false;\n\n if (this._config?.enableSmartPolling || this._config?.autoRefreshQueriesOnWindowFocus) {\n this.forEach((query) => {\n if (this._config?.enableSmartPolling && query._isPollingPaused) {\n query.resumePolling();\n }\n\n if (Date.now() - this._lastBlurTimestamp > 15000) {\n if (\n this._config?.autoRefreshQueriesOnWindowFocus &&\n query.isExpired &&\n query.isInUse &&\n query.autoRefreshOnConfig.windowFocus\n ) {\n query.execute({ skipCache: true, _triggeredVia: 'auto' });\n }\n }\n });\n }\n\n this._initGarbageCollector();\n });\n }\n\n private _logState(key: string | null, item: AnyV2Query | null, operation: string) {\n if (!this._config?.enableChangeLogging) return;\n\n const stateAsJson: Record<string, AnyV2Query> = {};\n\n this._store.forEach((value, key) => {\n stateAsJson[key] = value;\n });\n\n console.log(`%c[${operation}] ${key}`, 'font-weight: bold');\n\n console.log({ operation, key, item });\n console.log(stateAsJson);\n }\n\n private _initGarbageCollector() {\n if (this._garbageCollector !== null) {\n return;\n }\n\n this._logGarbageCollector('Start');\n\n this._garbageCollector = window.setInterval(() => {\n this._runGarbageCollector();\n }, 15000);\n }\n\n private _stopGarbageCollector() {\n if (this._garbageCollector !== null) {\n window.clearInterval(this._garbageCollector);\n this._garbageCollector = null;\n this._logGarbageCollector('Stop');\n }\n }\n\n private _runGarbageCollector() {\n this._logGarbageCollector('Collecting...');\n\n this._store.forEach((item, key) => {\n if (item.isExpired && !item.isInUse) {\n this.remove(key);\n }\n });\n\n this._logGarbageCollector('Collection done');\n\n if (!this._store.size) {\n this._stopGarbageCollector();\n }\n }\n\n private _logGarbageCollector(action: string) {\n if (!this._config?.enableGarbageCollectorLogging) return;\n\n console.log(`%cGC: ${action}`, 'color: yellow; font-weight: bold');\n }\n}\n","import { BehaviorSubject } from 'rxjs';\nimport { AuthProvider } from '../auth';\nimport { EntityStore } from '../entity';\nimport {\n BaseArguments,\n GqlQueryConfig,\n GqlQueryConfigWithoutMethod,\n QueryConfigWithoutMethod,\n RestQueryConfig,\n V2RouteType,\n} from '../query';\nimport { V2QueryCreator } from '../query-creator';\nimport { QueryStore } from '../query-store';\nimport { RequestHeaders, RequestHeadersMethodMap } from '../request';\nimport { V2QueryClientConfig } from './query-client.types';\n\nexport class V2QueryClient {\n /**\n * @internal\n */\n readonly _store: QueryStore;\n\n get config() {\n return this._clientConfig;\n }\n\n get authProvider() {\n return this._authProvider$.getValue() ?? this._clientConfig.parent?._authProvider$.getValue() ?? null;\n }\n get authProvider$() {\n return this._authProvider$.asObservable() ?? this._clientConfig.parent?._authProvider$.asObservable() ?? null;\n }\n private readonly _authProvider$ = new BehaviorSubject<AuthProvider | null>(null);\n\n constructor(private _clientConfig: V2QueryClientConfig) {\n this._store = new QueryStore({\n enableChangeLogging: _clientConfig.logging?.queryStateChanges,\n enableGarbageCollectorLogging: _clientConfig.logging?.queryStateGarbageCollector,\n autoRefreshQueriesOnWindowFocus: _clientConfig.request?.autoRefreshQueriesOnWindowFocus ?? true,\n enableSmartPolling: _clientConfig.request?.enableSmartPolling ?? true,\n });\n }\n\n get = <\n Route extends V2RouteType<Arguments>,\n Response,\n Id,\n Data = Response,\n Arguments extends BaseArguments | undefined = undefined,\n Store extends EntityStore<unknown> = EntityStore<unknown>,\n >(\n queryConfig: QueryConfigWithoutMethod<Route, Response, Arguments, Store, Data, Id>,\n ) =>\n this.fetch<Route, Response, Arguments, Id, Store, Data>({\n ...queryConfig,\n method: 'GET',\n });\n\n post = <\n Route extends V2RouteType<Arguments>,\n Response,\n Id,\n Data = Response,\n Arguments extends BaseArguments | undefined = undefined,\n Store extends EntityStore<unknown> = EntityStore<unknown>,\n >(\n queryConfig: QueryConfigWithoutMethod<Route, Response, Arguments, Store, Data, Id>,\n ) =>\n this.fetch<Route, Response, Arguments, Id, Store, Data>({\n ...queryConfig,\n method: 'POST',\n });\n\n put = <\n Route extends V2RouteType<Arguments>,\n Response,\n Id,\n Data = Response,\n Arguments extends BaseArguments | undefined = undefined,\n Store extends EntityStore<unknown> = EntityStore<unknown>,\n >(\n queryConfig: QueryConfigWithoutMethod<Route, Response, Arguments, Store, Data, Id>,\n ) =>\n this.fetch<Route, Response, Arguments, Id, Store, Data>({\n ...queryConfig,\n method: 'PUT',\n });\n\n patch = <\n Route extends V2RouteType<Arguments>,\n Response,\n Id,\n Data = Response,\n Arguments extends BaseArguments | undefined = undefined,\n Store extends EntityStore<unknown> = EntityStore<unknown>,\n >(\n queryConfig: QueryConfigWithoutMethod<Route, Response, Arguments, Store, Data, Id>,\n ) =>\n this.fetch<Route, Response, Arguments, Id, Store, Data>({\n ...queryConfig,\n method: 'PATCH',\n });\n\n delete = <\n Route extends V2RouteType<Arguments>,\n Response,\n Id,\n Data = Response,\n Arguments extends BaseArguments | undefined = undefined,\n Store extends EntityStore<unknown> = EntityStore<unknown>,\n >(\n queryConfig: QueryConfigWithoutMethod<Route, Response, Arguments, Store, Data, Id>,\n ) =>\n this.fetch<Route, Response, Arguments, Id, Store, Data>({\n ...queryConfig,\n method: 'DELETE',\n });\n\n gqlQuery = <\n Route extends V2RouteType<Arguments>,\n Response,\n Id,\n Data = Response,\n Arguments extends BaseArguments | undefined = undefined,\n Store extends EntityStore<unknown> = EntityStore<unknown>,\n >(\n queryConfig: GqlQueryConfigWithoutMethod<Route, Response, Arguments, Store, Data, Id>,\n ) =>\n this.fetch<Route, Response, Arguments, Id, Store, Data>({\n ...queryConfig,\n method: 'GQL_QUERY',\n });\n\n gqlMutate = <\n Route extends V2RouteType<Arguments>,\n Response,\n Id,\n Data = Response,\n Arguments extends BaseArguments | undefined = undefined,\n Store extends EntityStore<unknown> = EntityStore<unknown>,\n >(\n queryConfig: GqlQueryConfigWithoutMethod<Route, Response, Arguments, Store, Data, Id>,\n ) =>\n this.fetch<Route, Response, Arguments, Id, Store, Data>({\n ...queryConfig,\n method: 'GQL_MUTATE',\n });\n\n fetch = <\n Route extends V2RouteType<Arguments>,\n Response,\n Arguments extends BaseArguments | undefined,\n Id,\n Store extends EntityStore<unknown> = EntityStore<unknown>,\n Data = Response,\n >(\n queryConfig:\n | RestQueryConfig<Route, Response, Arguments, Store, Data, Id>\n | GqlQueryConfig<Route, Response, Arguments, Store, Data, Id>,\n ) => new V2QueryCreator<Arguments, Response, Route, Store, Data, Id>(queryConfig, this, this._store);\n\n setAuthProvider = (authProvider: AuthProvider) => {\n if (this.authProvider) {\n this.authProvider?.cleanUp();\n }\n\n this._authProvider$.next(authProvider);\n };\n\n setDefaultHeaders = (config: {\n headers: RequestHeaders | RequestHeadersMethodMap | null;\n refreshQueriesInUse?: boolean;\n }) => {\n if (!this._clientConfig.request) {\n this._clientConfig.request = {\n headers: config.headers ?? undefined,\n };\n } else {\n this._clientConfig.request.headers = config.headers ?? undefined;\n }\n\n if (config.refreshQueriesInUse) {\n this._store.refreshQueriesInUse({ purgeUnused: true, ignoreCacheValidity: true });\n }\n };\n\n clearAuthProvider = () => {\n this.authProvider?.cleanUp();\n this._authProvider$.next(null);\n };\n\n _updateBaseRoute = (route: string) => {\n this._clientConfig.baseRoute = route;\n };\n}\n","import { BaseArguments } from '../query/query.types';\nimport { Method } from '../request';\n\nexport const v2ShouldCacheQuery = (method: Method) => {\n return method === 'GET' || method === 'OPTIONS' || method === 'HEAD' || method === 'GQL_QUERY';\n};\n\nexport const v2BuildQueryCacheKey = (route: string, args: BaseArguments | undefined) => {\n const variables = JSON.stringify(args?.variables || {})\n // replace all curly braces with empty string\n .replace(/{|}/g, '')\n // replace new lines and whitespaces with empty string\n .replace(/\\s/g, '');\n\n const seed = `${route}...${variables}`;\n\n let hash = 0;\n\n for (const char of seed) {\n hash = (Math.imul(31, hash) + char.charCodeAt(0)) << 0;\n }\n\n // Force positive number hash.\n // 2147483647 = equivalent of Integer.MAX_VALUE.\n hash += 2147483647 + 1;\n\n return hash.toString();\n};\n","import {\n AnyCreateQueryClientResult,\n createBaseQueryCreator,\n CreateQueryCreatorOptions,\n gqlDataPropertyMissingInResponse,\n QueryCreator,\n RouteType,\n} from '../http';\nimport { createGqlQuery, GqlQueryArgs } from './gql-query';\n\nexport type CreateGqlQueryCreatorOptions<TArgs extends GqlQueryArgs> = Omit<\n CreateQueryCreatorOptions<TArgs>,\n 'route' | 'transformResponse'\n> & {\n route?: RouteType<TArgs>;\n\n /**\n * Optional custom transform function for GQL responses.\n * If not provided, the default { data: ... } unwrapping will be used.\n */\n transformResponse?: CreateQueryCreatorOptions<TArgs>['transformResponse'];\n};\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport type AnyCreateGqlQueryCreatorOptions = CreateGqlQueryCreatorOptions<any>;\n\nexport type GqlQueryMethod = 'QUERY' | 'MUTATE';\nexport type GqlQueryTransport = 'GET' | 'POST';\n\nexport type InternalCreateGqlQueryCreatorOptions = {\n method: GqlQueryMethod;\n transport: GqlQueryTransport;\n client: AnyCreateQueryClientResult;\n query: string;\n};\n\nexport const createGqlQueryCreator = <TArgs extends GqlQueryArgs>(\n options: CreateGqlQueryCreatorOptions<TArgs> | undefined,\n internals: InternalCreateGqlQueryCreatorOptions,\n): QueryCreator<TArgs> =>\n createBaseQueryCreator({\n options: {\n ...options,\n // Use custom transformResponse if provided, otherwise use default GQL unwrapping\n transformResponse:\n options?.transformResponse ??\n ((rawResponse: unknown) => {\n if (rawResponse && typeof rawResponse === 'object' && 'data' in rawResponse) {\n return (rawResponse as { data: unknown }).data;\n }\n\n throw gqlDataPropertyMissingInResponse();\n }),\n } as CreateQueryCreatorOptions<TArgs>,\n internals,\n queryFactory: createGqlQuery,\n });\n","import { HttpHeaders } from '@angular/common/http';\nimport { toObservable } from '@angular/core/rxjs-interop';\nimport { filter, of, Subscription, switchMap, take, tap } from 'rxjs';\nimport { AnyBearerAuthProvider } from '../auth';\nimport { AnyQuerySnapshot, QueryArgs, RequestArgs } from './query';\nimport { QueryDependencies } from './query-dependencies';\nimport { invalidStateInsideSecureExecuteFactory, tokensNotAvailableInsideAuthAndExec } from './query-errors';\nimport { InternalQueryExecute, QueryExecuteArgs } from './query-execute';\nimport { circularQueryDependencyChecker, resetExecuteState, setupQueryExecuteState } from './query-execute-utils';\nimport { QueryState } from './query-state';\n\nconst AUTH_HEADER = 'Authorization';\n\nexport type SecureExecuteFactoryOptions<TArgs extends QueryArgs> = {\n authProvider: AnyBearerAuthProvider;\n deps: QueryDependencies;\n state: QueryState<TArgs>;\n transformAuthAndExec: (\n executeArgs: QueryExecuteArgs<TArgs> | undefined,\n tokens: { accessToken: string },\n headers: HttpHeaders,\n executeState: ReturnType<typeof setupQueryExecuteState>,\n ) => void;\n};\n\nexport const createSecureExecuteFactory = <TArgs extends QueryArgs>(\n options: SecureExecuteFactoryOptions<TArgs>,\n): InternalQueryExecute<TArgs> => {\n const executeState = setupQueryExecuteState();\n const circularChecker = circularQueryDependencyChecker();\n\n let authQuerySubscription = Subscription.EMPTY;\n let tokenRefreshSubscription = Subscription.EMPTY;\n\n const reset = () => {\n authQuerySubscription.unsubscribe();\n authQuerySubscription = Subscription.EMPTY;\n tokenRefreshSubscription.unsubscribe();\n tokenRefreshSubscription = Subscription.EMPTY;\n resetExecuteState({\n executeState,\n executeOptions: { deps: options.deps, state: options.state },\n });\n };\n\n const error = (query: AnyQuerySnapshot) => {\n const state = options.state;\n\n state.error.set(query.error());\n state.loading.set(null);\n state.rawResponse.set(null);\n state.latestHttpEvent.set(null);\n state.args.set(null);\n };\n\n const authAndExec = (executeArgs?: QueryExecuteArgs<TArgs>) => {\n const args = executeArgs?.args;\n\n const headerProvider = () => {\n const accessToken = options.authProvider.accessToken();\n const baseHeaders = typeof args?.headers === 'function' ? args.headers() : args?.headers || new HttpHeaders();\n\n if (!accessToken) {\n throw tokensNotAvailableInsideAuthAndExec();\n }\n\n if (!baseHeaders.has(AUTH_HEADER)) {\n return baseHeaders.set(AUTH_HEADER, `Bearer ${accessToken}`);\n }\n\n return baseHeaders;\n };\n\n const accessToken = options.authProvider.accessToken();\n if (!accessToken) {\n throw tokensNotAvailableInsideAuthAndExec();\n }\n\n const tokens = { accessToken, refreshToken: options.authProvider.refreshToken() ?? '' };\n const headers = headerProvider();\n\n options.transformAuthAndExec(\n {\n ...executeArgs,\n args: {\n ...(args ?? {}),\n headers: headerProvider, // Pass header provider instead of static headers\n } as RequestArgs<TArgs>,\n },\n tokens,\n headers,\n executeState,\n );\n };\n\n const exec = (executeArgs?: QueryExecuteArgs<TArgs>) => {\n circularChecker.check();\n\n // Make sure all effects are flushed before reading the args.\n // A withArgs feature effect might still be pending otherwise resulting in the wrong args being read.\n options.deps.effectScheduler.flush();\n\n const execArgsWithDefaults: QueryExecuteArgs<TArgs> = {\n args: executeArgs?.args ?? options.state.args(),\n options: executeArgs?.options,\n };\n\n authQuerySubscription.unsubscribe();\n authQuerySubscription = Subscription.EMPTY;\n tokenRefreshSubscription.unsubscribe();\n tokenRefreshSubscription = Subscription.EMPTY;\n\n tokenRefreshSubscription = options.authProvider.afterTokenRefresh$\n .pipe(\n filter(() => {\n const currentError = options.state.error();\n return currentError?.code === 401;\n }),\n take(1),\n tap(() => exec(execArgsWithDefaults)),\n )\n .subscribe();\n\n const latestQuery = options.authProvider.latestExecutedQuery();\n const authQuery = latestQuery?.snapshot;\n\n // This might happen if a secure query gets executed while the auth query has just been created.\n // This is due to the fact that the query state is being synced with the state inside the http request using effect.\n const isAuthQueryFreshlyExecuted = authQuery?.lastTimeExecutedAt() === null;\n\n if (!authQuery || authQuery.loading() || isAuthQueryFreshlyExecuted) {\n options.state.loading.set({ executeTime: Date.now(), progress: null });\n\n authQuerySubscription = toObservable(options.authProvider.latestExecutedQuery, {\n injector: options.deps.injector,\n })\n .pipe(\n switchMap((latestQuery) => {\n if (!latestQuery) return of(null);\n const query = latestQuery.snapshot;\n\n return toObservable(query.isAlive, { injector: options.deps.injector }).pipe(\n tap((isAlive) => {\n if (isAlive) return;\n\n if (query.error()) {\n error(query);\n } else if (query.response()) {\n authAndExec(execArgsWithDefaults);\n }\n }),\n );\n }),\n )\n .subscribe();\n } else if (authQuery.response()) {\n authAndExec(execArgsWithDefaults);\n } else if (authQuery.error()) {\n error(authQuery);\n } else {\n throw invalidStateInsideSecureExecuteFactory();\n }\n };\n\n exec['reset'] = reset;\n exec['currentRepositoryKey'] = executeState.previousKey.asReadonly();\n\n return exec;\n};\n","import {\n CreateQueryExecuteOptions,\n InternalQueryExecute,\n QueryConfig,\n QueryDependencies,\n queryExecute,\n QueryState,\n RequestArgs,\n RouteType,\n} from '../http';\nimport { createSecureExecuteFactory } from '../http/secure-query-execute-factory';\nimport { GqlQueryArgs } from './gql-query';\nimport { AnyCreateGqlQueryCreatorOptions } from './gql-query-creator';\nimport { transformGql } from './gql-transformer';\nimport { InternalSecureCreateGqlQueryCreatorOptions } from './secure-gql-query-creator';\n\nexport type CreateSecureGqlQueryExecuteOptions<TArgs extends GqlQueryArgs> = {\n deps: QueryDependencies;\n state: QueryState<TArgs>;\n creator?: AnyCreateGqlQueryCreatorOptions;\n creatorInternals: InternalSecureCreateGqlQueryCreatorOptions;\n queryConfig: QueryConfig;\n};\n\nexport const createSecureGqlExecuteFn = <TArgs extends GqlQueryArgs>(\n executeOptions: CreateSecureGqlQueryExecuteOptions<TArgs>,\n): InternalQueryExecute<TArgs> => {\n const [, injectAuthProvider] = executeOptions.creatorInternals.authProvider;\n const authProvider = injectAuthProvider();\n\n return createSecureExecuteFactory({\n authProvider,\n deps: executeOptions.deps,\n state: executeOptions.state,\n transformAuthAndExec: (executeArgs, _tokens, headers, executeState) => {\n const { args, options: runOptions } = executeArgs ?? {};\n\n const query = transformGql(executeOptions.creatorInternals.query);\n let gqlParams = query(args?.variables);\n\n if (args?.queryParams && executeOptions.creatorInternals.transport === 'GET') {\n gqlParams = { ...gqlParams, ...args.queryParams };\n }\n\n const computedArgs = { ...(args ?? ({} as RequestArgs<TArgs>)), headers };\n\n if (executeOptions.creatorInternals.transport === 'GET') {\n computedArgs.queryParams = gqlParams;\n } else {\n computedArgs.body = gqlParams;\n }\n\n const normalizedOpts: CreateQueryExecuteOptions<TArgs> = {\n ...executeOptions,\n creatorInternals: {\n client: executeOptions.creatorInternals.client,\n method: executeOptions.creatorInternals.method === 'QUERY' ? 'GET' : 'POST',\n route: (executeOptions.creator?.route ?? '') as RouteType<TArgs>,\n },\n };\n\n queryExecute({\n executeOptions: normalizedOpts,\n executeState,\n args: computedArgs,\n options: runOptions,\n isSecure: true,\n });\n },\n });\n};\n","import { createBaseQuery, CreateQueryOptions } from '../http';\nimport { GqlQueryArgs } from './gql-query';\nimport { InternalSecureCreateGqlQueryCreatorOptions } from './secure-gql-query-creator';\nimport { createSecureGqlExecuteFn } from './secure-gql-query-execute';\n\nexport type CreateSecureGqlQueryOptions<TArgs extends GqlQueryArgs> = Omit<\n CreateQueryOptions<TArgs>,\n 'creatorInternals'\n> & {\n creatorInternals: InternalSecureCreateGqlQueryCreatorOptions;\n};\n\nexport const createSecureGqlQuery = <TArgs extends GqlQueryArgs>(options: CreateSecureGqlQueryOptions<TArgs>) =>\n createBaseQuery({\n creator: options.creator,\n creatorInternals: options.creatorInternals,\n features: options.features,\n queryConfig: options.queryConfig,\n executeFactory: createSecureGqlExecuteFn,\n });\n","import { AnyCreateBearerAuthProviderResult } from '../auth';\nimport { AnyCreateQueryClientResult, createBaseQueryCreator, QueryCreator } from '../http';\nimport { GqlQueryArgs } from './gql-query';\nimport { CreateGqlQueryCreatorOptions } from './gql-query-creator';\nimport { createSecureGqlQuery } from './secure-gql-query';\n\nexport type InternalSecureCreateGqlQueryCreatorOptions = {\n method: 'QUERY' | 'MUTATE';\n transport: 'GET' | 'POST';\n client: AnyCreateQueryClientResult;\n query: string;\n authProvider: AnyCreateBearerAuthProviderResult;\n};\n\nexport const createSecureGqlQueryCreator = <TArgs extends GqlQueryArgs>(\n options: CreateGqlQueryCreatorOptions<TArgs> | undefined,\n internals: InternalSecureCreateGqlQueryCreatorOptions,\n): QueryCreator<TArgs> =>\n createBaseQueryCreator({\n options: {\n ...options,\n // Use custom transformResponse if provided, otherwise use default GQL unwrapping\n transformResponse:\n options?.transformResponse ??\n ((rawResponse: unknown) => {\n if (rawResponse && typeof rawResponse === 'object' && 'data' in rawResponse) {\n return (rawResponse as { data: unknown }).data;\n }\n return rawResponse;\n }),\n },\n internals,\n queryFactory: createSecureGqlQuery,\n });\n","import { AnyCreateBearerAuthProviderResult } from '../auth';\nimport { AnyCreateQueryClientResult } from '../http';\nimport { GqlQueryArgs } from './gql-query';\nimport {\n createGqlQueryCreator,\n CreateGqlQueryCreatorOptions,\n GqlQueryMethod,\n GqlQueryTransport,\n} from './gql-query-creator';\nimport { GQL } from './gql-transformer';\nimport { createSecureGqlQueryCreator } from './secure-gql-query-creator';\n\nconst createGqlCreatorTemplate = (method: GqlQueryMethod, transport: GqlQueryTransport) => {\n return (client: AnyCreateQueryClientResult) => {\n return <TArgs extends GqlQueryArgs>(query: GQL, creatorOptions?: CreateGqlQueryCreatorOptions<TArgs>) =>\n createGqlQueryCreator<TArgs>(creatorOptions, {\n method,\n client,\n transport,\n query,\n });\n };\n};\n\nconst createSecureGqlCreatorTemplate = (method: GqlQueryMethod, transport: GqlQueryTransport) => {\n return (client: AnyCreateQueryClientResult, authProvider: AnyCreateBearerAuthProviderResult) => {\n return <TArgs extends GqlQueryArgs>(query: GQL, creatorOptions?: CreateGqlQueryCreatorOptions<TArgs>) =>\n createSecureGqlQueryCreator<TArgs>(creatorOptions, {\n method,\n client,\n transport,\n query,\n authProvider,\n });\n };\n};\n\n/** A query creator that creates a GQL query where the payload is sent via GET (query params) */\nexport const createGqlQueryViaGet = createGqlCreatorTemplate('QUERY', 'GET');\n\n/** A query creator that creates a secure GQL query where the payload is sent via GET (query params) */\nexport const createSecureGqlQueryViaGet = createSecureGqlCreatorTemplate('QUERY', 'GET');\n\n/** A query creator that creates a GQL query where the payload is sent via POST (body) */\nexport const createGqlQueryViaPost = createGqlCreatorTemplate('QUERY', 'POST');\n\n/** A query creator that creates a secure GQL query where the payload is sent via POST (body) */\nexport const createSecureGqlQueryViaPost = createSecureGqlCreatorTemplate('QUERY', 'POST');\n\n/** A query creator that creates a GQL mutation where the payload is sent via GET (query params) */\nexport const createGqlMutationViaGet = createGqlCreatorTemplate('MUTATE', 'GET');\n\n/** A query creator that creates a secure GQL mutation where the payload is sent via GET (query params) */\nexport const createSecureGqlMutationViaGet = createSecureGqlCreatorTemplate('MUTATE', 'GET');\n\n/** A query creator that creates a GQL mutation where the payload is sent via POST (body) */\nexport const createGqlMutationViaPost = createGqlCreatorTemplate('MUTATE', 'POST');\n\n/** A query creator that creates a secure GQL mutation where the payload is sent via POST (body) */\nexport const createSecureGqlMutationViaPost = createSecureGqlCreatorTemplate('MUTATE', 'POST');\n","import { effect, untracked } from '@angular/core';\nimport { toObservable } from '@angular/core/rxjs-interop';\nimport {\n filter,\n interval,\n map,\n Observable,\n of,\n ReplaySubject,\n shareReplay,\n skip,\n Subscription,\n switchMap,\n takeUntil,\n takeWhile,\n} from 'rxjs';\nimport { AnyNewQuery, Query, QueryArgs, QueryArgsOf, QueryExecutionState, RequestArgs, ResponseType } from '../../http';\nimport { EntityStore } from '../entity';\nimport {\n BaseArguments,\n ExecuteQueryOptions,\n Failure,\n filterFailure,\n filterSuccess,\n isQueryStateLoading,\n isQueryStateSuccess,\n Loading,\n PollConfig,\n Prepared,\n QueryAutoRefreshConfig,\n QueryEntityConfig,\n QueryStateMeta,\n QueryStateType,\n Success,\n takeUntilResponse,\n V2QueryState,\n V2RouteType,\n} from '../query';\nimport { RequestError } from '../request';\n\nexport type CreateLegacyQueryOptions<TArgs extends QueryArgs> = {\n query: Query<TArgs>;\n};\n\nexport const transformExecStateToQueryState = <TArgs extends QueryArgs>(\n execState: QueryExecutionState<TArgs> | null,\n): V2QueryState<ResponseType<TArgs>> => {\n const meta: QueryStateMeta = { id: -1, triggeredVia: 'program' };\n\n switch (execState?.type) {\n case 'loading': {\n const loading: Loading = {\n meta,\n type: QueryStateType.Loading,\n ...(execState.loading.progress\n ? {\n progress: {\n current: execState.loading.progress.loaded,\n percentage: execState.loading.progress.percentage,\n total: execState.loading.progress.total,\n },\n }\n : {}),\n };\n\n return loading;\n }\n case 'success': {\n const success: Success<ResponseType<TArgs>> = {\n headers: {},\n meta,\n response: execState.response,\n type: QueryStateType.Success,\n };\n\n return success;\n }\n case 'failure': {\n const error: Failure = {\n error: {\n detail: execState.error.raw.error,\n httpErrorResponse: execState.error.raw,\n status: execState.error.raw.status,\n statusText: execState.error.raw.statusText,\n url: execState.error.raw.url || '',\n },\n meta,\n type: QueryStateType.Failure,\n };\n\n return error;\n }\n default: {\n const prepared: Prepared = {\n meta,\n type: QueryStateType.Prepared,\n };\n\n return prepared;\n }\n }\n};\n\nexport const isLegacyQuery = <T extends AnyLegacyQuery>(query: unknown): query is T => {\n if (!query || typeof query !== 'object' || Array.isArray(query)) {\n return false;\n }\n\n if (!('newQuery' in query)) {\n return false;\n }\n\n return true;\n};\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport type AnyLegacyQuery = LegacyQuery<any, any, any, any, any, any, any>;\n\nexport class LegacyQuery<\n Response,\n Arguments extends BaseArguments | undefined,\n Route extends V2RouteType<Arguments>,\n Store extends EntityStore<unknown>,\n Data,\n Id,\n TNewQuery extends AnyNewQuery,\n> {\n /**\n * @internal\n */\n _pollingSubscription: Subscription | null = null;\n /**\n * @internal\n */\n _currentPollConfig: PollConfig | null = null;\n\n /**\n * @internal\n */\n storeSyncEffect = effect(() => {\n const res = this.newQuery.response();\n\n untracked(() => {\n if (this.entity?.set) {\n const id = this.entity.id({ args: this._arguments, response: res });\n\n this.entity.set({\n args: this._arguments,\n response: res,\n id,\n store: this.entity.store,\n });\n }\n });\n });\n\n /**\n * @internal\n */\n _dependents: Record<number, number> = {};\n\n /**\n * @internal\n */\n _dependentsChanged$ = new ReplaySubject<Record<number, number>>();\n\n /**\n * @internal\n */\n _isPollingPaused = false;\n\n state$: Observable<V2QueryState<Data>>;\n\n get rawState() {\n return transformExecStateToQueryState(this.newQuery.executionState());\n }\n\n get isExpired() {\n return this.newQuery.subtle.request()?.isStale();\n }\n\n get isInUse() {\n return true;\n }\n\n /**\n * @internal\n */\n get _subscriberCount() {\n return 0;\n }\n\n get isPolling() {\n return !!this._pollingSubscription;\n }\n\n get autoRefreshOnConfig() {\n const transformed: Readonly<QueryAutoRefreshConfig> = {\n queryClientDefaultHeadersChange: false,\n windowFocus: false,\n };\n\n return transformed;\n }\n\n /**\n * @internal\n */\n get _enableSmartPolling() {\n return false;\n }\n\n get store() {\n return null;\n }\n\n get canBeCached() {\n return false;\n }\n\n get _isInMockMode() {\n return false;\n }\n\n constructor(\n public newQuery: TNewQuery,\n public _arguments: RequestArgs<QueryArgsOf<TNewQuery>>,\n public entity?: QueryEntityConfig<Store, Data, Response, Arguments, Id>,\n ) {\n this.state$ = toObservable(this.newQuery.executionState, { injector: this.newQuery.subtle.injector }).pipe(\n map((execState) => transformExecStateToQueryState(execState)),\n switchMap((s) => this._transformState(s)),\n shareReplay({ bufferSize: 1, refCount: true }),\n );\n\n this.newQuery.subtle.destroyRef.onDestroy(() => this.destroy());\n }\n\n destroy() {\n this._pollingSubscription?.unsubscribe();\n this._pollingSubscription = null;\n this._dependentsChanged$.complete();\n this.newQuery.subtle.destroy();\n this.storeSyncEffect.destroy();\n }\n\n execute(options: ExecuteQueryOptions = {}) {\n untracked(() =>\n this.newQuery.execute({ args: this._arguments, options: { allowCache: options.skipCache !== true } }),\n );\n\n return this;\n }\n\n abort() {\n if (!isQueryStateLoading(this.rawState)) {\n return this;\n }\n\n this.newQuery.reset();\n\n return this;\n }\n\n poll(config: PollConfig) {\n if (this._pollingSubscription) {\n return this;\n }\n\n this._currentPollConfig = config;\n\n const interval$ = interval(config.interval);\n const poll$ = interval$.pipe(\n skip(config.triggerImmediately ? 0 : 1),\n takeUntil(config.takeUntil),\n takeWhile(() => !this._isPollingPaused),\n filter(() => !isQueryStateLoading(this.rawState)),\n );\n\n this._pollingSubscription = poll$.subscribe({\n next: () => this.execute({ skipCache: true, _triggeredVia: 'poll' }),\n complete: () => this.stopPolling(),\n });\n\n return this;\n }\n\n stopPolling() {\n this._pollingSubscription?.unsubscribe();\n this._pollingSubscription = null;\n this._currentPollConfig = null;\n\n return this;\n }\n\n pausePolling() {\n this._pollingSubscription?.unsubscribe();\n this._pollingSubscription = null;\n\n this._isPollingPaused = true;\n\n return this;\n }\n\n resumePolling() {\n if (!this._isPollingPaused || !this._currentPollConfig) {\n return this;\n }\n\n this._isPollingPaused = false;\n\n return this.poll({ ...this._currentPollConfig, triggerImmediately: true });\n }\n\n onSuccess(callback: (response: Data) => void) {\n this.state$.pipe(takeUntilResponse(), filterSuccess()).subscribe((state) => callback(state.response));\n return this;\n }\n\n onFailure(callback: (error: RequestError<unknown>) => void) {\n this.state$.pipe(takeUntilResponse(), filterFailure()).subscribe((state) => callback(state.error));\n return this;\n }\n\n /**\n * @internal\n */\n _addDependent(tNodeIndex: number) {\n if (!this._dependents[tNodeIndex]) {\n this._dependents[tNodeIndex] = 0;\n }\n\n this._dependents[tNodeIndex]++;\n\n this._dependentsChanged$.next(this._dependents);\n }\n\n /**\n * @internal\n */\n _removeDependent(tNodeIndex: number) {\n const count = this._dependents[tNodeIndex];\n if (count === undefined) {\n return;\n }\n\n if (this._dependents[tNodeIndex] !== undefined) {\n this._dependents[tNodeIndex]--;\n }\n\n if (count <= 1) {\n delete this._dependents[tNodeIndex];\n }\n\n this._dependentsChanged$.next(this._dependents);\n }\n\n /**\n * @internal\n */\n _hasDependents() {\n return Object.keys(this._dependents).length > 0;\n }\n\n /**\n * @internal\n */\n _transformState(s: V2QueryState<Response>): Observable<V2QueryState<Data>> {\n if (!isQueryStateSuccess(s) || !this.entity?.get) {\n return of(s) as Observable<V2QueryState<Data>>;\n }\n\n const id = this.entity.id({ args: this._arguments, response: s.response });\n\n return this.entity\n .get({ args: this._arguments, id, response: s.response, store: this.entity.store })\n .pipe(map((v) => ({ ...s, response: v })));\n }\n}\n","import { HttpHeaders } from '@angular/common/http';\nimport { effect, inject, Injector, runInInjectionContext, signal, untracked } from '@angular/core';\nimport { toObservable } from '@angular/core/rxjs-interop';\nimport { BehaviorSubject } from 'rxjs';\nimport { AnyNewQuery, Query, QueryArgs, QueryCreator, RequestArgs, ResponseType } from '../../http';\nimport { EntityStore } from '../entity';\nimport { BaseArguments, QueryEntityConfig, V2QueryConfig, V2RouteType, WithHeaders, WithInjector } from '../query';\nimport { addQueryContainerHandling, QueryContainerConfig } from '../utils';\nimport { LegacyQuery } from './legacy-query';\n\nexport type LegacyArgumentsOfQueryArgs<T extends QueryArgs> = Omit<T, 'response' | 'headers'> & WithHeaders;\nexport type QueryArgsOfLegacyArguments<T extends BaseArguments | undefined, J> = Omit<T, 'mock' | 'headers'> & {\n headers?: HttpHeaders;\n response?: J;\n};\n\nexport type CreateLegacyQueryCreatorOptions<\n TArgs extends QueryArgs,\n Response,\n Store extends EntityStore<unknown>,\n Data,\n Id,\n> = {\n creator: QueryCreator<TArgs>;\n\n /**\n * Object containing the query's entity store information.\n */\n entity?: QueryEntityConfig<Store, Data, Response, LegacyArgumentsOfQueryArgs<TArgs>, Id>;\n};\n\nexport type WithLegacyConfig = {\n /**\n * Additional configuration for this query.\n */\n config?: V2QueryConfig & {\n /**\n * If set to true, the query will be destroyed when it either succeeds or fails.\n */\n destroyOnResponse?: boolean;\n };\n};\n\nexport type LegacyQueryPrepareFn<\n Arguments extends BaseArguments | undefined,\n Response,\n Route extends V2RouteType<Arguments>,\n Store extends EntityStore<unknown>,\n Data,\n Id,\n TNewQuery extends AnyNewQuery,\n> = (\n args: Arguments & WithHeaders & WithLegacyConfig & WithInjector,\n) => LegacyQuery<Response, Arguments, Route, Store, Data, Id, TNewQuery>;\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport type AnyLegacyQueryCreator = LegacyQueryCreator<any, any, any, any, any>;\n\nexport class LegacyQueryCreator<\n TArgs extends QueryArgs,\n Response extends ResponseType<TArgs>,\n Store extends EntityStore<unknown>,\n Id,\n Data = Response,\n> {\n constructor(public options: CreateLegacyQueryCreatorOptions<TArgs, Response, Store, Data, Id>) {}\n\n prepare: LegacyQueryPrepareFn<\n LegacyArgumentsOfQueryArgs<TArgs>,\n Response,\n V2RouteType<LegacyArgumentsOfQueryArgs<TArgs>>,\n Store,\n Data,\n Id,\n Query<TArgs>\n > = (args: LegacyArgumentsOfQueryArgs<TArgs> & WithHeaders & WithLegacyConfig & WithInjector) => {\n const injector = args?.injector ?? inject(Injector);\n\n let headers = new HttpHeaders();\n\n if (args?.headers) {\n Object.entries(args.headers).forEach(([key, value]) => {\n if (value) {\n headers = headers.set(key, value);\n }\n });\n }\n\n const queryArgs = {\n ...(args?.body ? { body: args.body } : {}),\n ...(args?.pathParams ? { pathParams: args.pathParams } : {}),\n ...(args?.queryParams ? { queryParams: args.queryParams } : {}),\n headers,\n } as RequestArgs<TArgs>;\n\n return runInInjectionContext(injector, () => {\n return untracked(() => {\n const newQuery = this.options.creator({\n onlyManualExecution: true,\n injector,\n silenceMissingWithArgsFeatureError: true,\n });\n\n const legacyQuery = new LegacyQuery<\n Response,\n LegacyArgumentsOfQueryArgs<TArgs>,\n V2RouteType<LegacyArgumentsOfQueryArgs<TArgs>>,\n Store,\n Data,\n Id,\n Query<TArgs>\n >(newQuery, queryArgs, this.options.entity);\n\n if (args?.config?.destroyOnResponse) {\n const destroyEffect = effect(() => {\n if (newQuery.executionState()?.type === 'success' || newQuery.executionState()?.type === 'failure') {\n legacyQuery.destroy();\n destroyEffect.destroy();\n }\n });\n }\n\n return legacyQuery;\n });\n });\n };\n createSubject = (initialValue?: ReturnType<typeof this.prepare> | null, config?: QueryContainerConfig) => {\n const subject = new BehaviorSubject<ReturnType<typeof this.prepare> | null>(initialValue ?? null);\n\n addQueryContainerHandling(subject, () => subject.getValue(), config);\n\n return subject;\n };\n createSignal = (initialValue?: ReturnType<typeof this.prepare> | null, config?: QueryContainerConfig) => {\n const _signal = signal<ReturnType<typeof this.prepare> | null>(initialValue ?? null);\n\n addQueryContainerHandling(toObservable(_signal), () => _signal(), config);\n\n return _signal;\n };\n\n behaviorSubject = this.createSubject;\n}\n\n/**\n * Creates a legacy query creator.\n *\n * **NOTE**: This is a temporary solution to support legacy queries. It will be removed in the future.\n *\n * **DO NOT TURN NEW QUERY CREATORS INTO LEGACY ONES MANUALLY. THIS IS ONLY NEEDED FOR MIGRATION PURPOSES.**\n */\nexport const createLegacyQueryCreator = <\n TArgs extends QueryArgs,\n Response extends ResponseType<TArgs>,\n Store extends EntityStore<unknown>,\n Id,\n Data = Response,\n>(\n options: CreateLegacyQueryCreatorOptions<TArgs, Response, Store, Data, Id>,\n): LegacyQueryCreator<TArgs, Response, Store, Id, Data> => {\n return new LegacyQueryCreator<TArgs, Response, Store, Id, Data>(options);\n};\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { assertInInjectionContext, isDevMode, signal } from '@angular/core';\nimport { toObservable } from '@angular/core/rxjs-interop';\nimport { Paginated } from '@ethlete/types';\nimport { BehaviorSubject, Observable, filter, map, of, switchMap, takeWhile, tap } from 'rxjs';\nimport { transformGql } from '../../gql';\nimport { isSymfonyPagerfantaOutOfRangeError } from '../../http';\nimport { QueryForm } from '../../query-form';\nimport { EntityStore } from '../entity';\nimport { AnyLegacyQuery, isLegacyQuery } from '../interop';\nimport { V2QueryClient } from '../query-client';\nimport {\n AnyV2QueryCreator,\n QueryDataOf,\n QueryResponseOf,\n QueryStoreIdOf,\n QueryStoreOf,\n V2QueryArgsOf,\n V2QueryCreator,\n} from '../query-creator';\nimport { Method, RequestHeaders, RequestHeadersMethodMap, transformMethod } from '../request';\nimport { QueryContainerConfig, addQueryContainerHandling } from '../utils';\nimport {\n AnyGqlQueryConfig,\n AnyQueryCollection,\n AnyQueryCollectionData,\n AnyQueryCreatorCollection,\n AnyRestQueryConfig,\n AnyV2Query,\n BaseArguments,\n Cancelled,\n Failure,\n GqlQueryConfig,\n Loading,\n Prepared,\n QueryCollectionOf,\n QueryStateResponseOf,\n QueryStateType,\n ResetPageOnErrorOperatorConfig,\n Success,\n V2QueryState,\n V2RouteType,\n} from './query.types';\n\ntype OmitNull<T> = T extends null ? never : T;\n\nexport function filterSuccess() {\n return function <T extends V2QueryState | null, Response extends QueryStateResponseOf<OmitNull<T>>>(\n source: Observable<T>,\n ) {\n return source.pipe(filter((value) => isQueryStateSuccess(value))) as Observable<Success<Response>>;\n };\n}\n\nexport function ignoreAutoRefresh() {\n return function <T extends V2QueryState | null>(source: Observable<T>) {\n return source.pipe(filter((value) => !isAutoRefresh(value))) as Observable<T>;\n };\n}\n\nexport function filterFailure() {\n return function <T extends V2QueryState | null>(source: Observable<T>) {\n return source.pipe(filter((value) => isQueryStateFailure(value))) as Observable<Failure>;\n };\n}\n\nexport function filterQueryStates(allowedStates: QueryStateType[]) {\n return function <T extends V2QueryState | null>(source: Observable<T>) {\n return source.pipe(filter((value) => value && allowedStates.includes(value.type))) as Observable<T>;\n };\n}\n\nexport function takeUntilResponse(config?: { excludeNull?: boolean }) {\n return function <T extends V2QueryState | null>(source: Observable<T>) {\n return source.pipe(\n takeWhile((value) => {\n if (config?.excludeNull && value === null) {\n return false;\n }\n\n return isQueryStateLoading(value) || isQueryStatePrepared(value) || value === null;\n }, true),\n );\n };\n}\n\nexport function filterNull() {\n return function <T>(source: Observable<T>) {\n return source.pipe(filter((value): value is OmitNull<T> => value !== null));\n };\n}\n\nexport function switchQueryState() {\n return function <T extends AnyV2Query | AnyLegacyQuery | null, Data extends QueryDataOf<T>>(source: Observable<T>) {\n return source.pipe(switchMap((value) => value?.state$ ?? of(null))) as Observable<V2QueryState<Data> | null>;\n };\n}\n\nexport function switchQueryCollectionState() {\n return function <T extends AnyQueryCollection | null, Data extends AnyQueryCollectionData<OmitNull<T>>>(\n source: Observable<T>,\n ) {\n return source.pipe(switchMap((value) => value?.query.state$ ?? of(null))) as Observable<V2QueryState<Data> | null>;\n };\n}\n\nexport const resetPageOnError =\n <T extends AnyV2Query | AnyLegacyQuery | null | undefined, J extends QueryForm<any>>(\n config: ResetPageOnErrorOperatorConfig<J>,\n ) =>\n (source: Observable<T>) => {\n const { queryForm, pageControlKey = 'page' } = config;\n\n if (isDevMode() && !queryForm.form.controls[pageControlKey]) {\n console.warn(`resetPageOnError: queryForm.form.controls[\"${pageControlKey}\"] is undefined`);\n }\n\n return source.pipe(\n switchMap((q) => {\n if (!q) {\n return of(q);\n }\n\n return q.state$.pipe(\n tap((state) => {\n if (!isQueryStateFailure(state)) {\n return;\n }\n\n switch (state.error.status) {\n // The page is invalid (in prod mode, code is 416)\n case 416:\n queryForm.form.controls[pageControlKey]?.patchValue(1);\n break;\n\n // The page might be invalid (in dev mode, code is 500)\n case 500:\n if (isSymfonyPagerfantaOutOfRangeError(state.error.detail)) {\n queryForm.form.controls[pageControlKey].patchValue(1);\n }\n break;\n }\n }),\n takeUntilResponse(),\n );\n }),\n );\n };\n\nexport const isQueryStateLoading = (state: V2QueryState | null | undefined): state is Loading =>\n state?.type === QueryStateType.Loading;\n\nexport const isQueryStateSuccess = (state: V2QueryState | null | undefined): state is Success =>\n state?.type === QueryStateType.Success;\n\nexport const isQueryStateFailure = (state: V2QueryState | null | undefined): state is Failure =>\n state?.type === QueryStateType.Failure;\n\nexport const isQueryStateCancelled = (state: V2QueryState | null | undefined): state is Cancelled =>\n state?.type === QueryStateType.Cancelled;\n\nexport const isQueryStatePrepared = (state: V2QueryState | null | undefined): state is Prepared =>\n state?.type === QueryStateType.Prepared;\n\nexport const isAutoRefresh = (state: V2QueryState | null | undefined): boolean => state?.meta.triggeredVia === 'auto';\n\nexport const mergeHeaders = (...headers: Array<RequestHeaders | null | undefined>) => {\n return headers.reduce((acc, headers) => {\n if (!headers) {\n return acc;\n }\n\n return {\n ...acc,\n ...headers,\n };\n }, {});\n};\n\nexport const isGqlQueryConfig = <\n Response,\n Arguments extends BaseArguments | undefined,\n Route extends V2RouteType<Arguments> | undefined,\n Store extends EntityStore<unknown>,\n Data,\n Id,\n>(\n config: unknown,\n): config is GqlQueryConfig<Route, Response, Arguments, Store, Data, Id> => {\n if (!config || typeof config !== 'object' || Array.isArray(config)) {\n return false;\n }\n\n if (!('query' in config)) {\n return false;\n }\n\n return true;\n};\n\nexport const isQuery = <T extends AnyV2Query | AnyLegacyQuery>(query: unknown): query is T => {\n if (!query || typeof query !== 'object' || Array.isArray(query)) {\n return false;\n }\n\n if (!('state$' in query)) {\n return false;\n }\n\n return true;\n};\n\nexport const isQueryCollection = <T extends AnyQueryCollection>(query: unknown): query is T => {\n if (!query || typeof query !== 'object' || Array.isArray(query)) {\n return false;\n }\n\n if (!('query' in query)) {\n return false;\n }\n\n return true;\n};\n\nexport const createQueryCollection = <T extends AnyQueryCreatorCollection, R extends QueryCollectionOf<T>>(\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n queryMap: T,\n) => new BehaviorSubject<R | null>(null);\n\nexport const createQueryCollectionSubject = <T extends AnyQueryCreatorCollection, R extends QueryCollectionOf<T>>(\n queryMap: T,\n config?: QueryContainerConfig,\n) => {\n assertInInjectionContext(createQueryCollectionSubject);\n\n const subject = new BehaviorSubject<R | null>(null);\n\n addQueryContainerHandling(\n subject.pipe(map((s) => s?.query ?? null)),\n () => subject.getValue()?.query ?? null,\n config,\n );\n\n return subject;\n};\n\nexport const createQueryCollectionSignal = <T extends AnyQueryCreatorCollection, R extends QueryCollectionOf<T>>(\n queryMap: T,\n config?: QueryContainerConfig,\n) => {\n assertInInjectionContext(createQueryCollectionSignal);\n\n const _signal = signal<R | null>(null);\n\n addQueryContainerHandling(\n toObservable(_signal).pipe(map((s) => s?.query ?? null)),\n () => _signal()?.query ?? null,\n config,\n );\n\n return _signal;\n};\n\nexport const extractQuery = <T extends AnyV2Query | AnyLegacyQuery | AnyQueryCollection | null>(v: T) =>\n (isQuery(v) ? v : isLegacyQuery(v) ? v : v?.query) ?? null;\n\nexport const getDefaultHeaders = (\n headers: RequestHeaders | RequestHeadersMethodMap | null | undefined,\n method: Method,\n) => {\n if (!headers) {\n return {};\n }\n\n if (method in headers) {\n return (headers[method] ?? {}) as RequestHeaders;\n }\n\n return headers as RequestHeaders;\n};\n\nexport const castQueryCreatorTypes = <\n QC extends AnyV2QueryCreator,\n Arguments extends V2QueryArgsOf<QC>,\n Response extends QueryResponseOf<QC>,\n Store extends QueryStoreOf<QC>,\n Data extends QueryDataOf<QC>,\n Route extends V2RouteType<Arguments>,\n Id extends QueryStoreIdOf<QC>,\n OverrideArguments extends BaseArguments | undefined,\n OverrideResponse extends Response | undefined,\n>(config: {\n creator: QC;\n args?: OverrideArguments;\n response?: OverrideResponse;\n}) => {\n if (config.args?.pathParams) {\n console.error(config);\n\n throw new Error('Path params cannot be overridden in castQueryCreatorTypes. Create a new query creator instead.');\n }\n\n return config.creator as unknown as V2QueryCreator<OverrideArguments, OverrideResponse, Route, Store, Data, Id>;\n};\n\nexport const computeQueryMethod = (config: {\n config: AnyRestQueryConfig | AnyGqlQueryConfig;\n client: V2QueryClient;\n}) => {\n let method: Method;\n\n if (isGqlQueryConfig(config.config)) {\n const transferVia = config.config.transferVia ?? config.client.config.request?.gql?.transferVia;\n method = transformMethod({ method: config.config.method, transferVia });\n } else {\n method = transformMethod({ method: config.config.method });\n }\n\n return method;\n};\n\nexport const computeQueryBody = (config: {\n config: AnyRestQueryConfig | AnyGqlQueryConfig;\n client: V2QueryClient;\n method: Method;\n args?: BaseArguments;\n}) => {\n let body: unknown;\n\n if (\n config.method === 'GET' ||\n config.method === 'HEAD' ||\n config.method === 'OPTIONS' ||\n (isGqlQueryConfig(config.config) &&\n (config.config.transferVia === 'GET' ||\n (config.client.config.request?.gql?.transferVia === 'GET' && !config.config.transferVia)))\n ) {\n return undefined;\n }\n\n if (isGqlQueryConfig(config.config)) {\n const queryTemplate = config.config.query;\n const query = transformGql(queryTemplate);\n\n body = query(config.args?.variables);\n } else {\n body = config.args?.body;\n }\n\n return body;\n};\n\nexport const computeQueryAuthHeader = (config: {\n config: AnyRestQueryConfig | AnyGqlQueryConfig;\n client: V2QueryClient;\n}) => {\n let authHeader: Record<string, string> | null = null;\n\n if (config.config.secure) {\n const header = config.client.authProvider?.header;\n\n if (header) {\n authHeader = header;\n }\n } else if (config.client.authProvider?.header) {\n if (config.config.secure === undefined || config.config.secure) {\n authHeader = config.client.authProvider.header;\n }\n }\n\n return authHeader;\n};\n\nexport const computeQueryHeaders = (config: {\n config: AnyRestQueryConfig | AnyGqlQueryConfig;\n client: V2QueryClient;\n args?: BaseArguments;\n}) => {\n const authHeader = computeQueryAuthHeader(config);\n\n const mergedHeaders =\n mergeHeaders(\n getDefaultHeaders(config.client.config.request?.headers, config.config.method),\n authHeader,\n config.args?.headers,\n ) || undefined;\n\n return mergedHeaders;\n};\n\nexport const computeQueryQueryParams = (config: {\n config: AnyRestQueryConfig | AnyGqlQueryConfig;\n client: V2QueryClient;\n args?: BaseArguments;\n}) => {\n if (\n isGqlQueryConfig(config.config) &&\n (config.config.transferVia === 'GET' ||\n (config.client.config.request?.gql?.transferVia === 'GET' && !config.config.transferVia))\n ) {\n const queryTemplate = config.config.query;\n const query = transformGql(queryTemplate);\n\n let params = query(config.args?.variables);\n\n if (config.args?.queryParams) {\n params = { ...params, ...config.args?.queryParams };\n }\n\n return params;\n }\n\n return config.args?.queryParams;\n};\n\nexport const paginatedEntityValueUpdater =\n <\n T extends Paginated<unknown>,\n Args extends BaseArguments,\n Entity,\n J extends T extends Paginated<infer X> ? X : never,\n >(\n findFn: (val: J, entity: Entity) => boolean,\n ) =>\n ({ response, rawResponse, entity }: { rawResponse: T; response: T; args: Args; entity: Entity }) => {\n const indexOfEntityRaw = rawResponse.items.findIndex((item) => findFn(item as J, entity));\n const indexOfEntity = response.items.findIndex((item) => findFn(item as J, entity));\n\n if (indexOfEntity === -1 || indexOfEntityRaw === -1) {\n return null;\n }\n\n const newRawResponse = {\n ...rawResponse,\n items: [\n ...rawResponse.items.slice(0, indexOfEntityRaw),\n entity,\n ...rawResponse.items.slice(indexOfEntityRaw + 1),\n ],\n };\n\n const newResponse = {\n ...response,\n items: [...response.items.slice(0, indexOfEntity), entity, ...response.items.slice(indexOfEntity + 1)],\n };\n\n return {\n response: newResponse,\n rawResponse: newRawResponse,\n };\n };\n","import { untracked } from '@angular/core';\nimport {\n BehaviorSubject,\n combineLatest,\n EMPTY,\n filter,\n interval,\n map,\n Observable,\n of,\n ReplaySubject,\n shareReplay,\n skip,\n Subject,\n Subscription,\n switchMap,\n take,\n takeUntil,\n takeWhile,\n tap,\n timer,\n} from 'rxjs';\nimport { isBearerAuthProvider } from '../auth';\nimport { EntityStore } from '../entity';\nimport { V2QueryClient, v2ShouldCacheQuery } from '../query-client';\nimport { request, RequestError, RequestEvent, RequestHeaders } from '../request';\nimport {\n BaseArguments,\n ExecuteQueryOptions,\n GqlQueryConfig,\n PollConfig,\n QueryAutoRefreshConfig,\n QueryStateMeta,\n QueryStateType,\n RestQueryConfig,\n V2QueryState,\n V2RouteType,\n} from './query.types';\nimport {\n computeQueryBody,\n computeQueryHeaders,\n computeQueryMethod,\n filterFailure,\n filterSuccess,\n isGqlQueryConfig,\n isQueryStateCancelled,\n isQueryStateFailure,\n isQueryStateLoading,\n isQueryStatePrepared,\n isQueryStateSuccess,\n switchQueryState,\n takeUntilResponse,\n} from './query.utils';\n\nlet _nextQueryId = 0;\n\nexport class V2Query<\n Response,\n Arguments extends BaseArguments | undefined,\n Route extends V2RouteType<Arguments>,\n Store extends EntityStore<unknown>,\n Data,\n Id,\n> {\n readonly _id = _nextQueryId++;\n\n private _currentLocalId = 0;\n private _pollingSubscription: Subscription | null = null;\n private _onAbort$ = new Subject<void>();\n private _currentPollConfig: PollConfig | null = null;\n\n /**\n * @internal\n * Used to track which components depend on this query.\n * The key is the component's _tNode index.\n * The value is the number of times the component has subscribed to this query.\n * The value might increase since we cant distinguish between a component and a host directive applied to it.\n */\n _dependents: Record<number, number> = {};\n\n /**\n * @internal\n */\n _dependentsChanged$ = new ReplaySubject<Record<number, number>>();\n\n /**\n * @internal\n */\n _isPollingPaused = false;\n\n private _memoizedState$: Observable<V2QueryState<Data>> | null = null;\n\n private readonly _state$ = new BehaviorSubject<V2QueryState<Response>>({\n type: QueryStateType.Prepared,\n meta: { id: this._currentLocalId, triggeredVia: 'program' },\n });\n\n private get _nextId() {\n return ++this._currentLocalId;\n }\n\n get state$(): Observable<V2QueryState<Data>> {\n if (!this._memoizedState$) {\n this._memoizedState$ = this._state$.pipe(\n tap((s) => {\n if (!this._client.config.logging?.preparedQuerySubscriptions) return;\n\n if (isQueryStatePrepared(s)) {\n console.warn(\n `Query ${this._routeWithParams} was subscribed to in the prepared state. Did you forget to call .execute()?`,\n );\n }\n }),\n switchMap((s) => this._transformState(s)),\n shareReplay({ bufferSize: 1, refCount: true }),\n );\n }\n return this._memoizedState$;\n }\n\n /**\n * The current state of the query.\n *\n * **Warning!** This differs from the `state$` observable in that it does not use the query store. Thus, the response data might be outdated.\n * Use `state$` (or `firstValueFrom(state$)`) the most up-to-date data.\n */\n get rawState() {\n return this._state$.value;\n }\n\n get isExpired() {\n if (isQueryStateLoading(this.rawState)) {\n return false;\n }\n\n if (\n isQueryStatePrepared(this.rawState) ||\n isQueryStateCancelled(this.rawState) ||\n isQueryStateFailure(this.rawState)\n ) {\n return true;\n }\n\n const ts = this.rawState.meta.expiresAt;\n\n if (!ts) {\n return true;\n }\n\n return ts < Date.now();\n }\n\n get isInUse() {\n return this._state$.observed || Object.keys(this._dependents).length > 0;\n }\n\n /**\n * @internal\n */\n get _subscriberCount() {\n return this._state$.observers.length;\n }\n\n get isPolling() {\n return !!this._pollingSubscription;\n }\n\n get autoRefreshOnConfig() {\n const base = this._queryConfig.autoRefreshOn ?? {};\n\n const transformed: Readonly<QueryAutoRefreshConfig> = {\n queryClientDefaultHeadersChange: base.queryClientDefaultHeadersChange ?? true,\n windowFocus: base.windowFocus ?? true,\n };\n\n return transformed;\n }\n\n /**\n * @internal\n */\n get _enableSmartPolling() {\n return this._queryConfig.enableSmartPolling ?? true;\n }\n\n get store() {\n return this._queryConfig.entity?.store ?? null;\n }\n\n get canBeCached() {\n return v2ShouldCacheQuery(this._queryConfig.method);\n }\n\n get _isInMockMode() {\n return !!this._arguments?.mock;\n }\n\n constructor(\n private readonly _client: V2QueryClient,\n\n /**\n * @internal\n */\n public readonly _queryConfig:\n | RestQueryConfig<Route, Response, Arguments, Store, Data, Id>\n | GqlQueryConfig<Route, Response, Arguments, Store, Data, Id>,\n\n /**\n * @internal\n */\n public readonly _routeWithParams: Route,\n\n /**\n * @internal\n */\n public readonly _arguments: Arguments,\n\n /**\n * @internal\n */\n public readonly _queryStoreKey: string,\n ) {}\n\n execute(options: ExecuteQueryOptions = {}) {\n const { skipCache = false, _triggeredVia: triggeredVia = 'program', cancelPrevious = false } = options;\n const { authProvider } = this._client;\n const queryConfig = this._queryConfig;\n\n if (!this.isExpired && !skipCache && isQueryStateSuccess(this.rawState)) {\n return this;\n }\n\n if (queryConfig.secure && !authProvider && !this._isInMockMode) {\n throw new Error('Cannot execute secure query without auth provider');\n }\n\n const id = this._nextId;\n const meta: QueryStateMeta = { id, triggeredVia };\n\n if (isQueryStateLoading(this.rawState)) {\n if (cancelPrevious) {\n this.abort();\n } else {\n return this;\n }\n }\n\n this._updateState({ type: QueryStateType.Loading, meta });\n\n if (this._isInMockMode) {\n this._mockRequest({}, meta, options);\n } else {\n let goSignal = of(true);\n\n if (\n authProvider &&\n isBearerAuthProvider(authProvider) &&\n queryConfig.secure &&\n !isQueryStateSuccess(authProvider.currentRefreshQuery?.rawState)\n ) {\n // On page load the query might be executed before the auth provider has been initialized.\n // In this case we need to wait for the auth provider to be ready before we can execute the query.\n goSignal = combineLatest([\n // The tokens might get set without a refresh query being created (e.g.) directly after login.\n authProvider.currentRefreshQuery$.pipe(switchQueryState(), takeUntilResponse()),\n authProvider.tokens$.pipe(take(1)),\n ]).pipe(\n takeUntil(this._onAbort$),\n switchMap(([state, tokens]) => {\n if (state && isQueryStateLoading(state)) {\n return EMPTY;\n }\n\n if (isQueryStateFailure(state)) {\n this._updateEntityState({ type: 'failure', error: state.error, headers: {} }, meta, options);\n return EMPTY;\n }\n\n if (!state && !(tokens?.token || tokens?.refreshToken)) {\n return EMPTY;\n }\n\n return of(true as const);\n }),\n take(1),\n );\n }\n\n goSignal\n .pipe(\n switchMap(() => {\n const method = computeQueryMethod({ config: queryConfig, client: this._client });\n const body = computeQueryBody({ config: queryConfig, client: this._client, args: this._arguments, method });\n const headers = computeQueryHeaders({ client: this._client, config: queryConfig, args: this._arguments });\n\n return request<Response>({\n urlWithParams: this._routeWithParams as string,\n method,\n body,\n headers,\n reportProgress: queryConfig.reportProgress,\n responseType: queryConfig.responseType,\n withCredentials: queryConfig.withCredentials,\n cacheAdapter: this._client.config.request?.cacheAdapter,\n retryFn: this._client.config.request?.retryFn,\n }).pipe(\n tap((state) => this._updateEntityState(state, meta, options)),\n takeUntil(this._onAbort$),\n );\n }),\n )\n\n .subscribe();\n }\n\n return this;\n }\n\n abort() {\n if (!isQueryStateLoading(this.rawState)) {\n return this;\n }\n\n this._onAbort$.next();\n\n this._updateState({\n type: QueryStateType.Cancelled,\n meta: { id: this.rawState.meta.id, triggeredVia: this.rawState.meta.triggeredVia },\n });\n\n return this;\n }\n\n poll(config: PollConfig) {\n if (this._pollingSubscription) {\n return this;\n }\n\n this._currentPollConfig = config;\n\n const interval$ = interval(config.interval);\n const poll$ = interval$.pipe(\n skip(config.triggerImmediately ? 0 : 1),\n takeUntil(config.takeUntil),\n takeWhile(() => !this._isPollingPaused),\n filter(() => !isQueryStateLoading(this._state$.value)),\n );\n\n this._pollingSubscription = poll$.subscribe({\n next: () => this.execute({ skipCache: true, _triggeredVia: 'poll' }),\n complete: () => this.stopPolling(),\n });\n\n return this;\n }\n\n stopPolling() {\n this._pollingSubscription?.unsubscribe();\n this._pollingSubscription = null;\n this._currentPollConfig = null;\n\n return this;\n }\n\n pausePolling() {\n this._pollingSubscription?.unsubscribe();\n this._pollingSubscription = null;\n\n this._isPollingPaused = true;\n\n return this;\n }\n\n resumePolling() {\n if (!this._isPollingPaused || !this._currentPollConfig) {\n return this;\n }\n\n this._isPollingPaused = false;\n\n return this.poll({ ...this._currentPollConfig, triggerImmediately: true });\n }\n\n onSuccess(callback: (response: Data) => void) {\n this.state$.pipe(takeUntilResponse(), filterSuccess()).subscribe((state) => callback(state.response));\n return this;\n }\n\n onFailure(callback: (error: RequestError<unknown>) => void) {\n this.state$.pipe(takeUntilResponse(), filterFailure()).subscribe((state) => callback(state.error));\n return this;\n }\n\n private _getBearerAuthProvider() {\n const authProvider = this._client.authProvider;\n\n if (authProvider && isBearerAuthProvider(authProvider)) {\n return authProvider;\n }\n\n return null;\n }\n\n private _updateEntityState(\n requestEvent: RequestEvent<Response>,\n meta: QueryStateMeta,\n options?: ExecuteQueryOptions,\n ) {\n switch (requestEvent.type) {\n case 'start':\n case 'delay-retry': {\n const { type, retryDelay, retryNumber } = requestEvent;\n const newMeta: QueryStateMeta = { ...meta, isWaitingForRetry: type === 'delay-retry', retryDelay, retryNumber };\n\n this._updateState({\n type: QueryStateType.Loading,\n meta: newMeta,\n });\n break;\n }\n\n case 'upload-progress':\n case 'download-progress': {\n this._updateState({\n type: QueryStateType.Loading,\n progress: requestEvent.progress,\n partialText: 'partialText' in requestEvent ? requestEvent.partialText : undefined,\n meta,\n });\n\n break;\n }\n\n case 'success': {\n const { response, expiresInTimestamp, headers } = requestEvent;\n const isGql = isGqlQueryConfig(this._queryConfig);\n const responseData =\n isGql && typeof response === 'object' && !!response && 'data' in response\n ? (response['data'] as Response)\n : (response as Response);\n\n if (this._queryConfig.entity && this._queryConfig.entity.set) {\n const id = this._queryConfig.entity?.id({ args: this._arguments, response: responseData });\n\n this._queryConfig.entity?.set({\n args: this._arguments,\n response: responseData,\n id,\n store: this._queryConfig.entity.store,\n });\n }\n\n this._updateState({\n type: QueryStateType.Success,\n response: responseData,\n headers: headers,\n meta: { ...meta, expiresAt: expiresInTimestamp },\n });\n\n break;\n }\n\n case 'failure': {\n const { error } = requestEvent;\n const failure = () => this._updateState({ type: QueryStateType.Failure, error, meta });\n const bearerAuthProvider = this._getBearerAuthProvider();\n\n if (\n !bearerAuthProvider ||\n options?._isUnauthorizedRetry ||\n error.status !== 401 ||\n !bearerAuthProvider.shouldRefreshOnUnauthorizedResponse\n ) {\n return failure();\n }\n\n const query = bearerAuthProvider._refreshQuery();\n if (!query) return failure();\n\n query.state$\n .pipe(\n takeUntilResponse(),\n takeUntil(this._onAbort$),\n tap((state) =>\n isQueryStateSuccess(state) ? this.execute({ ...options, _isUnauthorizedRetry: true }) : failure(),\n ),\n )\n .subscribe();\n\n break;\n }\n\n case 'cancel': {\n this._updateState({\n type: QueryStateType.Cancelled,\n meta,\n });\n\n break;\n }\n }\n }\n\n private _transformState(s: V2QueryState<Response>): Observable<V2QueryState<Data>> {\n if (!isQueryStateSuccess(s) || !this._queryConfig.entity?.get) {\n return of(s) as Observable<V2QueryState<Data>>;\n }\n\n const id = this._queryConfig.entity.id({ args: this._arguments, response: s.response });\n\n return this._queryConfig.entity\n .get({ args: this._arguments, id, response: s.response, store: this._queryConfig.entity.store })\n .pipe(map((v) => ({ ...s, response: v })));\n }\n\n private _updateState(s: V2QueryState<Response>) {\n // We need to use untracked here to avoid Angular's \"allowSignalWrites is false\" error when executing queries inside Angular's computed/effect signal functions.\n untracked(() => this._state$.next(s));\n }\n\n private _mockRequest(headers: RequestHeaders | undefined, meta: QueryStateMeta, options: ExecuteQueryOptions) {\n if (!this._arguments?.mock) return;\n\n const { delay = 200, error, response, retryIntoResponse = false, progress } = this._arguments.mock;\n const progressFileSize = progress?.fileSize ?? 1000000;\n const progressEventType = progress?.eventType ?? 'upload';\n const progressEventCount = progress?.eventCount ?? 5;\n const progressOmitTotal = progress?.omitTotal ?? false;\n const omitPartialText = progress?.omitPartialText ?? false;\n\n const finalResolveMock = () => {\n if (error) {\n this._updateEntityState({ error, headers: headers ?? {}, type: 'failure' }, meta, options);\n return;\n }\n\n this._updateEntityState(\n { response: response as Response, headers: headers ?? {}, type: 'success' },\n meta,\n options,\n );\n };\n\n if (progress) {\n interval(delay)\n .pipe(\n tap((a) => {\n if (a === progressEventCount + 1) {\n finalResolveMock();\n } else {\n const current = Math.min(progressFileSize * a, progressFileSize * progressEventCount);\n const percentage = (current / (progressFileSize * progressEventCount)) * 100;\n\n this._updateEntityState(\n {\n type: progressEventType === 'upload' ? 'upload-progress' : 'download-progress',\n headers: headers ?? {},\n progress: { current, ...(progressOmitTotal ? {} : { percentage, total: progressFileSize }) },\n partialText: omitPartialText ? undefined : `Partial text ${a}`,\n },\n meta,\n options,\n );\n }\n }),\n takeUntil(this._onAbort$),\n takeWhile((a) => a < progressEventCount + 1, true),\n )\n .subscribe();\n } else if (retryIntoResponse) {\n interval(delay)\n .pipe(\n tap((a) => {\n if (a === 3) {\n finalResolveMock();\n } else {\n const aModified = a + 1;\n this._updateEntityState(\n {\n type: 'delay-retry',\n headers: headers ?? {},\n retryDelay: 1000 + 1000 * aModified,\n retryNumber: aModified,\n },\n meta,\n options,\n );\n }\n }),\n takeUntil(this._onAbort$),\n takeWhile((a) => a < 3, true),\n )\n .subscribe();\n } else {\n timer(delay)\n .pipe(\n tap(() => finalResolveMock()),\n takeUntil(this._onAbort$),\n )\n .subscribe();\n }\n }\n\n /**\n * @internal\n */\n _addDependent(tNodeIndex: number) {\n if (!this._dependents[tNodeIndex]) {\n this._dependents[tNodeIndex] = 0;\n }\n\n this._dependents[tNodeIndex]++;\n\n this._dependentsChanged$.next(this._dependents);\n }\n\n /**\n * @internal\n */\n _removeDependent(tNodeIndex: number) {\n const count = this._dependents[tNodeIndex];\n if (count === undefined) {\n return;\n }\n\n if (this._dependents[tNodeIndex] !== undefined) {\n this._dependents[tNodeIndex]--;\n }\n\n if (count <= 1) {\n delete this._dependents[tNodeIndex];\n }\n\n this._dependentsChanged$.next(this._dependents);\n }\n\n /**\n * @internal\n */\n _hasDependents() {\n return Object.keys(this._dependents).length > 0;\n }\n}\n","import { AnyV2QueryCreator } from '../query-creator';\nimport { AuthProvider } from './auth-provider.types';\nimport { BasicAuthProvider } from './basic-auth-provider';\nimport { V2BearerAuthProvider } from './bearer-auth-provider';\nimport { CustomHeaderAuthProvider } from './custom-header-auth-provider';\n\nexport const isBasicAuthProvider = (authProvider: AuthProvider): authProvider is BasicAuthProvider =>\n authProvider instanceof BasicAuthProvider;\n\nexport const isBearerAuthProvider = <T extends AnyV2QueryCreator>(\n authProvider: AuthProvider,\n): authProvider is V2BearerAuthProvider<T> => authProvider instanceof V2BearerAuthProvider;\n\nexport const isCustomHeaderAuthProvider = (authProvider: AuthProvider): authProvider is CustomHeaderAuthProvider =>\n authProvider instanceof CustomHeaderAuthProvider;\n\nexport const decryptBearer = <Result = Record<string, unknown>>(token: string) => {\n try {\n const base64Url = token.split('.')[1];\n\n if (!base64Url) {\n return null;\n }\n\n const base64 = base64Url.replace(/-/g, '+').replace(/_/g, '/');\n const jsonPayload = decodeURIComponent(\n atob(base64)\n .split('')\n .map((c) => '%' + ('00' + c.charCodeAt(0).toString(16)).slice(-2))\n .join(''),\n );\n\n return JSON.parse(jsonPayload) as Result;\n } catch (error) {\n console.error(`Invalid bearer token: ${token}`, error);\n\n return null;\n }\n};\n","import { deleteCookie, getCookie, setCookie } from '@ethlete/core';\nimport { BehaviorSubject, Subject, takeUntil, tap, timer } from 'rxjs';\nimport {\n isQueryStateFailure,\n isQueryStateLoading,\n isQueryStateSuccess,\n switchQueryState,\n takeUntilResponse,\n} from '../query';\nimport { AnyV2QueryCreator, ConstructQuery, QueryResponseOf } from '../query-creator';\nimport {\n AuthBearerRefreshStrategy,\n AuthProvider,\n AuthProviderBearerConfig,\n TokenResponse,\n} from './auth-provider.types';\nimport { decryptBearer } from './auth-provider.utils';\n\nexport class V2BearerAuthProvider<T extends AnyV2QueryCreator> implements AuthProvider {\n private readonly _destroy$ = new Subject<boolean>();\n private readonly _currentRefreshQuery$ = new BehaviorSubject<ConstructQuery<T> | null>(null);\n\n private readonly _tokens$ = new BehaviorSubject<TokenResponse>({\n token: null,\n refreshToken: null,\n });\n\n get header() {\n return { Authorization: `Bearer ${this._tokens$.getValue().token}` };\n }\n\n get tokens$() {\n return this._tokens$.asObservable();\n }\n\n get tokens() {\n return this._tokens$.getValue();\n }\n\n get currentRefreshQuery$() {\n return this._currentRefreshQuery$.asObservable();\n }\n\n get currentRefreshQuery() {\n return this._currentRefreshQuery$.getValue();\n }\n\n get shouldRefreshOnUnauthorizedResponse() {\n return (\n !!this._config.refreshConfig &&\n (this._config.refreshConfig.refreshOnUnauthorizedResponse === undefined ||\n this._config.refreshConfig.refreshOnUnauthorizedResponse)\n );\n }\n\n constructor(public _config: AuthProviderBearerConfig<T>) {\n const cookieEnabled = _config.refreshConfig?.cookieEnabled ?? true;\n const cookieToken =\n _config.refreshConfig?.cookieName && cookieEnabled ? (getCookie(_config.refreshConfig.cookieName) ?? null) : null;\n\n this._tokens$.next({\n token: _config.token || null,\n refreshToken: _config.refreshConfig?.token || cookieToken || null,\n });\n\n if (!this.tokens.token && !this.tokens.refreshToken) {\n if (!_config.refreshConfig?.cookieName) {\n console.error(\n 'A BearerAuthProvider was created without token or refresh token. You should provide at least a cookieName where the refresh token might be stored.',\n );\n }\n\n return;\n }\n\n if (this.tokens.token) {\n this._prepareForRefresh();\n\n if (this.tokens.refreshToken && this._config.refreshConfig?.cookieName && cookieEnabled) {\n this._setCookie();\n }\n } else if (this.tokens.refreshToken) {\n this._refreshQuery();\n }\n }\n\n cleanUp(): void {\n this._destroy$.next(true);\n this._destroy$.unsubscribe();\n this._currentRefreshQuery$.next(null);\n\n if (this._config.refreshConfig?.cookieName) {\n this._deleteCookie();\n }\n }\n\n enableCookie() {\n if (!this._config.refreshConfig?.cookieName) {\n throw new Error('No cookie name was provided');\n }\n\n if (!this.tokens.refreshToken) {\n throw new Error('No refresh token was provided');\n }\n\n this._config.refreshConfig.cookieEnabled = true;\n\n this._setCookie();\n }\n\n disableCookie() {\n if (!this._config.refreshConfig?.cookieName) {\n throw new Error('No cookie name was provided');\n }\n\n this._config.refreshConfig.cookieEnabled = false;\n\n this._deleteCookie();\n }\n\n forceRefresh() {\n return this._refreshQuery();\n }\n\n private _setCookie() {\n if (!this._config.refreshConfig?.cookieName || !this.tokens.refreshToken) return;\n\n setCookie(\n this._config.refreshConfig.cookieName,\n this.tokens.refreshToken,\n this._config.refreshConfig.cookieExpiresInDays,\n this._config.refreshConfig.cookieDomain,\n this._config.refreshConfig.cookiePath,\n this._config.refreshConfig.cookieSameSite,\n );\n }\n\n private _deleteCookie() {\n if (!this._config.refreshConfig?.cookieName) return;\n\n deleteCookie(\n this._config.refreshConfig.cookieName,\n this._config.refreshConfig.cookiePath,\n this._config.refreshConfig.cookieDomain,\n );\n }\n\n private _prepareForRefresh() {\n if (!this.tokens.token || !this._config.refreshConfig) {\n return;\n }\n\n const bearer = decryptBearer(this.tokens.token);\n\n if (!bearer) {\n return;\n }\n\n const expiresInPropertyName = this._config.refreshConfig.expiresInPropertyName || 'exp';\n const expiresIn = bearer[expiresInPropertyName] as number | undefined;\n const fiveMinutes = 5 * 60 * 1000;\n const refreshBuffer = this._config.refreshConfig.refreshBuffer ?? fiveMinutes;\n\n if (expiresIn === undefined) {\n throw new Error(`Bearer token does not contain an '${expiresInPropertyName}' property`);\n }\n\n const remainingTime = new Date(expiresIn * 1000).getTime() - refreshBuffer - new Date().getTime();\n\n const strategy = this._config.refreshConfig.strategy ?? AuthBearerRefreshStrategy.BeforeExpiration;\n\n switch (strategy) {\n case AuthBearerRefreshStrategy.BeforeExpiration:\n timer(remainingTime)\n .pipe(takeUntil(this._destroy$))\n .subscribe(() => this._refreshQuery());\n break;\n }\n }\n\n /**\n * @internal\n */\n _refreshQuery() {\n const currentQuery = this._currentRefreshQuery$.getValue();\n\n if (isQueryStateLoading(currentQuery?.rawState)) {\n return currentQuery;\n }\n\n const currentRefreshToken = this.tokens.refreshToken;\n\n if (!currentRefreshToken || !this._config.refreshConfig) {\n return;\n }\n\n const args = this._config.refreshConfig.requestArgsAdapter?.({\n token: this.tokens.token,\n refreshToken: currentRefreshToken,\n }) ?? {\n body: { refreshToken: currentRefreshToken },\n };\n\n const query = this._config.refreshConfig.queryCreator\n .prepare(args)\n .execute({ skipCache: true, _isUnauthorizedRetry: true });\n\n this._currentRefreshQuery$.next(query as ConstructQuery<T>);\n\n this._currentRefreshQuery$\n .pipe(\n switchQueryState(),\n tap((state) => {\n if (isQueryStateSuccess(state)) {\n if (this._config.refreshConfig?.responseAdapter) {\n const tokens = this._config.refreshConfig.responseAdapter(state.response as QueryResponseOf<T>);\n\n this._tokens$.next(tokens);\n } else {\n this._tokens$.next({\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n token: (state.response as any)['token'],\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n refreshToken: (state.response as any)['refreshToken'],\n });\n }\n const cookieEnabled = this._config.refreshConfig?.cookieEnabled ?? true;\n\n if (this._config.refreshConfig?.cookieName && this.tokens.refreshToken && cookieEnabled) {\n this._setCookie();\n }\n\n this._prepareForRefresh();\n } else if (isQueryStateFailure(state)) {\n this._tokens$.next({ token: null, refreshToken: null });\n\n if (this._config.refreshConfig?.cookieName) {\n this._deleteCookie();\n }\n }\n }),\n takeUntilResponse(),\n takeUntil(this._destroy$),\n )\n .subscribe();\n\n return query;\n }\n}\n","import { signal } from '@angular/core';\nimport { toObservable } from '@angular/core/rxjs-interop';\nimport { createProvider } from '@ethlete/core';\n\nexport const [provideInfinityQueryResponseDelay, injectInfinityQueryResponseDelay] = createProvider(\n () => {\n const enabled = signal(false);\n const enabled$ = toObservable(enabled);\n\n return {\n enabled,\n enabled$,\n };\n },\n { name: 'Infinity Query Response Delay' },\n);\n","import { BehaviorSubject, Observable, combineLatest, map, of, shareReplay, switchMap, tap } from 'rxjs';\nimport { AnyLegacyQueryCreator } from '../interop';\nimport { filterSuccess } from '../query';\nimport { AnyV2QueryCreator, ConstructQuery, QueryDataOf, V2QueryArgsOf } from '../query-creator';\nimport { InfinityQueryConfig, InfinityQueryParamLocation } from './infinity-query.types';\n\nexport class InfinityQuery<\n QueryCreator extends AnyV2QueryCreator | AnyLegacyQueryCreator,\n Query extends ConstructQuery<QueryCreator>,\n Args extends V2QueryArgsOf<QueryCreator>,\n QueryResponse extends QueryDataOf<QueryCreator>,\n InfinityResponse extends unknown[],\n> {\n private readonly _queries$ = new BehaviorSubject<Query[]>([]);\n private readonly _currentPage$ = new BehaviorSubject<number | null>(null);\n private readonly _currentCalculatedPage$ = new BehaviorSubject<number | null>(null);\n private readonly _totalPages$ = new BehaviorSubject<number | null>(null);\n private readonly _itemsPerPage$ = new BehaviorSubject<number>(10);\n\n private readonly _data$ = this._queries$.pipe(\n switchMap((queries) => {\n if (!queries.length) {\n return of([]);\n }\n\n return combineLatest(\n queries.map((query) =>\n query.state$.pipe(\n filterSuccess(),\n map((state) => ({ state, query })),\n ),\n ),\n );\n }),\n tap((stateMaps) => {\n const lastState = stateMaps[stateMaps.length - 1]?.state;\n const lastQuery = stateMaps[stateMaps.length - 1]?.query;\n\n if (!lastState || !lastQuery) {\n return;\n }\n\n const totalPages =\n this._config.response.totalPagesExtractor?.({\n response: lastState.response as QueryResponse,\n itemsPerPage: this.itemsPerPage,\n args: lastQuery._arguments,\n }) ??\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n (lastState.response as any)?.totalPages ??\n null;\n\n this._totalPages$.next(totalPages);\n }),\n map((stateMaps) => {\n if (!stateMaps.length) {\n return null;\n }\n\n const fullData = stateMaps.reduce(\n (acc, stateMap) => {\n const valExtractFn = this._config?.response?.valueExtractor;\n let data = valExtractFn\n ? valExtractFn?.(stateMap.state.response as QueryResponse)\n : (stateMap.state.response as InfinityResponse);\n\n if (this._config.response.reverse) {\n data = [...data].reverse() as InfinityResponse;\n }\n\n if (this._config.response.appendItemsTo === 'start') {\n acc.unshift(...data);\n } else {\n acc.push(...data);\n }\n return acc;\n },\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n [] as any as InfinityResponse,\n );\n\n return fullData;\n }),\n shareReplay({ bufferSize: 1, refCount: true }),\n );\n\n private readonly _lastQuery$ = this._queries$.pipe(\n map((queries) => queries[queries.length - 1] ?? null),\n shareReplay({ bufferSize: 1, refCount: true }),\n );\n\n get currentPage$() {\n return this._currentPage$.asObservable();\n }\n\n get currentPage() {\n return this._currentPage$.getValue();\n }\n\n get currentCalculatedPage$() {\n return this._currentCalculatedPage$.asObservable();\n }\n\n get currentCalculatedPage() {\n return this._currentCalculatedPage$.getValue();\n }\n\n get totalPages$() {\n return this._totalPages$.asObservable();\n }\n\n get totalPages() {\n return this._totalPages$.getValue();\n }\n\n get itemsPerPage$() {\n return this._itemsPerPage$.asObservable();\n }\n\n get itemsPerPage() {\n return this._itemsPerPage$.getValue();\n }\n\n get data$() {\n return this._data$;\n }\n\n get currentQuery$() {\n return this._lastQuery$;\n }\n\n constructor(\n private _config: InfinityQueryConfig<QueryCreator, Args, QueryResponse, InfinityResponse>,\n private _destroy$: Observable<boolean>,\n ) {\n this._itemsPerPage$.next(this._config.limitParam?.value ?? 10);\n }\n\n nextPage() {\n const newPage = (this._currentPage$.value ?? 0) + 1;\n const calculatedPage =\n this._config?.pageParam?.valueCalculator?.({\n page: newPage,\n totalPages: this.totalPages,\n itemsPerPage: this.itemsPerPage,\n }) ?? newPage;\n\n if (this.totalPages !== null && newPage > this.totalPages) {\n console.error(\n 'Cannot load more pages, already at the end. Make sure to not render the infinity query trigger using *ngIf canLoadMore',\n );\n return;\n }\n\n const args = this._prepareArgs(this._config, calculatedPage);\n\n const query = this._config.queryCreator.prepare(args).execute() as Query;\n\n if (this._config.pollingInterval) {\n query.poll({ interval: this._config.pollingInterval, takeUntil: this._destroy$ });\n }\n\n this._queries$.next([...this._queries$.value, query]);\n\n this._currentPage$.next(newPage);\n this._currentCalculatedPage$.next(calculatedPage);\n }\n\n reset(\n newConfig?: Omit<\n InfinityQueryConfig<QueryCreator, Args, QueryResponse, InfinityResponse>,\n 'queryCreator' | 'response'\n >,\n ) {\n this._config = { ...this._config, ...(newConfig ?? {}) };\n\n this._currentPage$.next(null);\n this._currentCalculatedPage$.next(null);\n this._totalPages$.next(null);\n this._itemsPerPage$.next(this._config.limitParam?.value ?? 10);\n this._queries$.next([]);\n\n this.nextPage();\n }\n\n private _prepareArgs(config: InfinityQueryConfig<QueryCreator, Args, QueryResponse, InfinityResponse>, page: number) {\n const pageParamLocation = this._getPageParamLocation(config?.pageParam?.location);\n\n const pageArgs = {\n [pageParamLocation]: {\n [config?.pageParam?.key ?? 'page']: page,\n },\n };\n\n const limitParamLocation = this._getPageParamLocation(config?.limitParam?.location);\n\n const limitArgs = {\n [limitParamLocation]: {\n [config?.limitParam?.key ?? 'limit']: config?.limitParam?.value ?? 10,\n },\n };\n\n const defaultConfig = config?.defaultArgs ?? {};\n\n const mergedArgs =\n pageParamLocation === limitParamLocation\n ? {\n ...defaultConfig,\n [pageParamLocation]: {\n ...(config?.defaultArgs?.[pageParamLocation] ?? {}),\n ...pageArgs[limitParamLocation],\n ...limitArgs[limitParamLocation],\n },\n }\n : {\n ...defaultConfig,\n [pageParamLocation]: {\n ...(config?.defaultArgs?.[pageParamLocation] ?? {}),\n ...pageArgs[pageParamLocation],\n },\n [limitParamLocation]: {\n ...(config?.defaultArgs?.[limitParamLocation] ?? {}),\n ...limitArgs[limitParamLocation],\n },\n };\n\n return mergedArgs;\n }\n\n private _getPageParamLocation(location: InfinityQueryParamLocation | undefined) {\n const loc = location ?? 'query';\n\n switch (loc) {\n case 'path':\n return 'pathParams';\n case 'query':\n return 'queryParams';\n case 'body':\n return 'body';\n case 'header':\n return 'headers';\n case 'variable':\n return 'variables';\n default:\n throw new Error(`Invalid pageParamLocation: ${loc}`);\n }\n }\n}\n","import { AnyLegacyQueryCreator } from '../interop';\nimport { AnyV2QueryCreator, QueryDataOf, V2QueryArgsOf } from '../query-creator';\nimport { InfinityQueryConfig, PageParamCalculatorOptions } from './infinity-query.types';\n\nexport const createInfinityQueryConfig = <\n QueryCreator extends AnyV2QueryCreator | AnyLegacyQueryCreator,\n Args extends V2QueryArgsOf<QueryCreator>,\n QueryResponse extends QueryDataOf<QueryCreator>,\n InfinityResponse extends unknown[],\n>(\n config: InfinityQueryConfig<QueryCreator, Args, QueryResponse, InfinityResponse>,\n) => config;\n\nexport const skipPaginationPageParamCalculator = ({ page, itemsPerPage }: PageParamCalculatorOptions) =>\n itemsPerPage * (page - 1);\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport {\n ChangeDetectorRef,\n Directive,\n ErrorHandler,\n inject,\n InjectionToken,\n Input,\n TemplateRef,\n ViewContainerRef,\n} from '@angular/core';\nimport { toSignal } from '@angular/core/rxjs-interop';\nimport { createDestroy } from '@ethlete/core';\nimport { BehaviorSubject, combineLatest, Subject, takeUntil, tap, withLatestFrom } from 'rxjs';\nimport { InfinityQuery, InfinityQueryConfig, InfinityQueryOf } from '../infinite-query';\nimport { AnyLegacyQueryCreator, isLegacyQuery } from '../interop';\nimport {\n BaseArguments,\n isQueryStateFailure,\n isQueryStateLoading,\n isQueryStateSuccess,\n switchQueryState,\n} from '../query';\nimport { AnyV2QueryCreator, ConstructQuery } from '../query-creator';\nimport { RequestError } from '../request';\nimport {\n injectInfinityQueryResponseDelay,\n provideInfinityQueryResponseDelay,\n} from './infinity-query-response-delay-provider';\n\ntype InfinityQueryContext<\n Q extends InfinityQueryConfig<DirectiveQueryCreator, BaseArguments | undefined, any, unknown[]>,\n> = {\n $implicit: Q['response']['arrayType'] | null;\n etInfinityQuery: Q['response']['arrayType'] | null;\n loading: boolean;\n error: RequestError<unknown> | null;\n\n isFirstLoad: boolean;\n canLoadMore: boolean;\n currentPage: number | null;\n currentCalculatedPage: number | null;\n totalPages: number | null;\n itemsPerPage: number | null;\n\n currentQuery: ConstructQuery<Q['queryCreator']> | null;\n};\n\nexport const INFINITY_QUERY_TOKEN = new InjectionToken<InfinityQueryDirective<any>>('INFINITY_QUERY_TOKEN');\n\ntype DirectiveQueryCreator = AnyV2QueryCreator | AnyLegacyQueryCreator;\n\n@Directive({\n selector: '[etInfinityQuery]',\n exportAs: 'etInfinityQuery',\n\n providers: [\n { provide: INFINITY_QUERY_TOKEN, useExisting: InfinityQueryDirective },\n provideInfinityQueryResponseDelay(),\n ],\n})\nexport class InfinityQueryDirective<\n Q extends InfinityQueryConfig<DirectiveQueryCreator, BaseArguments | undefined, any, unknown[]>,\n> {\n private readonly _queryConfigChanged$ = new Subject<boolean>();\n private readonly _viewContext: InfinityQueryContext<Q> = {\n $implicit: null,\n etInfinityQuery: null,\n loading: false,\n error: null,\n\n isFirstLoad: false,\n canLoadMore: false,\n currentPage: null,\n currentCalculatedPage: null,\n totalPages: null,\n itemsPerPage: null,\n\n currentQuery: null,\n };\n private _infinityQueryInstance: InfinityQueryOf<Q> | null = null;\n\n private readonly _destroy$ = createDestroy();\n private readonly _cdr = inject(ChangeDetectorRef);\n private readonly _viewContainerRef = inject(ViewContainerRef);\n private readonly _mainTemplateRef = inject(TemplateRef<InfinityQueryContext<Q>>);\n private readonly _errorHandler = inject(ErrorHandler);\n private readonly _infinityQueryResponseDelay = injectInfinityQueryResponseDelay({ host: true });\n\n private readonly _data$ = new BehaviorSubject<Q['response']['arrayType']>([]);\n\n // TODO: Skipped for migration because:\n // Accessor inputs cannot be migrated as they are too complex.\n @Input('etInfinityQuery')\n get infinityQuery(): Q {\n return this._infinityQuery;\n }\n set infinityQuery(v: Q) {\n this._cleanup();\n\n if (v.enabled === false) {\n this._infinityQuery = v;\n this._infinityQueryInstance = null;\n return;\n }\n\n this._infinityQuery = v;\n this._infinityQueryInstance = this._setupInfinityQuery(v);\n this._infinityQueryInstance.nextPage();\n }\n private _infinityQuery!: Q;\n\n get context() {\n return this._viewContext;\n }\n\n get instance() {\n return this._infinityQueryInstance;\n }\n\n get data$() {\n return this._data$.asObservable();\n }\n\n data = toSignal(this._data$, { requireSync: true });\n\n static ngTemplateContextGuard<\n Q extends InfinityQueryConfig<DirectiveQueryCreator, BaseArguments | undefined, any, unknown[]>,\n >(dir: InfinityQueryDirective<Q>, ctx: unknown): ctx is InfinityQueryContext<Q> {\n return true;\n }\n\n constructor() {\n this._viewContainerRef.createEmbeddedView(this._mainTemplateRef, this._viewContext);\n }\n\n private _setupInfinityQuery(config: Q) {\n const instance = new InfinityQuery(config as any, this._destroy$) as InfinityQueryOf<Q>;\n\n combineLatest([\n instance.currentQuery$.pipe(switchQueryState(), withLatestFrom(instance.currentQuery$)),\n this._infinityQueryResponseDelay.enabled$,\n instance.data$,\n ])\n .pipe(\n tap(([[state, currentQuery], isDelayed, infinityArray]) => {\n this._viewContext.currentPage = instance.currentPage;\n this._viewContext.totalPages = instance.totalPages;\n this._viewContext.itemsPerPage = instance.itemsPerPage;\n this._viewContext.canLoadMore =\n (instance.totalPages !== null &&\n instance.currentPage !== null &&\n instance.totalPages > instance.currentPage) ||\n false;\n this._viewContext.currentCalculatedPage = instance.currentCalculatedPage;\n this._viewContext.currentQuery = currentQuery;\n\n if (isQueryStateLoading(state) || isDelayed || !infinityArray) {\n this._viewContext.loading = state ? state.meta.triggeredVia !== 'poll' : true;\n this._viewContext.error = null;\n this._viewContext.isFirstLoad = this.context.etInfinityQuery === null;\n } else if (isQueryStateFailure(state)) {\n this._viewContext.loading = false;\n this._viewContext.error = state.error;\n this._viewContext.isFirstLoad = false;\n\n if (isLegacyQuery(currentQuery)) {\n this._errorHandler.handleError(state.error.httpErrorResponse);\n }\n } else if (isQueryStateSuccess(state)) {\n this._viewContext.loading = false;\n this._viewContext.error = null;\n this._viewContext.isFirstLoad = false;\n this._viewContext.etInfinityQuery = this._viewContext.$implicit =\n infinityArray as Q['response']['arrayType'];\n this._data$.next(infinityArray);\n }\n\n this._cdr.markForCheck();\n }),\n takeUntil(this._destroy$),\n takeUntil(this._queryConfigChanged$),\n )\n .subscribe();\n\n return instance;\n }\n\n loadNextPage() {\n if (!this._infinityQueryInstance) {\n return;\n }\n\n if (this._viewContext.loading) {\n return;\n }\n\n this._infinityQueryInstance.nextPage();\n }\n\n reset(newConfig?: Omit<Q, 'queryCreator' | 'response'>) {\n if (!this._infinityQueryInstance) {\n return;\n }\n\n this._infinityQueryInstance.reset(newConfig as any);\n }\n\n private _cleanup() {\n this._queryConfigChanged$.next(true);\n\n this._viewContext.loading = false;\n this._viewContext.error = null;\n this._viewContext.etInfinityQuery = null;\n this._viewContext.$implicit = null;\n\n this._viewContext.isFirstLoad = false;\n this._viewContext.canLoadMore = false;\n this._viewContext.currentPage = null;\n this._viewContext.itemsPerPage = null;\n this._viewContext.totalPages = null;\n\n this._viewContext.currentQuery = null;\n\n this._data$.next([]);\n }\n}\n","import { computed, Directive, ElementRef, inject, input, OnDestroy, OnInit } from '@angular/core';\nimport { fromEvent, Subject, takeUntil } from 'rxjs';\nimport { INFINITY_QUERY_TOKEN, InfinityQueryDirective } from './infinity-query.directive';\n\n@Directive({\n selector: '[etInfinityQueryTrigger], et-infinity-query-trigger',\n})\nexport class InfinityQueryTriggerDirective implements OnInit, OnDestroy {\n private _elementRef = inject(ElementRef<HTMLElement>);\n private _infinityQuery = inject(INFINITY_QUERY_TOKEN);\n\n private _destroy = new Subject<boolean>();\n private _observer: IntersectionObserver | null = null;\n\n click$ = fromEvent(this._elementRef.nativeElement, 'click');\n\n readonly scrollContainerSelector = input<string | null>(null);\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n infinityQueryOverride = input<InfinityQueryDirective<any> | null>(null);\n\n infinityQuery = computed(() => this.infinityQueryOverride() ?? this._infinityQuery);\n\n ngOnInit(): void {\n const isInteractive = this._elementRef.nativeElement.tagName === 'BUTTON';\n\n if (isInteractive) {\n this.click$.pipe(takeUntil(this._destroy)).subscribe(() => this.infinityQuery().loadNextPage());\n } else {\n this._setupIntersectionObserver();\n }\n }\n\n ngOnDestroy(): void {\n this._destroy.next(true);\n this._destroy.unsubscribe();\n this._observer?.disconnect();\n }\n\n private _setupIntersectionObserver(): void {\n const scrollContainerSelector = this.scrollContainerSelector();\n this._observer = new IntersectionObserver(\n (entries) => {\n const entry = entries[0];\n\n if (!entry) return;\n\n if (entry.isIntersecting && !this.infinityQuery().context.loading) {\n this.infinityQuery().loadNextPage();\n }\n },\n {\n root: scrollContainerSelector ? document.querySelector(scrollContainerSelector) : null,\n rootMargin: '0px',\n threshold: [0.25, 0.5, 0.75, 1],\n },\n );\n\n this._observer.observe(this._elementRef.nativeElement);\n }\n}\n","import {\n ChangeDetectorRef,\n Directive,\n ErrorHandler,\n TemplateRef,\n ViewContainerRef,\n effect,\n inject,\n input,\n untracked,\n} from '@angular/core';\nimport { AnyLegacyQuery, isLegacyQuery } from '../interop';\nimport {\n AnyQueryCollection,\n AnyV2Query,\n QueryCollectionKeysOf,\n QueryOf,\n extractQuery,\n isQueryCollection,\n isQueryStateCancelled,\n isQueryStateFailure,\n isQueryStateLoading,\n isQueryStatePrepared,\n isQueryStateSuccess,\n} from '../query';\nimport { QueryDataOf } from '../query-creator';\nimport { RequestError, RequestProgress } from '../request';\nimport { queryStateSignal } from '../utils';\n\nexport type QueryDirectiveContext<Q extends QueryDirectiveType | null> = {\n /**\n * The queries's response data.\n */\n $implicit: QueryDataOf<QueryOf<Q>> | null;\n\n /**\n * The queries's response data.\n */\n etQuery: QueryDataOf<QueryOf<Q>> | null;\n\n /**\n * The query used inside this directive. Useful if for instance the query gets unwrapped via async pipe inside the directive.\n */\n query: QueryOf<Q> | null;\n\n /**\n * Is true when the query is triggered by user interaction.\n */\n loading: boolean;\n\n /**\n * Is true when the query is triggered by either polling or auto refresh event.\n */\n refreshing: boolean;\n\n /**\n * The query's progress state.\n */\n progress: RequestProgress | null;\n\n /**\n * The query's error state.\n */\n error: RequestError<unknown> | null;\n\n /**\n * The query's scope (only available when the query is a collection)\n */\n scope: QueryCollectionKeysOf<Q> | null;\n};\n\nexport type QueryDirectiveType = AnyV2Query | AnyLegacyQuery | AnyQueryCollection;\n\n@Directive({\n selector: '[etQuery]',\n})\nexport class QueryDirective<Q extends QueryDirectiveType | null> {\n private errorHandler = inject(ErrorHandler);\n private cdr = inject(ChangeDetectorRef);\n\n private readonly _viewContext: QueryDirectiveContext<Q> = {\n $implicit: null,\n etQuery: null,\n loading: false,\n refreshing: false,\n error: null,\n progress: null,\n scope: null,\n query: null,\n };\n\n query = input.required<Q>({ alias: 'etQuery' });\n\n cache = input(false, { alias: 'etQueryCache' });\n\n queryState = queryStateSignal(this.query);\n\n static ngTemplateContextGuard<Q extends QueryDirectiveType | null>(\n dir: QueryDirective<Q>,\n ctx: unknown,\n ): ctx is QueryDirectiveContext<Q> {\n return true;\n }\n\n constructor() {\n inject(ViewContainerRef).createEmbeddedView(inject(TemplateRef), this._viewContext);\n\n effect(() => {\n const query = extractQuery(this.query());\n\n untracked(() => {\n if (!query) {\n this._viewContext.$implicit = null;\n this._viewContext.etQuery = null;\n this._viewContext.loading = false;\n this._viewContext.refreshing = false;\n this._viewContext.error = null;\n this._viewContext.progress = null;\n this._viewContext.scope = null;\n this._viewContext.query = null;\n return;\n }\n\n if (isQueryStatePrepared(query.rawState) || isQueryStateCancelled(query.rawState)) {\n query.execute();\n }\n\n this._viewContext.scope = isQueryCollection(query) ? (query.type as QueryCollectionKeysOf<Q>) : null;\n this._viewContext.query = query as QueryOf<Q>;\n });\n });\n\n effect(() => {\n const state = this.queryState();\n const cache = this.cache();\n\n untracked(() => {\n if (isQueryStateLoading(state)) {\n this._viewContext.progress = state.progress ?? null;\n this._viewContext.refreshing = state.meta.triggeredVia === 'auto' || state.meta.triggeredVia === 'poll';\n\n if (!this._viewContext.refreshing) {\n this._viewContext.loading = true;\n }\n } else {\n this._viewContext.loading = false;\n this._viewContext.refreshing = false;\n this._viewContext.progress = null;\n }\n\n if (isQueryStateSuccess(state)) {\n this._viewContext.etQuery = state.response as QueryDataOf<QueryOf<Q>>;\n this._viewContext.$implicit = state.response as QueryDataOf<QueryOf<Q>>;\n } else if (!cache) {\n this._viewContext.etQuery = null;\n this._viewContext.$implicit = null;\n }\n\n if (isQueryStateFailure(state)) {\n this._viewContext.error = state.error;\n\n if (isLegacyQuery(extractQuery(this.query()))) {\n this.errorHandler.handleError(state.error.httpErrorResponse);\n }\n } else {\n this._viewContext.error = null;\n }\n\n this.cdr.markForCheck();\n });\n });\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { AnyV2Query } from '../../query';\n\n@Pipe({ name: 'queryShortName' })\nexport class QueryShortNamePipe implements PipeTransform {\n transform(value: AnyV2Query) {\n const route = value._routeWithParams;\n\n if (typeof route === 'string') {\n // given an url that looks like this: https://api.github.com/repos/EladBezalel/etimo-achievements or https://api.github.com/repos/EladBezalel/etimo-achievements?test=1&test2=2\n // we want to extract the last 3 parts of the url, so we get: repos/EladBezalel/etimo-achievements\n\n const parts = route.split('/');\n\n if (parts.length > 3) {\n return `.../${parts.slice(parts.length - 3).join('/')}`;\n }\n\n return route;\n }\n\n return route as string;\n }\n}\n","import { InjectionToken, isDevMode } from '@angular/core';\nimport { V2QueryClient } from '../../query-client';\n\nexport type QueryClientDevtoolsOptions = {\n displayName?: string;\n client: V2QueryClient;\n};\n\nexport const QUERY_CLIENT_DEVTOOLS_TOKEN = new InjectionToken<QueryClientDevtoolsOptions[]>(\n 'QUERY_CLIENT_DEVTOOLS_TOKEN',\n);\n\nexport const provideQueryClientForDevtools = (queryClient: QueryClientDevtoolsOptions) => {\n if (!isDevMode()) {\n console.warn(\n 'You are using the Query Devtools in production mode. This increases the size of your bundle and should only be used for development purposes.',\n );\n }\n\n return {\n provide: QUERY_CLIENT_DEVTOOLS_TOKEN,\n useValue: queryClient,\n multi: true,\n };\n};\n","import { AsyncPipe, JsonPipe, NgClass } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n TrackByFunction,\n ViewEncapsulation,\n computed,\n effect,\n inject,\n signal,\n untracked,\n} from '@angular/core';\nimport { takeUntilDestroyed, toObservable, toSignal } from '@angular/core/rxjs-interop';\nimport { FormControl, ReactiveFormsModule } from '@angular/forms';\nimport { createDestroy, nextFrame } from '@ethlete/core';\nimport { BehaviorSubject, map, of, startWith, switchMap, takeUntil, tap } from 'rxjs';\nimport { BasicAuthProvider, CustomHeaderAuthProvider, isBearerAuthProvider } from '../../../auth';\nimport { QueryDirective } from '../../../directives';\nimport { EntityStore } from '../../../entity';\nimport { AnyV2Query, isGqlQueryConfig } from '../../../query';\nimport { QueryShortNamePipe } from '../../pipes';\nimport { QUERY_CLIENT_DEVTOOLS_TOKEN, QueryClientDevtoolsOptions } from '../../utils';\n\ntype QueryDevtoolsSnapLayout = 'full' | 'left' | 'right' | 'bottom' | 'top';\ntype QueryListMode = 'live' | 'history';\ntype QueryViewMode = 'query' | 'authProvider';\n\n@Component({\n selector: 'et-query-devtools',\n templateUrl: './query-devtools.component.html',\n styleUrls: ['./query-devtools.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.ShadowDom,\n host: {\n class: 'et-query-devtools',\n },\n imports: [AsyncPipe, JsonPipe, ReactiveFormsModule, NgClass, QueryShortNamePipe, QueryDirective],\n})\nexport class QueryDevtoolsComponent {\n private readonly _cdr = inject(ChangeDetectorRef);\n protected readonly _destroy$ = createDestroy();\n\n protected readonly queryClientConfigs = inject(QUERY_CLIENT_DEVTOOLS_TOKEN);\n\n protected readonly isOpen = signal(false);\n protected readonly isTranslucent = signal(false);\n protected readonly snapLayout = signal<QueryDevtoolsSnapLayout>('full');\n protected readonly queryListMode = signal<QueryListMode>('live');\n protected readonly viewMode = signal<QueryViewMode>('query');\n\n protected showResponse = signal(false);\n protected showRawResponse = signal(false);\n protected showQueryConfig = signal(false);\n protected showEntityStoreValue = signal(false);\n protected showArguments = signal(false);\n\n protected selectedClientIdCtrl = new FormControl(0);\n\n protected readonly selectedClientId = toSignal(\n this.selectedClientIdCtrl.valueChanges.pipe(startWith(this.selectedClientIdCtrl.value)),\n );\n protected readonly selectedQueryId = signal<number | null>(null);\n\n protected readonly selectedClientConfig = computed(() => {\n if (this.queryClientConfigs.length === 1) {\n return this.queryClientConfigs[0]!;\n }\n\n const index = this.selectedClientId() ?? 0;\n\n const cfg = this.queryClientConfigs[index];\n\n if (!cfg) {\n return this.queryClientConfigs[0]!;\n }\n\n return cfg;\n });\n\n protected readonly queryStore = computed(() => {\n const config = this.selectedClientConfig();\n\n return config.client._store;\n });\n\n protected readonly queryStore$ = toObservable(this.queryStore);\n\n private readonly _queries$ = new BehaviorSubject<AnyV2Query[]>([]);\n protected readonly queries = toSignal(this._queries$);\n\n protected readonly selectedQuery = computed(() => {\n const id = this.selectedQueryId();\n const mode = this.queryListMode();\n\n if (id === null || !mode) {\n return null;\n }\n\n if (mode === 'live') {\n return this.queries()?.find((q) => q._id === id) ?? null;\n }\n\n return this.queryHistory$.getValue()?.find((q) => q._id === id) ?? null;\n });\n\n protected readonly selectedQuery$ = toObservable(this.selectedQuery);\n\n protected selectedQueryEntityStore = computed(() => {\n const query = this.selectedQuery();\n\n if (!query) return null;\n\n return query.store as EntityStore<unknown> | null;\n });\n\n protected readonly selectedQueryEntityStore$ = toObservable(this.selectedQueryEntityStore);\n\n protected readonly selectedQueryEntityStoreValue$ = this.selectedQueryEntityStore$.pipe(\n switchMap(\n (s) =>\n s?._change$.pipe(\n startWith(''),\n map(() => {\n if (!s._dictionary) return null;\n\n return Array.from(s._dictionary).reduce(\n (obj, [key, value]) => {\n obj[key] = value;\n return obj;\n },\n {} as Record<string, unknown>,\n );\n }),\n ) ?? of(null),\n ),\n );\n\n protected readonly queryHistory$ = new BehaviorSubject<AnyV2Query[]>([]);\n\n protected readonly stringifiedQueryConfig = computed(() => {\n const query = this.selectedQuery();\n\n if (!query) return null;\n\n const cfg = query._queryConfig;\n const route =\n typeof cfg.route === 'string' ? cfg.route : cfg.route ? cfg.route({}).replace(/undefined/g, ':param') : null;\n\n const sharedCfg = {\n method: cfg.method,\n secure: cfg.secure,\n route,\n reportProgress: cfg.reportProgress,\n responseType: cfg.responseType,\n withCredentials: cfg.withCredentials,\n autoRefreshOn: cfg.autoRefreshOn,\n enableSmartPolling: cfg.enableSmartPolling,\n hasEntityStore: !!cfg.entity,\n };\n\n if (isGqlQueryConfig(cfg)) {\n return {\n ...sharedCfg,\n query: cfg.query,\n transferVia: cfg.transferVia,\n };\n }\n\n return {\n ...sharedCfg,\n };\n });\n\n protected readonly authProvider = toSignal(\n toObservable(this.selectedClientConfig).pipe(switchMap((c) => c.client.authProvider$)),\n );\n\n protected readonly authProviderDetails = computed(() => {\n const provider = this.authProvider();\n\n if (!provider) return null;\n\n if (provider instanceof CustomHeaderAuthProvider) {\n return {\n type: 'CustomHeaderAuthProvider',\n header: () => provider.header,\n provider: provider,\n config: {\n name: provider._config.name,\n value: provider._config.value,\n },\n } as const;\n } else if (provider instanceof BasicAuthProvider) {\n return {\n type: 'BasicAuthProvider',\n header: () => provider.header,\n provider: provider,\n config: {\n username: provider._config.username,\n password: provider._config.password,\n },\n } as const;\n } else if (isBearerAuthProvider(provider)) {\n const refreshCfg = provider._config.refreshConfig;\n\n return {\n type: 'BearerAuthProvider',\n header: () => provider.header,\n provider: provider,\n config: {\n token: provider._config.token,\n refreshConfig: {\n refreshOnUnauthorizedResponse: refreshCfg?.refreshOnUnauthorizedResponse ?? 'true (default)',\n token: refreshCfg?.token,\n cookieName: refreshCfg?.cookieName,\n cookieDomain: refreshCfg?.cookieDomain ?? 'current origin (default)',\n cookieExpiresInDays: refreshCfg?.cookieExpiresInDays ?? '30 (default)',\n cookiePath: refreshCfg?.cookiePath ?? '/ (default)',\n cookieEnabled: refreshCfg?.cookieEnabled ?? 'true (default)',\n cookieSameSite: refreshCfg?.cookieSameSite ?? 'lax (default)',\n refreshBuffer: refreshCfg?.refreshBuffer ?? '30000 (default)',\n expiresInPropertyName: refreshCfg?.expiresInPropertyName ?? 'exp (default)',\n strategy: refreshCfg?.strategy ?? 'AuthBearerRefreshStrategy.BeforeExpiration (default)',\n requestArgsAdapter: refreshCfg?.requestArgsAdapter ? 'custom' : 'default',\n responseAdapter: refreshCfg?.responseAdapter ? 'custom' : 'default',\n },\n },\n } as const;\n } else {\n return {\n type: 'UnknownAuthProvider',\n header: () => provider.header,\n provider: provider,\n config: {},\n } as const;\n }\n });\n\n constructor() {\n this.selectedClientIdCtrl.valueChanges\n .pipe(\n tap(() => this.clearQueryHistory()),\n takeUntil(this._destroy$),\n )\n .subscribe();\n\n this.selectedQuery$\n .pipe(\n switchMap((q) => q?._dependentsChanged$ ?? of(null)),\n tap(() => this._cdr.markForCheck()),\n takeUntilDestroyed(),\n )\n .subscribe();\n\n toObservable(this.authProviderDetails)\n .pipe(switchMap((ap) => (ap?.type === 'BearerAuthProvider' ? ap.provider.tokens$ : of(null))))\n .pipe(\n tap(() => this._cdr.markForCheck()),\n takeUntilDestroyed(),\n )\n .subscribe();\n\n this.queryStore$\n .pipe(\n switchMap((s) =>\n s.storeChange$.pipe(\n startWith(''),\n map(() => s._store),\n tap((s) => {\n untracked(() => {\n this._queries$.next(Array.from(s.values()));\n });\n }),\n takeUntil(this._destroy$),\n ),\n ),\n )\n .subscribe();\n\n this.queryStore$\n .pipe(\n switchMap((s) =>\n s.queryCreated$.pipe(\n tap((query) => {\n const currentHistory = this.queryHistory$.getValue();\n\n if (!currentHistory) return;\n\n const currentHistoryClone = [...currentHistory];\n\n if (!currentHistory.some((q) => q._id === query._id)) {\n currentHistoryClone.unshift(query);\n }\n\n currentHistoryClone.splice(50);\n\n this.queryHistory$.next(currentHistoryClone);\n }),\n takeUntil(this._destroy$),\n ),\n ),\n )\n .subscribe();\n\n this._queries$\n .pipe(\n tap((queries) => {\n const currentHistory = this.queryHistory$.getValue();\n\n if (!queries || !currentHistory) return;\n\n const currentHistoryClone = [...currentHistory];\n\n for (const query of queries) {\n if (!currentHistoryClone.some((q) => q._id === query._id)) {\n currentHistoryClone.unshift(query);\n }\n }\n\n currentHistoryClone.splice(50);\n\n this.queryHistory$.next(currentHistoryClone);\n }),\n takeUntil(this._destroy$),\n )\n .subscribe();\n\n effect(() => {\n const devtoolConfig = {\n isOpen: this.isOpen(),\n isTranslucent: this.isTranslucent(),\n snapLayout: this.snapLayout(),\n showResponse: this.showResponse(),\n showRawResponse: this.showRawResponse(),\n showQueryConfig: this.showQueryConfig(),\n showEntityStoreValue: this.showEntityStoreValue(),\n showArguments: this.showArguments(),\n selectedClientId: this.selectedClientId(),\n selectedQueryPath: this.selectedQueryId(),\n queryListMode: this.queryListMode(),\n viewMode: this.viewMode(),\n };\n\n window.localStorage.setItem('ethlete:query:devtools', JSON.stringify(devtoolConfig));\n });\n\n const initialConfig = window.localStorage.getItem('ethlete:query:devtools');\n\n if (initialConfig) {\n const parsed = JSON.parse(initialConfig);\n\n this.isOpen.set(parsed.isOpen ?? false);\n this.isTranslucent.set(parsed.isTranslucent ?? false);\n this.snapLayout.set(parsed.snapLayout ?? 'full');\n this.showResponse.set(parsed.showResponse ?? false);\n this.showRawResponse.set(parsed.showRawResponse ?? false);\n this.showQueryConfig.set(parsed.showQueryConfig ?? false);\n this.showEntityStoreValue.set(parsed.showEntityStoreValue ?? false);\n this.showArguments.set(parsed.showArguments ?? false);\n this.selectedClientIdCtrl.setValue(parsed.selectedClientId ?? 0);\n this.selectedQueryId.set(parsed.selectedQueryPath ?? null);\n this.queryListMode.set(parsed.queryListMode ?? 'live');\n this.viewMode.set(parsed.viewMode ?? 'query');\n }\n }\n\n protected trackByClient: TrackByFunction<QueryClientDevtoolsOptions> = (_, { client }) => client.config.baseRoute;\n protected trackByQuery: TrackByFunction<AnyV2Query> = (_, { _id }) => _id;\n\n protected toggleOpen() {\n this.isOpen.set(!this.isOpen());\n }\n\n protected toggleTranslucent() {\n this.isTranslucent.set(!this.isTranslucent());\n }\n\n protected toggleShowResponse() {\n this.showResponse.set(!this.showResponse());\n\n nextFrame(() => {\n this._cdr.markForCheck();\n });\n }\n\n protected toggleShowQueryConfig() {\n this.showQueryConfig.set(!this.showQueryConfig());\n }\n\n protected toggleShowRawResponse() {\n this.showRawResponse.set(!this.showRawResponse());\n }\n\n protected toggleShowEntityStoreValue() {\n this.showEntityStoreValue.set(!this.showEntityStoreValue());\n }\n\n protected toggleShowArguments() {\n this.showArguments.set(!this.showArguments());\n }\n\n protected selectSnapLayout(layout: QueryDevtoolsSnapLayout) {\n this.snapLayout.set(layout);\n }\n\n protected selectQueryListMode(mode: QueryListMode) {\n this.queryListMode.set(mode);\n }\n\n protected selectViewMode(mode: QueryViewMode) {\n this.viewMode.set(mode);\n }\n\n protected selectQuery(query: AnyV2Query) {\n this.selectedQueryId.set(query._id);\n }\n\n protected clearQueryHistory() {\n this.queryHistory$.next([]);\n }\n}\n","@if (!isOpen()) {\n <button (click)=\"toggleOpen()\" class=\"et-query-devtools-open-btn et-qd-chip\">Query Devtools</button>\n}\n\n@if (isOpen()) {\n <div\n [class.et-query-devtools-container--transparent]=\"isTranslucent()\"\n class=\"et-query-devtools-container et-query-devtools-container--snap-{{ snapLayout() }}\"\n >\n <header class=\"et-qd-header\">\n <h3 class=\"et-qd-header__title\">Query Devtools</h3>\n\n <div class=\"et-qd-header__select\">\n <label for=\"et-query-client-instance\">Client instance</label>\n <select [formControl]=\"selectedClientIdCtrl\" id=\"et-query-client-instance\">\n @for (clientConfig of queryClientConfigs; track trackByClient(i, clientConfig); let i = $index) {\n <option [value]=\"i\">\n {{ clientConfig.displayName ?? clientConfig.client.config.baseRoute }}\n </option>\n }\n </select>\n </div>\n\n <button (click)=\"toggleOpen()\" class=\"et-qd-btn et-qd-btn-secondary\">Close</button>\n </header>\n\n <div class=\"et-qd-sub-header\">\n <button\n [ngClass]=\"{ 'et-qd-chip-secondary': !isTranslucent() }\"\n (click)=\"toggleTranslucent()\"\n class=\"et-qd-chip et-qd-translucent-clickable\"\n >\n Translucent\n </button>\n <div class=\"et-qd-sub-header__divider\"></div>\n <button\n [ngClass]=\"{ 'et-qd-chip-secondary': snapLayout() !== 'full' }\"\n (click)=\"selectSnapLayout('full')\"\n class=\"et-qd-chip\"\n >\n Fullscreen\n </button>\n <button\n [ngClass]=\"{ 'et-qd-chip-secondary': snapLayout() !== 'top' }\"\n (click)=\"selectSnapLayout('top')\"\n class=\"et-qd-chip\"\n >\n Top\n </button>\n <button\n [ngClass]=\"{ 'et-qd-chip-secondary': snapLayout() !== 'bottom' }\"\n (click)=\"selectSnapLayout('bottom')\"\n class=\"et-qd-chip\"\n >\n Bottom\n </button>\n <button\n [ngClass]=\"{ 'et-qd-chip-secondary': snapLayout() !== 'left' }\"\n (click)=\"selectSnapLayout('left')\"\n class=\"et-qd-chip\"\n >\n Left\n </button>\n <button\n [ngClass]=\"{ 'et-qd-chip-secondary': snapLayout() !== 'right' }\"\n (click)=\"selectSnapLayout('right')\"\n class=\"et-qd-chip\"\n >\n Right\n </button>\n </div>\n\n @if (selectedClientConfig(); as cfg) {\n <div class=\"et-qd-client\">\n <p class=\"et-qd-client__title\">{{ cfg.displayName ?? cfg.client.config.baseRoute }}</p>\n\n <div class=\"et-qd-client__actions\">\n <button (click)=\"cfg.client._store.refreshQueriesInUse()\" class=\"et-qd-chip\">Refresh all</button>\n <button (click)=\"cfg.client._store.refreshQueriesInUse({ ignoreCacheValidity: true })\" class=\"et-qd-chip\">\n Refresh all (ignore caches)\n </button>\n <button\n (click)=\"cfg.client._store.refreshQueriesInUse({ ignoreCacheValidity: true, purgeUnused: true })\"\n class=\"et-qd-chip\"\n >\n Refresh all (ignore caches & purge unused)\n </button>\n </div>\n </div>\n }\n\n @if (selectedClientConfig(); as cfg) {\n <div class=\"et-qd-queries\">\n <p class=\"et-qd-queries__title\">Inspector</p>\n <div class=\"et-qd-queries__actions\">\n <button\n [ngClass]=\"{ 'et-qd-chip-secondary': queryListMode() !== 'live' || viewMode() !== 'query' }\"\n (click)=\"selectQueryListMode('live'); selectViewMode('query')\"\n class=\"et-qd-chip et-qd-chip-bordered\"\n >\n Live Queries ({{ queries()?.length ?? 0 }})\n </button>\n <button\n [ngClass]=\"{ 'et-qd-chip-secondary': queryListMode() !== 'history' || viewMode() !== 'query' }\"\n (click)=\"selectQueryListMode('history'); selectViewMode('query')\"\n class=\"et-qd-chip et-qd-chip-bordered\"\n >\n Query History ({{ (queryHistory$ | async)?.length ?? 0 }}/50)\n </button>\n @if (queryListMode() === 'history' && viewMode() === 'query') {\n <div class=\"et-qd-queries__divider\"></div>\n <button (click)=\"clearQueryHistory()\" class=\"et-qd-chip et-qd-chip-bordered\">Clear history</button>\n }\n\n <div class=\"et-qd-queries__divider\"></div>\n <button\n [ngClass]=\"{ 'et-qd-chip-secondary': viewMode() !== 'authProvider' }\"\n (click)=\"selectViewMode('authProvider')\"\n class=\"et-qd-chip et-qd-chip-bordered\"\n >\n Auth Provider\n </button>\n </div>\n\n @if (viewMode() === 'query') {\n <div class=\"et-qd-queries__browser\">\n @if (queryListMode() === 'live') {\n <ul class=\"et-qd-queries__browser-list\">\n @for (query of queries(); track trackByQuery($index, query)) {\n <li>\n <button\n [class.et-qd-query--active]=\"selectedQuery()?._id === query._id\"\n (click)=\"selectQuery(query)\"\n >\n <span> {{ query._queryConfig.method }}</span>\n <span> {{ query | queryShortName }}</span>\n </button>\n </li>\n }\n </ul>\n }\n @if (queryListMode() === 'history') {\n <ul class=\"et-qd-queries__browser-list\">\n @for (query of queryHistory$ | async; track trackByQuery($index, query)) {\n <li>\n <button\n [class.et-qd-query--active]=\"selectedQuery()?._id === query._id\"\n (click)=\"selectQuery(query)\"\n >\n <span> {{ query._queryConfig.method }}</span>\n <span> {{ query | queryShortName }}</span>\n </button>\n </li>\n }\n </ul>\n }\n <div class=\"et-qd-queries__browser-detail\">\n @if (selectedQuery(); as query) {\n <p class=\"et-qd-queries__browser-detail__title\">\n {{ query._queryConfig.method }} {{ query._routeWithParams }}\n </p>\n\n <div class=\"et-qd-queries__actions\">\n <button (click)=\"query.execute()\" class=\"et-qd-chip et-qd-chip-bordered\">Execute</button>\n <button (click)=\"query.execute({ skipCache: true })\" class=\"et-qd-chip et-qd-chip-bordered\">\n Execute (ignore cache)\n </button>\n\n <button (click)=\"query.abort()\" class=\"et-qd-chip et-qd-chip-bordered\">Abort</button>\n <div class=\"et-qd-queries__divider\"></div>\n <button\n [ngClass]=\"{ 'et-qd-chip-secondary': !query.isPolling }\"\n (click)=\"query.poll({ interval: 5000, takeUntil: _destroy$ })\"\n class=\"et-qd-chip et-qd-chip-bordered\"\n >\n Poll\n </button>\n\n <button\n [ngClass]=\"{ 'et-qd-chip-secondary': query.isPolling }\"\n (click)=\"query.stopPolling()\"\n class=\"et-qd-chip et-qd-chip-bordered\"\n >\n Stop polling\n </button>\n @if (query.isPolling || query._isPollingPaused) {\n <button (click)=\"query.pausePolling()\" class=\"et-qd-chip et-qd-chip-secondary et-qd-chip-bordered\">\n Pause polling\n </button>\n <button (click)=\"query.resumePolling()\" class=\"et-qd-chip et-qd-chip-secondary et-qd-chip-bordered\">\n Resume polling\n </button>\n }\n </div>\n\n <div class=\"et-qd-list\">\n <div class=\"et-qd-list-item\">\n <p>State type</p>\n <pre>{{ query.rawState.type }}</pre>\n </div>\n\n <div class=\"et-qd-list-item\">\n <p>Dependents</p>\n <pre>{{ query._dependents | json }}</pre>\n </div>\n\n <div class=\"et-qd-list-item\">\n <p>Is expired</p>\n <pre>{{ query.isExpired }}</pre>\n </div>\n\n <div class=\"et-qd-list-item\">\n <p>Is in use</p>\n <pre>{{ query.isInUse }}</pre>\n </div>\n\n <div class=\"et-qd-list-item\">\n <p>Subscriber count</p>\n <pre>{{ query._subscriberCount }}</pre>\n </div>\n\n <div class=\"et-qd-list-item\">\n <p>Is polling</p>\n <pre>{{ query.isPolling }}</pre>\n </div>\n\n <div class=\"et-qd-list-item\">\n <p>Is polling paused</p>\n <pre>{{ query._isPollingPaused }}</pre>\n </div>\n\n <div class=\"et-qd-list-item\">\n <p>Enable smart polling</p>\n <pre>{{ query._enableSmartPolling }}</pre>\n </div>\n\n <div class=\"et-qd-list-item\">\n <p>Query store key</p>\n <pre>{{ query._queryStoreKey }}</pre>\n </div>\n\n <div class=\"et-qd-list-item\">\n <p>Arguments</p>\n\n <div>\n <button\n [ngClass]=\"{ 'et-qd-chip-secondary': !showArguments() }\"\n (click)=\"toggleShowArguments()\"\n class=\"et-qd-chip et-qd-chip-bordered\"\n >\n Toggle\n </button>\n </div>\n @if (showArguments()) {\n <pre>{{ query._arguments | json }}</pre>\n }\n </div>\n\n <div class=\"et-qd-list-item\">\n <p>State</p>\n <p><i> Warning, this will cause a subscription if shown!</i></p>\n <div>\n <button\n [ngClass]=\"{ 'et-qd-chip-secondary': !showResponse() }\"\n (click)=\"toggleShowResponse()\"\n class=\"et-qd-chip et-qd-chip-bordered\"\n >\n Toggle\n </button>\n </div>\n @if (showResponse()) {\n <pre>{{ query.state$ | async | json }}</pre>\n }\n </div>\n\n <div class=\"et-qd-list-item\">\n <p>Raw state</p>\n <p><i> The query state unaffected by entity stores</i></p>\n\n <div>\n <button\n [ngClass]=\"{ 'et-qd-chip-secondary': !showRawResponse() }\"\n (click)=\"toggleShowRawResponse()\"\n class=\"et-qd-chip et-qd-chip-bordered\"\n >\n Toggle\n </button>\n </div>\n @if (showRawResponse()) {\n <pre>{{ query.rawState | json }}</pre>\n }\n </div>\n\n <div class=\"et-qd-list-item\">\n <p>Query config</p>\n\n <div>\n <button\n [ngClass]=\"{ 'et-qd-chip-secondary': !showQueryConfig() }\"\n (click)=\"toggleShowQueryConfig()\"\n class=\"et-qd-chip et-qd-chip-bordered\"\n >\n Toggle\n </button>\n </div>\n @if (showQueryConfig()) {\n <pre>{{ stringifiedQueryConfig() | json }}</pre>\n }\n </div>\n\n @if (!!query._queryConfig.entity) {\n <div class=\"et-qd-list-item\">\n <p>Entity store value</p>\n\n <div>\n <button\n [ngClass]=\"{ 'et-qd-chip-secondary': !showEntityStoreValue() }\"\n (click)=\"toggleShowEntityStoreValue()\"\n class=\"et-qd-chip et-qd-chip-bordered\"\n >\n Toggle\n </button>\n </div>\n @if (showEntityStoreValue()) {\n <pre>{{ selectedQueryEntityStoreValue$ | async | json }}</pre>\n }\n </div>\n }\n </div>\n }\n </div>\n </div>\n } @else if (viewMode() === 'authProvider') {\n <div class=\"et-qd-auth-provider__viewer\">\n @if (authProviderDetails(); as details) {\n <div class=\"et-qd-list\">\n <div class=\"et-qd-list-item\">\n <p>Type</p>\n <pre>{{ details.type }}</pre>\n </div>\n <div class=\"et-qd-list-item\">\n <p>Header value</p>\n <pre>{{ details.header() | json }}</pre>\n </div>\n <div class=\"et-qd-list-item\">\n <p>Config</p>\n <pre>{{ details.config | json }}</pre>\n </div>\n\n @if (details.type === 'BearerAuthProvider') {\n <div class=\"et-qd-list-item\">\n <p>Tokens</p>\n <pre>{{ details.provider.tokens$ | async | json }}</pre>\n </div>\n\n <div class=\"et-qd-list-item\">\n <p>Should refresh on unauthorized response</p>\n <pre>{{ details.provider.shouldRefreshOnUnauthorizedResponse }}</pre>\n </div>\n\n <ng-container\n *etQuery=\"\n details.provider.currentRefreshQuery$ | async as response;\n loading as loading;\n error as error;\n query as query\n \"\n >\n <div class=\"et-qd-list-item\">\n <p>Refresh query response</p>\n\n <div>\n <button (click)=\"details.provider._refreshQuery()\" class=\"et-qd-chip et-qd-chip-bordered\">\n Refresh\n </button>\n </div>\n <pre>{{ response | json }}</pre>\n </div>\n <div class=\"et-qd-list-item\">\n <p>Refresh query loading</p>\n <pre>{{ loading }}</pre>\n </div>\n <div class=\"et-qd-list-item\">\n <p>Refresh query error</p>\n <pre>{{ error ?? 'null' }}</pre>\n </div>\n <div class=\"et-qd-list-item\">\n <p>State</p>\n <pre>{{ query?.state$ | async | json }}</pre>\n </div>\n </ng-container>\n }\n </div>\n } @else {\n <p>No auth provider set</p>\n }\n </div>\n }\n </div>\n }\n </div>\n}\n","import { Observable, Subject, debounceTime, filter, map, shareReplay, startWith } from 'rxjs';\nimport { EntityKey, EntityStoreConfig } from './entity.types';\n\nclass EntityStoreError extends Error {\n constructor(\n message: string,\n public detail?: unknown,\n ) {\n super(message);\n this.name = 'EntityStoreError';\n }\n}\n\nfunction flatten<T>(arr: T[][]): T[] {\n return arr.reduce((acc, val) => acc.concat(val), []);\n}\n\nexport class EntityStore<T> {\n /**\n * @internal\n */\n readonly _dictionary = new Map<EntityKey, T>();\n\n /**\n * @internal\n */\n readonly _change$ = new Subject<EntityKey | EntityKey[]>();\n\n constructor(private readonly _config: EntityStoreConfig) {}\n\n select(key: EntityKey): Observable<T | null>;\n select(keys: EntityKey[]): Observable<T[]>;\n select(keys: EntityKey[][]): Observable<T[]>;\n select(keyOrKeys: EntityKey | EntityKey[] | EntityKey[][]): Observable<T | null> | Observable<T[]> {\n if (Array.isArray(keyOrKeys)) {\n const _keys = this._normalizeKeys(keyOrKeys);\n return this._selectMany(_keys as EntityKey[]);\n }\n\n return this._select(keyOrKeys);\n }\n\n /**\n * **Note:** Prefer `select` over `selectWhere` when possible.\n */\n selectWhere(predicate: (value: T) => boolean): Observable<T[]> {\n return this._change$.pipe(\n startWith(null),\n debounceTime(0),\n map(() => Array.from(this._dictionary.values()).filter(predicate)),\n shareReplay({ bufferSize: 1, refCount: true }),\n );\n }\n\n set(key: EntityKey, value: T): void;\n set(keys: EntityKey[], values: T[]): void;\n set(keys: EntityKey[][], values: T[][]): void;\n set(keyOrKeys: EntityKey | EntityKey[] | EntityKey[][], valueOrValues: T | T[] | T[][]) {\n const _keys = this._normalizeKeys(keyOrKeys);\n\n if (Array.isArray(_keys)) {\n if (!Array.isArray(valueOrValues)) {\n throw new EntityStoreError('When setting multiple keys, values must be an array', {\n keyOrValues: _keys,\n valueOrValues,\n });\n }\n\n const _values = (Array.isArray(valueOrValues[0]) ? flatten(valueOrValues as T[][]) : valueOrValues) as T[];\n\n for (let i = 0; i < _keys.length; i++) {\n const k = _keys[i];\n const v = _values[i];\n\n if (k === undefined || v === undefined) continue;\n\n this._set(k, v);\n }\n } else {\n this._set(_keys, valueOrValues as T);\n }\n\n this._change$.next(_keys);\n }\n\n remove(key: EntityKey): void;\n remove(keys: EntityKey[]): void;\n remove(keys: EntityKey[][]): void;\n remove(keyOrKeys: EntityKey | EntityKey[] | EntityKey[][]) {\n const _keys = this._normalizeKeys(keyOrKeys);\n\n if (Array.isArray(_keys)) {\n for (const key of _keys) {\n this._remove(key);\n }\n } else {\n this._remove(_keys);\n }\n\n this._change$.next(_keys);\n }\n\n logState() {\n console.log('EntityStore:', this._config.name, {\n dictionary: this._dictionary,\n });\n }\n\n private _select(key: EntityKey): Observable<T | null> {\n if (this._config.logActions) {\n console.log('EntityStore: select', this._config.name, key);\n }\n\n return this._change$.pipe(\n startWith(null),\n filter((v) => {\n if (v === null) {\n return true;\n }\n\n if (Array.isArray(v)) {\n return v.includes(key);\n }\n\n return v === key;\n }),\n map(() => this._dictionary.get(key) ?? null),\n );\n }\n\n private _selectMany(keys: EntityKey[]): Observable<T[]> {\n if (this._config.logActions) {\n console.log('EntityStore: selectMany', this._config.name, keys);\n }\n\n return this._change$.pipe(\n startWith(null),\n filter((v) => {\n if (v === null) {\n return true;\n }\n\n if (Array.isArray(v)) {\n return keys.some((key) => v.includes(key));\n }\n\n return keys.includes(v);\n }),\n map(() => keys.map((key) => this._dictionary.get(key)).filter((value): value is T => value !== undefined)),\n );\n }\n\n private _set(key: EntityKey, value: T) {\n if (this._config.logActions) {\n console.log('EntityStore: set', this._config.name, key, value);\n }\n\n this._dictionary.set(key, value);\n }\n\n private _remove(key: EntityKey) {\n if (this._config.logActions) {\n console.log('EntityStore: remove', this._config.name, key);\n }\n\n this._dictionary.delete(key);\n }\n\n private _normalizeKeys(keys: EntityKey | EntityKey[] | EntityKey[][]): EntityKey | EntityKey[] {\n if (Array.isArray(keys)) {\n if (Array.isArray(keys[0])) {\n return flatten(keys as EntityKey[][]);\n }\n\n return keys as EntityKey[];\n }\n\n return keys;\n }\n}\n","import { Paginated } from '@ethlete/types';\nimport { map, of, switchMap, take, tap } from 'rxjs';\nimport { EntityStore } from './entity-store';\nimport { EntityKey, InsertFromConfig, RemoveFromConfig } from './entity.types';\n\nexport function mapToPaginated<T>(response: Paginated<T>) {\n return map((items) => ({ ...response, items }) as Paginated<T>);\n}\n\n// FIXME: This breaks if SubStoreType is an array\n/**\n * Use an other store to represent a property of the current entity.\n */\nexport const insertFrom = <\n OriginStoreType,\n OriginKeys extends keyof NonNullable<OriginStoreType>,\n SubStoreType extends NonNullable<OriginStoreType>[OriginKeys] extends Array<infer U>\n ? U\n : NonNullable<OriginStoreType>[OriginKeys],\n IdFn extends (value: NonNullable<OriginStoreType>) => EntityKey | EntityKey[],\n ComputedEntityType extends ReturnType<IdFn> extends Array<unknown>\n ? OriginStoreType\n : Omit<OriginStoreType, OriginKeys> & { [K in OriginKeys]: SubStoreType | null },\n>(\n store: EntityStore<SubStoreType>,\n { for: key, id }: InsertFromConfig<OriginStoreType, OriginKeys, IdFn>,\n) =>\n switchMap((value: OriginStoreType) => {\n if (!value) return of(null);\n\n const ids = id(value);\n\n if (Array.isArray(ids)) {\n return store.select(ids).pipe(map((data) => ({ ...value, [key]: data }) as ComputedEntityType));\n } else {\n return store.select(ids).pipe(map((data) => ({ ...value, [key]: data }) as ComputedEntityType));\n }\n });\n\n/**\n * Remove entities from a store based on a where function.\n */\nexport const removeFrom = <T>(store: EntityStore<T>, { where, id }: RemoveFromConfig<T>) => {\n store\n .selectWhere(where)\n .pipe(\n tap((entities) => store.remove(entities.map(id))),\n take(1),\n )\n .subscribe();\n};\n","import { HttpClient, HttpErrorResponse } from '@angular/common/http';\nimport { DestroyRef, ErrorHandler, Injector } from '@angular/core';\nimport { toObservable } from '@angular/core/rxjs-interop';\nimport { combineLatest, Observable, Subject } from 'rxjs';\nimport { buildRoute } from '../legacy';\nimport { createHttpRequest, HttpRequest } from './http-request';\nimport { QueryArgs, RequestArgs } from './query';\nimport { buildQueryCacheKey, shouldCacheQuery } from './query-cache-utils';\nimport { CreateQueryClientConfigOptions } from './query-client';\nimport { CreateQueryCreatorOptions, QueryMethod, RouteType } from './query-creator';\nimport { uncacheableRequestHasAllowCacheParam, uncacheableRequestHasCacheKeyParam } from './query-errors';\nimport { RunQueryExecuteOptions } from './query-execute-utils';\nimport { ShouldRetryRequestFn } from './query-retry-utils';\n\nexport type QueryRepositoryEvent =\n | {\n type: 'request-error';\n error: HttpErrorResponse;\n key: QueryKey;\n isSecure: boolean;\n request: HttpRequest<QueryArgs>;\n }\n | {\n type: 'request-success';\n key: QueryKey;\n isSecure: boolean;\n request: HttpRequest<QueryArgs>;\n };\n\nexport type QueryRepositoryRequestOptions<TArgs extends QueryArgs> = {\n /**\n * The route of the request.\n * @example '/users'\n * @example (args) => `/users/${args.userId}`\n */\n route: RouteType<TArgs>;\n\n /** The HTTP method of the request */\n method: QueryMethod;\n\n /** If the request is secure (needs authentication) */\n isSecure?: boolean;\n\n /** The data of the request */\n args?: RequestArgs<TArgs> | null;\n\n /** The query creator options of the request */\n creatorOptions?: CreateQueryCreatorOptions;\n\n /** Custom retry function for this specific request */\n retryFn?: ShouldRetryRequestFn;\n\n /** If set, this request's cache key will be prefixed with this key */\n key?: string;\n\n /** The previous tracking key of the request */\n previousKey?: QueryKey | null;\n\n /** The destroy ref to bind the request to. If the destroy ref is destroyed, the request will be destroyed as well. */\n consumerDestroyRef: DestroyRef;\n\n /** Configuration on how to run the query */\n runQueryOptions?: RunQueryExecuteOptions;\n};\n\nexport type QueryRepositoryItem<TArgs extends QueryArgs> = {\n /** The key of the request (either a cache key for cacheable requests or a UUID for uncacheable requests) */\n key: QueryKey;\n\n /** The request object */\n request: HttpRequest<TArgs>;\n};\n\n/**\n * The query repository is responsible for managing all requests and their consumers.\n * It will cache requests if they can be cached and reuse them if they are already cached.\n * It will also destroy requests if there are no more consumers left.\n */\nexport type QueryRepository = {\n /** Creates a new request. If the request is already cached, it will be reused. */\n request: <TArgs extends QueryArgs>(options: QueryRepositoryRequestOptions<TArgs>) => QueryRepositoryItem<TArgs>;\n\n /** Removes a consumer from a request by its key. Destroys the request if there are no more consumers left. */\n unbind: (key: QueryKey | null, consumerDestroyRef: DestroyRef) => boolean;\n\n /** Removes all secure requests and their consumers */\n unbindAllSecure: () => void;\n\n /** Observable stream of repository events (errors, successes, etc.) */\n events$: Observable<QueryRepositoryEvent>;\n};\n\n/** The key of a query (either a cache key for cacheable requests or a UUID for uncacheable requests) */\nexport type QueryKey = string;\n\n/** Runs .unbind() if the DestroyRef.onDestroy() gets called */\nexport type DestroyCleanupCallback = () => void;\n\n/** Keeps track of all places where the request gets used. Will be cleaned up and removed if there are no more consumers. */\ntype DestroyListenerMapItem = {\n consumers: Map<DestroyRef, DestroyCleanupCallback>;\n request: HttpRequest<QueryArgs>;\n isSecure: boolean;\n eventSubscription?: { unsubscribe: () => void };\n};\n\nexport type QueryRepositoryDependencies = {\n /** The HTTP client to use for the requests */\n httpClient: HttpClient;\n\n /** The error handler to use for the requests */\n ngErrorHandler: ErrorHandler;\n\n /** The injector to use for reactive operations like signal->observable conversions */\n injector: Injector;\n};\n\nexport type CreateQueryRepositoryConfig = CreateQueryClientConfigOptions & {\n /** The dependencies of the query repository */\n dependencies: QueryRepositoryDependencies;\n};\n\nconst generateUuid = () => crypto.randomUUID();\n\nexport const createQueryRepository = (config: CreateQueryRepositoryConfig): QueryRepository => {\n const cache = new Map<QueryKey, DestroyListenerMapItem>();\n const eventsSubject = new Subject<QueryRepositoryEvent>();\n\n const request = <TArgs extends QueryArgs>(options: QueryRepositoryRequestOptions<TArgs>) => {\n const { args, creatorOptions, runQueryOptions } = options;\n const shouldCache =\n creatorOptions?.subtle?.useQueryRepositoryCache === false\n ? false\n : shouldCacheQuery(options.method) || creatorOptions?.subtle?.useQueryRepositoryCache === true;\n\n if (!shouldCache && options.key) throw uncacheableRequestHasCacheKeyParam(options.key);\n if (!shouldCache && runQueryOptions?.allowCache) throw uncacheableRequestHasAllowCacheParam();\n\n const route = buildRoute({\n base: config.baseUrl,\n route: options.route,\n pathParams: args?.pathParams,\n queryParams: args?.queryParams,\n queryParamConfig: config.queryString,\n });\n\n const cacheKey = shouldCache\n ? buildQueryCacheKey(`${options.key ? options.key + '_' : ''}${route}`, {\n body: args?.body,\n queryParams: args?.queryParams,\n pathParams: args?.pathParams,\n headers: args?.headers,\n })\n : false;\n\n const trackingKey = cacheKey || generateUuid();\n\n const previousKey = options.previousKey;\n\n if (cacheKey !== previousKey && previousKey) {\n unbind(previousKey, options.consumerDestroyRef);\n }\n\n if (shouldCache && cacheKey) {\n const cacheEntry = cache.get(cacheKey);\n\n if (cacheEntry) {\n bind(cacheKey, options.consumerDestroyRef, cacheEntry.request, options.isSecure ?? false, true);\n\n if (!runQueryOptions?.allowCache || cacheEntry.request.isStale()) {\n cacheEntry.request.execute({ allowCache: runQueryOptions?.allowCache });\n }\n\n return { key: cacheKey, request: cacheEntry.request as HttpRequest<TArgs> };\n }\n }\n\n const request = createHttpRequest<TArgs>({\n fullPath: route,\n args,\n method: options.method,\n dependencies: config.dependencies,\n clientOptions: creatorOptions,\n cacheAdapter: config.cacheAdapter,\n retryFn: options.retryFn ?? config.retryFn,\n });\n\n request.execute();\n\n bind(trackingKey, options.consumerDestroyRef, request, options.isSecure ?? false, shouldCache);\n\n return { key: trackingKey, request };\n };\n\n const unbind = (key: QueryKey | null, consumerDestroyRef: DestroyRef) => {\n if (key === null) return false;\n\n const cacheEntry = cache.get(key);\n\n if (!cacheEntry) return false;\n\n cacheEntry.consumers.delete(consumerDestroyRef);\n\n if (cacheEntry.consumers.size === 0) {\n cacheEntry.request.destroy();\n cacheEntry.eventSubscription?.unsubscribe();\n cache.delete(key);\n }\n\n return true;\n };\n\n const unbindAllSecure = () => {\n for (const [key, cacheEntry] of cache.entries()) {\n if (cacheEntry.isSecure) {\n for (const consumerDestroyRef of cacheEntry.consumers.keys()) {\n unbind(key, consumerDestroyRef);\n }\n\n cacheEntry.eventSubscription?.unsubscribe();\n cache.delete(key);\n }\n }\n };\n\n const bind = (\n key: QueryKey,\n consumerDestroyRef: DestroyRef,\n request: HttpRequest<QueryArgs>,\n isSecure: boolean,\n allowReuse: boolean,\n ) => {\n const destroyListener = consumerDestroyRef.onDestroy(() => unbind(key, consumerDestroyRef));\n\n const cacheEntry = cache.get(key);\n\n if (cacheEntry && allowReuse) {\n cacheEntry.consumers.set(consumerDestroyRef, destroyListener);\n } else {\n const consumers: Map<DestroyRef, DestroyCleanupCallback> = new Map([]);\n\n consumers.set(consumerDestroyRef, destroyListener);\n\n const eventSubscription = combineLatest([\n toObservable(request.error, { injector: config.dependencies.injector }),\n toObservable(request.response, { injector: config.dependencies.injector }),\n ]).subscribe(([errorValue, responseValue]) => {\n if (errorValue?.raw instanceof HttpErrorResponse) {\n eventsSubject.next({\n type: 'request-error',\n error: errorValue.raw,\n key,\n isSecure,\n request,\n });\n } else if (responseValue !== null && !errorValue) {\n eventsSubject.next({\n type: 'request-success',\n key,\n isSecure,\n request,\n });\n }\n });\n\n cache.set(key, {\n consumers,\n request,\n isSecure,\n eventSubscription,\n });\n }\n };\n\n const repository: QueryRepository = {\n request,\n unbind,\n unbindAllSecure,\n events$: eventsSubject.asObservable(),\n };\n\n return repository;\n};\n","import { HttpClient, HttpHeaders } from '@angular/common/http';\nimport { ErrorHandler, inject, Injector } from '@angular/core';\nimport { createRootProvider, ProviderResult } from '@ethlete/core';\nimport { BuildQueryStringConfig } from '../legacy';\nimport { createQueryRepository, QueryRepository } from './query-repository';\nimport { ShouldRetryRequestFn } from './query-retry-utils';\n\nexport type CacheAdapterFn = (headers: HttpHeaders) => number | null;\n\nexport type CreateQueryClientConfigOptions = {\n /**\n * The base URL of the client\n * @example 'https://api.example.com/v1'\n */\n baseUrl: string;\n\n /** Configuration for building query strings */\n queryString?: BuildQueryStringConfig;\n\n /** The name of the client */\n name: string;\n\n /**\n * The cache adapter function to use for the client.\n * It determines how long the response of a request can be cached.\n *\n * @default extractExpiresInSeconds()\n */\n cacheAdapter?: CacheAdapterFn;\n\n /**\n * The retry function to use for the client.\n * It determines if a request should be retried after it failed.\n *\n * @default shouldRetryRequest()\n */\n retryFn?: ShouldRetryRequestFn;\n};\n\nexport type QueryClient = {\n repository: QueryRepository;\n};\n\nexport type QueryClientRef = ProviderResult<QueryClient>;\nexport type AnyCreateQueryClientResult = QueryClientRef;\nexport type AnyQueryClient = NonNullable<ReturnType<AnyCreateQueryClientResult[1]>>;\n\nexport const createQueryClient = (options: CreateQueryClientConfigOptions): QueryClientRef =>\n createRootProvider(\n () => {\n const httpClient = inject(HttpClient);\n const ngErrorHandler = inject(ErrorHandler);\n const injector = inject(Injector);\n\n const repository = createQueryRepository({\n ...options,\n dependencies: { httpClient, ngErrorHandler, injector },\n });\n\n const client: QueryClient = {\n repository,\n };\n\n return client;\n },\n {\n name: `QueryClient_${options.name}`,\n },\n );\n","import { QueryArgs, RequestArgs } from './query';\nimport { CreateQueryExecuteOptions, InternalQueryExecute } from './query-execute';\nimport { queryExecute } from './query-execute-utils';\nimport { InternalSecureCreateQueryCreatorOptions } from './secure-query-creator';\nimport { createSecureExecuteFactory } from './secure-query-execute-factory';\n\nexport type CreateSecureQueryExecuteOptions<TArgs extends QueryArgs> = Omit<\n CreateQueryExecuteOptions<TArgs>,\n 'creatorInternals'\n> & {\n creatorInternals: InternalSecureCreateQueryCreatorOptions<TArgs>;\n};\n\nexport const createSecureExecuteFn = <TArgs extends QueryArgs>(\n executeOptions: CreateSecureQueryExecuteOptions<TArgs>,\n): InternalQueryExecute<TArgs> => {\n const [, injectAuthProvider] = executeOptions.creatorInternals.authProvider;\n const authProvider = injectAuthProvider();\n\n return createSecureExecuteFactory({\n authProvider,\n deps: executeOptions.deps,\n state: executeOptions.state,\n transformAuthAndExec: (executeArgs, _tokens, headers, executeState) => {\n const { options: runOptions } = executeArgs ?? {};\n const updatedArgs = { ...(executeArgs?.args ?? ({} as RequestArgs<TArgs>)), headers };\n\n queryExecute({\n executeOptions: executeOptions,\n executeState,\n args: updatedArgs,\n options: runOptions,\n isSecure: true,\n });\n },\n });\n};\n","import { createBaseQuery } from './base-query-factory';\nimport { CreateQueryOptions, QueryArgs } from './query';\nimport { InternalSecureCreateQueryCreatorOptions } from './secure-query-creator';\nimport { createSecureExecuteFn } from './secure-query-execute';\n\nexport type CreateSecureQueryOptions<TArgs extends QueryArgs> = Omit<CreateQueryOptions<TArgs>, 'creatorInternals'> & {\n creatorInternals: InternalSecureCreateQueryCreatorOptions<TArgs>;\n};\n\nexport const createSecureQuery = <TArgs extends QueryArgs>(options: CreateSecureQueryOptions<TArgs>) =>\n createBaseQuery({\n creator: options.creator,\n creatorInternals: options.creatorInternals,\n features: options.features,\n queryConfig: options.queryConfig,\n executeFactory: createSecureExecuteFn,\n });\n","import { AnyCreateBearerAuthProviderResult } from '../auth';\nimport { createBaseQueryCreator } from './base-query-creator-factory';\nimport { QueryArgs } from './query';\nimport { CreateQueryCreatorOptions, InternalCreateQueryCreatorOptions, QueryCreator } from './query-creator';\nimport { createSecureQuery } from './secure-query';\n\nexport type InternalSecureCreateQueryCreatorOptions<TArgs extends QueryArgs> =\n InternalCreateQueryCreatorOptions<TArgs> & {\n authProvider: AnyCreateBearerAuthProviderResult;\n };\n\nexport const createSecureQueryCreator = <TArgs extends QueryArgs>(\n options: CreateQueryCreatorOptions | undefined,\n internals: InternalSecureCreateQueryCreatorOptions<TArgs>,\n): QueryCreator<TArgs> =>\n createBaseQueryCreator({\n options,\n internals,\n queryFactory: createSecureQuery,\n });\n","import { AnyCreateBearerAuthProviderResult } from '../auth';\nimport { QueryArgs } from './query';\nimport { AnyCreateQueryClientResult } from './query-client';\nimport {\n CreateQueryCreatorOptions,\n QueryCreator,\n QueryMethod,\n RequiresTransform,\n RouteType,\n createQueryCreator,\n} from './query-creator';\nimport { createSecureQueryCreator } from './secure-query-creator';\n\n// Conditional parameter type: when RequiresTransform is true, options must be provided; otherwise optional\ntype ConditionalOptions<TArgs extends QueryArgs> =\n RequiresTransform<TArgs> extends true\n ? [options: CreateQueryCreatorOptions<TArgs>]\n : [options?: CreateQueryCreatorOptions<TArgs>];\n\nconst createQueryTemplate = (method: QueryMethod) => {\n return (client: AnyCreateQueryClientResult) =>\n <TArgs extends QueryArgs>(route: RouteType<TArgs>, ...args: ConditionalOptions<TArgs>): QueryCreator<TArgs> =>\n createQueryCreator<TArgs>(args[0], { method, client, route });\n};\n\nconst createSecureQueryTemplate = (method: QueryMethod) => {\n return (client: AnyCreateQueryClientResult, authProvider: AnyCreateBearerAuthProviderResult) =>\n <TArgs extends QueryArgs>(route: RouteType<TArgs>, ...args: ConditionalOptions<TArgs>): QueryCreator<TArgs> =>\n createSecureQueryCreator<TArgs>(args[0], { method, client, authProvider, route });\n};\n\n/** A query creator that creates a GET query */\nexport const createGetQuery = createQueryTemplate('GET');\n\n/** A query creator that creates a secure GET query (requires authentication) */\nexport const createSecureGetQuery = createSecureQueryTemplate('GET');\n\n/** A query creator that creates a POST query */\nexport const createPostQuery = createQueryTemplate('POST');\n\n/** A query creator that creates a secure POST query (requires authentication) */\nexport const createSecurePostQuery = createSecureQueryTemplate('POST');\n\n/** A query creator that creates a PUT query */\nexport const createPutQuery = createQueryTemplate('PUT');\n\n/** A query creator that creates a secure PUT query (requires authentication) */\nexport const createSecurePutQuery = createSecureQueryTemplate('PUT');\n\n/** A query creator that creates a DELETE query */\nexport const createDeleteQuery = createQueryTemplate('DELETE');\n\n/** A query creator that creates a secure DELETE query (requires authentication) */\nexport const createSecureDeleteQuery = createSecureQueryTemplate('DELETE');\n\n/** A query creator that creates a PATCH query */\nexport const createPatchQuery = createQueryTemplate('PATCH');\n\n/** A query creator that creates a secure PATCH query (requires authentication) */\nexport const createSecurePatchQuery = createSecureQueryTemplate('PATCH');\n","import { DestroyRef, inject, isDevMode, signal, Signal } from '@angular/core';\n\ntype LeaderMessage =\n | {\n type: 'heartbeat';\n tabId: string;\n }\n | {\n type: 'tab-heartbeat';\n tabId: string;\n }\n | {\n type: 'leader-claim';\n tabId: string;\n }\n | {\n type: 'leader-release';\n tabId: string;\n }\n | {\n type: 'instance-register';\n tabId: string;\n }\n | {\n type: 'instance-unregister';\n tabId: string;\n };\n\nexport type InternalLeaderElection = {\n isLeader: Signal<boolean>;\n instanceCount: Signal<number>;\n becomeLeader: () => void;\n cleanup: () => void;\n};\n\nexport const setupLeaderElection = (): InternalLeaderElection => {\n const destroyRef = inject(DestroyRef);\n\n const channelName = 'ethlete-auth-leader';\n const heartbeatInterval = 1000;\n const leaderTimeout = 3000;\n const storageKey = 'ethlete-auth-leader-heartbeat';\n\n const tabId = `tab-${Date.now()}-${Math.random().toString(36).substring(2, 9)}`;\n const isLeader = signal(false);\n const instanceCount = signal(1);\n const knownTabs = new Map<string, number>();\n knownTabs.set(tabId, Date.now());\n\n let channel: BroadcastChannel | null = null;\n let heartbeatIntervalId: ReturnType<typeof setInterval> | null = null;\n let leaderCheckIntervalId: ReturnType<typeof setInterval> | null = null;\n\n if (typeof BroadcastChannel === 'undefined' || typeof localStorage === 'undefined') {\n isLeader.set(true);\n return {\n isLeader: isLeader.asReadonly(),\n instanceCount: instanceCount.asReadonly(),\n becomeLeader: () => {\n /* no-op */\n },\n cleanup: () => {\n /* no-op */\n },\n };\n }\n\n channel = new BroadcastChannel(channelName);\n\n channel.postMessage({ type: 'instance-register', tabId } as LeaderMessage);\n\n const updateLeaderHeartbeat = (newTabId: string = tabId) => {\n try {\n localStorage.setItem(storageKey, JSON.stringify({ tabId: newTabId, timestamp: Date.now() }));\n } catch (error) {\n if (isDevMode()) {\n console.error('Failed to update leader heartbeat:', error);\n }\n }\n };\n\n const getLeaderHeartbeat = (): { tabId: string; timestamp: number } | null => {\n try {\n const stored = localStorage.getItem(storageKey);\n if (!stored) return null;\n return JSON.parse(stored);\n } catch {\n return null;\n }\n };\n\n const becomeLeader = () => {\n if (isLeader()) return;\n\n isLeader.set(true);\n updateLeaderHeartbeat();\n\n const message: LeaderMessage = {\n type: 'leader-claim',\n tabId,\n };\n channel?.postMessage(message);\n };\n\n const releaseLeadership = () => {\n if (!isLeader()) return;\n\n isLeader.set(false);\n\n const message: LeaderMessage = {\n type: 'leader-release',\n tabId,\n };\n channel?.postMessage(message);\n };\n\n const checkLeaderStatus = () => {\n const heartbeat = getLeaderHeartbeat();\n const now = Date.now();\n\n if (!heartbeat || now - heartbeat.timestamp > leaderTimeout) {\n if (!isLeader()) {\n becomeLeader();\n }\n } else if (heartbeat.tabId === tabId) {\n if (!isLeader()) {\n isLeader.set(true);\n }\n updateLeaderHeartbeat();\n } else {\n if (isLeader()) {\n isLeader.set(false);\n }\n }\n };\n\n channel.onmessage = (event: MessageEvent<LeaderMessage>) => {\n const message = event.data;\n\n if (message.type === 'heartbeat') {\n if (message.tabId !== tabId) {\n knownTabs.set(message.tabId, Date.now());\n }\n if (message.tabId !== tabId && isLeader()) {\n const heartbeat = getLeaderHeartbeat();\n if (heartbeat && heartbeat.tabId === message.tabId) {\n releaseLeadership();\n }\n }\n } else if (message.type === 'tab-heartbeat') {\n if (message.tabId !== tabId) {\n knownTabs.set(message.tabId, Date.now());\n }\n } else if (message.type === 'instance-register') {\n if (message.tabId !== tabId) {\n knownTabs.set(message.tabId, Date.now());\n instanceCount.set(knownTabs.size);\n channel?.postMessage({ type: 'tab-heartbeat', tabId } as LeaderMessage);\n }\n } else if (message.type === 'instance-unregister') {\n if (message.tabId !== tabId) {\n knownTabs.delete(message.tabId);\n instanceCount.set(knownTabs.size);\n }\n } else if (message.type === 'leader-claim') {\n if (message.tabId !== tabId && isLeader()) {\n const heartbeat = getLeaderHeartbeat();\n if (heartbeat && heartbeat.tabId === message.tabId) {\n releaseLeadership();\n } else {\n const assertMessage: LeaderMessage = {\n type: 'heartbeat',\n tabId,\n };\n channel?.postMessage(assertMessage);\n }\n }\n } else if (message.type === 'leader-release') {\n if (message.tabId !== tabId) {\n setTimeout(() => checkLeaderStatus(), 100);\n }\n }\n };\n\n checkLeaderStatus();\n\n heartbeatIntervalId = setInterval(() => {\n knownTabs.set(tabId, Date.now());\n\n if (isLeader()) {\n updateLeaderHeartbeat();\n channel?.postMessage({ type: 'heartbeat', tabId } as LeaderMessage);\n } else {\n channel?.postMessage({ type: 'tab-heartbeat', tabId } as LeaderMessage);\n }\n\n const now = Date.now();\n let changed = false;\n for (const [id, lastSeen] of knownTabs) {\n if (id !== tabId && now - lastSeen > leaderTimeout) {\n knownTabs.delete(id);\n changed = true;\n }\n }\n if (changed) {\n instanceCount.set(knownTabs.size);\n }\n }, heartbeatInterval);\n\n leaderCheckIntervalId = setInterval(() => {\n checkLeaderStatus();\n }, heartbeatInterval);\n\n const handleVisibilityChange = () => {\n if (document.hidden && isLeader()) {\n // Tab is hidden but we're leader - keep leadership but other tabs will take over if we die\n } else if (!document.hidden && !isLeader()) {\n checkLeaderStatus();\n }\n };\n\n document.addEventListener('visibilitychange', handleVisibilityChange);\n\n const cleanup = () => {\n if (heartbeatIntervalId) {\n clearInterval(heartbeatIntervalId);\n }\n if (leaderCheckIntervalId) {\n clearInterval(leaderCheckIntervalId);\n }\n\n channel?.postMessage({ type: 'instance-unregister', tabId } as LeaderMessage);\n\n releaseLeadership();\n\n document.removeEventListener('visibilitychange', handleVisibilityChange);\n channel?.close();\n\n const heartbeat = getLeaderHeartbeat();\n if (heartbeat?.tabId === tabId) {\n try {\n localStorage.removeItem(storageKey);\n } catch {\n // Ignore\n }\n }\n };\n\n destroyRef.onDestroy(cleanup);\n\n return {\n isLeader: isLeader.asReadonly(),\n instanceCount: instanceCount.asReadonly(),\n becomeLeader,\n cleanup,\n };\n};\n","const ENCRYPTION_KEY_STORAGE = '__eth_ek';\n\nconst generateEncryptionKey = (): string => {\n const navigatorInfo =\n typeof navigator !== 'undefined'\n ? `${navigator.userAgent}${navigator.language}${screen.width}${screen.height}${screen.colorDepth}`\n : 'server';\n\n const random = Math.random().toString(36).substring(2, 15);\n\n return btoa(`${navigatorInfo}${random}`);\n};\n\nlet cachedKey: string | null = null;\n\nconst getEncryptionKey = (): string => {\n if (cachedKey) return cachedKey;\n\n if (typeof localStorage !== 'undefined') {\n const stored = localStorage.getItem(ENCRYPTION_KEY_STORAGE);\n if (stored) {\n cachedKey = stored;\n return stored;\n }\n\n const newKey = generateEncryptionKey();\n localStorage.setItem(ENCRYPTION_KEY_STORAGE, newKey);\n cachedKey = newKey;\n return newKey;\n }\n\n if (!cachedKey) {\n cachedKey = generateEncryptionKey();\n }\n return cachedKey;\n};\n\nconst xorCipher = (text: string, key: string): string => {\n let result = '';\n for (let i = 0; i < text.length; i++) {\n result += String.fromCharCode(text.charCodeAt(i) ^ key.charCodeAt(i % key.length));\n }\n return result;\n};\n\nexport const encryptToken = (token: string): string => {\n if (!token) return token;\n\n try {\n const key = getEncryptionKey();\n const encrypted = xorCipher(token, key);\n return btoa(encrypted);\n } catch {\n return token;\n }\n};\n\nexport const decryptToken = (encryptedToken: string): string => {\n if (!encryptedToken) return encryptedToken;\n\n try {\n const key = getEncryptionKey();\n const encrypted = atob(encryptedToken);\n return xorCipher(encrypted, key);\n } catch {\n return encryptedToken;\n }\n};\n\nexport const isEncrypted = (value: string): boolean => {\n if (!value) return false;\n\n const base64Regex = /^[A-Za-z0-9+/]+=*$/;\n if (!base64Regex.test(value)) return false;\n\n try {\n atob(value);\n return value.length > 20;\n } catch {\n return false;\n }\n};\n\nexport const resetEncryptionKey = (): void => {\n cachedKey = null;\n if (typeof localStorage !== 'undefined') {\n localStorage.removeItem(ENCRYPTION_KEY_STORAGE);\n }\n};\n","import { DestroyRef, effect, inject, isDevMode, WritableSignal } from '@angular/core';\nimport { QueryClient } from '../../http';\nimport { decryptToken, encryptToken } from '../utils';\n\ntype SyncMessage =\n | {\n type: 'tokens-updated';\n accessToken: string;\n refreshToken: string;\n }\n | {\n type: 'logout';\n };\n\nexport type MultiTabSyncConfig = {\n channelName?: string;\n syncTokens?: boolean;\n syncLogout?: boolean;\n};\n\nexport type InternalMultiTabSync = {\n cleanup: () => void;\n};\n\nexport const setupMultiTabSync = (\n config: MultiTabSyncConfig,\n accessToken: WritableSignal<string | null>,\n refreshToken: WritableSignal<string | null>,\n queryClient: QueryClient,\n): InternalMultiTabSync => {\n const destroyRef = inject(DestroyRef);\n\n const channelName = config.channelName ?? 'ethlete-auth-sync';\n const syncTokens = config.syncTokens ?? true;\n const syncLogout = config.syncLogout ?? true;\n\n let channel: BroadcastChannel | null = null;\n let isProcessingExternalUpdate = false;\n\n if (typeof BroadcastChannel === 'undefined') {\n if (isDevMode()) {\n console.warn('BroadcastChannel is not supported in this environment. Multi-tab sync will be disabled.');\n }\n return {\n cleanup: () => {\n // No cleanup needed when BroadcastChannel is not available\n },\n };\n }\n\n channel = new BroadcastChannel(channelName);\n\n channel.onmessage = (event: MessageEvent<SyncMessage>) => {\n const message = event.data;\n\n // Prevent infinite loops\n if (isProcessingExternalUpdate) return;\n\n isProcessingExternalUpdate = true;\n\n try {\n if (message.type === 'logout' && syncLogout) {\n accessToken.set(null);\n refreshToken.set(null);\n queryClient.repository.unbindAllSecure();\n } else if (message.type === 'tokens-updated' && syncTokens) {\n accessToken.set(decryptToken(message.accessToken));\n refreshToken.set(decryptToken(message.refreshToken));\n }\n } finally {\n isProcessingExternalUpdate = false;\n }\n };\n\n const cleanup = () => {\n channel?.close();\n };\n\n destroyRef.onDestroy(cleanup);\n\n if (syncTokens) {\n effect(() => {\n const access = accessToken();\n const refresh = refreshToken();\n\n if (access && refresh && !isProcessingExternalUpdate && channel) {\n const message: SyncMessage = {\n type: 'tokens-updated',\n accessToken: encryptToken(access),\n refreshToken: encryptToken(refresh),\n };\n channel.postMessage(message);\n }\n });\n }\n\n if (syncLogout) {\n let hadTokens = false;\n\n effect(() => {\n const access = accessToken();\n\n if (access) {\n hadTokens = true;\n } else if (hadTokens && !isProcessingExternalUpdate && channel) {\n const message: SyncMessage = {\n type: 'logout',\n };\n channel.postMessage(message);\n hadTokens = false;\n }\n });\n }\n\n return { cleanup };\n};\n","import {\n computed,\n DestroyRef,\n effect,\n inject,\n Injector,\n isDevMode,\n Signal,\n signal,\n WritableSignal,\n} from '@angular/core';\nimport { createRootProvider, isObject, ProviderResult } from '@ethlete/core';\nimport { Observable, Subject } from 'rxjs';\nimport {\n AnyCreateQueryClientResult,\n authExtractTokensResponseMissingAccessToken,\n authExtractTokensResponseMissingRefreshToken,\n authExtractTokensResponseNotObject,\n authProviderFeatureUsedMultipleTimes,\n QueryArgs,\n QueryClient,\n QueryRepository,\n QuerySnapshot,\n RequestArgs,\n RunQueryExecuteOptions,\n} from '../http';\nimport { decryptBearer } from '../legacy';\nimport {\n AnyQueryBuilder,\n AuthQueryBuilder,\n BearerAuthProviderTokens,\n TokenRefreshQueryBuilder,\n} from './bearer-auth-query-builders';\nimport {\n InactivityLogoutFeature,\n PersistentAuthFeature,\n TokenExpirationWarningFeature,\n TrackingFeature,\n} from './features';\nimport { setupLeaderElection, setupMultiTabSync } from './internal';\n\nexport { AnyQueryBuilder } from './bearer-auth-query-builders';\n\nexport const BearerAuthFeatureType = {\n PERSISTENT_AUTH: 'PERSISTENT_AUTH',\n TOKEN_EXPIRATION_WARNING: 'TOKEN_EXPIRATION_WARNING',\n INACTIVITY_LOGOUT: 'INACTIVITY_LOGOUT',\n TOKEN_REVOCATION: 'TOKEN_REVOCATION',\n TRACKING: 'TRACKING',\n} as const;\n\nexport type BearerAuthFeatureType = (typeof BearerAuthFeatureType)[keyof typeof BearerAuthFeatureType];\n\nexport type BearerAuthFeature<TBuilders extends readonly AnyQueryBuilder[], TBearerData> = {\n type: BearerAuthFeatureType;\n setup: (context: BearerAuthProviderFeatureContext<TBearerData, TBuilders>) => unknown;\n};\n\nexport type ExtractQueryKey<T> =\n T extends AuthQueryBuilder<infer K, any> // eslint-disable-line @typescript-eslint/no-explicit-any\n ? K\n : T extends TokenRefreshQueryBuilder<infer K, any> // eslint-disable-line @typescript-eslint/no-explicit-any\n ? K\n : never;\n\nexport type ExtractQueryArgs<T> =\n T extends AuthQueryBuilder<string, infer TArgs>\n ? TArgs\n : T extends TokenRefreshQueryBuilder<string, infer TArgs>\n ? TArgs\n : never;\n\nexport type QueryRegistry<TBuilders extends readonly AnyQueryBuilder[]> = {\n [K in ExtractQueryKey<TBuilders[number]>]: {\n execute: (\n args: RequestArgs<ExtractQueryArgs<Extract<TBuilders[number], { key: K }>>>,\n options?: RunQueryExecuteOptions,\n ) => QuerySnapshot<ExtractQueryArgs<Extract<TBuilders[number], { key: K }>>>;\n snapshot: Signal<QuerySnapshot<ExtractQueryArgs<Extract<TBuilders[number], { key: K }>>> | null>;\n };\n};\n\ntype HasFeatureType<\n TFeatures extends readonly unknown[],\n TType extends BearerAuthFeatureType,\n> = TFeatures extends readonly ((context: any) => any)[] // eslint-disable-line @typescript-eslint/no-explicit-any\n ? Extract<ReturnType<TFeatures[number]>, { type: TType }> extends never\n ? false\n : true\n : false;\n\ntype ExtractFeatureInstance<\n TFeatures extends readonly unknown[],\n TType extends BearerAuthFeatureType,\n> = TFeatures extends readonly ((context: any) => any)[] // eslint-disable-line @typescript-eslint/no-explicit-any\n ? Extract<ReturnType<TFeatures[number]>, { type: TType }> extends { type: TType; instance: infer TInstance }\n ? TInstance\n : never\n : never;\n\nexport type FeatureRegistry<\n TFeatures extends readonly unknown[],\n TBuilders extends readonly AnyQueryBuilder[] = readonly AnyQueryBuilder[],\n> = (HasFeatureType<TFeatures, typeof BearerAuthFeatureType.PERSISTENT_AUTH> extends true\n ? { persistentAuth: PersistentAuthFeature }\n : unknown) &\n (HasFeatureType<TFeatures, typeof BearerAuthFeatureType.TOKEN_EXPIRATION_WARNING> extends true\n ? { tokenExpirationWarning: TokenExpirationWarningFeature }\n : unknown) &\n (HasFeatureType<TFeatures, typeof BearerAuthFeatureType.INACTIVITY_LOGOUT> extends true\n ? { inactivityLogout: InactivityLogoutFeature }\n : unknown) &\n (HasFeatureType<TFeatures, typeof BearerAuthFeatureType.TOKEN_REVOCATION> extends true\n ? { tokenRevocation: ExtractFeatureInstance<TFeatures, typeof BearerAuthFeatureType.TOKEN_REVOCATION> }\n : unknown) &\n (HasFeatureType<TFeatures, typeof BearerAuthFeatureType.TRACKING> extends true\n ? { tracking: TrackingFeature<TBuilders> }\n : unknown);\n\nexport type CreateBearerAuthProviderConfig<\n TBuilders extends readonly AnyQueryBuilder[],\n TFeatures extends readonly ((context: BearerAuthProviderFeatureContext<TBearerData, TBuilders>) => unknown)[],\n TBearerData,\n> = {\n /**\n * The name of the auth provider\n */\n name: string;\n\n /**\n * The query client tuple from createQueryClient\n */\n queryClientRef: AnyCreateQueryClientResult;\n\n /**\n * Query builders\n */\n queries: TBuilders;\n\n /**\n * Feature builders\n */\n features?: TFeatures;\n\n /**\n * A function that decrypts the bearer token\n * @default decryptBearer()\n */\n bearerDecryptFn?: (token: string) => TBearerData;\n\n /**\n * Multi-tab sync configuration\n * Set to false to disable\n * Leader election is automatically enabled when multiTabSync is enabled\n * @default { enabled: true, channelName: 'ethlete-auth-sync', syncTokens: true, syncLogout: true, leaderElection: true }\n */\n multiTabSync?:\n | false\n | {\n /**\n * Whether multi-tab sync is enabled\n * @default true\n */\n enabled?: boolean;\n\n /**\n * Channel name for BroadcastChannel\n * @default 'ethlete-auth-sync'\n */\n channelName?: string;\n\n /**\n * Whether to sync token updates across tabs\n * @default true\n */\n syncTokens?: boolean;\n\n /**\n * Whether to sync logout across tabs\n * @default true\n */\n syncLogout?: boolean;\n\n /**\n * Whether to use leader election for token refresh\n * When enabled, only one tab (the leader) will perform automatic token refreshes\n * @default true\n */\n leaderElection?: boolean;\n };\n};\n\nexport type BearerAuthProvider<\n TBuilders extends readonly AnyQueryBuilder[],\n TFeatures extends readonly ((context: BearerAuthProviderFeatureContext<TBearerData, TBuilders>) => unknown)[],\n TBearerData,\n> = {\n /**\n * Registry of all configured auth queries\n */\n queries: QueryRegistry<TBuilders>;\n\n /**\n * Registry of all configured features\n */\n features: FeatureRegistry<TFeatures, TBuilders>;\n\n /**\n * The current access token\n */\n accessToken: Signal<string | null>;\n\n /**\n * The current refresh token\n */\n refreshToken: Signal<string | null>;\n\n /**\n * The decrypted bearer data\n */\n bearerData: Signal<TBearerData | null>;\n\n /**\n * Whether the user is currently authenticated\n */\n isAuthenticated: Signal<boolean>;\n\n /**\n * The latest executed query (including internal triggers like auto-refresh)\n */\n latestExecutedQuery: Signal<{ key: ExtractQueryKey<TBuilders[number]>; snapshot: QuerySnapshot<QueryArgs> } | null>;\n\n /**\n * The latest non-internal query (user-triggered only)\n */\n latestNonInternalQuery: Signal<{\n key: ExtractQueryKey<TBuilders[number]>;\n snapshot: QuerySnapshot<QueryArgs>;\n } | null>;\n\n /**\n * Logout the user (clears all tokens and unbinds secure queries)\n */\n logout: () => void;\n\n /**\n * Observable that emits after a successful token refresh.\n * Secure queries can subscribe to this to re-execute themselves with the new token.\n */\n afterTokenRefresh$: Observable<void>;\n};\n\nexport type BearerAuthProviderFeatureContext<\n TBearerData = unknown,\n TBuilders extends readonly AnyQueryBuilder[] = readonly AnyQueryBuilder[],\n> = {\n refreshToken: WritableSignal<string | null>;\n afterTokenRefresh$: Observable<void>;\n accessToken: WritableSignal<string | null>;\n bearerData: Signal<TBearerData | null>;\n logout: () => void;\n injector: Injector;\n destroyRef: DestroyRef;\n setTokens: (access: string, refresh: string) => void;\n isLeader: () => boolean;\n leaderElection?: { isLeader: Signal<boolean>; instanceCount: Signal<number> };\n queries: QueryRegistry<TBuilders>;\n};\n\nexport type BearerAuthProviderQueryContext<\n TBearerData = unknown,\n TBuilders extends readonly AnyQueryBuilder[] = readonly AnyQueryBuilder[],\n> = {\n accessToken: WritableSignal<string | null>;\n refreshToken: WritableSignal<string | null>;\n bearerDecryptFn: ((token: string) => TBearerData) | undefined;\n queryClient: QueryClient;\n repository: QueryRepository;\n afterTokenRefresh$: Observable<void>;\n isLeader: () => boolean;\n queries: QueryRegistry<TBuilders>;\n};\n\nconst defaultExtractTokens = (response: unknown): BearerAuthProviderTokens => {\n if (!isObject(response)) {\n throw authExtractTokensResponseNotObject();\n }\n if (!('accessToken' in response) || typeof response['accessToken'] !== 'string') {\n throw authExtractTokensResponseMissingAccessToken();\n }\n if (!('refreshToken' in response) || typeof response['refreshToken'] !== 'string') {\n throw authExtractTokensResponseMissingRefreshToken();\n }\n return { accessToken: response['accessToken'], refreshToken: response['refreshToken'] };\n};\n\nconst setupBearerQueryRegistry = <TBuilders extends readonly AnyQueryBuilder[]>(\n builders: TBuilders,\n injector: Injector,\n latestExecutedQuery: WritableSignal<{ key: string; snapshot: QuerySnapshot<QueryArgs> } | null>,\n latestNonInternalQuery: WritableSignal<{ key: string; snapshot: QuerySnapshot<QueryArgs> } | null>,\n setTokens: (access: string, refresh: string) => void,\n) => {\n const queries = {} as QueryRegistry<TBuilders>;\n const querySnapshots = new Map<string, Signal<QuerySnapshot<QueryArgs> | null>>();\n\n for (const builder of builders) {\n const querySnapshot = signal<QuerySnapshot<QueryArgs> | null>(null);\n querySnapshots.set(builder.key, querySnapshot);\n\n const extractTokens = builder.config.extractTokens ?? defaultExtractTokens;\n\n effect(() => {\n const snapshot = querySnapshot();\n if (!snapshot) return;\n\n const response = snapshot.response();\n const loading = snapshot.loading();\n const error = snapshot.error();\n\n if (response && !loading && !error) {\n try {\n const tokens = extractTokens(response);\n setTokens(tokens.accessToken, tokens.refreshToken);\n } catch (extractError) {\n if (isDevMode()) {\n console.error(`Failed to extract tokens from ${builder.key} response:`, extractError);\n }\n }\n }\n });\n\n const execute = (args: RequestArgs<QueryArgs>, options?: { triggeredBy?: string }) => {\n const query = builder.config.queryCreator({\n onlyManualExecution: true,\n injector,\n });\n query.execute({ args, options });\n const snapshot = query.createSnapshot();\n\n latestExecutedQuery.set({ key: builder.key, snapshot });\n if (!snapshot.triggeredBy()) {\n latestNonInternalQuery.set({ key: builder.key, snapshot });\n }\n\n querySnapshot.set(snapshot);\n return snapshot;\n };\n\n queries[builder.key as ExtractQueryKey<TBuilders[number]>] = {\n execute,\n snapshot: querySnapshot.asReadonly(),\n } as unknown as QueryRegistry<TBuilders>[ExtractQueryKey<TBuilders[number]>];\n }\n\n return { queries, querySnapshots };\n};\n\nconst setupFeatures = <\n TBuilders extends readonly AnyQueryBuilder[],\n TFeatures extends readonly ((context: BearerAuthProviderFeatureContext<TBearerData, TBuilders>) => unknown)[],\n TBearerData,\n>(\n featureBuilders: TFeatures | undefined,\n context: BearerAuthProviderFeatureContext<TBearerData, TBuilders>,\n) => {\n const features: Record<string, unknown> = {};\n\n if (!featureBuilders?.length) {\n return features;\n }\n\n const featureTypes = new Set<BearerAuthFeatureType>();\n\n for (const featureSetup of featureBuilders) {\n const feature = featureSetup(context) as BearerAuthFeature<TBuilders, TBearerData> & { instance: unknown };\n\n if (featureTypes.has(feature.type)) {\n throw authProviderFeatureUsedMultipleTimes(feature.type);\n }\n\n featureTypes.add(feature.type);\n const featureName = feature.type\n .toLowerCase()\n .split('_')\n .map((word, index) => (index === 0 ? word : word.charAt(0).toUpperCase() + word.slice(1)))\n .join('');\n features[featureName] = feature.instance;\n }\n\n return features;\n};\n\nconst setupMultiTabSyncIfEnabled = (\n config: CreateBearerAuthProviderConfig<any, any, any>, // eslint-disable-line @typescript-eslint/no-explicit-any\n accessToken: WritableSignal<string | null>,\n refreshToken: WritableSignal<string | null>,\n queryClient: QueryClient,\n) => {\n const multiTabSyncConfig = config.multiTabSync;\n const multiTabSyncEnabled = multiTabSyncConfig !== false && (multiTabSyncConfig?.enabled ?? true);\n\n if (multiTabSyncEnabled) {\n setupMultiTabSync(\n {\n channelName: typeof multiTabSyncConfig === 'object' ? multiTabSyncConfig?.channelName : undefined,\n syncTokens: typeof multiTabSyncConfig === 'object' ? multiTabSyncConfig?.syncTokens : undefined,\n syncLogout: typeof multiTabSyncConfig === 'object' ? multiTabSyncConfig?.syncLogout : undefined,\n },\n accessToken,\n refreshToken,\n queryClient,\n );\n }\n};\n\nconst createLeaderElection = (\n config: CreateBearerAuthProviderConfig<any, any, any>, // eslint-disable-line @typescript-eslint/no-explicit-any\n) => {\n const multiTabSyncConfig = config.multiTabSync;\n const multiTabSyncEnabled = multiTabSyncConfig !== false && (multiTabSyncConfig?.enabled ?? true);\n const leaderElectionEnabled =\n multiTabSyncEnabled &&\n (typeof multiTabSyncConfig === 'object' ? (multiTabSyncConfig?.leaderElection ?? true) : true);\n const leaderElection = leaderElectionEnabled ? setupLeaderElection() : null;\n const isLeaderFn = () => (leaderElectionEnabled ? (leaderElection?.isLeader() ?? true) : true);\n const leaderElectionContext = leaderElection\n ? { isLeader: leaderElection.isLeader, instanceCount: leaderElection.instanceCount }\n : undefined;\n return { isLeaderFn, leaderElectionContext };\n};\n\nconst createBearerAuthProviderImpl = <\n TBuilders extends readonly AnyQueryBuilder[],\n TFeatures extends readonly ((context: BearerAuthProviderFeatureContext<TBearerData, TBuilders>) => unknown)[],\n TBearerData,\n>(\n config: CreateBearerAuthProviderConfig<TBuilders, TFeatures, TBearerData>,\n) => {\n const injector = inject(Injector);\n const destroyRef = inject(DestroyRef);\n const queryClient = config.queryClientRef[1]();\n\n const accessToken = signal<string | null>(null);\n const refreshToken = signal<string | null>(null);\n const afterTokenRefresh$ = new Subject<void>();\n\n const bearerData = computed<TBearerData | null>(() => {\n const token = accessToken();\n if (!token) return null;\n\n try {\n return config.bearerDecryptFn?.(token) ?? decryptBearer<TBearerData>(token);\n } catch (error) {\n if (isDevMode()) {\n console.error('Failed to decrypt bearer token:', error);\n }\n return null;\n }\n });\n\n const isAuthenticated = computed(() => !!accessToken());\n const latestExecutedQuery = signal<{ key: string; snapshot: QuerySnapshot<QueryArgs> } | null>(null);\n const latestNonInternalQuery = signal<{ key: string; snapshot: QuerySnapshot<QueryArgs> } | null>(null);\n\n const setTokens = (access: string, refresh: string) => {\n accessToken.set(access);\n refreshToken.set(refresh);\n afterTokenRefresh$.next();\n };\n\n const { queries } = setupBearerQueryRegistry(\n config.queries,\n injector,\n latestExecutedQuery,\n latestNonInternalQuery,\n setTokens,\n );\n\n const logout = () => {\n accessToken.set(null);\n refreshToken.set(null);\n queryClient.repository.unbindAllSecure();\n };\n\n const isLeader = createLeaderElection(config);\n\n const querySetupContext: BearerAuthProviderQueryContext<TBearerData, TBuilders> = {\n accessToken,\n refreshToken,\n bearerDecryptFn: config.bearerDecryptFn,\n queryClient,\n repository: queryClient.repository,\n isLeader: isLeader.isLeaderFn,\n afterTokenRefresh$,\n queries: queries as unknown as QueryRegistry<TBuilders>,\n };\n\n for (const builder of config.queries) {\n builder.setup?.(querySetupContext);\n }\n\n const featureSetupContext: BearerAuthProviderFeatureContext<TBearerData, TBuilders> = {\n refreshToken,\n accessToken,\n bearerData,\n logout,\n injector,\n destroyRef,\n setTokens,\n isLeader: isLeader.isLeaderFn,\n leaderElection: isLeader.leaderElectionContext,\n afterTokenRefresh$,\n queries: queries as unknown as QueryRegistry<TBuilders>,\n };\n\n const features = setupFeatures(config.features, featureSetupContext);\n\n setupMultiTabSyncIfEnabled(config, accessToken, refreshToken, queryClient);\n\n return {\n queries,\n features: features as FeatureRegistry<TFeatures, TBuilders>,\n accessToken: accessToken.asReadonly(),\n refreshToken: refreshToken.asReadonly(),\n bearerData,\n isAuthenticated,\n latestExecutedQuery: latestExecutedQuery.asReadonly(),\n latestNonInternalQuery: latestNonInternalQuery.asReadonly(),\n logout,\n afterTokenRefresh$,\n } as BearerAuthProvider<TBuilders, TFeatures, TBearerData>;\n};\n\nexport const createBearerAuthProvider = <\n TBuilders extends readonly AnyQueryBuilder[],\n TFeatures extends readonly ((context: BearerAuthProviderFeatureContext<TBearerData, TBuilders>) => unknown)[],\n TBearerData = unknown,\n>(\n config: CreateBearerAuthProviderConfig<TBuilders, TFeatures, TBearerData>,\n) => createRootProvider(() => createBearerAuthProviderImpl(config), { name: `BearerAuthProvider_${config.name}` });\n\nexport type BearerAuthProviderRef<\n TBuilders extends readonly AnyQueryBuilder[] = readonly AnyQueryBuilder[],\n TFeatures extends readonly ((context: BearerAuthProviderFeatureContext<TBearerData, TBuilders>) => unknown)[] =\n readonly ((context: BearerAuthProviderFeatureContext<unknown, readonly AnyQueryBuilder[]>) => unknown)[],\n TBearerData = unknown,\n> = ProviderResult<BearerAuthProvider<TBuilders, TFeatures, TBearerData>>;\n\nexport type AnyCreateBearerAuthProviderResult = BearerAuthProviderRef<any, any, any>; // eslint-disable-line @typescript-eslint/no-explicit-any\nexport type AnyBearerAuthProvider = NonNullable<ReturnType<AnyCreateBearerAuthProviderResult[1]>>;\n","import { isDevMode } from '@angular/core';\nimport { takeUntilDestroyed, toObservable } from '@angular/core/rxjs-interop';\nimport { filter, of, switchMap, tap, timer } from 'rxjs';\nimport { QueryArgs, QueryCreator, RequestArgs, ResponseType } from '../http';\nimport { ShouldRetryRequestFn } from '../http/query-retry-utils';\nimport { decryptBearer } from '../legacy/auth';\nimport { BearerAuthProviderQueryContext } from './bearer-auth-provider';\n\nexport type BearerAuthProviderTokens = {\n accessToken: string;\n refreshToken: string;\n};\n\nexport type AuthQueryConfig<TArgs extends QueryArgs> = {\n queryCreator: QueryCreator<TArgs>;\n /**\n * Extracts tokens from the response.\n * @default (response) => response (assumes response has accessToken and refreshToken properties)\n */\n extractTokens?: (response: ResponseType<TArgs>) => BearerAuthProviderTokens;\n /**\n * Custom retry function for HTTP requests.\n * @internal Used internally by token refresh queries\n */\n retryFn?: ShouldRetryRequestFn;\n};\n\nexport type TokenRefreshQueryConfig<TArgs extends QueryArgs> = AuthQueryConfig<TArgs> & {\n /**\n * The property name in the decoded JWT that contains the expiration time (in seconds).\n * @default 'exp'\n */\n expiresInPropertyName?: string;\n\n /**\n * Strategy for determining when to refresh the token.\n * Can be either:\n * - A percentage (0-1) of the token's lifetime (e.g., 0.75 = refresh at 75% of lifetime)\n * - A fixed time in milliseconds before expiration\n * - An object with both percentage and min/max constraints\n * @default { percentage: 0.75, minBufferMs: 60000, maxBufferMs: 600000 }\n */\n refreshStrategy?:\n | number\n | {\n /**\n * Percentage of token lifetime before refresh (0-1)\n * @default 0.75\n */\n percentage?: number;\n /**\n * Minimum buffer time in ms (prevents too-early refresh for short-lived tokens)\n * @default 60000 (1 minute)\n */\n minBufferMs?: number;\n /**\n * Maximum buffer time in ms (prevents too-late refresh for long-lived tokens)\n * @default 600000 (10 minutes)\n */\n maxBufferMs?: number;\n };\n\n /**\n * Minimum interval between refresh attempts in milliseconds.\n * Prevents rapid refresh loops in case of issues.\n * @default 30000 (30 seconds)\n */\n minRefreshInterval?: number;\n\n /**\n * Whether to immediately refresh if token is already expired on startup.\n * @default true\n */\n refreshIfExpired?: boolean;\n\n /**\n * Configuration for retry behavior on failed refresh attempts.\n * @default { retryableStatusCodes: [0, 408, 425, 429, 500, 502, 503, 504], maxRetryDelayMs: 30000 }\n */\n retryConfig?: {\n /**\n * HTTP status codes that should trigger a retry.\n * Code 0 means network error (no internet).\n * @default [0, 408, 425, 429, 500, 502, 503, 504]\n */\n retryableStatusCodes?: number[];\n /**\n * Maximum delay between retries in milliseconds.\n * Uses exponential backoff up to this limit, then stays constant.\n * @default 30000 (30 seconds)\n */\n maxRetryDelayMs?: number;\n /**\n * Maximum number of retry attempts.\n * Set to 0 for unlimited retries.\n * @default 0 (unlimited)\n */\n maxAttempts?: number;\n };\n\n /**\n * Whether to automatically retry failed requests with 401 status after refreshing tokens.\n * @default true\n */\n autoRetryOn401?: boolean;\n};\n\nexport type AuthQueryBuilder<TKey extends string, TArgs extends QueryArgs> = {\n _type: 'authQuery';\n key: TKey;\n config: AuthQueryConfig<TArgs>;\n setup?: (context: BearerAuthProviderQueryContext) => void;\n};\n\nexport type TokenRefreshQueryBuilder<TKey extends string, TArgs extends QueryArgs> = {\n _type: 'tokenRefreshQuery';\n key: TKey;\n config: TokenRefreshQueryConfig<TArgs>;\n setup?: (context: BearerAuthProviderQueryContext) => void;\n};\n\nexport type AnyQueryBuilder =\n | AuthQueryBuilder<string, any> // eslint-disable-line @typescript-eslint/no-explicit-any\n | TokenRefreshQueryBuilder<string, any>; // eslint-disable-line @typescript-eslint/no-explicit-any\n\nexport const withAuthenticationQuery = <TKey extends string, TArgs extends QueryArgs>(\n key: TKey,\n config: AuthQueryConfig<TArgs>,\n setup?: (context: BearerAuthProviderQueryContext) => void,\n): AuthQueryBuilder<TKey, TArgs> => ({\n _type: 'authQuery',\n key,\n config: {\n ...config,\n queryCreator: config.queryCreator.clone({ subtle: { useQueryRepositoryCache: true } }),\n },\n setup,\n});\n\nexport const withRefreshQuery = <TKey extends string, TArgs extends QueryArgs>(\n key: TKey,\n config: TokenRefreshQueryConfig<TArgs>,\n): TokenRefreshQueryBuilder<TKey, TArgs> => {\n const retryableStatusCodes = config.retryConfig?.retryableStatusCodes ?? [0, 408, 425, 429, 500, 502, 503, 504];\n const maxRetryDelayMs = config.retryConfig?.maxRetryDelayMs ?? 30000; // 30 seconds\n const maxAttempts = config.retryConfig?.maxAttempts ?? 0; // 0 = unlimited\n\n const refreshRetryFn: ShouldRetryRequestFn = ({ error, retryCount }) => {\n const { status } = error;\n\n if (maxAttempts > 0 && retryCount >= maxAttempts) {\n return { retry: false };\n }\n\n if (!retryableStatusCodes.includes(status)) {\n return { retry: false };\n }\n\n if (status === 429) {\n const retryAfter = error.headers.get('retry-after') || error.headers.get('x-retry-after');\n if (retryAfter) {\n const delay = parseInt(retryAfter) * 1000;\n if (!Number.isNaN(delay)) {\n return { retry: true, delay: Math.min(delay, maxRetryDelayMs) };\n }\n }\n }\n\n const exponentialDelay = 1000 * Math.pow(2, retryCount);\n const delay = Math.min(exponentialDelay, maxRetryDelayMs);\n\n return { retry: true, delay };\n };\n\n const setup = (context: BearerAuthProviderQueryContext) => {\n const expiresInPropertyName = config.expiresInPropertyName ?? 'exp';\n const minRefreshInterval = config.minRefreshInterval ?? 30000; // 30 seconds default\n const refreshIfExpired = config.refreshIfExpired ?? true;\n\n let lastRefreshTime = 0;\n\n const executeRefresh = (triggeredInternally = true) => {\n const currentRefreshToken = context.refreshToken();\n if (!currentRefreshToken || !context.isLeader()) return;\n\n const now = Date.now();\n const timeSinceLastRefresh = now - lastRefreshTime;\n\n // Prevent too-frequent refreshes\n if (timeSinceLastRefresh < minRefreshInterval) return;\n\n lastRefreshTime = now;\n const refreshArgs = { body: { token: currentRefreshToken } } as RequestArgs<QueryArgs>;\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n context.queries[key]!.execute(refreshArgs, {\n triggeredBy: triggeredInternally ? 'token-refresh' : undefined,\n });\n };\n\n const calculateRefreshBuffer = (tokenLifetimeMs: number): number => {\n if (typeof config.refreshStrategy === 'number') {\n return config.refreshStrategy;\n }\n\n const percentage = config.refreshStrategy?.percentage ?? 0.75;\n const minBufferMs = config.refreshStrategy?.minBufferMs ?? 60000; // 1 minute\n const maxBufferMs = config.refreshStrategy?.maxBufferMs ?? 600000; // 10 minutes\n\n const calculatedBuffer = tokenLifetimeMs * (1 - percentage);\n\n return Math.max(minBufferMs, Math.min(maxBufferMs, calculatedBuffer));\n };\n\n // Auto-refresh based on token expiration\n toObservable(context.accessToken)\n .pipe(\n switchMap((token) => {\n if (!token) return of(null);\n\n try {\n const bearerDataValue = context.bearerDecryptFn ? context.bearerDecryptFn(token) : decryptBearer(token);\n const expiresIn = (bearerDataValue as Record<string, unknown>)?.[expiresInPropertyName];\n\n if (typeof expiresIn !== 'number') {\n if (isDevMode()) {\n console.warn(`Token does not contain valid ${expiresInPropertyName} property for auto-refresh`);\n }\n return of(null);\n }\n\n const expiresAtMs = expiresIn * 1000;\n const now = Date.now();\n const tokenLifetimeMs = expiresAtMs - now;\n\n if (tokenLifetimeMs <= 0) {\n if (refreshIfExpired) {\n if (isDevMode()) {\n console.warn('Token is already expired, triggering immediate refresh');\n }\n return of(true);\n }\n return of(null);\n }\n\n const refreshBufferMs = calculateRefreshBuffer(tokenLifetimeMs);\n const timeUntilRefresh = tokenLifetimeMs - refreshBufferMs;\n\n if (timeUntilRefresh <= 0) {\n return of(true);\n }\n\n return timer(timeUntilRefresh).pipe(tap(() => true));\n } catch {\n return of(null);\n }\n }),\n takeUntilDestroyed(),\n )\n .subscribe((shouldRefresh) => {\n if (shouldRefresh) {\n executeRefresh(true);\n }\n });\n\n // Auto-retry on 401: Listen to repository events and trigger refresh on 401 errors\n const autoRetryOn401 = config.autoRetryOn401 ?? true;\n if (autoRetryOn401) {\n context.repository.events$\n .pipe(\n filter((event) => {\n // Only handle 401 errors for secure queries\n if (event.type !== 'request-error') return false;\n if (!event.isSecure) return false;\n if (event.error?.status !== 401) return false;\n\n return true;\n }),\n takeUntilDestroyed(),\n )\n .subscribe(() => {\n executeRefresh(true);\n });\n }\n };\n\n return {\n _type: 'tokenRefreshQuery',\n key,\n config: {\n ...config,\n queryCreator: config.queryCreator.clone({ retryFn: refreshRetryFn, subtle: { useQueryRepositoryCache: true } }),\n },\n setup,\n };\n};\n","import { DestroyRef, DOCUMENT, effect, inject, Signal, signal } from '@angular/core';\nimport { filter, fromEvent, interval, merge, switchMap, throttleTime, timer } from 'rxjs';\nimport { AnyQueryBuilder, BearerAuthFeatureType, BearerAuthProviderFeatureContext } from '../bearer-auth-provider';\n\nexport type InactivityLogoutConfig = {\n /**\n * Time in milliseconds of inactivity before auto-logout\n * @default 15 * 60 * 1000 (15 minutes)\n */\n inactivityTimeout?: number;\n /**\n * Events to track for activity detection\n * @default ['mousedown', 'keydown', 'scroll', 'touchstart']\n */\n activityEvents?: string[];\n /**\n * Custom activity check function (called periodically)\n * Return true if user is active\n */\n customActivityCheck?: () => boolean;\n};\n\nexport type InactivityLogoutFeature = {\n /**\n * Enable inactivity tracking\n */\n enable: () => void;\n /**\n * Disable inactivity tracking\n */\n disable: () => void;\n /**\n * Reset the inactivity timer (mark user as active)\n */\n resetTimer: () => void;\n /**\n * Whether inactivity tracking is enabled\n */\n enabled: Signal<boolean>;\n /**\n * Milliseconds until auto-logout (null if disabled or no token)\n */\n calculateTimeUntilLogout: () => number | null;\n};\n\nexport const withInactivityLogout = <TBuilders extends readonly AnyQueryBuilder[]>(\n config: InactivityLogoutConfig = {},\n) => {\n return (context: BearerAuthProviderFeatureContext<unknown, TBuilders>) => {\n const inactivityTimeout = config.inactivityTimeout ?? 15 * 60 * 1000;\n const activityEvents = config.activityEvents ?? ['mousedown', 'keydown', 'scroll', 'touchstart'];\n const destroyRef = inject(DestroyRef);\n const document = inject(DOCUMENT);\n const enabled = signal(true);\n const lastActivityTime = signal(Date.now());\n\n const resetTimer = () => {\n lastActivityTime.set(Date.now());\n };\n\n const activityFromEvents$ = merge(...activityEvents.map((event) => fromEvent(document, event))).pipe(\n throttleTime(1000),\n );\n\n const activityFromCustomCheck$ = config.customActivityCheck\n ? interval(1000).pipe(filter(() => config.customActivityCheck?.() ?? false))\n : merge();\n\n const activity$ = merge(activityFromEvents$, activityFromCustomCheck$);\n\n const activitySubscription = activity$.subscribe(() => {\n if (enabled() && context.accessToken()) {\n resetTimer();\n }\n });\n\n const inactivityLogout$ = activity$.pipe(\n switchMap(() => timer(inactivityTimeout)),\n filter(() => enabled() && !!context.accessToken()),\n );\n\n const logoutSubscription = inactivityLogout$.subscribe(() => {\n context.logout();\n });\n\n effect(() => {\n const token = context.accessToken();\n if (token && enabled()) {\n resetTimer();\n }\n });\n\n const enable = () => {\n enabled.set(true);\n resetTimer();\n };\n\n const disable = () => {\n enabled.set(false);\n };\n\n const calculateTimeUntilLogout = () => {\n if (!enabled() || !context.accessToken()) {\n return null;\n }\n\n const elapsed = Date.now() - lastActivityTime();\n const remaining = inactivityTimeout - elapsed;\n\n return remaining > 0 ? remaining : 0;\n };\n\n resetTimer();\n\n destroyRef.onDestroy(() => {\n activitySubscription.unsubscribe();\n logoutSubscription.unsubscribe();\n });\n\n const instance: InactivityLogoutFeature = {\n enable,\n disable,\n resetTimer,\n enabled: enabled.asReadonly(),\n calculateTimeUntilLogout,\n };\n\n return {\n type: BearerAuthFeatureType.INACTIVITY_LOGOUT,\n instance,\n };\n };\n};\n","import { Signal, effect, signal } from '@angular/core';\nimport { deleteCookie as coreDeleteCookie, getCookie, getDomain, injectRoute, setCookie } from '@ethlete/core';\nimport { RequestArgs } from '../../http';\nimport {\n AnyQueryBuilder,\n BearerAuthFeatureType,\n BearerAuthProviderFeatureContext,\n ExtractQueryArgs,\n ExtractQueryKey,\n} from '../bearer-auth-provider';\nimport { decryptToken, encryptToken } from '../utils';\n\nexport type PersistentAuthConfig<\n TBuilders extends readonly AnyQueryBuilder[],\n TKey extends ExtractQueryKey<TBuilders[number]> = ExtractQueryKey<TBuilders[number]>,\n> = {\n /**\n * Default remember me state when no user preference is stored.\n * @default false\n */\n defaultRememberMe?: boolean;\n\n /**\n * Cookie configuration\n */\n cookie?: {\n /**\n * The cookie name where the refresh token is stored\n * @default 'etAuth'\n */\n name?: string;\n /**\n * The domain of the cookie. If not set, the current origin will be used.\n */\n domain?: string;\n /**\n * The days until the cookie expires (only used when rememberMe is true)\n * @default 30\n */\n expiresInDays?: number;\n /**\n * The path of the cookie\n * @default '/'\n */\n path?: string;\n /**\n * The same site property of the cookie\n * @default 'lax'\n */\n sameSite?: 'strict' | 'none' | 'lax';\n };\n\n /**\n * Auto-login configuration\n */\n autoLogin: {\n /**\n * The query key to use for auto-login (must reference a registered query)\n */\n queryKey: TKey;\n /**\n * A function that turns the token gotten from the cookie into the body for the auto-login request\n * @default (token) => ({ body: { token } })\n */\n buildArgs: (token: string) => RequestArgs<ExtractQueryArgs<Extract<TBuilders[number], { key: TKey }>>>;\n /**\n * An array of routes where the auto login via cookie should not be triggered.\n *\n * @default []\n */\n excludeRoutes?: string[];\n };\n};\n\nexport type PersistentAuthFeature = {\n /**\n * Current remember me state (session cookie vs persistent cookie)\n */\n rememberMe: Signal<boolean>;\n /**\n * Set remember me preference.\n * - true: Creates persistent cookie with expiresInDays\n * - false: Creates session cookie (deleted on browser close)\n */\n setRememberMe: (enabled: boolean) => void;\n /**\n * Try to login using stored cookie\n */\n tryLogin: () => void;\n};\n\nexport const withPersistentAuth = <\n TBuilders extends readonly AnyQueryBuilder[],\n TKey extends ExtractQueryKey<TBuilders[number]> = ExtractQueryKey<TBuilders[number]>,\n>(\n config: PersistentAuthConfig<TBuilders, TKey>,\n) => {\n return (context: BearerAuthProviderFeatureContext<unknown, TBuilders>) => {\n const instance = createPersistentAuthFeature(config, context);\n return {\n type: BearerAuthFeatureType.PERSISTENT_AUTH,\n instance,\n };\n };\n};\n\nexport const createPersistentAuthFeature = <\n TBuilders extends readonly AnyQueryBuilder[],\n TKey extends ExtractQueryKey<TBuilders[number]> = ExtractQueryKey<TBuilders[number]>,\n>(\n config: PersistentAuthConfig<TBuilders, TKey>,\n context: BearerAuthProviderFeatureContext<unknown, TBuilders>,\n): PersistentAuthFeature => {\n const { refreshToken } = context;\n const cookieName = config.cookie?.name ?? 'etAuth';\n const rememberMeStorageKey = `${cookieName}-rememberMe`;\n const route = injectRoute();\n\n const initializeRememberMe = (): boolean => {\n const storedPreference = typeof localStorage !== 'undefined' ? localStorage.getItem(rememberMeStorageKey) : null;\n if (storedPreference !== null) {\n return storedPreference === 'true';\n }\n\n const existingCookie = getCookie(cookieName);\n if (existingCookie) {\n return true;\n }\n\n return config.defaultRememberMe ?? false;\n };\n\n const rememberMeSignal = signal(initializeRememberMe());\n\n effect(() => {\n const token = refreshToken();\n const rememberMe = rememberMeSignal();\n const domain = config.cookie?.domain ?? getDomain() ?? 'localhost';\n const path = config.cookie?.path ?? '/';\n const sameSite = config.cookie?.sameSite ?? 'lax';\n\n if (token) {\n const encryptedToken = encryptToken(token);\n if (rememberMe) {\n const expiresInDays = config.cookie?.expiresInDays ?? 30;\n setCookie(cookieName, encryptedToken, expiresInDays, domain, path, sameSite);\n } else {\n setCookie(cookieName, encryptedToken, null, domain, path, sameSite);\n }\n } else {\n coreDeleteCookie(cookieName, path, domain);\n }\n });\n\n const tryLogin = () => {\n const currentRoute = route();\n const excludeRoutes = config.autoLogin.excludeRoutes ?? [];\n const shouldExclude = excludeRoutes.some((r) => currentRoute.startsWith(r));\n\n if (shouldExclude) {\n return;\n }\n\n const storedToken = getCookie(cookieName);\n if (storedToken) {\n const decryptedToken = decryptToken(storedToken);\n const args = config.autoLogin.buildArgs(decryptedToken);\n context.queries[config.autoLogin.queryKey].execute(args, { triggeredBy: 'persistent-auth' });\n }\n };\n\n const setRememberMe = (enabled: boolean) => {\n if (typeof localStorage !== 'undefined') {\n localStorage.setItem(rememberMeStorageKey, String(enabled));\n }\n rememberMeSignal.set(enabled);\n };\n\n tryLogin();\n\n return {\n rememberMe: rememberMeSignal.asReadonly(),\n setRememberMe,\n tryLogin,\n };\n};\n","import { Signal, computed } from '@angular/core';\nimport { toObservable, toSignal } from '@angular/core/rxjs-interop';\nimport { combineLatest, interval, map } from 'rxjs';\nimport { AnyQueryBuilder, BearerAuthFeatureType, BearerAuthProviderFeatureContext } from '../bearer-auth-provider';\n\nexport type TokenExpirationWarningConfig = {\n /**\n * Time in milliseconds before token expiration to emit warning\n * @default 5 * 60 * 1000 (5 minutes)\n */\n warningThreshold?: number;\n /**\n * Interval in milliseconds to check for token expiration\n * @default 1000 (1 second)\n */\n checkInterval?: number;\n};\n\nexport type TokenExpirationWarningFeature = {\n /**\n * Signal that emits true when token is about to expire\n */\n isExpiringSoon: Signal<boolean>;\n /**\n * Time in milliseconds until token expires (null if no token or expired)\n */\n expiresIn: Signal<number | null>;\n /**\n * Timestamp when token expires (null if no token)\n */\n expiresAt: Signal<Date | null>;\n};\n\nexport const withTokenExpirationWarning = <TBuilders extends readonly AnyQueryBuilder[]>(\n config: NoInfer<TokenExpirationWarningConfig> = {},\n) => {\n return (context: BearerAuthProviderFeatureContext<unknown, TBuilders>) => {\n const warningThreshold = config.warningThreshold ?? 5 * 60 * 1000;\n const checkInterval = config.checkInterval ?? 1000;\n const expiresAt = computed<Date | null>(() => {\n const decoded = context.bearerData() as { exp?: number; [key: string]: unknown } | null;\n if (!decoded) return null;\n\n const exp = decoded.exp;\n\n if (typeof exp !== 'number') return null;\n\n return new Date(exp * 1000);\n });\n\n const expiresIn$ = combineLatest([interval(checkInterval), toObservable(context.bearerData)]).pipe(\n map(() => {\n const expiry = expiresAt();\n if (!expiry) return null;\n\n const now = Date.now();\n const msUntilExpiry = expiry.getTime() - now;\n\n return msUntilExpiry > 0 ? msUntilExpiry : null;\n }),\n );\n\n const isExpiringSoon$ = expiresIn$.pipe(\n map((msUntilExpiry) => {\n if (msUntilExpiry === null) return false;\n return msUntilExpiry <= warningThreshold && msUntilExpiry > 0;\n }),\n );\n\n const expiresIn = toSignal(expiresIn$, { initialValue: null });\n const isExpiringSoon = toSignal(isExpiringSoon$, { initialValue: false });\n\n const instance: TokenExpirationWarningFeature = {\n expiresAt,\n expiresIn,\n isExpiringSoon,\n };\n\n return {\n type: BearerAuthFeatureType.TOKEN_EXPIRATION_WARNING,\n instance,\n };\n };\n};\n","import { effect, Signal, signal, untracked } from '@angular/core';\nimport { AnyQuerySnapshot, QuerySnapshot, RequestArgs } from '../../http';\nimport {\n AnyQueryBuilder,\n BearerAuthFeatureType,\n BearerAuthProviderFeatureContext,\n ExtractQueryArgs,\n ExtractQueryKey,\n} from '../bearer-auth-provider';\n\nexport type TokenRevocationConfig<\n TBuilders extends readonly AnyQueryBuilder[],\n TKey extends ExtractQueryKey<TBuilders[number]> = ExtractQueryKey<TBuilders[number]>,\n> = {\n /**\n * The query key to use for token revocation (must reference a registered query)\n */\n queryKey: TKey;\n /**\n * Function to build the revocation request args from tokens\n */\n buildArgs: (tokens: {\n accessToken: string | null;\n refreshToken: string | null;\n }) => RequestArgs<ExtractQueryArgs<Extract<TBuilders[number], { key: TKey }>>>;\n /**\n * Whether to revoke on logout\n * @default true\n */\n revokeOnLogout?: boolean;\n};\n\nexport type TokenRevocationFeature<TQuerySnapshot extends AnyQuerySnapshot> = {\n /**\n * Manually revoke the current tokens.\n * Returns `null` if there are no tokens to revoke\n * Returns the revocation query snapshot if revocation was attempted\n */\n revoke: () => TQuerySnapshot | null;\n /**\n * Enable automatic revocation on logout\n */\n enable: () => void;\n /**\n * Disable automatic revocation on logout\n */\n disable: () => void;\n /**\n * Whether automatic revocation is enabled\n */\n enabled: Signal<boolean>;\n};\n\nexport const withTokenRevocation = <\n TBuilders extends readonly AnyQueryBuilder[],\n TKey extends ExtractQueryKey<TBuilders[number]> = ExtractQueryKey<TBuilders[number]>,\n>(\n config: TokenRevocationConfig<TBuilders, TKey>,\n) => {\n return (context: BearerAuthProviderFeatureContext<unknown, TBuilders>) => {\n type RevocationSnapshot = QuerySnapshot<ExtractQueryArgs<Extract<TBuilders[number], { key: TKey }>>>;\n\n const revokeOnLogout = config.revokeOnLogout ?? true;\n\n const enabled = signal(true);\n let previousAccessToken: string | null = null;\n let currentRevocationSnapshot: RevocationSnapshot | null = null;\n\n const revoke = () => {\n if (currentRevocationSnapshot?.isAlive()) return currentRevocationSnapshot;\n\n const accessToken = context.accessToken();\n const refreshToken = context.refreshToken();\n\n if (!accessToken && !refreshToken) {\n return null;\n }\n\n const args = config.buildArgs({ accessToken, refreshToken });\n\n currentRevocationSnapshot = context.queries[config.queryKey].execute(args, {\n triggeredBy: 'token-revocation',\n });\n\n return currentRevocationSnapshot;\n };\n\n const enable = () => {\n enabled.set(true);\n };\n\n const disable = () => {\n enabled.set(false);\n };\n\n if (revokeOnLogout) {\n effect(\n () => {\n const currentToken = context.accessToken();\n\n if (previousAccessToken && !currentToken && enabled()) {\n untracked(() => revoke());\n }\n\n previousAccessToken = currentToken;\n },\n { injector: context.injector },\n );\n }\n\n const instance: TokenRevocationFeature<RevocationSnapshot> = {\n revoke,\n enable,\n disable,\n enabled: enabled.asReadonly(),\n };\n\n return {\n type: BearerAuthFeatureType.TOKEN_REVOCATION,\n instance,\n };\n };\n};\n","import { effect, Signal } from '@angular/core';\nimport { QueryArgs, QueryErrorResponse, QuerySnapshot } from '../../http';\nimport {\n AnyQueryBuilder,\n BearerAuthFeatureType,\n BearerAuthProviderFeatureContext,\n ExtractQueryArgs,\n ExtractQueryKey,\n} from '../bearer-auth-provider';\n\nexport type TrackingEventName<TBuilders extends readonly AnyQueryBuilder[]> =\n | `${ExtractQueryKey<TBuilders[number]>}Execute`\n | `${ExtractQueryKey<TBuilders[number]>}Success`\n | `${ExtractQueryKey<TBuilders[number]>}Failure`\n | 'tokenRefreshSuccess'\n | 'logout'\n | 'leaderStatusChange'\n | 'leaderInstanceCountChange';\n\ntype ExtractKeyFromEventName<TEventName extends string> = TEventName extends `${infer K}Execute`\n ? K\n : TEventName extends `${infer K}Success`\n ? K\n : TEventName extends `${infer K}Failure`\n ? K\n : never;\n\ntype ExtractArgsForEvent<TBuilders extends readonly AnyQueryBuilder[], TEventName extends string> = ExtractQueryArgs<\n Extract<TBuilders[number], { key: ExtractKeyFromEventName<TEventName> }>\n>;\n\nexport type QueryExecuteEventData<TArgs extends QueryArgs = QueryArgs> = {\n queryKey: string;\n args: TArgs;\n};\n\nexport type QuerySuccessEventData<TArgs extends QueryArgs = QueryArgs> = {\n snapshot: QuerySnapshot<TArgs>;\n};\n\nexport type QueryFailureEventData = {\n error: QueryErrorResponse;\n};\n\nexport type TokenRefreshEventData = {\n automatic: boolean;\n};\n\nexport type LeaderStatusChangeEventData = {\n isLeader: boolean;\n};\n\nexport type LeaderInstanceCountChangeEventData = {\n count: number;\n};\n\nexport type TrackingEventDataMap<TBuilders extends readonly AnyQueryBuilder[]> = {\n [K in TrackingEventName<TBuilders>]: K extends `${string}Execute`\n ? QueryExecuteEventData<ExtractArgsForEvent<TBuilders, K>>\n : K extends `${string}Success`\n ? QuerySuccessEventData<ExtractArgsForEvent<TBuilders, K>>\n : K extends `${string}Failure`\n ? QueryFailureEventData\n : K extends 'tokenRefreshSuccess'\n ? TokenRefreshEventData\n : K extends 'logout'\n ? void\n : K extends 'leaderStatusChange'\n ? LeaderStatusChangeEventData\n : K extends 'leaderInstanceCountChange'\n ? LeaderInstanceCountChangeEventData\n : never;\n};\n\nexport type TrackingEventHandler<TData> = (data: TData) => void;\n\nexport type TrackingConfig<TBuilders extends readonly AnyQueryBuilder[] = readonly AnyQueryBuilder[]> = {\n /**\n * Whether to track internal events (auto token refresh, etc.)\n * @default true\n */\n trackInternalEvents?: boolean;\n\n /**\n * Event handlers to register immediately\n */\n on?: {\n [K in TrackingEventName<TBuilders>]?: TrackingEventHandler<TrackingEventDataMap<TBuilders>[K]>;\n };\n};\n\nexport type TrackingFeature<TBuilders extends readonly AnyQueryBuilder[]> = {\n /**\n * Register an event handler for a specific event\n * @returns Unsubscribe function\n */\n on<TEvent extends TrackingEventName<TBuilders>>(\n event: TEvent,\n handler: TrackingEventHandler<TrackingEventDataMap<TBuilders>[TEvent]>,\n ): () => void;\n\n /**\n * Unregister an event handler\n */\n off<TEvent extends TrackingEventName<TBuilders>>(\n event: TEvent,\n handler: TrackingEventHandler<TrackingEventDataMap<TBuilders>[TEvent]>,\n ): void;\n};\n\nexport const withTracking = <TBuilders extends readonly AnyQueryBuilder[]>(config?: TrackingConfig<TBuilders>) => {\n return (context: BearerAuthProviderFeatureContext<unknown, TBuilders>) => {\n const instance = createTrackingFeature<TBuilders>(context, config);\n return {\n type: BearerAuthFeatureType.TRACKING,\n instance,\n };\n };\n};\n\nexport const createTrackingFeature = <TBuilders extends readonly AnyQueryBuilder[]>(\n context: BearerAuthProviderFeatureContext<unknown, TBuilders>,\n config?: TrackingConfig<TBuilders>,\n): TrackingFeature<TBuilders> => {\n const handlers = new Map<string, Set<TrackingEventHandler<any>>>(); // eslint-disable-line @typescript-eslint/no-explicit-any\n\n const on = <TEvent extends TrackingEventName<TBuilders>>(\n event: TEvent,\n handler: TrackingEventHandler<TrackingEventDataMap<TBuilders>[TEvent]>,\n ): (() => void) => {\n if (!handlers.has(event)) {\n handlers.set(event, new Set());\n }\n const eventHandlers = handlers.get(event);\n if (eventHandlers) {\n eventHandlers.add(handler);\n }\n\n return () => off(event, handler);\n };\n\n const off = <TEvent extends TrackingEventName<TBuilders>>(\n event: TEvent,\n handler: TrackingEventHandler<TrackingEventDataMap<TBuilders>[TEvent]>,\n ): void => {\n const eventHandlers = handlers.get(event);\n if (eventHandlers) {\n eventHandlers.delete(handler);\n if (eventHandlers.size === 0) {\n handlers.delete(event);\n }\n }\n };\n\n const fireHandlers = (event: string, data: unknown): void => {\n const eventHandlers = handlers.get(event);\n if (eventHandlers) {\n eventHandlers.forEach((handler) => {\n try {\n handler(data);\n } catch (error) {\n console.error(`Error in tracking event handler for \"${event}\":`, error);\n }\n });\n }\n };\n\n type ForwardedMessage = { event: string; data: unknown };\n const forwardingChannel =\n context.leaderElection && typeof BroadcastChannel !== 'undefined'\n ? new BroadcastChannel('ethlete-auth-tracking')\n : null;\n\n if (forwardingChannel) {\n forwardingChannel.onmessage = (messageEvent: MessageEvent<ForwardedMessage>) => {\n if (context.isLeader()) {\n fireHandlers(messageEvent.data.event, messageEvent.data.data);\n }\n };\n context.destroyRef.onDestroy(() => forwardingChannel.close());\n }\n\n const emit = (event: string, data: unknown): void => {\n if (forwardingChannel && !context.isLeader()) {\n forwardingChannel.postMessage({ event, data } satisfies ForwardedMessage);\n return;\n }\n fireHandlers(event, data);\n };\n\n const emitDirect = (event: string, data: unknown): void => {\n fireHandlers(event, data);\n };\n\n const trackedQueries = new Map<string, { loading: boolean; lastResult: 'success' | 'error' | null }>();\n\n Object.entries(context.queries).forEach(([key, queryEntry]) => {\n const query = queryEntry as { snapshot: Signal<any>; execute: (...args: any[]) => any }; // eslint-disable-line @typescript-eslint/no-explicit-any\n\n effect(() => {\n const snapshot = query.snapshot();\n if (!snapshot) return;\n\n const triggeredBy = snapshot.triggeredBy();\n if (triggeredBy) return;\n\n const loading = snapshot.loading();\n const error = snapshot.error();\n const response = snapshot.response();\n\n const prevState = trackedQueries.get(key);\n\n if (response && !loading && !error && prevState?.lastResult !== 'success') {\n trackedQueries.set(key, { loading: false, lastResult: 'success' });\n emit(`${key}Success`, { snapshot });\n }\n\n if (error && !loading && prevState?.lastResult !== 'error') {\n trackedQueries.set(key, { loading: false, lastResult: 'error' });\n emit(`${key}Failure`, { error });\n }\n\n if (loading) {\n trackedQueries.set(key, { loading: true, lastResult: null });\n }\n });\n });\n\n let hadTokens = false;\n effect(() => {\n const accessToken = context.accessToken();\n const refreshToken = context.refreshToken();\n const hasTokens = !!(accessToken || refreshToken);\n\n if (hadTokens && !hasTokens) {\n emit('logout', undefined);\n }\n\n hadTokens = hasTokens;\n });\n\n context.afterTokenRefresh$.subscribe(() => {\n emit('tokenRefreshSuccess', {\n queryKey: 'refresh',\n snapshot: undefined,\n });\n });\n\n if (config?.on) {\n Object.entries(config.on).forEach(([event, handler]) => {\n if (handler) {\n on(event as TrackingEventName<TBuilders>, handler);\n }\n });\n }\n\n if (context.leaderElection) {\n const { isLeader: isLeaderSignal, instanceCount: instanceCountSignal } = context.leaderElection;\n\n effect(() => {\n emitDirect('leaderStatusChange', { isLeader: isLeaderSignal() } satisfies LeaderStatusChangeEventData);\n });\n\n effect(() => {\n emitDirect('leaderInstanceCountChange', {\n count: instanceCountSignal(),\n } satisfies LeaderInstanceCountChangeEventData);\n });\n }\n\n return {\n on,\n off,\n };\n};\n","import { HttpStatusCode } from '@angular/common/http';\n\nexport const parseHttpErrorCodeToTitleDe = (statusCode: HttpStatusCode) => {\n switch (statusCode) {\n case HttpStatusCode.BadRequest:\n return 'Ungültige Anfrage';\n case HttpStatusCode.Unauthorized:\n return 'Nicht autorisiert';\n case HttpStatusCode.PaymentRequired:\n return 'Zahlung erforderlich';\n case HttpStatusCode.Forbidden:\n return 'Verboten';\n case HttpStatusCode.NotFound:\n return 'Nicht gefunden';\n case HttpStatusCode.MethodNotAllowed:\n return 'Methode nicht erlaubt';\n case HttpStatusCode.NotAcceptable:\n return 'Nicht akzeptabel';\n case HttpStatusCode.ProxyAuthenticationRequired:\n return 'Proxy-Authentifizierung erforderlich';\n case HttpStatusCode.RequestTimeout:\n return 'Anforderungszeitüberschreitung';\n case HttpStatusCode.Conflict:\n return 'Konflikt';\n case HttpStatusCode.Gone:\n return 'Weg';\n case HttpStatusCode.LengthRequired:\n return 'Länge erforderlich';\n case HttpStatusCode.PreconditionFailed:\n return 'Vorbedingung fehlgeschlagen';\n case HttpStatusCode.PayloadTooLarge:\n return 'Nutzlast zu groß';\n case HttpStatusCode.UriTooLong:\n return 'URI zu lang';\n case HttpStatusCode.UnsupportedMediaType:\n return 'Nicht unterstützter Medientyp';\n case HttpStatusCode.RangeNotSatisfiable:\n return 'Bereich nicht zufriedenstellend';\n case HttpStatusCode.ExpectationFailed:\n return 'Erwartung fehlgeschlagen';\n case HttpStatusCode.ImATeapot:\n return 'Ich bin eine Teekanne';\n case HttpStatusCode.MisdirectedRequest:\n return 'Fehlgeleitete Anfrage';\n case HttpStatusCode.UnprocessableEntity:\n return 'Unverarbeitbare Entität';\n case HttpStatusCode.Locked:\n return 'Gesperrt';\n case HttpStatusCode.FailedDependency:\n return 'Fehlgeschlagene Abhängigkeit';\n case HttpStatusCode.TooEarly:\n return 'Zu früh';\n case HttpStatusCode.UpgradeRequired:\n return 'Upgrade erforderlich';\n case HttpStatusCode.PreconditionRequired:\n return 'Vorbedingung erforderlich';\n case HttpStatusCode.TooManyRequests:\n return 'Zu viele Anfragen';\n case HttpStatusCode.RequestHeaderFieldsTooLarge:\n return 'Anforderungskopffelder zu groß';\n case HttpStatusCode.UnavailableForLegalReasons:\n return 'Aus rechtlichen Gründen nicht verfügbar';\n case HttpStatusCode.InternalServerError:\n return 'Interner Serverfehler';\n case HttpStatusCode.NotImplemented:\n return 'Nicht implementiert';\n case HttpStatusCode.BadGateway:\n return 'Schlechtes Gateway';\n case HttpStatusCode.ServiceUnavailable:\n return 'Dienst nicht verfügbar';\n case HttpStatusCode.GatewayTimeout:\n return 'Gateway-Zeitüberschreitung';\n case HttpStatusCode.HttpVersionNotSupported:\n return 'HTTP-Version nicht unterstützt';\n case HttpStatusCode.VariantAlsoNegotiates:\n return 'Variante verhandelt auch';\n case HttpStatusCode.InsufficientStorage:\n return 'Unzureichender Speicher';\n case HttpStatusCode.LoopDetected:\n return 'Schleifenerkennung';\n case HttpStatusCode.NotExtended:\n return 'Nicht erweitert';\n case HttpStatusCode.NetworkAuthenticationRequired:\n return 'Netzwerkauthentifizierung erforderlich';\n default:\n return 'Etwas ist schief gelaufen';\n }\n};\n\nexport const parseHttpErrorCodeToMessageDe = (statusCode: HttpStatusCode) => {\n switch (statusCode) {\n case HttpStatusCode.BadRequest:\n return 'Entschuldigung, wir konnten Ihre Anfrage nicht bearbeiten. Bitte versuchen Sie es später erneut.';\n case HttpStatusCode.Unauthorized:\n return 'Sie sind nicht berechtigt, diese Aktion auszuführen. Bitte melden Sie sich an, um fortzufahren.';\n case HttpStatusCode.PaymentRequired:\n return 'Zur Ausführung dieser Aktion ist eine Zahlung erforderlich.';\n case HttpStatusCode.Forbidden:\n return 'Sie haben keine Berechtigung, diese Aktion auszuführen.';\n case HttpStatusCode.NotFound:\n return 'Die angeforderte Ressource wurde nicht gefunden.';\n case HttpStatusCode.MethodNotAllowed:\n return 'Die angeforderte Methode ist für diese Ressource nicht zulässig.';\n case HttpStatusCode.NotAcceptable:\n return 'Die angeforderte Ressource ist nicht in der Lage, eine Antwort zu generieren, die der Liste der akzeptablen Werte entspricht.';\n case HttpStatusCode.ProxyAuthenticationRequired:\n return 'Zur Ausführung dieser Aktion ist eine Proxy-Authentifizierung erforderlich.';\n case HttpStatusCode.RequestTimeout:\n return 'Der Server hat auf die Anforderung gewartet.';\n case HttpStatusCode.Conflict:\n return 'Die Anforderung steht im Widerspruch zum aktuellen Zustand der Ressource.';\n case HttpStatusCode.Gone:\n return 'Die angeforderte Ressource ist nicht mehr verfügbar und wird auch nicht mehr verfügbar sein.';\n case HttpStatusCode.LengthRequired:\n return 'Die Anforderung hat die Länge ihres Inhalts nicht angegeben, die von der angeforderten Ressource benötigt wird.';\n case HttpStatusCode.PreconditionFailed:\n return 'Der Server erfüllt eine der Voraussetzungen nicht, die der Anforderer an die Anforderung gestellt hat.';\n case HttpStatusCode.PayloadTooLarge:\n return 'Die Anforderung ist größer als der Server bereit oder in der Lage ist, zu verarbeiten.';\n case HttpStatusCode.UriTooLong:\n return 'Die bereitgestellte URL war für den Server zu lang, um sie zu verarbeiten.';\n case HttpStatusCode.UnsupportedMediaType:\n return 'Die Anforderungseinheit hat einen Medientyp, den der Server oder die Ressource nicht unterstützt.';\n case HttpStatusCode.RangeNotSatisfiable:\n return 'Der Client hat einen Teil der Datei angefordert, aber der Server kann diesen Teil nicht liefern.';\n case HttpStatusCode.ExpectationFailed:\n return 'Der Server kann die Anforderungen des Erwartung-Anforderungskopffelds nicht erfüllen.';\n case HttpStatusCode.ImATeapot:\n return 'Ich bin eine Teekanne.';\n case HttpStatusCode.MisdirectedRequest:\n return 'Die Anforderung wurde an einen Server gerichtet, der nicht in der Lage ist, eine Antwort zu generieren.';\n case HttpStatusCode.UnprocessableEntity:\n return 'Die Anforderung war gut formuliert, konnte aber aufgrund semantischer Fehler nicht befolgt werden.';\n case HttpStatusCode.Locked:\n return 'Die Ressource, auf die zugegriffen wird, ist gesperrt.';\n case HttpStatusCode.FailedDependency:\n return 'Die Anforderung ist aufgrund eines Fehlers einer vorherigen Anforderung fehlgeschlagen.';\n case HttpStatusCode.TooEarly:\n return 'Der Server ist nicht bereit, die Anforderung zu verarbeiten, weil der Benutzer nicht authentifiziert wurde.';\n case HttpStatusCode.UpgradeRequired:\n return 'Der Client sollte zu einem anderen Protokoll wie TLS/1.0 wechseln, das im Upgrade-Anforderungskopffeld angegeben ist.';\n case HttpStatusCode.PreconditionRequired:\n return 'Der Ursprungsserver erfordert, dass die Anforderung bedingt ist.';\n case HttpStatusCode.TooManyRequests:\n return 'Sie haben in einer bestimmten Zeit zu viele Anfragen gesendet. Bitte versuchen Sie es später erneut.';\n case HttpStatusCode.RequestHeaderFieldsTooLarge:\n return 'Der Server ist nicht bereit, die Anforderung zu verarbeiten, weil seine Kopffelder zu groß sind.';\n case HttpStatusCode.UnavailableForLegalReasons:\n return 'Die Ressource ist aufgrund einer rechtlichen Forderung nicht verfügbar.';\n case HttpStatusCode.InternalServerError:\n return 'Etwas ist schief gelaufen. Bitte versuchen Sie es später erneut.';\n case HttpStatusCode.NotImplemented:\n return 'Der Server unterstützt die zur Erfüllung der Anforderung erforderliche Funktionalität nicht.';\n case HttpStatusCode.BadGateway:\n return 'Etwas ist schief gelaufen. Bitte versuchen Sie es später erneut.';\n case HttpStatusCode.ServiceUnavailable:\n return 'Der Server kann die Anforderung derzeit nicht bearbeiten, da er vorübergehend überlastet oder gewartet wird.';\n case HttpStatusCode.GatewayTimeout:\n return 'Der Server hat beim Versuch, die Anforderung abzuschließen, keine rechtzeitige Antwort vom Server erhalten.';\n case HttpStatusCode.HttpVersionNotSupported:\n return 'Der Server unterstützt die in der Anforderung verwendete HTTP-Protokollversion nicht.';\n case HttpStatusCode.VariantAlsoNegotiates:\n return 'Der Server hat einen internen Konfigurationsfehler: Die ausgewählte Variantenressource ist so konfiguriert, dass sie sich selbst in die transparente Inhaltsverhandlung einbindet, und ist daher kein geeigneter Endpunkt im Verhandlungsprozess.';\n case HttpStatusCode.InsufficientStorage:\n return 'Die Methode konnte auf die Ressource nicht angewendet werden, weil der Server nicht in der Lage ist, die für die erfolgreiche Ausführung der Anforderung erforderliche Darstellung zu speichern.';\n case HttpStatusCode.LoopDetected:\n return 'Der Server hat eine Endlosschleife erkannt, während er die Anforderung verarbeitet.';\n case HttpStatusCode.NotExtended:\n return 'Weitere Erweiterungen der Anforderung sind erforderlich, damit der Server sie erfüllen kann.';\n case HttpStatusCode.NetworkAuthenticationRequired:\n return 'Sie müssen sich authentifizieren, um Zugang zum Netzwerk zu erhalten.';\n default:\n return 'Etwas ist schief gelaufen. Überprüfen Sie Ihre Internetverbindung und versuchen Sie es später erneut.';\n }\n};\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { parseHttpErrorCodeToMessageDe, parseHttpErrorCodeToTitleDe } from './parse-http-error-code-de';\n\n@Pipe({\n name: 'parseHttpErrorCodeToTitleDe',\n})\nexport class ParseHttpErrorCodeToTitleDePipe implements PipeTransform {\n transform = parseHttpErrorCodeToTitleDe;\n}\n\n@Pipe({\n name: 'parseHttpErrorCodeToMessageDe',\n})\nexport class ParseHttpErrorCodeToMessageDePipe implements PipeTransform {\n transform = parseHttpErrorCodeToMessageDe;\n}\n","import { HttpStatusCode } from '@angular/common/http';\n\nexport const parseHttpErrorCodeToTitleEn = (statusCode: HttpStatusCode) => {\n switch (statusCode) {\n case HttpStatusCode.BadRequest:\n return 'Bad request';\n case HttpStatusCode.Unauthorized:\n return 'Unauthorized';\n case HttpStatusCode.PaymentRequired:\n return 'Payment required';\n case HttpStatusCode.Forbidden:\n return 'Forbidden';\n case HttpStatusCode.NotFound:\n return 'Not found';\n case HttpStatusCode.MethodNotAllowed:\n return 'Method not allowed';\n case HttpStatusCode.NotAcceptable:\n return 'Not acceptable';\n case HttpStatusCode.ProxyAuthenticationRequired:\n return 'Proxy authentication required';\n case HttpStatusCode.RequestTimeout:\n return 'Request timeout';\n case HttpStatusCode.Conflict:\n return 'Conflict';\n case HttpStatusCode.Gone:\n return 'Gone';\n case HttpStatusCode.LengthRequired:\n return 'Length required';\n case HttpStatusCode.PreconditionFailed:\n return 'Precondition failed';\n case HttpStatusCode.PayloadTooLarge:\n return 'Payload too large';\n case HttpStatusCode.UriTooLong:\n return 'URI too long';\n case HttpStatusCode.UnsupportedMediaType:\n return 'Unsupported media type';\n case HttpStatusCode.RangeNotSatisfiable:\n return 'Range not satisfiable';\n case HttpStatusCode.ExpectationFailed:\n return 'Expectation failed';\n case HttpStatusCode.ImATeapot:\n return 'I am a teapot';\n case HttpStatusCode.MisdirectedRequest:\n return 'Misdirected request';\n case HttpStatusCode.UnprocessableEntity:\n return 'Unprocessable entity';\n case HttpStatusCode.Locked:\n return 'Locked';\n case HttpStatusCode.FailedDependency:\n return 'Failed dependency';\n case HttpStatusCode.TooEarly:\n return 'Too early';\n case HttpStatusCode.UpgradeRequired:\n return 'Upgrade required';\n case HttpStatusCode.PreconditionRequired:\n return 'Precondition required';\n case HttpStatusCode.TooManyRequests:\n return 'Too many requests';\n case HttpStatusCode.RequestHeaderFieldsTooLarge:\n return 'Request header fields too large';\n case HttpStatusCode.UnavailableForLegalReasons:\n return 'Unavailable for legal reasons';\n case HttpStatusCode.InternalServerError:\n return 'Internal server error';\n case HttpStatusCode.NotImplemented:\n return 'Not implemented';\n case HttpStatusCode.BadGateway:\n return 'Bad gateway';\n case HttpStatusCode.ServiceUnavailable:\n return 'Service unavailable';\n case HttpStatusCode.GatewayTimeout:\n return 'Gateway timeout';\n case HttpStatusCode.HttpVersionNotSupported:\n return 'HTTP version not supported';\n case HttpStatusCode.VariantAlsoNegotiates:\n return 'Variant also negotiates';\n case HttpStatusCode.InsufficientStorage:\n return 'Insufficient storage';\n case HttpStatusCode.LoopDetected:\n return 'Loop detected';\n case HttpStatusCode.NotExtended:\n return 'Not extended';\n case HttpStatusCode.NetworkAuthenticationRequired:\n return 'Network authentication required';\n default:\n return 'Something went wrong';\n }\n};\n\nexport const parseHttpErrorCodeToMessageEn = (statusCode: HttpStatusCode) => {\n switch (statusCode) {\n case HttpStatusCode.BadRequest:\n return 'Sorry, we could not process your request. Please try again later.';\n case HttpStatusCode.Unauthorized:\n return 'You are not authorized to perform this action. Please log in to continue.';\n case HttpStatusCode.PaymentRequired:\n return 'Payment is required to complete this action.';\n case HttpStatusCode.Forbidden:\n return 'You do not have permission to perform this action.';\n case HttpStatusCode.NotFound:\n return 'The requested resource was not found.';\n case HttpStatusCode.MethodNotAllowed:\n return 'The requested method is not allowed for this resource.';\n case HttpStatusCode.NotAcceptable:\n return 'The requested resource is not capable of generating a response matching the list of acceptable values.';\n case HttpStatusCode.ProxyAuthenticationRequired:\n return 'Proxy authentication is required to complete this action.';\n case HttpStatusCode.RequestTimeout:\n return 'The server timed out waiting for the request.';\n case HttpStatusCode.Conflict:\n return 'The request conflicts with the current state of the resource.';\n case HttpStatusCode.Gone:\n return 'The requested resource is no longer available and will not be available again.';\n case HttpStatusCode.LengthRequired:\n return 'The request did not specify the length of its content, which is required by the requested resource.';\n case HttpStatusCode.PreconditionFailed:\n return 'The server does not meet one of the preconditions that the requester put on the request.';\n case HttpStatusCode.PayloadTooLarge:\n return 'The request is larger than the server is willing or able to process.';\n case HttpStatusCode.UriTooLong:\n return 'The URL provided was too long for the server to process.';\n case HttpStatusCode.UnsupportedMediaType:\n return 'The request entity has a media type which the server or resource does not support.';\n case HttpStatusCode.RangeNotSatisfiable:\n return 'The client has asked for a portion of the file, but the server cannot supply that portion.';\n case HttpStatusCode.ExpectationFailed:\n return 'The server cannot meet the requirements of the Expect request-header field.';\n case HttpStatusCode.ImATeapot:\n return 'I am a teapot.';\n case HttpStatusCode.MisdirectedRequest:\n return 'The request was directed at a server that is not able to produce a response.';\n case HttpStatusCode.UnprocessableEntity:\n return 'The request was well-formed but was unable to be followed due to semantic errors.';\n case HttpStatusCode.Locked:\n return 'The resource that is being accessed is locked.';\n case HttpStatusCode.FailedDependency:\n return 'The request failed due to failure of a previous request.';\n case HttpStatusCode.TooEarly:\n return 'The server is unwilling to process the request because the user has not been authenticated.';\n case HttpStatusCode.UpgradeRequired:\n return 'The client should switch to a different protocol such as TLS/1.0, given in the Upgrade header field.';\n case HttpStatusCode.PreconditionRequired:\n return 'The origin server requires the request to be conditional.';\n case HttpStatusCode.TooManyRequests:\n return 'You have sent too many requests in a given amount of time. Please try again later.';\n case HttpStatusCode.RequestHeaderFieldsTooLarge:\n return 'The server is unwilling to process the request because its header fields are too large.';\n case HttpStatusCode.UnavailableForLegalReasons:\n return 'The resource is unavailable due to a legal demand.';\n case HttpStatusCode.InternalServerError:\n return 'Something went wrong on our end. Please try again later.';\n case HttpStatusCode.NotImplemented:\n return 'The server does not support the functionality required to fulfill the request.';\n case HttpStatusCode.BadGateway:\n return 'Something went wrong on our end. Please try again later.';\n case HttpStatusCode.ServiceUnavailable:\n return 'The server is currently unable to handle the request due to a temporary overload or maintenance of the server.';\n case HttpStatusCode.GatewayTimeout:\n return 'The server, while acting as a gateway or proxy, did not receive a timely response from the upstream server specified by the URL or some other auxiliary server it needed to access in attempting to complete the request.';\n case HttpStatusCode.HttpVersionNotSupported:\n return 'The server does not support the HTTP protocol version used in the request.';\n case HttpStatusCode.VariantAlsoNegotiates:\n return 'The server has an internal configuration error: the chosen variant resource is configured to engage in transparent content negotiation itself, and is therefore not a proper end point in the negotiation process.';\n case HttpStatusCode.InsufficientStorage:\n return 'The method could not be performed on the resource because the server is unable to store the representation needed to successfully complete the request.';\n case HttpStatusCode.LoopDetected:\n return 'The server detected an infinite loop while processing the request.';\n case HttpStatusCode.NotExtended:\n return 'Further extensions to the request are required for the server to fulfill it.';\n case HttpStatusCode.NetworkAuthenticationRequired:\n return 'You need to authenticate to gain network access.';\n default:\n return 'Something went wrong. Check your internet connection and try again later.';\n }\n};\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { parseHttpErrorCodeToMessageEn, parseHttpErrorCodeToTitleEn } from './parse-http-error-code-en';\n\n@Pipe({\n name: 'parseHttpErrorCodeToTitleEn',\n})\nexport class ParseHttpErrorCodeToTitleEnPipe implements PipeTransform {\n transform = parseHttpErrorCodeToTitleEn;\n}\n\n@Pipe({\n name: 'parseHttpErrorCodeToMessageEn',\n})\nexport class ParseHttpErrorCodeToMessageEnPipe implements PipeTransform {\n transform = parseHttpErrorCodeToMessageEn;\n}\n","export const transformToString = (value: unknown) => {\n if (typeof value === 'string') {\n return value;\n }\n\n return null;\n};\n\nexport const transformToStringArray = (value: unknown) => {\n if (Array.isArray(value)) {\n return value.map(transformToString).filter(Boolean) as string[];\n } else if (typeof value === 'string') {\n return [transformToString(value)] as string[];\n }\n\n return null;\n};\n\nexport const transformToNumber = (value: unknown) => {\n if (typeof value === 'number') {\n return value;\n }\n if (typeof value === 'string') {\n return Number(value);\n }\n return null;\n};\n\nexport const transformToNumberArray = (value: unknown) => {\n if (Array.isArray(value)) {\n return value.map(transformToNumber).filter((item) => item !== null) as number[];\n } else if (typeof value === 'number') {\n return [value] as number[];\n }\n\n return null;\n};\n\nexport const transformToBoolean = (value: unknown) => {\n if (typeof value === 'boolean') {\n return value;\n }\n if (typeof value === 'string') {\n return value === 'true' || value === '1';\n }\n return null;\n};\n\nexport const transformToBooleanArray = (value: unknown) => {\n if (Array.isArray(value)) {\n return value.map(transformToBoolean).filter((item) => item !== null) as boolean[];\n } else if (typeof value === 'string' || typeof value === 'boolean') {\n return [transformToBoolean(value)] as boolean[];\n }\n\n return null;\n};\n\nexport const transformToDate = (value: unknown) => {\n if (value instanceof Date) {\n return value;\n }\n if (typeof value === 'string') {\n const date = new Date(value);\n\n if (isNaN(date.getTime())) {\n return null;\n }\n\n return date;\n }\n return null;\n};\n\nexport const transformToDateArray = (value: unknown) => {\n if (Array.isArray(value)) {\n return value.map(transformToDate).filter((item) => item !== null) as Date[];\n } else if (typeof value === 'string' || value instanceof Date) {\n return [transformToDate(value)] as Date[];\n }\n\n return null;\n};\n\nexport type SortDirection = 'asc' | 'desc' | '';\n\nexport type Sort = {\n active: string;\n direction: SortDirection;\n};\n\nexport const transformToSort = (value: unknown): Sort | null => {\n if (typeof value === 'string') {\n const [active, direction] = value.split(':');\n\n if (!active) {\n return null;\n }\n\n return {\n active,\n direction: direction as 'asc' | 'desc',\n };\n }\n\n return null;\n};\n\nexport const transformToSortQueryParam = (value: unknown) => {\n if (typeof value === 'string') {\n return value;\n }\n if (value && typeof value === 'object' && 'active' in value && 'direction' in value) {\n const valAsSort = value as {\n active: string;\n direction: 'asc' | 'desc';\n };\n\n return valAsSort.direction ? `${valAsSort.active}:${valAsSort.direction}` : null;\n }\n\n return null;\n};\n","import { DestroyRef, NgZone, assertInInjectionContext, inject, isDevMode } from '@angular/core';\nimport { toObservable, toSignal } from '@angular/core/rxjs-interop';\nimport { FormControl, FormGroup } from '@angular/forms';\nimport { ActivatedRoute, Router } from '@angular/router';\nimport {\n ET_PROPERTY_REMOVED,\n clone,\n createDestroy,\n equal,\n injectQueryParamChanges,\n injectQueryParams,\n} from '@ethlete/core';\nimport { BehaviorSubject, Subject, debounceTime, map, merge, of, switchMap, takeUntil, tap, timer } from 'rxjs';\nimport {\n OptionalQueryFieldOptions,\n QueryFieldOptions,\n QueryFormGroup,\n QueryFormGroupControls,\n QueryFormObserveOptions,\n QueryFormValue,\n QueryFormValueEvent,\n QueryFormWriteOptions,\n} from './query-form.types';\nimport {\n Sort,\n transformToBoolean,\n transformToBooleanArray,\n transformToDate,\n transformToDateArray,\n transformToNumber,\n transformToNumberArray,\n transformToSort,\n transformToSortQueryParam,\n transformToStringArray,\n} from './query-form.utils';\n\nconst ET_ARR_PREFIX = 'ET_ARR__';\nconst ET_OBJ_PREFIX = 'ET_OBJ__';\nconst ET_PROP_NULL_VALUE = 'ET_NULL__';\n\nexport class QueryField<T> {\n get control() {\n return this.data.control;\n }\n\n constructor(public data: QueryFieldOptions<T>) {}\n}\n\nexport class SearchQueryField {\n get control() {\n return this.data.control;\n }\n\n data: QueryFieldOptions<string | null>;\n\n constructor(public _data?: OptionalQueryFieldOptions<string | null>) {\n this.data = {\n control: _data?.control ?? new FormControl<string | null>(null),\n debounce: 300,\n disableDebounceIfFalsy: true,\n ...(_data ?? {}),\n };\n }\n}\n\nexport class SortQueryField {\n get control() {\n return this.data.control;\n }\n\n data: QueryFieldOptions<Sort | null>;\n\n constructor(public _data?: OptionalQueryFieldOptions<Sort | null>) {\n this.data = {\n control: _data?.control ?? new FormControl<Sort | null>(null),\n queryParamToValueTransformFn: transformToSort,\n valueToQueryParamTransformFn: transformToSortQueryParam,\n ...(_data ?? {}),\n };\n }\n}\n\nexport class StringArrayQueryField<T extends string[]> {\n get control() {\n return this.data.control;\n }\n\n data: QueryFieldOptions<T | null>;\n\n constructor(public _data?: OptionalQueryFieldOptions<T | null>) {\n this.data = {\n control: _data?.control ?? new FormControl<T | null>(null),\n queryParamToValueTransformFn: transformToStringArray as (val: unknown) => T | null,\n ...(_data ?? {}),\n };\n }\n}\n\nexport class BooleanArrayQueryField {\n get control() {\n return this.data.control;\n }\n\n data: QueryFieldOptions<boolean[] | null>;\n\n constructor(public _data?: OptionalQueryFieldOptions<boolean[] | null>) {\n this.data = {\n control: _data?.control ?? new FormControl<boolean[] | null>(null),\n queryParamToValueTransformFn: transformToBooleanArray,\n ...(_data ?? {}),\n };\n }\n}\n\nexport class NumberArrayQueryField {\n get control() {\n return this.data.control;\n }\n\n data: QueryFieldOptions<number[] | null>;\n\n constructor(public _data?: OptionalQueryFieldOptions<number[] | null>) {\n this.data = {\n control: _data?.control ?? new FormControl<number[] | null>(null),\n queryParamToValueTransformFn: transformToNumberArray,\n ...(_data ?? {}),\n };\n }\n}\n\nexport class DateQueryField {\n get control() {\n return this.data.control;\n }\n\n data: QueryFieldOptions<Date | null>;\n\n constructor(public _data?: OptionalQueryFieldOptions<Date | null>) {\n this.data = {\n control: _data?.control ?? new FormControl<Date | null>(null),\n queryParamToValueTransformFn: transformToDate,\n ...(_data ?? {}),\n };\n }\n}\n\nexport class DateArrayQueryField {\n get control() {\n return this.data.control;\n }\n\n data: QueryFieldOptions<Date[] | null>;\n\n constructor(public _data?: OptionalQueryFieldOptions<Date[] | null>) {\n this.data = {\n control: _data?.control ?? new FormControl<Date[] | null>(null),\n queryParamToValueTransformFn: transformToDateArray,\n ...(_data ?? {}),\n };\n }\n}\n\nconst IGNORED_FILTER_COUNT_FIELDS = ['page', 'skip', 'take', 'limit', 'sort', 'sortBy', 'sortOrder', 'query', 'search'];\n\nexport type QueryFormOptions = {\n /**\n * A prefix to use for the query parameters. This is useful when you have multiple query forms on the same page.\n */\n queryParamPrefix?: string | (() => string);\n};\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport type AnyQueryForm = QueryForm<any>;\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport class QueryForm<T extends Record<string, QueryField<any>>> {\n private readonly _destroy$ = createDestroy();\n private readonly _unobserveTrigger$ = new Subject<boolean>();\n private readonly _router = inject(Router);\n private readonly _activatedRoute = inject(ActivatedRoute);\n private readonly _defaultValues = this._extractDefaultValues();\n private readonly _zone = inject(NgZone);\n private readonly _didValueChanges$ = new Subject<boolean>();\n\n private _isObserving = false;\n private _skipNextResets = false;\n\n private _queryParamChanges$ = toObservable(injectQueryParamChanges());\n private _queryParams = injectQueryParams();\n\n /**\n * The angular form group that contains all the fields.\n *\n * **Do not** use any of the following methods on this form group:\n * - `setValue`: Use `QueryForm.setValue` instead.\n * - `patchValue`: Use `QueryForm.patchValue` instead.\n * - `valueChanges`: Use `QueryForm.changes$` instead.\n * - `value`: Use `QueryForm.value` instead.\n * - `controls`: Use `QueryForm.controls` instead.\n */\n readonly form = this._setupFormGroup();\n\n private readonly _lastFormValue$ = new BehaviorSubject<QueryFormValue<T> | null>(null);\n private readonly _currentFormValue$ = new BehaviorSubject<QueryFormValue<T>>(this._formValue);\n\n private get _formValue() {\n return this.form.getRawValue() as QueryFormValue<T>;\n }\n\n private get _form() {\n return this.form as unknown as QueryFormGroup;\n }\n\n private readonly _changes$ = new BehaviorSubject<QueryFormValueEvent<T>>({\n previousValue: null,\n currentValue: this.form.getRawValue() as QueryFormValue<T>,\n });\n\n readonly changes$ = this._changes$.asObservable();\n readonly currentValue$ = this._changes$.pipe(map(({ currentValue }) => currentValue));\n readonly previousValue$ = this._changes$.pipe(map(({ previousValue }) => previousValue));\n\n readonly changes = toSignal(this.changes$);\n readonly currentValue = toSignal(this.currentValue$);\n readonly previousValue = toSignal(this.previousValue$);\n\n /**\n * The number of active filters.\n *\n * Excludes the following fields by default:\n * - `page`\n * - `skip`\n * - `take`\n * - `limit`\n * - `sort`\n * - `sortBy`\n * - `sortOrder`\n * - `query`\n * - `search`\n */\n readonly activeFilterCount$ = this.changes$.pipe(\n map(\n ({ currentValue }) =>\n Object.entries(currentValue)\n .map(([key, value]) => {\n if (IGNORED_FILTER_COUNT_FIELDS.includes(key) || this._fields[key]?.data.skipInFilterCount) {\n return true;\n }\n\n return this._isDefaultValue(key, value);\n })\n .filter((v) => v === false).length,\n ),\n );\n\n get controls() {\n return this.form.controls;\n }\n\n get value() {\n return this._changes$.value.currentValue;\n }\n\n get defaultFormValue() {\n return Object.entries(this._defaultValues).reduce((acc, [key]) => {\n acc[key as keyof QueryFormValue<T>] = this._getDefaultValue(key);\n\n return acc;\n }, {} as QueryFormValue<T>);\n }\n\n // with prefix eg. page should become ${prefix}-page\n constructor(\n private _fields: T,\n private _options?: QueryFormOptions,\n ) {\n assertInInjectionContext(QueryForm);\n\n inject(DestroyRef).onDestroy(() => this._cleanup());\n }\n\n observe(options?: QueryFormObserveOptions) {\n if (this._isObserving) {\n if (isDevMode()) {\n console.warn('QueryForm.observe() was called multiple times. This is not supported.');\n }\n return this;\n }\n\n this._isObserving = true;\n\n if (options?.syncOnNavigation !== false) {\n const didChanges = this.setFormValueFromUrlQueryParams({\n queryParams: this._queryParams(),\n });\n\n if (didChanges) {\n this._handleFormChange(true);\n }\n }\n\n merge(...Object.values(this._fields).map((field) => field.control.valueChanges), this._didValueChanges$)\n .pipe(\n debounceTime(0),\n tap(() => {\n this._handleFormChange();\n }),\n takeUntil(this._destroy$),\n takeUntil(this._unobserveTrigger$),\n )\n .subscribe();\n\n let changedFieldsInLastResetLoop: string[] = [];\n let currentUniqueChangedFields: string[] = [];\n\n this._currentFormValue$\n .pipe(\n map((currentValue) => {\n return {\n previousValue: clone(this._lastFormValue$.value),\n currentValue: clone(currentValue),\n };\n }),\n tap(({ currentValue, previousValue }) => {\n if (options?.writeToQueryParams !== false) {\n this._syncViaUrlQueryParams(currentValue, options?.replaceUrl);\n }\n\n const didResetValues = this._skipNextResets\n ? false\n : this._handleQueryFormResets(previousValue ?? null, currentValue);\n\n this._skipNextResets = false;\n\n const changedFields = Object.keys(currentValue).filter(\n (key) => !equal(previousValue?.[key], currentValue[key]),\n );\n\n if (changedFieldsInLastResetLoop.length) {\n changedFields.push(...changedFieldsInLastResetLoop);\n changedFieldsInLastResetLoop = [];\n }\n\n if (didResetValues) {\n this._didValueChanges$.next(true);\n changedFieldsInLastResetLoop = changedFields;\n }\n\n currentUniqueChangedFields = [...new Set(changedFields)];\n }),\n switchMap(({ currentValue, previousValue }) => {\n if (changedFieldsInLastResetLoop.length) return of(null).pipe(map(() => ({ currentValue, previousValue })));\n\n const debounceValues = currentUniqueChangedFields.map((key) => {\n const field = this._fields[key];\n\n if (!field) return null;\n\n if (field.data.disableDebounceIfFalsy === true && !currentValue[key]) {\n return null;\n }\n\n return field.data.debounce ?? null;\n });\n\n currentUniqueChangedFields = [];\n\n if (debounceValues.some((v) => v === null) || !debounceValues.length) {\n return of(null).pipe(map(() => ({ currentValue, previousValue })));\n }\n\n const shortestDebounceTime = Math.min(...debounceValues.filter((v): v is number => v !== null));\n\n return timer(shortestDebounceTime).pipe(map(() => ({ currentValue, previousValue })));\n }),\n tap(({ currentValue, previousValue }) => {\n if (changedFieldsInLastResetLoop.length) return;\n\n this._changes$.next({\n previousValue: previousValue ?? null,\n currentValue: currentValue,\n });\n }),\n takeUntil(this._destroy$),\n takeUntil(this._unobserveTrigger$),\n )\n .subscribe();\n\n if (options?.syncOnNavigation !== false) {\n this._queryParamChanges$\n .pipe(\n takeUntil(this._destroy$),\n takeUntil(this._unobserveTrigger$),\n tap((changes) => {\n const didValueChanges = this.setFormValueFromUrlQueryParams({ queryParams: changes });\n\n if (didValueChanges) {\n this._didValueChanges$.next(true);\n }\n }),\n )\n .subscribe();\n }\n\n return this;\n }\n\n private _handleQueryFormResets(previousValue: QueryFormValue<T> | null, currentValue: QueryFormValue<T>) {\n let didResetValues = false;\n\n for (const formFieldKey in this._fields) {\n const field = this._fields[formFieldKey];\n\n if (!field) continue;\n\n const resets = field.data.isResetBy;\n\n if (!resets) continue;\n\n const resetConditionKeys = Array.isArray(resets) ? resets : [resets];\n\n for (const resetConditionKey of resetConditionKeys) {\n if (!(resetConditionKey in this._fields)) {\n if (isDevMode()) {\n console.warn(`The field \"${resetConditionKey}\" is not defined in the QueryForm. Is it a typo?`, this);\n }\n\n continue;\n }\n\n if (\n previousValue &&\n currentValue &&\n !equal(previousValue[resetConditionKey], currentValue[resetConditionKey])\n ) {\n const defaultValueForKeyToReset = this._getDefaultValue(formFieldKey);\n const currentValueForKeyToReset = currentValue[formFieldKey];\n\n if (equal(defaultValueForKeyToReset, currentValueForKeyToReset)) {\n continue;\n }\n\n this.form.controls[formFieldKey].setValue(defaultValueForKeyToReset);\n\n didResetValues = true;\n\n break;\n }\n }\n }\n\n return didResetValues;\n }\n\n unobserve() {\n this._unobserveTrigger$.next(true);\n this._cleanup();\n }\n\n setFormValueFromUrlQueryParams(options: { queryParams: Record<string, unknown> }) {\n let didValueChanges = false;\n\n for (const [key, field] of Object.entries(this._fields)) {\n const value = options.queryParams[this._transformKeyToQueryParam(key)];\n\n const valueDoesNotExist = value === undefined;\n\n if (valueDoesNotExist) continue;\n\n const valueGotRemoved = value === ET_PROPERTY_REMOVED;\n\n if (valueGotRemoved) {\n const defaultValue = this._getDefaultValue(key);\n if (!equal(field.control.value, defaultValue)) {\n field.control.setValue(defaultValue, { emitEvent: false });\n didValueChanges = true;\n }\n\n continue;\n }\n let deserializedValue = value;\n\n if (field.data.queryParamToValueTransformFn) {\n deserializedValue = field.data.queryParamToValueTransformFn(value);\n } else if (!field.data.skipAutoTransform) {\n const defaultIsNum = typeof this._getDefaultValue(key) === 'number';\n const valueIsNum = !isNaN(Number(value));\n const valueContainsWhitespace = typeof value === 'string' && value.trim() !== value;\n const valueHasLeadingZero = typeof value === 'string' && value.startsWith('0');\n const valueEndsWithDot = typeof value === 'string' && value.endsWith('.');\n\n const defaultIsBool = this._getDefaultValue(key) === 'boolean';\n const valueIsBool = value === 'true' || value === 'false';\n\n if (value === ET_PROP_NULL_VALUE) {\n deserializedValue = null;\n } else if (\n defaultIsNum ||\n (valueIsNum && !valueContainsWhitespace && !valueHasLeadingZero && !valueEndsWithDot)\n ) {\n deserializedValue = transformToNumber(value);\n } else if (defaultIsBool || valueIsBool) {\n deserializedValue = transformToBoolean(value);\n }\n }\n\n const valueIsEqualToCurrent = equal(deserializedValue, field.control.value);\n\n if (valueIsEqualToCurrent) continue;\n\n field.control.setValue(deserializedValue, { emitEvent: false });\n didValueChanges = true;\n }\n\n return didValueChanges;\n }\n\n setValue(value: QueryFormValue<T>, options?: QueryFormWriteOptions) {\n this._form._setValue(value, options);\n\n if (options?.skipResets) {\n this._skipNextResets = true;\n }\n }\n\n patchValue(value: Partial<QueryFormValue<T>>, options?: QueryFormWriteOptions) {\n this._form._patchValue(value, options);\n\n if (options?.skipResets) {\n this._skipNextResets = true;\n }\n }\n\n resetFieldToDefault(key: keyof QueryFormValue<T>, options?: QueryFormWriteOptions) {\n const defaultValue = this._getDefaultValue(key as string);\n\n this.form.controls[key].setValue(defaultValue);\n\n if (options?.skipResets) {\n this._skipNextResets = true;\n }\n }\n\n resetFieldsToDefault(keys: (keyof QueryFormValue<T>)[], options?: QueryFormWriteOptions) {\n const defaults = keys.reduce(\n (acc, key) => {\n acc[key] = this._getDefaultValue(key as string);\n\n return acc;\n },\n {} as Partial<QueryFormValue<T>>,\n );\n\n this.patchValue(defaults);\n\n if (options?.skipResets) {\n this._skipNextResets = true;\n }\n }\n\n resetAllFieldsToDefault(options?: QueryFormWriteOptions & { skipFields?: (keyof QueryFormValue<T>)[] }) {\n const keys = Object.keys(this._fields) as (keyof QueryFormValue<T>)[];\n\n if (options?.skipFields) {\n for (const key of options.skipFields) {\n const index = keys.indexOf(key);\n\n if (index !== -1) {\n keys.splice(index, 1);\n }\n }\n }\n\n this.resetFieldsToDefault(keys, options);\n }\n\n private _getDefaultValue(key: string) {\n const val = this._defaultValues[key];\n\n if (typeof val === 'string' && val.startsWith(ET_ARR_PREFIX)) {\n return JSON.parse(val.slice(ET_ARR_PREFIX.length));\n } else if (typeof val === 'string' && val.startsWith(ET_OBJ_PREFIX)) {\n return JSON.parse(val.slice(ET_OBJ_PREFIX.length));\n } else if (typeof val === 'function') {\n return val();\n } else if (val === ET_PROP_NULL_VALUE) {\n return null;\n }\n\n return val ?? null;\n }\n\n private _transformKeyToQueryParam(key: string) {\n if (!this._options?.queryParamPrefix) return key;\n\n const prefix =\n typeof this._options?.queryParamPrefix === 'string'\n ? this._options.queryParamPrefix\n : this._options.queryParamPrefix();\n\n return `${prefix}-${key}`;\n }\n\n private _isDefaultValue(key: string, value: unknown) {\n const normalizedValue = Array.isArray(value)\n ? `${ET_ARR_PREFIX}${JSON.stringify(value)}`\n : typeof value === 'object' && value !== null\n ? `${ET_OBJ_PREFIX}${JSON.stringify(value)}`\n : value === null\n ? ET_PROP_NULL_VALUE\n : value;\n\n return this._defaultValues[key] === normalizedValue;\n }\n\n private _setupFormGroup() {\n const group = new FormGroup({} as QueryFormGroupControls<T>) as unknown as QueryFormGroup;\n\n for (const [key, field] of Object.entries(this._fields)) {\n group.addControl(key, field.control);\n }\n\n group._patchValue = group.patchValue;\n group._setValue = group.setValue;\n\n group.patchValue = this.patchValue.bind(this);\n group.setValue = this.setValue.bind(this);\n\n return group as unknown as FormGroup<QueryFormGroupControls<T>>;\n }\n\n private _extractDefaultValues() {\n const defaultValues: Record<string, unknown> = {};\n\n for (const [key, field] of Object.entries(this._fields)) {\n const value = field.data.defaultValue !== undefined ? field.data.defaultValue : field.control.value;\n\n if (Array.isArray(value)) {\n defaultValues[key] = `${ET_ARR_PREFIX}${JSON.stringify(value)}`;\n } else if (typeof value === 'object' && value !== null) {\n defaultValues[key] = `${ET_OBJ_PREFIX}${JSON.stringify(value)}`;\n } else if (value === null) {\n defaultValues[key] = ET_PROP_NULL_VALUE;\n } else {\n defaultValues[key] = value;\n }\n }\n\n return defaultValues;\n }\n\n private _syncViaUrlQueryParams(values: QueryFormValue<T>, replaceUrl?: boolean) {\n const queryParams = { ...clone(this._activatedRoute.snapshot.queryParams) };\n\n for (const [key, value] of Object.entries(values)) {\n const queryParamKey = this._transformKeyToQueryParam(key);\n const field = this._fields[key];\n\n if (!field) {\n continue;\n }\n\n const isDefault = this._isDefaultValue(key, value);\n const writeDefaultToUrl = field.data.appendDefaultValueToUrl === true;\n const writeToUrl = field.data.appendToUrl !== false;\n\n if (!writeToUrl || (isDefault && !writeDefaultToUrl)) {\n queryParams[queryParamKey] = undefined;\n } else {\n queryParams[queryParamKey] = field.data.valueToQueryParamTransformFn\n ? field.data.valueToQueryParamTransformFn?.(value)\n : value === null\n ? ET_PROP_NULL_VALUE\n : value;\n }\n }\n\n this._zone.run(() => {\n queueMicrotask(() => {\n this._router.navigate([], {\n queryParams,\n replaceUrl,\n queryParamsHandling: 'merge',\n });\n });\n });\n }\n\n private _handleFormChange(forceOverwrite = false) {\n // Normalize values that have a valueToQueryParamTransformFn returning null/undefined to their\n // field default before capturing the new value. This prevents intermediate \"empty object\" states\n // (e.g. Sort emitting { active: '', direction: '' } when cleared) from being\n // emitted as distinct form values.\n for (const [key, field] of Object.entries(this._fields)) {\n if (!field.data.valueToQueryParamTransformFn) continue;\n const rawValue = (this._formValue as Record<string, unknown>)[key];\n if (this._isDefaultValue(key, rawValue)) continue;\n const serialized = field.data.valueToQueryParamTransformFn(rawValue);\n if (serialized !== null && serialized !== undefined) continue;\n this.form.controls[key]?.setValue(this._getDefaultValue(key), { emitEvent: false });\n }\n\n const currentVal = clone(this._currentFormValue$.value);\n const newVal = clone(this._formValue);\n\n if (equal(currentVal, newVal)) {\n return;\n }\n\n if (forceOverwrite) {\n this._lastFormValue$.next(newVal);\n } else {\n this._lastFormValue$.next(currentVal);\n }\n\n this._currentFormValue$.next(newVal);\n }\n\n private _cleanup() {\n if (!this._isObserving) return;\n\n this._isObserving = false;\n\n const queryParamKeys = Object.keys(this._fields);\n const queryParams = queryParamKeys.reduce(\n (acc, key) => {\n acc[this._transformKeyToQueryParam(key)] = undefined;\n return acc;\n },\n {} as Record<string, unknown>,\n );\n this._zone.run(() => {\n queueMicrotask(() => {\n this._router.navigate([], {\n queryParams,\n replaceUrl: true,\n queryParamsHandling: 'merge',\n });\n });\n });\n }\n}\n","import { RuntimeError } from '@ethlete/core';\n\n// codes 1000-1999\nexport const WebSocketRuntimeErrorCode = {\n // Web Socket Client\n ROOM_NOT_JOINED: 1000,\n MESSAGE_MALFORMED: 1001,\n} as const;\n\nexport type WebSocketRuntimeErrorCode = (typeof WebSocketRuntimeErrorCode)[keyof typeof WebSocketRuntimeErrorCode];\n\nexport const roomNotJoined = (room: string) => {\n return new RuntimeError(\n WebSocketRuntimeErrorCode.ROOM_NOT_JOINED,\n `Tried leaving the room \"${room}\" but it has not been joined.`,\n );\n};\n\nexport const messageMalformed = () => {\n return new RuntimeError(\n WebSocketRuntimeErrorCode.MESSAGE_MALFORMED,\n 'A message has been received but it is malformed (cannot be parsed as JSON).',\n );\n};\n","import {\n computed,\n DestroyRef,\n effect,\n inject,\n isDevMode,\n Signal,\n signal,\n untracked,\n WritableSignal,\n} from '@angular/core';\nimport { createRootProvider, previousSignalValue, ProviderResult } from '@ethlete/core';\nimport { io } from 'socket.io-client';\nimport { messageMalformed, roomNotJoined } from './web-socket-errors';\n\nexport type CreateWebSocketClientTransport = 'polling' | 'websocket' | 'webtransport';\n\nexport type CreateWebSocketClientConfigOptions = {\n /** A unique name for the client */\n name: string;\n\n /** The URL of the socket io server */\n url: string;\n\n /** A list of transports to try (in order). Engine.io always attempts to connect directly with the first one, provided the feature detection test for it passes. */\n transports?: CreateWebSocketClientTransport[];\n};\n\n/** A default socket io message view */\nexport type SocketMessageView<TMessageData = unknown> = {\n room: string;\n event: string;\n data: TMessageData;\n};\n\nexport type WebSocketClientSubtle = {\n /** Leave a socket io room */\n leaveRoom: (room: string) => void;\n};\n\nexport type WebSocketClient<TMessageData extends SocketMessageView> = {\n /**\n * Join a socket io room\n * If a function is passed, it will be evaluated in a reactive signal context.\n * If the function returns null, no room will be joined.\n * If the function returns a string, the previous room will be left and the new room will be joined.\n */\n joinRoom: (room: string | (() => string | null)) => Signal<WebSocketRoom<TMessageData> | null>;\n\n /** Whether the client is connected to the server */\n isConnected: Signal<boolean>;\n\n /** Advanced web socket features. **WARNING!** Incorrectly using these features will likely **BREAK** your application. You have been warned! */\n subtle: WebSocketClientSubtle;\n};\n\nexport type InternalWebSocketRoom<TMessageData extends SocketMessageView> = {\n latestMessage: WritableSignal<TMessageData | null>;\n};\n\nexport type WebSocketRoom<TMessageData extends SocketMessageView> = {\n /** The latest message received in the room */\n latestMessage: Signal<TMessageData | null>;\n};\n\nexport type WebSocketClientResult<TMessageData extends SocketMessageView = SocketMessageView> = ProviderResult<\n WebSocketClient<TMessageData>\n>;\n\nexport type AnyWebSocketClient<TMessageData extends SocketMessageView = SocketMessageView> =\n WebSocketClientResult<TMessageData>;\n\nexport const createWebSocketClient = <TMessageData extends SocketMessageView = SocketMessageView>(\n options: CreateWebSocketClientConfigOptions,\n): WebSocketClientResult<TMessageData> => {\n return createRootProvider(\n () => {\n const socket = io(options.url, {\n withCredentials: true,\n autoConnect: false,\n transports: options.transports,\n });\n\n const rooms = new Map<string, InternalWebSocketRoom<TMessageData>>();\n const isConnected = signal(false);\n\n const joinRoom = (room: string | (() => string | null)) => {\n const roomFn = typeof room === 'function' ? room : () => room;\n const pre = previousSignalValue(computed(() => roomFn()));\n const roomData = signal<InternalWebSocketRoom<TMessageData> | null>(null);\n\n const join = (name: string) => {\n socket.emit('join-room', name);\n\n const existingRoom = rooms.get(name);\n\n if (existingRoom) return existingRoom;\n\n const message = signal<TMessageData | null>(null);\n\n const newRoom: InternalWebSocketRoom<TMessageData> = {\n latestMessage: message,\n };\n\n rooms.set(name, newRoom);\n\n return newRoom;\n };\n\n effect(() => {\n const current = roomFn();\n\n untracked(() => {\n const previous = pre();\n\n if (previous === current) return;\n\n if (previous) leaveRoom(previous);\n\n if (current) {\n const joinedRoom = join(current);\n if (joinedRoom) roomData.set(joinedRoom);\n } else {\n roomData.set(null);\n }\n });\n });\n\n inject(DestroyRef).onDestroy(() => {\n const current = roomFn();\n\n if (current) {\n leaveRoom(current);\n roomData.set(null);\n }\n });\n\n return roomData.asReadonly() as Signal<WebSocketRoom<TMessageData> | null>;\n };\n\n const leaveRoom = (room: string) => {\n if (!rooms.has(room)) {\n if (isDevMode()) throw roomNotJoined(room);\n }\n\n socket.emit('leave-room', room);\n\n rooms.delete(room);\n };\n\n const setupWebSocketConnectionListener = () => {\n socket.on('connect', () => {\n isConnected.set(true);\n\n for (const room of rooms.keys()) {\n socket.emit('join-room', room);\n }\n });\n socket.on('disconnect', () => isConnected.set(false));\n };\n\n const setupWebSocketListener = () => {\n socket.onAny((data: string) => {\n try {\n const json = JSON.parse(data) as TMessageData;\n\n const room = rooms.get(json.room);\n\n if (room) room.latestMessage.set(json);\n } catch (error) {\n console.error(error);\n if (isDevMode()) throw messageMalformed();\n }\n });\n };\n\n inject(DestroyRef).onDestroy(() => socket.disconnect());\n\n setupWebSocketConnectionListener();\n setupWebSocketListener();\n socket.connect();\n\n const client: WebSocketClient<TMessageData> = {\n joinRoom,\n isConnected: isConnected.asReadonly(),\n subtle: {\n leaveRoom,\n },\n };\n\n return client;\n },\n {\n name: `WebSocketClient_${options.name}`,\n },\n );\n};\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["ɵEffectScheduler","isNaN","coreDeleteCookie"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ethlete-query.mjs","sources":["../../../../libs/query/src/lib/gql/gql-transformer.ts","../../../../libs/query/src/lib/gql/gql-query-execute.ts","../../../../libs/query/src/lib/gql/gql-query.ts","../../../../libs/query/src/lib/http/observable-signal.ts","../../../../libs/query/src/lib/http/query-context.ts","../../../../libs/query/src/lib/http/query-dependencies.ts","../../../../libs/query/src/lib/http/query-errors.ts","../../../../libs/query/src/lib/http/query-features.ts","../../../../libs/query/src/lib/http/query-state.ts","../../../../libs/query/src/lib/http/query-snapshot.ts","../../../../libs/query/src/lib/http/base-query-factory.ts","../../../../libs/query/src/lib/http/query-execute-utils.ts","../../../../libs/query/src/lib/http/query-execute.ts","../../../../libs/query/src/lib/http/query.ts","../../../../libs/query/src/lib/http/query-creator.ts","../../../../libs/query/src/lib/http/base-query-creator-factory.ts","../../../../libs/query/src/lib/http/query-error-response-utils.ts","../../../../libs/query/src/lib/legacy/logger/logger.ts","../../../../libs/query/src/lib/legacy/request/request.util.ts","../../../../libs/query/src/lib/legacy/request/request.ts","../../../../libs/query/src/lib/http/query-cache-utils.ts","../../../../libs/query/src/lib/http/query-retry-utils.ts","../../../../libs/query/src/lib/http/query-error-response.ts","../../../../libs/query/src/lib/http/http-request.ts","../../../../libs/query/src/lib/http/query-stack.ts","../../../../libs/query/src/lib/http/paged-query-stack.ts","../../../../libs/query/src/lib/legacy/auth/custom-header-auth-provider.ts","../../../../libs/query/src/lib/legacy/auth/basic-auth-provider.ts","../../../../libs/query/src/lib/legacy/utils/data.utils.ts","../../../../libs/query/src/lib/legacy/utils/deep-freeze.util.ts","../../../../libs/query/src/lib/legacy/utils/def.util.ts","../../../../libs/query/src/lib/legacy/query-creator/query-creator.ts","../../../../libs/query/src/lib/legacy/query-store/query-store.ts","../../../../libs/query/src/lib/legacy/query-client/query-client.ts","../../../../libs/query/src/lib/legacy/query-client/query-client.utils.ts","../../../../libs/query/src/lib/gql/gql-query-creator.ts","../../../../libs/query/src/lib/http/secure-query-execute-factory.ts","../../../../libs/query/src/lib/gql/secure-gql-query-execute.ts","../../../../libs/query/src/lib/gql/secure-gql-query.ts","../../../../libs/query/src/lib/gql/secure-gql-query-creator.ts","../../../../libs/query/src/lib/gql/gql-query-creator-templates.ts","../../../../libs/query/src/lib/legacy/interop/legacy-query.ts","../../../../libs/query/src/lib/legacy/interop/legacy-query-creator.ts","../../../../libs/query/src/lib/legacy/query/query.utils.ts","../../../../libs/query/src/lib/legacy/query/query.ts","../../../../libs/query/src/lib/legacy/auth/auth-provider.utils.ts","../../../../libs/query/src/lib/legacy/auth/bearer-auth-provider.ts","../../../../libs/query/src/lib/legacy/directives/infinity-query-response-delay-provider.ts","../../../../libs/query/src/lib/legacy/infinite-query/infinity-query.ts","../../../../libs/query/src/lib/legacy/infinite-query/infinity-query.utils.ts","../../../../libs/query/src/lib/legacy/directives/infinity-query.directive.ts","../../../../libs/query/src/lib/legacy/directives/infinity-query-trigger.directive.ts","../../../../libs/query/src/lib/legacy/directives/query.directive.ts","../../../../libs/query/src/lib/legacy/devtools/pipes/query-short-name.pipe.ts","../../../../libs/query/src/lib/legacy/devtools/utils/query-client.utils.ts","../../../../libs/query/src/lib/legacy/devtools/components/query-devtools/query-devtools.component.ts","../../../../libs/query/src/lib/legacy/devtools/components/query-devtools/query-devtools.component.html","../../../../libs/query/src/lib/legacy/entity/entity-store.ts","../../../../libs/query/src/lib/legacy/entity/entity.utils.ts","../../../../libs/query/src/lib/http/query-repository.ts","../../../../libs/query/src/lib/http/query-client.ts","../../../../libs/query/src/lib/http/secure-query-execute.ts","../../../../libs/query/src/lib/http/secure-query.ts","../../../../libs/query/src/lib/http/secure-query-creator.ts","../../../../libs/query/src/lib/http/query-creator-templates.ts","../../../../libs/query/src/lib/auth/internal/leader-election.ts","../../../../libs/query/src/lib/auth/utils/token-encryption.ts","../../../../libs/query/src/lib/auth/internal/multi-tab-sync.ts","../../../../libs/query/src/lib/auth/bearer-auth-provider.ts","../../../../libs/query/src/lib/auth/bearer-auth-query-builders.ts","../../../../libs/query/src/lib/auth/features/bearer-auth-inactivity-logout.ts","../../../../libs/query/src/lib/auth/features/bearer-auth-persistent-auth.ts","../../../../libs/query/src/lib/auth/features/bearer-auth-token-expiration-warning.ts","../../../../libs/query/src/lib/auth/features/bearer-auth-token-revocation.ts","../../../../libs/query/src/lib/auth/features/bearer-auth-tracking.ts","../../../../libs/query/src/lib/pipes/parse-http-error-code-de.ts","../../../../libs/query/src/lib/pipes/parse-http-error-code-de.pipe.ts","../../../../libs/query/src/lib/pipes/parse-http-error-code-en.ts","../../../../libs/query/src/lib/pipes/parse-http-error-code-en.pipe.ts","../../../../libs/query/src/lib/query-form/query-form.utils.ts","../../../../libs/query/src/lib/query-form/query-form.ts","../../../../libs/query/src/lib/ws/web-socket-errors.ts","../../../../libs/query/src/lib/ws/web-socket-client.ts","../../../../libs/query/src/ethlete-query.ts"],"sourcesContent":["import { isDevMode } from '@angular/core';\n\nconst getOpName = /(query|mutation) ?([\\w\\d-_]+)? ?\\(.*?\\)? \\{/;\n\nexport type TransformedGqlQuery = {\n query: string;\n variables?: string;\n operationName?: string;\n};\n\nexport type GqlTransformer = (variables: Record<string, unknown> | null | undefined) => TransformedGqlQuery;\n\nexport const transformGql = (str: string | string[]): GqlTransformer => {\n const normalizedStr = Array.isArray(str) ? str.join('') : str;\n\n const name = getOpName.exec(normalizedStr);\n\n return (variables: Record<string, unknown> | null | undefined): TransformedGqlQuery => {\n const data: TransformedGqlQuery = { query: normalizedStr };\n\n if (variables) {\n data['variables'] = JSON.stringify(variables);\n }\n\n if (name && name.length) {\n const operationName = name[2];\n if (operationName) {\n data['operationName'] = operationName;\n }\n }\n\n if (!isDevMode()) {\n // minify the query\n data.query = data.query.replace(/\\s+/g, ' ').trim();\n }\n\n return data;\n };\n};\n\nexport type GQL = string & { readonly __gql: unique symbol };\n\nexport const gql = (strings: TemplateStringsArray, ...values: unknown[]): GQL => {\n const str = strings.reduce((acc, cur, i) => {\n return acc + cur + (values[i] ?? '');\n }, '');\n return str as GQL;\n};\n","import {\n circularQueryDependencyChecker,\n CreateQueryExecuteOptions,\n InternalQueryExecute,\n QueryArgs,\n QueryConfig,\n QueryDependencies,\n queryExecute,\n QueryExecuteArgs,\n QueryState,\n RequestArgs,\n resetExecuteState,\n RouteType,\n setupQueryExecuteState,\n} from '../http';\nimport { GqlQueryArgs } from './gql-query';\nimport { AnyCreateGqlQueryCreatorOptions, InternalCreateGqlQueryCreatorOptions } from './gql-query-creator';\nimport { transformGql } from './gql-transformer';\n\nexport type CreateGqlQueryExecuteOptions<TArgs extends QueryArgs> = {\n deps: QueryDependencies;\n state: QueryState<TArgs>;\n creator?: AnyCreateGqlQueryCreatorOptions;\n creatorInternals: InternalCreateGqlQueryCreatorOptions;\n queryConfig: QueryConfig;\n};\n\nexport const createGqlExecuteFn = <TArgs extends GqlQueryArgs>(\n executeOptions: CreateGqlQueryExecuteOptions<TArgs>,\n): InternalQueryExecute<TArgs> => {\n const executeState = setupQueryExecuteState();\n const circularChecker = circularQueryDependencyChecker();\n\n const reset = () => resetExecuteState({ executeState, executeOptions });\n\n const exec = (executeArgs?: QueryExecuteArgs<TArgs>) => {\n circularChecker.check();\n\n // Make sure all effects are flushed before reading the args.\n // A withArgs feature effect might still be pending otherwise resulting in the wrong args being read.\n executeOptions.deps.effectScheduler.flush();\n\n const { args = executeOptions.state.args(), options } = executeArgs ?? {};\n\n const query = transformGql(executeOptions.creatorInternals.query);\n let gqlParams = query(args?.variables);\n\n if (args?.queryParams && executeOptions.creatorInternals.transport === 'GET') {\n gqlParams = { ...gqlParams, ...args.queryParams };\n }\n\n const computedArgs = args ?? ({} as RequestArgs<TArgs>);\n\n if (executeOptions.creatorInternals.transport === 'GET') {\n computedArgs.queryParams = gqlParams;\n } else {\n computedArgs.body = gqlParams;\n }\n\n const normalizedOpts: CreateQueryExecuteOptions<TArgs> = {\n creator: {\n ...(executeOptions.creator ?? {}),\n subtle: {\n ...(executeOptions.creator?.subtle ?? {}),\n useQueryRepositoryCache:\n executeOptions.creator?.subtle?.useQueryRepositoryCache ??\n executeOptions.creatorInternals.method === 'QUERY',\n },\n },\n creatorInternals: {\n client: executeOptions.creatorInternals.client,\n method: executeOptions.creatorInternals.transport,\n route: (executeOptions.creator?.route ?? '') as RouteType<TArgs>,\n },\n deps: executeOptions.deps,\n queryConfig: executeOptions.queryConfig,\n state: executeOptions.state,\n };\n\n queryExecute({\n executeOptions: normalizedOpts,\n executeState,\n args: computedArgs,\n options,\n });\n };\n\n exec['reset'] = reset;\n\n exec['currentRepositoryKey'] = executeState.previousKey.asReadonly();\n\n return exec;\n};\n","import { createBaseQuery, CreateQueryOptions, QueryArgs } from '../http';\nimport { CreateGqlQueryCreatorOptions, InternalCreateGqlQueryCreatorOptions } from './gql-query-creator';\nimport { createGqlExecuteFn } from './gql-query-execute';\n\nexport type GqlQueryArgs<TResponse = unknown> = QueryArgs & {\n response: TResponse;\n rawResponse?: { data: TResponse };\n variables?: Record<string, unknown>;\n};\n\nexport type CreateGqlQueryOptions<TArgs extends GqlQueryArgs> = Omit<\n CreateQueryOptions<TArgs>,\n 'creator' | 'creatorInternals'\n> & {\n creator?: CreateGqlQueryCreatorOptions<TArgs>;\n creatorInternals: InternalCreateGqlQueryCreatorOptions;\n};\n\nexport type GqlVariablesType<T extends GqlQueryArgs | null> = T extends GqlQueryArgs ? T['variables'] : never;\n\nexport const isCreateGqlQueryOptions = <TArgs extends QueryArgs>(\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n options: CreateQueryOptions<TArgs> | CreateGqlQueryOptions<any>,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n): options is CreateGqlQueryOptions<any> => {\n return 'transport' in options.creatorInternals;\n};\n\nexport const createGqlQuery = <TArgs extends GqlQueryArgs>(options: CreateGqlQueryOptions<TArgs>) =>\n createBaseQuery({\n creator: options.creator,\n creatorInternals: options.creatorInternals,\n features: options.features,\n queryConfig: options.queryConfig,\n executeFactory: createGqlExecuteFn,\n });\n","import { DestroyRef, Injector, Signal } from '@angular/core';\nimport { takeUntilDestroyed, toObservable } from '@angular/core/rxjs-interop';\nimport { Observable } from 'rxjs';\n\nexport type ObservableSignal<T> = Signal<T> & {\n /**\n * Converts this signal to an Observable.\n *\n * The observable lifetime is bounded by the signal owner's injector by default.\n * When an override injector is provided, the observable is bounded by whichever lifetime ends\n * first: `min(override injector lifetime, signal owner injector lifetime)`.\n */\n asObservable(options?: { injector?: Injector }): Observable<T>;\n};\n\nexport const wrapAsObservableSignal = <T>(source: Signal<T>, defaultInjector: Injector): ObservableSignal<T> => {\n const asObservable = (options?: { injector?: Injector }): Observable<T> => {\n const effectiveInjector = options?.injector ?? defaultInjector;\n const base$ = toObservable(source, { injector: effectiveInjector });\n\n if (options?.injector) {\n return base$.pipe(takeUntilDestroyed(defaultInjector.get(DestroyRef)));\n }\n\n return base$;\n };\n\n return Object.assign(source, { asObservable }) as unknown as ObservableSignal<T>;\n};\n","import { inject, InjectionToken } from '@angular/core';\nimport { createStaticProvider } from '@ethlete/core';\nimport { QueryDependencies } from './query-dependencies';\n\nexport type QueryContext = {\n /** All query dependencies (client, injector, destroy refs, etc.) */\n deps: QueryDependencies;\n};\n\nconst QUERY_CONTEXT_TOKEN = new InjectionToken<QueryContext>('QUERY_CONTEXT');\n\nexport const createQueryContext = (context: QueryContext) =>\n createStaticProvider(context, {\n name: 'Query Context',\n extraInjectionToken: QUERY_CONTEXT_TOKEN,\n });\n\nexport const injectQueryContext = () => inject(QUERY_CONTEXT_TOKEN);\n","import { HttpClient } from '@angular/common/http';\nimport {\n createEnvironmentInjector,\n DestroyRef,\n EnvironmentInjector,\n ErrorHandler,\n inject,\n Injector,\n ɵEffectScheduler,\n} from '@angular/core';\nimport { AnyCreateQueryClientResult, QueryClient } from './query-client';\nimport { createQueryContext, QueryContext } from './query-context';\nimport { QueryConfig } from './query-creator';\n\nexport type SetupQueryDependenciesOptions = {\n /** The query client tuple from createQueryClient */\n client: AnyCreateQueryClientResult;\n\n /** Optional query configuration */\n queryConfig: QueryConfig | undefined;\n};\n\nexport type QueryDependencies = {\n /** The destroy ref of the query. */\n destroyRef: DestroyRef;\n\n /** The destroy ref of the scope the query is in (e.g. a component) */\n scopeDestroyRef: DestroyRef;\n\n /** The query client */\n client: QueryClient;\n\n /** The injector of the query */\n injector: EnvironmentInjector;\n\n /** The effect scheduler */\n effectScheduler: ɵEffectScheduler;\n\n /** The error handler */\n ngErrorHandler: ErrorHandler;\n\n /** The http client */\n httpClient: HttpClient;\n};\n\nexport const setupQueryDependencies = (options: SetupQueryDependenciesOptions) => {\n const hostInjector = options.queryConfig?.injector ?? inject(Injector);\n const environmentInjector =\n options.queryConfig?.injector?.get(EnvironmentInjector) ?? hostInjector.get(EnvironmentInjector);\n\n const [, , clientToken] = options.client;\n\n const dependencies: QueryDependencies = {\n destroyRef: undefined as unknown as DestroyRef, // Will be set after injector creation\n scopeDestroyRef: hostInjector.get(DestroyRef),\n client: hostInjector.get<QueryClient>(clientToken),\n injector: undefined as unknown as EnvironmentInjector, // Will be set after injector creation\n effectScheduler: hostInjector.get(ɵEffectScheduler),\n ngErrorHandler: hostInjector.get(ErrorHandler),\n httpClient: hostInjector.get(HttpClient),\n };\n\n const queryContext: QueryContext = {\n deps: dependencies,\n };\n\n const [provideQueryContext] = createQueryContext(queryContext);\n\n const queryEnvironmentInjector = createEnvironmentInjector([provideQueryContext()], environmentInjector);\n\n dependencies.destroyRef = queryEnvironmentInjector.get(DestroyRef);\n dependencies.injector = queryEnvironmentInjector;\n\n // cleanup the environment injector when the scope (e.g. the component the query is in) is destroyed\n const scopeDestroyListener = dependencies.scopeDestroyRef.onDestroy(() => {\n try {\n queryEnvironmentInjector.destroy();\n } catch {\n // ignore\n }\n });\n\n dependencies.destroyRef.onDestroy(() => {\n // cleanup the scope destroy listener\n try {\n scopeDestroyListener();\n } catch {\n // ignore\n }\n });\n\n return dependencies;\n};\n","import { RuntimeError } from '@ethlete/core';\nimport { QueryFeatureType } from './query-features';\n\n// codes 0-999\nexport const QueryRuntimeErrorCode = {\n // Query\n QUERY_FEATURE_USED_MULTIPLE_TIMES: 0,\n\n // Query features\n WITH_ARGS_QUERY_FEATURE_MISSING_BUT_ROUTE_IS_FUNCTION: 100,\n WITH_POLLING_USED_ON_UNSUPPORTED_HTTP_METHOD: 101,\n WITH_AUTO_REFRESH_USED_ON_UNSUPPORTED_HTTP_METHOD: 102,\n WITH_AUTO_REFRESH_USED_IN_MANUAL_QUERY: 103,\n SILENCE_MISSING_WITH_ARGS_FEATURE_ERROR_USED_BUT_WITH_ARGS_PRESENT: 104,\n\n // Auth provider\n AUTH_EXTRACT_TOKENS_RESPONSE_NOT_OBJECT: 200,\n AUTH_EXTRACT_TOKENS_RESPONSE_MISSING_ACCESS_TOKEN: 201,\n AUTH_EXTRACT_TOKENS_RESPONSE_MISSING_REFRESH_TOKEN: 202,\n AUTH_PROVIDER_FEATURE_USED_MULTIPLE_TIMES: 203,\n\n // Query Repository\n UNCACHEABLE_REQUEST_HAS_CACHE_KEY_PARAM: 300,\n UNCACHEABLE_REQUEST_HAS_ALLOW_CACHE_PARAM: 301,\n\n // Paged Query Stack\n PAGED_QUERY_STACK_PAGE_BIGGER_THAN_TOTAL_PAGES: 400,\n PAGED_QUERY_STACK_NEXT_PAGE_CALLED_WITHOUT_PREVIOUS_PAGE: 401,\n PAGED_QUERY_STACK_PREVIOUS_PAGE_CALLED_BUT_ALREADY_AT_FIRST_PAGE: 402,\n\n // Query Stack\n QUERY_STACK_WITH_ARGS_USED: 500,\n QUERY_STACK_WITH_RESPONSE_UPDATE_USED: 501,\n QUERY_STACK_TOTAL_QUERIES_AND_EXPECTED_QUERIES_MISMATCH: 502,\n\n // GQL\n GQL_DATA_PROPERTY_MISSING_IN_RESPONSE: 600,\n\n // Secure Execute\n TOKENS_NOT_AVAILABLE_INSIDE_AUTH_AND_EXEC: 700,\n INVALID_STATE_INSIDE_SECURE_EXECUTE_FACTORY: 701,\n\n // Query Execution\n CIRCULAR_QUERY_DEPENDENCY: 800,\n} as const;\n\nexport type QueryRuntimeErrorCode = (typeof QueryRuntimeErrorCode)[keyof typeof QueryRuntimeErrorCode];\n\nexport const queryFeatureUsedMultipleTimes = (type: QueryFeatureType) => {\n return new RuntimeError(\n QueryRuntimeErrorCode.QUERY_FEATURE_USED_MULTIPLE_TIMES,\n `The query feature \"${type}()\" was used multiple times.`,\n );\n};\n\nexport const withArgsQueryFeatureMissingButRouteIsFunction = () => {\n return new RuntimeError(\n QueryRuntimeErrorCode.WITH_ARGS_QUERY_FEATURE_MISSING_BUT_ROUTE_IS_FUNCTION,\n `This queries route is a function, but a \"withArgs()\" feature is missing.`,\n );\n};\n\nexport const withPollingUsedOnUnsupportedHttpMethod = (method: string) => {\n return new RuntimeError(\n QueryRuntimeErrorCode.WITH_POLLING_USED_ON_UNSUPPORTED_HTTP_METHOD,\n `This is a \"${method}\" request, \"withPolling()\" is only supported for GET, HEAD, OPTIONS requests and GQL queries.`,\n );\n};\n\nexport const withAutoRefreshUsedOnUnsupportedHttpMethod = (method: string) => {\n return new RuntimeError(\n QueryRuntimeErrorCode.WITH_AUTO_REFRESH_USED_ON_UNSUPPORTED_HTTP_METHOD,\n `This is a \"${method}\" request, \"withAutoRefresh()\" is only supported for GET, HEAD, OPTIONS requests and GQL queries.`,\n );\n};\n\nexport const withAutoRefreshUsedInManualQuery = () => {\n return new RuntimeError(\n QueryRuntimeErrorCode.WITH_AUTO_REFRESH_USED_IN_MANUAL_QUERY,\n `\"withAutoRefresh()\" has been used inside a query that has \"onlyManualExecution\" set to true.` +\n ` If this is intentional, set \"ignoreOnlyManualExecution\" to true inside the auto refresh config.`,\n );\n};\n\nexport const silenceMissingWithArgsFeatureErrorUsedButWithArgsPresent = () => {\n return new RuntimeError(\n QueryRuntimeErrorCode.SILENCE_MISSING_WITH_ARGS_FEATURE_ERROR_USED_BUT_WITH_ARGS_PRESENT,\n `The \"silenceMissingWithArgsFeatureError\" config is set to true, but a \"withArgs()\" feature is present.`,\n );\n};\n\nexport const authExtractTokensResponseNotObject = () => {\n return new RuntimeError(\n QueryRuntimeErrorCode.AUTH_EXTRACT_TOKENS_RESPONSE_NOT_OBJECT,\n `The auth token extractor expects the response to be an object.`,\n );\n};\n\nexport const authExtractTokensResponseMissingAccessToken = () => {\n return new RuntimeError(\n QueryRuntimeErrorCode.AUTH_EXTRACT_TOKENS_RESPONSE_MISSING_ACCESS_TOKEN,\n `The auth token extractor expects the response to contain a string \"accessToken\" property.`,\n );\n};\n\nexport const authExtractTokensResponseMissingRefreshToken = () => {\n return new RuntimeError(\n QueryRuntimeErrorCode.AUTH_EXTRACT_TOKENS_RESPONSE_MISSING_REFRESH_TOKEN,\n `The auth token extractor expects the response to contain a string \"refreshToken\" property.`,\n );\n};\n\nexport const authProviderFeatureUsedMultipleTimes = (type: string) => {\n return new RuntimeError(\n QueryRuntimeErrorCode.AUTH_PROVIDER_FEATURE_USED_MULTIPLE_TIMES,\n `Bearer auth feature \"${type}\" was used multiple times.`,\n );\n};\n\nexport const uncacheableRequestHasCacheKeyParam = (key: string) => {\n return new RuntimeError(\n QueryRuntimeErrorCode.UNCACHEABLE_REQUEST_HAS_CACHE_KEY_PARAM,\n `This request is uncacheable, but a cache key was provided: ${key}. Please remove it.`,\n );\n};\n\nexport const uncacheableRequestHasAllowCacheParam = () => {\n return new RuntimeError(\n QueryRuntimeErrorCode.UNCACHEABLE_REQUEST_HAS_ALLOW_CACHE_PARAM,\n `This request is uncacheable, but allowCache is set to true. Please remove it.`,\n );\n};\n\nexport const pagedQueryStackPageBiggerThanTotalPages = (page: number, totalPages: number) => {\n return new RuntimeError(\n QueryRuntimeErrorCode.PAGED_QUERY_STACK_PAGE_BIGGER_THAN_TOTAL_PAGES,\n `The page \"${page}\" is bigger than the total pages \"${totalPages}\".`,\n );\n};\n\nexport const pagedQueryStackNextPageCalledWithoutPreviousPage = () => {\n return new RuntimeError(\n QueryRuntimeErrorCode.PAGED_QUERY_STACK_NEXT_PAGE_CALLED_WITHOUT_PREVIOUS_PAGE,\n `fetchNextPage() has been called but the current page is not yet loaded. Please call it after the previous page has been loaded.`,\n );\n};\n\nexport const pagedQueryStackPreviousPageCalledButAlreadyAtFirstPage = () => {\n return new RuntimeError(\n QueryRuntimeErrorCode.PAGED_QUERY_STACK_PREVIOUS_PAGE_CALLED_BUT_ALREADY_AT_FIRST_PAGE,\n `fetchPreviousPage() has been called but the current page is already the first page.`,\n );\n};\n\nexport const queryStackWithArgsUsed = () => {\n return new RuntimeError(\n QueryRuntimeErrorCode.QUERY_STACK_WITH_ARGS_USED,\n `withArgs() has been used in a query stack or a paged query stack. This is not supported.`,\n );\n};\n\nexport const queryStackWithResponseUpdateUsed = () => {\n return new RuntimeError(\n QueryRuntimeErrorCode.QUERY_STACK_WITH_RESPONSE_UPDATE_USED,\n `withResponseUpdate() has been used in a query stack or a paged query stack. This is not supported.`,\n );\n};\n\nexport const queryStackTotalQueriesAndExpectedQueriesMismatch = (totalQueries: number, expectedQueries: number) => {\n return new RuntimeError(\n QueryRuntimeErrorCode.QUERY_STACK_TOTAL_QUERIES_AND_EXPECTED_QUERIES_MISMATCH,\n `The total queries \"${totalQueries}\" and the expected queries \"${expectedQueries}\" do not match. This usually happens if a query depends on the response of the previous query to calculate its pagination values. Set blockExecutionDuringLoading to true to prevent this.`,\n );\n};\n\nexport const gqlDataPropertyMissingInResponse = () => {\n return new RuntimeError(\n QueryRuntimeErrorCode.GQL_DATA_PROPERTY_MISSING_IN_RESPONSE,\n `The GraphQL response is missing the required \"data\" property. Please add a custom transformResponse param to the query creator to handle this response format.`,\n );\n};\n\nexport const tokensNotAvailableInsideAuthAndExec = () => {\n return new RuntimeError(\n QueryRuntimeErrorCode.TOKENS_NOT_AVAILABLE_INSIDE_AUTH_AND_EXEC,\n `Tokens are not available inside authAndExec.`,\n );\n};\n\nexport const invalidStateInsideSecureExecuteFactory = () => {\n return new RuntimeError(\n QueryRuntimeErrorCode.INVALID_STATE_INSIDE_SECURE_EXECUTE_FACTORY,\n `An invalid state occurred inside the secure execute factory.`,\n );\n};\n\nexport const circularQueryDependency = () => {\n return new RuntimeError(\n QueryRuntimeErrorCode.CIRCULAR_QUERY_DEPENDENCY,\n `Query was executed more than 5 times in less than 100ms. This is usually a sign of a circular dependency.`,\n );\n};\n","import { computed, CreateEffectOptions, effect, Signal, untracked } from '@angular/core';\nimport { getActiveConsumer, setActiveConsumer } from '@angular/core/primitives/signals';\nimport { RequestHttpEvent } from './http-request';\nimport { QueryArgs, RequestArgs, ResponseType } from './query';\nimport { QueryDependencies } from './query-dependencies';\nimport { QueryErrorResponse } from './query-error-response';\nimport {\n withAutoRefreshUsedInManualQuery,\n withAutoRefreshUsedOnUnsupportedHttpMethod,\n withPollingUsedOnUnsupportedHttpMethod,\n} from './query-errors';\nimport { InternalQueryExecute } from './query-execute';\nimport { QueryState } from './query-state';\n\n/**\n * Returning this inside a withArgs feature will reset the query args to null.\n * This will also pause polling and auto refresh until new args are set.\n */\nexport const CLEAR_QUERY_ARGS = Symbol('CLEAR_QUERY_ARGS');\nexport type ClearQueryArgs = typeof CLEAR_QUERY_ARGS;\n\n/** A angular effect that can be nested inside another effect */\nexport const nestedEffect = (fn: () => void, options?: CreateEffectOptions) => {\n const activeConsumer = getActiveConsumer();\n\n setActiveConsumer(null);\n\n const eff = effect(() => {\n fn();\n }, options);\n\n setActiveConsumer(activeConsumer);\n\n return eff;\n};\n\nexport type QueryFeatureFlags = {\n hasWithArgsFeature: boolean;\n shouldAutoExecuteMethod: boolean;\n shouldAutoExecute: boolean;\n hasRouteFunction: boolean;\n onlyManualExecution?: boolean;\n\n /** Human readable method name */\n method: string;\n};\n\nexport const QueryFeatureType = {\n WITH_ARGS: 'WITH_ARGS',\n WITH_LOGGING: 'WITH_LOGGING',\n WITH_ERROR_HANDLING: 'WITH_ERROR_HANDLING',\n WITH_SUCCESS_HANDLING: 'WITH_SUCCESS_HANDLING',\n WITH_POLLING: 'WITH_POLLING',\n WITH_AUTO_REFRESH: 'WITH_AUTO_REFRESH',\n WITH_RESPONSE_UPDATE: 'WITH_RESPONSE_UPDATE',\n} as const;\nexport type QueryFeatureType = (typeof QueryFeatureType)[keyof typeof QueryFeatureType];\n\nexport type QueryFeatureContext<TArgs extends QueryArgs> = {\n state: QueryState<TArgs>;\n execute: InternalQueryExecute<TArgs>;\n deps: QueryDependencies;\n flags: QueryFeatureFlags;\n};\n\nexport type QueryFeatureFn<TArgs extends QueryArgs> = (context: QueryFeatureContext<TArgs>) => void;\n\nexport type QueryFeature<TArgs extends QueryArgs> = {\n type: QueryFeatureType;\n fn: (context: QueryFeatureContext<TArgs>) => void;\n};\n\nexport const createQueryFeature = <TArgs extends QueryArgs>(config: {\n type: QueryFeatureType;\n fn: QueryFeatureFn<TArgs>;\n}) => {\n return config as QueryFeature<TArgs>;\n};\n\n/**\n * A query feature that allows you to set the arguments of the query.\n * The arguments are read within a computed function, so you can use reactive values.\n *\n * To set the arguments to `null`, return the symbol `CLEAR_QUERY_ARGS`.\n * If you instead return `null`, the arguments won't change.\n *\n * Changing arguments will automatically trigger a new execution of the query if it is eligible for auto execution (e.g. a GET request).\n */\nexport const withArgs = <TArgs extends QueryArgs>(args: () => NoInfer<RequestArgs<TArgs>> | ClearQueryArgs | null) => {\n return createQueryFeature<TArgs>({\n type: QueryFeatureType.WITH_ARGS,\n fn: (context) => {\n const currArgs = computed(() => args());\n\n nestedEffect(\n () => {\n const currArgsNow = currArgs();\n\n if (currArgsNow === null) return;\n\n untracked(() => {\n if (currArgsNow === CLEAR_QUERY_ARGS) {\n context.state.args.set(null);\n return;\n }\n\n context.state.args.set(currArgsNow);\n\n if (context.flags.shouldAutoExecute) context.execute({ args: currArgsNow });\n });\n },\n { injector: context.deps.injector },\n );\n },\n });\n};\n\nexport type WithPollingFeatureOptions = {\n /** The interval in milliseconds at which the query should be executed */\n interval: number;\n\n /**\n * Whether the query should be executed initially.\n * By default, the query will be executed after the first interval.\n * @default false\n */\n executeInitially?: boolean;\n};\n\n/**\n * A query feature that will automatically execute the query at a given interval.\n * The interval will be cleared when the query is destroyed.\n * The interval will be reset when the arguments of the query change.\n *\n * @throws If the query is not eligible for auto execution (e.g. a POST request)\n */\nexport const withPolling = <TArgs extends QueryArgs>(options: WithPollingFeatureOptions) => {\n return createQueryFeature<TArgs>({\n type: QueryFeatureType.WITH_POLLING,\n fn: (context) => {\n if (!context.flags.shouldAutoExecuteMethod) {\n throw withPollingUsedOnUnsupportedHttpMethod(context.flags.method);\n }\n\n let intervalId: number | null = null;\n\n nestedEffect(\n () => {\n const args = context.state.args();\n\n untracked(() => {\n if (intervalId !== null) clearInterval(intervalId);\n\n // Don't start polling if the query doesn't have args.\n // It should have args because a withArgs feature is present.\n if (args === null && context.flags.hasWithArgsFeature) return;\n\n if (options.executeInitially) {\n context.execute({ args });\n }\n\n intervalId = window.setInterval(() => {\n context.execute({ args });\n }, options.interval);\n });\n },\n { injector: context.deps.injector },\n );\n\n context.deps.destroyRef.onDestroy(() => intervalId !== null && clearInterval(intervalId));\n },\n });\n};\n\nexport type WithLoggingFeatureOptions<TArgs extends QueryArgs> = {\n /** A function that will be called with the latest http event */\n logFn: (v: RequestHttpEvent<TArgs> | null) => void;\n};\n\n/** A query feature that can be used to log the latest http event */\nexport const withLogging = <TArgs extends QueryArgs>(options: WithLoggingFeatureOptions<TArgs>) => {\n return createQueryFeature<TArgs>({\n type: QueryFeatureType.WITH_LOGGING,\n fn: (context) => {\n nestedEffect(\n () => {\n const event = context.state.latestHttpEvent();\n\n if (event === null) return;\n\n untracked(() => {\n options.logFn(event);\n });\n },\n { injector: context.deps.injector },\n );\n },\n });\n};\n\nexport type WithErrorHandlingFeatureOptions = {\n /** A function that will be called with the latest error */\n handler: (e: QueryErrorResponse) => void;\n};\n\n/** A query feature that can be used to handle errors */\nexport const withErrorHandling = <TArgs extends QueryArgs>(options: WithErrorHandlingFeatureOptions) => {\n return createQueryFeature<TArgs>({\n type: QueryFeatureType.WITH_ERROR_HANDLING,\n fn: (context) => {\n nestedEffect(\n () => {\n const error = context.state.error();\n\n if (error === null) return;\n\n untracked(() => {\n options.handler(error);\n });\n },\n { injector: context.deps.injector },\n );\n },\n });\n};\n\nexport type WithSuccessHandlingFeatureOptions<TArgs extends QueryArgs> = {\n /** A function that will be called with the latest response */\n handler: (data: NonNullable<ResponseType<TArgs>>) => void;\n};\n\n/** A query feature that can be used to handle successful responses */\nexport const withSuccessHandling = <TArgs extends QueryArgs>(options: WithSuccessHandlingFeatureOptions<TArgs>) => {\n return createQueryFeature<TArgs>({\n type: QueryFeatureType.WITH_SUCCESS_HANDLING,\n fn: (context) => {\n nestedEffect(\n () => {\n const response = context.state.response();\n\n if (response === null) return;\n\n untracked(() => {\n options.handler(response as NonNullable<ResponseType<TArgs>>);\n });\n },\n { injector: context.deps.injector },\n );\n },\n });\n};\n\nexport type WithAutoRefreshFeatureOptions = {\n /** The signals that should trigger a refresh of the query */\n onSignalChanges: Signal<unknown>[];\n\n /** Whether to ignore the `onlyManualExecution` query config flag */\n ignoreOnlyManualExecution?: boolean;\n};\n\n/**\n * A query feature that will automatically execute the query when any of the provided signals change\n * @throws If the query is not eligible for auto execution (e.g. a POST request)\n * @throws If the query has the `onlyManualExecution` query config flag set and `ignoreOnlyManualExecution` is not set\n */\nexport const withAutoRefresh = <TArgs extends QueryArgs>(options: WithAutoRefreshFeatureOptions) => {\n return createQueryFeature<TArgs>({\n type: QueryFeatureType.WITH_AUTO_REFRESH,\n fn: (context) => {\n if (!context.flags.shouldAutoExecuteMethod) {\n throw withAutoRefreshUsedOnUnsupportedHttpMethod(context.flags.method);\n }\n\n if (context.flags.onlyManualExecution && !options.ignoreOnlyManualExecution) {\n throw withAutoRefreshUsedInManualQuery();\n }\n\n nestedEffect(\n () => {\n for (const signal of options.onSignalChanges) {\n signal();\n }\n\n untracked(() => {\n const args = context.state.args();\n\n // Don't start polling if the query doesn't have args.\n // It should have args because a withArgs feature is present.\n if (args === null && context.flags.hasWithArgsFeature) return;\n\n context.execute({ args });\n });\n },\n { injector: context.deps.injector },\n );\n },\n });\n};\n\nexport type WithResponseUpdateFeatureFnData<TArgs extends QueryArgs> = {\n /** The current response of the query */\n currentResponse: ResponseType<TArgs> | null;\n};\n\nexport type WithResponseUpdateFeatureOptions<TArgs extends QueryArgs> = {\n /**\n * A function that will be called with the latest response\n * If the function returns `null`, the response will not be updated.\n * Otherwise, the response will be updated with the returned value.\n * The function will be called in a reactive signal context.\n * If the query get's executed after the response was updated, the response will be set the the fresh data received from the server.\n *\n * This feature is most useful in combination with web sockets where the data received from the socket might be more up-to-date than the data received previously.\n *\n * @example\n * const matchEvents = mySocket.joinRoom('match-events');\n *\n * const myMatchQuery = getMatch(\n * withArgs(() => ({ matchId: 1 })),\n * withResponseUpdate(({ currentResponse }) => {\n * const matchEvent = matchEvents();\n *\n * if (!matchEvent) return null;\n *\n * // Do some checks here. This is just a very simple example.\n * // To apply partial updates, you can use the spread operator in combination with the current response.\n *\n * return matchEvent;\n * })\n * )\n */\n updater: (data: WithResponseUpdateFeatureFnData<TArgs>) => ResponseType<TArgs> | null;\n};\n\nexport const withResponseUpdate = <TArgs extends QueryArgs>(options: WithResponseUpdateFeatureOptions<TArgs>) => {\n return createQueryFeature<TArgs>({\n type: QueryFeatureType.WITH_RESPONSE_UPDATE,\n fn: (context) => {\n nestedEffect(\n () => {\n const currentResponse = untracked(() => context.state.response());\n const response = options.updater({ currentResponse });\n\n if (response === null) return;\n\n untracked(() => {\n context.state.rawResponse.set(response);\n });\n },\n { injector: context.deps.injector },\n );\n },\n });\n};\n","import { Signal, WritableSignal, computed, linkedSignal, signal } from '@angular/core';\nimport { HttpRequest, HttpRequestLoadingState, RequestHttpEvent } from './http-request';\nimport { QueryArgs, RawResponseType, RequestArgs, ResponseType } from './query';\nimport { QueryErrorResponse } from './query-error-response';\n\nexport type SetupQueryStateOptions<TArgs extends QueryArgs> = {\n transformResponse?: (rawResponse: RawResponseType<TArgs>) => ResponseType<TArgs>;\n};\n\nexport type QueryStateSubtle<TArgs extends QueryArgs> = {\n request: WritableSignal<HttpRequest<TArgs> | null>;\n rawResponse: WritableSignal<RawResponseType<TArgs> | null>;\n};\n\nexport type QueryState<TArgs extends QueryArgs> = {\n rawResponse: WritableSignal<RawResponseType<TArgs> | null>;\n response: Signal<ResponseType<TArgs> | null>;\n args: WritableSignal<RequestArgs<TArgs> | null>;\n latestHttpEvent: WritableSignal<RequestHttpEvent<TArgs> | null>;\n loading: WritableSignal<HttpRequestLoadingState | null>;\n error: WritableSignal<QueryErrorResponse | null>;\n lastTimeExecutedAt: WritableSignal<number | null>;\n lastTriggeredBy: WritableSignal<string | null>;\n executionState: Signal<QueryExecutionState<TArgs> | null>;\n subtle: QueryStateSubtle<TArgs>;\n};\n\nexport type QueryExecutionStateSuccess<TArgs extends QueryArgs> = {\n type: 'success';\n response: ResponseType<TArgs>;\n};\n\nexport type QueryExecutionStateFailure = {\n type: 'failure';\n error: QueryErrorResponse;\n};\n\nexport type QueryExecutionStateLoadingWithNoResponse = {\n type: 'loading';\n hasCachedResponse: false;\n loading: HttpRequestLoadingState;\n};\n\nexport type QueryExecutionStateLoadingWithCachedResponse<TArgs extends QueryArgs> = {\n type: 'loading';\n hasCachedResponse: true;\n loading: HttpRequestLoadingState;\n cachedResponse: ResponseType<TArgs>;\n};\n\nexport type QueryExecutionStateLoading<TArgs extends QueryArgs> =\n | QueryExecutionStateLoadingWithNoResponse\n | QueryExecutionStateLoadingWithCachedResponse<TArgs>;\n\nexport type QueryExecutionState<TArgs extends QueryArgs> =\n | QueryExecutionStateSuccess<TArgs>\n | QueryExecutionStateFailure\n | QueryExecutionStateLoading<TArgs>;\n\nexport const setupQueryState = <TArgs extends QueryArgs>(options: SetupQueryStateOptions<TArgs>) => {\n const request = signal<HttpRequest<TArgs> | null>(null);\n\n const rawResponse = linkedSignal(() => request()?.response() ?? null);\n const response = computed(() => {\n const raw = rawResponse();\n if (raw === null) return null;\n return options.transformResponse ? options.transformResponse(raw) : (raw as ResponseType<TArgs>);\n });\n const loading = linkedSignal(() => request()?.loading() ?? null);\n const error = linkedSignal(() => request()?.error() ?? null);\n const latestHttpEvent = linkedSignal(() => request()?.currentEvent() ?? null);\n\n const args = signal<RequestArgs<TArgs> | null>(null);\n const lastTimeExecutedAt = signal<number | null>(null);\n const lastTriggeredBy = signal<string | null>(null);\n\n const executionState = computed<QueryExecutionState<TArgs> | null>(() => {\n const currentResponse = response();\n const currentError = error();\n const currentLoading = loading();\n\n if (currentLoading) {\n if (currentResponse) {\n return {\n type: 'loading',\n hasCachedResponse: true,\n loading: currentLoading,\n cachedResponse: currentResponse,\n };\n }\n\n return {\n type: 'loading',\n hasCachedResponse: false,\n loading: currentLoading,\n };\n } else if (currentError) {\n return {\n type: 'failure',\n error: currentError,\n };\n } else if (currentResponse) {\n return {\n type: 'success',\n response: currentResponse,\n };\n } else {\n return null;\n }\n });\n\n const state: QueryState<TArgs> = {\n rawResponse,\n response,\n args,\n latestHttpEvent,\n loading,\n error,\n lastTimeExecutedAt,\n lastTriggeredBy,\n executionState,\n subtle: {\n request,\n rawResponse,\n },\n };\n\n return state;\n};\n","import { effect, signal, untracked } from '@angular/core';\nimport { wrapAsObservableSignal } from './observable-signal';\nimport { QueryArgs, QuerySnapshot } from './query';\nimport { injectQueryContext } from './query-context';\nimport { QueryDependencies } from './query-dependencies';\nimport { InternalQueryExecute } from './query-execute';\nimport { QueryState, setupQueryState } from './query-state';\n\nexport type CreateQuerySnapshotOptions<TArgs extends QueryArgs> = {\n state: QueryState<TArgs>;\n execute: InternalQueryExecute<TArgs>;\n deps: QueryDependencies;\n};\n\nexport const createQuerySnapshotFn = <TArgs extends QueryArgs>(options: CreateQuerySnapshotOptions<TArgs>) => {\n const { state } = options;\n const context = injectQueryContext();\n\n const snapshotFn = () => {\n const snapshotState = setupQueryState<TArgs>({});\n const isAlive = signal(true);\n\n const killEffectRef = effect(\n () => {\n const currentLoading = state.loading();\n const currentError = state.error();\n const currentResponse = state.response();\n const currentArgs = state.args();\n const currentLatestHttpEvent = state.latestHttpEvent();\n const currentLastTimeExecutedAt = state.lastTimeExecutedAt();\n const currentLastTriggeredBy = state.lastTriggeredBy();\n\n untracked(() => {\n snapshotState.args.set(currentArgs);\n snapshotState.error.set(currentError);\n snapshotState.lastTimeExecutedAt.set(currentLastTimeExecutedAt);\n snapshotState.lastTriggeredBy.set(currentLastTriggeredBy);\n snapshotState.latestHttpEvent.set(currentLatestHttpEvent);\n snapshotState.loading.set(currentLoading);\n snapshotState.rawResponse.set(currentResponse);\n\n if (currentLoading) return;\n\n if (!currentResponse && !currentError) return;\n\n // kill the effect once loading is done and we either have a response or an error\n killEffectRef.destroy();\n isAlive.set(false);\n });\n },\n { injector: context.deps.injector },\n );\n\n const snapshot: QuerySnapshot<TArgs> = {\n args: wrapAsObservableSignal(snapshotState.args.asReadonly(), context.deps.injector),\n response: wrapAsObservableSignal(snapshotState.response, context.deps.injector),\n latestHttpEvent: wrapAsObservableSignal(snapshotState.latestHttpEvent.asReadonly(), context.deps.injector),\n loading: wrapAsObservableSignal(snapshotState.loading.asReadonly(), context.deps.injector),\n error: wrapAsObservableSignal(snapshotState.error.asReadonly(), context.deps.injector),\n lastTimeExecutedAt: wrapAsObservableSignal(snapshotState.lastTimeExecutedAt.asReadonly(), context.deps.injector),\n triggeredBy: wrapAsObservableSignal(snapshotState.lastTriggeredBy.asReadonly(), context.deps.injector),\n isAlive: wrapAsObservableSignal(isAlive.asReadonly(), context.deps.injector),\n id: wrapAsObservableSignal(options.execute.currentRepositoryKey, context.deps.injector),\n executionState: wrapAsObservableSignal(snapshotState.executionState, context.deps.injector),\n };\n\n return snapshot;\n };\n\n return snapshotFn;\n};\n","import { runInInjectionContext } from '@angular/core';\nimport { CreateGqlQueryOptions, isCreateGqlQueryOptions } from '../gql/gql-query';\nimport { AnyCreateGqlQueryCreatorOptions, GqlQueryMethod } from '../gql/gql-query-creator';\nimport { wrapAsObservableSignal } from './observable-signal';\nimport { CreateQueryOptions, Query, QueryArgs, RawResponseType, ReadonlyQuery, ResponseType } from './query';\nimport { AnyCreateQueryClientResult } from './query-client';\nimport {\n CreateQueryCreatorOptions,\n InternalCreateQueryCreatorOptions,\n QueryConfig,\n QueryMethod,\n} from './query-creator';\nimport { QueryDependencies, setupQueryDependencies } from './query-dependencies';\nimport {\n queryFeatureUsedMultipleTimes,\n silenceMissingWithArgsFeatureErrorUsedButWithArgsPresent,\n withArgsQueryFeatureMissingButRouteIsFunction,\n} from './query-errors';\nimport { InternalQueryExecute } from './query-execute';\nimport { QueryFeature, QueryFeatureContext, QueryFeatureFlags, QueryFeatureType } from './query-features';\nimport { createQuerySnapshotFn } from './query-snapshot';\nimport { QueryState, setupQueryState } from './query-state';\n\nexport const shouldAutoExecuteQuery = (method: QueryMethod) => {\n return method === 'GET' || method === 'HEAD' || method === 'OPTIONS';\n};\n\nexport const shouldAutoExecuteGqlQuery = (method: GqlQueryMethod) => {\n return method === 'QUERY';\n};\n\nexport const getQueryFeatureUsage = <TArgs extends QueryArgs>(\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n options: CreateQueryOptions<TArgs> | CreateGqlQueryOptions<any>,\n) => {\n const { creator, features, queryConfig, creatorInternals } = options;\n\n const hasWithArgsFeature = features.some((f) => f.type == QueryFeatureType.WITH_ARGS);\n const shouldAutoExecuteMethod = isCreateGqlQueryOptions(options)\n ? shouldAutoExecuteGqlQuery(options.creatorInternals.method)\n : shouldAutoExecuteQuery(options.creatorInternals.method);\n const hasRouteFunction =\n typeof (creatorInternals as InternalCreateQueryCreatorOptions<TArgs>)?.route === 'function' ||\n typeof (creator as AnyCreateGqlQueryCreatorOptions)?.route === 'function';\n const shouldAutoExecute = shouldAutoExecuteMethod && !queryConfig.onlyManualExecution;\n\n if (hasRouteFunction && !hasWithArgsFeature && !queryConfig.silenceMissingWithArgsFeatureError) {\n throw withArgsQueryFeatureMissingButRouteIsFunction();\n }\n\n if (hasWithArgsFeature && queryConfig.silenceMissingWithArgsFeatureError) {\n throw silenceMissingWithArgsFeatureErrorUsedButWithArgsPresent();\n }\n\n const featureFnContext: QueryFeatureFlags = {\n hasWithArgsFeature,\n shouldAutoExecuteMethod,\n shouldAutoExecute,\n hasRouteFunction,\n onlyManualExecution: queryConfig.onlyManualExecution,\n method: isCreateGqlQueryOptions(options)\n ? `GQL ${options.creatorInternals.method}`\n : options.creatorInternals.method,\n };\n\n return featureFnContext;\n};\n\nexport const applyQueryFeatures = <TArgs extends QueryArgs>(\n features: QueryFeature<TArgs>[],\n context: QueryFeatureContext<TArgs>,\n) => {\n const featureTypes = new Set<QueryFeatureType>();\n\n for (const feature of features) {\n if (featureTypes.has(feature.type)) {\n throw queryFeatureUsedMultipleTimes(feature.type);\n }\n\n featureTypes.add(feature.type);\n feature.fn(context);\n }\n};\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport const maybeExecute = (options: { flags: QueryFeatureFlags; execute: InternalQueryExecute<any> }) => {\n if (options.flags.shouldAutoExecute && !options.flags.hasRouteFunction && !options.flags.hasWithArgsFeature) {\n options.execute();\n }\n};\n\nexport type CreateQueryObjectOptions<TArgs extends QueryArgs> = {\n state: QueryState<TArgs>;\n deps: QueryDependencies;\n execute: InternalQueryExecute<TArgs>;\n};\n\nexport const createQueryObject = <TArgs extends QueryArgs>(options: CreateQueryObjectOptions<TArgs>) => {\n const { state, execute, deps } = options;\n\n const destroy = () => deps.injector.destroy();\n const setResponse = (response: ResponseType<TArgs>) => state.rawResponse.set(response as RawResponseType<TArgs>);\n const createSnapshot = createQuerySnapshotFn({ state, execute, deps });\n\n // Pre-wrap all public signals once so both `query` and `roQuery` share the same instances.\n const wrappedArgs = wrapAsObservableSignal(state.args.asReadonly(), deps.injector);\n const wrappedResponse = wrapAsObservableSignal(state.response, deps.injector);\n const wrappedLatestHttpEvent = wrapAsObservableSignal(state.latestHttpEvent.asReadonly(), deps.injector);\n const wrappedLoading = wrapAsObservableSignal(state.loading.asReadonly(), deps.injector);\n const wrappedError = wrapAsObservableSignal(state.error.asReadonly(), deps.injector);\n const wrappedLastTimeExecutedAt = wrapAsObservableSignal(state.lastTimeExecutedAt.asReadonly(), deps.injector);\n const wrappedTriggeredBy = wrapAsObservableSignal(state.lastTriggeredBy.asReadonly(), deps.injector);\n const wrappedId = wrapAsObservableSignal(execute.currentRepositoryKey, deps.injector);\n const wrappedExecutionState = wrapAsObservableSignal(state.executionState, deps.injector);\n const wrappedRequest = wrapAsObservableSignal(state.subtle.request.asReadonly(), deps.injector);\n\n const asReadonly = () => {\n const roQuery: ReadonlyQuery<TArgs> = {\n args: wrappedArgs,\n response: wrappedResponse,\n latestHttpEvent: wrappedLatestHttpEvent,\n loading: wrappedLoading,\n error: wrappedError,\n lastTimeExecutedAt: wrappedLastTimeExecutedAt,\n triggeredBy: wrappedTriggeredBy,\n id: wrappedId,\n createSnapshot,\n executionState: wrappedExecutionState,\n };\n\n return roQuery;\n };\n\n const query: Query<TArgs> = {\n execute,\n args: wrappedArgs,\n response: wrappedResponse,\n latestHttpEvent: wrappedLatestHttpEvent,\n loading: wrappedLoading,\n error: wrappedError,\n lastTimeExecutedAt: wrappedLastTimeExecutedAt,\n triggeredBy: wrappedTriggeredBy,\n id: wrappedId,\n createSnapshot,\n reset: execute.reset,\n asReadonly,\n executionState: wrappedExecutionState,\n subtle: {\n destroy,\n setResponse,\n request: wrappedRequest,\n destroyRef: deps.scopeDestroyRef,\n injector: deps.injector,\n },\n };\n\n return query;\n};\n\nexport type ExecuteFactory<TArgs extends QueryArgs, TInternals> = (options: {\n deps: QueryDependencies;\n state: QueryState<TArgs>;\n creator?: CreateQueryCreatorOptions;\n creatorInternals: TInternals;\n queryConfig: QueryConfig;\n}) => InternalQueryExecute<TArgs>;\n\nexport type CreateBaseQueryOptions<TArgs extends QueryArgs, TInternals> = {\n creator?: CreateQueryCreatorOptions;\n creatorInternals: TInternals;\n features: QueryFeature<TArgs>[];\n queryConfig: QueryConfig;\n executeFactory: ExecuteFactory<TArgs, TInternals>;\n};\n\nexport const createBaseQuery = <TArgs extends QueryArgs, TInternals extends { client: AnyCreateQueryClientResult }>(\n options: CreateBaseQueryOptions<TArgs, TInternals>,\n) => {\n const client = options.creatorInternals.client;\n\n const deps = setupQueryDependencies({\n client,\n queryConfig: options.queryConfig,\n });\n\n return runInInjectionContext(deps.injector, () => {\n const state = setupQueryState<TArgs>({\n transformResponse: options.creator?.transformResponse,\n });\n const flags = getQueryFeatureUsage(options as unknown as Parameters<typeof getQueryFeatureUsage>[0]);\n\n const execute = options.executeFactory({\n deps,\n state,\n creator: options.creator,\n creatorInternals: options.creatorInternals,\n queryConfig: options.queryConfig,\n });\n\n const featureFnContext: QueryFeatureContext<TArgs> = {\n state,\n execute,\n flags,\n deps,\n };\n\n applyQueryFeatures(options.features, featureFnContext);\n\n maybeExecute({ execute, flags });\n\n return createQueryObject({ state, execute, deps });\n });\n};\n","import { signal, WritableSignal } from '@angular/core';\nimport { QueryArgs, RequestArgs } from './query';\nimport { circularQueryDependency } from './query-errors';\nimport { CreateQueryExecuteOptions } from './query-execute';\n\nexport type ResetExecuteStateOptions<TArgs extends QueryArgs> = {\n executeOptions: Pick<CreateQueryExecuteOptions<TArgs>, 'state' | 'deps'>;\n executeState: QueryExecuteState;\n};\n\nexport const resetExecuteState = <TArgs extends QueryArgs>(options: ResetExecuteStateOptions<TArgs>) => {\n const { executeState, executeOptions: opts } = options;\n const { state } = opts;\n\n opts.deps.client.repository.unbind(executeState.previousKey(), opts.deps.destroyRef);\n\n state.args.set(null);\n state.error.set(null);\n state.latestHttpEvent.set(null);\n state.loading.set(null);\n state.rawResponse.set(null);\n state.lastTimeExecutedAt.set(null);\n state.lastTriggeredBy.set(null);\n};\n\nexport type QueryExecuteState = {\n previousKey: WritableSignal<string | null>;\n};\n\nexport const setupQueryExecuteState = (): QueryExecuteState => {\n return {\n previousKey: signal(null),\n };\n};\n\nexport type RunQueryExecuteOptions = {\n allowCache?: boolean;\n triggeredBy?: string;\n};\n\nexport type QueryExecuteOptions<TArgs extends QueryArgs> = {\n executeOptions: CreateQueryExecuteOptions<TArgs>;\n executeState: QueryExecuteState;\n\n args: RequestArgs<TArgs> | null;\n options?: RunQueryExecuteOptions;\n\n isSecure?: boolean;\n};\n\nexport const queryExecute = <TArgs extends QueryArgs>(options: QueryExecuteOptions<TArgs>) => {\n const { executeOptions, args, executeState, options: runQueryOptions, isSecure } = options;\n const { deps, state, creator, creatorInternals, queryConfig } = executeOptions;\n\n const { key, request } = deps.client.repository.request({\n route: creatorInternals.route,\n method: creatorInternals.method,\n args,\n creatorOptions: creator,\n retryFn: creator?.retryFn,\n consumerDestroyRef: deps.destroyRef,\n key: queryConfig.key,\n previousKey: executeState.previousKey(),\n runQueryOptions,\n isSecure,\n });\n\n executeState.previousKey.set(key);\n state.lastTimeExecutedAt.set(Date.now());\n state.lastTriggeredBy.set(runQueryOptions?.triggeredBy ?? null);\n state.subtle.request.set(request);\n};\n\nexport const circularQueryDependencyChecker = () => {\n let lastTriggerTs = 0;\n let illegalWrites = 0;\n\n // Typing this as number will throw an type error during testing since it is of type Timeout in a node env.\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n let timeout: any = null;\n\n const check = () => {\n const now = performance.now();\n\n if (now - lastTriggerTs < 100) {\n illegalWrites++;\n\n if (illegalWrites > 5) {\n throw circularQueryDependency();\n }\n }\n\n lastTriggerTs = now;\n\n if (timeout) clearTimeout(timeout);\n\n timeout = setTimeout(() => {\n illegalWrites = 0;\n }, 100);\n };\n\n return {\n check,\n };\n};\n","import { Signal } from '@angular/core';\nimport { QueryArgs, RequestArgs } from './query';\nimport { CreateQueryCreatorOptions, InternalCreateQueryCreatorOptions, QueryConfig } from './query-creator';\nimport { QueryDependencies } from './query-dependencies';\nimport {\n circularQueryDependencyChecker,\n queryExecute,\n resetExecuteState,\n RunQueryExecuteOptions,\n setupQueryExecuteState,\n} from './query-execute-utils';\nimport { QueryKey } from './query-repository';\nimport { QueryState } from './query-state';\n\nexport type CreateQueryExecuteOptions<TArgs extends QueryArgs> = {\n deps: QueryDependencies;\n state: QueryState<TArgs>;\n creator?: CreateQueryCreatorOptions;\n creatorInternals: InternalCreateQueryCreatorOptions<TArgs>;\n queryConfig: QueryConfig;\n};\n\nexport type QueryExecuteArgs<TArgs extends QueryArgs> = {\n args?: RequestArgs<TArgs> | null;\n options?: RunQueryExecuteOptions;\n};\n\nexport type InternalQueryExecute<TArgs extends QueryArgs> = {\n (executeArgs?: QueryExecuteArgs<TArgs>): void;\n reset: () => void;\n currentRepositoryKey: Signal<QueryKey | null>;\n};\n\nexport type QueryExecute<TArgs extends QueryArgs> = (executeArgs?: QueryExecuteArgs<TArgs>) => void;\n\nexport const createExecuteFn = <TArgs extends QueryArgs>(\n executeOptions: CreateQueryExecuteOptions<TArgs>,\n): InternalQueryExecute<TArgs> => {\n const executeState = setupQueryExecuteState();\n const circularChecker = circularQueryDependencyChecker();\n\n const reset = () => resetExecuteState({ executeState, executeOptions });\n\n const exec = (executeArgs?: QueryExecuteArgs<TArgs>) => {\n circularChecker.check();\n\n // Make sure all effects are flushed before reading the args.\n // A withArgs feature effect might still be pending otherwise resulting in the wrong args being read.\n executeOptions.deps.effectScheduler.flush();\n\n const { args = executeOptions.state.args(), options } = executeArgs ?? {};\n\n queryExecute({ executeOptions, executeState, args, options });\n };\n\n exec['reset'] = reset;\n\n exec['currentRepositoryKey'] = executeState.previousKey.asReadonly();\n\n return exec;\n};\n","/* eslint-disable @typescript-eslint/no-explicit-any */\n\nimport { HttpHeaders } from '@angular/common/http';\nimport { DestroyRef, Injector } from '@angular/core';\nimport { createBaseQuery } from './base-query-factory';\nimport { HttpRequest, HttpRequestLoadingState, RequestHttpEvent } from './http-request';\nimport { ObservableSignal } from './observable-signal';\nimport { CreateQueryCreatorOptions, InternalCreateQueryCreatorOptions, QueryConfig } from './query-creator';\nimport { QueryErrorResponse } from './query-error-response';\nimport { createExecuteFn, QueryExecute } from './query-execute';\nimport { QueryFeature } from './query-features';\nimport { QueryExecutionState } from './query-state';\n\nexport type QueryArgs = {\n response?: any;\n rawResponse?: any;\n pathParams?: Record<string, string | number>;\n queryParams?: any;\n body?: any;\n headers?: HttpHeaders | (() => HttpHeaders);\n};\n\nexport type ResponseType<T extends QueryArgs | null> = T extends QueryArgs ? T['response'] : never;\nexport type RawResponseType<T extends QueryArgs | null> = T extends QueryArgs\n ? T['rawResponse'] extends undefined\n ? T['response']\n : T['rawResponse']\n : never;\nexport type PathParamsType<T extends QueryArgs | null> = T extends QueryArgs ? T['pathParams'] : never;\nexport type QueryParamsType<T extends QueryArgs | null> = T extends QueryArgs ? T['queryParams'] : never;\nexport type BodyType<T extends QueryArgs | null> = T extends QueryArgs ? T['body'] : never;\n\nexport type RequestArgs<T extends QueryArgs | null> = T extends QueryArgs ? Omit<T, 'response'> : never;\n\nexport type CreateQueryOptions<TArgs extends QueryArgs> = {\n creator?: CreateQueryCreatorOptions;\n creatorInternals: InternalCreateQueryCreatorOptions<TArgs>;\n features: QueryFeature<TArgs>[];\n queryConfig: QueryConfig;\n};\n\nexport type QueryBase<TArgs extends QueryArgs> = {\n /** The arguments of the last execution of the query. Will be `null` if the query has never been executed */\n args: ObservableSignal<RequestArgs<TArgs> | null>;\n\n /**\n * The latest response of the query. Will be `null` if the query has never been executed.\n * Responses are cached until a new response is received.\n * If a response is present but the next execution of the query fails, the response will be set to `null` again.\n */\n response: ObservableSignal<ResponseType<TArgs> | null>;\n\n /** The latest Angular HTTP client native http event that occurred during the last execution of the query. Will be `null` if no event occurred. */\n latestHttpEvent: ObservableSignal<RequestHttpEvent<TArgs> | null>;\n\n /** The loading state of the query. Will be `null` if the query currently isn't loading. */\n loading: ObservableSignal<HttpRequestLoadingState | null>;\n\n /** The error that occurred during the last execution of the query. Will be `null` if no error occurred. */\n error: ObservableSignal<QueryErrorResponse | null>;\n\n /** The time the query was last executed at. Will be `null` if the query has never been executed. */\n lastTimeExecutedAt: ObservableSignal<number | null>;\n\n /** Who or what triggered the last execution. Will be `null` for user-triggered executions. */\n triggeredBy: ObservableSignal<string | null>;\n\n /** The id of the query */\n id: ObservableSignal<string | null>;\n\n /** The current state of the query. Will be `null` if the query has never been executed. */\n executionState: ObservableSignal<QueryExecutionState<TArgs> | null>;\n};\n\n/** A snapshot of a query state at a specific point in time */\nexport type QuerySnapshot<TArgs extends QueryArgs> = QueryBase<TArgs> & {\n /** This signal is `true` until the latest execution of the query has completed in any way (success, error, or cancellation) */\n isAlive: ObservableSignal<boolean>;\n};\n\nexport type AnyQuerySnapshot = QuerySnapshot<any>;\nexport type AnyNewQuery = Query<any>;\n\nexport type QuerySubtle<TArgs extends QueryArgs> = {\n /** Destroys the query and cleans up all resources. The query should not be used after this method is called. */\n destroy: () => void;\n\n /** Manually sets the response of the query. This will not trigger a new execution of the query. */\n setResponse: (response: ResponseType<TArgs>) => void;\n\n /** The currently underlying HTTP request of the query. Will be `null` if the query has never been executed. */\n request: ObservableSignal<HttpRequest<TArgs> | null>;\n\n /** The destroy reference used to clean up the query when it is no longer needed */\n destroyRef: DestroyRef;\n\n /** The Angular injector used to resolve dependencies for the query */\n injector: Injector;\n};\n\nexport type Query<TArgs extends QueryArgs> = QueryBase<TArgs> & {\n /** Executes the query */\n execute: QueryExecute<TArgs>;\n\n /** Creates an immutable snapshot of the current query state */\n createSnapshot: () => QuerySnapshot<TArgs>;\n\n /** Resets the query state to its initial state */\n reset: () => void;\n\n /** Returns a readonly version of the query */\n asReadonly: () => ReadonlyQuery<TArgs>;\n\n /** Advanced query features. **WARNING!** Incorrectly using these features will likely **BREAK** your application. You have been warned! */\n subtle: QuerySubtle<TArgs>;\n};\n\nexport type ReadonlyQuery<TArgs extends QueryArgs> = Omit<Query<TArgs>, 'execute' | 'subtle' | 'reset' | 'asReadonly'>;\n\nexport const createQuery = <TArgs extends QueryArgs>(options: CreateQueryOptions<TArgs>) =>\n createBaseQuery({\n creator: options.creator,\n creatorInternals: options.creatorInternals,\n features: options.features,\n queryConfig: options.queryConfig,\n executeFactory: createExecuteFn,\n });\n","import { Injector } from '@angular/core';\nimport { createBaseQueryCreator } from './base-query-creator-factory';\nimport { HttpRequestResponseType, HttpRequestTransferCacheConfig } from './http-request';\nimport { AnyNewQuery, PathParamsType, Query, QueryArgs, RawResponseType, ResponseType, createQuery } from './query';\nimport { AnyCreateQueryClientResult } from './query-client';\nimport { QueryFeature } from './query-features';\nimport { ShouldRetryRequestFn } from './query-retry-utils';\n\nexport type RouteType<TArgs extends QueryArgs> =\n PathParamsType<TArgs> extends { [key: string]: unknown } ? (args: TArgs['pathParams']) => RouteString : RouteString;\n\nexport type RouteString = `/${string}`;\n\nexport type BaseQueryCreatorOptionsSubtle = {\n /**\n * If true, the request will be forced to be cached (saved inside the query repository).\n * Can be used to e.g. cache GQL queries transported via POST\n *\n * - `true` means the request will always be cached\n * - `false` means the request will never be cached\n * - `undefined` means the request will be cached if the method is GET, OPTIONS or HEAD\n */\n useQueryRepositoryCache?: boolean;\n};\n\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nexport type BaseQueryCreatorOptions<TArgs extends QueryArgs = QueryArgs> = {\n /**\n * If true, the query loading state will include progress information.\n * This is useful for file uploads and downloads.\n *\n * **Warning**: Upload progress events are not supported by browsers when using the fetch API, such as with `provideHttpClient(withFetch())`.\n * In this case, you should use the older XHR implementation by omitting `withFetch()`. But take into account that XHR is not supported in server-side rendering environments.\n *\n * @see https://angular.dev/guide/http/making-requests#receiving-raw-progress-events\n *\n * @default false\n */\n reportProgress?: boolean;\n\n /**\n * The response type of the query.\n * @default 'json'\n */\n responseType?: HttpRequestResponseType;\n\n /**\n * Whether to include credentials (cookies) in the request or not.\n * @default false\n */\n withCredentials?: boolean;\n\n /**\n * This property accepts either a boolean to enable/disable transferring cache for eligible\n * requests performed using `HttpClient`, or an object, which allows to configure cache\n * parameters, such as which headers should be included (no headers are included by default).\n *\n * Setting this property will override the options passed to `provideClientHydration()` for this\n * particular request\n */\n transferCache?: HttpRequestTransferCacheConfig;\n\n /**\n * Custom retry function for this specific query creator.\n * If provided, overrides the retry function configured at the client level.\n *\n * @default Client's retryFn or shouldRetryRequest()\n */\n retryFn?: ShouldRetryRequestFn;\n\n /** Advanced query creator features. **WARNING!** Incorrectly using these features will likely **BREAK** your application. You have been warned! */\n subtle?: BaseQueryCreatorOptionsSubtle;\n};\n\ntype HasKey<T, K extends PropertyKey> = K extends keyof T\n ? undefined extends T[K]\n ? K extends keyof Required<T>\n ? true\n : false\n : true\n : false;\n\n/**\n * Determines if rawResponse type differs from response type.\n * Returns true if rawResponse is explicitly defined and differs from response.\n */\nexport type RequiresTransform<TArgs extends QueryArgs> =\n HasKey<TArgs, 'rawResponse'> extends false\n ? false\n : RawResponseType<TArgs> extends ResponseType<TArgs>\n ? ResponseType<TArgs> extends RawResponseType<TArgs>\n ? false\n : true\n : true;\n\nexport type CreateQueryCreatorOptions<TArgs extends QueryArgs = QueryArgs> = BaseQueryCreatorOptions<TArgs> &\n (RequiresTransform<TArgs> extends true\n ? {\n /**\n * Transforms the raw HTTP response to the final response type.\n * **Required** because rawResponse type differs from response type.\n *\n * @example\n * ```ts\n * transformResponse: (raw) => raw.data\n * ```\n */\n transformResponse: (rawResponse: RawResponseType<TArgs>) => ResponseType<TArgs>;\n }\n : {\n /**\n * Transforms the raw HTTP response to the final response type.\n * Useful for unwrapping response wrappers (e.g., GraphQL's `{ data: ... }` format).\n *\n * @example\n * ```ts\n * transformResponse: (raw) => raw.data\n * ```\n */\n transformResponse?: (rawResponse: RawResponseType<TArgs>) => ResponseType<TArgs>;\n });\n\nexport type QueryCreator<TArgs extends QueryArgs> = {\n (...features: QueryFeature<TArgs>[]): Query<TArgs>;\n (queryConfig: QueryConfig, ...features: QueryFeature<TArgs>[]): Query<TArgs>;\n\n /**\n * Creates a new query creator with merged options.\n * The new creator inherits all options from the original and overrides them with the provided options.\n *\n * @example\n * ```ts\n * const originalCreator = myApiPost('/api/data');\n * const creatorWithRetry = originalCreator.clone({ retryFn: customRetryFn });\n * ```\n */\n clone: (additionalOptions: Partial<BaseQueryCreatorOptions<TArgs>>) => QueryCreator<TArgs>;\n};\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport type AnyQueryCreator = QueryCreator<any>;\n\nexport type QueryArgsOf<T extends AnyQueryCreator | AnyNewQuery> =\n T extends QueryCreator<infer TArgs> ? TArgs : T extends Query<infer TArgs> ? TArgs : never;\n\nexport type RunQueryCreator<TCreator extends AnyQueryCreator> = ReturnType<TCreator>;\n\nexport type QueryMethod = 'GET' | 'OPTIONS' | 'HEAD' | 'POST' | 'PUT' | 'DELETE' | 'PATCH' | 'TRACE' | 'CONNECT';\n\nexport type InternalCreateQueryCreatorOptions<TArgs extends QueryArgs> = {\n /**\n * The route of the query.\n * If the query has path params, the route should be a function that takes the path params as an argument.\n * Otherwise, it should be a string.\n */\n route: RouteType<TArgs>;\n\n method: QueryMethod;\n client: AnyCreateQueryClientResult;\n};\n\nexport type QueryConfig = {\n /** A custom id to use for this query. Only affects queries that can be cached. */\n key?: string;\n\n /**\n * If true, the query will not be executed automatically.\n * Does not affect mutations such as POST, PUT etc. since those are never executed automatically.\n */\n onlyManualExecution?: boolean;\n\n /**\n * If true, the query will not throw an error because a \"withArgs()\" feature is missing.\n */\n silenceMissingWithArgsFeatureError?: boolean;\n\n /**\n * A custom injector to use for this query.\n */\n injector?: Injector;\n};\n\nexport const splitQueryConfig = <TArgs extends QueryArgs>(args: (QueryFeature<TArgs> | QueryConfig)[]) => {\n let queryConfig: QueryConfig = {};\n let features: QueryFeature<TArgs>[] = [];\n\n const first = args[0];\n\n if (first) {\n if ('type' in first) {\n features = args as QueryFeature<TArgs>[];\n } else {\n [queryConfig, ...features] = args as [QueryConfig, ...QueryFeature<TArgs>[]];\n }\n }\n return { features, queryConfig };\n};\n\nexport const createQueryCreator = <TArgs extends QueryArgs>(\n options: CreateQueryCreatorOptions | undefined,\n internals: InternalCreateQueryCreatorOptions<TArgs>,\n): QueryCreator<TArgs> =>\n createBaseQueryCreator({\n options,\n internals,\n queryFactory: createQuery,\n });\n","import { Query, QueryArgs } from './query';\nimport { BaseQueryCreatorOptions, QueryConfig, QueryCreator, splitQueryConfig } from './query-creator';\nimport { QueryFeature } from './query-features';\n\nexport type BaseQueryCreatorFactoryOptions<TArgs extends QueryArgs, TOptions, TInternals> = {\n /** Creator-specific options (e.g., CreateQueryCreatorOptions or CreateGqlQueryCreatorOptions) */\n options: TOptions | undefined;\n\n /** Creator-specific internals (e.g., InternalCreateQueryCreatorOptions or InternalCreateGqlQueryCreatorOptions) */\n internals: TInternals;\n\n /** Factory function that creates the actual query */\n queryFactory: (config: {\n creator: TOptions | undefined;\n creatorInternals: TInternals;\n features: QueryFeature<TArgs>[];\n queryConfig: QueryConfig;\n }) => Query<TArgs>;\n};\n\nexport const createBaseQueryCreator = <TArgs extends QueryArgs, TOptions, TInternals>(\n config: BaseQueryCreatorFactoryOptions<TArgs, TOptions, TInternals>,\n): QueryCreator<TArgs> => {\n function queryCreator(...features: QueryFeature<TArgs>[]): Query<TArgs>;\n function queryCreator(queryConfig: QueryConfig, ...features: QueryFeature<TArgs>[]): Query<TArgs>;\n\n function queryCreator(...args: (QueryFeature<TArgs> | QueryConfig)[]): Query<TArgs> {\n const { features, queryConfig } = splitQueryConfig<TArgs>(args);\n\n return config.queryFactory({\n creator: config.options,\n creatorInternals: config.internals,\n features,\n queryConfig,\n });\n }\n\n // Add clone method to create a new creator with merged options\n // Cast to match QueryCreator's expected signature while preserving TOptions internally\n queryCreator.clone = (additionalOptions: Partial<BaseQueryCreatorOptions>) => {\n return createBaseQueryCreator({\n ...config,\n options: { ...config.options, ...additionalOptions } as TOptions,\n });\n };\n\n return queryCreator;\n};\n","import { FormViolationListView, FormViolationView } from '@ethlete/types';\n\nexport type ClassValidatorError = {\n statusCode: number;\n message: string[];\n error: string;\n};\n\nexport const isClassValidatorError = (error: unknown): error is ClassValidatorError => {\n return typeof error === 'object' && error !== null && 'statusCode' in error && 'message' in error && 'error' in error;\n};\n\nexport type SymfonyErrorTrace = {\n args: string[];\n class: string;\n file: string;\n function: string;\n line: number;\n namespace: string;\n short_class: string;\n type: string;\n};\n\nexport type SymfonyError = {\n class: string;\n detail: string;\n status: number;\n title: string;\n trace: SymfonyErrorTrace[];\n type: string;\n};\n\nexport const isSymfonyError = (error: unknown): error is SymfonyError => {\n if (!error || typeof error !== 'object') {\n return false;\n }\n\n const symfonyError = error as SymfonyError;\n\n return (\n symfonyError.class !== undefined &&\n symfonyError.detail !== undefined &&\n symfonyError.status !== undefined &&\n symfonyError.title !== undefined &&\n symfonyError.trace !== undefined &&\n symfonyError.type !== undefined\n );\n};\n\nexport const isSymfonyPagerfantaOutOfRangeError = (error: unknown): error is SymfonyError => {\n if (!isSymfonyError(error)) {\n return false;\n }\n\n return error.class.startsWith('Pagerfanta') && error.class.endsWith('OutOfRangeCurrentPageException');\n};\n\nexport const isSymfonyFormViolationListError = (error: unknown): error is FormViolationListView => {\n return typeof error === 'object' && error !== null && 'violations' in error;\n};\n\nexport const isSymfonyListError = (error: unknown): error is FormViolationView[] => {\n return (\n !!error &&\n typeof error === 'object' &&\n Array.isArray(error) &&\n !!error.length &&\n typeof error[0] === 'object' &&\n 'message' in error[0] &&\n 'propertyPath' in error[0] &&\n 'invalidValue' in error[0]\n );\n};\n","export const buildErrorMessage = (code: string, message: string) => `[@ethlete\\\\query:${code}] ${message}`;\n\nexport class QueryError extends Error {\n data?: unknown;\n\n constructor(code: string, message: string, data?: unknown) {\n super(buildErrorMessage(code, message));\n this.name = 'QueryError';\n this.data = data;\n }\n}\n\nexport const invalidBaseRouteError = (data: unknown) =>\n new QueryError('001', 'The baseRoute must not end with a slash', data);\n\nexport const invalidRouteError = (data: unknown) => new QueryError('002', 'The route must start with a slash', data);\n\nexport const pathParamsMissingInRouteFunctionError = (data: unknown) =>\n new QueryError('003', 'The route is a function but pathParams are missing', data);\n\nexport const queryStateAlreadyHasKeyError = (data: unknown) =>\n new QueryError('004', 'The query state already contains the provided key', data);\n\nexport const queryStateDoesNotContainKeyError = (data: unknown) =>\n new QueryError('005', 'The query state does not contain the provided key', data);\n\nexport const queryStateCannotTransformError = (data: unknown) =>\n new QueryError('006', 'The query state cannot be transformed because it is not loading', data);\n\nexport const invalidBodyError = (data: unknown) => new QueryError('007', 'The body is not valid or upsupported', data);\n","import { isSymfonyPagerfantaOutOfRangeError } from '../../http/query-error-response-utils';\nimport { invalidBaseRouteError, invalidRouteError, pathParamsMissingInRouteFunctionError } from '../logger';\nimport { AnyRoute } from '../query';\nimport {\n BuildQueryStringConfig,\n Method,\n PathParams,\n QueryParams,\n RequestError,\n RequestHeaders,\n RequestRetryFn,\n} from './request.types';\n\nexport const isNaN = (value: unknown): boolean => typeof value === 'number' && Number.isNaN(value);\nexport const isEmptyString = (value: unknown): boolean => typeof value === 'string' && value.trim() === '';\n\nexport const isRequestError = <T = unknown>(error: unknown): error is RequestError<T> =>\n error instanceof Object && 'status' in error && 'statusText' in error && 'url' in error;\n\nexport const buildRoute = (options: {\n base: string;\n route: AnyRoute | null | undefined;\n pathParams?: PathParams;\n queryParams?: QueryParams;\n queryParamConfig?: BuildQueryStringConfig;\n}) => {\n if (options.base.endsWith('/')) {\n throw invalidBaseRouteError(options.base);\n }\n\n let route: string | null;\n\n if (typeof options.route === 'function') {\n if (!options.pathParams) {\n throw pathParamsMissingInRouteFunctionError(options.route({}));\n }\n\n route = options.route(options.pathParams);\n } else {\n route = options.route ?? null;\n }\n\n if (route && !route.startsWith('/')) {\n throw invalidRouteError(route);\n }\n\n if (options.queryParams) {\n const queryString = buildQueryString(options.queryParams, options.queryParamConfig);\n\n if (queryString) {\n route = route ? `${route}?${queryString}` : `/?${queryString}`;\n }\n }\n\n return `${options.base}${route ?? ''}`;\n};\n\nexport const buildQueryString = (params: QueryParams, config?: BuildQueryStringConfig): string | null => {\n const objectNotation = config?.objectNotation ?? 'bracket';\n const writeArrayIndexes = config?.writeArrayIndexes ?? false;\n const ignoredValues = config?.ignoredValues ?? [undefined, null, Infinity, -Infinity];\n const ignoredValuesFns = config?.ignoredValuesFns ?? [isNaN, isEmptyString];\n\n const queryParams: string[] = [];\n\n function processValue(key: string, value: unknown) {\n if (config?.objectNotation === 'json-stringify') {\n if (value === undefined) {\n return false;\n }\n\n if (ignoredValues.includes(value)) {\n return false;\n }\n\n if (ignoredValuesFns.some((fn) => fn(value))) {\n return false;\n }\n\n const encodedKey = encodeURIComponent(key);\n\n const val = typeof value === 'object' ? JSON.stringify(value) : value;\n\n const encodedValue = encodeURIComponent(val as string | number | boolean);\n\n queryParams.push(`${encodedKey}=${encodedValue}`);\n\n return true;\n } else if (Array.isArray(value)) {\n let currentFilteredIndex = 0;\n for (const arrayValue of value) {\n const nestedKey = writeArrayIndexes ? `${key}[${currentFilteredIndex}]` : `${key}[]`;\n\n const didAddValue = processValue(nestedKey, arrayValue);\n\n if (didAddValue) {\n currentFilteredIndex++;\n }\n }\n\n return null;\n } else if (typeof value === 'object' && value !== null) {\n for (const [objKey, val] of Object.entries(value)) {\n const nestedKey = objectNotation === 'dot' ? `${key}.${objKey}` : `${key}[${objKey}]`;\n processValue(nestedKey, val);\n }\n\n return null;\n } else {\n if (ignoredValues.includes(value)) {\n return false;\n }\n\n if (ignoredValuesFns.some((fn) => fn(value))) {\n return false;\n }\n\n const encodedKey = encodeURIComponent(key);\n const encodedValue = encodeURIComponent(value as string);\n\n queryParams.push(`${encodedKey}=${encodedValue}`);\n\n return true;\n }\n }\n\n for (const [key, val] of Object.entries(params)) {\n processValue(key, val);\n }\n\n return queryParams.length ? queryParams.join('&') : null;\n};\n\nexport const v2ExtractExpiresInSeconds = (headers: RequestHeaders) => {\n const cacheControl = headers['cache-control'];\n const age = headers['age'];\n const expires = headers['expires'];\n\n // In seconds\n let expiresIn: number | null = null;\n let maxAge: number | null = null;\n\n if (cacheControl?.includes('no-cache')) {\n return null;\n }\n\n if (cacheControl?.includes('max-age')) {\n const m = cacheControl.split('max-age=')[1];\n\n if (m) {\n maxAge = parseInt(m);\n }\n } else if (cacheControl?.includes('s-maxage')) {\n const m = cacheControl.split('s-maxage=')[1];\n\n if (m) {\n maxAge = parseInt(m);\n }\n }\n\n if (maxAge && age) {\n const ageSeconds = parseInt(age);\n\n expiresIn = maxAge - ageSeconds;\n } else if (maxAge) {\n expiresIn = maxAge / 2; // We assume the response is half way to its expiration\n } else if (expires) {\n // Used by some apis to tell the response will never expire\n // In this case we let the response expire after 1 hour\n if (expires === '-1') {\n expiresIn = 3600;\n } else {\n const expiresDate = new Date(expires);\n\n // check if the date is valid\n if (expiresDate.toString() !== 'Invalid Date') {\n expiresIn = Math.floor((expiresDate.getTime() - Date.now()) / 1000);\n }\n }\n }\n\n return expiresIn;\n};\n\nexport const buildTimestampFromSeconds = (seconds: number | null) => {\n if (seconds === null) {\n return null;\n }\n\n return new Date(Date.now() + seconds * 1000).getTime();\n};\n\nexport const serializeBody = (body: unknown): ArrayBuffer | URLSearchParams | Blob | FormData | string | null => {\n if (body === null || body === undefined) {\n return null;\n }\n\n if (\n body instanceof ArrayBuffer ||\n body instanceof Blob ||\n body instanceof FormData ||\n body instanceof URLSearchParams ||\n typeof body === 'string'\n ) {\n return body as ArrayBuffer | URLSearchParams | Blob | FormData | string;\n }\n\n if (typeof body === 'object' || typeof body === 'boolean' || Array.isArray(body)) {\n return JSON.stringify(body);\n }\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n return (body as any).toString();\n};\n\nexport const transformMethod = (config: { method: Method; transferVia?: 'GET' | 'POST' }) => {\n if (config.method === 'GQL_QUERY' || config.method === 'GQL_MUTATE') {\n if (!config.transferVia) {\n return 'POST';\n }\n\n return config.transferVia;\n }\n\n return config.method;\n};\n\nexport const detectContentTypeHeader = (body: unknown) => {\n // An empty body has no content type.\n if (body === null) {\n return null;\n }\n // FormData bodies rely on the browser's content type assignment.\n if (body instanceof FormData) {\n return null;\n }\n // Blobs usually have their own content type. If it doesn't, then\n // no type can be inferred.\n if (body instanceof Blob) {\n return body.type || null;\n }\n // Array buffers have unknown contents and thus no type can be inferred.\n if (body instanceof ArrayBuffer) {\n return null;\n }\n // Technically, strings could be a form of JSON data, but it's safe enough\n // to assume they're plain strings.\n if (typeof body === 'string') {\n return 'text/plain';\n }\n\n // Arrays, objects, boolean and numbers will be encoded as JSON.\n if (typeof body === 'object' || typeof body === 'number' || typeof body === 'boolean') {\n return 'application/json';\n }\n // No type could be inferred.\n return null;\n};\n\nexport const hasHeader = (headers: RequestHeaders, header: string) => {\n return Object.keys(headers).some((key) => key.toLowerCase() === header.toLowerCase());\n};\n\nexport const forEachHeader = (headers: RequestHeaders, callback: (value: string, key: string) => void) => {\n Object.entries(headers).forEach(([key, value]) => {\n callback(key, value);\n });\n};\n\nexport const parseAllXhrResponseHeaders = (xhr: XMLHttpRequest) => {\n const headers = xhr.getAllResponseHeaders();\n const parsedHeaders: RequestHeaders = {};\n\n for (const line of headers.split('\\n')) {\n const index = line.indexOf(':');\n if (index > 0) {\n const name = line.slice(0, index);\n const key = name.toLowerCase();\n const value = line.slice(index + 1).trim();\n\n parsedHeaders[key] = value;\n }\n }\n\n return parsedHeaders;\n};\n\nexport const getResponseUrl = (xhr: XMLHttpRequest): string | null => {\n if ('responseURL' in xhr && xhr.responseURL) {\n return xhr.responseURL;\n }\n if (/^X-Request-URL:/m.test(xhr.getAllResponseHeaders())) {\n return xhr.getResponseHeader('X-Request-URL');\n }\n return null;\n};\n\nexport const v2ShouldRetryRequest: RequestRetryFn = (config) => {\n const defaultRetryDelay = 1000 + 1000 * config.currentRetryCount;\n\n if (config.currentRetryCount > 3) {\n return { retry: false };\n }\n\n if (!isRequestError(config.error)) {\n return { retry: false };\n }\n\n const { status, detail } = config.error;\n\n // Retry on 5xx errors\n if (status >= 500) {\n // Don't retry if a requested page is out of range\n if (isSymfonyPagerfantaOutOfRangeError(detail)) {\n return { retry: false };\n }\n\n return { retry: true, delay: defaultRetryDelay };\n }\n\n // Retry on 408 or 425 errors\n if (status === 408 || status === 425) {\n return { retry: true, delay: defaultRetryDelay };\n }\n\n // Retry on 429 errors\n if (status === 429) {\n const retryAfter =\n config.headers['retry-after'] ||\n config.headers['Retry-After'] ||\n config.headers['x-retry-after'] ||\n config.headers['X-Retry-After'];\n\n if (retryAfter) {\n const delay = parseInt(retryAfter) * 1000;\n return { retry: true, delay: Number.isNaN(delay) ? defaultRetryDelay : delay };\n }\n\n return { retry: true, delay: defaultRetryDelay };\n }\n\n // Code 0 usually means the internet connection is down. We retry in this case.\n // It could also be a CORS issue but that should not be the case in production.\n if ((status as number) === 0) {\n return { retry: true, delay: defaultRetryDelay };\n }\n\n return { retry: false };\n};\n","import { HttpErrorResponse } from '@angular/common/http';\nimport { Observable, Observer } from 'rxjs';\nimport { PartialXhrState, RequestConfig, RequestError, RequestEvent } from './request.types';\nimport {\n buildTimestampFromSeconds,\n detectContentTypeHeader,\n forEachHeader,\n getResponseUrl,\n hasHeader,\n parseAllXhrResponseHeaders,\n serializeBody,\n v2ExtractExpiresInSeconds,\n v2ShouldRetryRequest,\n} from './request.util';\n\nconst XSSI_PREFIX = /^\\)\\]\\}',?\\n/;\n\nexport const request = <Response = unknown>(config: RequestConfig): Observable<RequestEvent<Response>> => {\n const headers = config.headers || {};\n const responseType = config.responseType || 'json';\n const body = config.body || null;\n const url = config.urlWithParams.split('?')[0] || '';\n const retryFn = config.retryFn || v2ShouldRetryRequest;\n let currentRetryCount = 0;\n let retryTimeout: number | null = null;\n\n return new Observable((observer: Observer<RequestEvent<Response>>) => {\n const xhr = new XMLHttpRequest();\n const reqBody = serializeBody(body);\n\n const setupXhr = () => {\n xhr.open(config.method, config.urlWithParams);\n if (config.withCredentials) {\n xhr.withCredentials = true;\n }\n\n forEachHeader(headers, (name, value) => xhr.setRequestHeader(name, value));\n\n if (!hasHeader(headers, 'Accept')) {\n xhr.setRequestHeader('Accept', 'application/json, text/plain, */*');\n }\n\n if (!hasHeader(headers, 'Content-Type')) {\n const detectedType = detectContentTypeHeader(body);\n\n if (detectedType) {\n xhr.setRequestHeader('Content-Type', detectedType);\n }\n }\n\n xhr.responseType = responseType !== 'json' ? responseType : 'text';\n };\n\n setupXhr();\n\n const partialFromXhr = (): PartialXhrState => {\n const statusText = xhr.statusText || 'OK';\n const headers = parseAllXhrResponseHeaders(xhr);\n const _url = getResponseUrl(xhr) || url;\n\n return { headers, status: xhr.status, statusText, url: _url };\n };\n\n const handleRetry = (error: RequestError) => {\n const newRetryCount = currentRetryCount + 1;\n const { headers } = partialFromXhr();\n const { retry, delay } = retryFn({ currentRetryCount: newRetryCount, headers, error });\n\n if (!retry) {\n observer.next({ type: 'failure', headers, error });\n observer.complete();\n return;\n }\n\n const _delay = delay ?? 1000;\n observer.next({ type: 'delay-retry', headers, retryNumber: newRetryCount, retryDelay: _delay });\n\n retryTimeout = window.setTimeout(() => {\n setupXhr();\n xhr.send(reqBody);\n currentRetryCount = newRetryCount;\n observer.next({ type: 'start', headers, isRetry: true, retryNumber: currentRetryCount, retryDelay: _delay });\n }, _delay);\n };\n\n const onLoad = async () => {\n const { headers, statusText, url } = partialFromXhr();\n\n let { status } = partialFromXhr();\n\n let body: unknown | null = null;\n\n if (status !== 204) {\n body = typeof xhr.response === 'undefined' ? xhr.responseText : xhr.response;\n }\n\n if (status === 0) {\n status = body ? 200 : 0;\n }\n\n let ok = status >= 200 && status < 300;\n\n if (responseType === 'json' && typeof body === 'string') {\n const originalBody = body;\n body = body.replace(XSSI_PREFIX, '');\n try {\n body = body !== '' ? JSON.parse(body as string) : null;\n } catch (error) {\n body = originalBody;\n\n if (ok) {\n ok = false;\n body = { error, text: body };\n }\n }\n } else if (!ok && body instanceof Blob) {\n try {\n const text = await body.text();\n\n if (body.type === 'application/json') {\n body = JSON.parse(text);\n } else {\n body = text;\n }\n } catch (error) {\n // Ignore the error.\n }\n }\n\n if (ok) {\n const successEvent: RequestEvent<Response> = {\n type: 'success',\n headers,\n response: body as Response,\n };\n\n const expiresInSeconds = config.cacheAdapter?.(headers) ?? v2ExtractExpiresInSeconds(headers);\n const expiresInTimestamp = buildTimestampFromSeconds(expiresInSeconds);\n\n if (expiresInTimestamp) {\n successEvent.expiresInTimestamp = expiresInTimestamp;\n }\n\n observer.next(successEvent);\n\n observer.complete();\n } else {\n handleRetry({\n url,\n detail: body,\n status,\n statusText,\n httpErrorResponse: new HttpErrorResponse({\n error: body,\n status,\n statusText,\n url,\n }),\n });\n }\n };\n\n const onError = (error: Event) => {\n const { url } = partialFromXhr();\n\n handleRetry({\n url,\n detail: error,\n status: xhr.status || 0,\n statusText: xhr.statusText || 'Unknown Error',\n httpErrorResponse: new HttpErrorResponse({\n error: error,\n status: xhr.status || 0,\n statusText: xhr.statusText || 'Unknown Error',\n url,\n }),\n });\n };\n\n const onDownProgress = (event: ProgressEvent) => {\n const { headers } = partialFromXhr();\n\n const progress: RequestEvent = {\n type: 'download-progress',\n headers,\n progress: {\n current: event.loaded,\n },\n };\n\n if (event.lengthComputable) {\n const progressPercent = (event.loaded / event.total) * 100;\n progress.progress.percentage = Math.round(progressPercent * 100) / 100;\n progress.progress.total = event.total;\n }\n\n if (responseType === 'text' && !!xhr.responseText) {\n progress.partialText = xhr.responseText;\n }\n\n observer.next(progress);\n };\n\n const onUpProgress = (event: ProgressEvent) => {\n const { headers } = partialFromXhr();\n\n const progress: RequestEvent = {\n type: 'upload-progress',\n headers,\n progress: {\n current: event.loaded,\n },\n };\n\n if (event.lengthComputable) {\n const progressPercent = (event.loaded / event.total) * 100;\n progress.progress.percentage = Math.round(progressPercent * 100) / 100;\n progress.progress.total = event.total;\n }\n\n observer.next(progress);\n };\n\n xhr.addEventListener('load', onLoad);\n xhr.addEventListener('error', onError);\n xhr.addEventListener('timeout', onError);\n xhr.addEventListener('abort', onError);\n\n if (config.reportProgress) {\n xhr.addEventListener('progress', onDownProgress);\n\n if (reqBody !== null && xhr.upload) {\n xhr.upload.addEventListener('progress', onUpProgress);\n }\n }\n\n xhr.send(reqBody);\n observer.next({ type: 'start', headers });\n\n return () => {\n xhr.removeEventListener('error', onError);\n xhr.removeEventListener('abort', onError);\n xhr.removeEventListener('load', onLoad);\n xhr.removeEventListener('timeout', onError);\n\n if (retryTimeout) {\n window.clearTimeout(retryTimeout);\n }\n\n if (config.reportProgress) {\n xhr.removeEventListener('progress', onDownProgress);\n\n if (reqBody !== null && xhr.upload) {\n xhr.upload.removeEventListener('progress', onUpProgress);\n }\n }\n\n if (xhr.readyState !== xhr.DONE) {\n xhr.abort();\n }\n\n observer.next({ type: 'cancel', headers });\n };\n });\n};\n","import { HttpHeaders } from '@angular/common/http';\nimport { QueryArgs, RequestArgs } from './query';\nimport { QueryMethod } from './query-creator';\n\nexport const extractExpiresInSeconds = (headers: HttpHeaders) => {\n const cacheControl = headers.get('cache-control');\n const age = headers.get('age');\n const expires = headers.get('expires');\n\n // In seconds\n let expiresIn: number | null = null;\n let maxAge: number | null = null;\n\n if (cacheControl?.includes('no-cache')) {\n return null;\n }\n\n if (cacheControl?.includes('max-age')) {\n const m = cacheControl.split('max-age=')[1];\n\n if (m) {\n maxAge = parseInt(m);\n }\n } else if (cacheControl?.includes('s-maxage')) {\n const m = cacheControl.split('s-maxage=')[1];\n\n if (m) {\n maxAge = parseInt(m);\n }\n }\n\n if (maxAge && age) {\n const ageSeconds = parseInt(age);\n\n expiresIn = maxAge - ageSeconds;\n } else if (maxAge) {\n expiresIn = maxAge / 2; // We assume the response is half way to its expiration\n } else if (expires) {\n // Used by some apis to tell the response will never expire\n // In this case we let the response expire after 1 hour\n if (expires === '-1') {\n expiresIn = 3600;\n } else {\n const expiresDate = new Date(expires);\n\n // check if the date is valid\n if (expiresDate.toString() !== 'Invalid Date') {\n expiresIn = Math.floor((expiresDate.getTime() - Date.now()) / 1000);\n }\n }\n }\n\n return expiresIn;\n};\n\nexport const shouldCacheQuery = (method: QueryMethod) => {\n return method === 'GET' || method === 'OPTIONS' || method === 'HEAD';\n};\n\nexport const buildQueryCacheKey = (route: string, args: RequestArgs<QueryArgs> | undefined) => {\n // We need to hash the body in case it's a gql query and the query get's transported in the body\n const body = JSON.stringify(args?.body || {})\n // replace all curly braces with empty string\n .replace(/{|}/g, '')\n // replace new lines and whitespaces with empty string\n .replace(/\\s/g, '');\n\n const seed = `${route}_${body}`;\n\n let hash = 0;\n\n for (const char of seed) {\n hash = (Math.imul(31, hash) + char.charCodeAt(0)) << 0;\n }\n\n // Force positive number hash.\n // 2147483647 = equivalent of Integer.MAX_VALUE.\n hash += 2147483647 + 1;\n\n return hash.toString();\n};\n","import { HttpErrorResponse } from '@angular/common/http';\nimport { clamp } from '@ethlete/core';\nimport { isSymfonyPagerfantaOutOfRangeError } from './query-error-response-utils';\n\nexport type ShouldRetryRequestOptions = {\n retryCount: number;\n error: HttpErrorResponse;\n};\n\nexport type ShouldRetryRequestResult =\n | {\n retry: false;\n }\n | {\n retry: true;\n delay: number;\n };\n\nexport type ShouldRetryRequestFn = (options: ShouldRetryRequestOptions) => ShouldRetryRequestResult;\n\nexport const shouldRetryRequest = (\n options: ShouldRetryRequestOptions | HttpErrorResponse,\n): ShouldRetryRequestResult => {\n const normalizedOptions =\n options instanceof HttpErrorResponse ? { retryCount: 0, error: options } : (options as ShouldRetryRequestOptions);\n const { retryCount, error } = normalizedOptions;\n const defaultRetryDelay = clamp(1000 + 1000 * retryCount, 1000, 5000);\n const { status, error: detail, headers } = error;\n\n // Code 0 usually means the internet connection is down. We retry in this case.\n // It could also be a CORS issue but that should not be the case in production.\n // We will retry in this case until the connection is back.\n if (status === 0) {\n return { retry: true, delay: defaultRetryDelay };\n }\n\n // Don't retry if we already retried 3 times\n if (retryCount > 3) {\n return { retry: false };\n }\n\n // Don't retry if it's not an http error\n if (!(error instanceof HttpErrorResponse)) {\n return { retry: false };\n }\n\n // Retry on 5xx errors (except 500 internal server error since those are usually not recoverable)\n if (status >= 501) {\n // Don't retry if a requested page is out of range\n if (isSymfonyPagerfantaOutOfRangeError(detail)) {\n return { retry: false };\n }\n\n return { retry: true, delay: defaultRetryDelay };\n }\n\n // Retry on 408 or 425 errors\n if (status === 408 || status === 425) {\n return { retry: true, delay: defaultRetryDelay };\n }\n\n // Retry on 429 errors\n if (status === 429) {\n const retryAfter = headers.get('retry-after') || headers.get('x-retry-after');\n\n if (retryAfter) {\n const delay = parseInt(retryAfter) * 1000;\n return { retry: true, delay: Number.isNaN(delay) ? defaultRetryDelay : delay };\n }\n\n return { retry: true, delay: defaultRetryDelay };\n }\n\n return { retry: false };\n};\n","import { HttpErrorResponse } from '@angular/common/http';\nimport {\n isClassValidatorError,\n isSymfonyFormViolationListError,\n isSymfonyListError,\n} from './query-error-response-utils';\nimport { shouldRetryRequest, ShouldRetryRequestResult } from './query-retry-utils';\n\nexport type QueryErrorResponseList = {\n isList: true;\n errors: QueryErrorResponseItem[];\n};\n\nexport type QueryErrorResponseSingle = {\n isList: false;\n error: QueryErrorResponseItem;\n};\n\nexport type QueryErrorResponse = {\n raw: HttpErrorResponse;\n retryState: ShouldRetryRequestResult;\n code: number;\n} & (QueryErrorResponseList | QueryErrorResponseSingle);\n\nexport type QueryErrorResponseItem = {\n message: string;\n};\n\nexport const createQueryErrorResponse = (error: unknown): QueryErrorResponse => {\n let err = error instanceof HttpErrorResponse ? error : null;\n\n if (!err) {\n err = new HttpErrorResponse({\n error: error,\n status: 0,\n statusText: 'Unknown Error',\n });\n }\n const retryState = shouldRetryRequest(err);\n\n const detail = err.error;\n const errorList: QueryErrorResponseItem[] = [];\n\n if (isClassValidatorError(detail)) {\n for (const error of detail.message) {\n errorList.push({ message: error });\n }\n } else if (isSymfonyFormViolationListError(detail)) {\n for (const violation of detail.violations) {\n errorList.push({ message: violation.message });\n }\n } else if (isSymfonyListError(detail)) {\n for (const error of detail) {\n errorList.push({ message: error.message });\n }\n } else if (typeof detail === 'object' && !!detail && 'message' in detail && typeof detail.message === 'string') {\n errorList.push({ message: detail.message });\n } else if (typeof detail === 'object' && !!detail && 'detail' in detail && typeof detail.detail === 'string') {\n // Symfony error response (during development)\n errorList.push({ message: detail.detail });\n } else if (typeof detail === 'string') {\n errorList.push({ message: detail });\n } else if (Array.isArray(detail) && detail.length > 0 && typeof detail[0] === 'string') {\n for (const error of detail) {\n errorList.push({ message: error });\n }\n }\n\n if (errorList.length > 1) {\n return {\n isList: true,\n errors: errorList,\n raw: err,\n retryState,\n code: err.status,\n };\n } else {\n const singleError = errorList[0] ?? { message: err.message };\n\n return {\n isList: false,\n error: singleError,\n raw: err,\n retryState,\n code: err.status,\n };\n }\n};\n","import { HttpClient, HttpEvent, HttpEventType, HttpProgressEvent } from '@angular/common/http';\nimport { ErrorHandler, Signal, computed, signal } from '@angular/core';\nimport { Subscription, catchError, retry, tap, throwError, timer } from 'rxjs';\nimport { buildTimestampFromSeconds } from '../legacy/request';\nimport { QueryArgs, RequestArgs, ResponseType } from './query';\nimport { extractExpiresInSeconds } from './query-cache-utils';\nimport { CacheAdapterFn } from './query-client';\nimport { CreateQueryCreatorOptions, QueryMethod } from './query-creator';\nimport { QueryErrorResponse, createQueryErrorResponse } from './query-error-response';\nimport { QueryRepositoryDependencies } from './query-repository';\nimport { ShouldRetryRequestFn, ShouldRetryRequestOptions, shouldRetryRequest } from './query-retry-utils';\n\nexport const SPEED_BUFFER_TIME_IN_MS = 2000;\n\nexport type HttpRequestTransferCacheConfig =\n | boolean\n | {\n includeHeaders?: string[];\n };\n\nexport type HttpRequestResponseType = 'json' | 'text' | 'blob' | 'arraybuffer';\n\nexport type CreateHttpRequestDependencies = {\n /** The http client instance to use for the request */\n httpClient: HttpClient;\n\n /** The error handler instance to use for the request */\n ngErrorHandler: ErrorHandler;\n};\n\nexport type CreateHttpRequestOptions<TArgs extends QueryArgs> = {\n /** The HTTP method of the request */\n method: QueryMethod;\n\n /**\n * The full path of the request\n * @example 'https://api.example.com/v1/users'\n */\n fullPath: string;\n\n /** The data of the request */\n args?: RequestArgs<TArgs> | null;\n\n /** The dependencies of the request */\n dependencies: QueryRepositoryDependencies;\n\n /** The client options of the request */\n clientOptions?: CreateQueryCreatorOptions;\n\n /**\n * The cache adapter function to use for the request\n * @default extractExpiresInSeconds()\n */\n cacheAdapter?: CacheAdapterFn;\n\n /**\n * The retry function to use for the request\n * @default shouldRetryRequest()\n */\n retryFn?: ShouldRetryRequestFn;\n};\n\nexport type HttpRequestLoadingState = {\n /** The time when the request was executed in ms */\n executeTime: number;\n\n /** The progress of the request. Null if reportProgress is false or progress is not available / unsupported */\n progress: HttpRequestLoadingProgressState | null;\n};\n\nexport type HttpRequestLoadingProgressState = {\n /** The total number of bytes to be transferred */\n total: number;\n\n /** The number of bytes transferred */\n loaded: number;\n\n /** The percentage of the transfer that is completed */\n percentage: number;\n\n /** The speed of the transfer in bytes per millisecond */\n speed: number | null;\n\n /** The estimated remaining time in milliseconds */\n remainingTime: number | null;\n};\n\nexport type HttpRequest<TArgs extends QueryArgs> = {\n /** Executes the request */\n execute: (options?: { allowCache?: boolean }) => boolean;\n\n /** Destroys the request (cancels it if in progress) */\n destroy: () => boolean;\n\n /** The loading state of the request */\n loading: Signal<HttpRequestLoadingState | null>;\n\n /** The error state of the request */\n error: Signal<QueryErrorResponse | null>;\n\n /** The response state of the request */\n response: Signal<ResponseType<TArgs> | null>;\n\n /** The current event of the request */\n currentEvent: Signal<RequestHttpEvent<TArgs> | null>;\n\n /** Whether the request is stale or not aka the cache header has expired */\n isStale: Signal<boolean>;\n};\n\n/** A custom error event since the Angular http client does not provide a specific event for errors */\nexport type HttpErrorEvent = {\n type: 'error';\n error: QueryErrorResponse;\n};\n\nexport type RequestHttpEvent<TArgs extends QueryArgs> = HttpEvent<ResponseType<TArgs>> | HttpErrorEvent;\n\nexport const createHttpRequest = <TArgs extends QueryArgs>(options: CreateHttpRequestOptions<TArgs>) => {\n let currentStreamSubscription = Subscription.EMPTY;\n\n const { args, clientOptions, dependencies } = options;\n\n const currentEvent = signal<RequestHttpEvent<TArgs> | null>(null);\n const loading = signal<HttpRequestLoadingState | null>(null);\n const error = signal<QueryErrorResponse | null>(null);\n const response = signal<ResponseType<TArgs> | null>(null);\n\n const lastLoadEventTime = signal(0);\n const lastLoadEventAmount = signal(0);\n const lastExecuteTime = signal(0);\n const expiresIn = signal<number | null>(null);\n\n const isStale = computed(() => {\n const expiresInTs = expiresIn();\n\n return expiresInTs === null || expiresInTs < Date.now();\n });\n\n const createStream = () => {\n const headers = typeof args?.headers === 'function' ? args.headers() : args?.headers;\n\n return dependencies.httpClient\n .request(options.method, options.fullPath, {\n observe: 'events',\n body: args?.body,\n reportProgress: clientOptions?.reportProgress,\n withCredentials: clientOptions?.withCredentials,\n transferCache: clientOptions?.transferCache,\n responseType: clientOptions?.responseType || 'json',\n headers,\n })\n .pipe(\n tap((event) => updateState(event)),\n retry({\n delay: (error, retryCount) => {\n const retryOptions: ShouldRetryRequestOptions = { error, retryCount };\n\n const retryResult = options.retryFn?.(retryOptions) || shouldRetryRequest(retryOptions);\n\n if (!retryResult.retry) {\n return throwError(() => error);\n }\n\n return timer(retryResult.delay);\n },\n }),\n catchError((e) => {\n updateErrorState(e);\n\n return throwError(() => e);\n }),\n );\n };\n\n const execute = (options?: { allowCache?: boolean }) => {\n if (loading() || (!isStale() && options?.allowCache)) {\n // Do not execute if there is already a request in progress or caching is allowed\n return false;\n }\n\n currentStreamSubscription.unsubscribe();\n\n lastExecuteTime.set(Date.now());\n lastLoadEventTime.set(lastExecuteTime());\n\n loading.set({\n executeTime: lastExecuteTime(),\n progress: null,\n });\n error.set(null);\n expiresIn.set(null);\n\n const stream = createStream();\n\n currentStreamSubscription = stream.subscribe({\n error: () => {\n // Errors are already handled in updateErrorState via catchError\n // This empty handler prevents \"unhandled error\" warnings in tests\n },\n });\n\n return true;\n };\n\n const destroy = () => {\n if (currentStreamSubscription.closed) {\n return false;\n }\n\n currentStreamSubscription.unsubscribe();\n\n return true;\n };\n\n const updateState = (event: HttpEvent<ResponseType<TArgs>>) => {\n currentEvent.set(event);\n\n switch (event.type) {\n case HttpEventType.Response:\n {\n loading.set(null);\n response.set(event.body);\n\n const expiresInSeconds = options.cacheAdapter\n ? options.cacheAdapter(event.headers)\n : extractExpiresInSeconds(event.headers);\n const expiresInTimestamp = buildTimestampFromSeconds(expiresInSeconds);\n expiresIn.set(expiresInTimestamp);\n }\n break;\n\n case HttpEventType.UploadProgress:\n case HttpEventType.DownloadProgress:\n {\n updateLoadingState(event);\n }\n break;\n\n case HttpEventType.Sent:\n case HttpEventType.ResponseHeader:\n case HttpEventType.User:\n {\n // we don't care about these events\n }\n break;\n }\n };\n\n const updateErrorState = (errorResponse: unknown) => {\n const errorRes = createQueryErrorResponse(errorResponse);\n\n error.set(errorRes);\n loading.set(null);\n currentEvent.set({ type: 'error', error: errorRes });\n\n options.dependencies.ngErrorHandler.handleError(errorRes.raw);\n };\n\n const updateLoadingState = (event: HttpProgressEvent) => {\n if (event.total === undefined) {\n return;\n }\n\n const progress: HttpRequestLoadingProgressState = {\n total: event.total,\n loaded: event.loaded,\n percentage: (event.loaded / event.total) * 100,\n speed: null,\n remainingTime: null,\n };\n\n const state: HttpRequestLoadingState = {\n executeTime: lastExecuteTime(),\n progress,\n };\n\n const currentTime = Date.now();\n const elapsedTimeSinceLastEvent = currentTime - lastLoadEventTime();\n const elapsedTimeSinceLastExecute = currentTime - lastExecuteTime();\n const loadedAmount = event.loaded - lastLoadEventAmount();\n\n // We only want to calculate speed and remaining time after 2 seconds of the execution\n // This is to avoid showing incorrect speed and remaining time when the request is very fast\n if (elapsedTimeSinceLastExecute > SPEED_BUFFER_TIME_IN_MS) {\n const speed = (loadedAmount / elapsedTimeSinceLastEvent) * 1000;\n\n progress.speed = speed * 1000;\n progress.remainingTime = Math.round((event.total - event.loaded) / speed) * 1000;\n }\n\n lastLoadEventTime.set(currentTime);\n lastLoadEventAmount.set(event.loaded);\n\n loading.set(state);\n };\n\n const httpRequest: HttpRequest<TArgs> = {\n execute,\n destroy,\n loading: loading.asReadonly(),\n error: error.asReadonly(),\n response: response.asReadonly(),\n currentEvent: currentEvent.asReadonly(),\n isStale,\n };\n\n return httpRequest;\n};\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { computed, effect, inject, Injector, runInInjectionContext, Signal, signal, untracked } from '@angular/core';\nimport { AnyNewQuery, RequestArgs, ResponseType } from './query';\nimport { AnyQueryCreator, QueryArgsOf, RunQueryCreator } from './query-creator';\nimport { QueryErrorResponse } from './query-error-response';\nimport { queryStackWithArgsUsed, queryStackWithResponseUpdateUsed } from './query-errors';\nimport { QueryFeature, QueryFeatureType, withArgs } from './query-features';\n\nexport type QueryStackSubtle<TCreator extends AnyQueryCreator, TQuery extends AnyNewQuery> = {\n /** Create a new query with the given arguments. You should always prefer the `args` option instead of this. */\n runWithArgs: (\n args: RequestArgs<QueryArgsOf<TCreator>> | RequestArgs<QueryArgsOf<TCreator>>[] | null,\n ) => TQuery | null;\n};\n\nexport type QueryStack<TQuery extends AnyNewQuery, TCreator extends AnyQueryCreator, TTransform> = {\n /** Contains all queries in the stack. */\n queries: Signal<TQuery[]>;\n\n /** Contains the first query in the stack. */\n firstQuery: Signal<TQuery | null>;\n\n /** Contains the last query in the stack. Useful for getting current pagination values. */\n lastQuery: Signal<TQuery | null>;\n\n /** True if any query in the stack is loading. */\n anyLoading: Signal<boolean>;\n\n /** Count of queries currently loading */\n loadingCount: Signal<number>;\n\n /** True if ALL queries are loading */\n allLoading: Signal<boolean>;\n\n /** Progress tracking */\n loadingProgress: Signal<{ loaded: number; total: number }>;\n\n /** Contains the first error that occurred in the stack. */\n anyError: Signal<QueryErrorResponse | null>;\n\n /** All errors from all queries */\n errors: Signal<QueryErrorResponse[]>;\n\n /** Contains the responses of all queries in the stack. Will be `null` for queries that are loading or errored. */\n response: Signal<TTransform>;\n\n /** Executes all queries in the stack. */\n execute: (options?: { allowCache?: boolean }) => void;\n\n /** Destroys all queries in the stack and empties it. This should only be used if `append` is true. */\n clear: () => void;\n\n /** Retry all queries that have errors */\n retryFailed: () => void;\n\n /** Advanced query stack features. **WARNING!** Incorrectly using these features will likely **BREAK** your application. You have been warned! */\n subtle: QueryStackSubtle<TCreator, TQuery>;\n};\n\nexport type AnyQueryStack = QueryStack<AnyNewQuery, AnyQueryCreator, any>;\n\nexport type CreateQueryStackOptions<\n TCreator extends AnyQueryCreator,\n TDeps extends () => any,\n TTransform = (ResponseType<QueryArgsOf<TCreator>> | null)[],\n> = {\n /**\n * The query creator function that will be used to create the query stack.\n */\n queryCreator: TCreator;\n\n /**\n * The dependencies that should trigger a new query stack creation.\n * This function can be treated like a computed function. It reacts to signal changes.\n * The return value of this function will be passed to the `args` function.\n *\n * This option can be ignored if `append` is false.\n */\n dependencies?: TDeps;\n\n /**\n * The features that should be used for all queries in the stack.\n *\n * @throws If the `withArgs` feature is used. This feature is internally used.\n *\n * @example\n * // Due to limitations in TypeScript, you have to manually add the needed generic types if needed.\n * features: [E.withSuccessHandling<GetPostQueryArgs>({ handler: (post) => console.log(post.title) })]\n *\n * @example\n * // If typings are not needed, you can use the feature without generics.\n * features: [E.withPolling({ interval: 5000 })]\n */\n features?: QueryFeature<any>[];\n\n /**\n * The arguments to create queries with.\n * This function can be treated like a computed function. It reacts to signal changes.\n * If a signal changes, a new query will be created (and appended to the existing ones if `append` is true).\n * If this function returns `null`, the args will be ignored.\n * If this function returns an array, multiple queries will be created.\n *\n * @example\n * // One query\n * () => ({ queryParams: { postId: myId() } }),\n *\n * @example\n * // Multiple queries (these can of cause also be created using a loop)\n * () => [\n * { queryParams: { postId: myId() } },\n * { queryParams: { postId: myOtherId() } },\n * ],\n *\n * @example\n * // One query with dependencies\n * (deps) => ({ queryParams: { postId: myId(), limit: deps.limit } }),\n */\n args: (deps: ReturnType<TDeps>) => RequestArgs<QueryArgsOf<TCreator>> | RequestArgs<QueryArgsOf<TCreator>>[] | null;\n\n /**\n * If true, new queries will be appended to the existing ones. Otherwise, existing queries will be destroyed.\n * This should be used for things like infinite scrolling where already fetched queries should not be destroyed.\n */\n append?: boolean;\n\n /**\n * If append is true, this function will be called to merge the old and new queries.\n * Useful if you want to append the new queries in a specific order (e.g. at the beginning).\n */\n appendFn?: (\n oldQueries: RunQueryCreator<TCreator>[],\n newQueries: RunQueryCreator<TCreator>[],\n ) => {\n /** The new queries merged with the old ones. */\n queries: RunQueryCreator<TCreator>[];\n\n /** The last query in the new queries. */\n lastQuery: RunQueryCreator<TCreator> | null;\n };\n\n /**\n * Transforms the responses of all queries in the stack. Useful for merging or filtering responses.\n */\n transform?: (responses: ResponseType<QueryArgsOf<TCreator>>[]) => TTransform;\n\n /**\n * If true, prevents creating queries with identical args.\n * Useful for append mode to avoid duplicate data fetching.\n * @default true\n */\n deduplicateArgs?: boolean;\n\n /**\n * Custom function to generate a unique key from args for deduplication.\n * If not provided, uses JSON.stringify.\n */\n argsKeyFn?: (args: RequestArgs<QueryArgsOf<TCreator>> | null) => string;\n\n /**\n * Maximum number of queries to keep when append is true.\n * When limit is reached, queries will be removed based on removeStrategy.\n * @default Infinity\n */\n maxQueries?: number;\n\n /**\n * Strategy for removing queries when maxQueries is reached.\n * - 'oldest': Remove oldest queries first (FIFO)\n * - 'newest': Remove newest queries first (LIFO)\n * @default 'oldest'\n */\n removeStrategy?: 'oldest' | 'newest';\n};\n\n/** Transforms an array of arrays into a single array and filters out `null` values. */\nexport const transformArrayResponse = <T extends (unknown | null)[]>(responses: T) =>\n responses.filter((r) => !!r).flatMap((r) => r) as NonNullable<T[0]>[];\n\n/** Transforms an array of paginated responses into a single array and filters out `null` values. */\nexport const transformPaginatedResponse = <T extends ({ items: unknown[] } | null)[]>(responses: T) =>\n responses.filter((r) => !!r).flatMap((r) => r.items) as NonNullable<NonNullable<T[0]>['items']>;\n\nexport const createQueryStack = <\n TCreator extends AnyQueryCreator,\n TArgs extends QueryArgsOf<TCreator>,\n TDeps extends () => any,\n TTransform = (ResponseType<TArgs> | null)[],\n>(\n options: CreateQueryStackOptions<TCreator, TDeps, TTransform>,\n) => {\n type QueryType = RunQueryCreator<TCreator>;\n\n const {\n args,\n queryCreator,\n dependencies,\n append,\n features = [],\n appendFn = (oldQueries: QueryType[], newQueries: QueryType[]) => {\n const queries = [...oldQueries, ...newQueries];\n const lastQuery = newQueries[newQueries.length - 1] ?? oldQueries[oldQueries.length - 1] ?? null;\n\n return { queries, lastQuery };\n },\n transform,\n argsKeyFn,\n deduplicateArgs,\n maxQueries = Infinity,\n removeStrategy = 'oldest',\n } = options ?? {};\n\n const injector = inject(Injector);\n\n const queries = signal<QueryType[]>([]);\n const lastQuery = signal<QueryType | null>(null);\n const firstQuery = computed(() => queries()[0] ?? null);\n\n const hasWithArgsFeature = features.some((f) => f.type == QueryFeatureType.WITH_ARGS);\n const hasWithOptimisticUpdateFeature = features.some((f) => f.type == QueryFeatureType.WITH_RESPONSE_UPDATE);\n\n if (hasWithArgsFeature) {\n throw queryStackWithArgsUsed();\n }\n\n if (hasWithOptimisticUpdateFeature) {\n throw queryStackWithResponseUpdateUsed();\n }\n\n const runWithArgs = (args: RequestArgs<QueryArgsOf<TCreator>> | RequestArgs<QueryArgsOf<TCreator>>[] | null) => {\n if (args === null) return null;\n\n return untracked(() => {\n const newArgsArray = Array.isArray(args) ? args : [args];\n\n let filteredArgs = newArgsArray;\n if (deduplicateArgs !== false && append) {\n const keyFn = argsKeyFn ?? ((a) => JSON.stringify(a));\n const existingKeys = new Set(\n queries().map((q) => keyFn(q.args() as RequestArgs<QueryArgsOf<TCreator>> | null)),\n );\n\n filteredArgs = newArgsArray.filter((a) => {\n const key = keyFn(a);\n if (existingKeys.has(key)) return false;\n existingKeys.add(key);\n return true;\n });\n }\n\n const newQueries = runInInjectionContext(injector, () =>\n filteredArgs.map(\n (newArgsEntry) =>\n queryCreator(\n withArgs(() => newArgsEntry),\n ...features,\n ) as QueryType,\n ),\n );\n\n const oldQueries = queries();\n\n if (append) {\n const { queries: appendedQueries, lastQuery: lastAppendedQuery } = appendFn(oldQueries, newQueries);\n\n let finalQueries = appendedQueries;\n if (maxQueries && finalQueries.length > maxQueries) {\n const excessCount = finalQueries.length - maxQueries;\n\n const queriesToRemove =\n removeStrategy === 'newest' ? finalQueries.slice(-excessCount) : finalQueries.slice(0, excessCount);\n\n queriesToRemove.forEach((q) => q.subtle.destroy());\n\n finalQueries =\n removeStrategy === 'newest' ? finalQueries.slice(0, maxQueries) : finalQueries.slice(-maxQueries);\n }\n\n queries.set(finalQueries);\n lastQuery.set(lastAppendedQuery);\n return lastAppendedQuery;\n } else {\n const keyFn = argsKeyFn ?? ((a) => JSON.stringify(a));\n const newArgsKeys = new Set(newArgsArray.map((a) => keyFn(a)));\n\n const preservedQueries = oldQueries.filter((oldQuery) => {\n const oldKey = keyFn(oldQuery.args() as RequestArgs<QueryArgsOf<TCreator>> | null);\n return newArgsKeys.has(oldKey);\n });\n\n const preservedMap = new Map(\n preservedQueries.map((q) => [keyFn(q.args() as RequestArgs<QueryArgsOf<TCreator>> | null), q]),\n );\n\n const finalQueries = newArgsArray.map((newArgsEntry) => {\n const key = keyFn(newArgsEntry);\n const preserved = preservedMap.get(key);\n\n if (preserved) {\n return preserved;\n }\n\n return runInInjectionContext(\n injector,\n () =>\n queryCreator(\n withArgs(() => newArgsEntry),\n ...features,\n ) as QueryType,\n );\n });\n\n for (const oldQuery of oldQueries) {\n if (!finalQueries.includes(oldQuery)) {\n oldQuery.subtle.destroy();\n }\n }\n\n queries.set(finalQueries);\n\n const last = finalQueries[finalQueries.length - 1] ?? null;\n\n lastQuery.set(last);\n\n return last;\n }\n });\n };\n\n const clear = () => {\n for (const query of queries()) {\n query.subtle.destroy();\n }\n\n queries.set([]);\n lastQuery.set(null);\n };\n\n effect(() => {\n dependencies?.();\n\n untracked(() => clear());\n });\n\n effect(() => runWithArgs(args(dependencies?.())));\n\n const anyLoading = computed(() => queries().some((q) => q.loading()));\n\n const loadingCount = computed(() => queries().filter((q) => q.loading()).length);\n\n const allLoading = computed(() => {\n const qs = queries();\n return qs.length > 0 && qs.every((q) => q.loading());\n });\n\n const loadingProgress = computed(() => {\n const total = queries().length;\n const loaded = queries().filter((q) => !q.loading()).length;\n return { loaded, total };\n });\n\n const anyError = computed(\n () =>\n queries()\n .map((q) => q.error())\n .find((e) => e !== null) ?? null,\n );\n\n const errors = computed(() =>\n queries()\n .map((q) => q.error())\n .filter((e): e is QueryErrorResponse => e !== null),\n );\n\n const response = computed(() => {\n const responses = queries().map((q) => q.response());\n return transform?.(responses) ?? responses;\n }) as Signal<TTransform>;\n\n const execute = (options?: { allowCache?: boolean }) => {\n for (const query of queries()) {\n query.execute({ options: { allowCache: options?.allowCache } });\n }\n };\n\n const retryFailed = () => {\n for (const query of queries()) {\n if (query.error()) {\n query.execute({ options: { allowCache: false } });\n }\n }\n };\n\n const stack: QueryStack<QueryType, TCreator, TTransform> = {\n queries: queries.asReadonly(),\n lastQuery: lastQuery.asReadonly(),\n firstQuery,\n anyLoading,\n loadingCount,\n allLoading,\n loadingProgress,\n anyError,\n errors,\n response,\n execute,\n clear,\n retryFailed,\n subtle: {\n runWithArgs,\n },\n };\n\n return stack;\n};\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { computed, effect, isDevMode, Signal, signal, untracked } from '@angular/core';\nimport {\n ContentfulGqlLikePaginated,\n DynLikePaginated,\n GgLikePaginated,\n NormalizedPagination,\n Paginated,\n} from '@ethlete/types';\nimport { AnyNewQuery, Query, QueryArgs, RequestArgs, ResponseType } from './query';\nimport { AnyQueryCreator, QueryArgsOf, QueryCreator } from './query-creator';\nimport { QueryErrorResponse } from './query-error-response';\nimport {\n pagedQueryStackNextPageCalledWithoutPreviousPage,\n pagedQueryStackPageBiggerThanTotalPages,\n pagedQueryStackPreviousPageCalledButAlreadyAtFirstPage,\n queryStackTotalQueriesAndExpectedQueriesMismatch,\n} from './query-errors';\nimport { QueryFeature } from './query-features';\nimport { shouldRetryRequest } from './query-retry-utils';\nimport { createQueryStack, transformArrayResponse } from './query-stack';\n\nexport const ethletePaginationAdapter = <T>(response: Paginated<T>) => {\n const pagination: NormalizedPagination<T> = {\n items: response.items,\n totalPages: response.totalPageCount,\n currentPage: response.currentPage,\n itemsPerPage: response.itemsPerPage,\n totalHits: response.totalHits,\n };\n\n return pagination;\n};\n\nexport const ggLikePaginationAdapter = <T>(response: GgLikePaginated<T>) => {\n const pagination: NormalizedPagination<T> = {\n items: response.items,\n totalPages: response.totalPageCount,\n currentPage: response.currentPage,\n itemsPerPage: response.itemsPerPage,\n totalHits: response.totalHits,\n };\n\n return pagination;\n};\n\nexport const dynLikePaginationAdapter = <T>(response: DynLikePaginated<T>) => {\n const pagination: NormalizedPagination<T> = {\n items: response.items,\n totalPages: response.totalPages,\n currentPage: response.currentPage,\n itemsPerPage: response.limit,\n totalHits: response.totalHits,\n };\n\n return pagination;\n};\n\nexport const contentfulGqlLikePaginationAdapter = <T>(response: ContentfulGqlLikePaginated<T>) => {\n const totalPages = Math.max(Math.ceil(response.total / response.limit), 1); // If there are no items, there is still one page\n const currentPage = Math.max(Math.ceil(response.skip / response.limit) + 1, 1);\n\n const pagination: NormalizedPagination<T> = {\n items: response.items,\n totalPages,\n currentPage,\n itemsPerPage: response.limit,\n totalHits: response.total,\n };\n\n return pagination;\n};\n\nexport const fakePaginationAdapter = (totalHits = 10) => {\n return <T>(response: T) => {\n const pagination: NormalizedPagination<T> = {\n items: [response],\n totalPages: totalHits,\n currentPage: 1,\n itemsPerPage: 1,\n totalHits,\n };\n\n return pagination;\n };\n};\n\nexport type CreatePagedQueryStackOptions<\n TArgs extends QueryArgs,\n TNormPagination extends NormalizedPagination<unknown>,\n> = {\n /**\n * The normalizer function that will be used to normalize the response to a format that the paged query can understand.\n *\n * There are some built-in normalizers that can be used:\n * - `ethletePaginationAdapter`\n * - `ggLikePaginationAdapter`\n * - `dynLikePaginationAdapter`\n * - `contentfulGqlLikePaginationAdapter`\n * - `fakePaginationAdapter` (for testing purposes)\n *\n * @param currentResponse The current response that was fetched.\n * @param allResponses All responses that were fetched till now including the current response and pagination.\n */\n responseNormalizer: (\n currentResponse: ResponseType<TArgs>,\n allResponses: NonNullable<ResponseType<TArgs>>[],\n ) => TNormPagination;\n\n /**\n * The query creator function that will be used to create the paged query.\n */\n queryCreator: QueryCreator<TArgs>;\n\n /**\n * The arguments to create the query.\n * The current page will be passed as an argument.\n * This function can be treated like a computed function. It reacts to signal changes.\n * If a signal changes, the paged query will be reset to the initial page.\n *\n * @example (page) => ({ queryParams: { page, limit:20 } }),\n *\n * @param page The page to fetch next. **Do not modify this argument.**\n * @param allResponses All responses that were fetched till now including pagination.\n */\n args: (page: number, allResponses: NonNullable<ResponseType<TArgs>>[]) => RequestArgs<TArgs> | null;\n\n /**\n * The features that should be used for all queries in the stack.\n *\n * @throws If the `withArgs` feature is used. This feature is internally used.\n *\n * @example\n * // Due to limitations in TypeScript, you have to manually add the needed generic types if needed.\n * features: [E.withSuccessHandling<GetPostQueryArgs>({ handler: (post) => console.log(post.title) })]\n *\n * @example\n * // If typings are not needed, you can use the feature without generics.\n * features: [E.withPolling({ interval: 5000 })]\n */\n features?: QueryFeature<any>[];\n\n /**\n * The page to start this paged query from.\n * @default 1\n */\n initialPage?: number;\n\n /**\n * If true, no queries will be executed while the paged query is loading.\n * This is useful if you need the current response to be used in the next query.\n */\n blockExecutionDuringLoading?: boolean;\n};\n\nexport type PagedQueryStackResetOptions = {\n /**\n * The page to reset this paged query to.\n * This will clear everything and start from this page.\n * @default 1 // or the value passed in the `initialPage` option when creating the paged query.\n */\n initialPage?: number;\n};\n\nexport type PagedQueryStackExecuteOptions<TNormPagination extends NormalizedPagination<unknown>> = {\n /**\n * If provided, only the queries that match the condition will be executed.\n * This will also execute the previous and next query to the one that matched the condition.\n * If not provided, all queries will be executed.\n *\n * @example\n * myPagedQuery.execute({ where: (item) => item.id === 4 });\n */\n where?: (item: TNormPagination['items'][number], index: number, array: TNormPagination['items']) => boolean;\n\n /**\n * If true, the cache will be used (if not expired) and the request will not be made.\n * @default false\n */\n allowCache?: boolean;\n};\n\nexport type PagedQueryStackDirection = 'next' | 'previous';\n\nexport type AnyPagedQueryStack = PagedQueryStack<AnyNewQuery, NormalizedPagination<unknown>>;\n\nexport type PagedQueryStack<TQuery extends AnyNewQuery, TNormPagination extends NormalizedPagination<unknown>> = {\n /**\n * The pagination of the last executed query in the paged query.\n */\n maxPagination: Signal<TNormPagination | null>;\n\n /**\n * The pagination of the first executed query in the paged query.\n */\n minPagination: Signal<TNormPagination | null>;\n\n /**\n * Whether the last page of the paged query is loaded or not.\n */\n isLastPageLoaded: Signal<boolean>;\n\n /**\n * Whether the first page of the paged query is loaded or not.\n */\n isFirstPageLoaded: Signal<boolean>;\n\n /**\n * Fetches the previous page of the paged query.\n *\n * @throws If the paged query is already at the first page.\n */\n fetchPreviousPage: () => TQuery | null;\n\n /**\n * Fetches the next page of the paged query.\n *\n * @throws If the paged query is already at the last page.\n */\n fetchNextPage: () => TQuery | null;\n\n /**\n * Whether the previous page can be fetched or not.\n *\n * This will be false if the paged query is already at the first page or if the paged query is loading.\n */\n canFetchPreviousPage: Signal<boolean>;\n\n /**\n * Whether the next page can be fetched or not.\n *\n * This will be false if the paged query is already at the last page or if the paged query is loading.\n */\n canFetchNextPage: Signal<boolean>;\n\n /**\n * The items of the paged query.\n */\n items: Signal<TNormPagination['items']>;\n\n /**\n * Whether the paged query is loading or not.\n */\n loading: Signal<boolean>;\n\n /**\n * The error that occurred during the last execution of the paged query.\n */\n error: Signal<QueryErrorResponse | null>;\n\n /**\n * The last query executed in the paged query.\n */\n lastQuery: Signal<Query<QueryArgsOf<TQuery>> | null>;\n\n /**\n * Whether the paged query is on its first load or not.\n */\n isFirstLoad: Signal<boolean>;\n\n /**\n * The queries in the paged query stack.\n */\n queries: Signal<TQuery[]>;\n\n /**\n * Resets the paged query to the initial page.\n */\n reset: (resetOptions?: PagedQueryStackResetOptions) => void;\n\n /**\n * Executes the paged query.\n */\n execute: (options?: PagedQueryStackExecuteOptions<TNormPagination>) => void;\n\n /**\n * The current direction of the paged query.\n */\n direction: Signal<PagedQueryStackDirection>;\n};\n\nexport const createPagedQueryStack = <\n TCreator extends AnyQueryCreator,\n TArgs extends QueryArgsOf<TCreator>,\n TNormPagination extends NormalizedPagination<unknown>,\n>(\n options: CreatePagedQueryStackOptions<TArgs, TNormPagination>,\n) => {\n const { responseNormalizer, queryCreator, features } = options;\n\n const currentPageArgs = signal<RequestArgs<TArgs> | null>(null);\n const initialPage = signal(options.initialPage ?? 1);\n const loadedMinPage = signal(initialPage());\n const loadedMaxPage = signal(initialPage());\n const lastResetTimestamp = signal(Date.now());\n\n const pageDirection = signal<PagedQueryStackDirection>('next');\n\n const stack = createQueryStack({\n args: () => null,\n queryCreator,\n append: true,\n features,\n appendFn: (oldQueries, newQueries) => {\n const newQuery = newQueries[0];\n const dir = pageDirection();\n\n if (!newQuery) {\n const lastQuery = oldQueries[oldQueries.length - 1] ?? null;\n return { queries: oldQueries, lastQuery };\n } else if (dir === 'previous') {\n return { queries: [newQuery, ...oldQueries], lastQuery: newQuery };\n } else {\n return { queries: [...oldQueries, newQuery], lastQuery: newQuery };\n }\n },\n transform: transformArrayResponse,\n });\n\n effect(() => {\n lastResetTimestamp();\n\n const args = options.args(initialPage(), []);\n\n untracked(() => {\n stack.clear();\n currentPageArgs.set(args);\n loadedMinPage.set(initialPage());\n loadedMaxPage.set(initialPage());\n stack.subtle.runWithArgs(args);\n });\n });\n\n const maxPagination = computed(() => {\n const res = stack.lastQuery()?.response();\n const all = stack.response();\n\n if (!res) return null;\n\n return responseNormalizer(res, all);\n });\n\n const minPagination = computed(() => {\n const res = stack.firstQuery()?.response();\n const all = stack.response();\n\n if (!res) return null;\n\n return responseNormalizer(res, all);\n });\n\n const isFirstPageLoaded = computed(() => {\n const min = minPagination();\n\n return min ? loadedMinPage() === min.currentPage : false;\n });\n\n const isLastPageLoaded = computed(() => {\n const max = maxPagination();\n\n return max ? loadedMaxPage() === max.totalPages : false;\n });\n\n const fetchPreviousPage = () => {\n const page = loadedMinPage() - 1;\n const allResponses = stack.response();\n\n if (!canFetchNewPage(page)) {\n return null;\n }\n\n if (page < 1) {\n if (isDevMode()) {\n throw pagedQueryStackPreviousPageCalledButAlreadyAtFirstPage();\n }\n\n return null;\n }\n\n currentPageArgs.set(options.args(page, allResponses));\n loadedMinPage.set(page);\n pageDirection.set('previous');\n\n return stack.subtle.runWithArgs(currentPageArgs());\n };\n\n const fetchNextPage = () => {\n const page = loadedMaxPage() + 1;\n const currentPagination = maxPagination();\n const allResponses = stack.response();\n\n if (!canFetchNewPage(page)) {\n return null;\n }\n\n if (!currentPagination) {\n if (isDevMode()) {\n throw pagedQueryStackNextPageCalledWithoutPreviousPage();\n }\n\n return null;\n }\n\n if (page > currentPagination.totalPages) {\n if (isDevMode()) {\n throw pagedQueryStackPageBiggerThanTotalPages(page, currentPagination.totalPages);\n }\n\n return null;\n }\n\n currentPageArgs.set(options.args(page, allResponses));\n loadedMaxPage.set(page);\n pageDirection.set('next');\n\n return stack.subtle.runWithArgs(currentPageArgs());\n };\n\n const canFetchNewPage = (pageToLoad: number) => {\n const currentMaxPagination = maxPagination();\n const currentMinPagination = minPagination();\n\n if (!currentMaxPagination || !currentMinPagination) {\n return true;\n }\n\n const isOneMinusMinPagination = pageToLoad === currentMinPagination.currentPage - 1;\n const isOnePlusMaxPagination = pageToLoad === currentMaxPagination.currentPage + 1;\n\n if (!options.blockExecutionDuringLoading) {\n const totalQueries = stack.queries().length;\n const expectedQueries = Math.abs(loadedMaxPage() - loadedMinPage()) + 1;\n\n if (totalQueries !== expectedQueries) {\n if (isDevMode()) {\n throw queryStackTotalQueriesAndExpectedQueriesMismatch(totalQueries, expectedQueries);\n }\n }\n\n return true;\n }\n\n if (stack.anyLoading()) {\n return false;\n }\n\n return isOneMinusMinPagination || isOnePlusMaxPagination;\n };\n\n const reset = (resetOptions?: PagedQueryStackResetOptions) => {\n const page = resetOptions?.initialPage ?? initialPage();\n\n initialPage.set(page);\n pageDirection.set('next');\n lastResetTimestamp.set(Date.now());\n };\n\n const canFetchPreviousPage = computed(() => {\n const currentMinPagination = minPagination();\n\n if (!currentMinPagination) return false;\n\n return loadedMinPage() > 1;\n });\n const canFetchNextPage = computed(() => {\n const currentMaxPagination = maxPagination();\n\n return currentMaxPagination ? loadedMaxPage() < currentMaxPagination.totalPages : false;\n });\n\n const items = computed(() => {\n const res = stack.response();\n return res.map((r) => responseNormalizer(r, res).items).flat();\n });\n\n const isFirstLoad = computed(() => {\n return stack.queries().length === 1 && !!stack.lastQuery()?.loading();\n });\n\n const execute = (options?: PagedQueryStackExecuteOptions<TArgs>) => {\n const whereFn = options?.where;\n\n if (whereFn) {\n const queriesToExecute = new Set<Query<TArgs>>();\n const all = stack.response();\n\n for (const [index, query] of stack.queries().entries()) {\n const res = query.response();\n const err = query.error();\n const isErroredAndCanBeRetried = err && shouldRetryRequest(err.raw);\n\n if (isErroredAndCanBeRetried) {\n queriesToExecute.add(query);\n } else if (res) {\n if (responseNormalizer(res, all).items.some((item, i, a) => whereFn(item, i, a))) {\n queriesToExecute.add(query);\n\n // Also execute the previous and next query to the one that matched the condition.\n\n if (index !== 0) {\n const prevQuery = stack.queries()[index - 1];\n\n if (prevQuery) {\n queriesToExecute.add(prevQuery);\n }\n }\n\n if (index !== stack.queries().length - 1) {\n const nextQuery = stack.queries()[index + 1];\n\n if (nextQuery) {\n queriesToExecute.add(nextQuery);\n }\n }\n }\n }\n }\n\n for (const query of queriesToExecute) {\n query.execute({ options: { allowCache: options.allowCache } });\n }\n } else {\n stack.execute({ allowCache: options?.allowCache });\n }\n };\n\n const pagedQuery: PagedQueryStack<Query<TArgs>, TNormPagination> = {\n maxPagination,\n minPagination,\n fetchPreviousPage,\n fetchNextPage,\n canFetchPreviousPage,\n canFetchNextPage,\n items,\n direction: pageDirection.asReadonly(),\n loading: stack.anyLoading,\n error: stack.anyError,\n lastQuery: stack.lastQuery,\n isFirstLoad,\n queries: stack.queries,\n isLastPageLoaded,\n isFirstPageLoaded,\n reset,\n execute,\n };\n\n return pagedQuery;\n};\n","import { AuthProvider, AuthProviderCustomHeaderConfig } from './auth-provider.types';\n\nexport class CustomHeaderAuthProvider implements AuthProvider {\n get header() {\n return { [this._config.name]: this._config.value };\n }\n\n constructor(public _config: AuthProviderCustomHeaderConfig) {}\n\n cleanUp(): void {\n // noop\n }\n}\n","import { AuthProvider, AuthProviderBasicConfig } from './auth-provider.types';\n\nexport class BasicAuthProvider implements AuthProvider {\n get header() {\n return { Authorization: `Basic ${this._basicAuthString}` };\n }\n\n private get _basicAuthString() {\n return btoa(`${this._config.username}:${this._config.password}`);\n }\n\n constructor(public _config: AuthProviderBasicConfig) {}\n\n cleanUp(): void {\n // noop\n }\n}\n","import {\n CreateComputedOptions,\n Injector,\n Signal,\n assertInInjectionContext,\n computed,\n effect,\n inject,\n linkedSignal,\n runInInjectionContext,\n signal,\n untracked,\n} from '@angular/core';\nimport { ToObservableOptions, ToSignalOptions, toObservable, toSignal } from '@angular/core/rxjs-interop';\nimport { computedTillTruthy, createDestroy } from '@ethlete/core';\nimport { Observable, Subscribable, of, pairwise, startWith, switchMap, takeUntil, tap } from 'rxjs';\nimport { AnyLegacyQuery } from '../interop';\nimport {\n AnyQueryCollection,\n AnyV2Query,\n QueryOf,\n QueryStateType,\n V2QueryState,\n extractQuery,\n filterQueryStates,\n isQuery,\n isQueryStateFailure,\n isQueryStateLoading,\n isQueryStateSuccess,\n} from '../query';\nimport { QueryDataOf } from '../query-creator';\n\nexport type QueryContainerConfig = {\n /**\n * If `true`, the previous query will be aborted when a new query is pushed into the container.\n * @default true // Only if the request can be cached (GET, OPTIONS, HEAD and GQL_QUERY). Otherwise false.\n */\n abortPrevious?: boolean;\n\n /**\n * If `true`, the query will be aborted when the container is destroyed.\n * @default true // Only if the request can be cached (GET, OPTIONS, HEAD and GQL_QUERY). Otherwise false.\n */\n abortOnDestroy?: boolean;\n\n /**\n * If `true`, the previous polling will be stopped when a new query is pushed into the container.\n * @default true // Only if the query has no other dependents and the request can be cached (GET, OPTIONS, HEAD and GQL_QUERY). Otherwise false.\n */\n stopPreviousPolling?: boolean;\n};\n\nexport type QueryFilterConfig = {\n /**\n * If `true`, the response will be cached until the next response is received or the query fails.\n * @default false\n */\n cacheResponse?: boolean;\n};\n\nexport const addQueryContainerHandling = (\n obs: Observable<AnyV2Query | AnyV2Query[] | AnyLegacyQuery | AnyLegacyQuery[] | null>,\n valueFn: () => AnyV2Query | AnyV2Query[] | AnyLegacyQuery | AnyLegacyQuery[] | null | undefined,\n config?: QueryContainerConfig,\n) => {\n assertInInjectionContext(addQueryContainerHandling);\n\n const { abortPrevious, abortOnDestroy, stopPreviousPolling } = config ?? {};\n\n const injector = inject(Injector);\n const destroy$ = createDestroy();\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const tNode = (injector as any)._tNode;\n const componentId = tNode?.index ?? -1;\n\n obs\n .pipe(\n takeUntil(destroy$),\n startWith(null),\n pairwise(),\n tap(([prevQuery, currQuery]) => {\n const cleanQuery = (q: AnyV2Query | AnyLegacyQuery | null | undefined) => {\n if (!q?._hasDependents() && ((abortPrevious === undefined && q?.canBeCached) || abortPrevious)) {\n q?.abort();\n }\n\n if (\n !q?._hasDependents() &&\n ((stopPreviousPolling === undefined && q?.canBeCached) || stopPreviousPolling) &&\n q?.isPolling\n ) {\n q?.stopPolling();\n }\n\n (q as unknown as AnyLegacyQuery)?.destroy?.();\n };\n\n if ((isQuery(prevQuery) || prevQuery === null) && (isQuery(currQuery) || currQuery === null)) {\n prevQuery?._removeDependent(componentId);\n currQuery?._addDependent(componentId);\n\n cleanQuery(prevQuery);\n } else if (\n (Array.isArray(prevQuery) || prevQuery === null) &&\n (Array.isArray(currQuery) || currQuery === null)\n ) {\n if (prevQuery) {\n for (let i = 0; i < prevQuery.length; i++) {\n prevQuery[i]?._removeDependent(componentId);\n }\n }\n\n if (currQuery) {\n for (let i = 0; i < currQuery.length; i++) {\n currQuery[i]?._addDependent(componentId);\n }\n }\n\n if (prevQuery) {\n for (let i = 0; i < prevQuery.length; i++) {\n cleanQuery(prevQuery[i]);\n }\n }\n } else if (\n (isQuery(prevQuery) && Array.isArray(currQuery)) ||\n (Array.isArray(prevQuery) && isQuery(currQuery))\n ) {\n throw new Error('Cannot mix queries and arrays of queries in the same query container.');\n }\n }),\n )\n .subscribe();\n\n destroy$.subscribe(() => {\n const query = valueFn();\n\n const handleQuery = (q: AnyV2Query | AnyLegacyQuery | null | undefined) => {\n q?._removeDependent(componentId);\n\n if (!q?._hasDependents() && ((q?.canBeCached && abortOnDestroy === undefined) || abortOnDestroy)) {\n q?.abort();\n (q as unknown as AnyLegacyQuery)?.destroy?.();\n }\n };\n\n if (isQuery(query)) {\n handleQuery(query);\n } else if (Array.isArray(query)) {\n for (const q of query) {\n handleQuery(q);\n }\n }\n });\n};\n\nexport function toQuerySignal<T extends AnyV2Query | AnyLegacyQuery | null>(\n source: Observable<T> | Subscribable<T>,\n): Signal<T | undefined>;\nexport function toQuerySignal<T extends AnyV2Query | AnyLegacyQuery | null>(\n source: Observable<T> | Subscribable<T>,\n options: NoInfer<ToSignalOptions<T | undefined>> & {\n initialValue?: undefined;\n requireSync?: false;\n } & QueryContainerConfig,\n): Signal<T | undefined>;\nexport function toQuerySignal<T extends AnyV2Query | AnyLegacyQuery | null>(\n source: Observable<T> | Subscribable<T>,\n options: NoInfer<ToSignalOptions<T | null>> & {\n initialValue?: null;\n requireSync?: false;\n } & QueryContainerConfig,\n): Signal<T | null>;\nexport function toQuerySignal<T extends AnyV2Query | AnyLegacyQuery | null>(\n source: Observable<T> | Subscribable<T>,\n options: NoInfer<ToSignalOptions<T>> & {\n initialValue?: undefined;\n requireSync: true;\n } & QueryContainerConfig,\n): Signal<T>;\nexport function toQuerySignal<T extends AnyV2Query | AnyLegacyQuery | null, const U extends T>(\n source: Observable<T> | Subscribable<T>,\n options: NoInfer<ToSignalOptions<T | U>> & {\n initialValue: U;\n requireSync?: false;\n } & QueryContainerConfig,\n): Signal<T | U>;\n\nexport function toQuerySignal<T extends AnyV2Query | AnyLegacyQuery | null, U = undefined>(\n source: Observable<T> | Subscribable<T>,\n options?: ToSignalOptions<T | U> & { initialValue?: U } & QueryContainerConfig,\n): Signal<T | U> {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const s = toSignal(source, options as any);\n\n addQueryContainerHandling(source as Observable<T>, () => s() as T, options);\n\n return s as Signal<T | U>;\n}\n\nexport function effectComputed<T extends AnyV2Query | AnyLegacyQuery | AnyV2Query[] | AnyLegacyQuery[] | null>(\n computation: () => T,\n injector: Injector,\n) {\n let initialData = null;\n\n try {\n initialData = runInInjectionContext(injector, () => computation());\n } catch {\n // Ignore errors in the initial computation\n // Angular might throw an error if required inputs are read but not available yet\n }\n\n const lastResult = signal<T>(initialData as T);\n\n effect(() => {\n const data = runInInjectionContext(injector, () => computation());\n\n untracked(() => {\n if (data === lastResult()) return;\n\n lastResult.set(data);\n });\n });\n\n return lastResult.asReadonly();\n}\n\nexport function queryComputed<T extends AnyV2Query | AnyLegacyQuery | null>(\n computation: () => T,\n options?: CreateComputedOptions<T> & QueryContainerConfig & ToObservableOptions,\n): Signal<T> {\n const injector = inject(Injector);\n\n const c = effectComputed(computation, injector);\n const obs = toObservable(c, options);\n\n addQueryContainerHandling(obs, () => c(), options);\n\n return c;\n}\n\n/**\n * Creates a signal that will only be reactive until the first query is created.\n * All subsequent changes inside the computation will be ignored.\n */\nexport function queryComputedTillTruthy<T extends AnyV2Query | AnyLegacyQuery | null>(\n computation: () => T,\n options?: CreateComputedOptions<T> & QueryContainerConfig & ToObservableOptions,\n): Signal<T | null> {\n const injector = inject(Injector);\n\n const c = computedTillTruthy(effectComputed(computation, injector));\n const obs = toObservable(c, options);\n\n addQueryContainerHandling(obs, () => c(), options);\n\n return c;\n}\n\nexport function queryArrayComputed<T extends AnyV2Query[] | AnyLegacyQuery[] | null>(\n computation: () => T,\n options?: CreateComputedOptions<T> & QueryContainerConfig & ToObservableOptions,\n): Signal<T> {\n const injector = inject(Injector);\n\n const c = effectComputed(computation, injector);\n const obs = toObservable(c, options);\n\n addQueryContainerHandling(obs, () => c(), options);\n\n return c;\n}\n\nexport function toQuerySubject<T extends AnyV2Query | AnyLegacyQuery | null>(\n source: Signal<T>,\n options?: ToObservableOptions & QueryContainerConfig,\n): Observable<T> {\n const obs = toObservable(source, options);\n\n addQueryContainerHandling(obs, () => source(), options);\n\n return obs;\n}\n\nexport function queryStateSignal<T extends Signal<AnyV2Query | AnyLegacyQuery | AnyQueryCollection | null>>(\n source: T,\n options?: QueryFilterConfig,\n) {\n const { cacheResponse } = options ?? {};\n\n const roSignal = toSignal(\n toObservable(source).pipe(\n switchMap((q) => extractQuery(q)?.state$ ?? of(null)),\n switchMap((state) => {\n if (cacheResponse) {\n return of(state).pipe(filterQueryStates([QueryStateType.Success, QueryStateType.Failure]));\n }\n\n return of(state);\n }),\n ),\n {\n initialValue: null,\n },\n ) as Signal<V2QueryState<QueryDataOf<QueryOf<ReturnType<T>>>> | null>;\n\n const rwSignal = linkedSignal<V2QueryState<QueryDataOf<QueryOf<ReturnType<T>>>> | null>(roSignal);\n\n return rwSignal;\n}\n\nexport type QueryStateSignal<T extends Signal<AnyV2Query | AnyLegacyQuery | AnyQueryCollection | null>> =\n Signal<QueryDataOf<QueryOf<ReturnType<T>>> | null> & { reset: () => void };\n\nexport function queryStateResponseSignal<T extends Signal<AnyV2Query | AnyLegacyQuery | AnyQueryCollection | null>>(\n source: T,\n options?: QueryFilterConfig,\n) {\n const s = queryStateSignal(source, options);\n\n const dataSignal = computed(() => {\n const state = s();\n\n return isQueryStateSuccess(state) ? state.response : null;\n });\n\n (dataSignal as QueryStateSignal<T>)['reset'] = () => {\n s.set(null);\n };\n\n return dataSignal as QueryStateSignal<T>;\n}\n\nexport function queryStateErrorSignal<T extends Signal<AnyV2Query | AnyLegacyQuery | AnyQueryCollection | null>>(\n source: T,\n) {\n const s = queryStateSignal(source);\n\n return computed(() => {\n const state = s();\n\n return isQueryStateFailure(state) ? state.error : null;\n });\n}\n\nexport function queryStateLoadingSignal<T extends Signal<AnyV2Query | AnyLegacyQuery | AnyQueryCollection | null>>(\n source: T,\n) {\n const s = queryStateSignal(source);\n\n return computed(() => {\n const state = s();\n\n return isQueryStateLoading(state) ? state : null;\n });\n}\n","export const deepFreeze = <T extends Record<string, unknown>>(object: T) => {\n // check if object is actually an object or frozen\n if (!object || typeof object !== 'object' || Object.isFrozen(object)) {\n return object;\n }\n\n // Retrieve the property names defined on object\n const propNames = Object.getOwnPropertyNames(object);\n\n // Freeze properties before freezing self\n\n for (const name of propNames) {\n const value = object[name];\n\n if (value && typeof value === 'object') {\n deepFreeze(value as T);\n }\n }\n\n return Object.freeze(object);\n};\n","/**\n * Dummy function for providing types while not breaking inference.\n * **This function always returns null.**\n * @see https://github.com/microsoft/TypeScript/issues/26242\n * @returns null\n */\nexport const def = <Data>() => null as unknown as Data;\n","import { assertInInjectionContext, signal } from '@angular/core';\nimport { toObservable } from '@angular/core/rxjs-interop';\nimport { BehaviorSubject } from 'rxjs';\nimport { EntityStore } from '../entity';\nimport { V2Query, computeQueryQueryParams } from '../query';\nimport { V2QueryClient, v2BuildQueryCacheKey, v2ShouldCacheQuery } from '../query-client';\nimport { QueryStore } from '../query-store';\nimport {\n AnyRoute,\n BaseArguments,\n GqlQueryConfig,\n RestQueryConfig,\n V2RouteType,\n WithConfig,\n WithHeaders,\n WithMock,\n} from '../query/query.types';\nimport { buildRoute } from '../request';\nimport { QueryContainerConfig, addQueryContainerHandling } from '../utils';\nimport { QueryPrepareFn } from './query-creator.types';\n\nexport class V2QueryCreator<\n Arguments extends BaseArguments | undefined,\n Response,\n Route extends V2RouteType<Arguments>,\n Store extends EntityStore<unknown>,\n Data,\n Id,\n> {\n constructor(\n private _queryConfig:\n | RestQueryConfig<Route, Response, Arguments, Store, Data, Id>\n | GqlQueryConfig<Route, Response, Arguments, Store, Data, Id>,\n private _client: V2QueryClient,\n private _store: QueryStore,\n ) {}\n\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n prepare: QueryPrepareFn<Arguments, Response, Route, Store, Data, Id> = (\n args?: Arguments & WithHeaders & WithConfig & WithMock<Response>,\n ) => {\n const route = buildRoute({\n base: this._client.config.baseRoute,\n route: this._queryConfig.route as AnyRoute,\n pathParams: args?.pathParams,\n queryParams: computeQueryQueryParams({ config: this._queryConfig, client: this._client, args }),\n queryParamConfig: this._client.config.request?.queryParams,\n }) as Route;\n\n const cacheKey = (args?.config?.queryStoreCacheKey ?? '') + v2BuildQueryCacheKey(route as string, args);\n\n if (v2ShouldCacheQuery(this._queryConfig.method) && !args?.config?.skipQueryStore) {\n const existingQuery = this._store.get<V2Query<Response, Arguments, Route, Store, Data, Id>>(cacheKey);\n\n if (existingQuery) {\n return existingQuery;\n }\n }\n\n const query = new V2Query<Response, Arguments, Route, Store, Data, Id>(\n this._client,\n this._queryConfig,\n route,\n args ?? ({} as Arguments),\n cacheKey,\n );\n\n if (v2ShouldCacheQuery(this._queryConfig.method) && !args?.config?.skipQueryStore) {\n this._store.add(cacheKey, query);\n }\n\n this._store._dispatchQueryCreated(query);\n\n return query;\n };\n\n createSubject = (initialValue?: ReturnType<typeof this.prepare> | null, config?: QueryContainerConfig) => {\n assertInInjectionContext(this.createSubject);\n\n const subject = new BehaviorSubject<ReturnType<typeof this.prepare> | null>(initialValue ?? null);\n\n addQueryContainerHandling(subject, () => subject.getValue(), config);\n\n return subject;\n };\n\n createSignal = (initialValue?: ReturnType<typeof this.prepare> | null, config?: QueryContainerConfig) => {\n assertInInjectionContext(this.createSignal);\n\n const _signal = signal<ReturnType<typeof this.prepare> | null>(initialValue ?? null);\n\n addQueryContainerHandling(toObservable(_signal), () => _signal(), config);\n\n return _signal;\n };\n\n behaviorSubject = (initialValue?: ReturnType<typeof this.prepare> | null) =>\n new BehaviorSubject<ReturnType<typeof this.prepare> | null>(initialValue ?? null);\n}\n","import { Subject, fromEvent, take, takeUntil, timer } from 'rxjs';\nimport { AnyV2Query } from '../query';\n\nexport class QueryStore {\n /**\n * @internal\n */\n readonly _store = new Map<string, AnyV2Query>();\n\n private _garbageCollector: number | null = null;\n private _isInLowResourceMode = false;\n private _lastBlurTimestamp = Date.now();\n\n private _storeChange$ = new Subject<string>();\n private _queryCreated$ = new Subject<AnyV2Query>();\n\n readonly storeChange$ = this._storeChange$.asObservable();\n readonly queryCreated$ = this._queryCreated$.asObservable();\n\n constructor(\n private _config?: {\n enableChangeLogging?: boolean;\n enableGarbageCollectorLogging?: boolean;\n autoRefreshQueriesOnWindowFocus?: boolean;\n enableSmartPolling?: boolean;\n },\n ) {\n this._initSmartQueryHandling();\n }\n\n add(id: string, query: AnyV2Query) {\n this._store.set(id, query);\n\n this._initGarbageCollector();\n\n this._logState(id, query, 'SET');\n\n this._storeChange$.next(id);\n }\n\n get<T extends AnyV2Query>(id: string): T | null {\n return (this._store.get(id) as T) ?? null;\n }\n\n remove(id: string) {\n this._store.delete(id);\n\n this._logState(id, null, 'REMOVE');\n\n this._storeChange$.next(id);\n }\n\n forEach(callback: (value: AnyV2Query, key: string) => void) {\n for (const [key, query] of this._store) {\n callback(query, key);\n }\n }\n\n refreshQueriesInUse(config?: { ignoreCacheValidity?: boolean; purgeUnused?: boolean }) {\n const { ignoreCacheValidity, purgeUnused } = config ?? {};\n\n for (const [key, query] of this._store) {\n if (\n query.isInUse &&\n (query.isExpired || ignoreCacheValidity) &&\n query.autoRefreshOnConfig.queryClientDefaultHeadersChange\n ) {\n query.execute({ skipCache: true, _triggeredVia: 'auto' });\n } else if (purgeUnused && !query.isInUse) {\n this.remove(key);\n }\n }\n }\n\n /**\n * @internal\n */\n _dispatchQueryCreated(query: AnyV2Query) {\n this._queryCreated$.next(query);\n }\n\n private _initSmartQueryHandling() {\n const windowBlur$ = fromEvent<Event>(window, 'blur');\n const windowFocus$ = fromEvent<Event>(window, 'focus');\n\n windowBlur$.subscribe(() => {\n timer(5000)\n .pipe(takeUntil(windowFocus$), take(1))\n .subscribe(() => {\n this._lastBlurTimestamp = Date.now();\n this._isInLowResourceMode = true;\n this._stopGarbageCollector();\n\n if (this._config?.enableSmartPolling) {\n this.forEach((query) => {\n if (!query.isPolling || !query._enableSmartPolling) {\n return;\n }\n\n query.pausePolling();\n });\n }\n });\n });\n\n windowFocus$.subscribe(() => {\n if (!this._isInLowResourceMode) {\n return;\n }\n\n this._isInLowResourceMode = false;\n\n if (this._config?.enableSmartPolling || this._config?.autoRefreshQueriesOnWindowFocus) {\n this.forEach((query) => {\n if (this._config?.enableSmartPolling && query._isPollingPaused) {\n query.resumePolling();\n }\n\n if (Date.now() - this._lastBlurTimestamp > 15000) {\n if (\n this._config?.autoRefreshQueriesOnWindowFocus &&\n query.isExpired &&\n query.isInUse &&\n query.autoRefreshOnConfig.windowFocus\n ) {\n query.execute({ skipCache: true, _triggeredVia: 'auto' });\n }\n }\n });\n }\n\n this._initGarbageCollector();\n });\n }\n\n private _logState(key: string | null, item: AnyV2Query | null, operation: string) {\n if (!this._config?.enableChangeLogging) return;\n\n const stateAsJson: Record<string, AnyV2Query> = {};\n\n this._store.forEach((value, key) => {\n stateAsJson[key] = value;\n });\n\n console.log(`%c[${operation}] ${key}`, 'font-weight: bold');\n\n console.log({ operation, key, item });\n console.log(stateAsJson);\n }\n\n private _initGarbageCollector() {\n if (this._garbageCollector !== null) {\n return;\n }\n\n this._logGarbageCollector('Start');\n\n this._garbageCollector = window.setInterval(() => {\n this._runGarbageCollector();\n }, 15000);\n }\n\n private _stopGarbageCollector() {\n if (this._garbageCollector !== null) {\n window.clearInterval(this._garbageCollector);\n this._garbageCollector = null;\n this._logGarbageCollector('Stop');\n }\n }\n\n private _runGarbageCollector() {\n this._logGarbageCollector('Collecting...');\n\n this._store.forEach((item, key) => {\n if (item.isExpired && !item.isInUse) {\n this.remove(key);\n }\n });\n\n this._logGarbageCollector('Collection done');\n\n if (!this._store.size) {\n this._stopGarbageCollector();\n }\n }\n\n private _logGarbageCollector(action: string) {\n if (!this._config?.enableGarbageCollectorLogging) return;\n\n console.log(`%cGC: ${action}`, 'color: yellow; font-weight: bold');\n }\n}\n","import { BehaviorSubject } from 'rxjs';\nimport { AuthProvider } from '../auth';\nimport { EntityStore } from '../entity';\nimport {\n BaseArguments,\n GqlQueryConfig,\n GqlQueryConfigWithoutMethod,\n QueryConfigWithoutMethod,\n RestQueryConfig,\n V2RouteType,\n} from '../query';\nimport { V2QueryCreator } from '../query-creator';\nimport { QueryStore } from '../query-store';\nimport { RequestHeaders, RequestHeadersMethodMap } from '../request';\nimport { V2QueryClientConfig } from './query-client.types';\n\nexport class V2QueryClient {\n /**\n * @internal\n */\n readonly _store: QueryStore;\n\n get config() {\n return this._clientConfig;\n }\n\n get authProvider() {\n return this._authProvider$.getValue() ?? this._clientConfig.parent?._authProvider$.getValue() ?? null;\n }\n get authProvider$() {\n return this._authProvider$.asObservable() ?? this._clientConfig.parent?._authProvider$.asObservable() ?? null;\n }\n private readonly _authProvider$ = new BehaviorSubject<AuthProvider | null>(null);\n\n constructor(private _clientConfig: V2QueryClientConfig) {\n this._store = new QueryStore({\n enableChangeLogging: _clientConfig.logging?.queryStateChanges,\n enableGarbageCollectorLogging: _clientConfig.logging?.queryStateGarbageCollector,\n autoRefreshQueriesOnWindowFocus: _clientConfig.request?.autoRefreshQueriesOnWindowFocus ?? true,\n enableSmartPolling: _clientConfig.request?.enableSmartPolling ?? true,\n });\n }\n\n get = <\n Route extends V2RouteType<Arguments>,\n Response,\n Id,\n Data = Response,\n Arguments extends BaseArguments | undefined = undefined,\n Store extends EntityStore<unknown> = EntityStore<unknown>,\n >(\n queryConfig: QueryConfigWithoutMethod<Route, Response, Arguments, Store, Data, Id>,\n ) =>\n this.fetch<Route, Response, Arguments, Id, Store, Data>({\n ...queryConfig,\n method: 'GET',\n });\n\n post = <\n Route extends V2RouteType<Arguments>,\n Response,\n Id,\n Data = Response,\n Arguments extends BaseArguments | undefined = undefined,\n Store extends EntityStore<unknown> = EntityStore<unknown>,\n >(\n queryConfig: QueryConfigWithoutMethod<Route, Response, Arguments, Store, Data, Id>,\n ) =>\n this.fetch<Route, Response, Arguments, Id, Store, Data>({\n ...queryConfig,\n method: 'POST',\n });\n\n put = <\n Route extends V2RouteType<Arguments>,\n Response,\n Id,\n Data = Response,\n Arguments extends BaseArguments | undefined = undefined,\n Store extends EntityStore<unknown> = EntityStore<unknown>,\n >(\n queryConfig: QueryConfigWithoutMethod<Route, Response, Arguments, Store, Data, Id>,\n ) =>\n this.fetch<Route, Response, Arguments, Id, Store, Data>({\n ...queryConfig,\n method: 'PUT',\n });\n\n patch = <\n Route extends V2RouteType<Arguments>,\n Response,\n Id,\n Data = Response,\n Arguments extends BaseArguments | undefined = undefined,\n Store extends EntityStore<unknown> = EntityStore<unknown>,\n >(\n queryConfig: QueryConfigWithoutMethod<Route, Response, Arguments, Store, Data, Id>,\n ) =>\n this.fetch<Route, Response, Arguments, Id, Store, Data>({\n ...queryConfig,\n method: 'PATCH',\n });\n\n delete = <\n Route extends V2RouteType<Arguments>,\n Response,\n Id,\n Data = Response,\n Arguments extends BaseArguments | undefined = undefined,\n Store extends EntityStore<unknown> = EntityStore<unknown>,\n >(\n queryConfig: QueryConfigWithoutMethod<Route, Response, Arguments, Store, Data, Id>,\n ) =>\n this.fetch<Route, Response, Arguments, Id, Store, Data>({\n ...queryConfig,\n method: 'DELETE',\n });\n\n gqlQuery = <\n Route extends V2RouteType<Arguments>,\n Response,\n Id,\n Data = Response,\n Arguments extends BaseArguments | undefined = undefined,\n Store extends EntityStore<unknown> = EntityStore<unknown>,\n >(\n queryConfig: GqlQueryConfigWithoutMethod<Route, Response, Arguments, Store, Data, Id>,\n ) =>\n this.fetch<Route, Response, Arguments, Id, Store, Data>({\n ...queryConfig,\n method: 'GQL_QUERY',\n });\n\n gqlMutate = <\n Route extends V2RouteType<Arguments>,\n Response,\n Id,\n Data = Response,\n Arguments extends BaseArguments | undefined = undefined,\n Store extends EntityStore<unknown> = EntityStore<unknown>,\n >(\n queryConfig: GqlQueryConfigWithoutMethod<Route, Response, Arguments, Store, Data, Id>,\n ) =>\n this.fetch<Route, Response, Arguments, Id, Store, Data>({\n ...queryConfig,\n method: 'GQL_MUTATE',\n });\n\n fetch = <\n Route extends V2RouteType<Arguments>,\n Response,\n Arguments extends BaseArguments | undefined,\n Id,\n Store extends EntityStore<unknown> = EntityStore<unknown>,\n Data = Response,\n >(\n queryConfig:\n | RestQueryConfig<Route, Response, Arguments, Store, Data, Id>\n | GqlQueryConfig<Route, Response, Arguments, Store, Data, Id>,\n ) => new V2QueryCreator<Arguments, Response, Route, Store, Data, Id>(queryConfig, this, this._store);\n\n setAuthProvider = (authProvider: AuthProvider) => {\n if (this.authProvider) {\n this.authProvider?.cleanUp();\n }\n\n this._authProvider$.next(authProvider);\n };\n\n setDefaultHeaders = (config: {\n headers: RequestHeaders | RequestHeadersMethodMap | null;\n refreshQueriesInUse?: boolean;\n }) => {\n if (!this._clientConfig.request) {\n this._clientConfig.request = {\n headers: config.headers ?? undefined,\n };\n } else {\n this._clientConfig.request.headers = config.headers ?? undefined;\n }\n\n if (config.refreshQueriesInUse) {\n this._store.refreshQueriesInUse({ purgeUnused: true, ignoreCacheValidity: true });\n }\n };\n\n clearAuthProvider = () => {\n this.authProvider?.cleanUp();\n this._authProvider$.next(null);\n };\n\n _updateBaseRoute = (route: string) => {\n this._clientConfig.baseRoute = route;\n };\n}\n","import { BaseArguments } from '../query/query.types';\nimport { Method } from '../request';\n\nexport const v2ShouldCacheQuery = (method: Method) => {\n return method === 'GET' || method === 'OPTIONS' || method === 'HEAD' || method === 'GQL_QUERY';\n};\n\nexport const v2BuildQueryCacheKey = (route: string, args: BaseArguments | undefined) => {\n const variables = JSON.stringify(args?.variables || {})\n // replace all curly braces with empty string\n .replace(/{|}/g, '')\n // replace new lines and whitespaces with empty string\n .replace(/\\s/g, '');\n\n const seed = `${route}...${variables}`;\n\n let hash = 0;\n\n for (const char of seed) {\n hash = (Math.imul(31, hash) + char.charCodeAt(0)) << 0;\n }\n\n // Force positive number hash.\n // 2147483647 = equivalent of Integer.MAX_VALUE.\n hash += 2147483647 + 1;\n\n return hash.toString();\n};\n","import {\n AnyCreateQueryClientResult,\n createBaseQueryCreator,\n CreateQueryCreatorOptions,\n gqlDataPropertyMissingInResponse,\n QueryCreator,\n RouteType,\n} from '../http';\nimport { createGqlQuery, GqlQueryArgs } from './gql-query';\n\nexport type CreateGqlQueryCreatorOptions<TArgs extends GqlQueryArgs> = Omit<\n CreateQueryCreatorOptions<TArgs>,\n 'route' | 'transformResponse'\n> & {\n route?: RouteType<TArgs>;\n\n /**\n * Optional custom transform function for GQL responses.\n * If not provided, the default { data: ... } unwrapping will be used.\n */\n transformResponse?: CreateQueryCreatorOptions<TArgs>['transformResponse'];\n};\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport type AnyCreateGqlQueryCreatorOptions = CreateGqlQueryCreatorOptions<any>;\n\nexport type GqlQueryMethod = 'QUERY' | 'MUTATE';\nexport type GqlQueryTransport = 'GET' | 'POST';\n\nexport type InternalCreateGqlQueryCreatorOptions = {\n method: GqlQueryMethod;\n transport: GqlQueryTransport;\n client: AnyCreateQueryClientResult;\n query: string;\n};\n\nexport const createGqlQueryCreator = <TArgs extends GqlQueryArgs>(\n options: CreateGqlQueryCreatorOptions<TArgs> | undefined,\n internals: InternalCreateGqlQueryCreatorOptions,\n): QueryCreator<TArgs> =>\n createBaseQueryCreator({\n options: {\n ...options,\n // Use custom transformResponse if provided, otherwise use default GQL unwrapping\n transformResponse:\n options?.transformResponse ??\n ((rawResponse: unknown) => {\n if (rawResponse && typeof rawResponse === 'object' && 'data' in rawResponse) {\n return (rawResponse as { data: unknown }).data;\n }\n\n throw gqlDataPropertyMissingInResponse();\n }),\n } as CreateQueryCreatorOptions<TArgs>,\n internals,\n queryFactory: createGqlQuery,\n });\n","import { HttpHeaders } from '@angular/common/http';\nimport { toObservable } from '@angular/core/rxjs-interop';\nimport { filter, of, Subscription, switchMap, take, tap } from 'rxjs';\nimport { AnyBearerAuthProvider } from '../auth';\nimport { AnyQuerySnapshot, QueryArgs, RequestArgs } from './query';\nimport { QueryDependencies } from './query-dependencies';\nimport { invalidStateInsideSecureExecuteFactory, tokensNotAvailableInsideAuthAndExec } from './query-errors';\nimport { InternalQueryExecute, QueryExecuteArgs } from './query-execute';\nimport { circularQueryDependencyChecker, resetExecuteState, setupQueryExecuteState } from './query-execute-utils';\nimport { QueryState } from './query-state';\n\nconst AUTH_HEADER = 'Authorization';\n\nexport type SecureExecuteFactoryOptions<TArgs extends QueryArgs> = {\n authProvider: AnyBearerAuthProvider;\n deps: QueryDependencies;\n state: QueryState<TArgs>;\n transformAuthAndExec: (\n executeArgs: QueryExecuteArgs<TArgs> | undefined,\n tokens: { accessToken: string },\n headers: HttpHeaders,\n executeState: ReturnType<typeof setupQueryExecuteState>,\n ) => void;\n};\n\nexport const createSecureExecuteFactory = <TArgs extends QueryArgs>(\n options: SecureExecuteFactoryOptions<TArgs>,\n): InternalQueryExecute<TArgs> => {\n const executeState = setupQueryExecuteState();\n const circularChecker = circularQueryDependencyChecker();\n\n let authQuerySubscription = Subscription.EMPTY;\n let tokenRefreshSubscription = Subscription.EMPTY;\n\n const reset = () => {\n authQuerySubscription.unsubscribe();\n authQuerySubscription = Subscription.EMPTY;\n tokenRefreshSubscription.unsubscribe();\n tokenRefreshSubscription = Subscription.EMPTY;\n resetExecuteState({\n executeState,\n executeOptions: { deps: options.deps, state: options.state },\n });\n };\n\n const error = (query: AnyQuerySnapshot) => {\n const state = options.state;\n\n state.error.set(query.error());\n state.loading.set(null);\n state.rawResponse.set(null);\n state.latestHttpEvent.set(null);\n state.args.set(null);\n };\n\n const authAndExec = (executeArgs?: QueryExecuteArgs<TArgs>) => {\n const args = executeArgs?.args;\n\n const headerProvider = () => {\n const accessToken = options.authProvider.accessToken();\n const baseHeaders = typeof args?.headers === 'function' ? args.headers() : args?.headers || new HttpHeaders();\n\n if (!accessToken) {\n throw tokensNotAvailableInsideAuthAndExec();\n }\n\n if (!baseHeaders.has(AUTH_HEADER)) {\n return baseHeaders.set(AUTH_HEADER, `Bearer ${accessToken}`);\n }\n\n return baseHeaders;\n };\n\n const accessToken = options.authProvider.accessToken();\n if (!accessToken) {\n throw tokensNotAvailableInsideAuthAndExec();\n }\n\n const tokens = { accessToken, refreshToken: options.authProvider.refreshToken() ?? '' };\n const headers = headerProvider();\n\n options.transformAuthAndExec(\n {\n ...executeArgs,\n args: {\n ...(args ?? {}),\n headers: headerProvider, // Pass header provider instead of static headers\n } as RequestArgs<TArgs>,\n },\n tokens,\n headers,\n executeState,\n );\n };\n\n const exec = (executeArgs?: QueryExecuteArgs<TArgs>) => {\n circularChecker.check();\n\n // Make sure all effects are flushed before reading the args.\n // A withArgs feature effect might still be pending otherwise resulting in the wrong args being read.\n options.deps.effectScheduler.flush();\n\n const execArgsWithDefaults: QueryExecuteArgs<TArgs> = {\n args: executeArgs?.args ?? options.state.args(),\n options: executeArgs?.options,\n };\n\n authQuerySubscription.unsubscribe();\n authQuerySubscription = Subscription.EMPTY;\n tokenRefreshSubscription.unsubscribe();\n tokenRefreshSubscription = Subscription.EMPTY;\n\n tokenRefreshSubscription = options.authProvider.afterTokenRefresh$\n .pipe(\n filter(() => {\n const currentError = options.state.error();\n return currentError?.code === 401;\n }),\n take(1),\n tap(() => exec(execArgsWithDefaults)),\n )\n .subscribe();\n\n const latestQuery = options.authProvider.latestExecutedQuery();\n const authQuery = latestQuery?.snapshot;\n\n // This might happen if a secure query gets executed while the auth query has just been created.\n // This is due to the fact that the query state is being synced with the state inside the http request using effect.\n const isAuthQueryFreshlyExecuted = authQuery?.lastTimeExecutedAt() === null;\n\n if (!authQuery || authQuery.loading() || isAuthQueryFreshlyExecuted) {\n options.state.loading.set({ executeTime: Date.now(), progress: null });\n\n authQuerySubscription = toObservable(options.authProvider.latestExecutedQuery, {\n injector: options.deps.injector,\n })\n .pipe(\n switchMap((latestQuery) => {\n if (!latestQuery) return of(null);\n const query = latestQuery.snapshot;\n\n return toObservable(query.isAlive, { injector: options.deps.injector }).pipe(\n tap((isAlive) => {\n if (isAlive) return;\n\n if (query.error()) {\n error(query);\n } else if (query.response()) {\n authAndExec(execArgsWithDefaults);\n }\n }),\n );\n }),\n )\n .subscribe();\n } else if (authQuery.response()) {\n authAndExec(execArgsWithDefaults);\n } else if (authQuery.error()) {\n error(authQuery);\n } else {\n throw invalidStateInsideSecureExecuteFactory();\n }\n };\n\n exec['reset'] = reset;\n exec['currentRepositoryKey'] = executeState.previousKey.asReadonly();\n\n return exec;\n};\n","import {\n CreateQueryExecuteOptions,\n InternalQueryExecute,\n QueryConfig,\n QueryDependencies,\n queryExecute,\n QueryState,\n RequestArgs,\n RouteType,\n} from '../http';\nimport { createSecureExecuteFactory } from '../http/secure-query-execute-factory';\nimport { GqlQueryArgs } from './gql-query';\nimport { AnyCreateGqlQueryCreatorOptions } from './gql-query-creator';\nimport { transformGql } from './gql-transformer';\nimport { InternalSecureCreateGqlQueryCreatorOptions } from './secure-gql-query-creator';\n\nexport type CreateSecureGqlQueryExecuteOptions<TArgs extends GqlQueryArgs> = {\n deps: QueryDependencies;\n state: QueryState<TArgs>;\n creator?: AnyCreateGqlQueryCreatorOptions;\n creatorInternals: InternalSecureCreateGqlQueryCreatorOptions;\n queryConfig: QueryConfig;\n};\n\nexport const createSecureGqlExecuteFn = <TArgs extends GqlQueryArgs>(\n executeOptions: CreateSecureGqlQueryExecuteOptions<TArgs>,\n): InternalQueryExecute<TArgs> => {\n const [, injectAuthProvider] = executeOptions.creatorInternals.authProvider;\n const authProvider = injectAuthProvider();\n\n return createSecureExecuteFactory({\n authProvider,\n deps: executeOptions.deps,\n state: executeOptions.state,\n transformAuthAndExec: (executeArgs, _tokens, headers, executeState) => {\n const { args, options: runOptions } = executeArgs ?? {};\n\n const query = transformGql(executeOptions.creatorInternals.query);\n let gqlParams = query(args?.variables);\n\n if (args?.queryParams && executeOptions.creatorInternals.transport === 'GET') {\n gqlParams = { ...gqlParams, ...args.queryParams };\n }\n\n const computedArgs = { ...(args ?? ({} as RequestArgs<TArgs>)), headers };\n\n if (executeOptions.creatorInternals.transport === 'GET') {\n computedArgs.queryParams = gqlParams;\n } else {\n computedArgs.body = gqlParams;\n }\n\n const normalizedOpts: CreateQueryExecuteOptions<TArgs> = {\n ...executeOptions,\n creatorInternals: {\n client: executeOptions.creatorInternals.client,\n method: executeOptions.creatorInternals.method === 'QUERY' ? 'GET' : 'POST',\n route: (executeOptions.creator?.route ?? '') as RouteType<TArgs>,\n },\n };\n\n queryExecute({\n executeOptions: normalizedOpts,\n executeState,\n args: computedArgs,\n options: runOptions,\n isSecure: true,\n });\n },\n });\n};\n","import { createBaseQuery, CreateQueryOptions } from '../http';\nimport { GqlQueryArgs } from './gql-query';\nimport { InternalSecureCreateGqlQueryCreatorOptions } from './secure-gql-query-creator';\nimport { createSecureGqlExecuteFn } from './secure-gql-query-execute';\n\nexport type CreateSecureGqlQueryOptions<TArgs extends GqlQueryArgs> = Omit<\n CreateQueryOptions<TArgs>,\n 'creatorInternals'\n> & {\n creatorInternals: InternalSecureCreateGqlQueryCreatorOptions;\n};\n\nexport const createSecureGqlQuery = <TArgs extends GqlQueryArgs>(options: CreateSecureGqlQueryOptions<TArgs>) =>\n createBaseQuery({\n creator: options.creator,\n creatorInternals: options.creatorInternals,\n features: options.features,\n queryConfig: options.queryConfig,\n executeFactory: createSecureGqlExecuteFn,\n });\n","import { AnyCreateBearerAuthProviderResult } from '../auth';\nimport { AnyCreateQueryClientResult, createBaseQueryCreator, QueryCreator } from '../http';\nimport { GqlQueryArgs } from './gql-query';\nimport { CreateGqlQueryCreatorOptions } from './gql-query-creator';\nimport { createSecureGqlQuery } from './secure-gql-query';\n\nexport type InternalSecureCreateGqlQueryCreatorOptions = {\n method: 'QUERY' | 'MUTATE';\n transport: 'GET' | 'POST';\n client: AnyCreateQueryClientResult;\n query: string;\n authProvider: AnyCreateBearerAuthProviderResult;\n};\n\nexport const createSecureGqlQueryCreator = <TArgs extends GqlQueryArgs>(\n options: CreateGqlQueryCreatorOptions<TArgs> | undefined,\n internals: InternalSecureCreateGqlQueryCreatorOptions,\n): QueryCreator<TArgs> =>\n createBaseQueryCreator({\n options: {\n ...options,\n // Use custom transformResponse if provided, otherwise use default GQL unwrapping\n transformResponse:\n options?.transformResponse ??\n ((rawResponse: unknown) => {\n if (rawResponse && typeof rawResponse === 'object' && 'data' in rawResponse) {\n return (rawResponse as { data: unknown }).data;\n }\n return rawResponse;\n }),\n },\n internals,\n queryFactory: createSecureGqlQuery,\n });\n","import { AnyCreateBearerAuthProviderResult } from '../auth';\nimport { AnyCreateQueryClientResult } from '../http';\nimport { GqlQueryArgs } from './gql-query';\nimport {\n createGqlQueryCreator,\n CreateGqlQueryCreatorOptions,\n GqlQueryMethod,\n GqlQueryTransport,\n} from './gql-query-creator';\nimport { GQL } from './gql-transformer';\nimport { createSecureGqlQueryCreator } from './secure-gql-query-creator';\n\nconst createGqlCreatorTemplate = (method: GqlQueryMethod, transport: GqlQueryTransport) => {\n return (client: AnyCreateQueryClientResult) => {\n return <TArgs extends GqlQueryArgs>(query: GQL, creatorOptions?: CreateGqlQueryCreatorOptions<TArgs>) =>\n createGqlQueryCreator<TArgs>(creatorOptions, {\n method,\n client,\n transport,\n query,\n });\n };\n};\n\nconst createSecureGqlCreatorTemplate = (method: GqlQueryMethod, transport: GqlQueryTransport) => {\n return (client: AnyCreateQueryClientResult, authProvider: AnyCreateBearerAuthProviderResult) => {\n return <TArgs extends GqlQueryArgs>(query: GQL, creatorOptions?: CreateGqlQueryCreatorOptions<TArgs>) =>\n createSecureGqlQueryCreator<TArgs>(creatorOptions, {\n method,\n client,\n transport,\n query,\n authProvider,\n });\n };\n};\n\n/** A query creator that creates a GQL query where the payload is sent via GET (query params) */\nexport const createGqlQueryViaGet = createGqlCreatorTemplate('QUERY', 'GET');\n\n/** A query creator that creates a secure GQL query where the payload is sent via GET (query params) */\nexport const createSecureGqlQueryViaGet = createSecureGqlCreatorTemplate('QUERY', 'GET');\n\n/** A query creator that creates a GQL query where the payload is sent via POST (body) */\nexport const createGqlQueryViaPost = createGqlCreatorTemplate('QUERY', 'POST');\n\n/** A query creator that creates a secure GQL query where the payload is sent via POST (body) */\nexport const createSecureGqlQueryViaPost = createSecureGqlCreatorTemplate('QUERY', 'POST');\n\n/** A query creator that creates a GQL mutation where the payload is sent via GET (query params) */\nexport const createGqlMutationViaGet = createGqlCreatorTemplate('MUTATE', 'GET');\n\n/** A query creator that creates a secure GQL mutation where the payload is sent via GET (query params) */\nexport const createSecureGqlMutationViaGet = createSecureGqlCreatorTemplate('MUTATE', 'GET');\n\n/** A query creator that creates a GQL mutation where the payload is sent via POST (body) */\nexport const createGqlMutationViaPost = createGqlCreatorTemplate('MUTATE', 'POST');\n\n/** A query creator that creates a secure GQL mutation where the payload is sent via POST (body) */\nexport const createSecureGqlMutationViaPost = createSecureGqlCreatorTemplate('MUTATE', 'POST');\n","import { effect, untracked } from '@angular/core';\nimport { toObservable } from '@angular/core/rxjs-interop';\nimport {\n filter,\n interval,\n map,\n Observable,\n of,\n ReplaySubject,\n shareReplay,\n skip,\n Subscription,\n switchMap,\n takeUntil,\n takeWhile,\n} from 'rxjs';\nimport { AnyNewQuery, Query, QueryArgs, QueryArgsOf, QueryExecutionState, RequestArgs, ResponseType } from '../../http';\nimport { EntityStore } from '../entity';\nimport {\n BaseArguments,\n ExecuteQueryOptions,\n Failure,\n filterFailure,\n filterSuccess,\n isQueryStateLoading,\n isQueryStateSuccess,\n Loading,\n PollConfig,\n Prepared,\n QueryAutoRefreshConfig,\n QueryEntityConfig,\n QueryStateMeta,\n QueryStateType,\n Success,\n takeUntilResponse,\n V2QueryState,\n V2RouteType,\n} from '../query';\nimport { RequestError } from '../request';\n\nexport type CreateLegacyQueryOptions<TArgs extends QueryArgs> = {\n query: Query<TArgs>;\n};\n\nexport const transformExecStateToQueryState = <TArgs extends QueryArgs>(\n execState: QueryExecutionState<TArgs> | null,\n): V2QueryState<ResponseType<TArgs>> => {\n const meta: QueryStateMeta = { id: -1, triggeredVia: 'program' };\n\n switch (execState?.type) {\n case 'loading': {\n const loading: Loading = {\n meta,\n type: QueryStateType.Loading,\n ...(execState.loading.progress\n ? {\n progress: {\n current: execState.loading.progress.loaded,\n percentage: execState.loading.progress.percentage,\n total: execState.loading.progress.total,\n },\n }\n : {}),\n };\n\n return loading;\n }\n case 'success': {\n const success: Success<ResponseType<TArgs>> = {\n headers: {},\n meta,\n response: execState.response,\n type: QueryStateType.Success,\n };\n\n return success;\n }\n case 'failure': {\n const error: Failure = {\n error: {\n detail: execState.error.raw.error,\n httpErrorResponse: execState.error.raw,\n status: execState.error.raw.status,\n statusText: execState.error.raw.statusText,\n url: execState.error.raw.url || '',\n },\n meta,\n type: QueryStateType.Failure,\n };\n\n return error;\n }\n default: {\n const prepared: Prepared = {\n meta,\n type: QueryStateType.Prepared,\n };\n\n return prepared;\n }\n }\n};\n\nexport const isLegacyQuery = <T extends AnyLegacyQuery>(query: unknown): query is T => {\n if (!query || typeof query !== 'object' || Array.isArray(query)) {\n return false;\n }\n\n if (!('newQuery' in query)) {\n return false;\n }\n\n return true;\n};\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport type AnyLegacyQuery = LegacyQuery<any, any, any, any, any, any, any>;\n\nexport class LegacyQuery<\n Response,\n Arguments extends BaseArguments | undefined,\n Route extends V2RouteType<Arguments>,\n Store extends EntityStore<unknown>,\n Data,\n Id,\n TNewQuery extends AnyNewQuery,\n> {\n /**\n * @internal\n */\n _pollingSubscription: Subscription | null = null;\n /**\n * @internal\n */\n _currentPollConfig: PollConfig | null = null;\n\n /**\n * @internal\n */\n storeSyncEffect = effect(() => {\n const res = this.newQuery.response();\n\n untracked(() => {\n if (this.entity?.set) {\n const id = this.entity.id({ args: this._arguments, response: res });\n\n this.entity.set({\n args: this._arguments,\n response: res,\n id,\n store: this.entity.store,\n });\n }\n });\n });\n\n /**\n * @internal\n */\n _dependents: Record<number, number> = {};\n\n /**\n * @internal\n */\n _dependentsChanged$ = new ReplaySubject<Record<number, number>>();\n\n /**\n * @internal\n */\n _isPollingPaused = false;\n\n state$: Observable<V2QueryState<Data>>;\n\n get rawState() {\n return transformExecStateToQueryState(this.newQuery.executionState());\n }\n\n get isExpired() {\n return this.newQuery.subtle.request()?.isStale();\n }\n\n get isInUse() {\n return true;\n }\n\n /**\n * @internal\n */\n get _subscriberCount() {\n return 0;\n }\n\n get isPolling() {\n return !!this._pollingSubscription;\n }\n\n get autoRefreshOnConfig() {\n const transformed: Readonly<QueryAutoRefreshConfig> = {\n queryClientDefaultHeadersChange: false,\n windowFocus: false,\n };\n\n return transformed;\n }\n\n /**\n * @internal\n */\n get _enableSmartPolling() {\n return false;\n }\n\n get store() {\n return null;\n }\n\n get canBeCached() {\n return false;\n }\n\n get _isInMockMode() {\n return false;\n }\n\n constructor(\n public newQuery: TNewQuery,\n public _arguments: RequestArgs<QueryArgsOf<TNewQuery>>,\n public entity?: QueryEntityConfig<Store, Data, Response, Arguments, Id>,\n ) {\n this.state$ = toObservable(this.newQuery.executionState, { injector: this.newQuery.subtle.injector }).pipe(\n map((execState) => transformExecStateToQueryState(execState)),\n switchMap((s) => this._transformState(s)),\n shareReplay({ bufferSize: 1, refCount: true }),\n );\n\n this.newQuery.subtle.destroyRef.onDestroy(() => this.destroy());\n }\n\n destroy() {\n this._pollingSubscription?.unsubscribe();\n this._pollingSubscription = null;\n this._dependentsChanged$.complete();\n this.newQuery.subtle.destroy();\n this.storeSyncEffect.destroy();\n }\n\n execute(options: ExecuteQueryOptions = {}) {\n untracked(() =>\n this.newQuery.execute({ args: this._arguments, options: { allowCache: options.skipCache !== true } }),\n );\n\n return this;\n }\n\n abort() {\n if (!isQueryStateLoading(this.rawState)) {\n return this;\n }\n\n this.newQuery.reset();\n\n return this;\n }\n\n poll(config: PollConfig) {\n if (this._pollingSubscription) {\n return this;\n }\n\n this._currentPollConfig = config;\n\n const interval$ = interval(config.interval);\n const poll$ = interval$.pipe(\n skip(config.triggerImmediately ? 0 : 1),\n takeUntil(config.takeUntil),\n takeWhile(() => !this._isPollingPaused),\n filter(() => !isQueryStateLoading(this.rawState)),\n );\n\n this._pollingSubscription = poll$.subscribe({\n next: () => this.execute({ skipCache: true, _triggeredVia: 'poll' }),\n complete: () => this.stopPolling(),\n });\n\n return this;\n }\n\n stopPolling() {\n this._pollingSubscription?.unsubscribe();\n this._pollingSubscription = null;\n this._currentPollConfig = null;\n\n return this;\n }\n\n pausePolling() {\n this._pollingSubscription?.unsubscribe();\n this._pollingSubscription = null;\n\n this._isPollingPaused = true;\n\n return this;\n }\n\n resumePolling() {\n if (!this._isPollingPaused || !this._currentPollConfig) {\n return this;\n }\n\n this._isPollingPaused = false;\n\n return this.poll({ ...this._currentPollConfig, triggerImmediately: true });\n }\n\n onSuccess(callback: (response: Data) => void) {\n this.state$.pipe(takeUntilResponse(), filterSuccess()).subscribe((state) => callback(state.response));\n return this;\n }\n\n onFailure(callback: (error: RequestError<unknown>) => void) {\n this.state$.pipe(takeUntilResponse(), filterFailure()).subscribe((state) => callback(state.error));\n return this;\n }\n\n /**\n * @internal\n */\n _addDependent(tNodeIndex: number) {\n if (!this._dependents[tNodeIndex]) {\n this._dependents[tNodeIndex] = 0;\n }\n\n this._dependents[tNodeIndex]++;\n\n this._dependentsChanged$.next(this._dependents);\n }\n\n /**\n * @internal\n */\n _removeDependent(tNodeIndex: number) {\n const count = this._dependents[tNodeIndex];\n if (count === undefined) {\n return;\n }\n\n if (this._dependents[tNodeIndex] !== undefined) {\n this._dependents[tNodeIndex]--;\n }\n\n if (count <= 1) {\n delete this._dependents[tNodeIndex];\n }\n\n this._dependentsChanged$.next(this._dependents);\n }\n\n /**\n * @internal\n */\n _hasDependents() {\n return Object.keys(this._dependents).length > 0;\n }\n\n /**\n * @internal\n */\n _transformState(s: V2QueryState<Response>): Observable<V2QueryState<Data>> {\n if (!isQueryStateSuccess(s) || !this.entity?.get) {\n return of(s) as Observable<V2QueryState<Data>>;\n }\n\n const id = this.entity.id({ args: this._arguments, response: s.response });\n\n return this.entity\n .get({ args: this._arguments, id, response: s.response, store: this.entity.store })\n .pipe(map((v) => ({ ...s, response: v })));\n }\n}\n","import { HttpHeaders } from '@angular/common/http';\nimport { effect, inject, Injector, runInInjectionContext, signal, untracked } from '@angular/core';\nimport { toObservable } from '@angular/core/rxjs-interop';\nimport { BehaviorSubject } from 'rxjs';\nimport { AnyNewQuery, Query, QueryArgs, QueryCreator, RequestArgs, ResponseType } from '../../http';\nimport { EntityStore } from '../entity';\nimport { BaseArguments, QueryEntityConfig, V2QueryConfig, V2RouteType, WithHeaders, WithInjector } from '../query';\nimport { addQueryContainerHandling, QueryContainerConfig } from '../utils';\nimport { LegacyQuery } from './legacy-query';\n\nexport type LegacyArgumentsOfQueryArgs<T extends QueryArgs> = Omit<T, 'response' | 'headers'> & WithHeaders;\nexport type QueryArgsOfLegacyArguments<T extends BaseArguments | undefined, J> = Omit<T, 'mock' | 'headers'> & {\n headers?: HttpHeaders;\n response?: J;\n};\n\nexport type CreateLegacyQueryCreatorOptions<\n TArgs extends QueryArgs,\n Response,\n Store extends EntityStore<unknown>,\n Data,\n Id,\n> = {\n creator: QueryCreator<TArgs>;\n\n /**\n * Object containing the query's entity store information.\n */\n entity?: QueryEntityConfig<Store, Data, Response, LegacyArgumentsOfQueryArgs<TArgs>, Id>;\n};\n\nexport type WithLegacyConfig = {\n /**\n * Additional configuration for this query.\n */\n config?: V2QueryConfig & {\n /**\n * If set to true, the query will be destroyed when it either succeeds or fails.\n */\n destroyOnResponse?: boolean;\n };\n};\n\nexport type LegacyQueryPrepareFn<\n Arguments extends BaseArguments | undefined,\n Response,\n Route extends V2RouteType<Arguments>,\n Store extends EntityStore<unknown>,\n Data,\n Id,\n TNewQuery extends AnyNewQuery,\n> = (\n args: Arguments & WithHeaders & WithLegacyConfig & WithInjector,\n) => LegacyQuery<Response, Arguments, Route, Store, Data, Id, TNewQuery>;\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport type AnyLegacyQueryCreator = LegacyQueryCreator<any, any, any, any, any>;\n\nexport class LegacyQueryCreator<\n TArgs extends QueryArgs,\n Response extends ResponseType<TArgs>,\n Store extends EntityStore<unknown>,\n Id,\n Data = Response,\n> {\n constructor(public options: CreateLegacyQueryCreatorOptions<TArgs, Response, Store, Data, Id>) {}\n\n prepare: LegacyQueryPrepareFn<\n LegacyArgumentsOfQueryArgs<TArgs>,\n Response,\n V2RouteType<LegacyArgumentsOfQueryArgs<TArgs>>,\n Store,\n Data,\n Id,\n Query<TArgs>\n > = (args: LegacyArgumentsOfQueryArgs<TArgs> & WithHeaders & WithLegacyConfig & WithInjector) => {\n const injector = args?.injector ?? inject(Injector);\n\n let headers = new HttpHeaders();\n\n if (args?.headers) {\n Object.entries(args.headers).forEach(([key, value]) => {\n if (value) {\n headers = headers.set(key, value);\n }\n });\n }\n\n const queryArgs = {\n ...(args?.body ? { body: args.body } : {}),\n ...(args?.pathParams ? { pathParams: args.pathParams } : {}),\n ...(args?.queryParams ? { queryParams: args.queryParams } : {}),\n headers,\n } as RequestArgs<TArgs>;\n\n return runInInjectionContext(injector, () => {\n return untracked(() => {\n const newQuery = this.options.creator({\n onlyManualExecution: true,\n injector,\n silenceMissingWithArgsFeatureError: true,\n });\n\n const legacyQuery = new LegacyQuery<\n Response,\n LegacyArgumentsOfQueryArgs<TArgs>,\n V2RouteType<LegacyArgumentsOfQueryArgs<TArgs>>,\n Store,\n Data,\n Id,\n Query<TArgs>\n >(newQuery, queryArgs, this.options.entity);\n\n if (args?.config?.destroyOnResponse) {\n const destroyEffect = effect(() => {\n if (newQuery.executionState()?.type === 'success' || newQuery.executionState()?.type === 'failure') {\n legacyQuery.destroy();\n destroyEffect.destroy();\n }\n });\n }\n\n return legacyQuery;\n });\n });\n };\n createSubject = (initialValue?: ReturnType<typeof this.prepare> | null, config?: QueryContainerConfig) => {\n const subject = new BehaviorSubject<ReturnType<typeof this.prepare> | null>(initialValue ?? null);\n\n addQueryContainerHandling(subject, () => subject.getValue(), config);\n\n return subject;\n };\n createSignal = (initialValue?: ReturnType<typeof this.prepare> | null, config?: QueryContainerConfig) => {\n const _signal = signal<ReturnType<typeof this.prepare> | null>(initialValue ?? null);\n\n addQueryContainerHandling(toObservable(_signal), () => _signal(), config);\n\n return _signal;\n };\n\n behaviorSubject = this.createSubject;\n}\n\n/**\n * Creates a legacy query creator.\n *\n * **NOTE**: This is a temporary solution to support legacy queries. It will be removed in the future.\n *\n * **DO NOT TURN NEW QUERY CREATORS INTO LEGACY ONES MANUALLY. THIS IS ONLY NEEDED FOR MIGRATION PURPOSES.**\n */\nexport const createLegacyQueryCreator = <\n TArgs extends QueryArgs,\n Response extends ResponseType<TArgs>,\n Store extends EntityStore<unknown>,\n Id,\n Data = Response,\n>(\n options: CreateLegacyQueryCreatorOptions<TArgs, Response, Store, Data, Id>,\n): LegacyQueryCreator<TArgs, Response, Store, Id, Data> => {\n return new LegacyQueryCreator<TArgs, Response, Store, Id, Data>(options);\n};\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { assertInInjectionContext, isDevMode, signal } from '@angular/core';\nimport { toObservable } from '@angular/core/rxjs-interop';\nimport { Paginated } from '@ethlete/types';\nimport { BehaviorSubject, Observable, filter, map, of, switchMap, takeWhile, tap } from 'rxjs';\nimport { transformGql } from '../../gql';\nimport { isSymfonyPagerfantaOutOfRangeError } from '../../http';\nimport { QueryForm } from '../../query-form';\nimport { EntityStore } from '../entity';\nimport { AnyLegacyQuery, isLegacyQuery } from '../interop';\nimport { V2QueryClient } from '../query-client';\nimport {\n AnyV2QueryCreator,\n QueryDataOf,\n QueryResponseOf,\n QueryStoreIdOf,\n QueryStoreOf,\n V2QueryArgsOf,\n V2QueryCreator,\n} from '../query-creator';\nimport { Method, RequestHeaders, RequestHeadersMethodMap, transformMethod } from '../request';\nimport { QueryContainerConfig, addQueryContainerHandling } from '../utils';\nimport {\n AnyGqlQueryConfig,\n AnyQueryCollection,\n AnyQueryCollectionData,\n AnyQueryCreatorCollection,\n AnyRestQueryConfig,\n AnyV2Query,\n BaseArguments,\n Cancelled,\n Failure,\n GqlQueryConfig,\n Loading,\n Prepared,\n QueryCollectionOf,\n QueryStateResponseOf,\n QueryStateType,\n ResetPageOnErrorOperatorConfig,\n Success,\n V2QueryState,\n V2RouteType,\n} from './query.types';\n\ntype OmitNull<T> = T extends null ? never : T;\n\nexport function filterSuccess() {\n return function <T extends V2QueryState | null, Response extends QueryStateResponseOf<OmitNull<T>>>(\n source: Observable<T>,\n ) {\n return source.pipe(filter((value) => isQueryStateSuccess(value))) as Observable<Success<Response>>;\n };\n}\n\nexport function ignoreAutoRefresh() {\n return function <T extends V2QueryState | null>(source: Observable<T>) {\n return source.pipe(filter((value) => !isAutoRefresh(value))) as Observable<T>;\n };\n}\n\nexport function filterFailure() {\n return function <T extends V2QueryState | null>(source: Observable<T>) {\n return source.pipe(filter((value) => isQueryStateFailure(value))) as Observable<Failure>;\n };\n}\n\nexport function filterQueryStates(allowedStates: QueryStateType[]) {\n return function <T extends V2QueryState | null>(source: Observable<T>) {\n return source.pipe(filter((value) => value && allowedStates.includes(value.type))) as Observable<T>;\n };\n}\n\nexport function takeUntilResponse(config?: { excludeNull?: boolean }) {\n return function <T extends V2QueryState | null>(source: Observable<T>) {\n return source.pipe(\n takeWhile((value) => {\n if (config?.excludeNull && value === null) {\n return false;\n }\n\n return isQueryStateLoading(value) || isQueryStatePrepared(value) || value === null;\n }, true),\n );\n };\n}\n\nexport function filterNull() {\n return function <T>(source: Observable<T>) {\n return source.pipe(filter((value): value is OmitNull<T> => value !== null));\n };\n}\n\nexport function switchQueryState() {\n return function <T extends AnyV2Query | AnyLegacyQuery | null, Data extends QueryDataOf<T>>(source: Observable<T>) {\n return source.pipe(switchMap((value) => value?.state$ ?? of(null))) as Observable<V2QueryState<Data> | null>;\n };\n}\n\nexport function switchQueryCollectionState() {\n return function <T extends AnyQueryCollection | null, Data extends AnyQueryCollectionData<OmitNull<T>>>(\n source: Observable<T>,\n ) {\n return source.pipe(switchMap((value) => value?.query.state$ ?? of(null))) as Observable<V2QueryState<Data> | null>;\n };\n}\n\nexport const resetPageOnError =\n <T extends AnyV2Query | AnyLegacyQuery | null | undefined, J extends QueryForm<any>>(\n config: ResetPageOnErrorOperatorConfig<J>,\n ) =>\n (source: Observable<T>) => {\n const { queryForm, pageControlKey = 'page' } = config;\n\n if (isDevMode() && !queryForm.form.controls[pageControlKey]) {\n console.warn(`resetPageOnError: queryForm.form.controls[\"${pageControlKey}\"] is undefined`);\n }\n\n return source.pipe(\n switchMap((q) => {\n if (!q) {\n return of(q);\n }\n\n return q.state$.pipe(\n tap((state) => {\n if (!isQueryStateFailure(state)) {\n return;\n }\n\n switch (state.error.status) {\n // The page is invalid (in prod mode, code is 416)\n case 416:\n queryForm.form.controls[pageControlKey]?.patchValue(1);\n break;\n\n // The page might be invalid (in dev mode, code is 500)\n case 500:\n if (isSymfonyPagerfantaOutOfRangeError(state.error.detail)) {\n queryForm.form.controls[pageControlKey].patchValue(1);\n }\n break;\n }\n }),\n takeUntilResponse(),\n );\n }),\n );\n };\n\nexport const isQueryStateLoading = (state: V2QueryState | null | undefined): state is Loading =>\n state?.type === QueryStateType.Loading;\n\nexport const isQueryStateSuccess = (state: V2QueryState | null | undefined): state is Success =>\n state?.type === QueryStateType.Success;\n\nexport const isQueryStateFailure = (state: V2QueryState | null | undefined): state is Failure =>\n state?.type === QueryStateType.Failure;\n\nexport const isQueryStateCancelled = (state: V2QueryState | null | undefined): state is Cancelled =>\n state?.type === QueryStateType.Cancelled;\n\nexport const isQueryStatePrepared = (state: V2QueryState | null | undefined): state is Prepared =>\n state?.type === QueryStateType.Prepared;\n\nexport const isAutoRefresh = (state: V2QueryState | null | undefined): boolean => state?.meta.triggeredVia === 'auto';\n\nexport const mergeHeaders = (...headers: Array<RequestHeaders | null | undefined>) => {\n return headers.reduce((acc, headers) => {\n if (!headers) {\n return acc;\n }\n\n return {\n ...acc,\n ...headers,\n };\n }, {});\n};\n\nexport const isGqlQueryConfig = <\n Response,\n Arguments extends BaseArguments | undefined,\n Route extends V2RouteType<Arguments> | undefined,\n Store extends EntityStore<unknown>,\n Data,\n Id,\n>(\n config: unknown,\n): config is GqlQueryConfig<Route, Response, Arguments, Store, Data, Id> => {\n if (!config || typeof config !== 'object' || Array.isArray(config)) {\n return false;\n }\n\n if (!('query' in config)) {\n return false;\n }\n\n return true;\n};\n\nexport const isQuery = <T extends AnyV2Query | AnyLegacyQuery>(query: unknown): query is T => {\n if (!query || typeof query !== 'object' || Array.isArray(query)) {\n return false;\n }\n\n if (!('state$' in query)) {\n return false;\n }\n\n return true;\n};\n\nexport const isQueryCollection = <T extends AnyQueryCollection>(query: unknown): query is T => {\n if (!query || typeof query !== 'object' || Array.isArray(query)) {\n return false;\n }\n\n if (!('query' in query)) {\n return false;\n }\n\n return true;\n};\n\nexport const createQueryCollection = <T extends AnyQueryCreatorCollection, R extends QueryCollectionOf<T>>(\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n queryMap: T,\n) => new BehaviorSubject<R | null>(null);\n\nexport const createQueryCollectionSubject = <T extends AnyQueryCreatorCollection, R extends QueryCollectionOf<T>>(\n queryMap: T,\n config?: QueryContainerConfig,\n) => {\n assertInInjectionContext(createQueryCollectionSubject);\n\n const subject = new BehaviorSubject<R | null>(null);\n\n addQueryContainerHandling(\n subject.pipe(map((s) => s?.query ?? null)),\n () => subject.getValue()?.query ?? null,\n config,\n );\n\n return subject;\n};\n\nexport const createQueryCollectionSignal = <T extends AnyQueryCreatorCollection, R extends QueryCollectionOf<T>>(\n queryMap: T,\n config?: QueryContainerConfig,\n) => {\n assertInInjectionContext(createQueryCollectionSignal);\n\n const _signal = signal<R | null>(null);\n\n addQueryContainerHandling(\n toObservable(_signal).pipe(map((s) => s?.query ?? null)),\n () => _signal()?.query ?? null,\n config,\n );\n\n return _signal;\n};\n\nexport const extractQuery = <T extends AnyV2Query | AnyLegacyQuery | AnyQueryCollection | null>(v: T) =>\n (isQuery(v) ? v : isLegacyQuery(v) ? v : v?.query) ?? null;\n\nexport const getDefaultHeaders = (\n headers: RequestHeaders | RequestHeadersMethodMap | null | undefined,\n method: Method,\n) => {\n if (!headers) {\n return {};\n }\n\n if (method in headers) {\n return (headers[method] ?? {}) as RequestHeaders;\n }\n\n return headers as RequestHeaders;\n};\n\nexport const castQueryCreatorTypes = <\n QC extends AnyV2QueryCreator,\n Arguments extends V2QueryArgsOf<QC>,\n Response extends QueryResponseOf<QC>,\n Store extends QueryStoreOf<QC>,\n Data extends QueryDataOf<QC>,\n Route extends V2RouteType<Arguments>,\n Id extends QueryStoreIdOf<QC>,\n OverrideArguments extends BaseArguments | undefined,\n OverrideResponse extends Response | undefined,\n>(config: {\n creator: QC;\n args?: OverrideArguments;\n response?: OverrideResponse;\n}) => {\n if (config.args?.pathParams) {\n console.error(config);\n\n throw new Error('Path params cannot be overridden in castQueryCreatorTypes. Create a new query creator instead.');\n }\n\n return config.creator as unknown as V2QueryCreator<OverrideArguments, OverrideResponse, Route, Store, Data, Id>;\n};\n\nexport const computeQueryMethod = (config: {\n config: AnyRestQueryConfig | AnyGqlQueryConfig;\n client: V2QueryClient;\n}) => {\n let method: Method;\n\n if (isGqlQueryConfig(config.config)) {\n const transferVia = config.config.transferVia ?? config.client.config.request?.gql?.transferVia;\n method = transformMethod({ method: config.config.method, transferVia });\n } else {\n method = transformMethod({ method: config.config.method });\n }\n\n return method;\n};\n\nexport const computeQueryBody = (config: {\n config: AnyRestQueryConfig | AnyGqlQueryConfig;\n client: V2QueryClient;\n method: Method;\n args?: BaseArguments;\n}) => {\n let body: unknown;\n\n if (\n config.method === 'GET' ||\n config.method === 'HEAD' ||\n config.method === 'OPTIONS' ||\n (isGqlQueryConfig(config.config) &&\n (config.config.transferVia === 'GET' ||\n (config.client.config.request?.gql?.transferVia === 'GET' && !config.config.transferVia)))\n ) {\n return undefined;\n }\n\n if (isGqlQueryConfig(config.config)) {\n const queryTemplate = config.config.query;\n const query = transformGql(queryTemplate);\n\n body = query(config.args?.variables);\n } else {\n body = config.args?.body;\n }\n\n return body;\n};\n\nexport const computeQueryAuthHeader = (config: {\n config: AnyRestQueryConfig | AnyGqlQueryConfig;\n client: V2QueryClient;\n}) => {\n let authHeader: Record<string, string> | null = null;\n\n if (config.config.secure) {\n const header = config.client.authProvider?.header;\n\n if (header) {\n authHeader = header;\n }\n } else if (config.client.authProvider?.header) {\n if (config.config.secure === undefined || config.config.secure) {\n authHeader = config.client.authProvider.header;\n }\n }\n\n return authHeader;\n};\n\nexport const computeQueryHeaders = (config: {\n config: AnyRestQueryConfig | AnyGqlQueryConfig;\n client: V2QueryClient;\n args?: BaseArguments;\n}) => {\n const authHeader = computeQueryAuthHeader(config);\n\n const mergedHeaders =\n mergeHeaders(\n getDefaultHeaders(config.client.config.request?.headers, config.config.method),\n authHeader,\n config.args?.headers,\n ) || undefined;\n\n return mergedHeaders;\n};\n\nexport const computeQueryQueryParams = (config: {\n config: AnyRestQueryConfig | AnyGqlQueryConfig;\n client: V2QueryClient;\n args?: BaseArguments;\n}) => {\n if (\n isGqlQueryConfig(config.config) &&\n (config.config.transferVia === 'GET' ||\n (config.client.config.request?.gql?.transferVia === 'GET' && !config.config.transferVia))\n ) {\n const queryTemplate = config.config.query;\n const query = transformGql(queryTemplate);\n\n let params = query(config.args?.variables);\n\n if (config.args?.queryParams) {\n params = { ...params, ...config.args?.queryParams };\n }\n\n return params;\n }\n\n return config.args?.queryParams;\n};\n\nexport const paginatedEntityValueUpdater =\n <\n T extends Paginated<unknown>,\n Args extends BaseArguments,\n Entity,\n J extends T extends Paginated<infer X> ? X : never,\n >(\n findFn: (val: J, entity: Entity) => boolean,\n ) =>\n ({ response, rawResponse, entity }: { rawResponse: T; response: T; args: Args; entity: Entity }) => {\n const indexOfEntityRaw = rawResponse.items.findIndex((item) => findFn(item as J, entity));\n const indexOfEntity = response.items.findIndex((item) => findFn(item as J, entity));\n\n if (indexOfEntity === -1 || indexOfEntityRaw === -1) {\n return null;\n }\n\n const newRawResponse = {\n ...rawResponse,\n items: [\n ...rawResponse.items.slice(0, indexOfEntityRaw),\n entity,\n ...rawResponse.items.slice(indexOfEntityRaw + 1),\n ],\n };\n\n const newResponse = {\n ...response,\n items: [...response.items.slice(0, indexOfEntity), entity, ...response.items.slice(indexOfEntity + 1)],\n };\n\n return {\n response: newResponse,\n rawResponse: newRawResponse,\n };\n };\n","import { untracked } from '@angular/core';\nimport {\n BehaviorSubject,\n combineLatest,\n EMPTY,\n filter,\n interval,\n map,\n Observable,\n of,\n ReplaySubject,\n shareReplay,\n skip,\n Subject,\n Subscription,\n switchMap,\n take,\n takeUntil,\n takeWhile,\n tap,\n timer,\n} from 'rxjs';\nimport { isBearerAuthProvider } from '../auth';\nimport { EntityStore } from '../entity';\nimport { V2QueryClient, v2ShouldCacheQuery } from '../query-client';\nimport { request, RequestError, RequestEvent, RequestHeaders } from '../request';\nimport {\n BaseArguments,\n ExecuteQueryOptions,\n GqlQueryConfig,\n PollConfig,\n QueryAutoRefreshConfig,\n QueryStateMeta,\n QueryStateType,\n RestQueryConfig,\n V2QueryState,\n V2RouteType,\n} from './query.types';\nimport {\n computeQueryBody,\n computeQueryHeaders,\n computeQueryMethod,\n filterFailure,\n filterSuccess,\n isGqlQueryConfig,\n isQueryStateCancelled,\n isQueryStateFailure,\n isQueryStateLoading,\n isQueryStatePrepared,\n isQueryStateSuccess,\n switchQueryState,\n takeUntilResponse,\n} from './query.utils';\n\nlet _nextQueryId = 0;\n\nexport class V2Query<\n Response,\n Arguments extends BaseArguments | undefined,\n Route extends V2RouteType<Arguments>,\n Store extends EntityStore<unknown>,\n Data,\n Id,\n> {\n readonly _id = _nextQueryId++;\n\n private _currentLocalId = 0;\n private _pollingSubscription: Subscription | null = null;\n private _onAbort$ = new Subject<void>();\n private _currentPollConfig: PollConfig | null = null;\n\n /**\n * @internal\n * Used to track which components depend on this query.\n * The key is the component's _tNode index.\n * The value is the number of times the component has subscribed to this query.\n * The value might increase since we cant distinguish between a component and a host directive applied to it.\n */\n _dependents: Record<number, number> = {};\n\n /**\n * @internal\n */\n _dependentsChanged$ = new ReplaySubject<Record<number, number>>();\n\n /**\n * @internal\n */\n _isPollingPaused = false;\n\n private _memoizedState$: Observable<V2QueryState<Data>> | null = null;\n\n private readonly _state$ = new BehaviorSubject<V2QueryState<Response>>({\n type: QueryStateType.Prepared,\n meta: { id: this._currentLocalId, triggeredVia: 'program' },\n });\n\n private get _nextId() {\n return ++this._currentLocalId;\n }\n\n get state$(): Observable<V2QueryState<Data>> {\n if (!this._memoizedState$) {\n this._memoizedState$ = this._state$.pipe(\n tap((s) => {\n if (!this._client.config.logging?.preparedQuerySubscriptions) return;\n\n if (isQueryStatePrepared(s)) {\n console.warn(\n `Query ${this._routeWithParams} was subscribed to in the prepared state. Did you forget to call .execute()?`,\n );\n }\n }),\n switchMap((s) => this._transformState(s)),\n shareReplay({ bufferSize: 1, refCount: true }),\n );\n }\n return this._memoizedState$;\n }\n\n /**\n * The current state of the query.\n *\n * **Warning!** This differs from the `state$` observable in that it does not use the query store. Thus, the response data might be outdated.\n * Use `state$` (or `firstValueFrom(state$)`) the most up-to-date data.\n */\n get rawState() {\n return this._state$.value;\n }\n\n get isExpired() {\n if (isQueryStateLoading(this.rawState)) {\n return false;\n }\n\n if (\n isQueryStatePrepared(this.rawState) ||\n isQueryStateCancelled(this.rawState) ||\n isQueryStateFailure(this.rawState)\n ) {\n return true;\n }\n\n const ts = this.rawState.meta.expiresAt;\n\n if (!ts) {\n return true;\n }\n\n return ts < Date.now();\n }\n\n get isInUse() {\n return this._state$.observed || Object.keys(this._dependents).length > 0;\n }\n\n /**\n * @internal\n */\n get _subscriberCount() {\n return this._state$.observers.length;\n }\n\n get isPolling() {\n return !!this._pollingSubscription;\n }\n\n get autoRefreshOnConfig() {\n const base = this._queryConfig.autoRefreshOn ?? {};\n\n const transformed: Readonly<QueryAutoRefreshConfig> = {\n queryClientDefaultHeadersChange: base.queryClientDefaultHeadersChange ?? true,\n windowFocus: base.windowFocus ?? true,\n };\n\n return transformed;\n }\n\n /**\n * @internal\n */\n get _enableSmartPolling() {\n return this._queryConfig.enableSmartPolling ?? true;\n }\n\n get store() {\n return this._queryConfig.entity?.store ?? null;\n }\n\n get canBeCached() {\n return v2ShouldCacheQuery(this._queryConfig.method);\n }\n\n get _isInMockMode() {\n return !!this._arguments?.mock;\n }\n\n constructor(\n private readonly _client: V2QueryClient,\n\n /**\n * @internal\n */\n public readonly _queryConfig:\n | RestQueryConfig<Route, Response, Arguments, Store, Data, Id>\n | GqlQueryConfig<Route, Response, Arguments, Store, Data, Id>,\n\n /**\n * @internal\n */\n public readonly _routeWithParams: Route,\n\n /**\n * @internal\n */\n public readonly _arguments: Arguments,\n\n /**\n * @internal\n */\n public readonly _queryStoreKey: string,\n ) {}\n\n execute(options: ExecuteQueryOptions = {}) {\n const { skipCache = false, _triggeredVia: triggeredVia = 'program', cancelPrevious = false } = options;\n const { authProvider } = this._client;\n const queryConfig = this._queryConfig;\n\n if (!this.isExpired && !skipCache && isQueryStateSuccess(this.rawState)) {\n return this;\n }\n\n if (queryConfig.secure && !authProvider && !this._isInMockMode) {\n throw new Error('Cannot execute secure query without auth provider');\n }\n\n const id = this._nextId;\n const meta: QueryStateMeta = { id, triggeredVia };\n\n if (isQueryStateLoading(this.rawState)) {\n if (cancelPrevious) {\n this.abort();\n } else {\n return this;\n }\n }\n\n this._updateState({ type: QueryStateType.Loading, meta });\n\n if (this._isInMockMode) {\n this._mockRequest({}, meta, options);\n } else {\n let goSignal = of(true);\n\n if (\n authProvider &&\n isBearerAuthProvider(authProvider) &&\n queryConfig.secure &&\n !isQueryStateSuccess(authProvider.currentRefreshQuery?.rawState)\n ) {\n // On page load the query might be executed before the auth provider has been initialized.\n // In this case we need to wait for the auth provider to be ready before we can execute the query.\n goSignal = combineLatest([\n // The tokens might get set without a refresh query being created (e.g.) directly after login.\n authProvider.currentRefreshQuery$.pipe(switchQueryState(), takeUntilResponse()),\n authProvider.tokens$.pipe(take(1)),\n ]).pipe(\n takeUntil(this._onAbort$),\n switchMap(([state, tokens]) => {\n if (state && isQueryStateLoading(state)) {\n return EMPTY;\n }\n\n if (isQueryStateFailure(state)) {\n this._updateEntityState({ type: 'failure', error: state.error, headers: {} }, meta, options);\n return EMPTY;\n }\n\n if (!state && !(tokens?.token || tokens?.refreshToken)) {\n return EMPTY;\n }\n\n return of(true as const);\n }),\n take(1),\n );\n }\n\n goSignal\n .pipe(\n switchMap(() => {\n const method = computeQueryMethod({ config: queryConfig, client: this._client });\n const body = computeQueryBody({ config: queryConfig, client: this._client, args: this._arguments, method });\n const headers = computeQueryHeaders({ client: this._client, config: queryConfig, args: this._arguments });\n\n return request<Response>({\n urlWithParams: this._routeWithParams as string,\n method,\n body,\n headers,\n reportProgress: queryConfig.reportProgress,\n responseType: queryConfig.responseType,\n withCredentials: queryConfig.withCredentials,\n cacheAdapter: this._client.config.request?.cacheAdapter,\n retryFn: this._client.config.request?.retryFn,\n }).pipe(\n tap((state) => this._updateEntityState(state, meta, options)),\n takeUntil(this._onAbort$),\n );\n }),\n )\n\n .subscribe();\n }\n\n return this;\n }\n\n abort() {\n if (!isQueryStateLoading(this.rawState)) {\n return this;\n }\n\n this._onAbort$.next();\n\n this._updateState({\n type: QueryStateType.Cancelled,\n meta: { id: this.rawState.meta.id, triggeredVia: this.rawState.meta.triggeredVia },\n });\n\n return this;\n }\n\n poll(config: PollConfig) {\n if (this._pollingSubscription) {\n return this;\n }\n\n this._currentPollConfig = config;\n\n const interval$ = interval(config.interval);\n const poll$ = interval$.pipe(\n skip(config.triggerImmediately ? 0 : 1),\n takeUntil(config.takeUntil),\n takeWhile(() => !this._isPollingPaused),\n filter(() => !isQueryStateLoading(this._state$.value)),\n );\n\n this._pollingSubscription = poll$.subscribe({\n next: () => this.execute({ skipCache: true, _triggeredVia: 'poll' }),\n complete: () => this.stopPolling(),\n });\n\n return this;\n }\n\n stopPolling() {\n this._pollingSubscription?.unsubscribe();\n this._pollingSubscription = null;\n this._currentPollConfig = null;\n\n return this;\n }\n\n pausePolling() {\n this._pollingSubscription?.unsubscribe();\n this._pollingSubscription = null;\n\n this._isPollingPaused = true;\n\n return this;\n }\n\n resumePolling() {\n if (!this._isPollingPaused || !this._currentPollConfig) {\n return this;\n }\n\n this._isPollingPaused = false;\n\n return this.poll({ ...this._currentPollConfig, triggerImmediately: true });\n }\n\n onSuccess(callback: (response: Data) => void) {\n this.state$.pipe(takeUntilResponse(), filterSuccess()).subscribe((state) => callback(state.response));\n return this;\n }\n\n onFailure(callback: (error: RequestError<unknown>) => void) {\n this.state$.pipe(takeUntilResponse(), filterFailure()).subscribe((state) => callback(state.error));\n return this;\n }\n\n private _getBearerAuthProvider() {\n const authProvider = this._client.authProvider;\n\n if (authProvider && isBearerAuthProvider(authProvider)) {\n return authProvider;\n }\n\n return null;\n }\n\n private _updateEntityState(\n requestEvent: RequestEvent<Response>,\n meta: QueryStateMeta,\n options?: ExecuteQueryOptions,\n ) {\n switch (requestEvent.type) {\n case 'start':\n case 'delay-retry': {\n const { type, retryDelay, retryNumber } = requestEvent;\n const newMeta: QueryStateMeta = { ...meta, isWaitingForRetry: type === 'delay-retry', retryDelay, retryNumber };\n\n this._updateState({\n type: QueryStateType.Loading,\n meta: newMeta,\n });\n break;\n }\n\n case 'upload-progress':\n case 'download-progress': {\n this._updateState({\n type: QueryStateType.Loading,\n progress: requestEvent.progress,\n partialText: 'partialText' in requestEvent ? requestEvent.partialText : undefined,\n meta,\n });\n\n break;\n }\n\n case 'success': {\n const { response, expiresInTimestamp, headers } = requestEvent;\n const isGql = isGqlQueryConfig(this._queryConfig);\n const responseData =\n isGql && typeof response === 'object' && !!response && 'data' in response\n ? (response['data'] as Response)\n : (response as Response);\n\n if (this._queryConfig.entity && this._queryConfig.entity.set) {\n const id = this._queryConfig.entity?.id({ args: this._arguments, response: responseData });\n\n this._queryConfig.entity?.set({\n args: this._arguments,\n response: responseData,\n id,\n store: this._queryConfig.entity.store,\n });\n }\n\n this._updateState({\n type: QueryStateType.Success,\n response: responseData,\n headers: headers,\n meta: { ...meta, expiresAt: expiresInTimestamp },\n });\n\n break;\n }\n\n case 'failure': {\n const { error } = requestEvent;\n const failure = () => this._updateState({ type: QueryStateType.Failure, error, meta });\n const bearerAuthProvider = this._getBearerAuthProvider();\n\n if (\n !bearerAuthProvider ||\n options?._isUnauthorizedRetry ||\n error.status !== 401 ||\n !bearerAuthProvider.shouldRefreshOnUnauthorizedResponse\n ) {\n return failure();\n }\n\n const query = bearerAuthProvider._refreshQuery();\n if (!query) return failure();\n\n query.state$\n .pipe(\n takeUntilResponse(),\n takeUntil(this._onAbort$),\n tap((state) =>\n isQueryStateSuccess(state) ? this.execute({ ...options, _isUnauthorizedRetry: true }) : failure(),\n ),\n )\n .subscribe();\n\n break;\n }\n\n case 'cancel': {\n this._updateState({\n type: QueryStateType.Cancelled,\n meta,\n });\n\n break;\n }\n }\n }\n\n private _transformState(s: V2QueryState<Response>): Observable<V2QueryState<Data>> {\n if (!isQueryStateSuccess(s) || !this._queryConfig.entity?.get) {\n return of(s) as Observable<V2QueryState<Data>>;\n }\n\n const id = this._queryConfig.entity.id({ args: this._arguments, response: s.response });\n\n return this._queryConfig.entity\n .get({ args: this._arguments, id, response: s.response, store: this._queryConfig.entity.store })\n .pipe(map((v) => ({ ...s, response: v })));\n }\n\n private _updateState(s: V2QueryState<Response>) {\n // We need to use untracked here to avoid Angular's \"allowSignalWrites is false\" error when executing queries inside Angular's computed/effect signal functions.\n untracked(() => this._state$.next(s));\n }\n\n private _mockRequest(headers: RequestHeaders | undefined, meta: QueryStateMeta, options: ExecuteQueryOptions) {\n if (!this._arguments?.mock) return;\n\n const { delay = 200, error, response, retryIntoResponse = false, progress } = this._arguments.mock;\n const progressFileSize = progress?.fileSize ?? 1000000;\n const progressEventType = progress?.eventType ?? 'upload';\n const progressEventCount = progress?.eventCount ?? 5;\n const progressOmitTotal = progress?.omitTotal ?? false;\n const omitPartialText = progress?.omitPartialText ?? false;\n\n const finalResolveMock = () => {\n if (error) {\n this._updateEntityState({ error, headers: headers ?? {}, type: 'failure' }, meta, options);\n return;\n }\n\n this._updateEntityState(\n { response: response as Response, headers: headers ?? {}, type: 'success' },\n meta,\n options,\n );\n };\n\n if (progress) {\n interval(delay)\n .pipe(\n tap((a) => {\n if (a === progressEventCount + 1) {\n finalResolveMock();\n } else {\n const current = Math.min(progressFileSize * a, progressFileSize * progressEventCount);\n const percentage = (current / (progressFileSize * progressEventCount)) * 100;\n\n this._updateEntityState(\n {\n type: progressEventType === 'upload' ? 'upload-progress' : 'download-progress',\n headers: headers ?? {},\n progress: { current, ...(progressOmitTotal ? {} : { percentage, total: progressFileSize }) },\n partialText: omitPartialText ? undefined : `Partial text ${a}`,\n },\n meta,\n options,\n );\n }\n }),\n takeUntil(this._onAbort$),\n takeWhile((a) => a < progressEventCount + 1, true),\n )\n .subscribe();\n } else if (retryIntoResponse) {\n interval(delay)\n .pipe(\n tap((a) => {\n if (a === 3) {\n finalResolveMock();\n } else {\n const aModified = a + 1;\n this._updateEntityState(\n {\n type: 'delay-retry',\n headers: headers ?? {},\n retryDelay: 1000 + 1000 * aModified,\n retryNumber: aModified,\n },\n meta,\n options,\n );\n }\n }),\n takeUntil(this._onAbort$),\n takeWhile((a) => a < 3, true),\n )\n .subscribe();\n } else {\n timer(delay)\n .pipe(\n tap(() => finalResolveMock()),\n takeUntil(this._onAbort$),\n )\n .subscribe();\n }\n }\n\n /**\n * @internal\n */\n _addDependent(tNodeIndex: number) {\n if (!this._dependents[tNodeIndex]) {\n this._dependents[tNodeIndex] = 0;\n }\n\n this._dependents[tNodeIndex]++;\n\n this._dependentsChanged$.next(this._dependents);\n }\n\n /**\n * @internal\n */\n _removeDependent(tNodeIndex: number) {\n const count = this._dependents[tNodeIndex];\n if (count === undefined) {\n return;\n }\n\n if (this._dependents[tNodeIndex] !== undefined) {\n this._dependents[tNodeIndex]--;\n }\n\n if (count <= 1) {\n delete this._dependents[tNodeIndex];\n }\n\n this._dependentsChanged$.next(this._dependents);\n }\n\n /**\n * @internal\n */\n _hasDependents() {\n return Object.keys(this._dependents).length > 0;\n }\n}\n","import { AnyV2QueryCreator } from '../query-creator';\nimport { AuthProvider } from './auth-provider.types';\nimport { BasicAuthProvider } from './basic-auth-provider';\nimport { V2BearerAuthProvider } from './bearer-auth-provider';\nimport { CustomHeaderAuthProvider } from './custom-header-auth-provider';\n\nexport const isBasicAuthProvider = (authProvider: AuthProvider): authProvider is BasicAuthProvider =>\n authProvider instanceof BasicAuthProvider;\n\nexport const isBearerAuthProvider = <T extends AnyV2QueryCreator>(\n authProvider: AuthProvider,\n): authProvider is V2BearerAuthProvider<T> => authProvider instanceof V2BearerAuthProvider;\n\nexport const isCustomHeaderAuthProvider = (authProvider: AuthProvider): authProvider is CustomHeaderAuthProvider =>\n authProvider instanceof CustomHeaderAuthProvider;\n\nexport const decryptBearer = <Result = Record<string, unknown>>(token: string) => {\n try {\n const base64Url = token.split('.')[1];\n\n if (!base64Url) {\n return null;\n }\n\n const base64 = base64Url.replace(/-/g, '+').replace(/_/g, '/');\n const jsonPayload = decodeURIComponent(\n atob(base64)\n .split('')\n .map((c) => '%' + ('00' + c.charCodeAt(0).toString(16)).slice(-2))\n .join(''),\n );\n\n return JSON.parse(jsonPayload) as Result;\n } catch (error) {\n console.error(`Invalid bearer token: ${token}`, error);\n\n return null;\n }\n};\n","import { deleteCookie, getCookie, setCookie } from '@ethlete/core';\nimport { BehaviorSubject, Subject, takeUntil, tap, timer } from 'rxjs';\nimport {\n isQueryStateFailure,\n isQueryStateLoading,\n isQueryStateSuccess,\n switchQueryState,\n takeUntilResponse,\n} from '../query';\nimport { AnyV2QueryCreator, ConstructQuery, QueryResponseOf } from '../query-creator';\nimport {\n AuthBearerRefreshStrategy,\n AuthProvider,\n AuthProviderBearerConfig,\n TokenResponse,\n} from './auth-provider.types';\nimport { decryptBearer } from './auth-provider.utils';\n\nexport class V2BearerAuthProvider<T extends AnyV2QueryCreator> implements AuthProvider {\n private readonly _destroy$ = new Subject<boolean>();\n private readonly _currentRefreshQuery$ = new BehaviorSubject<ConstructQuery<T> | null>(null);\n\n private readonly _tokens$ = new BehaviorSubject<TokenResponse>({\n token: null,\n refreshToken: null,\n });\n\n get header() {\n return { Authorization: `Bearer ${this._tokens$.getValue().token}` };\n }\n\n get tokens$() {\n return this._tokens$.asObservable();\n }\n\n get tokens() {\n return this._tokens$.getValue();\n }\n\n get currentRefreshQuery$() {\n return this._currentRefreshQuery$.asObservable();\n }\n\n get currentRefreshQuery() {\n return this._currentRefreshQuery$.getValue();\n }\n\n get shouldRefreshOnUnauthorizedResponse() {\n return (\n !!this._config.refreshConfig &&\n (this._config.refreshConfig.refreshOnUnauthorizedResponse === undefined ||\n this._config.refreshConfig.refreshOnUnauthorizedResponse)\n );\n }\n\n constructor(public _config: AuthProviderBearerConfig<T>) {\n const cookieEnabled = _config.refreshConfig?.cookieEnabled ?? true;\n const cookieToken =\n _config.refreshConfig?.cookieName && cookieEnabled ? (getCookie(_config.refreshConfig.cookieName) ?? null) : null;\n\n this._tokens$.next({\n token: _config.token || null,\n refreshToken: _config.refreshConfig?.token || cookieToken || null,\n });\n\n if (!this.tokens.token && !this.tokens.refreshToken) {\n if (!_config.refreshConfig?.cookieName) {\n console.error(\n 'A BearerAuthProvider was created without token or refresh token. You should provide at least a cookieName where the refresh token might be stored.',\n );\n }\n\n return;\n }\n\n if (this.tokens.token) {\n this._prepareForRefresh();\n\n if (this.tokens.refreshToken && this._config.refreshConfig?.cookieName && cookieEnabled) {\n this._setCookie();\n }\n } else if (this.tokens.refreshToken) {\n this._refreshQuery();\n }\n }\n\n cleanUp(): void {\n this._destroy$.next(true);\n this._destroy$.unsubscribe();\n this._currentRefreshQuery$.next(null);\n\n if (this._config.refreshConfig?.cookieName) {\n this._deleteCookie();\n }\n }\n\n enableCookie() {\n if (!this._config.refreshConfig?.cookieName) {\n throw new Error('No cookie name was provided');\n }\n\n if (!this.tokens.refreshToken) {\n throw new Error('No refresh token was provided');\n }\n\n this._config.refreshConfig.cookieEnabled = true;\n\n this._setCookie();\n }\n\n disableCookie() {\n if (!this._config.refreshConfig?.cookieName) {\n throw new Error('No cookie name was provided');\n }\n\n this._config.refreshConfig.cookieEnabled = false;\n\n this._deleteCookie();\n }\n\n forceRefresh() {\n return this._refreshQuery();\n }\n\n private _setCookie() {\n if (!this._config.refreshConfig?.cookieName || !this.tokens.refreshToken) return;\n\n setCookie(\n this._config.refreshConfig.cookieName,\n this.tokens.refreshToken,\n this._config.refreshConfig.cookieExpiresInDays,\n this._config.refreshConfig.cookieDomain,\n this._config.refreshConfig.cookiePath,\n this._config.refreshConfig.cookieSameSite,\n );\n }\n\n private _deleteCookie() {\n if (!this._config.refreshConfig?.cookieName) return;\n\n deleteCookie(\n this._config.refreshConfig.cookieName,\n this._config.refreshConfig.cookiePath,\n this._config.refreshConfig.cookieDomain,\n );\n }\n\n private _prepareForRefresh() {\n if (!this.tokens.token || !this._config.refreshConfig) {\n return;\n }\n\n const bearer = decryptBearer(this.tokens.token);\n\n if (!bearer) {\n return;\n }\n\n const expiresInPropertyName = this._config.refreshConfig.expiresInPropertyName || 'exp';\n const expiresIn = bearer[expiresInPropertyName] as number | undefined;\n const fiveMinutes = 5 * 60 * 1000;\n const refreshBuffer = this._config.refreshConfig.refreshBuffer ?? fiveMinutes;\n\n if (expiresIn === undefined) {\n throw new Error(`Bearer token does not contain an '${expiresInPropertyName}' property`);\n }\n\n const remainingTime = new Date(expiresIn * 1000).getTime() - refreshBuffer - new Date().getTime();\n\n const strategy = this._config.refreshConfig.strategy ?? AuthBearerRefreshStrategy.BeforeExpiration;\n\n switch (strategy) {\n case AuthBearerRefreshStrategy.BeforeExpiration:\n timer(remainingTime)\n .pipe(takeUntil(this._destroy$))\n .subscribe(() => this._refreshQuery());\n break;\n }\n }\n\n /**\n * @internal\n */\n _refreshQuery() {\n const currentQuery = this._currentRefreshQuery$.getValue();\n\n if (isQueryStateLoading(currentQuery?.rawState)) {\n return currentQuery;\n }\n\n const currentRefreshToken = this.tokens.refreshToken;\n\n if (!currentRefreshToken || !this._config.refreshConfig) {\n return;\n }\n\n const args = this._config.refreshConfig.requestArgsAdapter?.({\n token: this.tokens.token,\n refreshToken: currentRefreshToken,\n }) ?? {\n body: { refreshToken: currentRefreshToken },\n };\n\n const query = this._config.refreshConfig.queryCreator\n .prepare(args)\n .execute({ skipCache: true, _isUnauthorizedRetry: true });\n\n this._currentRefreshQuery$.next(query as ConstructQuery<T>);\n\n this._currentRefreshQuery$\n .pipe(\n switchQueryState(),\n tap((state) => {\n if (isQueryStateSuccess(state)) {\n if (this._config.refreshConfig?.responseAdapter) {\n const tokens = this._config.refreshConfig.responseAdapter(state.response as QueryResponseOf<T>);\n\n this._tokens$.next(tokens);\n } else {\n this._tokens$.next({\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n token: (state.response as any)['token'],\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n refreshToken: (state.response as any)['refreshToken'],\n });\n }\n const cookieEnabled = this._config.refreshConfig?.cookieEnabled ?? true;\n\n if (this._config.refreshConfig?.cookieName && this.tokens.refreshToken && cookieEnabled) {\n this._setCookie();\n }\n\n this._prepareForRefresh();\n } else if (isQueryStateFailure(state)) {\n this._tokens$.next({ token: null, refreshToken: null });\n\n if (this._config.refreshConfig?.cookieName) {\n this._deleteCookie();\n }\n }\n }),\n takeUntilResponse(),\n takeUntil(this._destroy$),\n )\n .subscribe();\n\n return query;\n }\n}\n","import { signal } from '@angular/core';\nimport { toObservable } from '@angular/core/rxjs-interop';\nimport { createProvider } from '@ethlete/core';\n\nexport const [provideInfinityQueryResponseDelay, injectInfinityQueryResponseDelay] = createProvider(\n () => {\n const enabled = signal(false);\n const enabled$ = toObservable(enabled);\n\n return {\n enabled,\n enabled$,\n };\n },\n { name: 'Infinity Query Response Delay' },\n);\n","import { BehaviorSubject, Observable, combineLatest, map, of, shareReplay, switchMap, tap } from 'rxjs';\nimport { AnyLegacyQueryCreator } from '../interop';\nimport { filterSuccess } from '../query';\nimport { AnyV2QueryCreator, ConstructQuery, QueryDataOf, V2QueryArgsOf } from '../query-creator';\nimport { InfinityQueryConfig, InfinityQueryParamLocation } from './infinity-query.types';\n\nexport class InfinityQuery<\n QueryCreator extends AnyV2QueryCreator | AnyLegacyQueryCreator,\n Query extends ConstructQuery<QueryCreator>,\n Args extends V2QueryArgsOf<QueryCreator>,\n QueryResponse extends QueryDataOf<QueryCreator>,\n InfinityResponse extends unknown[],\n> {\n private readonly _queries$ = new BehaviorSubject<Query[]>([]);\n private readonly _currentPage$ = new BehaviorSubject<number | null>(null);\n private readonly _currentCalculatedPage$ = new BehaviorSubject<number | null>(null);\n private readonly _totalPages$ = new BehaviorSubject<number | null>(null);\n private readonly _itemsPerPage$ = new BehaviorSubject<number>(10);\n\n private readonly _data$ = this._queries$.pipe(\n switchMap((queries) => {\n if (!queries.length) {\n return of([]);\n }\n\n return combineLatest(\n queries.map((query) =>\n query.state$.pipe(\n filterSuccess(),\n map((state) => ({ state, query })),\n ),\n ),\n );\n }),\n tap((stateMaps) => {\n const lastState = stateMaps[stateMaps.length - 1]?.state;\n const lastQuery = stateMaps[stateMaps.length - 1]?.query;\n\n if (!lastState || !lastQuery) {\n return;\n }\n\n const totalPages =\n this._config.response.totalPagesExtractor?.({\n response: lastState.response as QueryResponse,\n itemsPerPage: this.itemsPerPage,\n args: lastQuery._arguments,\n }) ??\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n (lastState.response as any)?.totalPages ??\n null;\n\n this._totalPages$.next(totalPages);\n }),\n map((stateMaps) => {\n if (!stateMaps.length) {\n return null;\n }\n\n const fullData = stateMaps.reduce(\n (acc, stateMap) => {\n const valExtractFn = this._config?.response?.valueExtractor;\n let data = valExtractFn\n ? valExtractFn?.(stateMap.state.response as QueryResponse)\n : (stateMap.state.response as InfinityResponse);\n\n if (this._config.response.reverse) {\n data = [...data].reverse() as InfinityResponse;\n }\n\n if (this._config.response.appendItemsTo === 'start') {\n acc.unshift(...data);\n } else {\n acc.push(...data);\n }\n return acc;\n },\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n [] as any as InfinityResponse,\n );\n\n return fullData;\n }),\n shareReplay({ bufferSize: 1, refCount: true }),\n );\n\n private readonly _lastQuery$ = this._queries$.pipe(\n map((queries) => queries[queries.length - 1] ?? null),\n shareReplay({ bufferSize: 1, refCount: true }),\n );\n\n get currentPage$() {\n return this._currentPage$.asObservable();\n }\n\n get currentPage() {\n return this._currentPage$.getValue();\n }\n\n get currentCalculatedPage$() {\n return this._currentCalculatedPage$.asObservable();\n }\n\n get currentCalculatedPage() {\n return this._currentCalculatedPage$.getValue();\n }\n\n get totalPages$() {\n return this._totalPages$.asObservable();\n }\n\n get totalPages() {\n return this._totalPages$.getValue();\n }\n\n get itemsPerPage$() {\n return this._itemsPerPage$.asObservable();\n }\n\n get itemsPerPage() {\n return this._itemsPerPage$.getValue();\n }\n\n get data$() {\n return this._data$;\n }\n\n get currentQuery$() {\n return this._lastQuery$;\n }\n\n constructor(\n private _config: InfinityQueryConfig<QueryCreator, Args, QueryResponse, InfinityResponse>,\n private _destroy$: Observable<boolean>,\n ) {\n this._itemsPerPage$.next(this._config.limitParam?.value ?? 10);\n }\n\n nextPage() {\n const newPage = (this._currentPage$.value ?? 0) + 1;\n const calculatedPage =\n this._config?.pageParam?.valueCalculator?.({\n page: newPage,\n totalPages: this.totalPages,\n itemsPerPage: this.itemsPerPage,\n }) ?? newPage;\n\n if (this.totalPages !== null && newPage > this.totalPages) {\n console.error(\n 'Cannot load more pages, already at the end. Make sure to not render the infinity query trigger using *ngIf canLoadMore',\n );\n return;\n }\n\n const args = this._prepareArgs(this._config, calculatedPage);\n\n const query = this._config.queryCreator.prepare(args).execute() as Query;\n\n if (this._config.pollingInterval) {\n query.poll({ interval: this._config.pollingInterval, takeUntil: this._destroy$ });\n }\n\n this._queries$.next([...this._queries$.value, query]);\n\n this._currentPage$.next(newPage);\n this._currentCalculatedPage$.next(calculatedPage);\n }\n\n reset(\n newConfig?: Omit<\n InfinityQueryConfig<QueryCreator, Args, QueryResponse, InfinityResponse>,\n 'queryCreator' | 'response'\n >,\n ) {\n this._config = { ...this._config, ...(newConfig ?? {}) };\n\n this._currentPage$.next(null);\n this._currentCalculatedPage$.next(null);\n this._totalPages$.next(null);\n this._itemsPerPage$.next(this._config.limitParam?.value ?? 10);\n this._queries$.next([]);\n\n this.nextPage();\n }\n\n private _prepareArgs(config: InfinityQueryConfig<QueryCreator, Args, QueryResponse, InfinityResponse>, page: number) {\n const pageParamLocation = this._getPageParamLocation(config?.pageParam?.location);\n\n const pageArgs = {\n [pageParamLocation]: {\n [config?.pageParam?.key ?? 'page']: page,\n },\n };\n\n const limitParamLocation = this._getPageParamLocation(config?.limitParam?.location);\n\n const limitArgs = {\n [limitParamLocation]: {\n [config?.limitParam?.key ?? 'limit']: config?.limitParam?.value ?? 10,\n },\n };\n\n const defaultConfig = config?.defaultArgs ?? {};\n\n const mergedArgs =\n pageParamLocation === limitParamLocation\n ? {\n ...defaultConfig,\n [pageParamLocation]: {\n ...(config?.defaultArgs?.[pageParamLocation] ?? {}),\n ...pageArgs[limitParamLocation],\n ...limitArgs[limitParamLocation],\n },\n }\n : {\n ...defaultConfig,\n [pageParamLocation]: {\n ...(config?.defaultArgs?.[pageParamLocation] ?? {}),\n ...pageArgs[pageParamLocation],\n },\n [limitParamLocation]: {\n ...(config?.defaultArgs?.[limitParamLocation] ?? {}),\n ...limitArgs[limitParamLocation],\n },\n };\n\n return mergedArgs;\n }\n\n private _getPageParamLocation(location: InfinityQueryParamLocation | undefined) {\n const loc = location ?? 'query';\n\n switch (loc) {\n case 'path':\n return 'pathParams';\n case 'query':\n return 'queryParams';\n case 'body':\n return 'body';\n case 'header':\n return 'headers';\n case 'variable':\n return 'variables';\n default:\n throw new Error(`Invalid pageParamLocation: ${loc}`);\n }\n }\n}\n","import { AnyLegacyQueryCreator } from '../interop';\nimport { AnyV2QueryCreator, QueryDataOf, V2QueryArgsOf } from '../query-creator';\nimport { InfinityQueryConfig, PageParamCalculatorOptions } from './infinity-query.types';\n\nexport const createInfinityQueryConfig = <\n QueryCreator extends AnyV2QueryCreator | AnyLegacyQueryCreator,\n Args extends V2QueryArgsOf<QueryCreator>,\n QueryResponse extends QueryDataOf<QueryCreator>,\n InfinityResponse extends unknown[],\n>(\n config: InfinityQueryConfig<QueryCreator, Args, QueryResponse, InfinityResponse>,\n) => config;\n\nexport const skipPaginationPageParamCalculator = ({ page, itemsPerPage }: PageParamCalculatorOptions) =>\n itemsPerPage * (page - 1);\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport {\n ChangeDetectorRef,\n Directive,\n ErrorHandler,\n inject,\n InjectionToken,\n Input,\n TemplateRef,\n ViewContainerRef,\n} from '@angular/core';\nimport { toSignal } from '@angular/core/rxjs-interop';\nimport { createDestroy } from '@ethlete/core';\nimport { BehaviorSubject, combineLatest, Subject, takeUntil, tap, withLatestFrom } from 'rxjs';\nimport { InfinityQuery, InfinityQueryConfig, InfinityQueryOf } from '../infinite-query';\nimport { AnyLegacyQueryCreator, isLegacyQuery } from '../interop';\nimport {\n BaseArguments,\n isQueryStateFailure,\n isQueryStateLoading,\n isQueryStateSuccess,\n switchQueryState,\n} from '../query';\nimport { AnyV2QueryCreator, ConstructQuery } from '../query-creator';\nimport { RequestError } from '../request';\nimport {\n injectInfinityQueryResponseDelay,\n provideInfinityQueryResponseDelay,\n} from './infinity-query-response-delay-provider';\n\ntype InfinityQueryContext<\n Q extends InfinityQueryConfig<DirectiveQueryCreator, BaseArguments | undefined, any, unknown[]>,\n> = {\n $implicit: Q['response']['arrayType'] | null;\n etInfinityQuery: Q['response']['arrayType'] | null;\n loading: boolean;\n error: RequestError<unknown> | null;\n\n isFirstLoad: boolean;\n canLoadMore: boolean;\n currentPage: number | null;\n currentCalculatedPage: number | null;\n totalPages: number | null;\n itemsPerPage: number | null;\n\n currentQuery: ConstructQuery<Q['queryCreator']> | null;\n};\n\nexport const INFINITY_QUERY_TOKEN = new InjectionToken<InfinityQueryDirective<any>>('INFINITY_QUERY_TOKEN');\n\ntype DirectiveQueryCreator = AnyV2QueryCreator | AnyLegacyQueryCreator;\n\n@Directive({\n selector: '[etInfinityQuery]',\n exportAs: 'etInfinityQuery',\n\n providers: [\n { provide: INFINITY_QUERY_TOKEN, useExisting: InfinityQueryDirective },\n provideInfinityQueryResponseDelay(),\n ],\n})\nexport class InfinityQueryDirective<\n Q extends InfinityQueryConfig<DirectiveQueryCreator, BaseArguments | undefined, any, unknown[]>,\n> {\n private readonly _queryConfigChanged$ = new Subject<boolean>();\n private readonly _viewContext: InfinityQueryContext<Q> = {\n $implicit: null,\n etInfinityQuery: null,\n loading: false,\n error: null,\n\n isFirstLoad: false,\n canLoadMore: false,\n currentPage: null,\n currentCalculatedPage: null,\n totalPages: null,\n itemsPerPage: null,\n\n currentQuery: null,\n };\n private _infinityQueryInstance: InfinityQueryOf<Q> | null = null;\n\n private readonly _destroy$ = createDestroy();\n private readonly _cdr = inject(ChangeDetectorRef);\n private readonly _viewContainerRef = inject(ViewContainerRef);\n private readonly _mainTemplateRef = inject(TemplateRef<InfinityQueryContext<Q>>);\n private readonly _errorHandler = inject(ErrorHandler);\n private readonly _infinityQueryResponseDelay = injectInfinityQueryResponseDelay({ host: true });\n\n private readonly _data$ = new BehaviorSubject<Q['response']['arrayType']>([]);\n\n // TODO: Skipped for migration because:\n // Accessor inputs cannot be migrated as they are too complex.\n @Input('etInfinityQuery')\n get infinityQuery(): Q {\n return this._infinityQuery;\n }\n set infinityQuery(v: Q) {\n this._cleanup();\n\n if (v.enabled === false) {\n this._infinityQuery = v;\n this._infinityQueryInstance = null;\n return;\n }\n\n this._infinityQuery = v;\n this._infinityQueryInstance = this._setupInfinityQuery(v);\n this._infinityQueryInstance.nextPage();\n }\n private _infinityQuery!: Q;\n\n get context() {\n return this._viewContext;\n }\n\n get instance() {\n return this._infinityQueryInstance;\n }\n\n get data$() {\n return this._data$.asObservable();\n }\n\n data = toSignal(this._data$, { requireSync: true });\n\n static ngTemplateContextGuard<\n Q extends InfinityQueryConfig<DirectiveQueryCreator, BaseArguments | undefined, any, unknown[]>,\n >(dir: InfinityQueryDirective<Q>, ctx: unknown): ctx is InfinityQueryContext<Q> {\n return true;\n }\n\n constructor() {\n this._viewContainerRef.createEmbeddedView(this._mainTemplateRef, this._viewContext);\n }\n\n private _setupInfinityQuery(config: Q) {\n const instance = new InfinityQuery(config as any, this._destroy$) as InfinityQueryOf<Q>;\n\n combineLatest([\n instance.currentQuery$.pipe(switchQueryState(), withLatestFrom(instance.currentQuery$)),\n this._infinityQueryResponseDelay.enabled$,\n instance.data$,\n ])\n .pipe(\n tap(([[state, currentQuery], isDelayed, infinityArray]) => {\n this._viewContext.currentPage = instance.currentPage;\n this._viewContext.totalPages = instance.totalPages;\n this._viewContext.itemsPerPage = instance.itemsPerPage;\n this._viewContext.canLoadMore =\n (instance.totalPages !== null &&\n instance.currentPage !== null &&\n instance.totalPages > instance.currentPage) ||\n false;\n this._viewContext.currentCalculatedPage = instance.currentCalculatedPage;\n this._viewContext.currentQuery = currentQuery;\n\n if (isQueryStateLoading(state) || isDelayed || !infinityArray) {\n this._viewContext.loading = state ? state.meta.triggeredVia !== 'poll' : true;\n this._viewContext.error = null;\n this._viewContext.isFirstLoad = this.context.etInfinityQuery === null;\n } else if (isQueryStateFailure(state)) {\n this._viewContext.loading = false;\n this._viewContext.error = state.error;\n this._viewContext.isFirstLoad = false;\n\n if (isLegacyQuery(currentQuery)) {\n this._errorHandler.handleError(state.error.httpErrorResponse);\n }\n } else if (isQueryStateSuccess(state)) {\n this._viewContext.loading = false;\n this._viewContext.error = null;\n this._viewContext.isFirstLoad = false;\n this._viewContext.etInfinityQuery = this._viewContext.$implicit =\n infinityArray as Q['response']['arrayType'];\n this._data$.next(infinityArray);\n }\n\n this._cdr.markForCheck();\n }),\n takeUntil(this._destroy$),\n takeUntil(this._queryConfigChanged$),\n )\n .subscribe();\n\n return instance;\n }\n\n loadNextPage() {\n if (!this._infinityQueryInstance) {\n return;\n }\n\n if (this._viewContext.loading) {\n return;\n }\n\n this._infinityQueryInstance.nextPage();\n }\n\n reset(newConfig?: Omit<Q, 'queryCreator' | 'response'>) {\n if (!this._infinityQueryInstance) {\n return;\n }\n\n this._infinityQueryInstance.reset(newConfig as any);\n }\n\n private _cleanup() {\n this._queryConfigChanged$.next(true);\n\n this._viewContext.loading = false;\n this._viewContext.error = null;\n this._viewContext.etInfinityQuery = null;\n this._viewContext.$implicit = null;\n\n this._viewContext.isFirstLoad = false;\n this._viewContext.canLoadMore = false;\n this._viewContext.currentPage = null;\n this._viewContext.itemsPerPage = null;\n this._viewContext.totalPages = null;\n\n this._viewContext.currentQuery = null;\n\n this._data$.next([]);\n }\n}\n","import { computed, Directive, ElementRef, inject, input, OnDestroy, OnInit } from '@angular/core';\nimport { fromEvent, Subject, takeUntil } from 'rxjs';\nimport { INFINITY_QUERY_TOKEN, InfinityQueryDirective } from './infinity-query.directive';\n\n@Directive({\n selector: '[etInfinityQueryTrigger], et-infinity-query-trigger',\n})\nexport class InfinityQueryTriggerDirective implements OnInit, OnDestroy {\n private _elementRef = inject(ElementRef<HTMLElement>);\n private _infinityQuery = inject(INFINITY_QUERY_TOKEN);\n\n private _destroy = new Subject<boolean>();\n private _observer: IntersectionObserver | null = null;\n\n click$ = fromEvent(this._elementRef.nativeElement, 'click');\n\n readonly scrollContainerSelector = input<string | null>(null);\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n infinityQueryOverride = input<InfinityQueryDirective<any> | null>(null);\n\n infinityQuery = computed(() => this.infinityQueryOverride() ?? this._infinityQuery);\n\n ngOnInit(): void {\n const isInteractive = this._elementRef.nativeElement.tagName === 'BUTTON';\n\n if (isInteractive) {\n this.click$.pipe(takeUntil(this._destroy)).subscribe(() => this.infinityQuery().loadNextPage());\n } else {\n this._setupIntersectionObserver();\n }\n }\n\n ngOnDestroy(): void {\n this._destroy.next(true);\n this._destroy.unsubscribe();\n this._observer?.disconnect();\n }\n\n private _setupIntersectionObserver(): void {\n const scrollContainerSelector = this.scrollContainerSelector();\n this._observer = new IntersectionObserver(\n (entries) => {\n const entry = entries[0];\n\n if (!entry) return;\n\n if (entry.isIntersecting && !this.infinityQuery().context.loading) {\n this.infinityQuery().loadNextPage();\n }\n },\n {\n root: scrollContainerSelector ? document.querySelector(scrollContainerSelector) : null,\n rootMargin: '0px',\n threshold: [0.25, 0.5, 0.75, 1],\n },\n );\n\n this._observer.observe(this._elementRef.nativeElement);\n }\n}\n","import {\n ChangeDetectorRef,\n Directive,\n ErrorHandler,\n TemplateRef,\n ViewContainerRef,\n effect,\n inject,\n input,\n untracked,\n} from '@angular/core';\nimport { AnyLegacyQuery, isLegacyQuery } from '../interop';\nimport {\n AnyQueryCollection,\n AnyV2Query,\n QueryCollectionKeysOf,\n QueryOf,\n extractQuery,\n isQueryCollection,\n isQueryStateCancelled,\n isQueryStateFailure,\n isQueryStateLoading,\n isQueryStatePrepared,\n isQueryStateSuccess,\n} from '../query';\nimport { QueryDataOf } from '../query-creator';\nimport { RequestError, RequestProgress } from '../request';\nimport { queryStateSignal } from '../utils';\n\nexport type QueryDirectiveContext<Q extends QueryDirectiveType | null> = {\n /**\n * The queries's response data.\n */\n $implicit: QueryDataOf<QueryOf<Q>> | null;\n\n /**\n * The queries's response data.\n */\n etQuery: QueryDataOf<QueryOf<Q>> | null;\n\n /**\n * The query used inside this directive. Useful if for instance the query gets unwrapped via async pipe inside the directive.\n */\n query: QueryOf<Q> | null;\n\n /**\n * Is true when the query is triggered by user interaction.\n */\n loading: boolean;\n\n /**\n * Is true when the query is triggered by either polling or auto refresh event.\n */\n refreshing: boolean;\n\n /**\n * The query's progress state.\n */\n progress: RequestProgress | null;\n\n /**\n * The query's error state.\n */\n error: RequestError<unknown> | null;\n\n /**\n * The query's scope (only available when the query is a collection)\n */\n scope: QueryCollectionKeysOf<Q> | null;\n};\n\nexport type QueryDirectiveType = AnyV2Query | AnyLegacyQuery | AnyQueryCollection;\n\n@Directive({\n selector: '[etQuery]',\n})\nexport class QueryDirective<Q extends QueryDirectiveType | null> {\n private errorHandler = inject(ErrorHandler);\n private cdr = inject(ChangeDetectorRef);\n\n private readonly _viewContext: QueryDirectiveContext<Q> = {\n $implicit: null,\n etQuery: null,\n loading: false,\n refreshing: false,\n error: null,\n progress: null,\n scope: null,\n query: null,\n };\n\n query = input.required<Q>({ alias: 'etQuery' });\n\n cache = input(false, { alias: 'etQueryCache' });\n\n queryState = queryStateSignal(this.query);\n\n static ngTemplateContextGuard<Q extends QueryDirectiveType | null>(\n dir: QueryDirective<Q>,\n ctx: unknown,\n ): ctx is QueryDirectiveContext<Q> {\n return true;\n }\n\n constructor() {\n inject(ViewContainerRef).createEmbeddedView(inject(TemplateRef), this._viewContext);\n\n effect(() => {\n const query = extractQuery(this.query());\n\n untracked(() => {\n if (!query) {\n this._viewContext.$implicit = null;\n this._viewContext.etQuery = null;\n this._viewContext.loading = false;\n this._viewContext.refreshing = false;\n this._viewContext.error = null;\n this._viewContext.progress = null;\n this._viewContext.scope = null;\n this._viewContext.query = null;\n return;\n }\n\n if (isQueryStatePrepared(query.rawState) || isQueryStateCancelled(query.rawState)) {\n query.execute();\n }\n\n this._viewContext.scope = isQueryCollection(query) ? (query.type as QueryCollectionKeysOf<Q>) : null;\n this._viewContext.query = query as QueryOf<Q>;\n });\n });\n\n effect(() => {\n const state = this.queryState();\n const cache = this.cache();\n\n untracked(() => {\n if (isQueryStateLoading(state)) {\n this._viewContext.progress = state.progress ?? null;\n this._viewContext.refreshing = state.meta.triggeredVia === 'auto' || state.meta.triggeredVia === 'poll';\n\n if (!this._viewContext.refreshing) {\n this._viewContext.loading = true;\n }\n } else {\n this._viewContext.loading = false;\n this._viewContext.refreshing = false;\n this._viewContext.progress = null;\n }\n\n if (isQueryStateSuccess(state)) {\n this._viewContext.etQuery = state.response as QueryDataOf<QueryOf<Q>>;\n this._viewContext.$implicit = state.response as QueryDataOf<QueryOf<Q>>;\n } else if (!cache) {\n this._viewContext.etQuery = null;\n this._viewContext.$implicit = null;\n }\n\n if (isQueryStateFailure(state)) {\n this._viewContext.error = state.error;\n\n if (isLegacyQuery(extractQuery(this.query()))) {\n this.errorHandler.handleError(state.error.httpErrorResponse);\n }\n } else {\n this._viewContext.error = null;\n }\n\n this.cdr.markForCheck();\n });\n });\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { AnyV2Query } from '../../query';\n\n@Pipe({ name: 'queryShortName' })\nexport class QueryShortNamePipe implements PipeTransform {\n transform(value: AnyV2Query) {\n const route = value._routeWithParams;\n\n if (typeof route === 'string') {\n // given an url that looks like this: https://api.github.com/repos/EladBezalel/etimo-achievements or https://api.github.com/repos/EladBezalel/etimo-achievements?test=1&test2=2\n // we want to extract the last 3 parts of the url, so we get: repos/EladBezalel/etimo-achievements\n\n const parts = route.split('/');\n\n if (parts.length > 3) {\n return `.../${parts.slice(parts.length - 3).join('/')}`;\n }\n\n return route;\n }\n\n return route as string;\n }\n}\n","import { InjectionToken, isDevMode } from '@angular/core';\nimport { V2QueryClient } from '../../query-client';\n\nexport type QueryClientDevtoolsOptions = {\n displayName?: string;\n client: V2QueryClient;\n};\n\nexport const QUERY_CLIENT_DEVTOOLS_TOKEN = new InjectionToken<QueryClientDevtoolsOptions[]>(\n 'QUERY_CLIENT_DEVTOOLS_TOKEN',\n);\n\nexport const provideQueryClientForDevtools = (queryClient: QueryClientDevtoolsOptions) => {\n if (!isDevMode()) {\n console.warn(\n 'You are using the Query Devtools in production mode. This increases the size of your bundle and should only be used for development purposes.',\n );\n }\n\n return {\n provide: QUERY_CLIENT_DEVTOOLS_TOKEN,\n useValue: queryClient,\n multi: true,\n };\n};\n","import { AsyncPipe, JsonPipe, NgClass } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n TrackByFunction,\n ViewEncapsulation,\n computed,\n effect,\n inject,\n signal,\n untracked,\n} from '@angular/core';\nimport { takeUntilDestroyed, toObservable, toSignal } from '@angular/core/rxjs-interop';\nimport { FormControl, ReactiveFormsModule } from '@angular/forms';\nimport { createDestroy, nextFrame } from '@ethlete/core';\nimport { BehaviorSubject, map, of, startWith, switchMap, takeUntil, tap } from 'rxjs';\nimport { BasicAuthProvider, CustomHeaderAuthProvider, isBearerAuthProvider } from '../../../auth';\nimport { QueryDirective } from '../../../directives';\nimport { EntityStore } from '../../../entity';\nimport { AnyV2Query, isGqlQueryConfig } from '../../../query';\nimport { QueryShortNamePipe } from '../../pipes';\nimport { QUERY_CLIENT_DEVTOOLS_TOKEN, QueryClientDevtoolsOptions } from '../../utils';\n\ntype QueryDevtoolsSnapLayout = 'full' | 'left' | 'right' | 'bottom' | 'top';\ntype QueryListMode = 'live' | 'history';\ntype QueryViewMode = 'query' | 'authProvider';\n\n@Component({\n selector: 'et-query-devtools',\n templateUrl: './query-devtools.component.html',\n styleUrls: ['./query-devtools.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.ShadowDom,\n host: {\n class: 'et-query-devtools',\n },\n imports: [AsyncPipe, JsonPipe, ReactiveFormsModule, NgClass, QueryShortNamePipe, QueryDirective],\n})\nexport class QueryDevtoolsComponent {\n private readonly _cdr = inject(ChangeDetectorRef);\n protected readonly _destroy$ = createDestroy();\n\n protected readonly queryClientConfigs = inject(QUERY_CLIENT_DEVTOOLS_TOKEN);\n\n protected readonly isOpen = signal(false);\n protected readonly isTranslucent = signal(false);\n protected readonly snapLayout = signal<QueryDevtoolsSnapLayout>('full');\n protected readonly queryListMode = signal<QueryListMode>('live');\n protected readonly viewMode = signal<QueryViewMode>('query');\n\n protected showResponse = signal(false);\n protected showRawResponse = signal(false);\n protected showQueryConfig = signal(false);\n protected showEntityStoreValue = signal(false);\n protected showArguments = signal(false);\n\n protected selectedClientIdCtrl = new FormControl(0);\n\n protected readonly selectedClientId = toSignal(\n this.selectedClientIdCtrl.valueChanges.pipe(startWith(this.selectedClientIdCtrl.value)),\n );\n protected readonly selectedQueryId = signal<number | null>(null);\n\n protected readonly selectedClientConfig = computed(() => {\n if (this.queryClientConfigs.length === 1) {\n return this.queryClientConfigs[0]!;\n }\n\n const index = this.selectedClientId() ?? 0;\n\n const cfg = this.queryClientConfigs[index];\n\n if (!cfg) {\n return this.queryClientConfigs[0]!;\n }\n\n return cfg;\n });\n\n protected readonly queryStore = computed(() => {\n const config = this.selectedClientConfig();\n\n return config.client._store;\n });\n\n protected readonly queryStore$ = toObservable(this.queryStore);\n\n private readonly _queries$ = new BehaviorSubject<AnyV2Query[]>([]);\n protected readonly queries = toSignal(this._queries$);\n\n protected readonly selectedQuery = computed(() => {\n const id = this.selectedQueryId();\n const mode = this.queryListMode();\n\n if (id === null || !mode) {\n return null;\n }\n\n if (mode === 'live') {\n return this.queries()?.find((q) => q._id === id) ?? null;\n }\n\n return this.queryHistory$.getValue()?.find((q) => q._id === id) ?? null;\n });\n\n protected readonly selectedQuery$ = toObservable(this.selectedQuery);\n\n protected selectedQueryEntityStore = computed(() => {\n const query = this.selectedQuery();\n\n if (!query) return null;\n\n return query.store as EntityStore<unknown> | null;\n });\n\n protected readonly selectedQueryEntityStore$ = toObservable(this.selectedQueryEntityStore);\n\n protected readonly selectedQueryEntityStoreValue$ = this.selectedQueryEntityStore$.pipe(\n switchMap(\n (s) =>\n s?._change$.pipe(\n startWith(''),\n map(() => {\n if (!s._dictionary) return null;\n\n return Array.from(s._dictionary).reduce(\n (obj, [key, value]) => {\n obj[key] = value;\n return obj;\n },\n {} as Record<string, unknown>,\n );\n }),\n ) ?? of(null),\n ),\n );\n\n protected readonly queryHistory$ = new BehaviorSubject<AnyV2Query[]>([]);\n\n protected readonly stringifiedQueryConfig = computed(() => {\n const query = this.selectedQuery();\n\n if (!query) return null;\n\n const cfg = query._queryConfig;\n const route =\n typeof cfg.route === 'string' ? cfg.route : cfg.route ? cfg.route({}).replace(/undefined/g, ':param') : null;\n\n const sharedCfg = {\n method: cfg.method,\n secure: cfg.secure,\n route,\n reportProgress: cfg.reportProgress,\n responseType: cfg.responseType,\n withCredentials: cfg.withCredentials,\n autoRefreshOn: cfg.autoRefreshOn,\n enableSmartPolling: cfg.enableSmartPolling,\n hasEntityStore: !!cfg.entity,\n };\n\n if (isGqlQueryConfig(cfg)) {\n return {\n ...sharedCfg,\n query: cfg.query,\n transferVia: cfg.transferVia,\n };\n }\n\n return {\n ...sharedCfg,\n };\n });\n\n protected readonly authProvider = toSignal(\n toObservable(this.selectedClientConfig).pipe(switchMap((c) => c.client.authProvider$)),\n );\n\n protected readonly authProviderDetails = computed(() => {\n const provider = this.authProvider();\n\n if (!provider) return null;\n\n if (provider instanceof CustomHeaderAuthProvider) {\n return {\n type: 'CustomHeaderAuthProvider',\n header: () => provider.header,\n provider: provider,\n config: {\n name: provider._config.name,\n value: provider._config.value,\n },\n } as const;\n } else if (provider instanceof BasicAuthProvider) {\n return {\n type: 'BasicAuthProvider',\n header: () => provider.header,\n provider: provider,\n config: {\n username: provider._config.username,\n password: provider._config.password,\n },\n } as const;\n } else if (isBearerAuthProvider(provider)) {\n const refreshCfg = provider._config.refreshConfig;\n\n return {\n type: 'BearerAuthProvider',\n header: () => provider.header,\n provider: provider,\n config: {\n token: provider._config.token,\n refreshConfig: {\n refreshOnUnauthorizedResponse: refreshCfg?.refreshOnUnauthorizedResponse ?? 'true (default)',\n token: refreshCfg?.token,\n cookieName: refreshCfg?.cookieName,\n cookieDomain: refreshCfg?.cookieDomain ?? 'current origin (default)',\n cookieExpiresInDays: refreshCfg?.cookieExpiresInDays ?? '30 (default)',\n cookiePath: refreshCfg?.cookiePath ?? '/ (default)',\n cookieEnabled: refreshCfg?.cookieEnabled ?? 'true (default)',\n cookieSameSite: refreshCfg?.cookieSameSite ?? 'lax (default)',\n refreshBuffer: refreshCfg?.refreshBuffer ?? '30000 (default)',\n expiresInPropertyName: refreshCfg?.expiresInPropertyName ?? 'exp (default)',\n strategy: refreshCfg?.strategy ?? 'AuthBearerRefreshStrategy.BeforeExpiration (default)',\n requestArgsAdapter: refreshCfg?.requestArgsAdapter ? 'custom' : 'default',\n responseAdapter: refreshCfg?.responseAdapter ? 'custom' : 'default',\n },\n },\n } as const;\n } else {\n return {\n type: 'UnknownAuthProvider',\n header: () => provider.header,\n provider: provider,\n config: {},\n } as const;\n }\n });\n\n constructor() {\n this.selectedClientIdCtrl.valueChanges\n .pipe(\n tap(() => this.clearQueryHistory()),\n takeUntil(this._destroy$),\n )\n .subscribe();\n\n this.selectedQuery$\n .pipe(\n switchMap((q) => q?._dependentsChanged$ ?? of(null)),\n tap(() => this._cdr.markForCheck()),\n takeUntilDestroyed(),\n )\n .subscribe();\n\n toObservable(this.authProviderDetails)\n .pipe(switchMap((ap) => (ap?.type === 'BearerAuthProvider' ? ap.provider.tokens$ : of(null))))\n .pipe(\n tap(() => this._cdr.markForCheck()),\n takeUntilDestroyed(),\n )\n .subscribe();\n\n this.queryStore$\n .pipe(\n switchMap((s) =>\n s.storeChange$.pipe(\n startWith(''),\n map(() => s._store),\n tap((s) => {\n untracked(() => {\n this._queries$.next(Array.from(s.values()));\n });\n }),\n takeUntil(this._destroy$),\n ),\n ),\n )\n .subscribe();\n\n this.queryStore$\n .pipe(\n switchMap((s) =>\n s.queryCreated$.pipe(\n tap((query) => {\n const currentHistory = this.queryHistory$.getValue();\n\n if (!currentHistory) return;\n\n const currentHistoryClone = [...currentHistory];\n\n if (!currentHistory.some((q) => q._id === query._id)) {\n currentHistoryClone.unshift(query);\n }\n\n currentHistoryClone.splice(50);\n\n this.queryHistory$.next(currentHistoryClone);\n }),\n takeUntil(this._destroy$),\n ),\n ),\n )\n .subscribe();\n\n this._queries$\n .pipe(\n tap((queries) => {\n const currentHistory = this.queryHistory$.getValue();\n\n if (!queries || !currentHistory) return;\n\n const currentHistoryClone = [...currentHistory];\n\n for (const query of queries) {\n if (!currentHistoryClone.some((q) => q._id === query._id)) {\n currentHistoryClone.unshift(query);\n }\n }\n\n currentHistoryClone.splice(50);\n\n this.queryHistory$.next(currentHistoryClone);\n }),\n takeUntil(this._destroy$),\n )\n .subscribe();\n\n effect(() => {\n const devtoolConfig = {\n isOpen: this.isOpen(),\n isTranslucent: this.isTranslucent(),\n snapLayout: this.snapLayout(),\n showResponse: this.showResponse(),\n showRawResponse: this.showRawResponse(),\n showQueryConfig: this.showQueryConfig(),\n showEntityStoreValue: this.showEntityStoreValue(),\n showArguments: this.showArguments(),\n selectedClientId: this.selectedClientId(),\n selectedQueryPath: this.selectedQueryId(),\n queryListMode: this.queryListMode(),\n viewMode: this.viewMode(),\n };\n\n window.localStorage.setItem('ethlete:query:devtools', JSON.stringify(devtoolConfig));\n });\n\n const initialConfig = window.localStorage.getItem('ethlete:query:devtools');\n\n if (initialConfig) {\n const parsed = JSON.parse(initialConfig);\n\n this.isOpen.set(parsed.isOpen ?? false);\n this.isTranslucent.set(parsed.isTranslucent ?? false);\n this.snapLayout.set(parsed.snapLayout ?? 'full');\n this.showResponse.set(parsed.showResponse ?? false);\n this.showRawResponse.set(parsed.showRawResponse ?? false);\n this.showQueryConfig.set(parsed.showQueryConfig ?? false);\n this.showEntityStoreValue.set(parsed.showEntityStoreValue ?? false);\n this.showArguments.set(parsed.showArguments ?? false);\n this.selectedClientIdCtrl.setValue(parsed.selectedClientId ?? 0);\n this.selectedQueryId.set(parsed.selectedQueryPath ?? null);\n this.queryListMode.set(parsed.queryListMode ?? 'live');\n this.viewMode.set(parsed.viewMode ?? 'query');\n }\n }\n\n protected trackByClient: TrackByFunction<QueryClientDevtoolsOptions> = (_, { client }) => client.config.baseRoute;\n protected trackByQuery: TrackByFunction<AnyV2Query> = (_, { _id }) => _id;\n\n protected toggleOpen() {\n this.isOpen.set(!this.isOpen());\n }\n\n protected toggleTranslucent() {\n this.isTranslucent.set(!this.isTranslucent());\n }\n\n protected toggleShowResponse() {\n this.showResponse.set(!this.showResponse());\n\n nextFrame(() => {\n this._cdr.markForCheck();\n });\n }\n\n protected toggleShowQueryConfig() {\n this.showQueryConfig.set(!this.showQueryConfig());\n }\n\n protected toggleShowRawResponse() {\n this.showRawResponse.set(!this.showRawResponse());\n }\n\n protected toggleShowEntityStoreValue() {\n this.showEntityStoreValue.set(!this.showEntityStoreValue());\n }\n\n protected toggleShowArguments() {\n this.showArguments.set(!this.showArguments());\n }\n\n protected selectSnapLayout(layout: QueryDevtoolsSnapLayout) {\n this.snapLayout.set(layout);\n }\n\n protected selectQueryListMode(mode: QueryListMode) {\n this.queryListMode.set(mode);\n }\n\n protected selectViewMode(mode: QueryViewMode) {\n this.viewMode.set(mode);\n }\n\n protected selectQuery(query: AnyV2Query) {\n this.selectedQueryId.set(query._id);\n }\n\n protected clearQueryHistory() {\n this.queryHistory$.next([]);\n }\n}\n","@if (!isOpen()) {\n <button (click)=\"toggleOpen()\" class=\"et-query-devtools-open-btn et-qd-chip\">Query Devtools</button>\n}\n\n@if (isOpen()) {\n <div\n [class.et-query-devtools-container--transparent]=\"isTranslucent()\"\n class=\"et-query-devtools-container et-query-devtools-container--snap-{{ snapLayout() }}\"\n >\n <header class=\"et-qd-header\">\n <h3 class=\"et-qd-header__title\">Query Devtools</h3>\n\n <div class=\"et-qd-header__select\">\n <label for=\"et-query-client-instance\">Client instance</label>\n <select [formControl]=\"selectedClientIdCtrl\" id=\"et-query-client-instance\">\n @for (clientConfig of queryClientConfigs; track trackByClient(i, clientConfig); let i = $index) {\n <option [value]=\"i\">\n {{ clientConfig.displayName ?? clientConfig.client.config.baseRoute }}\n </option>\n }\n </select>\n </div>\n\n <button (click)=\"toggleOpen()\" class=\"et-qd-btn et-qd-btn-secondary\">Close</button>\n </header>\n\n <div class=\"et-qd-sub-header\">\n <button\n [ngClass]=\"{ 'et-qd-chip-secondary': !isTranslucent() }\"\n (click)=\"toggleTranslucent()\"\n class=\"et-qd-chip et-qd-translucent-clickable\"\n >\n Translucent\n </button>\n <div class=\"et-qd-sub-header__divider\"></div>\n <button\n [ngClass]=\"{ 'et-qd-chip-secondary': snapLayout() !== 'full' }\"\n (click)=\"selectSnapLayout('full')\"\n class=\"et-qd-chip\"\n >\n Fullscreen\n </button>\n <button\n [ngClass]=\"{ 'et-qd-chip-secondary': snapLayout() !== 'top' }\"\n (click)=\"selectSnapLayout('top')\"\n class=\"et-qd-chip\"\n >\n Top\n </button>\n <button\n [ngClass]=\"{ 'et-qd-chip-secondary': snapLayout() !== 'bottom' }\"\n (click)=\"selectSnapLayout('bottom')\"\n class=\"et-qd-chip\"\n >\n Bottom\n </button>\n <button\n [ngClass]=\"{ 'et-qd-chip-secondary': snapLayout() !== 'left' }\"\n (click)=\"selectSnapLayout('left')\"\n class=\"et-qd-chip\"\n >\n Left\n </button>\n <button\n [ngClass]=\"{ 'et-qd-chip-secondary': snapLayout() !== 'right' }\"\n (click)=\"selectSnapLayout('right')\"\n class=\"et-qd-chip\"\n >\n Right\n </button>\n </div>\n\n @if (selectedClientConfig(); as cfg) {\n <div class=\"et-qd-client\">\n <p class=\"et-qd-client__title\">{{ cfg.displayName ?? cfg.client.config.baseRoute }}</p>\n\n <div class=\"et-qd-client__actions\">\n <button (click)=\"cfg.client._store.refreshQueriesInUse()\" class=\"et-qd-chip\">Refresh all</button>\n <button (click)=\"cfg.client._store.refreshQueriesInUse({ ignoreCacheValidity: true })\" class=\"et-qd-chip\">\n Refresh all (ignore caches)\n </button>\n <button\n (click)=\"cfg.client._store.refreshQueriesInUse({ ignoreCacheValidity: true, purgeUnused: true })\"\n class=\"et-qd-chip\"\n >\n Refresh all (ignore caches & purge unused)\n </button>\n </div>\n </div>\n }\n\n @if (selectedClientConfig(); as cfg) {\n <div class=\"et-qd-queries\">\n <p class=\"et-qd-queries__title\">Inspector</p>\n <div class=\"et-qd-queries__actions\">\n <button\n [ngClass]=\"{ 'et-qd-chip-secondary': queryListMode() !== 'live' || viewMode() !== 'query' }\"\n (click)=\"selectQueryListMode('live'); selectViewMode('query')\"\n class=\"et-qd-chip et-qd-chip-bordered\"\n >\n Live Queries ({{ queries()?.length ?? 0 }})\n </button>\n <button\n [ngClass]=\"{ 'et-qd-chip-secondary': queryListMode() !== 'history' || viewMode() !== 'query' }\"\n (click)=\"selectQueryListMode('history'); selectViewMode('query')\"\n class=\"et-qd-chip et-qd-chip-bordered\"\n >\n Query History ({{ (queryHistory$ | async)?.length ?? 0 }}/50)\n </button>\n @if (queryListMode() === 'history' && viewMode() === 'query') {\n <div class=\"et-qd-queries__divider\"></div>\n <button (click)=\"clearQueryHistory()\" class=\"et-qd-chip et-qd-chip-bordered\">Clear history</button>\n }\n\n <div class=\"et-qd-queries__divider\"></div>\n <button\n [ngClass]=\"{ 'et-qd-chip-secondary': viewMode() !== 'authProvider' }\"\n (click)=\"selectViewMode('authProvider')\"\n class=\"et-qd-chip et-qd-chip-bordered\"\n >\n Auth Provider\n </button>\n </div>\n\n @if (viewMode() === 'query') {\n <div class=\"et-qd-queries__browser\">\n @if (queryListMode() === 'live') {\n <ul class=\"et-qd-queries__browser-list\">\n @for (query of queries(); track trackByQuery($index, query)) {\n <li>\n <button\n [class.et-qd-query--active]=\"selectedQuery()?._id === query._id\"\n (click)=\"selectQuery(query)\"\n >\n <span> {{ query._queryConfig.method }}</span>\n <span> {{ query | queryShortName }}</span>\n </button>\n </li>\n }\n </ul>\n }\n @if (queryListMode() === 'history') {\n <ul class=\"et-qd-queries__browser-list\">\n @for (query of queryHistory$ | async; track trackByQuery($index, query)) {\n <li>\n <button\n [class.et-qd-query--active]=\"selectedQuery()?._id === query._id\"\n (click)=\"selectQuery(query)\"\n >\n <span> {{ query._queryConfig.method }}</span>\n <span> {{ query | queryShortName }}</span>\n </button>\n </li>\n }\n </ul>\n }\n <div class=\"et-qd-queries__browser-detail\">\n @if (selectedQuery(); as query) {\n <p class=\"et-qd-queries__browser-detail__title\">\n {{ query._queryConfig.method }} {{ query._routeWithParams }}\n </p>\n\n <div class=\"et-qd-queries__actions\">\n <button (click)=\"query.execute()\" class=\"et-qd-chip et-qd-chip-bordered\">Execute</button>\n <button (click)=\"query.execute({ skipCache: true })\" class=\"et-qd-chip et-qd-chip-bordered\">\n Execute (ignore cache)\n </button>\n\n <button (click)=\"query.abort()\" class=\"et-qd-chip et-qd-chip-bordered\">Abort</button>\n <div class=\"et-qd-queries__divider\"></div>\n <button\n [ngClass]=\"{ 'et-qd-chip-secondary': !query.isPolling }\"\n (click)=\"query.poll({ interval: 5000, takeUntil: _destroy$ })\"\n class=\"et-qd-chip et-qd-chip-bordered\"\n >\n Poll\n </button>\n\n <button\n [ngClass]=\"{ 'et-qd-chip-secondary': query.isPolling }\"\n (click)=\"query.stopPolling()\"\n class=\"et-qd-chip et-qd-chip-bordered\"\n >\n Stop polling\n </button>\n @if (query.isPolling || query._isPollingPaused) {\n <button (click)=\"query.pausePolling()\" class=\"et-qd-chip et-qd-chip-secondary et-qd-chip-bordered\">\n Pause polling\n </button>\n <button (click)=\"query.resumePolling()\" class=\"et-qd-chip et-qd-chip-secondary et-qd-chip-bordered\">\n Resume polling\n </button>\n }\n </div>\n\n <div class=\"et-qd-list\">\n <div class=\"et-qd-list-item\">\n <p>State type</p>\n <pre>{{ query.rawState.type }}</pre>\n </div>\n\n <div class=\"et-qd-list-item\">\n <p>Dependents</p>\n <pre>{{ query._dependents | json }}</pre>\n </div>\n\n <div class=\"et-qd-list-item\">\n <p>Is expired</p>\n <pre>{{ query.isExpired }}</pre>\n </div>\n\n <div class=\"et-qd-list-item\">\n <p>Is in use</p>\n <pre>{{ query.isInUse }}</pre>\n </div>\n\n <div class=\"et-qd-list-item\">\n <p>Subscriber count</p>\n <pre>{{ query._subscriberCount }}</pre>\n </div>\n\n <div class=\"et-qd-list-item\">\n <p>Is polling</p>\n <pre>{{ query.isPolling }}</pre>\n </div>\n\n <div class=\"et-qd-list-item\">\n <p>Is polling paused</p>\n <pre>{{ query._isPollingPaused }}</pre>\n </div>\n\n <div class=\"et-qd-list-item\">\n <p>Enable smart polling</p>\n <pre>{{ query._enableSmartPolling }}</pre>\n </div>\n\n <div class=\"et-qd-list-item\">\n <p>Query store key</p>\n <pre>{{ query._queryStoreKey }}</pre>\n </div>\n\n <div class=\"et-qd-list-item\">\n <p>Arguments</p>\n\n <div>\n <button\n [ngClass]=\"{ 'et-qd-chip-secondary': !showArguments() }\"\n (click)=\"toggleShowArguments()\"\n class=\"et-qd-chip et-qd-chip-bordered\"\n >\n Toggle\n </button>\n </div>\n @if (showArguments()) {\n <pre>{{ query._arguments | json }}</pre>\n }\n </div>\n\n <div class=\"et-qd-list-item\">\n <p>State</p>\n <p><i> Warning, this will cause a subscription if shown!</i></p>\n <div>\n <button\n [ngClass]=\"{ 'et-qd-chip-secondary': !showResponse() }\"\n (click)=\"toggleShowResponse()\"\n class=\"et-qd-chip et-qd-chip-bordered\"\n >\n Toggle\n </button>\n </div>\n @if (showResponse()) {\n <pre>{{ query.state$ | async | json }}</pre>\n }\n </div>\n\n <div class=\"et-qd-list-item\">\n <p>Raw state</p>\n <p><i> The query state unaffected by entity stores</i></p>\n\n <div>\n <button\n [ngClass]=\"{ 'et-qd-chip-secondary': !showRawResponse() }\"\n (click)=\"toggleShowRawResponse()\"\n class=\"et-qd-chip et-qd-chip-bordered\"\n >\n Toggle\n </button>\n </div>\n @if (showRawResponse()) {\n <pre>{{ query.rawState | json }}</pre>\n }\n </div>\n\n <div class=\"et-qd-list-item\">\n <p>Query config</p>\n\n <div>\n <button\n [ngClass]=\"{ 'et-qd-chip-secondary': !showQueryConfig() }\"\n (click)=\"toggleShowQueryConfig()\"\n class=\"et-qd-chip et-qd-chip-bordered\"\n >\n Toggle\n </button>\n </div>\n @if (showQueryConfig()) {\n <pre>{{ stringifiedQueryConfig() | json }}</pre>\n }\n </div>\n\n @if (!!query._queryConfig.entity) {\n <div class=\"et-qd-list-item\">\n <p>Entity store value</p>\n\n <div>\n <button\n [ngClass]=\"{ 'et-qd-chip-secondary': !showEntityStoreValue() }\"\n (click)=\"toggleShowEntityStoreValue()\"\n class=\"et-qd-chip et-qd-chip-bordered\"\n >\n Toggle\n </button>\n </div>\n @if (showEntityStoreValue()) {\n <pre>{{ selectedQueryEntityStoreValue$ | async | json }}</pre>\n }\n </div>\n }\n </div>\n }\n </div>\n </div>\n } @else if (viewMode() === 'authProvider') {\n <div class=\"et-qd-auth-provider__viewer\">\n @if (authProviderDetails(); as details) {\n <div class=\"et-qd-list\">\n <div class=\"et-qd-list-item\">\n <p>Type</p>\n <pre>{{ details.type }}</pre>\n </div>\n <div class=\"et-qd-list-item\">\n <p>Header value</p>\n <pre>{{ details.header() | json }}</pre>\n </div>\n <div class=\"et-qd-list-item\">\n <p>Config</p>\n <pre>{{ details.config | json }}</pre>\n </div>\n\n @if (details.type === 'BearerAuthProvider') {\n <div class=\"et-qd-list-item\">\n <p>Tokens</p>\n <pre>{{ details.provider.tokens$ | async | json }}</pre>\n </div>\n\n <div class=\"et-qd-list-item\">\n <p>Should refresh on unauthorized response</p>\n <pre>{{ details.provider.shouldRefreshOnUnauthorizedResponse }}</pre>\n </div>\n\n <ng-container\n *etQuery=\"\n details.provider.currentRefreshQuery$ | async as response;\n loading as loading;\n error as error;\n query as query\n \"\n >\n <div class=\"et-qd-list-item\">\n <p>Refresh query response</p>\n\n <div>\n <button (click)=\"details.provider._refreshQuery()\" class=\"et-qd-chip et-qd-chip-bordered\">\n Refresh\n </button>\n </div>\n <pre>{{ response | json }}</pre>\n </div>\n <div class=\"et-qd-list-item\">\n <p>Refresh query loading</p>\n <pre>{{ loading }}</pre>\n </div>\n <div class=\"et-qd-list-item\">\n <p>Refresh query error</p>\n <pre>{{ error ?? 'null' }}</pre>\n </div>\n <div class=\"et-qd-list-item\">\n <p>State</p>\n <pre>{{ query?.state$ | async | json }}</pre>\n </div>\n </ng-container>\n }\n </div>\n } @else {\n <p>No auth provider set</p>\n }\n </div>\n }\n </div>\n }\n </div>\n}\n","import { Observable, Subject, debounceTime, filter, map, shareReplay, startWith } from 'rxjs';\nimport { EntityKey, EntityStoreConfig } from './entity.types';\n\nclass EntityStoreError extends Error {\n constructor(\n message: string,\n public detail?: unknown,\n ) {\n super(message);\n this.name = 'EntityStoreError';\n }\n}\n\nfunction flatten<T>(arr: T[][]): T[] {\n return arr.reduce((acc, val) => acc.concat(val), []);\n}\n\nexport class EntityStore<T> {\n /**\n * @internal\n */\n readonly _dictionary = new Map<EntityKey, T>();\n\n /**\n * @internal\n */\n readonly _change$ = new Subject<EntityKey | EntityKey[]>();\n\n constructor(private readonly _config: EntityStoreConfig) {}\n\n select(key: EntityKey): Observable<T | null>;\n select(keys: EntityKey[]): Observable<T[]>;\n select(keys: EntityKey[][]): Observable<T[]>;\n select(keyOrKeys: EntityKey | EntityKey[] | EntityKey[][]): Observable<T | null> | Observable<T[]> {\n if (Array.isArray(keyOrKeys)) {\n const _keys = this._normalizeKeys(keyOrKeys);\n return this._selectMany(_keys as EntityKey[]);\n }\n\n return this._select(keyOrKeys);\n }\n\n /**\n * **Note:** Prefer `select` over `selectWhere` when possible.\n */\n selectWhere(predicate: (value: T) => boolean): Observable<T[]> {\n return this._change$.pipe(\n startWith(null),\n debounceTime(0),\n map(() => Array.from(this._dictionary.values()).filter(predicate)),\n shareReplay({ bufferSize: 1, refCount: true }),\n );\n }\n\n set(key: EntityKey, value: T): void;\n set(keys: EntityKey[], values: T[]): void;\n set(keys: EntityKey[][], values: T[][]): void;\n set(keyOrKeys: EntityKey | EntityKey[] | EntityKey[][], valueOrValues: T | T[] | T[][]) {\n const _keys = this._normalizeKeys(keyOrKeys);\n\n if (Array.isArray(_keys)) {\n if (!Array.isArray(valueOrValues)) {\n throw new EntityStoreError('When setting multiple keys, values must be an array', {\n keyOrValues: _keys,\n valueOrValues,\n });\n }\n\n const _values = (Array.isArray(valueOrValues[0]) ? flatten(valueOrValues as T[][]) : valueOrValues) as T[];\n\n for (let i = 0; i < _keys.length; i++) {\n const k = _keys[i];\n const v = _values[i];\n\n if (k === undefined || v === undefined) continue;\n\n this._set(k, v);\n }\n } else {\n this._set(_keys, valueOrValues as T);\n }\n\n this._change$.next(_keys);\n }\n\n remove(key: EntityKey): void;\n remove(keys: EntityKey[]): void;\n remove(keys: EntityKey[][]): void;\n remove(keyOrKeys: EntityKey | EntityKey[] | EntityKey[][]) {\n const _keys = this._normalizeKeys(keyOrKeys);\n\n if (Array.isArray(_keys)) {\n for (const key of _keys) {\n this._remove(key);\n }\n } else {\n this._remove(_keys);\n }\n\n this._change$.next(_keys);\n }\n\n logState() {\n console.log('EntityStore:', this._config.name, {\n dictionary: this._dictionary,\n });\n }\n\n private _select(key: EntityKey): Observable<T | null> {\n if (this._config.logActions) {\n console.log('EntityStore: select', this._config.name, key);\n }\n\n return this._change$.pipe(\n startWith(null),\n filter((v) => {\n if (v === null) {\n return true;\n }\n\n if (Array.isArray(v)) {\n return v.includes(key);\n }\n\n return v === key;\n }),\n map(() => this._dictionary.get(key) ?? null),\n );\n }\n\n private _selectMany(keys: EntityKey[]): Observable<T[]> {\n if (this._config.logActions) {\n console.log('EntityStore: selectMany', this._config.name, keys);\n }\n\n return this._change$.pipe(\n startWith(null),\n filter((v) => {\n if (v === null) {\n return true;\n }\n\n if (Array.isArray(v)) {\n return keys.some((key) => v.includes(key));\n }\n\n return keys.includes(v);\n }),\n map(() => keys.map((key) => this._dictionary.get(key)).filter((value): value is T => value !== undefined)),\n );\n }\n\n private _set(key: EntityKey, value: T) {\n if (this._config.logActions) {\n console.log('EntityStore: set', this._config.name, key, value);\n }\n\n this._dictionary.set(key, value);\n }\n\n private _remove(key: EntityKey) {\n if (this._config.logActions) {\n console.log('EntityStore: remove', this._config.name, key);\n }\n\n this._dictionary.delete(key);\n }\n\n private _normalizeKeys(keys: EntityKey | EntityKey[] | EntityKey[][]): EntityKey | EntityKey[] {\n if (Array.isArray(keys)) {\n if (Array.isArray(keys[0])) {\n return flatten(keys as EntityKey[][]);\n }\n\n return keys as EntityKey[];\n }\n\n return keys;\n }\n}\n","import { Paginated } from '@ethlete/types';\nimport { map, of, switchMap, take, tap } from 'rxjs';\nimport { EntityStore } from './entity-store';\nimport { EntityKey, InsertFromConfig, RemoveFromConfig } from './entity.types';\n\nexport function mapToPaginated<T>(response: Paginated<T>) {\n return map((items) => ({ ...response, items }) as Paginated<T>);\n}\n\n// FIXME: This breaks if SubStoreType is an array\n/**\n * Use an other store to represent a property of the current entity.\n */\nexport const insertFrom = <\n OriginStoreType,\n OriginKeys extends keyof NonNullable<OriginStoreType>,\n SubStoreType extends NonNullable<OriginStoreType>[OriginKeys] extends Array<infer U>\n ? U\n : NonNullable<OriginStoreType>[OriginKeys],\n IdFn extends (value: NonNullable<OriginStoreType>) => EntityKey | EntityKey[],\n ComputedEntityType extends ReturnType<IdFn> extends Array<unknown>\n ? OriginStoreType\n : Omit<OriginStoreType, OriginKeys> & { [K in OriginKeys]: SubStoreType | null },\n>(\n store: EntityStore<SubStoreType>,\n { for: key, id }: InsertFromConfig<OriginStoreType, OriginKeys, IdFn>,\n) =>\n switchMap((value: OriginStoreType) => {\n if (!value) return of(null);\n\n const ids = id(value);\n\n if (Array.isArray(ids)) {\n return store.select(ids).pipe(map((data) => ({ ...value, [key]: data }) as ComputedEntityType));\n } else {\n return store.select(ids).pipe(map((data) => ({ ...value, [key]: data }) as ComputedEntityType));\n }\n });\n\n/**\n * Remove entities from a store based on a where function.\n */\nexport const removeFrom = <T>(store: EntityStore<T>, { where, id }: RemoveFromConfig<T>) => {\n store\n .selectWhere(where)\n .pipe(\n tap((entities) => store.remove(entities.map(id))),\n take(1),\n )\n .subscribe();\n};\n","import { HttpClient, HttpErrorResponse } from '@angular/common/http';\nimport { DestroyRef, ErrorHandler, Injector } from '@angular/core';\nimport { toObservable } from '@angular/core/rxjs-interop';\nimport { combineLatest, Observable, Subject } from 'rxjs';\nimport { buildRoute } from '../legacy';\nimport { createHttpRequest, HttpRequest } from './http-request';\nimport { QueryArgs, RequestArgs } from './query';\nimport { buildQueryCacheKey, shouldCacheQuery } from './query-cache-utils';\nimport { CreateQueryClientConfigOptions } from './query-client';\nimport { CreateQueryCreatorOptions, QueryMethod, RouteType } from './query-creator';\nimport { uncacheableRequestHasAllowCacheParam, uncacheableRequestHasCacheKeyParam } from './query-errors';\nimport { RunQueryExecuteOptions } from './query-execute-utils';\nimport { ShouldRetryRequestFn } from './query-retry-utils';\n\nexport type QueryRepositoryEvent =\n | {\n type: 'request-error';\n error: HttpErrorResponse;\n key: QueryKey;\n isSecure: boolean;\n request: HttpRequest<QueryArgs>;\n }\n | {\n type: 'request-success';\n key: QueryKey;\n isSecure: boolean;\n request: HttpRequest<QueryArgs>;\n };\n\nexport type QueryRepositoryRequestOptions<TArgs extends QueryArgs> = {\n /**\n * The route of the request.\n * @example '/users'\n * @example (args) => `/users/${args.userId}`\n */\n route: RouteType<TArgs>;\n\n /** The HTTP method of the request */\n method: QueryMethod;\n\n /** If the request is secure (needs authentication) */\n isSecure?: boolean;\n\n /** The data of the request */\n args?: RequestArgs<TArgs> | null;\n\n /** The query creator options of the request */\n creatorOptions?: CreateQueryCreatorOptions;\n\n /** Custom retry function for this specific request */\n retryFn?: ShouldRetryRequestFn;\n\n /** If set, this request's cache key will be prefixed with this key */\n key?: string;\n\n /** The previous tracking key of the request */\n previousKey?: QueryKey | null;\n\n /** The destroy ref to bind the request to. If the destroy ref is destroyed, the request will be destroyed as well. */\n consumerDestroyRef: DestroyRef;\n\n /** Configuration on how to run the query */\n runQueryOptions?: RunQueryExecuteOptions;\n};\n\nexport type QueryRepositoryItem<TArgs extends QueryArgs> = {\n /** The key of the request (either a cache key for cacheable requests or a UUID for uncacheable requests) */\n key: QueryKey;\n\n /** The request object */\n request: HttpRequest<TArgs>;\n};\n\n/**\n * The query repository is responsible for managing all requests and their consumers.\n * It will cache requests if they can be cached and reuse them if they are already cached.\n * It will also destroy requests if there are no more consumers left.\n */\nexport type QueryRepository = {\n /** Creates a new request. If the request is already cached, it will be reused. */\n request: <TArgs extends QueryArgs>(options: QueryRepositoryRequestOptions<TArgs>) => QueryRepositoryItem<TArgs>;\n\n /** Removes a consumer from a request by its key. Destroys the request if there are no more consumers left. */\n unbind: (key: QueryKey | null, consumerDestroyRef: DestroyRef) => boolean;\n\n /** Removes all secure requests and their consumers */\n unbindAllSecure: () => void;\n\n /** Observable stream of repository events (errors, successes, etc.) */\n events$: Observable<QueryRepositoryEvent>;\n};\n\n/** The key of a query (either a cache key for cacheable requests or a UUID for uncacheable requests) */\nexport type QueryKey = string;\n\n/** Runs .unbind() if the DestroyRef.onDestroy() gets called */\nexport type DestroyCleanupCallback = () => void;\n\n/** Keeps track of all places where the request gets used. Will be cleaned up and removed if there are no more consumers. */\ntype DestroyListenerMapItem = {\n consumers: Map<DestroyRef, DestroyCleanupCallback>;\n request: HttpRequest<QueryArgs>;\n isSecure: boolean;\n eventSubscription?: { unsubscribe: () => void };\n};\n\nexport type QueryRepositoryDependencies = {\n /** The HTTP client to use for the requests */\n httpClient: HttpClient;\n\n /** The error handler to use for the requests */\n ngErrorHandler: ErrorHandler;\n\n /** The injector to use for reactive operations like signal->observable conversions */\n injector: Injector;\n};\n\nexport type CreateQueryRepositoryConfig = CreateQueryClientConfigOptions & {\n /** The dependencies of the query repository */\n dependencies: QueryRepositoryDependencies;\n};\n\nconst generateUuid = () => crypto.randomUUID();\n\nexport const createQueryRepository = (config: CreateQueryRepositoryConfig): QueryRepository => {\n const cache = new Map<QueryKey, DestroyListenerMapItem>();\n const eventsSubject = new Subject<QueryRepositoryEvent>();\n\n const request = <TArgs extends QueryArgs>(options: QueryRepositoryRequestOptions<TArgs>) => {\n const { args, creatorOptions, runQueryOptions } = options;\n const shouldCache =\n creatorOptions?.subtle?.useQueryRepositoryCache === false\n ? false\n : shouldCacheQuery(options.method) || creatorOptions?.subtle?.useQueryRepositoryCache === true;\n\n if (!shouldCache && options.key) throw uncacheableRequestHasCacheKeyParam(options.key);\n if (!shouldCache && runQueryOptions?.allowCache) throw uncacheableRequestHasAllowCacheParam();\n\n const route = buildRoute({\n base: config.baseUrl,\n route: options.route,\n pathParams: args?.pathParams,\n queryParams: args?.queryParams,\n queryParamConfig: config.queryString,\n });\n\n const cacheKey = shouldCache\n ? buildQueryCacheKey(`${options.key ? options.key + '_' : ''}${route}`, {\n body: args?.body,\n queryParams: args?.queryParams,\n pathParams: args?.pathParams,\n headers: args?.headers,\n })\n : false;\n\n const trackingKey = cacheKey || generateUuid();\n\n const previousKey = options.previousKey;\n\n if (cacheKey !== previousKey && previousKey) {\n unbind(previousKey, options.consumerDestroyRef);\n }\n\n if (shouldCache && cacheKey) {\n const cacheEntry = cache.get(cacheKey);\n\n if (cacheEntry) {\n bind(cacheKey, options.consumerDestroyRef, cacheEntry.request, options.isSecure ?? false, true);\n\n if (!runQueryOptions?.allowCache || cacheEntry.request.isStale()) {\n cacheEntry.request.execute({ allowCache: runQueryOptions?.allowCache });\n }\n\n return { key: cacheKey, request: cacheEntry.request as HttpRequest<TArgs> };\n }\n }\n\n const request = createHttpRequest<TArgs>({\n fullPath: route,\n args,\n method: options.method,\n dependencies: config.dependencies,\n clientOptions: creatorOptions,\n cacheAdapter: config.cacheAdapter,\n retryFn: options.retryFn ?? config.retryFn,\n });\n\n request.execute();\n\n bind(trackingKey, options.consumerDestroyRef, request, options.isSecure ?? false, shouldCache);\n\n return { key: trackingKey, request };\n };\n\n const unbind = (key: QueryKey | null, consumerDestroyRef: DestroyRef) => {\n if (key === null) return false;\n\n const cacheEntry = cache.get(key);\n\n if (!cacheEntry) return false;\n\n cacheEntry.consumers.delete(consumerDestroyRef);\n\n if (cacheEntry.consumers.size === 0) {\n cacheEntry.request.destroy();\n cacheEntry.eventSubscription?.unsubscribe();\n cache.delete(key);\n }\n\n return true;\n };\n\n const unbindAllSecure = () => {\n for (const [key, cacheEntry] of cache.entries()) {\n if (cacheEntry.isSecure) {\n for (const consumerDestroyRef of cacheEntry.consumers.keys()) {\n unbind(key, consumerDestroyRef);\n }\n\n cacheEntry.eventSubscription?.unsubscribe();\n cache.delete(key);\n }\n }\n };\n\n const bind = (\n key: QueryKey,\n consumerDestroyRef: DestroyRef,\n request: HttpRequest<QueryArgs>,\n isSecure: boolean,\n allowReuse: boolean,\n ) => {\n const destroyListener = consumerDestroyRef.onDestroy(() => unbind(key, consumerDestroyRef));\n\n const cacheEntry = cache.get(key);\n\n if (cacheEntry && allowReuse) {\n cacheEntry.consumers.set(consumerDestroyRef, destroyListener);\n } else {\n const consumers: Map<DestroyRef, DestroyCleanupCallback> = new Map([]);\n\n consumers.set(consumerDestroyRef, destroyListener);\n\n const eventSubscription = combineLatest([\n toObservable(request.error, { injector: config.dependencies.injector }),\n toObservable(request.response, { injector: config.dependencies.injector }),\n ]).subscribe(([errorValue, responseValue]) => {\n if (errorValue?.raw instanceof HttpErrorResponse) {\n eventsSubject.next({\n type: 'request-error',\n error: errorValue.raw,\n key,\n isSecure,\n request,\n });\n } else if (responseValue !== null && !errorValue) {\n eventsSubject.next({\n type: 'request-success',\n key,\n isSecure,\n request,\n });\n }\n });\n\n cache.set(key, {\n consumers,\n request,\n isSecure,\n eventSubscription,\n });\n }\n };\n\n const repository: QueryRepository = {\n request,\n unbind,\n unbindAllSecure,\n events$: eventsSubject.asObservable(),\n };\n\n return repository;\n};\n","import { HttpClient, HttpHeaders } from '@angular/common/http';\nimport { ErrorHandler, inject, Injector } from '@angular/core';\nimport { createRootProvider, ProviderResult } from '@ethlete/core';\nimport { BuildQueryStringConfig } from '../legacy';\nimport { createQueryRepository, QueryRepository } from './query-repository';\nimport { ShouldRetryRequestFn } from './query-retry-utils';\n\nexport type CacheAdapterFn = (headers: HttpHeaders) => number | null;\n\nexport type CreateQueryClientConfigOptions = {\n /**\n * The base URL of the client\n * @example 'https://api.example.com/v1'\n */\n baseUrl: string;\n\n /** Configuration for building query strings */\n queryString?: BuildQueryStringConfig;\n\n /** The name of the client */\n name: string;\n\n /**\n * The cache adapter function to use for the client.\n * It determines how long the response of a request can be cached.\n *\n * @default extractExpiresInSeconds()\n */\n cacheAdapter?: CacheAdapterFn;\n\n /**\n * The retry function to use for the client.\n * It determines if a request should be retried after it failed.\n *\n * @default shouldRetryRequest()\n */\n retryFn?: ShouldRetryRequestFn;\n};\n\nexport type QueryClient = {\n repository: QueryRepository;\n};\n\nexport type QueryClientRef = ProviderResult<QueryClient>;\nexport type AnyCreateQueryClientResult = QueryClientRef;\nexport type AnyQueryClient = NonNullable<ReturnType<AnyCreateQueryClientResult[1]>>;\n\nexport const createQueryClient = (options: CreateQueryClientConfigOptions): QueryClientRef =>\n createRootProvider(\n () => {\n const httpClient = inject(HttpClient);\n const ngErrorHandler = inject(ErrorHandler);\n const injector = inject(Injector);\n\n const repository = createQueryRepository({\n ...options,\n dependencies: { httpClient, ngErrorHandler, injector },\n });\n\n const client: QueryClient = {\n repository,\n };\n\n return client;\n },\n {\n name: `QueryClient_${options.name}`,\n },\n );\n","import { QueryArgs, RequestArgs } from './query';\nimport { CreateQueryExecuteOptions, InternalQueryExecute } from './query-execute';\nimport { queryExecute } from './query-execute-utils';\nimport { InternalSecureCreateQueryCreatorOptions } from './secure-query-creator';\nimport { createSecureExecuteFactory } from './secure-query-execute-factory';\n\nexport type CreateSecureQueryExecuteOptions<TArgs extends QueryArgs> = Omit<\n CreateQueryExecuteOptions<TArgs>,\n 'creatorInternals'\n> & {\n creatorInternals: InternalSecureCreateQueryCreatorOptions<TArgs>;\n};\n\nexport const createSecureExecuteFn = <TArgs extends QueryArgs>(\n executeOptions: CreateSecureQueryExecuteOptions<TArgs>,\n): InternalQueryExecute<TArgs> => {\n const [, injectAuthProvider] = executeOptions.creatorInternals.authProvider;\n const authProvider = injectAuthProvider();\n\n return createSecureExecuteFactory({\n authProvider,\n deps: executeOptions.deps,\n state: executeOptions.state,\n transformAuthAndExec: (executeArgs, _tokens, headers, executeState) => {\n const { options: runOptions } = executeArgs ?? {};\n const updatedArgs = { ...(executeArgs?.args ?? ({} as RequestArgs<TArgs>)), headers };\n\n queryExecute({\n executeOptions: executeOptions,\n executeState,\n args: updatedArgs,\n options: runOptions,\n isSecure: true,\n });\n },\n });\n};\n","import { createBaseQuery } from './base-query-factory';\nimport { CreateQueryOptions, QueryArgs } from './query';\nimport { InternalSecureCreateQueryCreatorOptions } from './secure-query-creator';\nimport { createSecureExecuteFn } from './secure-query-execute';\n\nexport type CreateSecureQueryOptions<TArgs extends QueryArgs> = Omit<CreateQueryOptions<TArgs>, 'creatorInternals'> & {\n creatorInternals: InternalSecureCreateQueryCreatorOptions<TArgs>;\n};\n\nexport const createSecureQuery = <TArgs extends QueryArgs>(options: CreateSecureQueryOptions<TArgs>) =>\n createBaseQuery({\n creator: options.creator,\n creatorInternals: options.creatorInternals,\n features: options.features,\n queryConfig: options.queryConfig,\n executeFactory: createSecureExecuteFn,\n });\n","import { AnyCreateBearerAuthProviderResult } from '../auth';\nimport { createBaseQueryCreator } from './base-query-creator-factory';\nimport { QueryArgs } from './query';\nimport { CreateQueryCreatorOptions, InternalCreateQueryCreatorOptions, QueryCreator } from './query-creator';\nimport { createSecureQuery } from './secure-query';\n\nexport type InternalSecureCreateQueryCreatorOptions<TArgs extends QueryArgs> =\n InternalCreateQueryCreatorOptions<TArgs> & {\n authProvider: AnyCreateBearerAuthProviderResult;\n };\n\nexport const createSecureQueryCreator = <TArgs extends QueryArgs>(\n options: CreateQueryCreatorOptions | undefined,\n internals: InternalSecureCreateQueryCreatorOptions<TArgs>,\n): QueryCreator<TArgs> =>\n createBaseQueryCreator({\n options,\n internals,\n queryFactory: createSecureQuery,\n });\n","import { AnyCreateBearerAuthProviderResult } from '../auth';\nimport { QueryArgs } from './query';\nimport { AnyCreateQueryClientResult } from './query-client';\nimport {\n CreateQueryCreatorOptions,\n QueryCreator,\n QueryMethod,\n RequiresTransform,\n RouteType,\n createQueryCreator,\n} from './query-creator';\nimport { createSecureQueryCreator } from './secure-query-creator';\n\n// Conditional parameter type: when RequiresTransform is true, options must be provided; otherwise optional\ntype ConditionalOptions<TArgs extends QueryArgs> =\n RequiresTransform<TArgs> extends true\n ? [options: CreateQueryCreatorOptions<TArgs>]\n : [options?: CreateQueryCreatorOptions<TArgs>];\n\nconst createQueryTemplate = (method: QueryMethod) => {\n return (client: AnyCreateQueryClientResult) =>\n <TArgs extends QueryArgs>(route: RouteType<TArgs>, ...args: ConditionalOptions<TArgs>): QueryCreator<TArgs> =>\n createQueryCreator<TArgs>(args[0], { method, client, route });\n};\n\nconst createSecureQueryTemplate = (method: QueryMethod) => {\n return (client: AnyCreateQueryClientResult, authProvider: AnyCreateBearerAuthProviderResult) =>\n <TArgs extends QueryArgs>(route: RouteType<TArgs>, ...args: ConditionalOptions<TArgs>): QueryCreator<TArgs> =>\n createSecureQueryCreator<TArgs>(args[0], { method, client, authProvider, route });\n};\n\n/** A query creator that creates a GET query */\nexport const createGetQuery = createQueryTemplate('GET');\n\n/** A query creator that creates a secure GET query (requires authentication) */\nexport const createSecureGetQuery = createSecureQueryTemplate('GET');\n\n/** A query creator that creates a POST query */\nexport const createPostQuery = createQueryTemplate('POST');\n\n/** A query creator that creates a secure POST query (requires authentication) */\nexport const createSecurePostQuery = createSecureQueryTemplate('POST');\n\n/** A query creator that creates a PUT query */\nexport const createPutQuery = createQueryTemplate('PUT');\n\n/** A query creator that creates a secure PUT query (requires authentication) */\nexport const createSecurePutQuery = createSecureQueryTemplate('PUT');\n\n/** A query creator that creates a DELETE query */\nexport const createDeleteQuery = createQueryTemplate('DELETE');\n\n/** A query creator that creates a secure DELETE query (requires authentication) */\nexport const createSecureDeleteQuery = createSecureQueryTemplate('DELETE');\n\n/** A query creator that creates a PATCH query */\nexport const createPatchQuery = createQueryTemplate('PATCH');\n\n/** A query creator that creates a secure PATCH query (requires authentication) */\nexport const createSecurePatchQuery = createSecureQueryTemplate('PATCH');\n","import { DestroyRef, inject, isDevMode, signal, Signal } from '@angular/core';\n\ntype LeaderMessage =\n | {\n type: 'heartbeat';\n tabId: string;\n }\n | {\n type: 'tab-heartbeat';\n tabId: string;\n }\n | {\n type: 'leader-claim';\n tabId: string;\n }\n | {\n type: 'leader-release';\n tabId: string;\n }\n | {\n type: 'instance-register';\n tabId: string;\n }\n | {\n type: 'instance-unregister';\n tabId: string;\n };\n\nexport type InternalLeaderElection = {\n isLeader: Signal<boolean>;\n instanceCount: Signal<number>;\n becomeLeader: () => void;\n cleanup: () => void;\n};\n\nexport const setupLeaderElection = (): InternalLeaderElection => {\n const destroyRef = inject(DestroyRef);\n\n const channelName = 'ethlete-auth-leader';\n const heartbeatInterval = 1000;\n const leaderTimeout = 3000;\n const storageKey = 'ethlete-auth-leader-heartbeat';\n\n const tabId = `tab-${Date.now()}-${Math.random().toString(36).substring(2, 9)}`;\n const isLeader = signal(false);\n const instanceCount = signal(1);\n const knownTabs = new Map<string, number>();\n knownTabs.set(tabId, Date.now());\n\n let channel: BroadcastChannel | null = null;\n let heartbeatIntervalId: ReturnType<typeof setInterval> | null = null;\n let leaderCheckIntervalId: ReturnType<typeof setInterval> | null = null;\n\n if (typeof BroadcastChannel === 'undefined' || typeof localStorage === 'undefined') {\n isLeader.set(true);\n return {\n isLeader: isLeader.asReadonly(),\n instanceCount: instanceCount.asReadonly(),\n becomeLeader: () => {\n /* no-op */\n },\n cleanup: () => {\n /* no-op */\n },\n };\n }\n\n channel = new BroadcastChannel(channelName);\n\n channel.postMessage({ type: 'instance-register', tabId } as LeaderMessage);\n\n const updateLeaderHeartbeat = (newTabId: string = tabId) => {\n try {\n localStorage.setItem(storageKey, JSON.stringify({ tabId: newTabId, timestamp: Date.now() }));\n } catch (error) {\n if (isDevMode()) {\n console.error('Failed to update leader heartbeat:', error);\n }\n }\n };\n\n const getLeaderHeartbeat = (): { tabId: string; timestamp: number } | null => {\n try {\n const stored = localStorage.getItem(storageKey);\n if (!stored) return null;\n return JSON.parse(stored);\n } catch {\n return null;\n }\n };\n\n const becomeLeader = () => {\n if (isLeader()) return;\n\n isLeader.set(true);\n updateLeaderHeartbeat();\n\n const message: LeaderMessage = {\n type: 'leader-claim',\n tabId,\n };\n channel?.postMessage(message);\n };\n\n const releaseLeadership = () => {\n if (!isLeader()) return;\n\n isLeader.set(false);\n\n const message: LeaderMessage = {\n type: 'leader-release',\n tabId,\n };\n channel?.postMessage(message);\n };\n\n const checkLeaderStatus = () => {\n const heartbeat = getLeaderHeartbeat();\n const now = Date.now();\n\n if (!heartbeat || now - heartbeat.timestamp > leaderTimeout) {\n if (!isLeader()) {\n becomeLeader();\n }\n } else if (heartbeat.tabId === tabId) {\n if (!isLeader()) {\n isLeader.set(true);\n }\n updateLeaderHeartbeat();\n } else {\n if (isLeader()) {\n isLeader.set(false);\n }\n }\n };\n\n channel.onmessage = (event: MessageEvent<LeaderMessage>) => {\n const message = event.data;\n\n if (message.type === 'heartbeat') {\n if (message.tabId !== tabId) {\n knownTabs.set(message.tabId, Date.now());\n }\n if (message.tabId !== tabId && isLeader()) {\n const heartbeat = getLeaderHeartbeat();\n if (heartbeat && heartbeat.tabId === message.tabId) {\n releaseLeadership();\n }\n }\n } else if (message.type === 'tab-heartbeat') {\n if (message.tabId !== tabId) {\n knownTabs.set(message.tabId, Date.now());\n }\n } else if (message.type === 'instance-register') {\n if (message.tabId !== tabId) {\n knownTabs.set(message.tabId, Date.now());\n instanceCount.set(knownTabs.size);\n channel?.postMessage({ type: 'tab-heartbeat', tabId } as LeaderMessage);\n }\n } else if (message.type === 'instance-unregister') {\n if (message.tabId !== tabId) {\n knownTabs.delete(message.tabId);\n instanceCount.set(knownTabs.size);\n }\n } else if (message.type === 'leader-claim') {\n if (message.tabId !== tabId && isLeader()) {\n const heartbeat = getLeaderHeartbeat();\n if (heartbeat && heartbeat.tabId === message.tabId) {\n releaseLeadership();\n } else {\n const assertMessage: LeaderMessage = {\n type: 'heartbeat',\n tabId,\n };\n channel?.postMessage(assertMessage);\n }\n }\n } else if (message.type === 'leader-release') {\n if (message.tabId !== tabId) {\n setTimeout(() => checkLeaderStatus(), 100);\n }\n }\n };\n\n checkLeaderStatus();\n\n heartbeatIntervalId = setInterval(() => {\n knownTabs.set(tabId, Date.now());\n\n if (isLeader()) {\n updateLeaderHeartbeat();\n channel?.postMessage({ type: 'heartbeat', tabId } as LeaderMessage);\n } else {\n channel?.postMessage({ type: 'tab-heartbeat', tabId } as LeaderMessage);\n }\n\n const now = Date.now();\n let changed = false;\n for (const [id, lastSeen] of knownTabs) {\n if (id !== tabId && now - lastSeen > leaderTimeout) {\n knownTabs.delete(id);\n changed = true;\n }\n }\n if (changed) {\n instanceCount.set(knownTabs.size);\n }\n }, heartbeatInterval);\n\n leaderCheckIntervalId = setInterval(() => {\n checkLeaderStatus();\n }, heartbeatInterval);\n\n const handleVisibilityChange = () => {\n if (document.hidden && isLeader()) {\n // Tab is hidden but we're leader - keep leadership but other tabs will take over if we die\n } else if (!document.hidden && !isLeader()) {\n checkLeaderStatus();\n }\n };\n\n document.addEventListener('visibilitychange', handleVisibilityChange);\n\n const cleanup = () => {\n if (heartbeatIntervalId) {\n clearInterval(heartbeatIntervalId);\n }\n if (leaderCheckIntervalId) {\n clearInterval(leaderCheckIntervalId);\n }\n\n channel?.postMessage({ type: 'instance-unregister', tabId } as LeaderMessage);\n\n releaseLeadership();\n\n document.removeEventListener('visibilitychange', handleVisibilityChange);\n channel?.close();\n\n const heartbeat = getLeaderHeartbeat();\n if (heartbeat?.tabId === tabId) {\n try {\n localStorage.removeItem(storageKey);\n } catch {\n // Ignore\n }\n }\n };\n\n destroyRef.onDestroy(cleanup);\n\n return {\n isLeader: isLeader.asReadonly(),\n instanceCount: instanceCount.asReadonly(),\n becomeLeader,\n cleanup,\n };\n};\n","const ENCRYPTION_KEY_STORAGE = '__eth_ek';\n\nconst generateEncryptionKey = (): string => {\n const navigatorInfo =\n typeof navigator !== 'undefined'\n ? `${navigator.userAgent}${navigator.language}${screen.width}${screen.height}${screen.colorDepth}`\n : 'server';\n\n const random = Math.random().toString(36).substring(2, 15);\n\n return btoa(`${navigatorInfo}${random}`);\n};\n\nlet cachedKey: string | null = null;\n\nconst getEncryptionKey = (): string => {\n if (cachedKey) return cachedKey;\n\n if (typeof localStorage !== 'undefined') {\n const stored = localStorage.getItem(ENCRYPTION_KEY_STORAGE);\n if (stored) {\n cachedKey = stored;\n return stored;\n }\n\n const newKey = generateEncryptionKey();\n localStorage.setItem(ENCRYPTION_KEY_STORAGE, newKey);\n cachedKey = newKey;\n return newKey;\n }\n\n if (!cachedKey) {\n cachedKey = generateEncryptionKey();\n }\n return cachedKey;\n};\n\nconst xorCipher = (text: string, key: string): string => {\n let result = '';\n for (let i = 0; i < text.length; i++) {\n result += String.fromCharCode(text.charCodeAt(i) ^ key.charCodeAt(i % key.length));\n }\n return result;\n};\n\nexport const encryptToken = (token: string): string => {\n if (!token) return token;\n\n try {\n const key = getEncryptionKey();\n const encrypted = xorCipher(token, key);\n return btoa(encrypted);\n } catch {\n return token;\n }\n};\n\nexport const decryptToken = (encryptedToken: string): string => {\n if (!encryptedToken) return encryptedToken;\n\n try {\n const key = getEncryptionKey();\n const encrypted = atob(encryptedToken);\n return xorCipher(encrypted, key);\n } catch {\n return encryptedToken;\n }\n};\n\nexport const isEncrypted = (value: string): boolean => {\n if (!value) return false;\n\n const base64Regex = /^[A-Za-z0-9+/]+=*$/;\n if (!base64Regex.test(value)) return false;\n\n try {\n atob(value);\n return value.length > 20;\n } catch {\n return false;\n }\n};\n\nexport const resetEncryptionKey = (): void => {\n cachedKey = null;\n if (typeof localStorage !== 'undefined') {\n localStorage.removeItem(ENCRYPTION_KEY_STORAGE);\n }\n};\n","import { DestroyRef, effect, inject, isDevMode, WritableSignal } from '@angular/core';\nimport { QueryClient } from '../../http';\nimport { decryptToken, encryptToken } from '../utils';\n\ntype SyncMessage =\n | {\n type: 'tokens-updated';\n accessToken: string;\n refreshToken: string;\n }\n | {\n type: 'logout';\n };\n\nexport type MultiTabSyncConfig = {\n channelName?: string;\n syncTokens?: boolean;\n syncLogout?: boolean;\n};\n\nexport type InternalMultiTabSync = {\n cleanup: () => void;\n};\n\nexport const setupMultiTabSync = (\n config: MultiTabSyncConfig,\n accessToken: WritableSignal<string | null>,\n refreshToken: WritableSignal<string | null>,\n queryClient: QueryClient,\n): InternalMultiTabSync => {\n const destroyRef = inject(DestroyRef);\n\n const channelName = config.channelName ?? 'ethlete-auth-sync';\n const syncTokens = config.syncTokens ?? true;\n const syncLogout = config.syncLogout ?? true;\n\n let channel: BroadcastChannel | null = null;\n let isProcessingExternalUpdate = false;\n\n if (typeof BroadcastChannel === 'undefined') {\n if (isDevMode()) {\n console.warn('BroadcastChannel is not supported in this environment. Multi-tab sync will be disabled.');\n }\n return {\n cleanup: () => {\n // No cleanup needed when BroadcastChannel is not available\n },\n };\n }\n\n channel = new BroadcastChannel(channelName);\n\n channel.onmessage = (event: MessageEvent<SyncMessage>) => {\n const message = event.data;\n\n // Prevent infinite loops\n if (isProcessingExternalUpdate) return;\n\n isProcessingExternalUpdate = true;\n\n try {\n if (message.type === 'logout' && syncLogout) {\n accessToken.set(null);\n refreshToken.set(null);\n queryClient.repository.unbindAllSecure();\n } else if (message.type === 'tokens-updated' && syncTokens) {\n accessToken.set(decryptToken(message.accessToken));\n refreshToken.set(decryptToken(message.refreshToken));\n }\n } finally {\n isProcessingExternalUpdate = false;\n }\n };\n\n const cleanup = () => {\n channel?.close();\n };\n\n destroyRef.onDestroy(cleanup);\n\n if (syncTokens) {\n effect(() => {\n const access = accessToken();\n const refresh = refreshToken();\n\n if (access && refresh && !isProcessingExternalUpdate && channel) {\n const message: SyncMessage = {\n type: 'tokens-updated',\n accessToken: encryptToken(access),\n refreshToken: encryptToken(refresh),\n };\n channel.postMessage(message);\n }\n });\n }\n\n if (syncLogout) {\n let hadTokens = false;\n\n effect(() => {\n const access = accessToken();\n\n if (access) {\n hadTokens = true;\n } else if (hadTokens && !isProcessingExternalUpdate && channel) {\n const message: SyncMessage = {\n type: 'logout',\n };\n channel.postMessage(message);\n hadTokens = false;\n }\n });\n }\n\n return { cleanup };\n};\n","import {\n computed,\n DestroyRef,\n effect,\n inject,\n Injector,\n isDevMode,\n Signal,\n signal,\n WritableSignal,\n} from '@angular/core';\nimport { createRootProvider, isObject, ProviderResult } from '@ethlete/core';\nimport { Observable, Subject } from 'rxjs';\nimport {\n AnyCreateQueryClientResult,\n authExtractTokensResponseMissingAccessToken,\n authExtractTokensResponseMissingRefreshToken,\n authExtractTokensResponseNotObject,\n authProviderFeatureUsedMultipleTimes,\n QueryArgs,\n QueryClient,\n QueryErrorResponse,\n QueryRepository,\n QuerySnapshot,\n RequestArgs,\n RunQueryExecuteOptions,\n} from '../http';\nimport { decryptBearer } from '../legacy';\nimport {\n AnyQueryBuilder,\n AuthQueryBuilder,\n BearerAuthProviderTokens,\n TokenRefreshQueryBuilder,\n} from './bearer-auth-query-builders';\nimport {\n InactivityLogoutFeature,\n PersistentAuthFeature,\n TokenExpirationWarningFeature,\n TrackingFeature,\n} from './features';\nimport { setupLeaderElection, setupMultiTabSync } from './internal';\n\nexport { AnyQueryBuilder } from './bearer-auth-query-builders';\n\nexport type BearerAuthExecutionStateLoading<TType extends string = string> = {\n type: TType;\n state: 'loading';\n};\n\nexport type BearerAuthExecutionStateSuccess<TType extends string = string> = {\n type: TType;\n state: 'success';\n response: unknown;\n};\n\nexport type BearerAuthExecutionStateError<TType extends string = string> = {\n type: TType;\n state: 'error';\n error: QueryErrorResponse;\n};\n\nexport type BearerAuthExecutionStateLogout = {\n type: 'logout';\n state: 'success';\n};\n\nexport type BearerAuthExecutionState<TType extends string = string> =\n | BearerAuthExecutionStateLoading<TType>\n | BearerAuthExecutionStateSuccess<TType>\n | BearerAuthExecutionStateError<TType>\n | BearerAuthExecutionStateLogout;\n\nexport const BearerAuthFeatureType = {\n PERSISTENT_AUTH: 'PERSISTENT_AUTH',\n TOKEN_EXPIRATION_WARNING: 'TOKEN_EXPIRATION_WARNING',\n INACTIVITY_LOGOUT: 'INACTIVITY_LOGOUT',\n TOKEN_REVOCATION: 'TOKEN_REVOCATION',\n TRACKING: 'TRACKING',\n} as const;\n\nexport type BearerAuthFeatureType = (typeof BearerAuthFeatureType)[keyof typeof BearerAuthFeatureType];\n\nexport type BearerAuthFeature<TBuilders extends readonly AnyQueryBuilder[], TBearerData> = {\n type: BearerAuthFeatureType;\n setup: (context: BearerAuthProviderFeatureContext<TBearerData, TBuilders>) => unknown;\n};\n\nexport type ExtractQueryKey<T> =\n T extends AuthQueryBuilder<infer K, any> // eslint-disable-line @typescript-eslint/no-explicit-any\n ? K\n : T extends TokenRefreshQueryBuilder<infer K, any> // eslint-disable-line @typescript-eslint/no-explicit-any\n ? K\n : never;\n\nexport type ExtractQueryArgs<T> =\n T extends AuthQueryBuilder<string, infer TArgs>\n ? TArgs\n : T extends TokenRefreshQueryBuilder<string, infer TArgs>\n ? TArgs\n : never;\n\nexport type QueryRegistry<TBuilders extends readonly AnyQueryBuilder[]> = {\n [K in ExtractQueryKey<TBuilders[number]>]: {\n execute: (\n args: RequestArgs<ExtractQueryArgs<Extract<TBuilders[number], { key: K }>>>,\n options?: RunQueryExecuteOptions,\n ) => QuerySnapshot<ExtractQueryArgs<Extract<TBuilders[number], { key: K }>>>;\n snapshot: Signal<QuerySnapshot<ExtractQueryArgs<Extract<TBuilders[number], { key: K }>>> | null>;\n };\n};\n\ntype HasFeatureType<\n TFeatures extends readonly unknown[],\n TType extends BearerAuthFeatureType,\n> = TFeatures extends readonly ((context: any) => any)[] // eslint-disable-line @typescript-eslint/no-explicit-any\n ? Extract<ReturnType<TFeatures[number]>, { type: TType }> extends never\n ? false\n : true\n : false;\n\ntype ExtractFeatureInstance<\n TFeatures extends readonly unknown[],\n TType extends BearerAuthFeatureType,\n> = TFeatures extends readonly ((context: any) => any)[] // eslint-disable-line @typescript-eslint/no-explicit-any\n ? Extract<ReturnType<TFeatures[number]>, { type: TType }> extends { type: TType; instance: infer TInstance }\n ? TInstance\n : never\n : never;\n\nexport type FeatureRegistry<\n TFeatures extends readonly unknown[],\n TBuilders extends readonly AnyQueryBuilder[] = readonly AnyQueryBuilder[],\n> = (HasFeatureType<TFeatures, typeof BearerAuthFeatureType.PERSISTENT_AUTH> extends true\n ? { persistentAuth: PersistentAuthFeature }\n : unknown) &\n (HasFeatureType<TFeatures, typeof BearerAuthFeatureType.TOKEN_EXPIRATION_WARNING> extends true\n ? { tokenExpirationWarning: TokenExpirationWarningFeature }\n : unknown) &\n (HasFeatureType<TFeatures, typeof BearerAuthFeatureType.INACTIVITY_LOGOUT> extends true\n ? { inactivityLogout: InactivityLogoutFeature }\n : unknown) &\n (HasFeatureType<TFeatures, typeof BearerAuthFeatureType.TOKEN_REVOCATION> extends true\n ? { tokenRevocation: ExtractFeatureInstance<TFeatures, typeof BearerAuthFeatureType.TOKEN_REVOCATION> }\n : unknown) &\n (HasFeatureType<TFeatures, typeof BearerAuthFeatureType.TRACKING> extends true\n ? { tracking: TrackingFeature<TBuilders> }\n : unknown);\n\nexport type CreateBearerAuthProviderConfig<\n TBuilders extends readonly AnyQueryBuilder[],\n TFeatures extends readonly ((context: BearerAuthProviderFeatureContext<TBearerData, TBuilders>) => unknown)[],\n TBearerData,\n> = {\n /**\n * The name of the auth provider\n */\n name: string;\n\n /**\n * The query client tuple from createQueryClient\n */\n queryClientRef: AnyCreateQueryClientResult;\n\n /**\n * Query builders\n */\n queries: TBuilders;\n\n /**\n * Feature builders\n */\n features?: TFeatures;\n\n /**\n * A function that decrypts the bearer token\n * @default decryptBearer()\n */\n bearerDecryptFn?: (token: string) => TBearerData;\n\n /**\n * Multi-tab sync configuration\n * Set to false to disable\n * Leader election is automatically enabled when multiTabSync is enabled\n * @default { enabled: true, channelName: 'ethlete-auth-sync', syncTokens: true, syncLogout: true, leaderElection: true }\n */\n multiTabSync?:\n | false\n | {\n /**\n * Whether multi-tab sync is enabled\n * @default true\n */\n enabled?: boolean;\n\n /**\n * Channel name for BroadcastChannel\n * @default 'ethlete-auth-sync'\n */\n channelName?: string;\n\n /**\n * Whether to sync token updates across tabs\n * @default true\n */\n syncTokens?: boolean;\n\n /**\n * Whether to sync logout across tabs\n * @default true\n */\n syncLogout?: boolean;\n\n /**\n * Whether to use leader election for token refresh\n * When enabled, only one tab (the leader) will perform automatic token refreshes\n * @default true\n */\n leaderElection?: boolean;\n };\n};\n\nexport type BearerAuthProvider<\n TBuilders extends readonly AnyQueryBuilder[],\n TFeatures extends readonly ((context: BearerAuthProviderFeatureContext<TBearerData, TBuilders>) => unknown)[],\n TBearerData,\n> = {\n /**\n * Registry of all configured auth queries\n */\n queries: QueryRegistry<TBuilders>;\n\n /**\n * Registry of all configured features\n */\n features: FeatureRegistry<TFeatures, TBuilders>;\n\n /**\n * The current access token\n */\n accessToken: Signal<string | null>;\n\n /**\n * The current refresh token\n */\n refreshToken: Signal<string | null>;\n\n /**\n * The decrypted bearer data\n */\n bearerData: Signal<TBearerData | null>;\n\n /**\n * Whether the user is currently authenticated\n */\n isAuthenticated: Signal<boolean>;\n\n /**\n * The latest executed query (including internal triggers like auto-refresh)\n */\n latestExecutedQuery: Signal<{ key: ExtractQueryKey<TBuilders[number]>; snapshot: QuerySnapshot<QueryArgs> } | null>;\n\n /**\n * The latest non-internal query (user-triggered only)\n */\n latestNonInternalQuery: Signal<{\n key: ExtractQueryKey<TBuilders[number]>;\n snapshot: QuerySnapshot<QueryArgs>;\n } | null>;\n\n /**\n * The current execution state of the auth provider.\n * Tracks the latest auth operation (login, autoLogin, tokenRefresh, logout, revocation) with its state and payload.\n */\n executionState: Signal<BearerAuthExecutionState<\n ExtractQueryKey<TBuilders[number]> | 'autoLogin' | 'tokenRefresh' | 'logout' | 'revocation'\n > | null>;\n\n /**\n * Logout the user (clears all tokens and unbinds secure queries)\n */\n logout: () => void;\n\n /**\n * Observable that emits after a successful token refresh.\n * Secure queries can subscribe to this to re-execute themselves with the new token.\n */\n afterTokenRefresh$: Observable<void>;\n};\n\nexport type BearerAuthProviderFeatureContext<\n TBearerData = unknown,\n TBuilders extends readonly AnyQueryBuilder[] = readonly AnyQueryBuilder[],\n> = {\n refreshToken: WritableSignal<string | null>;\n afterTokenRefresh$: Observable<void>;\n accessToken: WritableSignal<string | null>;\n bearerData: Signal<TBearerData | null>;\n logout: () => void;\n injector: Injector;\n destroyRef: DestroyRef;\n setTokens: (access: string, refresh: string) => void;\n isLeader: () => boolean;\n leaderElection?: { isLeader: Signal<boolean>; instanceCount: Signal<number> };\n queries: QueryRegistry<TBuilders>;\n executionState: WritableSignal<BearerAuthExecutionState | null>;\n};\n\nexport type BearerAuthProviderQueryContext<\n TBearerData = unknown,\n TBuilders extends readonly AnyQueryBuilder[] = readonly AnyQueryBuilder[],\n> = {\n accessToken: WritableSignal<string | null>;\n refreshToken: WritableSignal<string | null>;\n bearerDecryptFn: ((token: string) => TBearerData) | undefined;\n queryClient: QueryClient;\n repository: QueryRepository;\n afterTokenRefresh$: Observable<void>;\n isLeader: () => boolean;\n queries: QueryRegistry<TBuilders>;\n};\n\nconst defaultExtractTokens = (response: unknown): BearerAuthProviderTokens => {\n if (!isObject(response)) {\n throw authExtractTokensResponseNotObject();\n }\n if (!('accessToken' in response) || typeof response['accessToken'] !== 'string') {\n throw authExtractTokensResponseMissingAccessToken();\n }\n if (!('refreshToken' in response) || typeof response['refreshToken'] !== 'string') {\n throw authExtractTokensResponseMissingRefreshToken();\n }\n return { accessToken: response['accessToken'], refreshToken: response['refreshToken'] };\n};\n\nconst deriveExecutionStateType = (builder: AnyQueryBuilder, triggeredBy: string | undefined): string => {\n if (triggeredBy === 'persistent-auth') return 'autoLogin';\n if (builder._type === 'tokenRefreshQuery') return 'tokenRefresh';\n if (triggeredBy === 'token-revocation') return 'revocation';\n return builder.key;\n};\n\nconst setupBearerQueryRegistry = <TBuilders extends readonly AnyQueryBuilder[]>(\n builders: TBuilders,\n injector: Injector,\n latestExecutedQuery: WritableSignal<{ key: string; snapshot: QuerySnapshot<QueryArgs> } | null>,\n latestNonInternalQuery: WritableSignal<{ key: string; snapshot: QuerySnapshot<QueryArgs> } | null>,\n setTokens: (access: string, refresh: string) => void,\n executionState: WritableSignal<BearerAuthExecutionState | null>,\n) => {\n const queries = {} as QueryRegistry<TBuilders>;\n const querySnapshots = new Map<string, Signal<QuerySnapshot<QueryArgs> | null>>();\n\n for (const builder of builders) {\n const querySnapshot = signal<QuerySnapshot<QueryArgs> | null>(null);\n querySnapshots.set(builder.key, querySnapshot);\n\n const extractTokens = builder.config.extractTokens ?? defaultExtractTokens;\n\n effect(() => {\n const snapshot = querySnapshot();\n if (!snapshot) return;\n\n const response = snapshot.response();\n const loading = snapshot.loading();\n const error = snapshot.error();\n\n if (response && !loading && !error) {\n try {\n const tokens = extractTokens(response);\n setTokens(tokens.accessToken, tokens.refreshToken);\n } catch (extractError) {\n if (isDevMode()) {\n console.error(`Failed to extract tokens from ${builder.key} response:`, extractError);\n }\n }\n }\n });\n\n const execute = (args: RequestArgs<QueryArgs>, options?: { triggeredBy?: string }) => {\n const query = builder.config.queryCreator({\n onlyManualExecution: true,\n injector,\n });\n query.execute({ args, options });\n const snapshot = query.createSnapshot();\n\n const stateType = deriveExecutionStateType(builder, options?.triggeredBy);\n\n if (stateType !== 'revocation') {\n latestExecutedQuery.set({ key: builder.key, snapshot });\n if (!snapshot.triggeredBy()) {\n latestNonInternalQuery.set({ key: builder.key, snapshot });\n }\n }\n executionState.set({ type: stateType, state: 'loading' });\n\n effect(\n () => {\n const response = snapshot.response();\n const loading = snapshot.loading();\n const error = snapshot.error();\n\n if (loading) return;\n\n if (error) {\n executionState.set({ type: stateType, state: 'error', error });\n } else if (response) {\n executionState.set({ type: stateType, state: 'success', response });\n }\n },\n { injector },\n );\n\n querySnapshot.set(snapshot);\n return snapshot;\n };\n\n queries[builder.key as ExtractQueryKey<TBuilders[number]>] = {\n execute,\n snapshot: querySnapshot.asReadonly(),\n } as unknown as QueryRegistry<TBuilders>[ExtractQueryKey<TBuilders[number]>];\n }\n\n return { queries, querySnapshots };\n};\n\nconst setupFeatures = <\n TBuilders extends readonly AnyQueryBuilder[],\n TFeatures extends readonly ((context: BearerAuthProviderFeatureContext<TBearerData, TBuilders>) => unknown)[],\n TBearerData,\n>(\n featureBuilders: TFeatures | undefined,\n context: BearerAuthProviderFeatureContext<TBearerData, TBuilders>,\n) => {\n const features: Record<string, unknown> = {};\n\n if (!featureBuilders?.length) {\n return features;\n }\n\n const featureTypes = new Set<BearerAuthFeatureType>();\n\n for (const featureSetup of featureBuilders) {\n const feature = featureSetup(context) as BearerAuthFeature<TBuilders, TBearerData> & { instance: unknown };\n\n if (featureTypes.has(feature.type)) {\n throw authProviderFeatureUsedMultipleTimes(feature.type);\n }\n\n featureTypes.add(feature.type);\n const featureName = feature.type\n .toLowerCase()\n .split('_')\n .map((word, index) => (index === 0 ? word : word.charAt(0).toUpperCase() + word.slice(1)))\n .join('');\n features[featureName] = feature.instance;\n }\n\n return features;\n};\n\nconst setupMultiTabSyncIfEnabled = (\n config: CreateBearerAuthProviderConfig<any, any, any>, // eslint-disable-line @typescript-eslint/no-explicit-any\n accessToken: WritableSignal<string | null>,\n refreshToken: WritableSignal<string | null>,\n queryClient: QueryClient,\n) => {\n const multiTabSyncConfig = config.multiTabSync;\n const multiTabSyncEnabled = multiTabSyncConfig !== false && (multiTabSyncConfig?.enabled ?? true);\n\n if (multiTabSyncEnabled) {\n setupMultiTabSync(\n {\n channelName: typeof multiTabSyncConfig === 'object' ? multiTabSyncConfig?.channelName : undefined,\n syncTokens: typeof multiTabSyncConfig === 'object' ? multiTabSyncConfig?.syncTokens : undefined,\n syncLogout: typeof multiTabSyncConfig === 'object' ? multiTabSyncConfig?.syncLogout : undefined,\n },\n accessToken,\n refreshToken,\n queryClient,\n );\n }\n};\n\nconst createLeaderElection = (\n config: CreateBearerAuthProviderConfig<any, any, any>, // eslint-disable-line @typescript-eslint/no-explicit-any\n) => {\n const multiTabSyncConfig = config.multiTabSync;\n const multiTabSyncEnabled = multiTabSyncConfig !== false && (multiTabSyncConfig?.enabled ?? true);\n const leaderElectionEnabled =\n multiTabSyncEnabled &&\n (typeof multiTabSyncConfig === 'object' ? (multiTabSyncConfig?.leaderElection ?? true) : true);\n const leaderElection = leaderElectionEnabled ? setupLeaderElection() : null;\n const isLeaderFn = () => (leaderElectionEnabled ? (leaderElection?.isLeader() ?? true) : true);\n const leaderElectionContext = leaderElection\n ? { isLeader: leaderElection.isLeader, instanceCount: leaderElection.instanceCount }\n : undefined;\n return { isLeaderFn, leaderElectionContext };\n};\n\nconst createBearerAuthProviderImpl = <\n TBuilders extends readonly AnyQueryBuilder[],\n TFeatures extends readonly ((context: BearerAuthProviderFeatureContext<TBearerData, TBuilders>) => unknown)[],\n TBearerData,\n>(\n config: CreateBearerAuthProviderConfig<TBuilders, TFeatures, TBearerData>,\n) => {\n const injector = inject(Injector);\n const destroyRef = inject(DestroyRef);\n const queryClient = config.queryClientRef[1]();\n\n const accessToken = signal<string | null>(null);\n const refreshToken = signal<string | null>(null);\n const afterTokenRefresh$ = new Subject<void>();\n\n const bearerData = computed<TBearerData | null>(() => {\n const token = accessToken();\n if (!token) return null;\n\n try {\n return config.bearerDecryptFn?.(token) ?? decryptBearer<TBearerData>(token);\n } catch (error) {\n if (isDevMode()) {\n console.error('Failed to decrypt bearer token:', error);\n }\n return null;\n }\n });\n\n const isAuthenticated = computed(() => !!accessToken());\n const latestExecutedQuery = signal<{ key: string; snapshot: QuerySnapshot<QueryArgs> } | null>(null);\n const latestNonInternalQuery = signal<{ key: string; snapshot: QuerySnapshot<QueryArgs> } | null>(null);\n const executionState = signal<BearerAuthExecutionState | null>(null);\n\n const setTokens = (access: string, refresh: string) => {\n accessToken.set(access);\n refreshToken.set(refresh);\n afterTokenRefresh$.next();\n };\n\n const { queries } = setupBearerQueryRegistry(\n config.queries,\n injector,\n latestExecutedQuery,\n latestNonInternalQuery,\n setTokens,\n executionState,\n );\n\n const logout = () => {\n accessToken.set(null);\n refreshToken.set(null);\n queryClient.repository.unbindAllSecure();\n latestExecutedQuery.set(null);\n latestNonInternalQuery.set(null);\n executionState.set({ type: 'logout', state: 'success' });\n };\n\n const isLeader = createLeaderElection(config);\n\n const querySetupContext: BearerAuthProviderQueryContext<TBearerData, TBuilders> = {\n accessToken,\n refreshToken,\n bearerDecryptFn: config.bearerDecryptFn,\n queryClient,\n repository: queryClient.repository,\n isLeader: isLeader.isLeaderFn,\n afterTokenRefresh$,\n queries: queries as unknown as QueryRegistry<TBuilders>,\n };\n\n for (const builder of config.queries) {\n builder.setup?.(querySetupContext);\n }\n\n const featureSetupContext: BearerAuthProviderFeatureContext<TBearerData, TBuilders> = {\n refreshToken,\n accessToken,\n bearerData,\n logout,\n injector,\n destroyRef,\n setTokens,\n isLeader: isLeader.isLeaderFn,\n leaderElection: isLeader.leaderElectionContext,\n afterTokenRefresh$,\n queries: queries as unknown as QueryRegistry<TBuilders>,\n executionState,\n };\n\n const features = setupFeatures(config.features, featureSetupContext);\n\n setupMultiTabSyncIfEnabled(config, accessToken, refreshToken, queryClient);\n\n return {\n queries,\n features: features as FeatureRegistry<TFeatures, TBuilders>,\n accessToken: accessToken.asReadonly(),\n refreshToken: refreshToken.asReadonly(),\n bearerData,\n isAuthenticated,\n latestExecutedQuery: latestExecutedQuery.asReadonly(),\n latestNonInternalQuery: latestNonInternalQuery.asReadonly(),\n executionState: executionState.asReadonly(),\n logout,\n afterTokenRefresh$,\n } as BearerAuthProvider<TBuilders, TFeatures, TBearerData>;\n};\n\nexport const createBearerAuthProvider = <\n TBuilders extends readonly AnyQueryBuilder[],\n TFeatures extends readonly ((context: BearerAuthProviderFeatureContext<TBearerData, TBuilders>) => unknown)[],\n TBearerData = unknown,\n>(\n config: CreateBearerAuthProviderConfig<TBuilders, TFeatures, TBearerData>,\n) => createRootProvider(() => createBearerAuthProviderImpl(config), { name: `BearerAuthProvider_${config.name}` });\n\nexport type BearerAuthProviderRef<\n TBuilders extends readonly AnyQueryBuilder[] = readonly AnyQueryBuilder[],\n TFeatures extends readonly ((context: BearerAuthProviderFeatureContext<TBearerData, TBuilders>) => unknown)[] =\n readonly ((context: BearerAuthProviderFeatureContext<unknown, readonly AnyQueryBuilder[]>) => unknown)[],\n TBearerData = unknown,\n> = ProviderResult<BearerAuthProvider<TBuilders, TFeatures, TBearerData>>;\n\nexport type AnyCreateBearerAuthProviderResult = BearerAuthProviderRef<any, any, any>; // eslint-disable-line @typescript-eslint/no-explicit-any\nexport type AnyBearerAuthProvider = NonNullable<ReturnType<AnyCreateBearerAuthProviderResult[1]>>;\n","import { isDevMode } from '@angular/core';\nimport { takeUntilDestroyed, toObservable } from '@angular/core/rxjs-interop';\nimport { filter, of, switchMap, tap, timer } from 'rxjs';\nimport { QueryArgs, QueryCreator, RequestArgs, ResponseType } from '../http';\nimport { ShouldRetryRequestFn } from '../http/query-retry-utils';\nimport { decryptBearer } from '../legacy/auth';\nimport { BearerAuthProviderQueryContext } from './bearer-auth-provider';\n\nexport type BearerAuthProviderTokens = {\n accessToken: string;\n refreshToken: string;\n};\n\nexport type AuthQueryConfig<TArgs extends QueryArgs> = {\n queryCreator: QueryCreator<TArgs>;\n /**\n * Extracts tokens from the response.\n * @default (response) => response (assumes response has accessToken and refreshToken properties)\n */\n extractTokens?: (response: ResponseType<TArgs>) => BearerAuthProviderTokens;\n /**\n * Custom retry function for HTTP requests.\n * @internal Used internally by token refresh queries\n */\n retryFn?: ShouldRetryRequestFn;\n};\n\nexport type TokenRefreshQueryConfig<TArgs extends QueryArgs> = AuthQueryConfig<TArgs> & {\n /**\n * The property name in the decoded JWT that contains the expiration time (in seconds).\n * @default 'exp'\n */\n expiresInPropertyName?: string;\n\n /**\n * Strategy for determining when to refresh the token.\n * Can be either:\n * - A percentage (0-1) of the token's lifetime (e.g., 0.75 = refresh at 75% of lifetime)\n * - A fixed time in milliseconds before expiration\n * - An object with both percentage and min/max constraints\n * @default { percentage: 0.75, minBufferMs: 60000, maxBufferMs: 600000 }\n */\n refreshStrategy?:\n | number\n | {\n /**\n * Percentage of token lifetime before refresh (0-1)\n * @default 0.75\n */\n percentage?: number;\n /**\n * Minimum buffer time in ms (prevents too-early refresh for short-lived tokens)\n * @default 60000 (1 minute)\n */\n minBufferMs?: number;\n /**\n * Maximum buffer time in ms (prevents too-late refresh for long-lived tokens)\n * @default 600000 (10 minutes)\n */\n maxBufferMs?: number;\n };\n\n /**\n * Minimum interval between refresh attempts in milliseconds.\n * Prevents rapid refresh loops in case of issues.\n * @default 30000 (30 seconds)\n */\n minRefreshInterval?: number;\n\n /**\n * Whether to immediately refresh if token is already expired on startup.\n * @default true\n */\n refreshIfExpired?: boolean;\n\n /**\n * Configuration for retry behavior on failed refresh attempts.\n * @default { retryableStatusCodes: [0, 408, 425, 429, 500, 502, 503, 504], maxRetryDelayMs: 30000 }\n */\n retryConfig?: {\n /**\n * HTTP status codes that should trigger a retry.\n * Code 0 means network error (no internet).\n * @default [0, 408, 425, 429, 500, 502, 503, 504]\n */\n retryableStatusCodes?: number[];\n /**\n * Maximum delay between retries in milliseconds.\n * Uses exponential backoff up to this limit, then stays constant.\n * @default 30000 (30 seconds)\n */\n maxRetryDelayMs?: number;\n /**\n * Maximum number of retry attempts.\n * Set to 0 for unlimited retries.\n * @default 0 (unlimited)\n */\n maxAttempts?: number;\n };\n\n /**\n * Whether to automatically retry failed requests with 401 status after refreshing tokens.\n * @default true\n */\n autoRetryOn401?: boolean;\n};\n\nexport type AuthQueryBuilder<TKey extends string, TArgs extends QueryArgs> = {\n _type: 'authQuery';\n key: TKey;\n config: AuthQueryConfig<TArgs>;\n setup?: (context: BearerAuthProviderQueryContext) => void;\n};\n\nexport type TokenRefreshQueryBuilder<TKey extends string, TArgs extends QueryArgs> = {\n _type: 'tokenRefreshQuery';\n key: TKey;\n config: TokenRefreshQueryConfig<TArgs>;\n setup?: (context: BearerAuthProviderQueryContext) => void;\n};\n\nexport type AnyQueryBuilder =\n | AuthQueryBuilder<string, any> // eslint-disable-line @typescript-eslint/no-explicit-any\n | TokenRefreshQueryBuilder<string, any>; // eslint-disable-line @typescript-eslint/no-explicit-any\n\nexport const withAuthenticationQuery = <TKey extends string, TArgs extends QueryArgs>(\n key: TKey,\n config: AuthQueryConfig<TArgs>,\n setup?: (context: BearerAuthProviderQueryContext) => void,\n): AuthQueryBuilder<TKey, TArgs> => ({\n _type: 'authQuery',\n key,\n config: {\n ...config,\n queryCreator: config.queryCreator.clone({ subtle: { useQueryRepositoryCache: true } }),\n },\n setup,\n});\n\nexport const withRefreshQuery = <TKey extends string, TArgs extends QueryArgs>(\n key: TKey,\n config: TokenRefreshQueryConfig<TArgs>,\n): TokenRefreshQueryBuilder<TKey, TArgs> => {\n const retryableStatusCodes = config.retryConfig?.retryableStatusCodes ?? [0, 408, 425, 429, 500, 502, 503, 504];\n const maxRetryDelayMs = config.retryConfig?.maxRetryDelayMs ?? 30000; // 30 seconds\n const maxAttempts = config.retryConfig?.maxAttempts ?? 0; // 0 = unlimited\n\n const refreshRetryFn: ShouldRetryRequestFn = ({ error, retryCount }) => {\n const { status } = error;\n\n if (maxAttempts > 0 && retryCount >= maxAttempts) {\n return { retry: false };\n }\n\n if (!retryableStatusCodes.includes(status)) {\n return { retry: false };\n }\n\n if (status === 429) {\n const retryAfter = error.headers.get('retry-after') || error.headers.get('x-retry-after');\n if (retryAfter) {\n const delay = parseInt(retryAfter) * 1000;\n if (!Number.isNaN(delay)) {\n return { retry: true, delay: Math.min(delay, maxRetryDelayMs) };\n }\n }\n }\n\n const exponentialDelay = 1000 * Math.pow(2, retryCount);\n const delay = Math.min(exponentialDelay, maxRetryDelayMs);\n\n return { retry: true, delay };\n };\n\n const setup = (context: BearerAuthProviderQueryContext) => {\n const expiresInPropertyName = config.expiresInPropertyName ?? 'exp';\n const minRefreshInterval = config.minRefreshInterval ?? 30000; // 30 seconds default\n const refreshIfExpired = config.refreshIfExpired ?? true;\n\n let lastRefreshTime = 0;\n\n const executeRefresh = (triggeredInternally = true) => {\n const currentRefreshToken = context.refreshToken();\n if (!currentRefreshToken || !context.isLeader()) return;\n\n const now = Date.now();\n const timeSinceLastRefresh = now - lastRefreshTime;\n\n // Prevent too-frequent refreshes\n if (timeSinceLastRefresh < minRefreshInterval) return;\n\n lastRefreshTime = now;\n const refreshArgs = { body: { token: currentRefreshToken } } as RequestArgs<QueryArgs>;\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n context.queries[key]!.execute(refreshArgs, {\n triggeredBy: triggeredInternally ? 'token-refresh' : undefined,\n });\n };\n\n const calculateRefreshBuffer = (tokenLifetimeMs: number): number => {\n if (typeof config.refreshStrategy === 'number') {\n return config.refreshStrategy;\n }\n\n const percentage = config.refreshStrategy?.percentage ?? 0.75;\n const minBufferMs = config.refreshStrategy?.minBufferMs ?? 60000; // 1 minute\n const maxBufferMs = config.refreshStrategy?.maxBufferMs ?? 600000; // 10 minutes\n\n const calculatedBuffer = tokenLifetimeMs * (1 - percentage);\n\n return Math.max(minBufferMs, Math.min(maxBufferMs, calculatedBuffer));\n };\n\n // Auto-refresh based on token expiration\n toObservable(context.accessToken)\n .pipe(\n switchMap((token) => {\n if (!token) return of(null);\n\n try {\n const bearerDataValue = context.bearerDecryptFn ? context.bearerDecryptFn(token) : decryptBearer(token);\n const expiresIn = (bearerDataValue as Record<string, unknown>)?.[expiresInPropertyName];\n\n if (typeof expiresIn !== 'number') {\n if (isDevMode()) {\n console.warn(`Token does not contain valid ${expiresInPropertyName} property for auto-refresh`);\n }\n return of(null);\n }\n\n const expiresAtMs = expiresIn * 1000;\n const now = Date.now();\n const tokenLifetimeMs = expiresAtMs - now;\n\n if (tokenLifetimeMs <= 0) {\n if (refreshIfExpired) {\n if (isDevMode()) {\n console.warn('Token is already expired, triggering immediate refresh');\n }\n return of(true);\n }\n return of(null);\n }\n\n const refreshBufferMs = calculateRefreshBuffer(tokenLifetimeMs);\n const timeUntilRefresh = tokenLifetimeMs - refreshBufferMs;\n\n if (timeUntilRefresh <= 0) {\n return of(true);\n }\n\n return timer(timeUntilRefresh).pipe(tap(() => true));\n } catch {\n return of(null);\n }\n }),\n takeUntilDestroyed(),\n )\n .subscribe((shouldRefresh) => {\n if (shouldRefresh) {\n executeRefresh(true);\n }\n });\n\n // Auto-retry on 401: Listen to repository events and trigger refresh on 401 errors\n const autoRetryOn401 = config.autoRetryOn401 ?? true;\n if (autoRetryOn401) {\n context.repository.events$\n .pipe(\n filter((event) => {\n // Only handle 401 errors for secure queries\n if (event.type !== 'request-error') return false;\n if (!event.isSecure) return false;\n if (event.error?.status !== 401) return false;\n\n return true;\n }),\n takeUntilDestroyed(),\n )\n .subscribe(() => {\n executeRefresh(true);\n });\n }\n };\n\n return {\n _type: 'tokenRefreshQuery',\n key,\n config: {\n ...config,\n queryCreator: config.queryCreator.clone({ retryFn: refreshRetryFn, subtle: { useQueryRepositoryCache: true } }),\n },\n setup,\n };\n};\n","import { DestroyRef, DOCUMENT, effect, inject, Signal, signal } from '@angular/core';\nimport { filter, fromEvent, interval, merge, switchMap, throttleTime, timer } from 'rxjs';\nimport { AnyQueryBuilder, BearerAuthFeatureType, BearerAuthProviderFeatureContext } from '../bearer-auth-provider';\n\nexport type InactivityLogoutConfig = {\n /**\n * Time in milliseconds of inactivity before auto-logout\n * @default 15 * 60 * 1000 (15 minutes)\n */\n inactivityTimeout?: number;\n /**\n * Events to track for activity detection\n * @default ['mousedown', 'keydown', 'scroll', 'touchstart']\n */\n activityEvents?: string[];\n /**\n * Custom activity check function (called periodically)\n * Return true if user is active\n */\n customActivityCheck?: () => boolean;\n};\n\nexport type InactivityLogoutFeature = {\n /**\n * Enable inactivity tracking\n */\n enable: () => void;\n /**\n * Disable inactivity tracking\n */\n disable: () => void;\n /**\n * Reset the inactivity timer (mark user as active)\n */\n resetTimer: () => void;\n /**\n * Whether inactivity tracking is enabled\n */\n enabled: Signal<boolean>;\n /**\n * Milliseconds until auto-logout (null if disabled or no token)\n */\n calculateTimeUntilLogout: () => number | null;\n};\n\nexport const withInactivityLogout = <TBuilders extends readonly AnyQueryBuilder[]>(\n config: InactivityLogoutConfig = {},\n) => {\n return (context: BearerAuthProviderFeatureContext<unknown, TBuilders>) => {\n const inactivityTimeout = config.inactivityTimeout ?? 15 * 60 * 1000;\n const activityEvents = config.activityEvents ?? ['mousedown', 'keydown', 'scroll', 'touchstart'];\n const destroyRef = inject(DestroyRef);\n const document = inject(DOCUMENT);\n const enabled = signal(true);\n const lastActivityTime = signal(Date.now());\n\n const resetTimer = () => {\n lastActivityTime.set(Date.now());\n };\n\n const activityFromEvents$ = merge(...activityEvents.map((event) => fromEvent(document, event))).pipe(\n throttleTime(1000),\n );\n\n const activityFromCustomCheck$ = config.customActivityCheck\n ? interval(1000).pipe(filter(() => config.customActivityCheck?.() ?? false))\n : merge();\n\n const activity$ = merge(activityFromEvents$, activityFromCustomCheck$);\n\n const activitySubscription = activity$.subscribe(() => {\n if (enabled() && context.accessToken()) {\n resetTimer();\n }\n });\n\n const inactivityLogout$ = activity$.pipe(\n switchMap(() => timer(inactivityTimeout)),\n filter(() => enabled() && !!context.accessToken()),\n );\n\n const logoutSubscription = inactivityLogout$.subscribe(() => {\n context.logout();\n });\n\n effect(() => {\n const token = context.accessToken();\n if (token && enabled()) {\n resetTimer();\n }\n });\n\n const enable = () => {\n enabled.set(true);\n resetTimer();\n };\n\n const disable = () => {\n enabled.set(false);\n };\n\n const calculateTimeUntilLogout = () => {\n if (!enabled() || !context.accessToken()) {\n return null;\n }\n\n const elapsed = Date.now() - lastActivityTime();\n const remaining = inactivityTimeout - elapsed;\n\n return remaining > 0 ? remaining : 0;\n };\n\n resetTimer();\n\n destroyRef.onDestroy(() => {\n activitySubscription.unsubscribe();\n logoutSubscription.unsubscribe();\n });\n\n const instance: InactivityLogoutFeature = {\n enable,\n disable,\n resetTimer,\n enabled: enabled.asReadonly(),\n calculateTimeUntilLogout,\n };\n\n return {\n type: BearerAuthFeatureType.INACTIVITY_LOGOUT,\n instance,\n };\n };\n};\n","import { Signal, effect, signal } from '@angular/core';\nimport { deleteCookie as coreDeleteCookie, getCookie, getDomain, injectRoute, setCookie } from '@ethlete/core';\nimport { RequestArgs } from '../../http';\nimport {\n AnyQueryBuilder,\n BearerAuthFeatureType,\n BearerAuthProviderFeatureContext,\n ExtractQueryArgs,\n ExtractQueryKey,\n} from '../bearer-auth-provider';\nimport { decryptToken, encryptToken } from '../utils';\n\nexport type PersistentAuthConfig<\n TBuilders extends readonly AnyQueryBuilder[],\n TKey extends ExtractQueryKey<TBuilders[number]> = ExtractQueryKey<TBuilders[number]>,\n> = {\n /**\n * Default remember me state when no user preference is stored.\n * @default false\n */\n defaultRememberMe?: boolean;\n\n /**\n * Cookie configuration\n */\n cookie?: {\n /**\n * The cookie name where the refresh token is stored\n * @default 'etAuth'\n */\n name?: string;\n /**\n * The domain of the cookie. If not set, the current origin will be used.\n */\n domain?: string;\n /**\n * The days until the cookie expires (only used when rememberMe is true)\n * @default 30\n */\n expiresInDays?: number;\n /**\n * The path of the cookie\n * @default '/'\n */\n path?: string;\n /**\n * The same site property of the cookie\n * @default 'lax'\n */\n sameSite?: 'strict' | 'none' | 'lax';\n };\n\n /**\n * Auto-login configuration\n */\n autoLogin: {\n /**\n * The query key to use for auto-login (must reference a registered query)\n */\n queryKey: TKey;\n /**\n * A function that turns the token gotten from the cookie into the body for the auto-login request\n * @default (token) => ({ body: { token } })\n */\n buildArgs: (token: string) => RequestArgs<ExtractQueryArgs<Extract<TBuilders[number], { key: TKey }>>>;\n /**\n * An array of routes where the auto login via cookie should not be triggered.\n *\n * @default []\n */\n excludeRoutes?: string[];\n };\n};\n\nexport type PersistentAuthFeature = {\n /**\n * Current remember me state (session cookie vs persistent cookie)\n */\n rememberMe: Signal<boolean>;\n /**\n * Set remember me preference.\n * - true: Creates persistent cookie with expiresInDays\n * - false: Creates session cookie (deleted on browser close)\n */\n setRememberMe: (enabled: boolean) => void;\n /**\n * Try to login using stored cookie\n */\n tryLogin: () => void;\n};\n\nexport const withPersistentAuth = <\n TBuilders extends readonly AnyQueryBuilder[],\n TKey extends ExtractQueryKey<TBuilders[number]> = ExtractQueryKey<TBuilders[number]>,\n>(\n config: PersistentAuthConfig<TBuilders, TKey>,\n) => {\n return (context: BearerAuthProviderFeatureContext<unknown, TBuilders>) => {\n const instance = createPersistentAuthFeature(config, context);\n return {\n type: BearerAuthFeatureType.PERSISTENT_AUTH,\n instance,\n };\n };\n};\n\nexport const createPersistentAuthFeature = <\n TBuilders extends readonly AnyQueryBuilder[],\n TKey extends ExtractQueryKey<TBuilders[number]> = ExtractQueryKey<TBuilders[number]>,\n>(\n config: PersistentAuthConfig<TBuilders, TKey>,\n context: BearerAuthProviderFeatureContext<unknown, TBuilders>,\n): PersistentAuthFeature => {\n const { refreshToken } = context;\n const cookieName = config.cookie?.name ?? 'etAuth';\n const rememberMeStorageKey = `${cookieName}-rememberMe`;\n const route = injectRoute();\n\n const initializeRememberMe = (): boolean => {\n const storedPreference = typeof localStorage !== 'undefined' ? localStorage.getItem(rememberMeStorageKey) : null;\n if (storedPreference !== null) {\n return storedPreference === 'true';\n }\n\n const existingCookie = getCookie(cookieName);\n if (existingCookie) {\n return true;\n }\n\n return config.defaultRememberMe ?? false;\n };\n\n const rememberMeSignal = signal(initializeRememberMe());\n\n effect(() => {\n const token = refreshToken();\n const rememberMe = rememberMeSignal();\n const domain = config.cookie?.domain ?? getDomain() ?? 'localhost';\n const path = config.cookie?.path ?? '/';\n const sameSite = config.cookie?.sameSite ?? 'lax';\n\n if (token) {\n const encryptedToken = encryptToken(token);\n if (rememberMe) {\n const expiresInDays = config.cookie?.expiresInDays ?? 30;\n setCookie(cookieName, encryptedToken, expiresInDays, domain, path, sameSite);\n } else {\n setCookie(cookieName, encryptedToken, null, domain, path, sameSite);\n }\n } else {\n coreDeleteCookie(cookieName, path, domain);\n }\n });\n\n const tryLogin = () => {\n const currentRoute = route();\n const excludeRoutes = config.autoLogin.excludeRoutes ?? [];\n const shouldExclude = excludeRoutes.some((r) => currentRoute.startsWith(r));\n\n if (shouldExclude) {\n return;\n }\n\n const storedToken = getCookie(cookieName);\n if (storedToken) {\n const decryptedToken = decryptToken(storedToken);\n const args = config.autoLogin.buildArgs(decryptedToken);\n context.queries[config.autoLogin.queryKey].execute(args, { triggeredBy: 'persistent-auth' });\n }\n };\n\n const setRememberMe = (enabled: boolean) => {\n if (typeof localStorage !== 'undefined') {\n localStorage.setItem(rememberMeStorageKey, String(enabled));\n }\n rememberMeSignal.set(enabled);\n };\n\n tryLogin();\n\n return {\n rememberMe: rememberMeSignal.asReadonly(),\n setRememberMe,\n tryLogin,\n };\n};\n","import { Signal, computed } from '@angular/core';\nimport { toObservable, toSignal } from '@angular/core/rxjs-interop';\nimport { combineLatest, interval, map } from 'rxjs';\nimport { AnyQueryBuilder, BearerAuthFeatureType, BearerAuthProviderFeatureContext } from '../bearer-auth-provider';\n\nexport type TokenExpirationWarningConfig = {\n /**\n * Time in milliseconds before token expiration to emit warning\n * @default 5 * 60 * 1000 (5 minutes)\n */\n warningThreshold?: number;\n /**\n * Interval in milliseconds to check for token expiration\n * @default 1000 (1 second)\n */\n checkInterval?: number;\n};\n\nexport type TokenExpirationWarningFeature = {\n /**\n * Signal that emits true when token is about to expire\n */\n isExpiringSoon: Signal<boolean>;\n /**\n * Time in milliseconds until token expires (null if no token or expired)\n */\n expiresIn: Signal<number | null>;\n /**\n * Timestamp when token expires (null if no token)\n */\n expiresAt: Signal<Date | null>;\n};\n\nexport const withTokenExpirationWarning = <TBuilders extends readonly AnyQueryBuilder[]>(\n config: NoInfer<TokenExpirationWarningConfig> = {},\n) => {\n return (context: BearerAuthProviderFeatureContext<unknown, TBuilders>) => {\n const warningThreshold = config.warningThreshold ?? 5 * 60 * 1000;\n const checkInterval = config.checkInterval ?? 1000;\n const expiresAt = computed<Date | null>(() => {\n const decoded = context.bearerData() as { exp?: number; [key: string]: unknown } | null;\n if (!decoded) return null;\n\n const exp = decoded.exp;\n\n if (typeof exp !== 'number') return null;\n\n return new Date(exp * 1000);\n });\n\n const expiresIn$ = combineLatest([interval(checkInterval), toObservable(context.bearerData)]).pipe(\n map(() => {\n const expiry = expiresAt();\n if (!expiry) return null;\n\n const now = Date.now();\n const msUntilExpiry = expiry.getTime() - now;\n\n return msUntilExpiry > 0 ? msUntilExpiry : null;\n }),\n );\n\n const isExpiringSoon$ = expiresIn$.pipe(\n map((msUntilExpiry) => {\n if (msUntilExpiry === null) return false;\n return msUntilExpiry <= warningThreshold && msUntilExpiry > 0;\n }),\n );\n\n const expiresIn = toSignal(expiresIn$, { initialValue: null });\n const isExpiringSoon = toSignal(isExpiringSoon$, { initialValue: false });\n\n const instance: TokenExpirationWarningFeature = {\n expiresAt,\n expiresIn,\n isExpiringSoon,\n };\n\n return {\n type: BearerAuthFeatureType.TOKEN_EXPIRATION_WARNING,\n instance,\n };\n };\n};\n","import { effect, Signal, signal, untracked } from '@angular/core';\nimport { AnyQuerySnapshot, QuerySnapshot, RequestArgs } from '../../http';\nimport {\n AnyQueryBuilder,\n BearerAuthFeatureType,\n BearerAuthProviderFeatureContext,\n ExtractQueryArgs,\n ExtractQueryKey,\n} from '../bearer-auth-provider';\n\nexport type TokenRevocationConfig<\n TBuilders extends readonly AnyQueryBuilder[],\n TKey extends ExtractQueryKey<TBuilders[number]> = ExtractQueryKey<TBuilders[number]>,\n> = {\n /**\n * The query key to use for token revocation (must reference a registered query)\n */\n queryKey: TKey;\n /**\n * Function to build the revocation request args from tokens\n */\n buildArgs: (tokens: {\n accessToken: string | null;\n refreshToken: string | null;\n }) => RequestArgs<ExtractQueryArgs<Extract<TBuilders[number], { key: TKey }>>>;\n /**\n * Whether to revoke on logout\n * @default true\n */\n revokeOnLogout?: boolean;\n};\n\nexport type TokenRevocationFeature<TQuerySnapshot extends AnyQuerySnapshot> = {\n /**\n * Manually revoke the current tokens.\n * Returns `null` if there are no tokens to revoke\n * Returns the revocation query snapshot if revocation was attempted\n */\n revoke: () => TQuerySnapshot | null;\n /**\n * Enable automatic revocation on logout\n */\n enable: () => void;\n /**\n * Disable automatic revocation on logout\n */\n disable: () => void;\n /**\n * Whether automatic revocation is enabled\n */\n enabled: Signal<boolean>;\n};\n\nexport const withTokenRevocation = <\n TBuilders extends readonly AnyQueryBuilder[],\n TKey extends ExtractQueryKey<TBuilders[number]> = ExtractQueryKey<TBuilders[number]>,\n>(\n config: TokenRevocationConfig<TBuilders, TKey>,\n) => {\n return (context: BearerAuthProviderFeatureContext<unknown, TBuilders>) => {\n type RevocationSnapshot = QuerySnapshot<ExtractQueryArgs<Extract<TBuilders[number], { key: TKey }>>>;\n\n const revokeOnLogout = config.revokeOnLogout ?? true;\n\n const enabled = signal(true);\n let previousAccessToken: string | null = null;\n let currentRevocationSnapshot: RevocationSnapshot | null = null;\n\n const revoke = () => {\n if (currentRevocationSnapshot?.isAlive()) return currentRevocationSnapshot;\n\n const accessToken = context.accessToken();\n const refreshToken = context.refreshToken();\n\n if (!accessToken && !refreshToken) {\n return null;\n }\n\n const args = config.buildArgs({ accessToken, refreshToken });\n\n context.executionState.set({ type: 'revocation', state: 'loading' });\n\n currentRevocationSnapshot = context.queries[config.queryKey].execute(args, {\n triggeredBy: 'token-revocation',\n });\n\n return currentRevocationSnapshot;\n };\n\n const enable = () => {\n enabled.set(true);\n };\n\n const disable = () => {\n enabled.set(false);\n };\n\n if (revokeOnLogout) {\n effect(\n () => {\n const currentToken = context.accessToken();\n\n if (previousAccessToken && !currentToken && enabled()) {\n untracked(() => revoke());\n }\n\n previousAccessToken = currentToken;\n },\n { injector: context.injector },\n );\n }\n\n const instance: TokenRevocationFeature<RevocationSnapshot> = {\n revoke,\n enable,\n disable,\n enabled: enabled.asReadonly(),\n };\n\n return {\n type: BearerAuthFeatureType.TOKEN_REVOCATION,\n instance,\n };\n };\n};\n","import { effect, Signal } from '@angular/core';\nimport { QueryArgs, QueryErrorResponse, QuerySnapshot } from '../../http';\nimport {\n AnyQueryBuilder,\n BearerAuthFeatureType,\n BearerAuthProviderFeatureContext,\n ExtractQueryArgs,\n ExtractQueryKey,\n} from '../bearer-auth-provider';\n\nexport type TrackingEventName<TBuilders extends readonly AnyQueryBuilder[]> =\n | `${ExtractQueryKey<TBuilders[number]>}Execute`\n | `${ExtractQueryKey<TBuilders[number]>}Success`\n | `${ExtractQueryKey<TBuilders[number]>}Failure`\n | 'tokenRefreshSuccess'\n | 'logout'\n | 'leaderStatusChange'\n | 'leaderInstanceCountChange';\n\ntype ExtractKeyFromEventName<TEventName extends string> = TEventName extends `${infer K}Execute`\n ? K\n : TEventName extends `${infer K}Success`\n ? K\n : TEventName extends `${infer K}Failure`\n ? K\n : never;\n\ntype ExtractArgsForEvent<TBuilders extends readonly AnyQueryBuilder[], TEventName extends string> = ExtractQueryArgs<\n Extract<TBuilders[number], { key: ExtractKeyFromEventName<TEventName> }>\n>;\n\nexport type QueryExecuteEventData<TArgs extends QueryArgs = QueryArgs> = {\n queryKey: string;\n args: TArgs;\n};\n\nexport type QuerySuccessEventData<TArgs extends QueryArgs = QueryArgs> = {\n snapshot: QuerySnapshot<TArgs>;\n};\n\nexport type QueryFailureEventData = {\n error: QueryErrorResponse;\n};\n\nexport type TokenRefreshEventData = {\n automatic: boolean;\n};\n\nexport type LeaderStatusChangeEventData = {\n isLeader: boolean;\n};\n\nexport type LeaderInstanceCountChangeEventData = {\n count: number;\n};\n\nexport type TrackingEventDataMap<TBuilders extends readonly AnyQueryBuilder[]> = {\n [K in TrackingEventName<TBuilders>]: K extends `${string}Execute`\n ? QueryExecuteEventData<ExtractArgsForEvent<TBuilders, K>>\n : K extends `${string}Success`\n ? QuerySuccessEventData<ExtractArgsForEvent<TBuilders, K>>\n : K extends `${string}Failure`\n ? QueryFailureEventData\n : K extends 'tokenRefreshSuccess'\n ? TokenRefreshEventData\n : K extends 'logout'\n ? void\n : K extends 'leaderStatusChange'\n ? LeaderStatusChangeEventData\n : K extends 'leaderInstanceCountChange'\n ? LeaderInstanceCountChangeEventData\n : never;\n};\n\nexport type TrackingEventHandler<TData> = (data: TData) => void;\n\nexport type TrackingConfig<TBuilders extends readonly AnyQueryBuilder[] = readonly AnyQueryBuilder[]> = {\n /**\n * Whether to track internal events (auto token refresh, etc.)\n * @default true\n */\n trackInternalEvents?: boolean;\n\n /**\n * Event handlers to register immediately\n */\n on?: {\n [K in TrackingEventName<TBuilders>]?: TrackingEventHandler<TrackingEventDataMap<TBuilders>[K]>;\n };\n};\n\nexport type TrackingFeature<TBuilders extends readonly AnyQueryBuilder[]> = {\n /**\n * Register an event handler for a specific event\n * @returns Unsubscribe function\n */\n on<TEvent extends TrackingEventName<TBuilders>>(\n event: TEvent,\n handler: TrackingEventHandler<TrackingEventDataMap<TBuilders>[TEvent]>,\n ): () => void;\n\n /**\n * Unregister an event handler\n */\n off<TEvent extends TrackingEventName<TBuilders>>(\n event: TEvent,\n handler: TrackingEventHandler<TrackingEventDataMap<TBuilders>[TEvent]>,\n ): void;\n};\n\nexport const withTracking = <TBuilders extends readonly AnyQueryBuilder[]>(config?: TrackingConfig<TBuilders>) => {\n return (context: BearerAuthProviderFeatureContext<unknown, TBuilders>) => {\n const instance = createTrackingFeature<TBuilders>(context, config);\n return {\n type: BearerAuthFeatureType.TRACKING,\n instance,\n };\n };\n};\n\nexport const createTrackingFeature = <TBuilders extends readonly AnyQueryBuilder[]>(\n context: BearerAuthProviderFeatureContext<unknown, TBuilders>,\n config?: TrackingConfig<TBuilders>,\n): TrackingFeature<TBuilders> => {\n const handlers = new Map<string, Set<TrackingEventHandler<any>>>(); // eslint-disable-line @typescript-eslint/no-explicit-any\n\n const on = <TEvent extends TrackingEventName<TBuilders>>(\n event: TEvent,\n handler: TrackingEventHandler<TrackingEventDataMap<TBuilders>[TEvent]>,\n ): (() => void) => {\n if (!handlers.has(event)) {\n handlers.set(event, new Set());\n }\n const eventHandlers = handlers.get(event);\n if (eventHandlers) {\n eventHandlers.add(handler);\n }\n\n return () => off(event, handler);\n };\n\n const off = <TEvent extends TrackingEventName<TBuilders>>(\n event: TEvent,\n handler: TrackingEventHandler<TrackingEventDataMap<TBuilders>[TEvent]>,\n ): void => {\n const eventHandlers = handlers.get(event);\n if (eventHandlers) {\n eventHandlers.delete(handler);\n if (eventHandlers.size === 0) {\n handlers.delete(event);\n }\n }\n };\n\n const fireHandlers = (event: string, data: unknown): void => {\n const eventHandlers = handlers.get(event);\n if (eventHandlers) {\n eventHandlers.forEach((handler) => {\n try {\n handler(data);\n } catch (error) {\n console.error(`Error in tracking event handler for \"${event}\":`, error);\n }\n });\n }\n };\n\n type ForwardedMessage = { event: string; data: unknown };\n const forwardingChannel =\n context.leaderElection && typeof BroadcastChannel !== 'undefined'\n ? new BroadcastChannel('ethlete-auth-tracking')\n : null;\n\n if (forwardingChannel) {\n forwardingChannel.onmessage = (messageEvent: MessageEvent<ForwardedMessage>) => {\n if (context.isLeader()) {\n fireHandlers(messageEvent.data.event, messageEvent.data.data);\n }\n };\n context.destroyRef.onDestroy(() => forwardingChannel.close());\n }\n\n const emit = (event: string, data: unknown): void => {\n if (forwardingChannel && !context.isLeader()) {\n forwardingChannel.postMessage({ event, data } satisfies ForwardedMessage);\n return;\n }\n fireHandlers(event, data);\n };\n\n const emitDirect = (event: string, data: unknown): void => {\n fireHandlers(event, data);\n };\n\n const trackedQueries = new Map<string, { loading: boolean; lastResult: 'success' | 'error' | null }>();\n\n Object.entries(context.queries).forEach(([key, queryEntry]) => {\n const query = queryEntry as { snapshot: Signal<any>; execute: (...args: any[]) => any }; // eslint-disable-line @typescript-eslint/no-explicit-any\n\n effect(() => {\n const snapshot = query.snapshot();\n if (!snapshot) return;\n\n const triggeredBy = snapshot.triggeredBy();\n if (triggeredBy) return;\n\n const loading = snapshot.loading();\n const error = snapshot.error();\n const response = snapshot.response();\n\n const prevState = trackedQueries.get(key);\n\n if (response && !loading && !error && prevState?.lastResult !== 'success') {\n trackedQueries.set(key, { loading: false, lastResult: 'success' });\n emit(`${key}Success`, { snapshot });\n }\n\n if (error && !loading && prevState?.lastResult !== 'error') {\n trackedQueries.set(key, { loading: false, lastResult: 'error' });\n emit(`${key}Failure`, { error });\n }\n\n if (loading) {\n trackedQueries.set(key, { loading: true, lastResult: null });\n }\n });\n });\n\n let hadTokens = false;\n effect(() => {\n const accessToken = context.accessToken();\n const refreshToken = context.refreshToken();\n const hasTokens = !!(accessToken || refreshToken);\n\n if (hadTokens && !hasTokens) {\n emit('logout', undefined);\n }\n\n hadTokens = hasTokens;\n });\n\n context.afterTokenRefresh$.subscribe(() => {\n emit('tokenRefreshSuccess', {\n queryKey: 'refresh',\n snapshot: undefined,\n });\n });\n\n if (config?.on) {\n Object.entries(config.on).forEach(([event, handler]) => {\n if (handler) {\n on(event as TrackingEventName<TBuilders>, handler);\n }\n });\n }\n\n if (context.leaderElection) {\n const { isLeader: isLeaderSignal, instanceCount: instanceCountSignal } = context.leaderElection;\n\n effect(() => {\n emitDirect('leaderStatusChange', { isLeader: isLeaderSignal() } satisfies LeaderStatusChangeEventData);\n });\n\n effect(() => {\n emitDirect('leaderInstanceCountChange', {\n count: instanceCountSignal(),\n } satisfies LeaderInstanceCountChangeEventData);\n });\n }\n\n return {\n on,\n off,\n };\n};\n","import { HttpStatusCode } from '@angular/common/http';\n\nexport const parseHttpErrorCodeToTitleDe = (statusCode: HttpStatusCode) => {\n switch (statusCode) {\n case HttpStatusCode.BadRequest:\n return 'Ungültige Anfrage';\n case HttpStatusCode.Unauthorized:\n return 'Nicht autorisiert';\n case HttpStatusCode.PaymentRequired:\n return 'Zahlung erforderlich';\n case HttpStatusCode.Forbidden:\n return 'Verboten';\n case HttpStatusCode.NotFound:\n return 'Nicht gefunden';\n case HttpStatusCode.MethodNotAllowed:\n return 'Methode nicht erlaubt';\n case HttpStatusCode.NotAcceptable:\n return 'Nicht akzeptabel';\n case HttpStatusCode.ProxyAuthenticationRequired:\n return 'Proxy-Authentifizierung erforderlich';\n case HttpStatusCode.RequestTimeout:\n return 'Anforderungszeitüberschreitung';\n case HttpStatusCode.Conflict:\n return 'Konflikt';\n case HttpStatusCode.Gone:\n return 'Weg';\n case HttpStatusCode.LengthRequired:\n return 'Länge erforderlich';\n case HttpStatusCode.PreconditionFailed:\n return 'Vorbedingung fehlgeschlagen';\n case HttpStatusCode.PayloadTooLarge:\n return 'Nutzlast zu groß';\n case HttpStatusCode.UriTooLong:\n return 'URI zu lang';\n case HttpStatusCode.UnsupportedMediaType:\n return 'Nicht unterstützter Medientyp';\n case HttpStatusCode.RangeNotSatisfiable:\n return 'Bereich nicht zufriedenstellend';\n case HttpStatusCode.ExpectationFailed:\n return 'Erwartung fehlgeschlagen';\n case HttpStatusCode.ImATeapot:\n return 'Ich bin eine Teekanne';\n case HttpStatusCode.MisdirectedRequest:\n return 'Fehlgeleitete Anfrage';\n case HttpStatusCode.UnprocessableEntity:\n return 'Unverarbeitbare Entität';\n case HttpStatusCode.Locked:\n return 'Gesperrt';\n case HttpStatusCode.FailedDependency:\n return 'Fehlgeschlagene Abhängigkeit';\n case HttpStatusCode.TooEarly:\n return 'Zu früh';\n case HttpStatusCode.UpgradeRequired:\n return 'Upgrade erforderlich';\n case HttpStatusCode.PreconditionRequired:\n return 'Vorbedingung erforderlich';\n case HttpStatusCode.TooManyRequests:\n return 'Zu viele Anfragen';\n case HttpStatusCode.RequestHeaderFieldsTooLarge:\n return 'Anforderungskopffelder zu groß';\n case HttpStatusCode.UnavailableForLegalReasons:\n return 'Aus rechtlichen Gründen nicht verfügbar';\n case HttpStatusCode.InternalServerError:\n return 'Interner Serverfehler';\n case HttpStatusCode.NotImplemented:\n return 'Nicht implementiert';\n case HttpStatusCode.BadGateway:\n return 'Schlechtes Gateway';\n case HttpStatusCode.ServiceUnavailable:\n return 'Dienst nicht verfügbar';\n case HttpStatusCode.GatewayTimeout:\n return 'Gateway-Zeitüberschreitung';\n case HttpStatusCode.HttpVersionNotSupported:\n return 'HTTP-Version nicht unterstützt';\n case HttpStatusCode.VariantAlsoNegotiates:\n return 'Variante verhandelt auch';\n case HttpStatusCode.InsufficientStorage:\n return 'Unzureichender Speicher';\n case HttpStatusCode.LoopDetected:\n return 'Schleifenerkennung';\n case HttpStatusCode.NotExtended:\n return 'Nicht erweitert';\n case HttpStatusCode.NetworkAuthenticationRequired:\n return 'Netzwerkauthentifizierung erforderlich';\n default:\n return 'Etwas ist schief gelaufen';\n }\n};\n\nexport const parseHttpErrorCodeToMessageDe = (statusCode: HttpStatusCode) => {\n switch (statusCode) {\n case HttpStatusCode.BadRequest:\n return 'Entschuldigung, wir konnten Ihre Anfrage nicht bearbeiten. Bitte versuchen Sie es später erneut.';\n case HttpStatusCode.Unauthorized:\n return 'Sie sind nicht berechtigt, diese Aktion auszuführen. Bitte melden Sie sich an, um fortzufahren.';\n case HttpStatusCode.PaymentRequired:\n return 'Zur Ausführung dieser Aktion ist eine Zahlung erforderlich.';\n case HttpStatusCode.Forbidden:\n return 'Sie haben keine Berechtigung, diese Aktion auszuführen.';\n case HttpStatusCode.NotFound:\n return 'Die angeforderte Ressource wurde nicht gefunden.';\n case HttpStatusCode.MethodNotAllowed:\n return 'Die angeforderte Methode ist für diese Ressource nicht zulässig.';\n case HttpStatusCode.NotAcceptable:\n return 'Die angeforderte Ressource ist nicht in der Lage, eine Antwort zu generieren, die der Liste der akzeptablen Werte entspricht.';\n case HttpStatusCode.ProxyAuthenticationRequired:\n return 'Zur Ausführung dieser Aktion ist eine Proxy-Authentifizierung erforderlich.';\n case HttpStatusCode.RequestTimeout:\n return 'Der Server hat auf die Anforderung gewartet.';\n case HttpStatusCode.Conflict:\n return 'Die Anforderung steht im Widerspruch zum aktuellen Zustand der Ressource.';\n case HttpStatusCode.Gone:\n return 'Die angeforderte Ressource ist nicht mehr verfügbar und wird auch nicht mehr verfügbar sein.';\n case HttpStatusCode.LengthRequired:\n return 'Die Anforderung hat die Länge ihres Inhalts nicht angegeben, die von der angeforderten Ressource benötigt wird.';\n case HttpStatusCode.PreconditionFailed:\n return 'Der Server erfüllt eine der Voraussetzungen nicht, die der Anforderer an die Anforderung gestellt hat.';\n case HttpStatusCode.PayloadTooLarge:\n return 'Die Anforderung ist größer als der Server bereit oder in der Lage ist, zu verarbeiten.';\n case HttpStatusCode.UriTooLong:\n return 'Die bereitgestellte URL war für den Server zu lang, um sie zu verarbeiten.';\n case HttpStatusCode.UnsupportedMediaType:\n return 'Die Anforderungseinheit hat einen Medientyp, den der Server oder die Ressource nicht unterstützt.';\n case HttpStatusCode.RangeNotSatisfiable:\n return 'Der Client hat einen Teil der Datei angefordert, aber der Server kann diesen Teil nicht liefern.';\n case HttpStatusCode.ExpectationFailed:\n return 'Der Server kann die Anforderungen des Erwartung-Anforderungskopffelds nicht erfüllen.';\n case HttpStatusCode.ImATeapot:\n return 'Ich bin eine Teekanne.';\n case HttpStatusCode.MisdirectedRequest:\n return 'Die Anforderung wurde an einen Server gerichtet, der nicht in der Lage ist, eine Antwort zu generieren.';\n case HttpStatusCode.UnprocessableEntity:\n return 'Die Anforderung war gut formuliert, konnte aber aufgrund semantischer Fehler nicht befolgt werden.';\n case HttpStatusCode.Locked:\n return 'Die Ressource, auf die zugegriffen wird, ist gesperrt.';\n case HttpStatusCode.FailedDependency:\n return 'Die Anforderung ist aufgrund eines Fehlers einer vorherigen Anforderung fehlgeschlagen.';\n case HttpStatusCode.TooEarly:\n return 'Der Server ist nicht bereit, die Anforderung zu verarbeiten, weil der Benutzer nicht authentifiziert wurde.';\n case HttpStatusCode.UpgradeRequired:\n return 'Der Client sollte zu einem anderen Protokoll wie TLS/1.0 wechseln, das im Upgrade-Anforderungskopffeld angegeben ist.';\n case HttpStatusCode.PreconditionRequired:\n return 'Der Ursprungsserver erfordert, dass die Anforderung bedingt ist.';\n case HttpStatusCode.TooManyRequests:\n return 'Sie haben in einer bestimmten Zeit zu viele Anfragen gesendet. Bitte versuchen Sie es später erneut.';\n case HttpStatusCode.RequestHeaderFieldsTooLarge:\n return 'Der Server ist nicht bereit, die Anforderung zu verarbeiten, weil seine Kopffelder zu groß sind.';\n case HttpStatusCode.UnavailableForLegalReasons:\n return 'Die Ressource ist aufgrund einer rechtlichen Forderung nicht verfügbar.';\n case HttpStatusCode.InternalServerError:\n return 'Etwas ist schief gelaufen. Bitte versuchen Sie es später erneut.';\n case HttpStatusCode.NotImplemented:\n return 'Der Server unterstützt die zur Erfüllung der Anforderung erforderliche Funktionalität nicht.';\n case HttpStatusCode.BadGateway:\n return 'Etwas ist schief gelaufen. Bitte versuchen Sie es später erneut.';\n case HttpStatusCode.ServiceUnavailable:\n return 'Der Server kann die Anforderung derzeit nicht bearbeiten, da er vorübergehend überlastet oder gewartet wird.';\n case HttpStatusCode.GatewayTimeout:\n return 'Der Server hat beim Versuch, die Anforderung abzuschließen, keine rechtzeitige Antwort vom Server erhalten.';\n case HttpStatusCode.HttpVersionNotSupported:\n return 'Der Server unterstützt die in der Anforderung verwendete HTTP-Protokollversion nicht.';\n case HttpStatusCode.VariantAlsoNegotiates:\n return 'Der Server hat einen internen Konfigurationsfehler: Die ausgewählte Variantenressource ist so konfiguriert, dass sie sich selbst in die transparente Inhaltsverhandlung einbindet, und ist daher kein geeigneter Endpunkt im Verhandlungsprozess.';\n case HttpStatusCode.InsufficientStorage:\n return 'Die Methode konnte auf die Ressource nicht angewendet werden, weil der Server nicht in der Lage ist, die für die erfolgreiche Ausführung der Anforderung erforderliche Darstellung zu speichern.';\n case HttpStatusCode.LoopDetected:\n return 'Der Server hat eine Endlosschleife erkannt, während er die Anforderung verarbeitet.';\n case HttpStatusCode.NotExtended:\n return 'Weitere Erweiterungen der Anforderung sind erforderlich, damit der Server sie erfüllen kann.';\n case HttpStatusCode.NetworkAuthenticationRequired:\n return 'Sie müssen sich authentifizieren, um Zugang zum Netzwerk zu erhalten.';\n default:\n return 'Etwas ist schief gelaufen. Überprüfen Sie Ihre Internetverbindung und versuchen Sie es später erneut.';\n }\n};\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { parseHttpErrorCodeToMessageDe, parseHttpErrorCodeToTitleDe } from './parse-http-error-code-de';\n\n@Pipe({\n name: 'parseHttpErrorCodeToTitleDe',\n})\nexport class ParseHttpErrorCodeToTitleDePipe implements PipeTransform {\n transform = parseHttpErrorCodeToTitleDe;\n}\n\n@Pipe({\n name: 'parseHttpErrorCodeToMessageDe',\n})\nexport class ParseHttpErrorCodeToMessageDePipe implements PipeTransform {\n transform = parseHttpErrorCodeToMessageDe;\n}\n","import { HttpStatusCode } from '@angular/common/http';\n\nexport const parseHttpErrorCodeToTitleEn = (statusCode: HttpStatusCode) => {\n switch (statusCode) {\n case HttpStatusCode.BadRequest:\n return 'Bad request';\n case HttpStatusCode.Unauthorized:\n return 'Unauthorized';\n case HttpStatusCode.PaymentRequired:\n return 'Payment required';\n case HttpStatusCode.Forbidden:\n return 'Forbidden';\n case HttpStatusCode.NotFound:\n return 'Not found';\n case HttpStatusCode.MethodNotAllowed:\n return 'Method not allowed';\n case HttpStatusCode.NotAcceptable:\n return 'Not acceptable';\n case HttpStatusCode.ProxyAuthenticationRequired:\n return 'Proxy authentication required';\n case HttpStatusCode.RequestTimeout:\n return 'Request timeout';\n case HttpStatusCode.Conflict:\n return 'Conflict';\n case HttpStatusCode.Gone:\n return 'Gone';\n case HttpStatusCode.LengthRequired:\n return 'Length required';\n case HttpStatusCode.PreconditionFailed:\n return 'Precondition failed';\n case HttpStatusCode.PayloadTooLarge:\n return 'Payload too large';\n case HttpStatusCode.UriTooLong:\n return 'URI too long';\n case HttpStatusCode.UnsupportedMediaType:\n return 'Unsupported media type';\n case HttpStatusCode.RangeNotSatisfiable:\n return 'Range not satisfiable';\n case HttpStatusCode.ExpectationFailed:\n return 'Expectation failed';\n case HttpStatusCode.ImATeapot:\n return 'I am a teapot';\n case HttpStatusCode.MisdirectedRequest:\n return 'Misdirected request';\n case HttpStatusCode.UnprocessableEntity:\n return 'Unprocessable entity';\n case HttpStatusCode.Locked:\n return 'Locked';\n case HttpStatusCode.FailedDependency:\n return 'Failed dependency';\n case HttpStatusCode.TooEarly:\n return 'Too early';\n case HttpStatusCode.UpgradeRequired:\n return 'Upgrade required';\n case HttpStatusCode.PreconditionRequired:\n return 'Precondition required';\n case HttpStatusCode.TooManyRequests:\n return 'Too many requests';\n case HttpStatusCode.RequestHeaderFieldsTooLarge:\n return 'Request header fields too large';\n case HttpStatusCode.UnavailableForLegalReasons:\n return 'Unavailable for legal reasons';\n case HttpStatusCode.InternalServerError:\n return 'Internal server error';\n case HttpStatusCode.NotImplemented:\n return 'Not implemented';\n case HttpStatusCode.BadGateway:\n return 'Bad gateway';\n case HttpStatusCode.ServiceUnavailable:\n return 'Service unavailable';\n case HttpStatusCode.GatewayTimeout:\n return 'Gateway timeout';\n case HttpStatusCode.HttpVersionNotSupported:\n return 'HTTP version not supported';\n case HttpStatusCode.VariantAlsoNegotiates:\n return 'Variant also negotiates';\n case HttpStatusCode.InsufficientStorage:\n return 'Insufficient storage';\n case HttpStatusCode.LoopDetected:\n return 'Loop detected';\n case HttpStatusCode.NotExtended:\n return 'Not extended';\n case HttpStatusCode.NetworkAuthenticationRequired:\n return 'Network authentication required';\n default:\n return 'Something went wrong';\n }\n};\n\nexport const parseHttpErrorCodeToMessageEn = (statusCode: HttpStatusCode) => {\n switch (statusCode) {\n case HttpStatusCode.BadRequest:\n return 'Sorry, we could not process your request. Please try again later.';\n case HttpStatusCode.Unauthorized:\n return 'You are not authorized to perform this action. Please log in to continue.';\n case HttpStatusCode.PaymentRequired:\n return 'Payment is required to complete this action.';\n case HttpStatusCode.Forbidden:\n return 'You do not have permission to perform this action.';\n case HttpStatusCode.NotFound:\n return 'The requested resource was not found.';\n case HttpStatusCode.MethodNotAllowed:\n return 'The requested method is not allowed for this resource.';\n case HttpStatusCode.NotAcceptable:\n return 'The requested resource is not capable of generating a response matching the list of acceptable values.';\n case HttpStatusCode.ProxyAuthenticationRequired:\n return 'Proxy authentication is required to complete this action.';\n case HttpStatusCode.RequestTimeout:\n return 'The server timed out waiting for the request.';\n case HttpStatusCode.Conflict:\n return 'The request conflicts with the current state of the resource.';\n case HttpStatusCode.Gone:\n return 'The requested resource is no longer available and will not be available again.';\n case HttpStatusCode.LengthRequired:\n return 'The request did not specify the length of its content, which is required by the requested resource.';\n case HttpStatusCode.PreconditionFailed:\n return 'The server does not meet one of the preconditions that the requester put on the request.';\n case HttpStatusCode.PayloadTooLarge:\n return 'The request is larger than the server is willing or able to process.';\n case HttpStatusCode.UriTooLong:\n return 'The URL provided was too long for the server to process.';\n case HttpStatusCode.UnsupportedMediaType:\n return 'The request entity has a media type which the server or resource does not support.';\n case HttpStatusCode.RangeNotSatisfiable:\n return 'The client has asked for a portion of the file, but the server cannot supply that portion.';\n case HttpStatusCode.ExpectationFailed:\n return 'The server cannot meet the requirements of the Expect request-header field.';\n case HttpStatusCode.ImATeapot:\n return 'I am a teapot.';\n case HttpStatusCode.MisdirectedRequest:\n return 'The request was directed at a server that is not able to produce a response.';\n case HttpStatusCode.UnprocessableEntity:\n return 'The request was well-formed but was unable to be followed due to semantic errors.';\n case HttpStatusCode.Locked:\n return 'The resource that is being accessed is locked.';\n case HttpStatusCode.FailedDependency:\n return 'The request failed due to failure of a previous request.';\n case HttpStatusCode.TooEarly:\n return 'The server is unwilling to process the request because the user has not been authenticated.';\n case HttpStatusCode.UpgradeRequired:\n return 'The client should switch to a different protocol such as TLS/1.0, given in the Upgrade header field.';\n case HttpStatusCode.PreconditionRequired:\n return 'The origin server requires the request to be conditional.';\n case HttpStatusCode.TooManyRequests:\n return 'You have sent too many requests in a given amount of time. Please try again later.';\n case HttpStatusCode.RequestHeaderFieldsTooLarge:\n return 'The server is unwilling to process the request because its header fields are too large.';\n case HttpStatusCode.UnavailableForLegalReasons:\n return 'The resource is unavailable due to a legal demand.';\n case HttpStatusCode.InternalServerError:\n return 'Something went wrong on our end. Please try again later.';\n case HttpStatusCode.NotImplemented:\n return 'The server does not support the functionality required to fulfill the request.';\n case HttpStatusCode.BadGateway:\n return 'Something went wrong on our end. Please try again later.';\n case HttpStatusCode.ServiceUnavailable:\n return 'The server is currently unable to handle the request due to a temporary overload or maintenance of the server.';\n case HttpStatusCode.GatewayTimeout:\n return 'The server, while acting as a gateway or proxy, did not receive a timely response from the upstream server specified by the URL or some other auxiliary server it needed to access in attempting to complete the request.';\n case HttpStatusCode.HttpVersionNotSupported:\n return 'The server does not support the HTTP protocol version used in the request.';\n case HttpStatusCode.VariantAlsoNegotiates:\n return 'The server has an internal configuration error: the chosen variant resource is configured to engage in transparent content negotiation itself, and is therefore not a proper end point in the negotiation process.';\n case HttpStatusCode.InsufficientStorage:\n return 'The method could not be performed on the resource because the server is unable to store the representation needed to successfully complete the request.';\n case HttpStatusCode.LoopDetected:\n return 'The server detected an infinite loop while processing the request.';\n case HttpStatusCode.NotExtended:\n return 'Further extensions to the request are required for the server to fulfill it.';\n case HttpStatusCode.NetworkAuthenticationRequired:\n return 'You need to authenticate to gain network access.';\n default:\n return 'Something went wrong. Check your internet connection and try again later.';\n }\n};\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { parseHttpErrorCodeToMessageEn, parseHttpErrorCodeToTitleEn } from './parse-http-error-code-en';\n\n@Pipe({\n name: 'parseHttpErrorCodeToTitleEn',\n})\nexport class ParseHttpErrorCodeToTitleEnPipe implements PipeTransform {\n transform = parseHttpErrorCodeToTitleEn;\n}\n\n@Pipe({\n name: 'parseHttpErrorCodeToMessageEn',\n})\nexport class ParseHttpErrorCodeToMessageEnPipe implements PipeTransform {\n transform = parseHttpErrorCodeToMessageEn;\n}\n","export const transformToString = (value: unknown) => {\n if (typeof value === 'string') {\n return value;\n }\n\n return null;\n};\n\nexport const transformToStringArray = (value: unknown) => {\n if (Array.isArray(value)) {\n return value.map(transformToString).filter(Boolean) as string[];\n } else if (typeof value === 'string') {\n return [transformToString(value)] as string[];\n }\n\n return null;\n};\n\nexport const transformToNumber = (value: unknown) => {\n if (typeof value === 'number') {\n return value;\n }\n if (typeof value === 'string') {\n return Number(value);\n }\n return null;\n};\n\nexport const transformToNumberArray = (value: unknown) => {\n if (Array.isArray(value)) {\n return value.map(transformToNumber).filter((item) => item !== null) as number[];\n } else if (typeof value === 'number') {\n return [value] as number[];\n }\n\n return null;\n};\n\nexport const transformToBoolean = (value: unknown) => {\n if (typeof value === 'boolean') {\n return value;\n }\n if (typeof value === 'string') {\n return value === 'true' || value === '1';\n }\n return null;\n};\n\nexport const transformToBooleanArray = (value: unknown) => {\n if (Array.isArray(value)) {\n return value.map(transformToBoolean).filter((item) => item !== null) as boolean[];\n } else if (typeof value === 'string' || typeof value === 'boolean') {\n return [transformToBoolean(value)] as boolean[];\n }\n\n return null;\n};\n\nexport const transformToDate = (value: unknown) => {\n if (value instanceof Date) {\n return value;\n }\n if (typeof value === 'string') {\n const date = new Date(value);\n\n if (isNaN(date.getTime())) {\n return null;\n }\n\n return date;\n }\n return null;\n};\n\nexport const transformToDateArray = (value: unknown) => {\n if (Array.isArray(value)) {\n return value.map(transformToDate).filter((item) => item !== null) as Date[];\n } else if (typeof value === 'string' || value instanceof Date) {\n return [transformToDate(value)] as Date[];\n }\n\n return null;\n};\n\nexport type SortDirection = 'asc' | 'desc' | '';\n\nexport type Sort = {\n active: string;\n direction: SortDirection;\n};\n\nexport const transformToSort = (value: unknown): Sort | null => {\n if (typeof value === 'string') {\n const [active, direction] = value.split(':');\n\n if (!active) {\n return null;\n }\n\n return {\n active,\n direction: direction as 'asc' | 'desc',\n };\n }\n\n return null;\n};\n\nexport const transformToSortQueryParam = (value: unknown) => {\n if (typeof value === 'string') {\n return value;\n }\n if (value && typeof value === 'object' && 'active' in value && 'direction' in value) {\n const valAsSort = value as {\n active: string;\n direction: 'asc' | 'desc';\n };\n\n return valAsSort.direction ? `${valAsSort.active}:${valAsSort.direction}` : null;\n }\n\n return null;\n};\n","import { DestroyRef, NgZone, assertInInjectionContext, inject, isDevMode } from '@angular/core';\nimport { toObservable, toSignal } from '@angular/core/rxjs-interop';\nimport { FormControl, FormGroup } from '@angular/forms';\nimport { ActivatedRoute, Router } from '@angular/router';\nimport {\n ET_PROPERTY_REMOVED,\n clone,\n createDestroy,\n equal,\n injectQueryParamChanges,\n injectQueryParams,\n} from '@ethlete/core';\nimport { BehaviorSubject, Subject, debounceTime, map, merge, of, switchMap, takeUntil, tap, timer } from 'rxjs';\nimport {\n OptionalQueryFieldOptions,\n QueryFieldOptions,\n QueryFormGroup,\n QueryFormGroupControls,\n QueryFormObserveOptions,\n QueryFormValue,\n QueryFormValueEvent,\n QueryFormWriteOptions,\n} from './query-form.types';\nimport {\n Sort,\n transformToBoolean,\n transformToBooleanArray,\n transformToDate,\n transformToDateArray,\n transformToNumber,\n transformToNumberArray,\n transformToSort,\n transformToSortQueryParam,\n transformToStringArray,\n} from './query-form.utils';\n\nconst ET_ARR_PREFIX = 'ET_ARR__';\nconst ET_OBJ_PREFIX = 'ET_OBJ__';\nconst ET_PROP_NULL_VALUE = 'ET_NULL__';\n\nexport class QueryField<T> {\n get control() {\n return this.data.control;\n }\n\n constructor(public data: QueryFieldOptions<T>) {}\n}\n\nexport class SearchQueryField {\n get control() {\n return this.data.control;\n }\n\n data: QueryFieldOptions<string | null>;\n\n constructor(public _data?: OptionalQueryFieldOptions<string | null>) {\n this.data = {\n control: _data?.control ?? new FormControl<string | null>(null),\n debounce: 300,\n disableDebounceIfFalsy: true,\n ...(_data ?? {}),\n };\n }\n}\n\nexport class SortQueryField {\n get control() {\n return this.data.control;\n }\n\n data: QueryFieldOptions<Sort | null>;\n\n constructor(public _data?: OptionalQueryFieldOptions<Sort | null>) {\n this.data = {\n control: _data?.control ?? new FormControl<Sort | null>(null),\n queryParamToValueTransformFn: transformToSort,\n valueToQueryParamTransformFn: transformToSortQueryParam,\n ...(_data ?? {}),\n };\n }\n}\n\nexport class StringArrayQueryField<T extends string[]> {\n get control() {\n return this.data.control;\n }\n\n data: QueryFieldOptions<T | null>;\n\n constructor(public _data?: OptionalQueryFieldOptions<T | null>) {\n this.data = {\n control: _data?.control ?? new FormControl<T | null>(null),\n queryParamToValueTransformFn: transformToStringArray as (val: unknown) => T | null,\n ...(_data ?? {}),\n };\n }\n}\n\nexport class BooleanArrayQueryField {\n get control() {\n return this.data.control;\n }\n\n data: QueryFieldOptions<boolean[] | null>;\n\n constructor(public _data?: OptionalQueryFieldOptions<boolean[] | null>) {\n this.data = {\n control: _data?.control ?? new FormControl<boolean[] | null>(null),\n queryParamToValueTransformFn: transformToBooleanArray,\n ...(_data ?? {}),\n };\n }\n}\n\nexport class NumberArrayQueryField {\n get control() {\n return this.data.control;\n }\n\n data: QueryFieldOptions<number[] | null>;\n\n constructor(public _data?: OptionalQueryFieldOptions<number[] | null>) {\n this.data = {\n control: _data?.control ?? new FormControl<number[] | null>(null),\n queryParamToValueTransformFn: transformToNumberArray,\n ...(_data ?? {}),\n };\n }\n}\n\nexport class DateQueryField {\n get control() {\n return this.data.control;\n }\n\n data: QueryFieldOptions<Date | null>;\n\n constructor(public _data?: OptionalQueryFieldOptions<Date | null>) {\n this.data = {\n control: _data?.control ?? new FormControl<Date | null>(null),\n queryParamToValueTransformFn: transformToDate,\n ...(_data ?? {}),\n };\n }\n}\n\nexport class DateArrayQueryField {\n get control() {\n return this.data.control;\n }\n\n data: QueryFieldOptions<Date[] | null>;\n\n constructor(public _data?: OptionalQueryFieldOptions<Date[] | null>) {\n this.data = {\n control: _data?.control ?? new FormControl<Date[] | null>(null),\n queryParamToValueTransformFn: transformToDateArray,\n ...(_data ?? {}),\n };\n }\n}\n\nconst IGNORED_FILTER_COUNT_FIELDS = ['page', 'skip', 'take', 'limit', 'sort', 'sortBy', 'sortOrder', 'query', 'search'];\n\nexport type QueryFormOptions = {\n /**\n * A prefix to use for the query parameters. This is useful when you have multiple query forms on the same page.\n */\n queryParamPrefix?: string | (() => string);\n};\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport type AnyQueryForm = QueryForm<any>;\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport class QueryForm<T extends Record<string, QueryField<any>>> {\n private readonly _destroy$ = createDestroy();\n private readonly _unobserveTrigger$ = new Subject<boolean>();\n private readonly _router = inject(Router);\n private readonly _activatedRoute = inject(ActivatedRoute);\n private readonly _defaultValues = this._extractDefaultValues();\n private readonly _zone = inject(NgZone);\n private readonly _didValueChanges$ = new Subject<boolean>();\n\n private _isObserving = false;\n private _skipNextResets = false;\n\n private _queryParamChanges$ = toObservable(injectQueryParamChanges());\n private _queryParams = injectQueryParams();\n\n /**\n * The angular form group that contains all the fields.\n *\n * **Do not** use any of the following methods on this form group:\n * - `setValue`: Use `QueryForm.setValue` instead.\n * - `patchValue`: Use `QueryForm.patchValue` instead.\n * - `valueChanges`: Use `QueryForm.changes$` instead.\n * - `value`: Use `QueryForm.value` instead.\n * - `controls`: Use `QueryForm.controls` instead.\n */\n readonly form = this._setupFormGroup();\n\n private readonly _lastFormValue$ = new BehaviorSubject<QueryFormValue<T> | null>(null);\n private readonly _currentFormValue$ = new BehaviorSubject<QueryFormValue<T>>(this._formValue);\n\n private get _formValue() {\n return this.form.getRawValue() as QueryFormValue<T>;\n }\n\n private get _form() {\n return this.form as unknown as QueryFormGroup;\n }\n\n private readonly _changes$ = new BehaviorSubject<QueryFormValueEvent<T>>({\n previousValue: null,\n currentValue: this.form.getRawValue() as QueryFormValue<T>,\n });\n\n readonly changes$ = this._changes$.asObservable();\n readonly currentValue$ = this._changes$.pipe(map(({ currentValue }) => currentValue));\n readonly previousValue$ = this._changes$.pipe(map(({ previousValue }) => previousValue));\n\n readonly changes = toSignal(this.changes$);\n readonly currentValue = toSignal(this.currentValue$);\n readonly previousValue = toSignal(this.previousValue$);\n\n /**\n * The number of active filters.\n *\n * Excludes the following fields by default:\n * - `page`\n * - `skip`\n * - `take`\n * - `limit`\n * - `sort`\n * - `sortBy`\n * - `sortOrder`\n * - `query`\n * - `search`\n */\n readonly activeFilterCount$ = this.changes$.pipe(\n map(\n ({ currentValue }) =>\n Object.entries(currentValue)\n .map(([key, value]) => {\n if (IGNORED_FILTER_COUNT_FIELDS.includes(key) || this._fields[key]?.data.skipInFilterCount) {\n return true;\n }\n\n return this._isDefaultValue(key, value);\n })\n .filter((v) => v === false).length,\n ),\n );\n\n get controls() {\n return this.form.controls;\n }\n\n get value() {\n return this._changes$.value.currentValue;\n }\n\n get defaultFormValue() {\n return Object.entries(this._defaultValues).reduce((acc, [key]) => {\n acc[key as keyof QueryFormValue<T>] = this._getDefaultValue(key);\n\n return acc;\n }, {} as QueryFormValue<T>);\n }\n\n // with prefix eg. page should become ${prefix}-page\n constructor(\n private _fields: T,\n private _options?: QueryFormOptions,\n ) {\n assertInInjectionContext(QueryForm);\n\n inject(DestroyRef).onDestroy(() => this._cleanup());\n }\n\n observe(options?: QueryFormObserveOptions) {\n if (this._isObserving) {\n if (isDevMode()) {\n console.warn('QueryForm.observe() was called multiple times. This is not supported.');\n }\n return this;\n }\n\n this._isObserving = true;\n\n if (options?.syncOnNavigation !== false) {\n const didChanges = this.setFormValueFromUrlQueryParams({\n queryParams: this._queryParams(),\n });\n\n if (didChanges) {\n this._handleFormChange(true);\n }\n }\n\n merge(...Object.values(this._fields).map((field) => field.control.valueChanges), this._didValueChanges$)\n .pipe(\n debounceTime(0),\n tap(() => {\n this._handleFormChange();\n }),\n takeUntil(this._destroy$),\n takeUntil(this._unobserveTrigger$),\n )\n .subscribe();\n\n let changedFieldsInLastResetLoop: string[] = [];\n let currentUniqueChangedFields: string[] = [];\n\n this._currentFormValue$\n .pipe(\n map((currentValue) => {\n return {\n previousValue: clone(this._lastFormValue$.value),\n currentValue: clone(currentValue),\n };\n }),\n tap(({ currentValue, previousValue }) => {\n if (options?.writeToQueryParams !== false) {\n this._syncViaUrlQueryParams(currentValue, options?.replaceUrl);\n }\n\n const didResetValues = this._skipNextResets\n ? false\n : this._handleQueryFormResets(previousValue ?? null, currentValue);\n\n this._skipNextResets = false;\n\n const changedFields = Object.keys(currentValue).filter(\n (key) => !equal(previousValue?.[key], currentValue[key]),\n );\n\n if (changedFieldsInLastResetLoop.length) {\n changedFields.push(...changedFieldsInLastResetLoop);\n changedFieldsInLastResetLoop = [];\n }\n\n if (didResetValues) {\n this._didValueChanges$.next(true);\n changedFieldsInLastResetLoop = changedFields;\n }\n\n currentUniqueChangedFields = [...new Set(changedFields)];\n }),\n switchMap(({ currentValue, previousValue }) => {\n if (changedFieldsInLastResetLoop.length) return of(null).pipe(map(() => ({ currentValue, previousValue })));\n\n const debounceValues = currentUniqueChangedFields.map((key) => {\n const field = this._fields[key];\n\n if (!field) return null;\n\n if (field.data.disableDebounceIfFalsy === true && !currentValue[key]) {\n return null;\n }\n\n return field.data.debounce ?? null;\n });\n\n currentUniqueChangedFields = [];\n\n if (debounceValues.some((v) => v === null) || !debounceValues.length) {\n return of(null).pipe(map(() => ({ currentValue, previousValue })));\n }\n\n const shortestDebounceTime = Math.min(...debounceValues.filter((v): v is number => v !== null));\n\n return timer(shortestDebounceTime).pipe(map(() => ({ currentValue, previousValue })));\n }),\n tap(({ currentValue, previousValue }) => {\n if (changedFieldsInLastResetLoop.length) return;\n\n this._changes$.next({\n previousValue: previousValue ?? null,\n currentValue: currentValue,\n });\n }),\n takeUntil(this._destroy$),\n takeUntil(this._unobserveTrigger$),\n )\n .subscribe();\n\n if (options?.syncOnNavigation !== false) {\n this._queryParamChanges$\n .pipe(\n takeUntil(this._destroy$),\n takeUntil(this._unobserveTrigger$),\n tap((changes) => {\n const didValueChanges = this.setFormValueFromUrlQueryParams({ queryParams: changes });\n\n if (didValueChanges) {\n this._didValueChanges$.next(true);\n }\n }),\n )\n .subscribe();\n }\n\n return this;\n }\n\n private _handleQueryFormResets(previousValue: QueryFormValue<T> | null, currentValue: QueryFormValue<T>) {\n let didResetValues = false;\n\n for (const formFieldKey in this._fields) {\n const field = this._fields[formFieldKey];\n\n if (!field) continue;\n\n const resets = field.data.isResetBy;\n\n if (!resets) continue;\n\n const resetConditionKeys = Array.isArray(resets) ? resets : [resets];\n\n for (const resetConditionKey of resetConditionKeys) {\n if (!(resetConditionKey in this._fields)) {\n if (isDevMode()) {\n console.warn(`The field \"${resetConditionKey}\" is not defined in the QueryForm. Is it a typo?`, this);\n }\n\n continue;\n }\n\n if (\n previousValue &&\n currentValue &&\n !equal(previousValue[resetConditionKey], currentValue[resetConditionKey])\n ) {\n const defaultValueForKeyToReset = this._getDefaultValue(formFieldKey);\n const currentValueForKeyToReset = currentValue[formFieldKey];\n\n if (equal(defaultValueForKeyToReset, currentValueForKeyToReset)) {\n continue;\n }\n\n this.form.controls[formFieldKey].setValue(defaultValueForKeyToReset);\n\n didResetValues = true;\n\n break;\n }\n }\n }\n\n return didResetValues;\n }\n\n unobserve() {\n this._unobserveTrigger$.next(true);\n this._cleanup();\n }\n\n setFormValueFromUrlQueryParams(options: { queryParams: Record<string, unknown> }) {\n let didValueChanges = false;\n\n for (const [key, field] of Object.entries(this._fields)) {\n const value = options.queryParams[this._transformKeyToQueryParam(key)];\n\n const valueDoesNotExist = value === undefined;\n\n if (valueDoesNotExist) continue;\n\n const valueGotRemoved = value === ET_PROPERTY_REMOVED;\n\n if (valueGotRemoved) {\n const defaultValue = this._getDefaultValue(key);\n if (!equal(field.control.value, defaultValue)) {\n field.control.setValue(defaultValue, { emitEvent: false });\n didValueChanges = true;\n }\n\n continue;\n }\n let deserializedValue = value;\n\n if (field.data.queryParamToValueTransformFn) {\n deserializedValue = field.data.queryParamToValueTransformFn(value);\n } else if (!field.data.skipAutoTransform) {\n const defaultIsNum = typeof this._getDefaultValue(key) === 'number';\n const valueIsNum = !isNaN(Number(value));\n const valueContainsWhitespace = typeof value === 'string' && value.trim() !== value;\n const valueHasLeadingZero = typeof value === 'string' && value.startsWith('0');\n const valueEndsWithDot = typeof value === 'string' && value.endsWith('.');\n\n const defaultIsBool = this._getDefaultValue(key) === 'boolean';\n const valueIsBool = value === 'true' || value === 'false';\n\n if (value === ET_PROP_NULL_VALUE) {\n deserializedValue = null;\n } else if (\n defaultIsNum ||\n (valueIsNum && !valueContainsWhitespace && !valueHasLeadingZero && !valueEndsWithDot)\n ) {\n deserializedValue = transformToNumber(value);\n } else if (defaultIsBool || valueIsBool) {\n deserializedValue = transformToBoolean(value);\n }\n }\n\n const valueIsEqualToCurrent = equal(deserializedValue, field.control.value);\n\n if (valueIsEqualToCurrent) continue;\n\n field.control.setValue(deserializedValue, { emitEvent: false });\n didValueChanges = true;\n }\n\n return didValueChanges;\n }\n\n setValue(value: QueryFormValue<T>, options?: QueryFormWriteOptions) {\n this._form._setValue(value, options);\n\n if (options?.skipResets) {\n this._skipNextResets = true;\n }\n }\n\n patchValue(value: Partial<QueryFormValue<T>>, options?: QueryFormWriteOptions) {\n this._form._patchValue(value, options);\n\n if (options?.skipResets) {\n this._skipNextResets = true;\n }\n }\n\n resetFieldToDefault(key: keyof QueryFormValue<T>, options?: QueryFormWriteOptions) {\n const defaultValue = this._getDefaultValue(key as string);\n\n this.form.controls[key].setValue(defaultValue);\n\n if (options?.skipResets) {\n this._skipNextResets = true;\n }\n }\n\n resetFieldsToDefault(keys: (keyof QueryFormValue<T>)[], options?: QueryFormWriteOptions) {\n const defaults = keys.reduce(\n (acc, key) => {\n acc[key] = this._getDefaultValue(key as string);\n\n return acc;\n },\n {} as Partial<QueryFormValue<T>>,\n );\n\n this.patchValue(defaults);\n\n if (options?.skipResets) {\n this._skipNextResets = true;\n }\n }\n\n resetAllFieldsToDefault(options?: QueryFormWriteOptions & { skipFields?: (keyof QueryFormValue<T>)[] }) {\n const keys = Object.keys(this._fields) as (keyof QueryFormValue<T>)[];\n\n if (options?.skipFields) {\n for (const key of options.skipFields) {\n const index = keys.indexOf(key);\n\n if (index !== -1) {\n keys.splice(index, 1);\n }\n }\n }\n\n this.resetFieldsToDefault(keys, options);\n }\n\n private _getDefaultValue(key: string) {\n const val = this._defaultValues[key];\n\n if (typeof val === 'string' && val.startsWith(ET_ARR_PREFIX)) {\n return JSON.parse(val.slice(ET_ARR_PREFIX.length));\n } else if (typeof val === 'string' && val.startsWith(ET_OBJ_PREFIX)) {\n return JSON.parse(val.slice(ET_OBJ_PREFIX.length));\n } else if (typeof val === 'function') {\n return val();\n } else if (val === ET_PROP_NULL_VALUE) {\n return null;\n }\n\n return val ?? null;\n }\n\n private _transformKeyToQueryParam(key: string) {\n if (!this._options?.queryParamPrefix) return key;\n\n const prefix =\n typeof this._options?.queryParamPrefix === 'string'\n ? this._options.queryParamPrefix\n : this._options.queryParamPrefix();\n\n return `${prefix}-${key}`;\n }\n\n private _isDefaultValue(key: string, value: unknown) {\n const normalizedValue = Array.isArray(value)\n ? `${ET_ARR_PREFIX}${JSON.stringify(value)}`\n : typeof value === 'object' && value !== null\n ? `${ET_OBJ_PREFIX}${JSON.stringify(value)}`\n : value === null\n ? ET_PROP_NULL_VALUE\n : value;\n\n return this._defaultValues[key] === normalizedValue;\n }\n\n private _setupFormGroup() {\n const group = new FormGroup({} as QueryFormGroupControls<T>) as unknown as QueryFormGroup;\n\n for (const [key, field] of Object.entries(this._fields)) {\n group.addControl(key, field.control);\n }\n\n group._patchValue = group.patchValue;\n group._setValue = group.setValue;\n\n group.patchValue = this.patchValue.bind(this);\n group.setValue = this.setValue.bind(this);\n\n return group as unknown as FormGroup<QueryFormGroupControls<T>>;\n }\n\n private _extractDefaultValues() {\n const defaultValues: Record<string, unknown> = {};\n\n for (const [key, field] of Object.entries(this._fields)) {\n const value = field.data.defaultValue !== undefined ? field.data.defaultValue : field.control.value;\n\n if (Array.isArray(value)) {\n defaultValues[key] = `${ET_ARR_PREFIX}${JSON.stringify(value)}`;\n } else if (typeof value === 'object' && value !== null) {\n defaultValues[key] = `${ET_OBJ_PREFIX}${JSON.stringify(value)}`;\n } else if (value === null) {\n defaultValues[key] = ET_PROP_NULL_VALUE;\n } else {\n defaultValues[key] = value;\n }\n }\n\n return defaultValues;\n }\n\n private _syncViaUrlQueryParams(values: QueryFormValue<T>, replaceUrl?: boolean) {\n const queryParams = { ...clone(this._activatedRoute.snapshot.queryParams) };\n\n for (const [key, value] of Object.entries(values)) {\n const queryParamKey = this._transformKeyToQueryParam(key);\n const field = this._fields[key];\n\n if (!field) {\n continue;\n }\n\n const isDefault = this._isDefaultValue(key, value);\n const writeDefaultToUrl = field.data.appendDefaultValueToUrl === true;\n const writeToUrl = field.data.appendToUrl !== false;\n\n if (!writeToUrl || (isDefault && !writeDefaultToUrl)) {\n queryParams[queryParamKey] = undefined;\n } else {\n queryParams[queryParamKey] = field.data.valueToQueryParamTransformFn\n ? field.data.valueToQueryParamTransformFn?.(value)\n : value === null\n ? ET_PROP_NULL_VALUE\n : value;\n }\n }\n\n this._zone.run(() => {\n queueMicrotask(() => {\n this._router.navigate([], {\n queryParams,\n replaceUrl,\n queryParamsHandling: 'merge',\n });\n });\n });\n }\n\n private _handleFormChange(forceOverwrite = false) {\n // Normalize values that have a valueToQueryParamTransformFn returning null/undefined to their\n // field default before capturing the new value. This prevents intermediate \"empty object\" states\n // (e.g. Sort emitting { active: '', direction: '' } when cleared) from being\n // emitted as distinct form values.\n for (const [key, field] of Object.entries(this._fields)) {\n if (!field.data.valueToQueryParamTransformFn) continue;\n const rawValue = (this._formValue as Record<string, unknown>)[key];\n if (this._isDefaultValue(key, rawValue)) continue;\n const serialized = field.data.valueToQueryParamTransformFn(rawValue);\n if (serialized !== null && serialized !== undefined) continue;\n this.form.controls[key]?.setValue(this._getDefaultValue(key), { emitEvent: false });\n }\n\n const currentVal = clone(this._currentFormValue$.value);\n const newVal = clone(this._formValue);\n\n if (equal(currentVal, newVal)) {\n return;\n }\n\n if (forceOverwrite) {\n this._lastFormValue$.next(newVal);\n } else {\n this._lastFormValue$.next(currentVal);\n }\n\n this._currentFormValue$.next(newVal);\n }\n\n private _cleanup() {\n if (!this._isObserving) return;\n\n this._isObserving = false;\n\n const queryParamKeys = Object.keys(this._fields);\n const queryParams = queryParamKeys.reduce(\n (acc, key) => {\n acc[this._transformKeyToQueryParam(key)] = undefined;\n return acc;\n },\n {} as Record<string, unknown>,\n );\n this._zone.run(() => {\n queueMicrotask(() => {\n this._router.navigate([], {\n queryParams,\n replaceUrl: true,\n queryParamsHandling: 'merge',\n });\n });\n });\n }\n}\n","import { RuntimeError } from '@ethlete/core';\n\n// codes 1000-1999\nexport const WebSocketRuntimeErrorCode = {\n // Web Socket Client\n ROOM_NOT_JOINED: 1000,\n MESSAGE_MALFORMED: 1001,\n} as const;\n\nexport type WebSocketRuntimeErrorCode = (typeof WebSocketRuntimeErrorCode)[keyof typeof WebSocketRuntimeErrorCode];\n\nexport const roomNotJoined = (room: string) => {\n return new RuntimeError(\n WebSocketRuntimeErrorCode.ROOM_NOT_JOINED,\n `Tried leaving the room \"${room}\" but it has not been joined.`,\n );\n};\n\nexport const messageMalformed = () => {\n return new RuntimeError(\n WebSocketRuntimeErrorCode.MESSAGE_MALFORMED,\n 'A message has been received but it is malformed (cannot be parsed as JSON).',\n );\n};\n","import {\n computed,\n DestroyRef,\n effect,\n inject,\n isDevMode,\n Signal,\n signal,\n untracked,\n WritableSignal,\n} from '@angular/core';\nimport { createRootProvider, previousSignalValue, ProviderResult } from '@ethlete/core';\nimport { io } from 'socket.io-client';\nimport { messageMalformed, roomNotJoined } from './web-socket-errors';\n\nexport type CreateWebSocketClientTransport = 'polling' | 'websocket' | 'webtransport';\n\nexport type CreateWebSocketClientConfigOptions = {\n /** A unique name for the client */\n name: string;\n\n /** The URL of the socket io server */\n url: string;\n\n /** A list of transports to try (in order). Engine.io always attempts to connect directly with the first one, provided the feature detection test for it passes. */\n transports?: CreateWebSocketClientTransport[];\n};\n\n/** A default socket io message view */\nexport type SocketMessageView<TMessageData = unknown> = {\n room: string;\n event: string;\n data: TMessageData;\n};\n\nexport type WebSocketClientSubtle = {\n /** Leave a socket io room */\n leaveRoom: (room: string) => void;\n};\n\nexport type WebSocketClient<TMessageData extends SocketMessageView> = {\n /**\n * Join a socket io room\n * If a function is passed, it will be evaluated in a reactive signal context.\n * If the function returns null, no room will be joined.\n * If the function returns a string, the previous room will be left and the new room will be joined.\n */\n joinRoom: (room: string | (() => string | null)) => Signal<WebSocketRoom<TMessageData> | null>;\n\n /** Whether the client is connected to the server */\n isConnected: Signal<boolean>;\n\n /** Advanced web socket features. **WARNING!** Incorrectly using these features will likely **BREAK** your application. You have been warned! */\n subtle: WebSocketClientSubtle;\n};\n\nexport type InternalWebSocketRoom<TMessageData extends SocketMessageView> = {\n latestMessage: WritableSignal<TMessageData | null>;\n};\n\nexport type WebSocketRoom<TMessageData extends SocketMessageView> = {\n /** The latest message received in the room */\n latestMessage: Signal<TMessageData | null>;\n};\n\nexport type WebSocketClientResult<TMessageData extends SocketMessageView = SocketMessageView> = ProviderResult<\n WebSocketClient<TMessageData>\n>;\n\nexport type AnyWebSocketClient<TMessageData extends SocketMessageView = SocketMessageView> =\n WebSocketClientResult<TMessageData>;\n\nexport const createWebSocketClient = <TMessageData extends SocketMessageView = SocketMessageView>(\n options: CreateWebSocketClientConfigOptions,\n): WebSocketClientResult<TMessageData> => {\n return createRootProvider(\n () => {\n const socket = io(options.url, {\n withCredentials: true,\n autoConnect: false,\n transports: options.transports,\n });\n\n const rooms = new Map<string, InternalWebSocketRoom<TMessageData>>();\n const isConnected = signal(false);\n\n const joinRoom = (room: string | (() => string | null)) => {\n const roomFn = typeof room === 'function' ? room : () => room;\n const pre = previousSignalValue(computed(() => roomFn()));\n const roomData = signal<InternalWebSocketRoom<TMessageData> | null>(null);\n\n const join = (name: string) => {\n socket.emit('join-room', name);\n\n const existingRoom = rooms.get(name);\n\n if (existingRoom) return existingRoom;\n\n const message = signal<TMessageData | null>(null);\n\n const newRoom: InternalWebSocketRoom<TMessageData> = {\n latestMessage: message,\n };\n\n rooms.set(name, newRoom);\n\n return newRoom;\n };\n\n effect(() => {\n const current = roomFn();\n\n untracked(() => {\n const previous = pre();\n\n if (previous === current) return;\n\n if (previous) leaveRoom(previous);\n\n if (current) {\n const joinedRoom = join(current);\n if (joinedRoom) roomData.set(joinedRoom);\n } else {\n roomData.set(null);\n }\n });\n });\n\n inject(DestroyRef).onDestroy(() => {\n const current = roomFn();\n\n if (current) {\n leaveRoom(current);\n roomData.set(null);\n }\n });\n\n return roomData.asReadonly() as Signal<WebSocketRoom<TMessageData> | null>;\n };\n\n const leaveRoom = (room: string) => {\n if (!rooms.has(room)) {\n if (isDevMode()) throw roomNotJoined(room);\n }\n\n socket.emit('leave-room', room);\n\n rooms.delete(room);\n };\n\n const setupWebSocketConnectionListener = () => {\n socket.on('connect', () => {\n isConnected.set(true);\n\n for (const room of rooms.keys()) {\n socket.emit('join-room', room);\n }\n });\n socket.on('disconnect', () => isConnected.set(false));\n };\n\n const setupWebSocketListener = () => {\n socket.onAny((data: string) => {\n try {\n const json = JSON.parse(data) as TMessageData;\n\n const room = rooms.get(json.room);\n\n if (room) room.latestMessage.set(json);\n } catch (error) {\n console.error(error);\n if (isDevMode()) throw messageMalformed();\n }\n });\n };\n\n inject(DestroyRef).onDestroy(() => socket.disconnect());\n\n setupWebSocketConnectionListener();\n setupWebSocketListener();\n socket.connect();\n\n const client: WebSocketClient<TMessageData> = {\n joinRoom,\n isConnected: isConnected.asReadonly(),\n subtle: {\n leaveRoom,\n },\n };\n\n return client;\n },\n {\n name: `WebSocketClient_${options.name}`,\n },\n );\n};\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["ɵEffectScheduler","isNaN","coreDeleteCookie"],"mappings":"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"}
|