@hyperttp/core 1.5.5 → 2.0.0

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.
Files changed (85) hide show
  1. package/Core/HyperCore.d.ts +176 -141
  2. package/Core/HyperCore.d.ts.map +1 -1
  3. package/Core/HyperCore.js +1 -1
  4. package/Core/HyperCore.js.map +3 -3
  5. package/README.md +260 -316
  6. package/defaultConfig.d.ts +9 -4
  7. package/defaultConfig.d.ts.map +1 -1
  8. package/defaultConfig.js +1 -1
  9. package/defaultConfig.js.map +2 -2
  10. package/index.d.ts +3 -0
  11. package/index.d.ts.map +1 -1
  12. package/index.js +1 -1
  13. package/index.js.map +2 -2
  14. package/package.json +39 -33
  15. package/protocols/manager.d.ts +31 -0
  16. package/protocols/manager.d.ts.map +1 -0
  17. package/protocols/manager.js +2 -0
  18. package/protocols/manager.js.map +7 -0
  19. package/protocols/rest/index.d.ts +9 -0
  20. package/protocols/rest/index.d.ts.map +1 -0
  21. package/protocols/rest/index.js +2 -0
  22. package/protocols/rest/index.js.map +7 -0
  23. package/protocols/rest/receiver.d.ts +31 -0
  24. package/protocols/rest/receiver.d.ts.map +1 -0
  25. package/protocols/rest/receiver.js +2 -0
  26. package/protocols/rest/receiver.js.map +7 -0
  27. package/protocols/rest/sender.d.ts +19 -0
  28. package/protocols/rest/sender.d.ts.map +1 -0
  29. package/protocols/rest/sender.js +2 -0
  30. package/protocols/rest/sender.js.map +7 -0
  31. package/protocols/rest/type.d.ts +71 -0
  32. package/protocols/rest/type.d.ts.map +1 -0
  33. package/protocols/rest/type.js +2 -0
  34. package/protocols/rest/type.js.map +7 -0
  35. package/rest.d.ts +2 -0
  36. package/rest.d.ts.map +1 -0
  37. package/rest.js +2 -0
  38. package/rest.js.map +7 -0
  39. package/transports/fetch.d.ts +24 -0
  40. package/transports/fetch.d.ts.map +1 -0
  41. package/transports/fetch.js +2 -0
  42. package/transports/fetch.js.map +7 -0
  43. package/transports/manager.d.ts +17 -80
  44. package/transports/manager.d.ts.map +1 -1
  45. package/transports/manager.js +1 -6
  46. package/transports/manager.js.map +3 -3
  47. package/utils/abort.d.ts +23 -0
  48. package/utils/abort.d.ts.map +1 -0
  49. package/utils/abort.js +2 -0
  50. package/utils/abort.js.map +7 -0
  51. package/utils/errors.d.ts +12 -2
  52. package/utils/errors.d.ts.map +1 -1
  53. package/utils/errors.js +1 -1
  54. package/utils/errors.js.map +3 -3
  55. package/utils/merge.d.ts.map +1 -1
  56. package/utils/merge.js +1 -1
  57. package/utils/merge.js.map +2 -2
  58. package/Core/RequestBuilder.d.ts +0 -32
  59. package/Core/RequestBuilder.d.ts.map +0 -1
  60. package/Core/RequestBuilder.js +0 -2
  61. package/Core/RequestBuilder.js.map +0 -7
  62. package/transports/browser.d.ts +0 -37
  63. package/transports/browser.d.ts.map +0 -1
  64. package/transports/browser.js +0 -2
  65. package/transports/browser.js.map +0 -7
  66. package/transports/node.d.ts +0 -33
  67. package/transports/node.d.ts.map +0 -1
  68. package/transports/node.js +0 -2
  69. package/transports/node.js.map +0 -7
  70. package/utils/normalize.d.ts +0 -35
  71. package/utils/normalize.d.ts.map +0 -1
  72. package/utils/normalize.js +0 -2
  73. package/utils/normalize.js.map +0 -7
  74. package/utils/pipeline.d.ts +0 -63
  75. package/utils/pipeline.d.ts.map +0 -1
  76. package/utils/pipeline.js +0 -2
  77. package/utils/pipeline.js.map +0 -7
  78. package/utils/response.d.ts +0 -113
  79. package/utils/response.d.ts.map +0 -1
  80. package/utils/response.js +0 -2
  81. package/utils/response.js.map +0 -7
  82. package/utils/retryUtils.d.ts +0 -17
  83. package/utils/retryUtils.d.ts.map +0 -1
  84. package/utils/retryUtils.js +0 -2
  85. package/utils/retryUtils.js.map +0 -7
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../src/Core/HyperCore.ts"],
4
- "sourcesContent": ["import type {\n IHyperCore,\n HyperTransport,\n HttpClientOptions,\n PluginContext,\n HyperPlugin,\n InternalRequest,\n HttpResponse,\n HyperttpError,\n RequestInterface,\n StreamResponse,\n RequestBodyData,\n Method,\n ResponseType,\n TransportResponse,\n} from \"@hyperttp/types\";\nimport { defaultConfig } from \"../defaultConfig.js\";\nimport { mapResponseFast, mapStreamFast, recycleResponse } from \"../utils/response.js\";\nimport { TransportManager } from \"../transports/manager.js\";\nimport {\n createPipelines,\n executeErrorPipeline,\n executeRequestPipeline,\n executeResponsePipeline,\n executeResponseDataPipeline,\n insertHookSorted,\n} from \"../utils/pipeline.js\";\nimport { normalizeHeaders, normalizeBodyForTransport } from \"../utils/normalize.js\";\nimport { calcDelay, shouldRetry, drainBody } from \"../utils/retryUtils.js\";\nimport { TimeoutError } from \"../utils/errors.js\";\nimport { RequestBuilder } from \"./RequestBuilder.js\";\n\ntype TransportArgs = Parameters<HyperTransport[\"execute\"]>[0];\n\nconst sleep = (ms: number) => new Promise<void>((resolve) => setTimeout(resolve, ms));\nconst MAX_POOL_SIZE = 64;\n\n/**\n * @ru \u0412\u044B\u0441\u043E\u043A\u043E\u043F\u0440\u043E\u0438\u0437\u0432\u043E\u0434\u0438\u0442\u0435\u043B\u044C\u043D\u044B\u0439 \u0441\u0435\u043C\u0430\u0444\u043E\u0440 \u043D\u0430 \u0431\u0430\u0437\u0435 \u043A\u043E\u043B\u044C\u0446\u0435\u0432\u043E\u0433\u043E \u0431\u0443\u0444\u0435\u0440\u0430.\n * \u0413\u0430\u0440\u0430\u043D\u0442\u0438\u0440\u0443\u0435\u0442 \u043E\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0438\u0435 \u0430\u043B\u043B\u043E\u043A\u0430\u0446\u0438\u0439 \u043C\u0430\u0441\u0441\u0438\u0432\u043E\u0432 \u0432 steady-state \u0440\u0435\u0436\u0438\u043C\u0435.\n * @en High-performance semaphore backed by a ring buffer.\n * Guarantees zero array allocations in steady state.\n */\nclass Semaphore {\n private current = 0;\n private readonly max: number;\n\n private queue: Array<(() => void) | undefined>;\n private capacity: number;\n private head = 0;\n private tail = 0;\n private size = 0;\n\n constructor(max: number, initialCapacity = 1024) {\n this.max = max;\n this.capacity = initialCapacity;\n const arr: Array<(() => void) | undefined> = [];\n arr.length = initialCapacity;\n this.queue = arr;\n }\n\n /**\n * @ru \u041F\u044B\u0442\u0430\u0435\u0442\u0441\u044F \u0437\u0430\u0445\u0432\u0430\u0442\u0438\u0442\u044C \u0441\u043B\u043E\u0442 \u0431\u0435\u0437 \u043E\u0436\u0438\u0434\u0430\u043D\u0438\u044F.\n * @en Attempts to acquire a slot without waiting.\n * @returns true if the slot was acquired.\n */\n tryAcquire(): boolean {\n if (this.current < this.max) {\n this.current++;\n return true;\n }\n return false;\n }\n\n /**\n * @ru \u0417\u0430\u0445\u0432\u0430\u0442\u044B\u0432\u0430\u0435\u0442 \u0441\u043B\u043E\u0442, \u043E\u0436\u0438\u0434\u0430\u044F \u043F\u0440\u0438 \u043D\u0435\u043E\u0431\u0445\u043E\u0434\u0438\u043C\u043E\u0441\u0442\u0438.\n * @en Acquires a slot, waiting if necessary.\n * @returns Promise that resolves when the slot is acquired.\n */\n acquire(): Promise<void> {\n if (this.current < this.max) {\n this.current++;\n return Promise.resolve();\n }\n\n return new Promise<void>((resolve) => {\n if (this.size === this.capacity) {\n this.grow();\n }\n\n this.queue[this.tail] = resolve;\n this.tail = (this.tail + 1) % this.capacity;\n this.size++;\n });\n }\n\n /**\n * @ru \u041E\u0441\u0432\u043E\u0431\u043E\u0436\u0434\u0430\u0435\u0442 \u0441\u043B\u043E\u0442 \u0438 \u0437\u0430\u043F\u0443\u0441\u043A\u0430\u0435\u0442 \u043E\u0436\u0438\u0434\u0430\u044E\u0449\u0438\u0439 \u0438\u0437 \u043E\u0447\u0435\u0440\u0435\u0434\u0438.\n * @en Releases a slot and wakes the next waiter in the queue.\n */\n release(): void {\n if (this.size > 0) {\n const next = this.queue[this.head]!;\n this.queue[this.head] = undefined;\n this.head = (this.head + 1) % this.capacity;\n this.size--;\n next();\n } else {\n this.current--;\n }\n }\n\n /**\n * @ru \u0423\u0434\u0432\u0430\u0438\u0432\u0430\u0435\u0442 \u0435\u043C\u043A\u043E\u0441\u0442\u044C \u0431\u0443\u0444\u0435\u0440\u0430 \u043F\u0440\u0438 \u043F\u0435\u0440\u0435\u043F\u043E\u043B\u043D\u0435\u043D\u0438\u0438.\n * @en Doubles buffer capacity on overflow.\n */\n private grow(): void {\n const oldCapacity = this.capacity;\n const newCapacity = oldCapacity * 2;\n\n const newQueue: Array<(() => void) | undefined> = [];\n newQueue.length = newCapacity;\n\n for (let i = 0; i < this.size; i++) {\n newQueue[i] = this.queue[(this.head + i) % oldCapacity];\n }\n\n this.queue = newQueue;\n this.capacity = newCapacity;\n this.head = 0;\n this.tail = this.size;\n }\n}\n\n/**\n * @ru \u041E\u0441\u043D\u043E\u0432\u043D\u043E\u0439 \u043A\u043B\u0430\u0441\u0441 HTTP-\u043A\u043B\u0438\u0435\u043D\u0442\u0430 Hyperttp. \u0423\u043F\u0440\u0430\u0432\u043B\u044F\u0435\u0442 \u0442\u0440\u0430\u043D\u0441\u043F\u043E\u0440\u0442\u043E\u043C, \u043F\u043B\u0430\u0433\u0438\u043D\u0430\u043C\u0438, \u043F\u043E\u0432\u0442\u043E\u0440\u043D\u044B\u043C\u0438 \u043F\u043E\u043F\u044B\u0442\u043A\u0430\u043C\u0438 \u0438 \u043F\u0443\u043B\u043E\u043C \u0437\u0430\u043F\u0440\u043E\u0441\u043E\u0432.\n * @en Core Hyperttp HTTP client class. Manages transport, plugins, retries, and request pooling.\n */\nexport class HyperCore implements IHyperCore {\n public config: HttpClientOptions;\n private readonly transportManager: TransportManager;\n private readonly transportReady: Promise<HyperTransport>;\n private readonly defaultHeaders: Record<string, string | string[]>;\n private readonly pluginCtx: PluginContext;\n private readonly pipelines = createPipelines();\n private readonly requestBuilder = new RequestBuilder();\n private readonly requestPool: InternalRequest[] = [];\n\n private semaphore: Semaphore | null = null;\n private hasRequestPlugins = false;\n private hasResponseDataPlugins = false;\n private hasResponsePlugins = false;\n private hasErrorPlugins = false;\n\n private readonly _cachedMaxRetries: number;\n private readonly _cachedRetryOpts: {\n maxRetries?: number;\n [k: string]: unknown;\n };\n\n constructor(config: HttpClientOptions = defaultConfig, transport?: HyperTransport) {\n this.config = {\n ...defaultConfig,\n ...config,\n network: {\n ...defaultConfig.network,\n ...config.network,\n stealth:\n config.network?.stealth || defaultConfig.network?.stealth\n ? Object.assign({}, defaultConfig.network?.stealth, config.network?.stealth)\n : undefined,\n },\n };\n this.transportManager = new TransportManager(this.config, transport);\n this.transportReady = this.transportManager.getSync()\n ? Promise.resolve(this.transportManager.getSync()!)\n : this.transportManager.ensure();\n\n this.defaultHeaders = normalizeHeaders({\n Accept: \"application/json, text/plain, */*\",\n \"Accept-Encoding\": \"gzip, deflate, br\",\n \"User-Agent\": this.config.network?.userAgent ?? \"Hyperttp/2.0\",\n ...this.config.network?.headers,\n });\n\n const maxConcurrent = this.config.network?.maxConcurrent;\n this.semaphore =\n maxConcurrent != null && maxConcurrent > 0 ? new Semaphore(maxConcurrent) : null;\n\n this._cachedRetryOpts = this.config.retry ?? {};\n this._cachedMaxRetries = this._cachedRetryOpts.maxRetries ?? 0;\n\n this.pluginCtx = { config: this.config, core: this };\n }\n\n /**\n * @ru \u0412\u043E\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u0438\u043C\u044F \u0442\u0435\u043A\u0443\u0449\u0435\u0433\u043E \u0442\u0440\u0430\u043D\u0441\u043F\u043E\u0440\u0442\u0430.\n * @en Returns the name of the current transport.\n * @returns Transport constructor name.\n */\n public async getTransportName(): Promise<string> {\n const t = this.transportManager.transport ?? (await this.transportManager.get());\n return t.constructor.name;\n }\n\n /**\n * @ru \u041E\u0441\u043D\u043E\u0432\u043D\u043E\u0439 \u043C\u0435\u0442\u043E\u0434 \u043E\u0442\u043F\u0440\u0430\u0432\u043A\u0438 \u0437\u0430\u043F\u0440\u043E\u0441\u0430 \u0447\u0435\u0440\u0435\u0437 \u0442\u0440\u0430\u043D\u0441\u043F\u043E\u0440\u0442 \u0441 \u043F\u043E\u0434\u0434\u0435\u0440\u0436\u043A\u043E\u0439 \u043F\u043B\u0430\u0433\u0438\u043D\u043E\u0432 \u0438 \u043F\u043E\u0432\u0442\u043E\u0440\u043D\u044B\u0445 \u043F\u043E\u043F\u044B\u0442\u043E\u043A.\n * @en Core request dispatch method through transport with plugin and retry support.\n * @param req - The internal request to dispatch.\n * @returns Promise resolving to the HTTP response.\n */\n public async dispatch<T = unknown>(req: InternalRequest): Promise<HttpResponse<T>> {\n const retryOpts = this._cachedRetryOpts;\n const maxRetries = this._cachedMaxRetries;\n\n for (let attempt = 0; ; attempt++) {\n try {\n if (this.hasRequestPlugins) {\n const syncResult = executeRequestPipeline(this.pipelines.request, req, this.pluginCtx);\n const shortCircuit = syncResult instanceof Promise ? await syncResult : syncResult;\n\n if (shortCircuit != null) {\n this.recycleRequest(req);\n return shortCircuit as HttpResponse<T>;\n }\n }\n\n if (req.body != null) {\n req.body = normalizeBodyForTransport(req.body, req.headers);\n }\n\n const transport =\n this.transportManager.transport ??\n this.transportManager.getSync() ??\n (await this.transportReady);\n\n let acquired = false;\n if (this.semaphore) {\n acquired = this.semaphore.tryAcquire();\n if (!acquired) await this.semaphore.acquire();\n acquired = true;\n }\n let rawResponse: TransportResponse;\n const meta = req.meta as {\n responseType?: ResponseType;\n timings?: { networkMs?: number };\n };\n const shouldTrackTimings = !!meta.timings;\n const networkStart = shouldTrackTimings ? performance.now() : 0;\n try {\n rawResponse = await transport.execute(req as TransportArgs);\n } finally {\n if (acquired) this.semaphore?.release();\n }\n if (shouldTrackTimings) {\n meta.timings!.networkMs = performance.now() - networkStart;\n }\n\n if (attempt < maxRetries && shouldRetry(rawResponse.status, retryOpts)) {\n await drainBody(rawResponse.body);\n await sleep(calcDelay(attempt, retryOpts));\n continue;\n }\n\n if (this.hasResponseDataPlugins) {\n const syncResult = executeResponseDataPipeline(\n this.pipelines.responseData,\n rawResponse,\n this.pluginCtx,\n );\n rawResponse = syncResult instanceof Promise ? await syncResult : syncResult;\n }\n\n const response =\n meta.responseType === \"stream\"\n ? mapStreamFast(rawResponse)\n : mapResponseFast(rawResponse);\n\n if (this.hasResponsePlugins) {\n const syncResult = executeResponsePipeline(\n this.pipelines.responseMutators,\n this.pipelines.responseSideEffects,\n response as HttpResponse,\n req,\n this.pluginCtx,\n this.config.logger,\n );\n if (syncResult instanceof Promise) {\n await syncResult;\n }\n }\n\n this.recycleRequest(req);\n return response as HttpResponse<T>;\n } catch (error) {\n if (error instanceof Error && error.name === \"AbortError\") {\n const timeout = this.config.network?.timeout;\n if (timeout != null && timeout > 0) {\n return this.handleDispatchError(new TimeoutError(req.url, timeout), req);\n }\n return this.handleDispatchError(error, req);\n }\n\n if (attempt < maxRetries && !req.signal?.aborted) {\n await sleep(calcDelay(attempt, retryOpts));\n continue;\n }\n\n return this.handleDispatchError(error as Error, req);\n }\n }\n }\n\n /**\n * @ru \u0420\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u0443\u0435\u0442 \u043F\u043B\u0430\u0433\u0438\u043D \u0441 \u0441\u043E\u0440\u0442\u0438\u0440\u043E\u0432\u043A\u043E\u0439 \u043F\u043E \u043F\u0440\u0438\u043E\u0440\u0438\u0442\u0435\u0442\u0443. \u041F\u0440\u043E\u043F\u0443\u0441\u043A\u0430\u0435\u0442 \u043E\u0442\u043A\u043B\u044E\u0447\u0451\u043D\u043D\u044B\u0435 \u043F\u043B\u0430\u0433\u0438\u043D\u044B.\n * @en Registers a plugin sorted by priority. Skips disabled plugins.\n * @param plugin - The plugin instance to register.\n * @returns This instance for chaining.\n */\n public use(plugin: HyperPlugin): this {\n const isEnabled = plugin.enabled ? plugin.enabled(this.config) : true;\n if (!isEnabled) return this;\n\n plugin.setup?.(this.pluginCtx);\n const priority = (plugin as { priority?: number }).priority ?? 0;\n\n const hook = { name: plugin.name, priority, run: null as any };\n\n if (plugin.onRequest) {\n insertHookSorted(this.pipelines.request, {\n name: hook.name,\n priority: hook.priority,\n run: plugin.onRequest,\n });\n this.hasRequestPlugins = true;\n }\n if (plugin.onResponse) {\n const target =\n plugin.mode === \"background\"\n ? this.pipelines.responseSideEffects\n : this.pipelines.responseMutators;\n insertHookSorted(target, {\n name: hook.name,\n priority: hook.priority,\n run: plugin.onResponse,\n });\n this.hasResponsePlugins = true;\n }\n if (plugin.onResponseData) {\n insertHookSorted(this.pipelines.responseData, {\n name: hook.name,\n priority: hook.priority,\n run: plugin.onResponseData,\n });\n this.hasResponseDataPlugins = true;\n }\n if (plugin.onError) {\n insertHookSorted(this.pipelines.error, {\n name: hook.name,\n priority: hook.priority,\n run: plugin.onError,\n });\n this.hasErrorPlugins = true;\n }\n return this;\n }\n\n /**\n * @ru \u0412\u044B\u043F\u043E\u043B\u043D\u044F\u0435\u0442 GET-\u0437\u0430\u043F\u0440\u043E\u0441. \u0418\u0441\u043F\u043E\u043B\u044C\u0437\u0443\u0435\u0442 \u0431\u044B\u0441\u0442\u0440\u044B\u0439 \u043F\u0443\u0442\u044C \u0434\u043B\u044F \u043F\u0440\u043E\u0441\u0442\u044B\u0445 \u0441\u0442\u0440\u043E\u043A\u043E\u0432\u044B\u0445 URL \u0431\u0435\u0437 \u043F\u043B\u0430\u0433\u0438\u043D\u043E\u0432/\u043F\u043E\u0432\u0442\u043E\u0440\u043E\u0432.\n * @en Performs a GET request. Uses a fast path for bare string URLs without plugins/retries.\n * @param req - URL string or RequestInterface.\n * @param signal - Optional abort signal.\n * @returns Promise resolving to the HTTP response.\n */\n public get<T = unknown>(req: RequestInterface | string, signal?: AbortSignal) {\n if (\n typeof req === \"string\" &&\n req !== \"\" &&\n !signal &&\n !this.hasRequestPlugins &&\n !this.hasResponsePlugins &&\n !this.hasResponseDataPlugins &&\n !this.hasErrorPlugins &&\n this._cachedMaxRetries === 0\n ) {\n return this.fastGet<T>(req);\n }\n return this.dispatch<T>(this.acquireReq(\"GET\", req, undefined, signal));\n }\n\n private async fastGet<T>(url: string): Promise<HttpResponse<T>> {\n const resolvedUrl = this.requestBuilder.resolveUrl(url, this.config.baseURL);\n\n let acquired = false;\n if (this.semaphore) {\n acquired = this.semaphore.tryAcquire();\n if (!acquired) {\n await this.semaphore.acquire();\n acquired = true;\n }\n }\n\n const transport =\n this.transportManager.transport ??\n this.transportManager.getSync() ??\n (await this.transportReady);\n\n try {\n if (typeof (transport as any).fastRequest === \"function\") {\n return (await (transport as any).fastRequest(\n resolvedUrl,\n \"GET\",\n this.defaultHeaders,\n )) as HttpResponse<T>;\n }\n\n const raw = await transport.execute({\n method: \"GET\",\n url: resolvedUrl,\n headers: this.defaultHeaders as Record<string, string>,\n body: undefined,\n signal: undefined,\n stealth: this.config.network?.stealth,\n } as TransportArgs);\n\n return mapResponseFast(raw) as HttpResponse<T>;\n } finally {\n if (acquired) this.semaphore?.release();\n }\n }\n\n /**\n * @ru \u0412\u044B\u043F\u043E\u043B\u043D\u044F\u0435\u0442 POST-\u0437\u0430\u043F\u0440\u043E\u0441.\n * @en Performs a POST request.\n * @param req - URL string or RequestInterface.\n * @param body - Optional request body.\n * @param signal - Optional abort signal.\n * @returns Promise resolving to the HTTP response.\n */\n public post<T = unknown>(\n req: RequestInterface | string,\n body?: RequestBodyData,\n signal?: AbortSignal,\n ) {\n return this.dispatch<T>(this.acquireReq(\"POST\", req, body, signal));\n }\n\n /**\n * @ru \u0412\u044B\u043F\u043E\u043B\u043D\u044F\u0435\u0442 PUT-\u0437\u0430\u043F\u0440\u043E\u0441.\n * @en Performs a PUT request.\n * @param req - URL string or RequestInterface.\n * @param body - Optional request body.\n * @param signal - Optional abort signal.\n * @returns Promise resolving to the HTTP response.\n */\n public put<T = unknown>(\n req: RequestInterface | string,\n body?: RequestBodyData,\n signal?: AbortSignal,\n ) {\n return this.dispatch<T>(this.acquireReq(\"PUT\", req, body, signal));\n }\n\n /**\n * @ru \u0412\u044B\u043F\u043E\u043B\u043D\u044F\u0435\u0442 PATCH-\u0437\u0430\u043F\u0440\u043E\u0441.\n * @en Performs a PATCH request.\n * @param req - URL string or RequestInterface.\n * @param body - Optional request body.\n * @param signal - Optional abort signal.\n * @returns Promise resolving to the HTTP response.\n */\n public patch<T = unknown>(\n req: RequestInterface | string,\n body?: RequestBodyData,\n signal?: AbortSignal,\n ) {\n return this.dispatch<T>(this.acquireReq(\"PATCH\", req, body, signal));\n }\n\n /**\n * @ru \u0412\u044B\u043F\u043E\u043B\u043D\u044F\u0435\u0442 DELETE-\u0437\u0430\u043F\u0440\u043E\u0441.\n * @en Performs a DELETE request.\n * @param req - URL string or RequestInterface.\n * @param signal - Optional abort signal.\n * @returns Promise resolving to the HTTP response.\n */\n public delete<T = unknown>(req: RequestInterface | string, signal?: AbortSignal) {\n return this.dispatch<T>(this.acquireReq(\"DELETE\", req, undefined, signal));\n }\n\n /**\n * @ru \u0412\u044B\u043F\u043E\u043B\u043D\u044F\u0435\u0442 OPTIONS-\u0437\u0430\u043F\u0440\u043E\u0441.\n * @en Performs an OPTIONS request.\n * @param req - URL string or RequestInterface.\n * @param body - Optional request body.\n * @param signal - Optional abort signal.\n * @returns Promise resolving to the HTTP response.\n */\n public options<T = unknown>(\n req: RequestInterface | string,\n body?: RequestBodyData,\n signal?: AbortSignal,\n ) {\n return this.dispatch<T>(this.acquireReq(\"OPTIONS\", req, body, signal));\n }\n\n /**\n * @ru \u0412\u044B\u043F\u043E\u043B\u043D\u044F\u0435\u0442 HEAD-\u0437\u0430\u043F\u0440\u043E\u0441.\n * @en Performs a HEAD request.\n * @param req - URL string or RequestInterface.\n * @param signal - Optional abort signal.\n * @returns Promise resolving to the HTTP response with null body.\n */\n public head(req: RequestInterface | string, signal?: AbortSignal) {\n return this.dispatch<null>(this.acquireReq(\"HEAD\", req, undefined, signal));\n }\n\n /**\n * @ru \u0412\u044B\u043F\u043E\u043B\u043D\u044F\u0435\u0442 GET-\u0437\u0430\u043F\u0440\u043E\u0441 \u0438 \u0432\u043E\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u0441\u0442\u0440\u0438\u043C\u0438\u043D\u0433-\u043E\u0442\u0432\u0435\u0442.\n * @en Performs a GET request and returns a streaming response.\n * @param req - URL string or RequestInterface.\n * @param signal - Optional abort signal.\n * @returns Promise resolving to a StreamResponse.\n */\n public stream(\n req: RequestInterface | string,\n signal?: AbortSignal,\n ): Promise<StreamResponse<unknown>> {\n return this.dispatch(this.acquireReq(\"GET\", req, undefined, signal, \"stream\")) as Promise<\n StreamResponse<unknown>\n >;\n }\n\n /**\n * @ru \u0412\u044B\u043F\u043E\u043B\u043D\u044F\u0435\u0442 POST-\u0437\u0430\u043F\u0440\u043E\u0441 \u0438 \u0432\u043E\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u0441\u0442\u0440\u0438\u043C\u0438\u043D\u0433-\u043E\u0442\u0432\u0435\u0442.\n * @en Performs a POST request and returns a streaming response.\n * @param req - URL string or RequestInterface.\n * @param body - Optional request body.\n * @param signal - Optional abort signal.\n * @returns Promise resolving to a StreamResponse.\n */\n public postStream<T = unknown>(\n req: RequestInterface | string,\n body?: RequestBodyData,\n signal?: AbortSignal,\n ): Promise<StreamResponse<T>> {\n return this.dispatch(this.acquireReq(\"POST\", req, body, signal, \"stream\")) as Promise<\n StreamResponse<T>\n >;\n }\n\n /**\n * @ru \u0421\u043E\u0437\u0434\u0430\u0451\u0442 \u043D\u043E\u0432\u044B\u0439 \u044D\u043A\u0437\u0435\u043C\u043F\u043B\u044F\u0440 HyperCore \u0441 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043D\u043D\u043E\u0439/\u043F\u0435\u0440\u0435\u043E\u043F\u0440\u0435\u0434\u0435\u043B\u0451\u043D\u043D\u043E\u0439 \u043A\u043E\u043D\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0435\u0439.\n * @en Creates a new HyperCore instance with extended/overridden configuration.\n * @param options - Partial configuration overrides.\n * @returns A new HyperCore instance.\n */\n public extend(options: Partial<HttpClientOptions>): HyperCore {\n const nextConfig = { ...this.config };\n for (const key in options) {\n if (Object.prototype.hasOwnProperty.call(options, key)) {\n if (key === \"network\" && options.network) {\n nextConfig.network = {\n ...this.config.network,\n ...options.network,\n stealth:\n options.network.stealth || this.config.network?.stealth\n ? {\n ...this.config.network?.stealth,\n ...options.network.stealth,\n }\n : undefined,\n };\n } else {\n (nextConfig as any)[key] = (options as any)[key];\n }\n }\n }\n return new HyperCore(nextConfig, this.transportManager.transport ?? undefined);\n }\n\n /**\n * @ru \u0410\u043B\u0438\u0430\u0441 \u0434\u043B\u044F extend().\n * @en Alias for extend().\n * @param options - Partial configuration overrides.\n * @returns A new HyperCore instance.\n */\n public create(options: Partial<HttpClientOptions>): HyperCore {\n return this.extend(options);\n }\n\n /**\n * @ru \u0417\u0430\u0432\u0435\u0440\u0448\u0430\u0435\u0442 \u0440\u0430\u0431\u043E\u0442\u0443 \u043A\u043B\u0438\u0435\u043D\u0442\u0430 \u0438 \u043E\u0441\u0432\u043E\u0431\u043E\u0436\u0434\u0430\u0435\u0442 \u0440\u0435\u0441\u0443\u0440\u0441\u044B \u0442\u0440\u0430\u043D\u0441\u043F\u043E\u0440\u0442\u0430.\n * @en Shuts down the client and releases transport resources.\n * @param graceful - If true, waits for active requests to complete.\n * @returns Promise that resolves when shutdown is complete.\n */\n public destroy(graceful = true): Promise<void> {\n return this.transportManager.destroy(graceful);\n }\n\n /**\n * @ru \u0412\u044B\u043F\u043E\u043B\u043D\u044F\u0435\u0442 GET-\u0437\u0430\u043F\u0440\u043E\u0441 \u0438 \u0432\u043E\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u0442\u0435\u043B\u043E \u043E\u0442\u0432\u0435\u0442\u0430, \u0440\u0430\u0437\u043E\u0431\u0440\u0430\u043D\u043D\u043E\u0435 \u043A\u0430\u043A JSON.\n * @en Performs a GET request and returns the response body parsed as JSON.\n * @param req - URL string or RequestInterface.\n * @param signal - Optional abort signal.\n * @returns Promise resolving to the parsed JSON value.\n */\n public json<T = unknown>(req: RequestInterface | string, signal?: AbortSignal): Promise<T> {\n return this.shortcut(req, signal).then((res) => {\n const out = res.json ? res.json<T>() : Promise.reject(new Error(\"json() not supported\"));\n recycleResponse(res);\n return out;\n });\n }\n\n /**\n * @ru \u0412\u044B\u043F\u043E\u043B\u043D\u044F\u0435\u0442 GET-\u0437\u0430\u043F\u0440\u043E\u0441 \u0438 \u0432\u043E\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u0442\u0435\u043B\u043E \u043E\u0442\u0432\u0435\u0442\u0430 \u043A\u0430\u043A \u0441\u0442\u0440\u043E\u043A\u0443.\n * @en Performs a GET request and returns the response body as text.\n * @param req - URL string or RequestInterface.\n * @param signal - Optional abort signal.\n * @returns Promise resolving to the response text.\n */\n public text(req: RequestInterface | string, signal?: AbortSignal): Promise<string> {\n return this.shortcut(req, signal).then((res) => {\n const out = res.text ? res.text() : Promise.reject(new Error(\"text() not supported\"));\n recycleResponse(res);\n return out;\n });\n }\n\n /**\n * @ru \u0412\u044B\u043F\u043E\u043B\u043D\u044F\u0435\u0442 GET-\u0437\u0430\u043F\u0440\u043E\u0441 \u0438 \u0441\u0431\u0440\u0430\u0441\u044B\u0432\u0430\u0435\u0442 \u0442\u0435\u043B\u043E \u043E\u0442\u0432\u0435\u0442\u0430 (\u0431\u0435\u0437 \u0441\u043E\u0445\u0440\u0430\u043D\u0435\u043D\u0438\u044F).\n * @en Performs a GET request and discards the response body.\n * @param req - URL string or RequestInterface.\n * @param signal - Optional abort signal.\n * @returns Promise that resolves when the body is discarded.\n */\n public dump(req: RequestInterface | string, signal?: AbortSignal): Promise<void> {\n return this.shortcut(req, signal).then((res) => {\n const out = res.dump ? res.dump() : Promise.resolve();\n recycleResponse(res);\n return out;\n });\n }\n\n private async handleDispatchError<T>(\n error: Error,\n req: InternalRequest,\n ): Promise<HttpResponse<T>> {\n try {\n if (this.hasErrorPlugins) {\n const recovered = await executeErrorPipeline(\n this.pipelines.error,\n error as HyperttpError,\n req,\n this.pluginCtx,\n );\n if (recovered != null) {\n if (this.hasResponsePlugins) {\n const syncResult = executeResponsePipeline(\n this.pipelines.responseMutators,\n this.pipelines.responseSideEffects,\n recovered as HttpResponse,\n req,\n this.pluginCtx,\n this.config.logger,\n );\n if (syncResult instanceof Promise) {\n await syncResult;\n }\n }\n return recovered as HttpResponse<T>;\n }\n }\n throw error;\n } finally {\n this.recycleRequest(req);\n }\n }\n\n private acquireReq(\n method: Method,\n req: RequestInterface | string,\n body?: RequestBodyData,\n signal?: AbortSignal,\n responseType?: \"stream\",\n ): InternalRequest {\n const pooled = this.requestPool.pop();\n return this.requestBuilder.build(\n method,\n req,\n body,\n signal,\n responseType,\n this.defaultHeaders,\n this.config,\n pooled,\n );\n }\n\n private recycleRequest(req: InternalRequest): void {\n if (this.requestPool.length < MAX_POOL_SIZE) {\n req.method = \"GET\";\n req.url = \"\";\n req.headers = this.defaultHeaders;\n req.body = undefined;\n req.signal = undefined;\n req.stealth = undefined;\n\n const m = req.meta as any;\n if (m) {\n m.responseType = undefined;\n\n if (typeof m.cleanupSignal === \"function\") {\n m.cleanupSignal();\n m.cleanupSignal = undefined;\n }\n\n if (m.timings) {\n m.timings.networkMs = undefined;\n }\n }\n this.requestPool.push(req);\n }\n }\n\n private shortcut(\n req: RequestInterface | string,\n signal?: AbortSignal,\n ): Promise<HttpResponse<unknown>> {\n const method = typeof req === \"string\" ? \"GET\" : (req.method ?? \"GET\");\n return this.dispatch(this.acquireReq(method, req, undefined, signal));\n }\n}\n"],
5
- "mappings": "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",
6
- "names": ["defaultConfig", "mapResponseFast", "mapStreamFast", "recycleResponse", "TransportManager", "createPipelines", "executeErrorPipeline", "executeRequestPipeline", "executeResponsePipeline", "executeResponseDataPipeline", "insertHookSorted", "normalizeHeaders", "normalizeBodyForTransport", "calcDelay", "shouldRetry", "drainBody", "TimeoutError", "RequestBuilder", "sleep", "ms", "resolve", "MAX_POOL_SIZE", "Semaphore", "max", "initialCapacity", "arr", "next", "oldCapacity", "newCapacity", "newQueue", "config", "transport", "maxConcurrent", "req", "retryOpts", "maxRetries", "attempt", "syncResult", "shortCircuit", "acquired", "rawResponse", "meta", "shouldTrackTimings", "networkStart", "response", "error", "timeout", "plugin", "priority", "hook", "target", "signal", "url", "resolvedUrl", "raw", "body", "options", "nextConfig", "key", "graceful", "res", "out", "recovered", "method", "responseType", "pooled", "m"]
4
+ "sourcesContent": ["import type {\n HyperClientOptions,\n HyperPlugin,\n HyperProtocol,\n HyperProtocols,\n HyperReceiver,\n HyperSender,\n HyperServerListenOptions,\n HyperTransport,\n IHyperCore,\n PluginContext,\n ProtocolRegistry,\n RequestContext,\n SenderProtocol,\n SendRequest,\n ServerRequestContext,\n TransportRequest,\n TransportResponse,\n TransportServer,\n UniversalResponse,\n} from \"@hyperttp/types\";\nimport { defaultCoreConfig } from \"../defaultConfig.js\";\nimport { KNOWN_PROTOCOLS, resolveProtocol } from \"../protocols/manager.js\";\nimport { evictCachedTransport, resolveTransport } from \"../transports/manager.js\";\nimport { HyperClientError } from \"../utils/errors.js\";\n\nlet requestCounter = 0;\nlet requestIdBase = Date.now().toString(36) + \"-\";\n\nconst PLUGIN_PHASE_ORDER: Readonly<Record<string, number>> = Object.freeze({\n START: 0,\n PREPARE: 1,\n CONTROL: 2,\n FORMAT: 3,\n NETWORK: 4,\n DATA: 5,\n});\n\n/**\n * @ru Генерирует уникальный идентификатор запроса без аллокаций на каждый вызов:\n * базовый таймстемп пересчитывается при переполнении счётчика, а уникальность\n * обеспечивает инкрементальный битовый счётчик (общий для всех ядер).\n * @en Generates a unique request identifier without per-call allocations:\n * the base timestamp is recalculated when the counter wraps around, and uniqueness\n * is ensured by an incremental bitwise counter (shared across all cores).\n * @returns A compact unique string identifier.\n */\nfunction createRequestId(): string {\n requestCounter = (requestCounter + 1) >>> 0;\n if (requestCounter === 0) {\n requestIdBase = Date.now().toString(36) + \"-\";\n }\n return requestIdBase + (requestCounter >>> 0).toString(36);\n}\n\n/**\n * @ru Счётчик активных удержаний транспорта. Позволяет нескольким ядрам\n * (например, через `extend()`) разделять один транспорт, закрывая его только\n * после освобождения последней ссылки.\n * @en Active transport hold count. Lets multiple cores (e.g. via `extend()`)\n * share one transport, closing it only after the last reference is released.\n */\nconst transportRefs = new WeakMap<HyperTransport, number>();\n\nfunction retainTransport(transport: HyperTransport): void {\n transportRefs.set(transport, (transportRefs.get(transport) ?? 0) + 1);\n}\n\nfunction releaseTransport(transport: HyperTransport): number {\n const next = (transportRefs.get(transport) ?? 1) - 1;\n if (next <= 0) {\n transportRefs.delete(transport);\n } else {\n transportRefs.set(transport, next);\n }\n return next;\n}\n\n/**\n * @ru Создаёт RequestContext на один цикл выполнения (prepare → send → parse).\n * `meta` и `state` инициализируются лениво при первом обращении, чтобы не\n * аллоцировать объекты для запросов, которые их не используют.\n * @en Creates a RequestContext for a single execution cycle (prepare → send → parse).\n * `meta` and `state` are initialized lazily on first access to avoid allocating\n * objects for requests that never use them.\n * @param req - The universal request being dispatched.\n * @returns A new RequestContext.\n */\nclass DefaultRequestContext implements RequestContext {\n public readonly requestId = createRequestId();\n public readonly startTime = performance.now();\n public readonly signal?: AbortSignal;\n private requestMeta?: Record<string, unknown>;\n private requestState?: Record<string, unknown>;\n\n constructor(signal?: AbortSignal) {\n this.signal = signal;\n }\n\n public get meta(): Record<string, unknown> {\n return (this.requestMeta ??= {});\n }\n\n public set meta(value: Record<string, unknown>) {\n this.requestMeta = value;\n }\n\n public get state(): Record<string, unknown> {\n return (this.requestState ??= {});\n }\n\n public set state(value: Record<string, unknown>) {\n this.requestState = value;\n }\n}\n\nfunction createRequestContext(req: SendRequest<unknown, string>): RequestContext {\n return new DefaultRequestContext(req.signal);\n}\n\n/**\n * @ru Создаёт ServerRequestContext на один серверный цикл (receive → handle → respond).\n * `meta` и `state` инициализируются лениво, как и в клиентском контексте.\n * @en Creates a ServerRequestContext for a single server cycle (receive → handle → respond).\n * `meta` and `state` are initialized lazily, like in the client context.\n * @param raw - The raw transport request being received.\n * @returns A new ServerRequestContext.\n */\nfunction createServerRequestContext(raw: TransportRequest): ServerRequestContext {\n return new DefaultRequestContext(raw.signal) as ServerRequestContext;\n}\n\n/**\n * @ru Проверяет, является ли значение UniversalResponse (а не SendRequest).\n * @en Checks whether the value is a UniversalResponse (rather than a SendRequest).\n * @param value - The value to inspect.\n * @returns True if the value carries response shape (data + status).\n */\nfunction isUniversalResponse(value: unknown): value is UniversalResponse {\n return (\n typeof value === \"object\" &&\n value !== null &&\n \"data\" in value &&\n \"status\" in value &&\n !(\"input\" in value)\n );\n}\n\n/**\n * @ru Внутренний реестр протоколов: хранит единые модули (Sender + Receiver).\n * @en Internal protocol registry: stores unified modules (Sender + Receiver).\n */\nclass DefaultProtocolRegistry implements ProtocolRegistry {\n private readonly protocols = new Map<SenderProtocol, HyperProtocol>();\n\n public register<P extends SenderProtocol>(\n protocol: HyperProtocol<unknown, unknown, unknown, unknown, P>,\n ): void {\n this.protocols.set(protocol.protocol, protocol);\n }\n\n public get<P extends SenderProtocol>(\n protocol: P,\n ): HyperProtocol<unknown, unknown, unknown, unknown, P> | undefined {\n return this.protocols.get(protocol) as\n | HyperProtocol<unknown, unknown, unknown, unknown, P>\n | undefined;\n }\n\n public has(protocol: SenderProtocol): boolean {\n return this.protocols.has(protocol);\n }\n\n public get size(): number {\n return this.protocols.size;\n }\n}\n\n// oxlint-disable-next-line no-unsafe-declaration-merging\nexport interface HyperCore extends HyperProtocols {}\n\n/**\n * @ru Универсальное ядро v2.0.0. Протокол-независимый диспетчер: регистрирует\n * единые модули протоколов (Sender + Receiver), выполняет клиентский цикл\n * prepare → send → parse и серверный цикл receive → handle → respond через\n * физический транспорт, а также прогоняет хуки плагинов.\n * @en Universal core v2.0.0. Protocol-agnostic dispatcher: registers unified\n * protocol modules (Sender + Receiver), runs the client cycle prepare → send → parse\n * and the server cycle receive → handle → respond through the physical transport,\n * and executes plugin hooks.\n */\nexport class HyperCore implements IHyperCore {\n public readonly config: HyperClientOptions;\n\n private readonly registry = new DefaultProtocolRegistry();\n private readonly pluginCtx: PluginContext;\n private readonly plugins: HyperPlugin[] = [];\n private readonly servers = new Set<TransportServer>();\n private readonly protocolNamespaces = new Set<string>();\n private readonly generatedFlatMethods = new Set<string>();\n private readonly transportPromises = new Map<SenderProtocol, Promise<HyperTransport>>();\n private readonly transports = new Map<SenderProtocol, HyperTransport>();\n private readonly retainedTransports = new Set<HyperTransport>();\n private readonly fixedTransport: HyperTransport | null;\n private destroyPromise: Promise<void> | null = null;\n private isDestroyed = false;\n\n constructor(\n config: Partial<HyperClientOptions> = {},\n transport?: HyperTransport,\n sharedTransportPromises?: ReadonlyMap<SenderProtocol, Promise<HyperTransport>>,\n ) {\n this.config = {\n ...defaultCoreConfig,\n ...config,\n retry: {\n ...defaultCoreConfig.retry,\n ...config.retry,\n },\n };\n this.fixedTransport = transport ?? null;\n if (transport) {\n retainTransport(transport);\n this.retainedTransports.add(transport);\n }\n if (sharedTransportPromises) {\n for (const [protocol, sharedPromise] of sharedTransportPromises) {\n this.transportPromises.set(\n protocol,\n sharedPromise.then((sharedTransport) =>\n this.retainResolvedTransport(protocol, sharedTransport),\n ),\n );\n }\n }\n this.pluginCtx = { config: this.config, core: this };\n\n const protocols = this.config.protocols;\n if (protocols) {\n for (let i = 0; i < protocols.length; i++) {\n this.registerProtocol(protocols[i]!);\n }\n }\n\n const senders = this.config.senders;\n if (senders) {\n for (let i = 0; i < senders.length; i++) {\n this.registerSender(senders[i]!);\n }\n }\n\n const customSender = this.config.customSender;\n if (customSender) {\n this.registerSender(customSender);\n }\n\n const receivers = this.config.receivers;\n if (receivers) {\n for (let i = 0; i < receivers.length; i++) {\n this.registerReceiver(receivers[i]!);\n }\n }\n\n const plugins = this.config.plugins;\n if (plugins) {\n for (let i = 0; i < plugins.length; i++) {\n const plugin = plugins[i]!;\n if (typeof plugin === \"string\") {\n throw new HyperClientError(\n `[HyperCore] Plugin module \"${plugin}\" cannot be loaded by the synchronous constructor. Import it and pass the plugin instance instead.`,\n );\n }\n this.use(plugin);\n }\n }\n\n const namespaces = this as unknown as Record<string, unknown>;\n for (let i = 0; i < KNOWN_PROTOCOLS.length; i++) {\n const protocol = KNOWN_PROTOCOLS[i]!;\n if (!this.registry.has(protocol) && namespaces[protocol] === undefined) {\n namespaces[protocol] = this.createLazyNamespace(protocol);\n this.protocolNamespaces.add(protocol);\n }\n }\n }\n\n /**\n * @ru Получает зарегистрированный модуль протокола (Sender + Receiver).\n * @en Gets a registered protocol module (Sender + Receiver).\n */\n public getProtocol<P extends SenderProtocol>(\n protocol: P,\n ): HyperProtocol<unknown, unknown, unknown, unknown, P> | undefined {\n return this.registry.get(protocol);\n }\n\n /**\n * @ru Получает зарегистрированный сендер протокола.\n * @en Gets a registered protocol sender.\n */\n public getSender<P extends SenderProtocol>(\n protocol: P,\n ): HyperSender<unknown, unknown, unknown, unknown, P> | undefined {\n return this.registry.get(protocol)?.sender;\n }\n\n /**\n * @ru Получает зарегистрированный ресивер протокола.\n * @en Gets a registered protocol receiver.\n */\n public getReceiver<P extends SenderProtocol>(\n protocol: P,\n ): HyperReceiver<unknown, unknown, unknown, unknown, P> | undefined {\n return this.registry.get(protocol)?.receiver;\n }\n\n /**\n * @ru Возвращает имя текущего транспорта.\n * @en Returns the name of the current transport.\n * @returns Transport constructor name.\n */\n public async getTransportName(): Promise<string> {\n const t = await this.acquireTransport();\n return t.constructor.name;\n }\n\n /**\n * @ru Возвращает имя сендера протокола (по умолчанию — \"rest\").\n * Протокол резолвится лениво, если ещё не зарегистрирован.\n * @en Returns the sender constructor name for a protocol (default \"rest\").\n * The protocol is resolved lazily if not registered yet.\n * @param protocol - The protocol to inspect.\n * @returns Sender constructor name.\n */\n public async getSenderName(protocol: SenderProtocol = \"rest\"): Promise<string> {\n let resolved = this.registry.get(protocol);\n if (!resolved) {\n resolved = await resolveProtocol(protocol);\n this.registerProtocol(resolved);\n }\n const sender = resolved.sender;\n if (!sender) {\n throw new HyperClientError(`[HyperCore] Protocol \"${protocol}\" has no sender (client role).`);\n }\n return sender.constructor.name;\n }\n\n /**\n * @ru Возвращает имя ресивера протокола (по умолчанию — \"rest\").\n * Протокол резолвится лениво, если ещё не зарегистрирован.\n * @en Returns the receiver constructor name for a protocol (default \"rest\").\n * The protocol is resolved lazily if not registered yet.\n * @param protocol - The protocol to inspect.\n * @returns Receiver constructor name.\n */\n public async getReceiverName(protocol: SenderProtocol = \"rest\"): Promise<string> {\n let resolved = this.registry.get(protocol);\n if (!resolved) {\n resolved = await resolveProtocol(protocol);\n this.registerProtocol(resolved);\n }\n const receiver = resolved.receiver;\n if (!receiver) {\n throw new HyperClientError(\n `[HyperCore] Protocol \"${protocol}\" has no receiver (server role).`,\n );\n }\n return receiver.constructor.name;\n }\n\n /**\n * @ru Возвращает имя модуля протокола (по умолчанию — \"rest\"): предпочитает\n * `name`, затем `constructor.name`, затем идентификатор протокола.\n * Протокол резолвится лениво, если ещё не зарегистрирован.\n * @en Returns the protocol module name (default \"rest\"): prefers `name`, then\n * `constructor.name`, then the protocol identifier.\n * The protocol is resolved lazily if not registered yet.\n * @param protocol - The protocol to inspect.\n * @returns The protocol module display name.\n */\n public async getProtocolName(protocol: SenderProtocol = \"rest\"): Promise<string> {\n let resolved = this.registry.get(protocol);\n if (!resolved) {\n resolved = await resolveProtocol(protocol);\n this.registerProtocol(resolved);\n }\n if (resolved.name) return resolved.name;\n const ctor = resolved.constructor;\n return ctor && ctor.name && ctor.name !== \"Object\" ? ctor.name : String(resolved.protocol);\n }\n\n /**\n * @ru Регистрирует единый модуль протокола и раскрывает методы его сендера\n * на ядре (например, `core.rest` для REST).\n * @en Registers a unified protocol module and exposes its sender methods on the\n * core (e.g., `core.rest` for REST).\n * @param protocol - The protocol module to register.\n * @returns This instance for chaining.\n */\n public registerProtocol<P extends SenderProtocol>(\n protocol: HyperProtocol<unknown, unknown, unknown, unknown, P>,\n ): this {\n const protocolName = String(protocol.protocol);\n const namespaces = this as unknown as Record<string, unknown>;\n const isReserved =\n protocolName === \"__proto__\" ||\n protocolName === \"prototype\" ||\n protocolName === \"constructor\" ||\n protocolName in HyperCore.prototype ||\n (protocolName in this && !this.protocolNamespaces.has(protocolName));\n\n if (isReserved) {\n throw new HyperClientError(\n `[HyperCore] Protocol name \"${protocolName}\" conflicts with the core API.`,\n );\n }\n\n this.registry.register(protocol);\n\n const methods = protocol.sender?.methods;\n if (methods && typeof methods === \"object\") {\n const namespace: Record<string, unknown> = Object.create(null);\n\n for (const name in methods) {\n const method = methods[name] as ((...args: unknown[]) => unknown) | undefined;\n if (typeof method !== \"function\") continue;\n\n const boundMethod = (...args: unknown[]) => method.apply(methods, [this, ...args]);\n namespace[name] = boundMethod;\n\n if (this.generatedFlatMethods.has(name)) {\n namespaces[name] = boundMethod;\n } else if (!(name in HyperCore.prototype) && !(name in this)) {\n namespaces[name] = boundMethod;\n this.generatedFlatMethods.add(name);\n }\n }\n\n namespaces[protocolName] = namespace;\n this.protocolNamespaces.add(protocolName);\n }\n\n return this;\n }\n\n /**\n * @ru Регистрирует сендер протокола, оборачивая его в модуль протокола.\n * Существующий ресивер того же протокола сохраняется.\n * @en Registers a protocol sender, wrapping it into a protocol module.\n * An existing receiver for the same protocol is preserved.\n * @param sender - The protocol sender to register.\n * @returns This instance for chaining.\n */\n public registerSender<P extends SenderProtocol>(\n sender: HyperSender<unknown, unknown, unknown, unknown, P>,\n ): this {\n const existing = this.registry.get(sender.protocol);\n return this.registerProtocol({\n protocol: sender.protocol,\n sender,\n receiver: existing?.receiver,\n });\n }\n\n /**\n * @ru Регистрирует ресивер протокола, оборачивая его в модуль протокола.\n * Существующий сендер того же протокола сохраняется.\n * @en Registers a protocol receiver, wrapping it into a protocol module.\n * An existing sender for the same protocol is preserved.\n * @param receiver - The protocol receiver to register.\n * @returns This instance for chaining.\n */\n public registerReceiver<P extends SenderProtocol>(\n receiver: HyperReceiver<unknown, unknown, unknown, unknown, P>,\n ): this {\n const existing = this.registry.get(receiver.protocol);\n return this.registerProtocol({\n protocol: receiver.protocol,\n sender: existing?.sender,\n receiver,\n });\n }\n\n /**\n * @ru Создаёт ленивый namespace методов протокола: методы доступны ещё до\n * регистрации протокола и резолвятся по требованию при первом вызове.\n * @en Creates a lazy protocol methods namespace: methods are reachable before\n * the protocol is registered and are resolved on first call.\n * @param protocol - The protocol to expose lazily.\n * @returns A Proxy that dispatches method calls to the resolved protocol sender.\n */\n private createLazyNamespace(protocol: SenderProtocol): Record<string, unknown> {\n const handler: ProxyHandler<Record<string, unknown>> = {\n get: (_target, name) => {\n if (typeof name !== \"string\" || name === \"then\") return undefined;\n return (...args: unknown[]) => this.dispatchLazyMethod(protocol, name, args);\n },\n };\n return new Proxy({}, handler);\n }\n\n /**\n * @ru Разрешает протокол по требованию и вызывает метод `methods`-поверхности\n * его сендера, биндя ядро первым аргументом.\n * @en Resolves the protocol on demand and calls a method on its sender\n * `methods` surface, binding the core as the first argument.\n * @param protocol - The protocol identifier.\n * @param name - The method name on the sender surface.\n * @param args - Arguments forwarded after the core instance.\n * @returns The result of the sender method call.\n */\n private async dispatchLazyMethod(\n protocol: SenderProtocol,\n name: string,\n args: unknown[],\n ): Promise<unknown> {\n let resolved = this.registry.get(protocol);\n if (!resolved) {\n resolved = await resolveProtocol(protocol);\n this.registerProtocol(resolved);\n }\n\n const sender = resolved.sender;\n if (!sender) {\n throw new HyperClientError(`[HyperCore] Protocol \"${protocol}\" has no sender (client role).`);\n }\n\n const methods = sender.methods as\n | Record<string, (...callArgs: unknown[]) => unknown>\n | undefined;\n const method = methods?.[name];\n if (typeof method !== \"function\") {\n throw new TypeError(`[HyperCore] Protocol \"${protocol}\" has no method \"${name}\".`);\n }\n return method.apply(methods, [this, ...args]);\n }\n\n /**\n * @ru Основной метод диспетчеризации: выбирает сендер по протоколу и выполняет\n * трёхфазный цикл с поддержкой плагинов.\n * @en Main dispatch method: resolves the sender by protocol and runs the three-phase\n * cycle with plugin support.\n * @param req - The universal request envelope.\n * @returns A promise resolving to the normalized universal response.\n */\n public async send<TInput = unknown, TOutput = unknown, P extends string = string>(\n req: SendRequest<TInput, P>,\n ): Promise<UniversalResponse<TOutput>> {\n const ctx = createRequestContext(req as SendRequest<unknown, string>);\n let currentReq = req as SendRequest<any, any>;\n\n if (this.plugins.length === 0) {\n const sender = this.registry.get(req.protocol)?.sender;\n if (sender) {\n return this.runSender<TInput, TOutput>(sender, req as SendRequest<TInput, string>, ctx);\n }\n }\n\n try {\n let response: UniversalResponse<TOutput> | undefined;\n\n for (let i = 0; i < this.plugins.length; i++) {\n const plugin = this.plugins[i]!;\n if (typeof plugin.onRequest !== \"function\") continue;\n\n const result = await plugin.onRequest(currentReq, this.pluginCtx, ctx);\n if (result == null) continue;\n\n if (isUniversalResponse(result)) {\n response = result as UniversalResponse<TOutput>;\n break;\n }\n\n currentReq = result as SendRequest<any, any>;\n (ctx as { signal?: AbortSignal }).signal = currentReq.signal;\n }\n\n if (!response) {\n const sender = await this.resolveRequestSender(currentReq.protocol);\n response = await this.runSender<unknown, TOutput>(sender, currentReq, ctx);\n }\n\n return await this.runResponseHooks(response, currentReq, ctx);\n } catch (err) {\n for (let i = 0; i < this.plugins.length; i++) {\n const plugin = this.plugins[i]!;\n if (typeof plugin.onError !== \"function\") continue;\n\n const recovered = await plugin.onError(err, currentReq, this.pluginCtx, ctx);\n if (recovered != null && isUniversalResponse(recovered)) {\n return recovered as UniversalResponse<TOutput>;\n }\n }\n throw err;\n }\n }\n\n private async resolveRequestSender(\n protocol: SenderProtocol,\n ): Promise<HyperSender<any, any, any, any>> {\n let resolved = this.registry.get(protocol);\n if (!resolved) {\n resolved = await resolveProtocol(protocol);\n this.registerProtocol(resolved);\n }\n\n const sender = resolved.sender;\n if (!sender) {\n throw new HyperClientError(`[HyperCore] Protocol \"${protocol}\" has no sender (client role).`);\n }\n return sender;\n }\n\n private async runResponseHooks<TOutput>(\n initialResponse: UniversalResponse<TOutput>,\n req: SendRequest<any, any>,\n ctx: RequestContext,\n ): Promise<UniversalResponse<TOutput>> {\n let response = initialResponse;\n\n for (let i = 0; i < this.plugins.length; i++) {\n const plugin = this.plugins[i]!;\n if (typeof plugin.onResponse !== \"function\") continue;\n\n if (plugin.mode === \"background\") {\n void Promise.resolve()\n .then(() => plugin.onResponse!(response, req, this.pluginCtx, ctx))\n .catch((err: unknown) => this.reportBackgroundPluginError(err));\n continue;\n }\n\n const result = await plugin.onResponse(response, req, this.pluginCtx, ctx);\n if (result != null && isUniversalResponse(result)) {\n response = result as UniversalResponse<TOutput>;\n }\n }\n\n return response;\n }\n\n private reportBackgroundPluginError(err: unknown): void {\n const customOnError = (this.config as Record<string, unknown>).onError;\n if (typeof customOnError === \"function\") {\n try {\n (customOnError as (error: unknown) => void)(err);\n return;\n } catch (handlerError) {\n console.error(\"[HyperCore] Background error handler failed:\", handlerError);\n }\n }\n console.error(\"[HyperCore] Background plugin error:\", err);\n }\n\n /**\n * @ru Атомарно получает транспорт для конкретного протокола и удерживает\n * каждый физический экземпляр ровно один раз за время жизни ядра.\n * @en Atomically acquires a transport for a protocol and retains each physical\n * instance exactly once for the lifetime of this core.\n */\n private async acquireTransport(protocol: SenderProtocol = \"rest\"): Promise<HyperTransport> {\n if (this.isDestroyed) {\n throw new HyperClientError(\n \"[HyperCore] Cannot acquire transport on a destroyed core instance.\",\n );\n }\n\n const existing = this.transports.get(protocol);\n if (existing) return existing;\n\n let pending = this.transportPromises.get(protocol);\n if (!pending) {\n pending = this.resolveAndRetainTransport(protocol);\n this.transportPromises.set(protocol, pending);\n }\n\n const transport = await pending;\n if (this.isDestroyed) {\n throw new HyperClientError(\n \"[HyperCore] Core instance was destroyed while resolving transport.\",\n );\n }\n\n return transport;\n }\n\n private async resolveAndRetainTransport(protocol: SenderProtocol): Promise<HyperTransport> {\n const transport =\n this.fixedTransport ??\n (await resolveTransport(protocol, { customTransport: this.config.customTransport }));\n const supportsProtocol =\n typeof transport.supports === \"function\"\n ? transport.supports(protocol)\n : (transport.protocols?.includes(protocol) ?? true);\n\n if (!supportsProtocol) {\n throw new HyperClientError(\n `[HyperCore] Transport \"${transport.constructor.name}\" does not support protocol \"${protocol}\".`,\n );\n }\n\n return this.retainResolvedTransport(protocol, transport);\n }\n\n private retainResolvedTransport(\n protocol: SenderProtocol,\n transport: HyperTransport,\n ): HyperTransport {\n if (!this.retainedTransports.has(transport)) {\n retainTransport(transport);\n this.retainedTransports.add(transport);\n }\n\n this.transports.set(protocol, transport);\n return transport;\n }\n\n /**\n * @ru Выполняет ядро цикла запроса: prepare → send → parse через физический\n * транспорт. Транспорт получается через `acquireTransport()`.\n * @en Runs the core request cycle: prepare → send → parse through the physical\n * transport. The transport is acquired via `acquireTransport()`.\n * @param sender - The resolved protocol sender.\n * @param req - The (possibly plugin-modified) universal request.\n * @param ctx - The per-request execution context.\n * @returns The normalized universal response.\n */\n private async runSender<TInput, TOutput>(\n sender: HyperSender<any, any, any, any>,\n req: SendRequest<TInput, string>,\n ctx: RequestContext,\n ): Promise<UniversalResponse<TOutput>> {\n const transport =\n this.transports.get(req.protocol) ?? (await this.acquireTransport(req.protocol));\n const prepared = sender.prepare(req, ctx);\n const raw = await sender.send(prepared, transport, ctx);\n return sender.parse(raw, ctx) as UniversalResponse<TOutput>;\n }\n\n /**\n * @ru Запускает сервер для указанного протокола: связывает транспорт, ресивер и\n * application handler в цепочку receive → handle → respond.\n * @en Starts a server for the given protocol, wiring transport, receiver, and\n * application handler into the receive → handle → respond pipeline.\n * @template P - The protocol identifier.\n * @param options - The server listen options.\n * @returns A promise resolving to the transport server handle.\n */\n public async listen<P extends SenderProtocol = SenderProtocol>(\n options: HyperServerListenOptions<P>,\n ): Promise<TransportServer> {\n const transport = await this.acquireTransport(options.protocol);\n\n if (typeof transport.listen !== \"function\") {\n throw new HyperClientError(\n `[HyperCore] Transport \"${transport.constructor.name}\" does not support listen() (server role).`,\n );\n }\n\n let resolved = this.registry.get(options.protocol);\n if (!resolved) {\n resolved = await resolveProtocol(options.protocol);\n this.registerProtocol(resolved);\n }\n\n const receiver = resolved.receiver as\n | HyperReceiver<unknown, unknown, TransportRequest, TransportResponse, P>\n | undefined;\n if (!receiver) {\n throw new HyperClientError(\n `[HyperCore] Protocol \"${options.protocol}\" has no receiver (server role).`,\n );\n }\n\n const handler = options.handler as\n | ((request: unknown, ctx: ServerRequestContext) => unknown)\n | undefined;\n\n const onRequest = async (raw: TransportRequest): Promise<TransportResponse> => {\n const ctx = createServerRequestContext(raw);\n const request = await receiver.receive(raw, ctx);\n const response = handler ? await handler(request, ctx) : await receiver.handle(request, ctx);\n return receiver.respond(response, ctx);\n };\n\n const server = await transport.listen!({\n host: options.host,\n port: options.port,\n signal: options.signal,\n onRequest,\n });\n\n if (this.isDestroyed) {\n await server.close();\n throw new HyperClientError(\n \"[HyperCore] Core instance was destroyed while starting the server.\",\n );\n }\n\n this.servers.add(server);\n return server;\n }\n\n /**\n * @ru Регистрирует плагин. Пропускает отключённые плагины.\n * @en Registers a plugin. Skips disabled plugins.\n * @param plugin - The plugin instance to register.\n * @returns This instance for chaining.\n */\n public use(plugin: HyperPlugin): this {\n const enabled = plugin.enabled ? plugin.enabled(this.config) : true;\n if (!enabled) return this;\n\n plugin.setup?.(this.pluginCtx);\n this.plugins.push(plugin);\n this.plugins.sort(\n (a, b) => (PLUGIN_PHASE_ORDER[a.phase ?? \"\"] ?? 0) - (PLUGIN_PHASE_ORDER[b.phase ?? \"\"] ?? 0),\n );\n return this;\n }\n\n /**\n * @ru Создаёт новый экземпляр ядра с расширенной/переопределённой конфигурацией,\n * переиспользуя текущий транспорт.\n * @en Creates a new core instance with extended/overridden configuration,\n * reusing the current transport.\n * @param options - Partial configuration overrides.\n * @returns A new IHyperCore instance.\n */\n public extend(options: Partial<HyperClientOptions>): IHyperCore {\n const transport = options.customTransport ?? this.fixedTransport ?? undefined;\n const sharedTransports = options.customTransport ? undefined : this.transportPromises;\n return new HyperCore({ ...this.config, ...options }, transport, sharedTransports);\n }\n\n /**\n * @ru Создаёт полностью независимый экземпляр ядра на основе текущей\n * конфигурации: не переиспользует текущий транспорт и по умолчанию не\n * наследует `customTransport`.\n * @en Creates a fully independent core instance based on the current config:\n * it does not reuse the current transport and does not inherit\n * `customTransport` by default.\n * @param options - Partial configuration overrides.\n * @returns A new IHyperCore instance.\n */\n public create(options: Partial<HyperClientOptions>): IHyperCore {\n const base: Partial<HyperClientOptions> = { ...this.config };\n delete base.customTransport;\n return new HyperCore({ ...base, ...options });\n }\n\n /**\n * @ru Завершает работу ядра и освобождает ресурсы: закрывает активные серверы,\n * затем освобождает удержание транспорта.\n * @en Shuts down the core and releases resources: closes active servers, then\n * releases the transport hold.\n * @param graceful - If true, waits for active requests to complete.\n * @returns Promise that resolves when shutdown is complete.\n */\n public destroy(graceful = true): Promise<void> {\n if (!this.destroyPromise) {\n this.destroyPromise = this.performDestroy(graceful);\n }\n return this.destroyPromise;\n }\n\n private async performDestroy(graceful: boolean): Promise<void> {\n this.isDestroyed = true;\n\n for (const server of this.servers) {\n try {\n await server.close();\n } catch {\n // Continue releasing the remaining resources.\n }\n }\n this.servers.clear();\n\n await Promise.allSettled(this.transportPromises.values());\n this.transportPromises.clear();\n this.transports.clear();\n\n const transports = [...this.retainedTransports];\n this.retainedTransports.clear();\n\n for (const transport of transports) {\n if (releaseTransport(transport) > 0) continue;\n\n evictCachedTransport(transport);\n\n if (graceful && typeof transport.close === \"function\") {\n await transport.close();\n } else if (typeof transport.destroy === \"function\") {\n await transport.destroy();\n } else if (typeof transport.close === \"function\") {\n await transport.close();\n }\n }\n }\n}\n"],
5
+ "mappings": "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",
6
+ "names": ["defaultCoreConfig", "KNOWN_PROTOCOLS", "resolveProtocol", "evictCachedTransport", "resolveTransport", "HyperClientError", "requestCounter", "requestIdBase", "PLUGIN_PHASE_ORDER", "createRequestId", "transportRefs", "retainTransport", "transport", "releaseTransport", "next", "DefaultRequestContext", "signal", "value", "createRequestContext", "req", "createServerRequestContext", "raw", "isUniversalResponse", "DefaultProtocolRegistry", "protocol", "config", "sharedTransportPromises", "sharedPromise", "sharedTransport", "protocols", "senders", "customSender", "receivers", "plugins", "plugin", "namespaces", "resolved", "sender", "receiver", "ctor", "protocolName", "methods", "namespace", "name", "method", "boundMethod", "args", "existing", "handler", "_target", "ctx", "currentReq", "response", "i", "result", "err", "recovered", "initialResponse", "customOnError", "handlerError", "pending", "prepared", "options", "onRequest", "request", "server", "a", "b", "sharedTransports", "base", "graceful", "transports"]
7
7
  }