@acorex-platform/client-connectivity-api 0.0.38 → 0.0.48

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.
@@ -5,7 +5,7 @@ import { catchError, switchMap } from 'rxjs/operators';
5
5
  import { AUTH_SIGN_IN_DEFAULT, AUTH_REGISTER_DEFAULT, AUTH_REFRESH_DEFAULT, AUTH_LOGOUT_DEFAULT, AUTH_UPDATE_SESSION_DEFAULT, AUTH_LIST_PROVIDERS_DEFAULT, buildRuntimeInvokeQueryString } from '@acorex-platform/framework-shared/runtime';
6
6
  import { HTTP_INTERCEPTORS, HttpClient, HttpHeaders, HttpErrorResponse } from '@angular/common/http';
7
7
  import { toAXPRequestError, AXPSettingsService, AXPCommonSettings, AXP_RUNTIME_QUERY_CACHE_DEFAULTS, coerceAXPSettingRawValueByKind, AXP_ROOT_CONFIG_TOKEN } from '@acorex-platform/framework-client/common';
8
- import { AXPDebugService, AXP_DISTRIBUTED_EVENT_LISTENER_PROVIDER } from '@acorex-platform/framework-client/core';
8
+ import { AXPDebugService, AXP_HOOK_PROVIDER } from '@acorex-platform/framework-client/core';
9
9
  import { AXPRuntimeRemoteHookKeys } from '@acorex-platform/framework-client/runtime';
10
10
  import { AXPRequestError } from '@acorex-platform/framework-shared/core';
11
11
 
@@ -692,22 +692,22 @@ const AXC_RUNTIME_REMOTE_HOOK_PROVIDERS = [
692
692
  AXCRuntimeQueryCacheService,
693
693
  AXCRuntimeApiService,
694
694
  {
695
- provide: AXP_DISTRIBUTED_EVENT_LISTENER_PROVIDER,
695
+ provide: AXP_HOOK_PROVIDER,
696
696
  useValue: AXCRuntimeCommandExecuteHookProvider,
697
697
  multi: true,
698
698
  },
699
699
  {
700
- provide: AXP_DISTRIBUTED_EVENT_LISTENER_PROVIDER,
700
+ provide: AXP_HOOK_PROVIDER,
701
701
  useValue: AXCRuntimeCommandExecuteBulkHookProvider,
702
702
  multi: true,
703
703
  },
704
704
  {
705
- provide: AXP_DISTRIBUTED_EVENT_LISTENER_PROVIDER,
705
+ provide: AXP_HOOK_PROVIDER,
706
706
  useValue: AXCRuntimeCommandBulkProgressHookProvider,
707
707
  multi: true,
708
708
  },
709
709
  {
710
- provide: AXP_DISTRIBUTED_EVENT_LISTENER_PROVIDER,
710
+ provide: AXP_HOOK_PROVIDER,
711
711
  useValue: AXCRuntimeQueryExecuteHookProvider,
712
712
  multi: true,
713
713
  },
@@ -1 +1 @@
1
- {"version":3,"file":"acorex-platform-client-connectivity-api.mjs","sources":["../../../../libs/connectivity/runtime/src/lib/http/api-http-auth.util.ts","../../../../libs/connectivity/runtime/src/lib/http/api-http-retry.util.ts","../../../../libs/connectivity/runtime/src/lib/http/api-http-retry.interceptor.ts","../../../../libs/connectivity/runtime/src/lib/http/api-http.module.ts","../../../../libs/connectivity/runtime/src/lib/http/map-http-error-to-request-error.util.ts","../../../../libs/connectivity/runtime/src/lib/runtime/runtime-query-cache-key.util.ts","../../../../libs/connectivity/runtime/src/lib/runtime/runtime-query-cache.service.ts","../../../../libs/connectivity/runtime/src/lib/runtime/runtime-api.service.ts","../../../../libs/connectivity/runtime/src/lib/runtime/runtime-remote.hooks.ts","../../../../libs/connectivity/runtime/src/lib/runtime/provide-runtime-remote-transport.ts","../../../../libs/connectivity/runtime/src/lib/runtime/runtime-remote-api.module.ts","../../../../libs/connectivity/runtime/src/acorex-platform-client-connectivity-api.ts"],"sourcesContent":["import {\n AUTH_LIST_PROVIDERS_DEFAULT,\n AUTH_LOGOUT_DEFAULT,\n AUTH_REFRESH_DEFAULT,\n AUTH_REGISTER_DEFAULT,\n AUTH_SIGN_IN_DEFAULT,\n AUTH_UPDATE_SESSION_DEFAULT,\n} from '@acorex-platform/framework-shared/runtime';\nimport type { HttpRequest } from '@angular/common/http';\n\n//#region ----- Constants -----\n\n/** Client-only marker: do not refresh/retry auth HTTP when this request fails. */\nexport const API_SKIP_AUTH_RETRY_HEADER = 'X-Skip-Auth-Retry';\n\nconst AUTH_RUNTIME_COMMAND_KEYS = new Set<string>([\n AUTH_SIGN_IN_DEFAULT,\n AUTH_REGISTER_DEFAULT,\n AUTH_REFRESH_DEFAULT,\n AUTH_LOGOUT_DEFAULT,\n AUTH_UPDATE_SESSION_DEFAULT,\n]);\n\nconst AUTH_RUNTIME_QUERY_KEYS = new Set<string>([AUTH_LIST_PROVIDERS_DEFAULT]);\n\n//#endregion\n\n//#region ----- Auth HTTP helpers -----\n\nexport function isAuthRuntimeCommandKey(name: string): boolean {\n return AUTH_RUNTIME_COMMAND_KEYS.has(name);\n}\n\nexport function isAuthRuntimeQueryKey(name: string): boolean {\n return AUTH_RUNTIME_QUERY_KEYS.has(name);\n}\n\n/** Headers for auth runtime transport calls (prevents 401 refresh loops). */\nexport function skipAuthRetryHeadersForRuntime(\n name: string,\n kind: 'command' | 'query',\n): Record<string, string> | undefined {\n const isAuth =\n kind === 'command' ? isAuthRuntimeCommandKey(name) : isAuthRuntimeQueryKey(name);\n\n return isAuth ? { [API_SKIP_AUTH_RETRY_HEADER]: '1' } : undefined;\n}\n\n/**\n * True when the request is part of the auth flow and must not trigger token refresh\n * or transient HTTP retry (legacy `/v1/auth/*`, runtime auth keys, or explicit header).\n */\nexport function isAuthHttpRequest(request: HttpRequest<unknown>): boolean {\n if (request.headers.has(API_SKIP_AUTH_RETRY_HEADER)) {\n return true;\n }\n\n if (request.url.includes('/v1/auth/')) {\n return true;\n }\n\n return isAuthRuntimeHttpRequest(request);\n}\n\nfunction isAuthRuntimeHttpRequest(request: HttpRequest<unknown>): boolean {\n if (request.method !== 'POST') {\n return false;\n }\n\n const runtimeKey = resolveRuntimeRequestName(request);\n if (!runtimeKey) {\n return false;\n }\n\n if (request.url.includes('/v1/runtime/commands')) {\n return isAuthRuntimeCommandKey(runtimeKey);\n }\n\n if (request.url.includes('/v1/runtime/queries')) {\n return isAuthRuntimeQueryKey(runtimeKey);\n }\n\n return false;\n}\n\n/**\n * Prefer `?name=` (invoke) over envelope `body.name` so input-only bodies that\n * happen to include a `name` field cannot be mistaken for the runtime key.\n */\nfunction resolveRuntimeRequestName(request: HttpRequest<unknown>): string | undefined {\n const fromUrl = readRuntimeNameFromUrl(request.url);\n if (fromUrl) {\n return fromUrl;\n }\n\n return readRuntimeRequestNameFromBody(request.body);\n}\n\nfunction readRuntimeNameFromUrl(url: string): string | undefined {\n try {\n const parsed = new URL(url, 'http://localhost');\n const name = parsed.searchParams.get('name');\n return typeof name === 'string' && name.trim() ? name.trim() : undefined;\n } catch {\n return undefined;\n }\n}\n\nfunction readRuntimeRequestNameFromBody(body: unknown): string | undefined {\n if (body == null || typeof body !== 'object') {\n return undefined;\n }\n\n const name = (body as { name?: unknown }).name;\n return typeof name === 'string' && name.trim() ? name.trim() : undefined;\n}\n\n//#endregion\n","import { HttpErrorResponse, HttpRequest } from '@angular/common/http';\nimport { isAuthHttpRequest } from './api-http-auth.util';\n\n//#region ----- Constants -----\n\nexport { API_SKIP_AUTH_RETRY_HEADER, isAuthHttpRequest } from './api-http-auth.util';\n\nexport const API_HTTP_RETRY_MAX_ATTEMPTS = 5;\nexport const API_HTTP_RETRY_BASE_MS = 400;\n\n/** POST endpoints that only perform reads and are safe to retry after transient failures. */\nconst READ_ONLY_POST_URL_PARTS = ['/v1/runtime/queries'];\n\n//#endregion\n\n//#region ----- Retry helpers -----\n\nexport function apiHttpRetryDelayMs(attempt: number): number {\n return API_HTTP_RETRY_BASE_MS * attempt;\n}\n\n/** GET/HEAD and read-only POST queries — safe to retry when the server may not have responded. */\nexport function isSafeToRetryHttpRequest(request: HttpRequest<unknown>): boolean {\n if (request.method === 'GET' || request.method === 'HEAD') {\n return true;\n }\n\n return (\n request.method === 'POST' &&\n READ_ONLY_POST_URL_PARTS.some((part) => request.url.includes(part))\n );\n}\n\nexport function isRetriableHttpError(\n error: HttpErrorResponse,\n request: HttpRequest<unknown>,\n attempt: number,\n): boolean {\n if (attempt >= API_HTTP_RETRY_MAX_ATTEMPTS) {\n return false;\n }\n\n if (isAuthHttpRequest(request)) {\n return false;\n }\n\n if (request.headers.has('X-Skip-Http-Retry')) {\n return false;\n }\n\n const status = error.status;\n const isTransientStatus = status === 0 || status === 502 || status === 503 || status === 504;\n\n if (!isTransientStatus) {\n return false;\n }\n\n return isSafeToRetryHttpRequest(request);\n}\n\n//#endregion\n","//#region ----- Imports -----\n\nimport {\n HttpErrorResponse,\n HttpEvent,\n HttpHandler,\n HttpInterceptor,\n HttpRequest,\n} from '@angular/common/http';\nimport { Injectable } from '@angular/core';\nimport { Observable, throwError, timer } from 'rxjs';\nimport { catchError, switchMap } from 'rxjs/operators';\nimport { apiHttpRetryDelayMs, isRetriableHttpError } from './api-http-retry.util';\n\n//#endregion\n\n//#region ----- Interceptor -----\n\n/**\n * Retries transient connectivity failures (status 0, 502, 503, 504) for idempotent\n * platform API calls: GET/HEAD and read-only POST runtime queries.\n */\n@Injectable()\nexport class AXCApiHttpRetryInterceptor implements HttpInterceptor {\n intercept(request: HttpRequest<unknown>, next: HttpHandler): Observable<HttpEvent<unknown>> {\n return this.sendWithRetry(request, next, 0);\n }\n\n private sendWithRetry(\n request: HttpRequest<unknown>,\n next: HttpHandler,\n attempt: number,\n ): Observable<HttpEvent<unknown>> {\n return next.handle(request).pipe(\n catchError((error: HttpErrorResponse) => {\n if (!isRetriableHttpError(error, request, attempt)) {\n return throwError(() => error);\n }\n\n const nextAttempt = attempt + 1;\n return timer(apiHttpRetryDelayMs(nextAttempt)).pipe(\n switchMap(() => this.sendWithRetry(request, next, nextAttempt)),\n );\n }),\n );\n }\n}\n\n//#endregion\n","//#region ----- Imports -----\n\nimport { HTTP_INTERCEPTORS } from '@angular/common/http';\nimport { NgModule } from '@angular/core';\nimport { AXCApiHttpRetryInterceptor } from './api-http-retry.interceptor';\n\n//#endregion\n\n//#region ----- Module -----\n\n@NgModule({\n providers: [\n {\n provide: HTTP_INTERCEPTORS,\n useClass: AXCApiHttpRetryInterceptor,\n multi: true,\n },\n ],\n})\nexport class AXCApiHttpModule {}\n\n//#endregion\n","import { AXPRequestError } from '@acorex-platform/framework-shared/core';\nimport { toAXPRequestError } from '@acorex-platform/framework-client/common';\n\n//#region ---- HTTP → AXPRequestError ----\n\n/**\n * Normalize Angular HTTP failures into transport-agnostic {@link AXPRequestError}.\n * Call only from connectivity adapters (REST today; gRPC/GraphQL later).\n */\nexport function mapHttpErrorResponseToAXPRequestError(error: unknown): AXPRequestError {\n return toAXPRequestError(error);\n}\n\n//#endregion\n","//#region ----- Stable Request Serialization -----\n\n/**\n * Serializes JSON-like query input with object keys sorted recursively.\n * Equivalent inputs produce the same cache key regardless of property insertion order.\n */\nexport function stableSerializeRuntimeQueryInput(value: unknown): string {\n return JSON.stringify(normalizeValue(value, new WeakSet<object>())) ?? 'undefined';\n}\n\nfunction normalizeValue(value: unknown, ancestors: WeakSet<object>): unknown {\n if (value === null || typeof value !== 'object') {\n return value;\n }\n\n if (value instanceof Date) {\n return value.toJSON();\n }\n\n if (ancestors.has(value)) {\n throw new TypeError('Runtime query input must not contain circular references');\n }\n\n ancestors.add(value);\n try {\n if (Array.isArray(value)) {\n return value.map((item) => normalizeValue(item, ancestors));\n }\n\n const record = value as Record<string, unknown>;\n return Object.keys(record)\n .sort()\n .reduce<Record<string, unknown>>((normalized, key) => {\n const item = record[key];\n if (item !== undefined) {\n normalized[key] = normalizeValue(item, ancestors);\n }\n return normalized;\n }, {});\n } finally {\n ancestors.delete(value);\n }\n}\n\n//#endregion\n","//#region ----- Imports -----\n\nimport {\n AXPCommonSettings,\n AXPSettingsService,\n AXP_RUNTIME_QUERY_CACHE_DEFAULTS,\n coerceAXPSettingRawValueByKind,\n} from '@acorex-platform/framework-client/common';\nimport { AXPDebugService } from '@acorex-platform/framework-client/core';\nimport type { AXPQueryExecuteOptions } from '@acorex-platform/framework-shared/runtime';\nimport { inject, Injectable } from '@angular/core';\n\nimport type { AXCRuntimeQueryResult } from './runtime-api.types';\nimport { stableSerializeRuntimeQueryInput } from './runtime-query-cache-key.util';\n\n//#endregion\n\n//#region ----- Types & Constants -----\n\ninterface AXCRuntimeQueryCacheEntry {\n expiresAt: number;\n originStack?: string;\n result: AXCRuntimeQueryResult;\n storedAt: number;\n}\n\ninterface AXCRuntimeQueryInFlightEntry {\n originStack?: string;\n promise: Promise<AXCRuntimeQueryResult>;\n startedAt: number;\n}\n\ntype AXCRuntimeQueryDuplicateType = 'in-flight-coalesced' | 'ttl-cache-hit';\n\ninterface AXCRuntimeQueryDuplicateStat {\n callerLabel?: string;\n coalescedCount: number;\n duplicateStacks: string[];\n firstAt: number;\n input: unknown;\n lastAt: number;\n maxOriginAgeMs: number;\n name: string;\n originStack?: string;\n reusedCount: number;\n target: string;\n}\n\nconst MAX_CACHE_ENTRIES = 250;\nconst DEBUG_NAMESPACE = 'runtime-query-cache';\n\n/** Duplicates are collected for this window, then reported as one line per request. */\nconst DUPLICATE_REPORT_WINDOW_MS = 1_000;\nconst MAX_TRACKED_DUPLICATE_REQUESTS = 50;\nconst MAX_STACK_FRAMES = 8;\nconst MAX_DUPLICATE_STACK_SAMPLES = 3;\nconst MAX_TARGET_LENGTH = 120;\nconst MAX_FILTER_FIELDS = 3;\nconst MAX_FILTER_DEPTH = 3;\n\n/** Gateway frames that hide the real caller in captured stacks. */\nconst GATEWAY_STACK_FRAME_PATTERN =\n /AXCRuntimeQueryCacheService|AXCRuntimeApiService\\.(executeQuery|sendQuery)|runtime-query-cache/;\n\n/** Async/zone plumbing frames that carry no call-site information. */\nconst PLUMBING_STACK_FRAME_PATTERN =\n /zone\\.js|Zone[A-Za-z]*\\.|ZoneAwarePromise|asyncGeneratorStep|_?asyncToGenerator|__awaiter|Generator\\.|Object\\.next|drainMicroTaskQueue|processTicksAndRejections/;\n\n//#endregion\n\n//#region ----- Runtime Query Cache -----\n\n/**\n * Coalesces identical in-flight runtime queries and optionally reuses successful\n * responses for a short platform-configured TTL.\n */\n@Injectable()\nexport class AXCRuntimeQueryCacheService {\n //#region ----- Services & Dependencies -----\n\n private readonly settings = inject(AXPSettingsService);\n private readonly debug = inject(AXPDebugService);\n\n //#endregion\n\n //#region ----- State -----\n\n private readonly inFlight = new Map<string, AXCRuntimeQueryInFlightEntry>();\n private readonly responses = new Map<string, AXCRuntimeQueryCacheEntry>();\n private readonly duplicates = new Map<string, AXCRuntimeQueryDuplicateStat>();\n private duplicateReportHandle: ReturnType<typeof setTimeout> | undefined;\n private generation = 0;\n\n //#endregion\n\n constructor() {\n this.settings.onLoaded.subscribe(() => this.clear());\n this.settings.onChanged.subscribe((event) => {\n if (\n event.keys.includes(AXPCommonSettings.RuntimeQueryCacheEnabled) ||\n event.keys.includes(AXPCommonSettings.RuntimeQueryCacheTtlMs)\n ) {\n this.clear();\n }\n });\n }\n\n //#region ----- Public API -----\n\n execute(\n name: string,\n input: unknown,\n request: () => Promise<AXCRuntimeQueryResult>,\n options?: AXPQueryExecuteOptions,\n ): Promise<AXCRuntimeQueryResult> {\n if (!this.isEnabled()) {\n return request();\n }\n\n const optionsKey =\n options != null && Object.keys(options).length > 0\n ? stableSerializeRuntimeQueryInput(options)\n : '';\n const key = `${name}|${stableSerializeRuntimeQueryInput(input ?? {})}|${optionsKey}`;\n const now = Date.now();\n const cached = this.responses.get(key);\n if (cached) {\n if (cached.expiresAt > now) {\n this.recordDuplicate({\n duplicateStack: this.captureCallerStack(),\n input,\n key,\n name,\n originAgeMs: now - cached.storedAt,\n originStack: cached.originStack,\n type: 'ttl-cache-hit',\n });\n return Promise.resolve(cached.result);\n }\n this.responses.delete(key);\n }\n\n const existing = this.inFlight.get(key);\n if (existing) {\n this.recordDuplicate({\n duplicateStack: this.captureCallerStack(),\n input,\n key,\n name,\n originAgeMs: now - existing.startedAt,\n originStack: existing.originStack,\n type: 'in-flight-coalesced',\n });\n return existing.promise;\n }\n\n const generation = this.generation;\n const ttlMs = this.getTtlMs();\n const originStack = this.captureCallerStack();\n const task = request()\n .then((result) => {\n if (\n result.success &&\n ttlMs > 0 &&\n generation === this.generation &&\n this.isEnabled()\n ) {\n this.storeResponse(key, result, ttlMs, originStack);\n }\n return result;\n })\n .finally(() => {\n if (this.inFlight.get(key)?.promise === task) {\n this.inFlight.delete(key);\n }\n });\n\n this.inFlight.set(key, {\n originStack,\n promise: task,\n startedAt: now,\n });\n return task;\n }\n\n /**\n * Invalidates completed responses and prevents older in-flight queries from\n * repopulating the cache after a command or configuration change.\n */\n clear(): void {\n this.generation += 1;\n this.responses.clear();\n this.inFlight.clear();\n this.reportDuplicates();\n }\n\n //#endregion\n\n //#region ----- Settings -----\n\n private isEnabled(): boolean {\n const raw = this.settings.peekCached(AXPCommonSettings.RuntimeQueryCacheEnabled);\n return raw === undefined\n ? AXP_RUNTIME_QUERY_CACHE_DEFAULTS.enabled\n : (coerceAXPSettingRawValueByKind(raw, 'boolean') as boolean);\n }\n\n private getTtlMs(): number {\n const raw = this.settings.peekCached(AXPCommonSettings.RuntimeQueryCacheTtlMs);\n const value =\n raw === undefined\n ? AXP_RUNTIME_QUERY_CACHE_DEFAULTS.ttlMs\n : (coerceAXPSettingRawValueByKind(raw, 'number') as number);\n return Number.isFinite(value) ? Math.max(0, value) : AXP_RUNTIME_QUERY_CACHE_DEFAULTS.ttlMs;\n }\n\n //#endregion\n\n //#region ----- Cache Maintenance -----\n\n private storeResponse(\n key: string,\n result: AXCRuntimeQueryResult,\n ttlMs: number,\n originStack?: string,\n ): void {\n this.pruneExpired();\n if (this.responses.size >= MAX_CACHE_ENTRIES) {\n const oldestKey = this.responses.keys().next().value as string | undefined;\n if (oldestKey) {\n this.responses.delete(oldestKey);\n }\n }\n const storedAt = Date.now();\n this.responses.set(key, {\n result,\n expiresAt: storedAt + ttlMs,\n originStack,\n storedAt,\n });\n }\n\n private pruneExpired(): void {\n const now = Date.now();\n for (const [key, entry] of this.responses) {\n if (entry.expiresAt <= now) {\n this.responses.delete(key);\n }\n }\n }\n\n //#endregion\n\n //#region ----- Debug Diagnostics -----\n\n private captureCallerStack(): string | undefined {\n if (!this.debug.isDebugMode()) {\n return undefined;\n }\n\n const frames = (new Error().stack?.split('\\n') ?? [])\n .map((frame) => frame.trim())\n .filter(\n (frame) =>\n frame.length > 0 && frame !== 'Error' && !GATEWAY_STACK_FRAME_PATTERN.test(frame),\n );\n const callSites = frames.filter((frame) => !PLUMBING_STACK_FRAME_PATTERN.test(frame));\n const selected = (callSites.length > 0 ? callSites : frames).slice(0, MAX_STACK_FRAMES);\n\n return selected.length > 0 ? selected.join('\\n') : undefined;\n }\n\n private recordDuplicate(details: {\n duplicateStack?: string;\n input: unknown;\n key: string;\n name: string;\n originAgeMs: number;\n originStack?: string;\n type: AXCRuntimeQueryDuplicateType;\n }): void {\n if (!this.debug.isDebugMode()) {\n return;\n }\n\n const now = Date.now();\n let stat = this.duplicates.get(details.key);\n if (!stat) {\n stat = {\n callerLabel: this.describeCaller(details.duplicateStack ?? details.originStack),\n coalescedCount: 0,\n duplicateStacks: [],\n firstAt: now,\n input: details.input,\n lastAt: now,\n maxOriginAgeMs: 0,\n name: details.name,\n originStack: details.originStack,\n reusedCount: 0,\n target: this.describeTarget(details.input),\n };\n this.duplicates.set(details.key, stat);\n }\n\n stat.lastAt = now;\n stat.maxOriginAgeMs = Math.max(stat.maxOriginAgeMs, Math.round(details.originAgeMs));\n if (details.type === 'in-flight-coalesced') {\n stat.coalescedCount += 1;\n } else {\n stat.reusedCount += 1;\n }\n\n if (\n details.duplicateStack &&\n stat.duplicateStacks.length < MAX_DUPLICATE_STACK_SAMPLES &&\n !stat.duplicateStacks.includes(details.duplicateStack)\n ) {\n stat.duplicateStacks.push(details.duplicateStack);\n }\n\n if (this.duplicates.size >= MAX_TRACKED_DUPLICATE_REQUESTS) {\n this.reportDuplicates();\n return;\n }\n\n this.duplicateReportHandle ??= setTimeout(\n () => this.reportDuplicates(),\n DUPLICATE_REPORT_WINDOW_MS,\n );\n }\n\n /** Emits one warning per duplicated request, with every key value inline in the message. */\n private reportDuplicates(): void {\n if (this.duplicateReportHandle !== undefined) {\n clearTimeout(this.duplicateReportHandle);\n this.duplicateReportHandle = undefined;\n }\n\n const stats = [...this.duplicates.values()].sort(\n (left, right) =>\n right.coalescedCount + right.reusedCount - (left.coalescedCount + left.reusedCount),\n );\n this.duplicates.clear();\n if (stats.length === 0) {\n return;\n }\n\n const totalCalls = stats.reduce(\n (total, stat) => total + stat.coalescedCount + stat.reusedCount,\n 0,\n );\n\n if (stats.length > 1) {\n this.debug.warn(\n DEBUG_NAMESPACE,\n 'duplicates',\n `${totalCalls} duplicate calls suppressed · ${stats.length} distinct requests · last ${DUPLICATE_REPORT_WINDOW_MS}ms`,\n );\n }\n\n for (const stat of stats) {\n const count = stat.coalescedCount + stat.reusedCount;\n const segments = [\n `×${count} duplicate ${count === 1 ? 'call' : 'calls'}`,\n stat.target,\n `coalesced ${stat.coalescedCount} / from memory ${stat.reusedCount}`,\n `burst ${Math.max(0, stat.lastAt - stat.firstAt)}ms`,\n `origin age ≤${stat.maxOriginAgeMs}ms`,\n ];\n if (stat.callerLabel) {\n segments.push(`caller ${stat.callerLabel}`);\n }\n\n this.debug.warn(DEBUG_NAMESPACE, stat.name, segments.join(' · '), () => ({\n duplicateStacks: stat.duplicateStacks,\n input: stat.input,\n originalCallStack: stat.originStack,\n }));\n }\n }\n\n /** First meaningful frame, e.g. `AXPLookupEditorWidgetColumn.loadTitle`. */\n private describeCaller(stack?: string): string | undefined {\n const frame = stack?.split('\\n')[0];\n if (!frame) {\n return undefined;\n }\n\n return frame.match(/^at\\s+([\\w$.<>]+)/)?.[1] ?? frame.match(/^([\\w$.<>]+)@/)?.[1];\n }\n\n private describeTarget(input: unknown): string {\n if (input === undefined || input === null) {\n return 'no input';\n }\n\n if (typeof input !== 'object') {\n return String(input);\n }\n\n const record = input as Record<string, unknown>;\n const pick = (...keys: string[]): string | undefined =>\n keys.map((key) => record[key]).find((value): value is string => typeof value === 'string');\n\n const entity = pick('entity', 'entityName', 'entityType');\n const id = pick('id', 'entityId', 'key');\n const view = pick('view', 'viewName', 'queryName');\n const filterFields = this.collectFilterFields(record['filter']);\n const segments = [\n entity,\n id ? `#${id.slice(0, 8)}` : undefined,\n view ? `view=${view}` : undefined,\n filterFields.length > 0 ? `filter=${filterFields.join(',')}` : undefined,\n typeof record['take'] === 'number' ? `take=${record['take']}` : undefined,\n ].filter((segment): segment is string => !!segment);\n if (segments.length > 0) {\n return segments.join(' ');\n }\n\n const serialized = stableSerializeRuntimeQueryInput(input);\n return serialized.length > MAX_TARGET_LENGTH\n ? `${serialized.slice(0, MAX_TARGET_LENGTH - 1)}…`\n : serialized;\n }\n\n private collectFilterFields(filter: unknown, depth = 0): string[] {\n if (depth > MAX_FILTER_DEPTH || filter == null || typeof filter !== 'object') {\n return [];\n }\n\n const record = filter as Record<string, unknown>;\n if (typeof record['field'] === 'string') {\n return [record['field']];\n }\n\n const nested = Array.isArray(record['filters']) ? (record['filters'] as unknown[]) : [];\n const fields = nested.flatMap((child) => this.collectFilterFields(child, depth + 1));\n return [...new Set(fields)].slice(0, MAX_FILTER_FIELDS);\n }\n\n //#endregion\n}\n\n//#endregion\n","import { AXP_ROOT_CONFIG_TOKEN } from '@acorex-platform/framework-client/common';\nimport {\n buildRuntimeInvokeQueryString,\n type AXPBulkCommandProgress,\n type AXPCommandExecuteOptions,\n type AXPQueryExecuteOptions,\n} from '@acorex-platform/framework-shared/runtime';\nimport { HttpClient, HttpErrorResponse, HttpHeaders } from '@angular/common/http';\nimport { inject, Injectable } from '@angular/core';\nimport { catchError, firstValueFrom, of, throwError } from 'rxjs';\nimport { skipAuthRetryHeadersForRuntime } from '../http/api-http-auth.util';\nimport { mapHttpErrorResponseToAXPRequestError } from '../http/map-http-error-to-request-error.util';\nimport { AXCRuntimeQueryCacheService } from './runtime-query-cache.service';\nimport type {\n AXCRuntimeBulkCommandRequest,\n AXCRuntimeBulkCommandResult,\n AXCRuntimeCommandResult,\n AXCRuntimeQueryResult,\n} from './runtime-api.types';\n\n//#region ---- Runtime API service ----\n\n/**\n * HTTP client for platform runtime command/query endpoints.\n * Transport failures are normalized to {@link AXPRequestError}.\n */\n@Injectable()\nexport class AXCRuntimeApiService {\n private readonly http = inject(HttpClient);\n private readonly configs = inject(AXP_ROOT_CONFIG_TOKEN);\n private readonly queryCache = inject(AXCRuntimeQueryCacheService);\n\n private runtimeUrl(kind: 'commands' | 'commands/bulk' | 'queries'): string {\n return `${this.configs.baseUrl}/v1/runtime/${kind}`;\n }\n\n /**\n * Single command/query invoke — key (and entity for `Entity:*:Default`) in the\n * query string so DevTools shows the operation without `%3A` noise.\n */\n private runtimeInvokeUrl(kind: 'commands' | 'queries', name: string, input?: unknown): string {\n const query = buildRuntimeInvokeQueryString(name, input);\n return `${this.configs.baseUrl}/v1/runtime/${kind}/invoke?${query}`;\n }\n\n executeCommand(\n name: string,\n input?: unknown,\n options?: AXPCommandExecuteOptions,\n ): Promise<AXCRuntimeCommandResult> {\n const skipAuthRetry = skipAuthRetryHeadersForRuntime(name, 'command');\n const headers = skipAuthRetry ? new HttpHeaders(skipAuthRetry) : undefined;\n const hasOptions = options != null && Object.keys(options).length > 0;\n\n const request$ = hasOptions\n ? this.http.post<AXCRuntimeCommandResult>(\n this.runtimeUrl('commands'),\n { name, input: input ?? {}, options },\n { withCredentials: true, ...(headers ? { headers } : undefined) },\n )\n : this.http.post<AXCRuntimeCommandResult>(\n this.runtimeInvokeUrl('commands', name, input),\n input ?? {},\n { withCredentials: true, ...(headers ? { headers } : undefined) },\n );\n\n return firstValueFrom(\n request$.pipe(catchError((error) => throwError(() => mapHttpErrorResponseToAXPRequestError(error)))),\n ).then((result) => {\n if (result.success) {\n this.queryCache.clear();\n }\n return result;\n });\n }\n\n executeBulkCommand(request: AXCRuntimeBulkCommandRequest): Promise<AXCRuntimeBulkCommandResult> {\n return firstValueFrom(\n this.http\n .post<AXCRuntimeBulkCommandResult>(this.runtimeUrl('commands/bulk'), request, {\n withCredentials: true,\n })\n .pipe(catchError((error) => throwError(() => mapHttpErrorResponseToAXPRequestError(error)))),\n ).then((result) => {\n if (result.success) {\n this.queryCache.clear();\n }\n return result;\n });\n }\n\n getBulkProgress(executionId: string): Promise<AXPBulkCommandProgress | null> {\n const id = executionId.trim();\n if (!id) {\n return Promise.resolve(null);\n }\n\n return firstValueFrom(\n this.http\n .get<AXPBulkCommandProgress>(`${this.runtimeUrl('commands/bulk')}/${encodeURIComponent(id)}/progress`, {\n withCredentials: true,\n })\n .pipe(\n catchError((error: unknown) => {\n if (error instanceof HttpErrorResponse && error.status === 404) {\n return of(null);\n }\n return throwError(() => mapHttpErrorResponseToAXPRequestError(error));\n }),\n ),\n );\n }\n\n executeQuery(\n name: string,\n input?: unknown,\n options?: AXPQueryExecuteOptions,\n ): Promise<AXCRuntimeQueryResult> {\n return this.queryCache.execute(name, input, () => this.sendQuery(name, input, options), options);\n }\n\n private sendQuery(\n name: string,\n input?: unknown,\n options?: AXPQueryExecuteOptions,\n ): Promise<AXCRuntimeQueryResult> {\n const skipAuthRetry = skipAuthRetryHeadersForRuntime(name, 'query');\n const headers = skipAuthRetry ? new HttpHeaders(skipAuthRetry) : undefined;\n const hasOptions = options != null && Object.keys(options).length > 0;\n\n // Named body carries `options`; invoke keeps body = input only for DevTools-friendly URLs.\n const request$ = hasOptions\n ? this.http.post<AXCRuntimeQueryResult>(\n this.runtimeUrl('queries'),\n { name, input: input ?? {}, options },\n { withCredentials: true, ...(headers ? { headers } : undefined) },\n )\n : this.http.post<AXCRuntimeQueryResult>(\n this.runtimeInvokeUrl('queries', name, input),\n input ?? {},\n { withCredentials: true, ...(headers ? { headers } : undefined) },\n );\n\n return firstValueFrom(\n request$.pipe(catchError((error) => throwError(() => mapHttpErrorResponseToAXPRequestError(error)))),\n );\n }\n}\n\n//#endregion\n","import {\n AXP_DISTRIBUTED_EVENT_LISTENER_PROVIDER,\n type AXPDistributedEventListenerProvider,\n} from '@acorex-platform/framework-client/core';\nimport {\n AXPRuntimeRemoteHookKeys,\n type AXPRuntimeCommandBulkProgressHookPayload,\n type AXPRuntimeCommandExecuteBulkHookPayload,\n type AXPRuntimeCommandExecuteHookPayload,\n type AXPRuntimeQueryExecuteHookPayload,\n} from '@acorex-platform/framework-client/runtime';\nimport { AXPRequestError } from '@acorex-platform/framework-shared/core';\nimport { inject, type Provider } from '@angular/core';\nimport { AXCRuntimeApiService } from './runtime-api.service';\nimport { AXCRuntimeQueryCacheService } from './runtime-query-cache.service';\nimport type { AXCRuntimeQueryResult } from './runtime-api.types';\n\n//#region ---- Unwrap helpers ----\n\n/**\n * Map server runtime query envelope to the value local {@code query.fetch} would return.\n *\n * - success: false → throw using `message`\n * - kind: 'value' | 'object' | 'collection' → `data`\n */\nexport function unwrapRuntimeQueryResult(result: AXCRuntimeQueryResult): unknown {\n if (!result.success) {\n const message = result.message;\n const text =\n typeof message?.text === 'string'\n ? message.text\n : message?.code || 'Query execution failed';\n throw new AXPRequestError(text, {\n code: message?.code,\n details: message?.details,\n });\n }\n\n if (result.kind === 'collection' || result.kind === 'object' || result.kind === 'value') {\n return result.data;\n }\n\n return result;\n}\n\n//#endregion\n\n//#region ---- Hook providers ----\n\nexport const AXCRuntimeCommandExecuteHookProvider: AXPDistributedEventListenerProvider<\n AXPRuntimeCommandExecuteHookPayload,\n AXPRuntimeCommandExecuteHookPayload\n> = {\n key: AXPRuntimeRemoteHookKeys.CommandExecute,\n async execute(payload) {\n if (payload.handled) {\n return payload;\n }\n const api = inject(AXCRuntimeApiService);\n const result = await api.executeCommand(payload.name, payload.input, payload.options);\n return { ...payload, handled: true, result };\n },\n};\n\nexport const AXCRuntimeCommandExecuteBulkHookProvider: AXPDistributedEventListenerProvider<\n AXPRuntimeCommandExecuteBulkHookPayload,\n AXPRuntimeCommandExecuteBulkHookPayload\n> = {\n key: AXPRuntimeRemoteHookKeys.CommandExecuteBulk,\n async execute(payload) {\n if (payload.handled) {\n return payload;\n }\n const api = inject(AXCRuntimeApiService);\n const result = await api.executeBulkCommand(payload.request);\n return { ...payload, handled: true, result };\n },\n};\n\nexport const AXCRuntimeCommandBulkProgressHookProvider: AXPDistributedEventListenerProvider<\n AXPRuntimeCommandBulkProgressHookPayload,\n AXPRuntimeCommandBulkProgressHookPayload\n> = {\n key: AXPRuntimeRemoteHookKeys.CommandBulkProgress,\n async execute(payload) {\n if (payload.handled) {\n return payload;\n }\n const api = inject(AXCRuntimeApiService);\n const progress = await api.getBulkProgress(payload.executionId);\n return { ...payload, handled: true, progress };\n },\n};\n\nexport const AXCRuntimeQueryExecuteHookProvider: AXPDistributedEventListenerProvider<\n AXPRuntimeQueryExecuteHookPayload,\n AXPRuntimeQueryExecuteHookPayload\n> = {\n key: AXPRuntimeRemoteHookKeys.QueryExecute,\n async execute(payload) {\n if (payload.handled) {\n return payload;\n }\n const api = inject(AXCRuntimeApiService);\n const response = await api.executeQuery(payload.name, payload.input, payload.options);\n // Keep the wire envelope — same contract as local AXPQuery.fetch / command execute.\n return {\n ...payload,\n handled: true,\n result: response,\n };\n },\n};\n\nexport const AXC_RUNTIME_REMOTE_HOOK_PROVIDERS: Provider[] = [\n AXCRuntimeQueryCacheService,\n AXCRuntimeApiService,\n {\n provide: AXP_DISTRIBUTED_EVENT_LISTENER_PROVIDER,\n useValue: AXCRuntimeCommandExecuteHookProvider,\n multi: true,\n },\n {\n provide: AXP_DISTRIBUTED_EVENT_LISTENER_PROVIDER,\n useValue: AXCRuntimeCommandExecuteBulkHookProvider,\n multi: true,\n },\n {\n provide: AXP_DISTRIBUTED_EVENT_LISTENER_PROVIDER,\n useValue: AXCRuntimeCommandBulkProgressHookProvider,\n multi: true,\n },\n {\n provide: AXP_DISTRIBUTED_EVENT_LISTENER_PROVIDER,\n useValue: AXCRuntimeQueryExecuteHookProvider,\n multi: true,\n },\n];\n\n//#endregion\n","//#region ----- Imports -----\n\nimport type { Provider } from '@angular/core';\nimport { AXC_RUNTIME_REMOTE_HOOK_PROVIDERS } from './runtime-remote.hooks';\n\n//#endregion\n\n//#region ----- Provider factory -----\n\n/**\n * Nest / demo-api CQRS transport: `runtime.query.execute`, `runtime.command.execute`,\n * and `runtime.command.execute-bulk` against `{AXP_ROOT_CONFIG_TOKEN.baseUrl}/v1/runtime/*`.\n *\n * Official hosts that import `AXMSettingsManagementModule` get this automatically.\n * Custom API stacks should use `provideExternalRuntimeQueryTransport` /\n * `provideExternalRuntimeCommandTransport` / `provideExternalRuntimeBulkTransport` instead.\n */\nexport function provideRuntimeRemoteTransport(): Provider[] {\n return [...AXC_RUNTIME_REMOTE_HOOK_PROVIDERS];\n}\n\n//#endregion\n","//#region ----- Imports -----\n\nimport { NgModule } from '@angular/core';\nimport { provideRuntimeRemoteTransport } from './provide-runtime-remote-transport';\n\n//#endregion\n\n//#region ----- Module -----\n\n/**\n * Registers the Nest runtime CQRS hooks used when a query/command is not in\n * {@code provideQuerySetups} / {@code provideCommandSetups}.\n *\n * Requires {@link AXP_ROOT_CONFIG_TOKEN} (`baseUrl`, typically `/api`) and Angular\n * {@code HttpClient}.\n */\n@NgModule({\n providers: provideRuntimeRemoteTransport(),\n})\nexport class AXCRuntimeRemoteApiModule {}\n\n//#endregion\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["catchError"],"mappings":"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"}
1
+ {"version":3,"file":"acorex-platform-client-connectivity-api.mjs","sources":["../../../../libs/connectivity/api/src/lib/http/api-http-auth.util.ts","../../../../libs/connectivity/api/src/lib/http/api-http-retry.util.ts","../../../../libs/connectivity/api/src/lib/http/api-http-retry.interceptor.ts","../../../../libs/connectivity/api/src/lib/http/api-http.module.ts","../../../../libs/connectivity/api/src/lib/http/map-http-error-to-request-error.util.ts","../../../../libs/connectivity/api/src/lib/runtime/runtime-query-cache-key.util.ts","../../../../libs/connectivity/api/src/lib/runtime/runtime-query-cache.service.ts","../../../../libs/connectivity/api/src/lib/runtime/runtime-api.service.ts","../../../../libs/connectivity/api/src/lib/runtime/runtime-remote.hooks.ts","../../../../libs/connectivity/api/src/lib/runtime/provide-runtime-remote-transport.ts","../../../../libs/connectivity/api/src/lib/runtime/runtime-remote-api.module.ts","../../../../libs/connectivity/api/src/acorex-platform-client-connectivity-api.ts"],"sourcesContent":["import {\n AUTH_LIST_PROVIDERS_DEFAULT,\n AUTH_LOGOUT_DEFAULT,\n AUTH_REFRESH_DEFAULT,\n AUTH_REGISTER_DEFAULT,\n AUTH_SIGN_IN_DEFAULT,\n AUTH_UPDATE_SESSION_DEFAULT,\n} from '@acorex-platform/framework-shared/runtime';\nimport type { HttpRequest } from '@angular/common/http';\n\n//#region ----- Constants -----\n\n/** Client-only marker: do not refresh/retry auth HTTP when this request fails. */\nexport const API_SKIP_AUTH_RETRY_HEADER = 'X-Skip-Auth-Retry';\n\nconst AUTH_RUNTIME_COMMAND_KEYS = new Set<string>([\n AUTH_SIGN_IN_DEFAULT,\n AUTH_REGISTER_DEFAULT,\n AUTH_REFRESH_DEFAULT,\n AUTH_LOGOUT_DEFAULT,\n AUTH_UPDATE_SESSION_DEFAULT,\n]);\n\nconst AUTH_RUNTIME_QUERY_KEYS = new Set<string>([AUTH_LIST_PROVIDERS_DEFAULT]);\n\n//#endregion\n\n//#region ----- Auth HTTP helpers -----\n\nexport function isAuthRuntimeCommandKey(name: string): boolean {\n return AUTH_RUNTIME_COMMAND_KEYS.has(name);\n}\n\nexport function isAuthRuntimeQueryKey(name: string): boolean {\n return AUTH_RUNTIME_QUERY_KEYS.has(name);\n}\n\n/** Headers for auth runtime transport calls (prevents 401 refresh loops). */\nexport function skipAuthRetryHeadersForRuntime(\n name: string,\n kind: 'command' | 'query',\n): Record<string, string> | undefined {\n const isAuth =\n kind === 'command' ? isAuthRuntimeCommandKey(name) : isAuthRuntimeQueryKey(name);\n\n return isAuth ? { [API_SKIP_AUTH_RETRY_HEADER]: '1' } : undefined;\n}\n\n/**\n * True when the request is part of the auth flow and must not trigger token refresh\n * or transient HTTP retry (legacy `/v1/auth/*`, runtime auth keys, or explicit header).\n */\nexport function isAuthHttpRequest(request: HttpRequest<unknown>): boolean {\n if (request.headers.has(API_SKIP_AUTH_RETRY_HEADER)) {\n return true;\n }\n\n if (request.url.includes('/v1/auth/')) {\n return true;\n }\n\n return isAuthRuntimeHttpRequest(request);\n}\n\nfunction isAuthRuntimeHttpRequest(request: HttpRequest<unknown>): boolean {\n if (request.method !== 'POST') {\n return false;\n }\n\n const runtimeKey = resolveRuntimeRequestName(request);\n if (!runtimeKey) {\n return false;\n }\n\n if (request.url.includes('/v1/runtime/commands')) {\n return isAuthRuntimeCommandKey(runtimeKey);\n }\n\n if (request.url.includes('/v1/runtime/queries')) {\n return isAuthRuntimeQueryKey(runtimeKey);\n }\n\n return false;\n}\n\n/**\n * Prefer `?name=` (invoke) over envelope `body.name` so input-only bodies that\n * happen to include a `name` field cannot be mistaken for the runtime key.\n */\nfunction resolveRuntimeRequestName(request: HttpRequest<unknown>): string | undefined {\n const fromUrl = readRuntimeNameFromUrl(request.url);\n if (fromUrl) {\n return fromUrl;\n }\n\n return readRuntimeRequestNameFromBody(request.body);\n}\n\nfunction readRuntimeNameFromUrl(url: string): string | undefined {\n try {\n const parsed = new URL(url, 'http://localhost');\n const name = parsed.searchParams.get('name');\n return typeof name === 'string' && name.trim() ? name.trim() : undefined;\n } catch {\n return undefined;\n }\n}\n\nfunction readRuntimeRequestNameFromBody(body: unknown): string | undefined {\n if (body == null || typeof body !== 'object') {\n return undefined;\n }\n\n const name = (body as { name?: unknown }).name;\n return typeof name === 'string' && name.trim() ? name.trim() : undefined;\n}\n\n//#endregion\n","import { HttpErrorResponse, HttpRequest } from '@angular/common/http';\nimport { isAuthHttpRequest } from './api-http-auth.util';\n\n//#region ----- Constants -----\n\nexport { API_SKIP_AUTH_RETRY_HEADER, isAuthHttpRequest } from './api-http-auth.util';\n\nexport const API_HTTP_RETRY_MAX_ATTEMPTS = 5;\nexport const API_HTTP_RETRY_BASE_MS = 400;\n\n/** POST endpoints that only perform reads and are safe to retry after transient failures. */\nconst READ_ONLY_POST_URL_PARTS = ['/v1/runtime/queries'];\n\n//#endregion\n\n//#region ----- Retry helpers -----\n\nexport function apiHttpRetryDelayMs(attempt: number): number {\n return API_HTTP_RETRY_BASE_MS * attempt;\n}\n\n/** GET/HEAD and read-only POST queries — safe to retry when the server may not have responded. */\nexport function isSafeToRetryHttpRequest(request: HttpRequest<unknown>): boolean {\n if (request.method === 'GET' || request.method === 'HEAD') {\n return true;\n }\n\n return (\n request.method === 'POST' &&\n READ_ONLY_POST_URL_PARTS.some((part) => request.url.includes(part))\n );\n}\n\nexport function isRetriableHttpError(\n error: HttpErrorResponse,\n request: HttpRequest<unknown>,\n attempt: number,\n): boolean {\n if (attempt >= API_HTTP_RETRY_MAX_ATTEMPTS) {\n return false;\n }\n\n if (isAuthHttpRequest(request)) {\n return false;\n }\n\n if (request.headers.has('X-Skip-Http-Retry')) {\n return false;\n }\n\n const status = error.status;\n const isTransientStatus = status === 0 || status === 502 || status === 503 || status === 504;\n\n if (!isTransientStatus) {\n return false;\n }\n\n return isSafeToRetryHttpRequest(request);\n}\n\n//#endregion\n","//#region ----- Imports -----\n\nimport {\n HttpErrorResponse,\n HttpEvent,\n HttpHandler,\n HttpInterceptor,\n HttpRequest,\n} from '@angular/common/http';\nimport { Injectable } from '@angular/core';\nimport { Observable, throwError, timer } from 'rxjs';\nimport { catchError, switchMap } from 'rxjs/operators';\nimport { apiHttpRetryDelayMs, isRetriableHttpError } from './api-http-retry.util';\n\n//#endregion\n\n//#region ----- Interceptor -----\n\n/**\n * Retries transient connectivity failures (status 0, 502, 503, 504) for idempotent\n * platform API calls: GET/HEAD and read-only POST runtime queries.\n */\n@Injectable()\nexport class AXCApiHttpRetryInterceptor implements HttpInterceptor {\n intercept(request: HttpRequest<unknown>, next: HttpHandler): Observable<HttpEvent<unknown>> {\n return this.sendWithRetry(request, next, 0);\n }\n\n private sendWithRetry(\n request: HttpRequest<unknown>,\n next: HttpHandler,\n attempt: number,\n ): Observable<HttpEvent<unknown>> {\n return next.handle(request).pipe(\n catchError((error: HttpErrorResponse) => {\n if (!isRetriableHttpError(error, request, attempt)) {\n return throwError(() => error);\n }\n\n const nextAttempt = attempt + 1;\n return timer(apiHttpRetryDelayMs(nextAttempt)).pipe(\n switchMap(() => this.sendWithRetry(request, next, nextAttempt)),\n );\n }),\n );\n }\n}\n\n//#endregion\n","//#region ----- Imports -----\n\nimport { HTTP_INTERCEPTORS } from '@angular/common/http';\nimport { NgModule } from '@angular/core';\nimport { AXCApiHttpRetryInterceptor } from './api-http-retry.interceptor';\n\n//#endregion\n\n//#region ----- Module -----\n\n@NgModule({\n providers: [\n {\n provide: HTTP_INTERCEPTORS,\n useClass: AXCApiHttpRetryInterceptor,\n multi: true,\n },\n ],\n})\nexport class AXCApiHttpModule {}\n\n//#endregion\n","import { AXPRequestError } from '@acorex-platform/framework-shared/core';\nimport { toAXPRequestError } from '@acorex-platform/framework-client/common';\n\n//#region ---- HTTP → AXPRequestError ----\n\n/**\n * Normalize Angular HTTP failures into transport-agnostic {@link AXPRequestError}.\n * Call only from connectivity adapters (REST today; gRPC/GraphQL later).\n */\nexport function mapHttpErrorResponseToAXPRequestError(error: unknown): AXPRequestError {\n return toAXPRequestError(error);\n}\n\n//#endregion\n","//#region ----- Stable Request Serialization -----\n\n/**\n * Serializes JSON-like query input with object keys sorted recursively.\n * Equivalent inputs produce the same cache key regardless of property insertion order.\n */\nexport function stableSerializeRuntimeQueryInput(value: unknown): string {\n return JSON.stringify(normalizeValue(value, new WeakSet<object>())) ?? 'undefined';\n}\n\nfunction normalizeValue(value: unknown, ancestors: WeakSet<object>): unknown {\n if (value === null || typeof value !== 'object') {\n return value;\n }\n\n if (value instanceof Date) {\n return value.toJSON();\n }\n\n if (ancestors.has(value)) {\n throw new TypeError('Runtime query input must not contain circular references');\n }\n\n ancestors.add(value);\n try {\n if (Array.isArray(value)) {\n return value.map((item) => normalizeValue(item, ancestors));\n }\n\n const record = value as Record<string, unknown>;\n return Object.keys(record)\n .sort()\n .reduce<Record<string, unknown>>((normalized, key) => {\n const item = record[key];\n if (item !== undefined) {\n normalized[key] = normalizeValue(item, ancestors);\n }\n return normalized;\n }, {});\n } finally {\n ancestors.delete(value);\n }\n}\n\n//#endregion\n","//#region ----- Imports -----\n\nimport {\n AXPCommonSettings,\n AXPSettingsService,\n AXP_RUNTIME_QUERY_CACHE_DEFAULTS,\n coerceAXPSettingRawValueByKind,\n} from '@acorex-platform/framework-client/common';\nimport { AXPDebugService } from '@acorex-platform/framework-client/core';\nimport type { AXPQueryExecuteOptions } from '@acorex-platform/framework-shared/runtime';\nimport { inject, Injectable } from '@angular/core';\n\nimport type { AXCRuntimeQueryResult } from './runtime-api.types';\nimport { stableSerializeRuntimeQueryInput } from './runtime-query-cache-key.util';\n\n//#endregion\n\n//#region ----- Types & Constants -----\n\ninterface AXCRuntimeQueryCacheEntry {\n expiresAt: number;\n originStack?: string;\n result: AXCRuntimeQueryResult;\n storedAt: number;\n}\n\ninterface AXCRuntimeQueryInFlightEntry {\n originStack?: string;\n promise: Promise<AXCRuntimeQueryResult>;\n startedAt: number;\n}\n\ntype AXCRuntimeQueryDuplicateType = 'in-flight-coalesced' | 'ttl-cache-hit';\n\ninterface AXCRuntimeQueryDuplicateStat {\n callerLabel?: string;\n coalescedCount: number;\n duplicateStacks: string[];\n firstAt: number;\n input: unknown;\n lastAt: number;\n maxOriginAgeMs: number;\n name: string;\n originStack?: string;\n reusedCount: number;\n target: string;\n}\n\nconst MAX_CACHE_ENTRIES = 250;\nconst DEBUG_NAMESPACE = 'runtime-query-cache';\n\n/** Duplicates are collected for this window, then reported as one line per request. */\nconst DUPLICATE_REPORT_WINDOW_MS = 1_000;\nconst MAX_TRACKED_DUPLICATE_REQUESTS = 50;\nconst MAX_STACK_FRAMES = 8;\nconst MAX_DUPLICATE_STACK_SAMPLES = 3;\nconst MAX_TARGET_LENGTH = 120;\nconst MAX_FILTER_FIELDS = 3;\nconst MAX_FILTER_DEPTH = 3;\n\n/** Gateway frames that hide the real caller in captured stacks. */\nconst GATEWAY_STACK_FRAME_PATTERN =\n /AXCRuntimeQueryCacheService|AXCRuntimeApiService\\.(executeQuery|sendQuery)|runtime-query-cache/;\n\n/** Async/zone plumbing frames that carry no call-site information. */\nconst PLUMBING_STACK_FRAME_PATTERN =\n /zone\\.js|Zone[A-Za-z]*\\.|ZoneAwarePromise|asyncGeneratorStep|_?asyncToGenerator|__awaiter|Generator\\.|Object\\.next|drainMicroTaskQueue|processTicksAndRejections/;\n\n//#endregion\n\n//#region ----- Runtime Query Cache -----\n\n/**\n * Coalesces identical in-flight runtime queries and optionally reuses successful\n * responses for a short platform-configured TTL.\n */\n@Injectable()\nexport class AXCRuntimeQueryCacheService {\n //#region ----- Services & Dependencies -----\n\n private readonly settings = inject(AXPSettingsService);\n private readonly debug = inject(AXPDebugService);\n\n //#endregion\n\n //#region ----- State -----\n\n private readonly inFlight = new Map<string, AXCRuntimeQueryInFlightEntry>();\n private readonly responses = new Map<string, AXCRuntimeQueryCacheEntry>();\n private readonly duplicates = new Map<string, AXCRuntimeQueryDuplicateStat>();\n private duplicateReportHandle: ReturnType<typeof setTimeout> | undefined;\n private generation = 0;\n\n //#endregion\n\n constructor() {\n this.settings.onLoaded.subscribe(() => this.clear());\n this.settings.onChanged.subscribe((event) => {\n if (\n event.keys.includes(AXPCommonSettings.RuntimeQueryCacheEnabled) ||\n event.keys.includes(AXPCommonSettings.RuntimeQueryCacheTtlMs)\n ) {\n this.clear();\n }\n });\n }\n\n //#region ----- Public API -----\n\n execute(\n name: string,\n input: unknown,\n request: () => Promise<AXCRuntimeQueryResult>,\n options?: AXPQueryExecuteOptions,\n ): Promise<AXCRuntimeQueryResult> {\n if (!this.isEnabled()) {\n return request();\n }\n\n const optionsKey =\n options != null && Object.keys(options).length > 0\n ? stableSerializeRuntimeQueryInput(options)\n : '';\n const key = `${name}|${stableSerializeRuntimeQueryInput(input ?? {})}|${optionsKey}`;\n const now = Date.now();\n const cached = this.responses.get(key);\n if (cached) {\n if (cached.expiresAt > now) {\n this.recordDuplicate({\n duplicateStack: this.captureCallerStack(),\n input,\n key,\n name,\n originAgeMs: now - cached.storedAt,\n originStack: cached.originStack,\n type: 'ttl-cache-hit',\n });\n return Promise.resolve(cached.result);\n }\n this.responses.delete(key);\n }\n\n const existing = this.inFlight.get(key);\n if (existing) {\n this.recordDuplicate({\n duplicateStack: this.captureCallerStack(),\n input,\n key,\n name,\n originAgeMs: now - existing.startedAt,\n originStack: existing.originStack,\n type: 'in-flight-coalesced',\n });\n return existing.promise;\n }\n\n const generation = this.generation;\n const ttlMs = this.getTtlMs();\n const originStack = this.captureCallerStack();\n const task = request()\n .then((result) => {\n if (\n result.success &&\n ttlMs > 0 &&\n generation === this.generation &&\n this.isEnabled()\n ) {\n this.storeResponse(key, result, ttlMs, originStack);\n }\n return result;\n })\n .finally(() => {\n if (this.inFlight.get(key)?.promise === task) {\n this.inFlight.delete(key);\n }\n });\n\n this.inFlight.set(key, {\n originStack,\n promise: task,\n startedAt: now,\n });\n return task;\n }\n\n /**\n * Invalidates completed responses and prevents older in-flight queries from\n * repopulating the cache after a command or configuration change.\n */\n clear(): void {\n this.generation += 1;\n this.responses.clear();\n this.inFlight.clear();\n this.reportDuplicates();\n }\n\n //#endregion\n\n //#region ----- Settings -----\n\n private isEnabled(): boolean {\n const raw = this.settings.peekCached(AXPCommonSettings.RuntimeQueryCacheEnabled);\n return raw === undefined\n ? AXP_RUNTIME_QUERY_CACHE_DEFAULTS.enabled\n : (coerceAXPSettingRawValueByKind(raw, 'boolean') as boolean);\n }\n\n private getTtlMs(): number {\n const raw = this.settings.peekCached(AXPCommonSettings.RuntimeQueryCacheTtlMs);\n const value =\n raw === undefined\n ? AXP_RUNTIME_QUERY_CACHE_DEFAULTS.ttlMs\n : (coerceAXPSettingRawValueByKind(raw, 'number') as number);\n return Number.isFinite(value) ? Math.max(0, value) : AXP_RUNTIME_QUERY_CACHE_DEFAULTS.ttlMs;\n }\n\n //#endregion\n\n //#region ----- Cache Maintenance -----\n\n private storeResponse(\n key: string,\n result: AXCRuntimeQueryResult,\n ttlMs: number,\n originStack?: string,\n ): void {\n this.pruneExpired();\n if (this.responses.size >= MAX_CACHE_ENTRIES) {\n const oldestKey = this.responses.keys().next().value as string | undefined;\n if (oldestKey) {\n this.responses.delete(oldestKey);\n }\n }\n const storedAt = Date.now();\n this.responses.set(key, {\n result,\n expiresAt: storedAt + ttlMs,\n originStack,\n storedAt,\n });\n }\n\n private pruneExpired(): void {\n const now = Date.now();\n for (const [key, entry] of this.responses) {\n if (entry.expiresAt <= now) {\n this.responses.delete(key);\n }\n }\n }\n\n //#endregion\n\n //#region ----- Debug Diagnostics -----\n\n private captureCallerStack(): string | undefined {\n if (!this.debug.isDebugMode()) {\n return undefined;\n }\n\n const frames = (new Error().stack?.split('\\n') ?? [])\n .map((frame) => frame.trim())\n .filter(\n (frame) =>\n frame.length > 0 && frame !== 'Error' && !GATEWAY_STACK_FRAME_PATTERN.test(frame),\n );\n const callSites = frames.filter((frame) => !PLUMBING_STACK_FRAME_PATTERN.test(frame));\n const selected = (callSites.length > 0 ? callSites : frames).slice(0, MAX_STACK_FRAMES);\n\n return selected.length > 0 ? selected.join('\\n') : undefined;\n }\n\n private recordDuplicate(details: {\n duplicateStack?: string;\n input: unknown;\n key: string;\n name: string;\n originAgeMs: number;\n originStack?: string;\n type: AXCRuntimeQueryDuplicateType;\n }): void {\n if (!this.debug.isDebugMode()) {\n return;\n }\n\n const now = Date.now();\n let stat = this.duplicates.get(details.key);\n if (!stat) {\n stat = {\n callerLabel: this.describeCaller(details.duplicateStack ?? details.originStack),\n coalescedCount: 0,\n duplicateStacks: [],\n firstAt: now,\n input: details.input,\n lastAt: now,\n maxOriginAgeMs: 0,\n name: details.name,\n originStack: details.originStack,\n reusedCount: 0,\n target: this.describeTarget(details.input),\n };\n this.duplicates.set(details.key, stat);\n }\n\n stat.lastAt = now;\n stat.maxOriginAgeMs = Math.max(stat.maxOriginAgeMs, Math.round(details.originAgeMs));\n if (details.type === 'in-flight-coalesced') {\n stat.coalescedCount += 1;\n } else {\n stat.reusedCount += 1;\n }\n\n if (\n details.duplicateStack &&\n stat.duplicateStacks.length < MAX_DUPLICATE_STACK_SAMPLES &&\n !stat.duplicateStacks.includes(details.duplicateStack)\n ) {\n stat.duplicateStacks.push(details.duplicateStack);\n }\n\n if (this.duplicates.size >= MAX_TRACKED_DUPLICATE_REQUESTS) {\n this.reportDuplicates();\n return;\n }\n\n this.duplicateReportHandle ??= setTimeout(\n () => this.reportDuplicates(),\n DUPLICATE_REPORT_WINDOW_MS,\n );\n }\n\n /** Emits one warning per duplicated request, with every key value inline in the message. */\n private reportDuplicates(): void {\n if (this.duplicateReportHandle !== undefined) {\n clearTimeout(this.duplicateReportHandle);\n this.duplicateReportHandle = undefined;\n }\n\n const stats = [...this.duplicates.values()].sort(\n (left, right) =>\n right.coalescedCount + right.reusedCount - (left.coalescedCount + left.reusedCount),\n );\n this.duplicates.clear();\n if (stats.length === 0) {\n return;\n }\n\n const totalCalls = stats.reduce(\n (total, stat) => total + stat.coalescedCount + stat.reusedCount,\n 0,\n );\n\n if (stats.length > 1) {\n this.debug.warn(\n DEBUG_NAMESPACE,\n 'duplicates',\n `${totalCalls} duplicate calls suppressed · ${stats.length} distinct requests · last ${DUPLICATE_REPORT_WINDOW_MS}ms`,\n );\n }\n\n for (const stat of stats) {\n const count = stat.coalescedCount + stat.reusedCount;\n const segments = [\n `×${count} duplicate ${count === 1 ? 'call' : 'calls'}`,\n stat.target,\n `coalesced ${stat.coalescedCount} / from memory ${stat.reusedCount}`,\n `burst ${Math.max(0, stat.lastAt - stat.firstAt)}ms`,\n `origin age ≤${stat.maxOriginAgeMs}ms`,\n ];\n if (stat.callerLabel) {\n segments.push(`caller ${stat.callerLabel}`);\n }\n\n this.debug.warn(DEBUG_NAMESPACE, stat.name, segments.join(' · '), () => ({\n duplicateStacks: stat.duplicateStacks,\n input: stat.input,\n originalCallStack: stat.originStack,\n }));\n }\n }\n\n /** First meaningful frame, e.g. `AXPLookupEditorWidgetColumn.loadTitle`. */\n private describeCaller(stack?: string): string | undefined {\n const frame = stack?.split('\\n')[0];\n if (!frame) {\n return undefined;\n }\n\n return frame.match(/^at\\s+([\\w$.<>]+)/)?.[1] ?? frame.match(/^([\\w$.<>]+)@/)?.[1];\n }\n\n private describeTarget(input: unknown): string {\n if (input === undefined || input === null) {\n return 'no input';\n }\n\n if (typeof input !== 'object') {\n return String(input);\n }\n\n const record = input as Record<string, unknown>;\n const pick = (...keys: string[]): string | undefined =>\n keys.map((key) => record[key]).find((value): value is string => typeof value === 'string');\n\n const entity = pick('entity', 'entityName', 'entityType');\n const id = pick('id', 'entityId', 'key');\n const view = pick('view', 'viewName', 'queryName');\n const filterFields = this.collectFilterFields(record['filter']);\n const segments = [\n entity,\n id ? `#${id.slice(0, 8)}` : undefined,\n view ? `view=${view}` : undefined,\n filterFields.length > 0 ? `filter=${filterFields.join(',')}` : undefined,\n typeof record['take'] === 'number' ? `take=${record['take']}` : undefined,\n ].filter((segment): segment is string => !!segment);\n if (segments.length > 0) {\n return segments.join(' ');\n }\n\n const serialized = stableSerializeRuntimeQueryInput(input);\n return serialized.length > MAX_TARGET_LENGTH\n ? `${serialized.slice(0, MAX_TARGET_LENGTH - 1)}…`\n : serialized;\n }\n\n private collectFilterFields(filter: unknown, depth = 0): string[] {\n if (depth > MAX_FILTER_DEPTH || filter == null || typeof filter !== 'object') {\n return [];\n }\n\n const record = filter as Record<string, unknown>;\n if (typeof record['field'] === 'string') {\n return [record['field']];\n }\n\n const nested = Array.isArray(record['filters']) ? (record['filters'] as unknown[]) : [];\n const fields = nested.flatMap((child) => this.collectFilterFields(child, depth + 1));\n return [...new Set(fields)].slice(0, MAX_FILTER_FIELDS);\n }\n\n //#endregion\n}\n\n//#endregion\n","import { AXP_ROOT_CONFIG_TOKEN } from '@acorex-platform/framework-client/common';\nimport {\n buildRuntimeInvokeQueryString,\n type AXPBulkCommandProgress,\n type AXPCommandExecuteOptions,\n type AXPQueryExecuteOptions,\n} from '@acorex-platform/framework-shared/runtime';\nimport { HttpClient, HttpErrorResponse, HttpHeaders } from '@angular/common/http';\nimport { inject, Injectable } from '@angular/core';\nimport { catchError, firstValueFrom, of, throwError } from 'rxjs';\nimport { skipAuthRetryHeadersForRuntime } from '../http/api-http-auth.util';\nimport { mapHttpErrorResponseToAXPRequestError } from '../http/map-http-error-to-request-error.util';\nimport { AXCRuntimeQueryCacheService } from './runtime-query-cache.service';\nimport type {\n AXCRuntimeBulkCommandRequest,\n AXCRuntimeBulkCommandResult,\n AXCRuntimeCommandResult,\n AXCRuntimeQueryResult,\n} from './runtime-api.types';\n\n//#region ---- Runtime API service ----\n\n/**\n * HTTP client for platform runtime command/query endpoints.\n * Transport failures are normalized to {@link AXPRequestError}.\n */\n@Injectable()\nexport class AXCRuntimeApiService {\n private readonly http = inject(HttpClient);\n private readonly configs = inject(AXP_ROOT_CONFIG_TOKEN);\n private readonly queryCache = inject(AXCRuntimeQueryCacheService);\n\n private runtimeUrl(kind: 'commands' | 'commands/bulk' | 'queries'): string {\n return `${this.configs.baseUrl}/v1/runtime/${kind}`;\n }\n\n /**\n * Single command/query invoke — key (and entity for `Entity:*:Default`) in the\n * query string so DevTools shows the operation without `%3A` noise.\n */\n private runtimeInvokeUrl(kind: 'commands' | 'queries', name: string, input?: unknown): string {\n const query = buildRuntimeInvokeQueryString(name, input);\n return `${this.configs.baseUrl}/v1/runtime/${kind}/invoke?${query}`;\n }\n\n executeCommand(\n name: string,\n input?: unknown,\n options?: AXPCommandExecuteOptions,\n ): Promise<AXCRuntimeCommandResult> {\n const skipAuthRetry = skipAuthRetryHeadersForRuntime(name, 'command');\n const headers = skipAuthRetry ? new HttpHeaders(skipAuthRetry) : undefined;\n const hasOptions = options != null && Object.keys(options).length > 0;\n\n const request$ = hasOptions\n ? this.http.post<AXCRuntimeCommandResult>(\n this.runtimeUrl('commands'),\n { name, input: input ?? {}, options },\n { withCredentials: true, ...(headers ? { headers } : undefined) },\n )\n : this.http.post<AXCRuntimeCommandResult>(\n this.runtimeInvokeUrl('commands', name, input),\n input ?? {},\n { withCredentials: true, ...(headers ? { headers } : undefined) },\n );\n\n return firstValueFrom(\n request$.pipe(catchError((error) => throwError(() => mapHttpErrorResponseToAXPRequestError(error)))),\n ).then((result) => {\n if (result.success) {\n this.queryCache.clear();\n }\n return result;\n });\n }\n\n executeBulkCommand(request: AXCRuntimeBulkCommandRequest): Promise<AXCRuntimeBulkCommandResult> {\n return firstValueFrom(\n this.http\n .post<AXCRuntimeBulkCommandResult>(this.runtimeUrl('commands/bulk'), request, {\n withCredentials: true,\n })\n .pipe(catchError((error) => throwError(() => mapHttpErrorResponseToAXPRequestError(error)))),\n ).then((result) => {\n if (result.success) {\n this.queryCache.clear();\n }\n return result;\n });\n }\n\n getBulkProgress(executionId: string): Promise<AXPBulkCommandProgress | null> {\n const id = executionId.trim();\n if (!id) {\n return Promise.resolve(null);\n }\n\n return firstValueFrom(\n this.http\n .get<AXPBulkCommandProgress>(`${this.runtimeUrl('commands/bulk')}/${encodeURIComponent(id)}/progress`, {\n withCredentials: true,\n })\n .pipe(\n catchError((error: unknown) => {\n if (error instanceof HttpErrorResponse && error.status === 404) {\n return of(null);\n }\n return throwError(() => mapHttpErrorResponseToAXPRequestError(error));\n }),\n ),\n );\n }\n\n executeQuery(\n name: string,\n input?: unknown,\n options?: AXPQueryExecuteOptions,\n ): Promise<AXCRuntimeQueryResult> {\n return this.queryCache.execute(name, input, () => this.sendQuery(name, input, options), options);\n }\n\n private sendQuery(\n name: string,\n input?: unknown,\n options?: AXPQueryExecuteOptions,\n ): Promise<AXCRuntimeQueryResult> {\n const skipAuthRetry = skipAuthRetryHeadersForRuntime(name, 'query');\n const headers = skipAuthRetry ? new HttpHeaders(skipAuthRetry) : undefined;\n const hasOptions = options != null && Object.keys(options).length > 0;\n\n // Named body carries `options`; invoke keeps body = input only for DevTools-friendly URLs.\n const request$ = hasOptions\n ? this.http.post<AXCRuntimeQueryResult>(\n this.runtimeUrl('queries'),\n { name, input: input ?? {}, options },\n { withCredentials: true, ...(headers ? { headers } : undefined) },\n )\n : this.http.post<AXCRuntimeQueryResult>(\n this.runtimeInvokeUrl('queries', name, input),\n input ?? {},\n { withCredentials: true, ...(headers ? { headers } : undefined) },\n );\n\n return firstValueFrom(\n request$.pipe(catchError((error) => throwError(() => mapHttpErrorResponseToAXPRequestError(error)))),\n );\n }\n}\n\n//#endregion\n","import {\n AXP_HOOK_PROVIDER,\n type AXPHookProvider,\n} from '@acorex-platform/framework-client/core';\nimport {\n AXPRuntimeRemoteHookKeys,\n type AXPRuntimeCommandBulkProgressHookPayload,\n type AXPRuntimeCommandExecuteBulkHookPayload,\n type AXPRuntimeCommandExecuteHookPayload,\n type AXPRuntimeQueryExecuteHookPayload,\n} from '@acorex-platform/framework-client/runtime';\nimport { AXPRequestError } from '@acorex-platform/framework-shared/core';\nimport { inject, type Provider } from '@angular/core';\nimport { AXCRuntimeApiService } from './runtime-api.service';\nimport { AXCRuntimeQueryCacheService } from './runtime-query-cache.service';\nimport type { AXCRuntimeQueryResult } from './runtime-api.types';\n\n//#region ---- Unwrap helpers ----\n\n/**\n * Map server runtime query envelope to the value local {@code query.fetch} would return.\n *\n * - success: false → throw using `message`\n * - kind: 'value' | 'object' | 'collection' → `data`\n */\nexport function unwrapRuntimeQueryResult(result: AXCRuntimeQueryResult): unknown {\n if (!result.success) {\n const message = result.message;\n const text =\n typeof message?.text === 'string'\n ? message.text\n : message?.code || 'Query execution failed';\n throw new AXPRequestError(text, {\n code: message?.code,\n details: message?.details,\n });\n }\n\n if (result.kind === 'collection' || result.kind === 'object' || result.kind === 'value') {\n return result.data;\n }\n\n return result;\n}\n\n//#endregion\n\n//#region ---- Hook providers ----\n\nexport const AXCRuntimeCommandExecuteHookProvider: AXPHookProvider<\n AXPRuntimeCommandExecuteHookPayload,\n AXPRuntimeCommandExecuteHookPayload\n> = {\n key: AXPRuntimeRemoteHookKeys.CommandExecute,\n async execute(payload) {\n if (payload.handled) {\n return payload;\n }\n const api = inject(AXCRuntimeApiService);\n const result = await api.executeCommand(payload.name, payload.input, payload.options);\n return { ...payload, handled: true, result };\n },\n};\n\nexport const AXCRuntimeCommandExecuteBulkHookProvider: AXPHookProvider<\n AXPRuntimeCommandExecuteBulkHookPayload,\n AXPRuntimeCommandExecuteBulkHookPayload\n> = {\n key: AXPRuntimeRemoteHookKeys.CommandExecuteBulk,\n async execute(payload) {\n if (payload.handled) {\n return payload;\n }\n const api = inject(AXCRuntimeApiService);\n const result = await api.executeBulkCommand(payload.request);\n return { ...payload, handled: true, result };\n },\n};\n\nexport const AXCRuntimeCommandBulkProgressHookProvider: AXPHookProvider<\n AXPRuntimeCommandBulkProgressHookPayload,\n AXPRuntimeCommandBulkProgressHookPayload\n> = {\n key: AXPRuntimeRemoteHookKeys.CommandBulkProgress,\n async execute(payload) {\n if (payload.handled) {\n return payload;\n }\n const api = inject(AXCRuntimeApiService);\n const progress = await api.getBulkProgress(payload.executionId);\n return { ...payload, handled: true, progress };\n },\n};\n\nexport const AXCRuntimeQueryExecuteHookProvider: AXPHookProvider<\n AXPRuntimeQueryExecuteHookPayload,\n AXPRuntimeQueryExecuteHookPayload\n> = {\n key: AXPRuntimeRemoteHookKeys.QueryExecute,\n async execute(payload) {\n if (payload.handled) {\n return payload;\n }\n const api = inject(AXCRuntimeApiService);\n const response = await api.executeQuery(payload.name, payload.input, payload.options);\n // Keep the wire envelope — same contract as local AXPQuery.fetch / command execute.\n return {\n ...payload,\n handled: true,\n result: response,\n };\n },\n};\n\nexport const AXC_RUNTIME_REMOTE_HOOK_PROVIDERS: Provider[] = [\n AXCRuntimeQueryCacheService,\n AXCRuntimeApiService,\n {\n provide: AXP_HOOK_PROVIDER,\n useValue: AXCRuntimeCommandExecuteHookProvider,\n multi: true,\n },\n {\n provide: AXP_HOOK_PROVIDER,\n useValue: AXCRuntimeCommandExecuteBulkHookProvider,\n multi: true,\n },\n {\n provide: AXP_HOOK_PROVIDER,\n useValue: AXCRuntimeCommandBulkProgressHookProvider,\n multi: true,\n },\n {\n provide: AXP_HOOK_PROVIDER,\n useValue: AXCRuntimeQueryExecuteHookProvider,\n multi: true,\n },\n];\n\n//#endregion\n","//#region ----- Imports -----\n\nimport type { Provider } from '@angular/core';\nimport { AXC_RUNTIME_REMOTE_HOOK_PROVIDERS } from './runtime-remote.hooks';\n\n//#endregion\n\n//#region ----- Provider factory -----\n\n/**\n * Nest / demo-api CQRS transport: `runtime.query.execute`, `runtime.command.execute`,\n * and `runtime.command.execute-bulk` against `{AXP_ROOT_CONFIG_TOKEN.baseUrl}/v1/runtime/*`.\n *\n * Official hosts that import `AXMSettingsManagementModule` get this automatically.\n * Custom API stacks should use `provideExternalRuntimeQueryTransport` /\n * `provideExternalRuntimeCommandTransport` / `provideExternalRuntimeBulkTransport` instead.\n */\nexport function provideRuntimeRemoteTransport(): Provider[] {\n return [...AXC_RUNTIME_REMOTE_HOOK_PROVIDERS];\n}\n\n//#endregion\n","//#region ----- Imports -----\n\nimport { NgModule } from '@angular/core';\nimport { provideRuntimeRemoteTransport } from './provide-runtime-remote-transport';\n\n//#endregion\n\n//#region ----- Module -----\n\n/**\n * Registers the Nest runtime CQRS hooks used when a query/command is not in\n * {@code provideQuerySetups} / {@code provideCommandSetups}.\n *\n * Requires {@link AXP_ROOT_CONFIG_TOKEN} (`baseUrl`, typically `/api`) and Angular\n * {@code HttpClient}.\n */\n@NgModule({\n providers: provideRuntimeRemoteTransport(),\n})\nexport class AXCRuntimeRemoteApiModule {}\n\n//#endregion\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["catchError"],"mappings":"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"}
package/package.json CHANGED
@@ -1,10 +1,10 @@
1
1
  {
2
2
  "name": "@acorex-platform/client-connectivity-api",
3
- "version": "0.0.38",
3
+ "version": "0.0.48",
4
4
  "sideEffects": false,
5
5
  "peerDependencies": {
6
- "@acorex-platform/framework-client": "0.0.38",
7
- "@acorex-platform/framework-shared": "0.0.38",
6
+ "@acorex-platform/framework-client": "0.0.48",
7
+ "@acorex-platform/framework-shared": "0.0.48",
8
8
  "@angular/common": "^21.0.0 || ^22.0.0",
9
9
  "@angular/core": "^21.0.0 || ^22.0.0",
10
10
  "rxjs": "^7.8.0"
@@ -4,7 +4,7 @@ import * as i0 from '@angular/core';
4
4
  import { Provider } from '@angular/core';
5
5
  import { AXPRequestError, AXPRuntimeCommandResult, AXPRuntimeQueryResult } from '@acorex-platform/framework-shared/core';
6
6
  import { AXPBulkCommandRequest, AXPBulkCommandResultData, AXPCommandExecuteOptions, AXPBulkCommandProgress, AXPQueryExecuteOptions } from '@acorex-platform/framework-shared/runtime';
7
- import { AXPDistributedEventListenerProvider } from '@acorex-platform/framework-client/core';
7
+ import { AXPHookProvider } from '@acorex-platform/framework-client/core';
8
8
  import { AXPRuntimeCommandExecuteBulkHookPayload, AXPRuntimeCommandExecuteHookPayload, AXPRuntimeQueryExecuteHookPayload } from '@acorex-platform/framework-client/runtime';
9
9
 
10
10
  /**
@@ -143,9 +143,9 @@ declare class AXCRuntimeRemoteApiModule {
143
143
  * - kind: 'value' | 'object' | 'collection' → `data`
144
144
  */
145
145
  declare function unwrapRuntimeQueryResult(result: AXCRuntimeQueryResult): unknown;
146
- declare const AXCRuntimeCommandExecuteHookProvider: AXPDistributedEventListenerProvider<AXPRuntimeCommandExecuteHookPayload, AXPRuntimeCommandExecuteHookPayload>;
147
- declare const AXCRuntimeCommandExecuteBulkHookProvider: AXPDistributedEventListenerProvider<AXPRuntimeCommandExecuteBulkHookPayload, AXPRuntimeCommandExecuteBulkHookPayload>;
148
- declare const AXCRuntimeQueryExecuteHookProvider: AXPDistributedEventListenerProvider<AXPRuntimeQueryExecuteHookPayload, AXPRuntimeQueryExecuteHookPayload>;
146
+ declare const AXCRuntimeCommandExecuteHookProvider: AXPHookProvider<AXPRuntimeCommandExecuteHookPayload, AXPRuntimeCommandExecuteHookPayload>;
147
+ declare const AXCRuntimeCommandExecuteBulkHookProvider: AXPHookProvider<AXPRuntimeCommandExecuteBulkHookPayload, AXPRuntimeCommandExecuteBulkHookPayload>;
148
+ declare const AXCRuntimeQueryExecuteHookProvider: AXPHookProvider<AXPRuntimeQueryExecuteHookPayload, AXPRuntimeQueryExecuteHookPayload>;
149
149
  declare const AXC_RUNTIME_REMOTE_HOOK_PROVIDERS: Provider[];
150
150
 
151
151
  export { API_HTTP_RETRY_BASE_MS, API_HTTP_RETRY_MAX_ATTEMPTS, API_SKIP_AUTH_RETRY_HEADER, AXCApiHttpModule, AXCApiHttpRetryInterceptor, AXCRuntimeApiService, AXCRuntimeCommandExecuteBulkHookProvider, AXCRuntimeCommandExecuteHookProvider, AXCRuntimeQueryCacheService, AXCRuntimeQueryExecuteHookProvider, AXCRuntimeRemoteApiModule, AXC_RUNTIME_REMOTE_HOOK_PROVIDERS, apiHttpRetryDelayMs, isAuthHttpRequest, isAuthRuntimeCommandKey, isAuthRuntimeQueryKey, isRetriableHttpError, isSafeToRetryHttpRequest, mapHttpErrorResponseToAXPRequestError, provideRuntimeRemoteTransport, skipAuthRetryHeadersForRuntime, unwrapRuntimeQueryResult };