@miaixz/sdk 0.5.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 (244) hide show
  1. package/LICENSE +202 -0
  2. package/NOTICE +7 -0
  3. package/README.md +412 -0
  4. package/dist/api/client.d.ts +223 -0
  5. package/dist/api/client.d.ts.map +1 -0
  6. package/dist/api/client.js +1069 -0
  7. package/dist/api/client.js.map +1 -0
  8. package/dist/api/endpoint.d.ts +10 -0
  9. package/dist/api/endpoint.d.ts.map +1 -0
  10. package/dist/api/endpoint.js +51 -0
  11. package/dist/api/endpoint.js.map +1 -0
  12. package/dist/api/errors.d.ts +180 -0
  13. package/dist/api/errors.d.ts.map +1 -0
  14. package/dist/api/errors.js +173 -0
  15. package/dist/api/errors.js.map +1 -0
  16. package/dist/api/index.d.ts +6 -0
  17. package/dist/api/index.d.ts.map +1 -0
  18. package/dist/api/index.js +5 -0
  19. package/dist/api/index.js.map +1 -0
  20. package/dist/api/request.d.ts +135 -0
  21. package/dist/api/request.d.ts.map +1 -0
  22. package/dist/api/request.js +2 -0
  23. package/dist/api/request.js.map +1 -0
  24. package/dist/api/response.d.ts +69 -0
  25. package/dist/api/response.d.ts.map +1 -0
  26. package/dist/api/response.js +43 -0
  27. package/dist/api/response.js.map +1 -0
  28. package/dist/api/telemetry.d.ts +139 -0
  29. package/dist/api/telemetry.d.ts.map +1 -0
  30. package/dist/api/telemetry.js +2 -0
  31. package/dist/api/telemetry.js.map +1 -0
  32. package/dist/appearance/appearance.d.ts +161 -0
  33. package/dist/appearance/appearance.d.ts.map +1 -0
  34. package/dist/appearance/appearance.js +614 -0
  35. package/dist/appearance/appearance.js.map +1 -0
  36. package/dist/appearance/index.d.ts +3 -0
  37. package/dist/appearance/index.d.ts.map +1 -0
  38. package/dist/appearance/index.js +3 -0
  39. package/dist/appearance/index.js.map +1 -0
  40. package/dist/auth/auth.d.ts +197 -0
  41. package/dist/auth/auth.d.ts.map +1 -0
  42. package/dist/auth/auth.js +314 -0
  43. package/dist/auth/auth.js.map +1 -0
  44. package/dist/auth/index.d.ts +2 -0
  45. package/dist/auth/index.d.ts.map +1 -0
  46. package/dist/auth/index.js +2 -0
  47. package/dist/auth/index.js.map +1 -0
  48. package/dist/config/config.d.ts +117 -0
  49. package/dist/config/config.d.ts.map +1 -0
  50. package/dist/config/config.js +241 -0
  51. package/dist/config/config.js.map +1 -0
  52. package/dist/config/index.d.ts +2 -0
  53. package/dist/config/index.d.ts.map +1 -0
  54. package/dist/config/index.js +2 -0
  55. package/dist/config/index.js.map +1 -0
  56. package/dist/consts/index.d.ts +35 -0
  57. package/dist/consts/index.d.ts.map +1 -0
  58. package/dist/consts/index.js +35 -0
  59. package/dist/consts/index.js.map +1 -0
  60. package/dist/context/context.d.ts +123 -0
  61. package/dist/context/context.d.ts.map +1 -0
  62. package/dist/context/context.js +252 -0
  63. package/dist/context/context.js.map +1 -0
  64. package/dist/context/index.d.ts +2 -0
  65. package/dist/context/index.d.ts.map +1 -0
  66. package/dist/context/index.js +2 -0
  67. package/dist/context/index.js.map +1 -0
  68. package/dist/contracts/host-context.d.ts +132 -0
  69. package/dist/contracts/host-context.d.ts.map +1 -0
  70. package/dist/contracts/host-context.js +2 -0
  71. package/dist/contracts/host-context.js.map +1 -0
  72. package/dist/contracts/index.d.ts +8 -0
  73. package/dist/contracts/index.d.ts.map +1 -0
  74. package/dist/contracts/index.js +2 -0
  75. package/dist/contracts/index.js.map +1 -0
  76. package/dist/contracts/lifecycle.d.ts +49 -0
  77. package/dist/contracts/lifecycle.d.ts.map +1 -0
  78. package/dist/contracts/lifecycle.js +2 -0
  79. package/dist/contracts/lifecycle.js.map +1 -0
  80. package/dist/contracts/module-manifest.d.ts +110 -0
  81. package/dist/contracts/module-manifest.d.ts.map +1 -0
  82. package/dist/contracts/module-manifest.js +317 -0
  83. package/dist/contracts/module-manifest.js.map +1 -0
  84. package/dist/contracts/navigation.d.ts +36 -0
  85. package/dist/contracts/navigation.d.ts.map +1 -0
  86. package/dist/contracts/navigation.js +11 -0
  87. package/dist/contracts/navigation.js.map +1 -0
  88. package/dist/contracts/permission.d.ts +8 -0
  89. package/dist/contracts/permission.d.ts.map +1 -0
  90. package/dist/contracts/permission.js +14 -0
  91. package/dist/contracts/permission.js.map +1 -0
  92. package/dist/contracts/post-message.d.ts +124 -0
  93. package/dist/contracts/post-message.d.ts.map +1 -0
  94. package/dist/contracts/post-message.js +2 -0
  95. package/dist/contracts/post-message.js.map +1 -0
  96. package/dist/contracts/route.d.ts +45 -0
  97. package/dist/contracts/route.d.ts.map +1 -0
  98. package/dist/contracts/route.js +35 -0
  99. package/dist/contracts/route.js.map +1 -0
  100. package/dist/events/events.d.ts +191 -0
  101. package/dist/events/events.d.ts.map +1 -0
  102. package/dist/events/events.js +486 -0
  103. package/dist/events/events.js.map +1 -0
  104. package/dist/events/index.d.ts +2 -0
  105. package/dist/events/index.d.ts.map +1 -0
  106. package/dist/events/index.js +2 -0
  107. package/dist/events/index.js.map +1 -0
  108. package/dist/files/files.d.ts +138 -0
  109. package/dist/files/files.d.ts.map +1 -0
  110. package/dist/files/files.js +144 -0
  111. package/dist/files/files.js.map +1 -0
  112. package/dist/files/index.d.ts +2 -0
  113. package/dist/files/index.d.ts.map +1 -0
  114. package/dist/files/index.js +2 -0
  115. package/dist/files/index.js.map +1 -0
  116. package/dist/formatters/index.d.ts +44 -0
  117. package/dist/formatters/index.d.ts.map +1 -0
  118. package/dist/formatters/index.js +50 -0
  119. package/dist/formatters/index.js.map +1 -0
  120. package/dist/i18n/default-translator.d.ts +17 -0
  121. package/dist/i18n/default-translator.d.ts.map +1 -0
  122. package/dist/i18n/default-translator.js +19 -0
  123. package/dist/i18n/default-translator.js.map +1 -0
  124. package/dist/i18n/i18n.d.ts +248 -0
  125. package/dist/i18n/i18n.d.ts.map +1 -0
  126. package/dist/i18n/i18n.js +617 -0
  127. package/dist/i18n/i18n.js.map +1 -0
  128. package/dist/i18n/index.d.ts +2 -0
  129. package/dist/i18n/index.d.ts.map +1 -0
  130. package/dist/i18n/index.js +2 -0
  131. package/dist/i18n/index.js.map +1 -0
  132. package/dist/index.d.ts +19 -0
  133. package/dist/index.d.ts.map +1 -0
  134. package/dist/index.js +19 -0
  135. package/dist/index.js.map +1 -0
  136. package/dist/models/index.d.ts +2 -0
  137. package/dist/models/index.d.ts.map +1 -0
  138. package/dist/models/index.js +2 -0
  139. package/dist/models/index.js.map +1 -0
  140. package/dist/permissions/index.d.ts +2 -0
  141. package/dist/permissions/index.d.ts.map +1 -0
  142. package/dist/permissions/index.js +2 -0
  143. package/dist/permissions/index.js.map +1 -0
  144. package/dist/permissions/permissions.d.ts +67 -0
  145. package/dist/permissions/permissions.d.ts.map +1 -0
  146. package/dist/permissions/permissions.js +123 -0
  147. package/dist/permissions/permissions.js.map +1 -0
  148. package/dist/runtime/direct-host-bridge.d.ts +11 -0
  149. package/dist/runtime/direct-host-bridge.d.ts.map +1 -0
  150. package/dist/runtime/direct-host-bridge.js +299 -0
  151. package/dist/runtime/direct-host-bridge.js.map +1 -0
  152. package/dist/runtime/index.d.ts +5 -0
  153. package/dist/runtime/index.d.ts.map +1 -0
  154. package/dist/runtime/index.js +3 -0
  155. package/dist/runtime/index.js.map +1 -0
  156. package/dist/runtime/post-message-bridge.d.ts +20 -0
  157. package/dist/runtime/post-message-bridge.d.ts.map +1 -0
  158. package/dist/runtime/post-message-bridge.js +1115 -0
  159. package/dist/runtime/post-message-bridge.js.map +1 -0
  160. package/dist/sdk.d.ts +177 -0
  161. package/dist/sdk.d.ts.map +1 -0
  162. package/dist/sdk.js +214 -0
  163. package/dist/sdk.js.map +1 -0
  164. package/dist/storage/index.d.ts +2 -0
  165. package/dist/storage/index.d.ts.map +1 -0
  166. package/dist/storage/index.js +2 -0
  167. package/dist/storage/index.js.map +1 -0
  168. package/dist/storage/storage.d.ts +246 -0
  169. package/dist/storage/storage.d.ts.map +1 -0
  170. package/dist/storage/storage.js +358 -0
  171. package/dist/storage/storage.js.map +1 -0
  172. package/dist/types/api.d.ts +82 -0
  173. package/dist/types/api.d.ts.map +1 -0
  174. package/dist/types/api.js +2 -0
  175. package/dist/types/api.js.map +1 -0
  176. package/dist/types/appearance.d.ts +85 -0
  177. package/dist/types/appearance.d.ts.map +1 -0
  178. package/dist/types/appearance.js +48 -0
  179. package/dist/types/appearance.js.map +1 -0
  180. package/dist/types/config.d.ts +49 -0
  181. package/dist/types/config.d.ts.map +1 -0
  182. package/dist/types/config.js +2 -0
  183. package/dist/types/config.js.map +1 -0
  184. package/dist/types/context.d.ts +41 -0
  185. package/dist/types/context.d.ts.map +1 -0
  186. package/dist/types/context.js +2 -0
  187. package/dist/types/context.js.map +1 -0
  188. package/dist/types/file.d.ts +48 -0
  189. package/dist/types/file.d.ts.map +1 -0
  190. package/dist/types/file.js +2 -0
  191. package/dist/types/file.js.map +1 -0
  192. package/dist/types/index.d.ts +12 -0
  193. package/dist/types/index.d.ts.map +1 -0
  194. package/dist/types/index.js +12 -0
  195. package/dist/types/index.js.map +1 -0
  196. package/dist/types/organization.d.ts +56 -0
  197. package/dist/types/organization.d.ts.map +1 -0
  198. package/dist/types/organization.js +2 -0
  199. package/dist/types/organization.js.map +1 -0
  200. package/dist/types/pagination.d.ts +55 -0
  201. package/dist/types/pagination.d.ts.map +1 -0
  202. package/dist/types/pagination.js +13 -0
  203. package/dist/types/pagination.js.map +1 -0
  204. package/dist/types/permissions.d.ts +26 -0
  205. package/dist/types/permissions.d.ts.map +1 -0
  206. package/dist/types/permissions.js +2 -0
  207. package/dist/types/permissions.js.map +1 -0
  208. package/dist/types/space.d.ts +43 -0
  209. package/dist/types/space.d.ts.map +1 -0
  210. package/dist/types/space.js +2 -0
  211. package/dist/types/space.js.map +1 -0
  212. package/dist/types/tenant.d.ts +31 -0
  213. package/dist/types/tenant.d.ts.map +1 -0
  214. package/dist/types/tenant.js +2 -0
  215. package/dist/types/tenant.js.map +1 -0
  216. package/dist/types/user.d.ts +48 -0
  217. package/dist/types/user.d.ts.map +1 -0
  218. package/dist/types/user.js +2 -0
  219. package/dist/types/user.js.map +1 -0
  220. package/dist/utils/date.d.ts +9 -0
  221. package/dist/utils/date.d.ts.map +1 -0
  222. package/dist/utils/date.js +11 -0
  223. package/dist/utils/date.js.map +1 -0
  224. package/dist/utils/index.d.ts +5 -0
  225. package/dist/utils/index.d.ts.map +1 -0
  226. package/dist/utils/index.js +5 -0
  227. package/dist/utils/index.js.map +1 -0
  228. package/dist/utils/number.d.ts +11 -0
  229. package/dist/utils/number.d.ts.map +1 -0
  230. package/dist/utils/number.js +13 -0
  231. package/dist/utils/number.js.map +1 -0
  232. package/dist/utils/object.d.ts +9 -0
  233. package/dist/utils/object.d.ts.map +1 -0
  234. package/dist/utils/object.js +11 -0
  235. package/dist/utils/object.js.map +1 -0
  236. package/dist/utils/string.d.ts +9 -0
  237. package/dist/utils/string.d.ts.map +1 -0
  238. package/dist/utils/string.js +11 -0
  239. package/dist/utils/string.js.map +1 -0
  240. package/dist/validators/index.d.ts +8 -0
  241. package/dist/validators/index.d.ts.map +1 -0
  242. package/dist/validators/index.js +8 -0
  243. package/dist/validators/index.js.map +1 -0
  244. package/package.json +156 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/api/client.ts"],"names":[],"mappings":"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","sourcesContent":["import { miaixzDefaultRequestTimeoutMs, miaixzHeaders } from \"../consts/index.js\";\nimport { miaixzDefaultI18n, type MiaixzTranslator } from \"../i18n/index.js\";\nimport type { MiaixzEnvironment } from \"../types/index.js\";\nimport { isRecord } from \"../utils/object.js\";\nimport { normalizeMiaixzApiEndpoint } from \"./endpoint.js\";\nimport {\n MiaixzAbortError,\n MiaixzApiError,\n MiaixzNetworkError,\n MiaixzSdkError,\n MiaixzTimeoutError,\n} from \"./errors.js\";\nimport type {\n MiaixzHttpMethod,\n MiaixzPreparedRequest,\n MiaixzQuery,\n MiaixzQueryPrimitive,\n MiaixzRequestBody,\n MiaixzRequestInterceptor,\n MiaixzRequestOptions,\n MiaixzResponseParser,\n MiaixzResponseType,\n} from \"./request.js\";\nimport {\n isMiaixzApiEnvelope,\n isMiaixzApiSuccess,\n type MiaixzHttpResponse,\n type MiaixzResponseInterceptor,\n} from \"./response.js\";\nimport type {\n MiaixzApiTelemetryHooks,\n MiaixzErrorEvent,\n MiaixzRequestEvent,\n MiaixzResponseEvent,\n} from \"./telemetry.js\";\n\n/**\n * Supplies a bearer token to the API client on demand.\n *\n * @returns A bearer token, or `undefined` when no token is available.\n * @public\n */\nexport type MiaixzTokenProvider = () => string | undefined | Promise<string | undefined>;\n\n/**\n * Supplies a complete Authorization header value on demand.\n *\n * @returns A complete Authorization value, or `undefined` when unavailable.\n * @public\n */\nexport type MiaixzAuthorizationProvider = () => string | undefined | Promise<string | undefined>;\n\n/**\n * Supplies runtime-context headers to the API client on demand.\n *\n * @returns Runtime-context headers, or `undefined` when no context is active.\n * @public\n */\nexport type MiaixzContextHeadersProvider = () =>\n HeadersInit | undefined | Promise<HeadersInit | undefined>;\n\n/**\n * Supplies a CSRF token to a Cookie/BFF API client on demand.\n *\n * @returns A CSRF token, or `undefined` when no token is available.\n * @public\n */\nexport type MiaixzCsrfTokenProvider = () => string | undefined | Promise<string | undefined>;\n\n/**\n * Configures authoritative CSRF handling for an API client.\n *\n * @public\n */\nexport interface MiaixzCsrfOptions {\n /**\n * Determines whether Cookie/BFF write requests require a provider token.\n */\n readonly required: boolean;\n\n /**\n * Supplies the authoritative token for Cookie/BFF write requests.\n */\n readonly tokenProvider?: MiaixzCsrfTokenProvider;\n}\n\n/**\n * Configures a reusable Miaixz API client.\n *\n * @public\n */\nexport interface MiaixzApiClientOptions {\n /**\n * Base URL used to resolve relative request paths.\n */\n readonly baseUrl: string;\n\n /**\n * Environment used to validate the endpoint transport policy.\n *\n * @defaultValue \"production\"\n */\n readonly environment?: MiaixzEnvironment;\n\n /**\n * Optional Fetch implementation used to send requests.\n */\n readonly fetch?: typeof fetch;\n\n /**\n * Optional headers included with every request.\n */\n readonly headers?: HeadersInit;\n\n /**\n * Optional default Fetch credentials mode.\n *\n * @defaultValue \"same-origin\"\n */\n readonly credentials?: RequestCredentials;\n\n /**\n * Optional default request timeout in milliseconds.\n *\n * @defaultValue 30000\n */\n readonly timeoutMs?: number;\n\n /**\n * Optional default number of retry attempts.\n *\n * @defaultValue 0\n */\n readonly retry?: number;\n /**\n * Provides the complete Authorization header value, including its authentication scheme.\n */\n readonly authorizationProvider?: MiaixzAuthorizationProvider;\n /**\n * Provides a bearer token. Ignored when `authorizationProvider` returns a value.\n */\n readonly tokenProvider?: MiaixzTokenProvider;\n\n /**\n * Optional provider for active runtime-context headers.\n */\n readonly contextHeadersProvider?: MiaixzContextHeadersProvider;\n\n /**\n * Optional request interceptors executed in registration order.\n */\n readonly requestInterceptors?: readonly MiaixzRequestInterceptor[];\n\n /**\n * Optional response interceptors executed in registration order.\n */\n readonly responseInterceptors?: readonly MiaixzResponseInterceptor[];\n\n /**\n * Optional translator used for SDK-generated messages.\n */\n readonly translate?: MiaixzTranslator;\n\n /**\n * Optional authoritative CSRF policy for Cookie/BFF requests.\n */\n readonly csrf?: MiaixzCsrfOptions;\n\n /**\n * Optional observers for immutable, redacted request lifecycle events.\n */\n readonly telemetry?: MiaixzApiTelemetryHooks;\n}\n\n/**\n * Sends typed requests to Miaixz services.\n *\n * @public\n */\nexport interface MiaixzApiClient {\n /**\n * Normalized base URL used by the client.\n */\n readonly baseUrl: string;\n /**\n * Sends a request with full method and body control.\n *\n * @typeParam TResponse - Final response-data type.\n * @typeParam TBody - Request-body type.\n * @param path - Relative or slash-relative same-origin request path.\n * @param options - Optional request behavior and response parser.\n * @returns The final parsed HTTP response.\n * @throws MiaixzSdkError When request validation, transport, or response handling fails.\n */\n request<TResponse = unknown, TBody extends MiaixzRequestBody = MiaixzRequestBody>(\n path: string,\n options?: MiaixzRequestOptions<TResponse, TBody>,\n ): Promise<MiaixzHttpResponse<TResponse>>;\n /**\n * Sends a GET request.\n *\n * @typeParam TResponse - Final response-data type.\n * @param path - Relative or slash-relative same-origin request path.\n * @param options - Optional GET behavior and response parser.\n * @returns The final parsed HTTP response.\n * @throws MiaixzSdkError When request validation, transport, or response handling fails.\n */\n get<TResponse = unknown>(\n path: string,\n options?: Omit<MiaixzRequestOptions<TResponse>, \"method\" | \"body\">,\n ): Promise<MiaixzHttpResponse<TResponse>>;\n /**\n * Sends a POST request.\n *\n * @typeParam TResponse - Final response-data type.\n * @typeParam TBody - Request-body type.\n * @param path - Relative or slash-relative same-origin request path.\n * @param body - Optional request body.\n * @param options - Optional POST behavior and response parser.\n * @returns The final parsed HTTP response.\n * @throws MiaixzSdkError When request validation, CSRF, transport, or response handling fails.\n */\n post<TResponse = unknown, TBody extends MiaixzRequestBody = MiaixzRequestBody>(\n path: string,\n body?: TBody,\n options?: Omit<MiaixzRequestOptions<TResponse, TBody>, \"method\" | \"body\">,\n ): Promise<MiaixzHttpResponse<TResponse>>;\n /**\n * Sends a PUT request.\n *\n * @typeParam TResponse - Final response-data type.\n * @typeParam TBody - Request-body type.\n * @param path - Relative or slash-relative same-origin request path.\n * @param body - Optional request body.\n * @param options - Optional PUT behavior and response parser.\n * @returns The final parsed HTTP response.\n * @throws MiaixzSdkError When request validation, CSRF, transport, or response handling fails.\n */\n put<TResponse = unknown, TBody extends MiaixzRequestBody = MiaixzRequestBody>(\n path: string,\n body?: TBody,\n options?: Omit<MiaixzRequestOptions<TResponse, TBody>, \"method\" | \"body\">,\n ): Promise<MiaixzHttpResponse<TResponse>>;\n /**\n * Sends a PATCH request.\n *\n * @typeParam TResponse - Final response-data type.\n * @typeParam TBody - Request-body type.\n * @param path - Relative or slash-relative same-origin request path.\n * @param body - Optional request body.\n * @param options - Optional PATCH behavior and response parser.\n * @returns The final parsed HTTP response.\n * @throws MiaixzSdkError When request validation, CSRF, transport, or response handling fails.\n */\n patch<TResponse = unknown, TBody extends MiaixzRequestBody = MiaixzRequestBody>(\n path: string,\n body?: TBody,\n options?: Omit<MiaixzRequestOptions<TResponse, TBody>, \"method\" | \"body\">,\n ): Promise<MiaixzHttpResponse<TResponse>>;\n /**\n * Sends a DELETE request.\n *\n * @typeParam TResponse - Final response-data type.\n * @param path - Relative or slash-relative same-origin request path.\n * @param options - Optional DELETE behavior and response parser.\n * @returns The final parsed HTTP response.\n * @throws MiaixzSdkError When request validation, CSRF, transport, or response handling fails.\n */\n delete<TResponse = unknown>(\n path: string,\n options?: Omit<MiaixzRequestOptions<TResponse>, \"method\">,\n ): Promise<MiaixzHttpResponse<TResponse>>;\n}\n\nconst retryableStatuses = new Set([408, 429, 500, 502, 503, 504]);\nconst retryableMethods = new Set<MiaixzHttpMethod>([\"GET\", \"HEAD\", \"PUT\", \"DELETE\"]);\nconst csrfProtectedMethods = new Set<MiaixzHttpMethod>([\"POST\", \"PUT\", \"PATCH\", \"DELETE\"]);\nconst contextHeaderNames = new Set([\n miaixzHeaders.traceId.toLowerCase(),\n miaixzHeaders.userId.toLowerCase(),\n miaixzHeaders.tenantId.toLowerCase(),\n miaixzHeaders.organizationId.toLowerCase(),\n miaixzHeaders.departmentId.toLowerCase(),\n miaixzHeaders.spaceId.toLowerCase(),\n miaixzHeaders.locale.toLowerCase(),\n miaixzHeaders.timezone.toLowerCase(),\n]);\n\n/**\n * Validates and normalizes an API base URL for the selected environment.\n *\n * @param value - Base URL to validate and normalize.\n * @param environment - Runtime environment controlling HTTP loopback access.\n * @param translate - Translator used for validation failures.\n * @returns Normalized base URL without trailing separators.\n * @throws MiaixzApiError When the endpoint violates the frozen transport policy.\n */\nfunction normalizeBaseUrl(\n value: string,\n environment: MiaixzEnvironment,\n translate: MiaixzTranslator,\n): string {\n const normalized = normalizeMiaixzApiEndpoint(value, environment);\n if (normalized === undefined) {\n throw new MiaixzApiError(translate(\"sdk.error.api.baseUrlInvalid\"), {\n status: 0,\n method: \"CONFIG\",\n url: \"[INVALID_URL]\",\n code: \"API_BASE_URL_INVALID\",\n });\n }\n return normalized;\n}\n\n/**\n * Validates a positive finite timeout value.\n *\n * @param value - Timeout value in milliseconds.\n * @param translate - Translator used for validation failures.\n * @returns Validated timeout value.\n */\nfunction normalizeTimeout(value: number, translate: MiaixzTranslator): number {\n if (!Number.isFinite(value) || value <= 0) {\n throw new MiaixzSdkError(translate(\"sdk.error.api.timeoutInvalid\"), {\n code: \"API_TIMEOUT_INVALID\",\n details: { timeoutMs: value },\n });\n }\n return value;\n}\n\n/**\n * Validates a non-negative integer retry count.\n *\n * @param value - Retry count to validate.\n * @param translate - Translator used for validation failures.\n * @returns Validated retry count.\n */\nfunction normalizeRetry(value: number, translate: MiaixzTranslator): number {\n if (!Number.isInteger(value) || value < 0 || value > 5) {\n throw new MiaixzSdkError(translate(\"sdk.error.api.retryInvalid\"), {\n code: \"API_RETRY_INVALID\",\n details: { retry: value },\n });\n }\n return value;\n}\n\n/**\n * Resolves and validates the response-envelope mode before a request is sent.\n *\n * @param responseType - Response body parser selected by the caller.\n * @param envelope - Optional caller-supplied envelope behavior.\n * @param translate - Translator used for validation failures.\n * @returns The initial envelope mode for the request.\n */\nfunction normalizeEnvelopeMode(\n responseType: MiaixzResponseType,\n envelope: MiaixzRequestOptions[\"envelope\"],\n translate: MiaixzTranslator,\n): \"required\" | \"optional\" | \"none\" {\n if (\n (responseType === \"text\" ||\n responseType === \"blob\" ||\n responseType === \"arrayBuffer\" ||\n responseType === \"void\") &&\n envelope !== undefined &&\n envelope !== \"none\"\n ) {\n throw new MiaixzSdkError(translate(\"sdk.error.api.envelopeModeInvalid\"), {\n code: \"API_ENVELOPE_MODE_INVALID\",\n });\n }\n if (\n responseType === \"text\" ||\n responseType === \"blob\" ||\n responseType === \"arrayBuffer\" ||\n responseType === \"void\"\n ) {\n return \"none\";\n }\n return envelope ?? \"required\";\n}\n\n/**\n * Creates a stable request-origin validation error without exposing the rejected value.\n *\n * @param translate - Translator used for the public error message.\n * @returns A safe request-origin error.\n */\nfunction createRequestOriginError(translate: MiaixzTranslator): MiaixzSdkError {\n return new MiaixzSdkError(translate(\"sdk.error.api.requestOriginInvalid\"), {\n code: \"API_REQUEST_ORIGIN_INVALID\",\n });\n}\n\n/**\n * Resolves a caller request path while rejecting every absolute or cross-origin form.\n *\n * @param baseUrl - Validated base URL used for relative resolution.\n * @param path - Caller-supplied relative or slash-relative path.\n * @param translate - Translator used for validation failures.\n * @returns A fully resolved URL on the configured origin.\n * @throws MiaixzSdkError When the path is absolute, protocol-relative, or cross-origin.\n */\nfunction resolveRequestUrl(baseUrl: string, path: string, translate: MiaixzTranslator): string {\n if (typeof path !== \"string\") throw createRequestOriginError(translate);\n const trimmedStart = path.trimStart();\n if (/^[a-z][a-z\\d+.-]*:/i.test(trimmedStart) || /^[\\\\/]{2}/.test(trimmedStart)) {\n throw createRequestOriginError(translate);\n }\n\n try {\n const base = new URL(baseUrl);\n const resolved = new URL(path, `${baseUrl}/`);\n if (\n resolved.origin !== base.origin ||\n resolved.protocol !== base.protocol ||\n resolved.username !== \"\" ||\n resolved.password !== \"\"\n ) {\n throw createRequestOriginError(translate);\n }\n return resolved.href;\n } catch (cause) {\n if (cause instanceof MiaixzSdkError) throw cause;\n throw createRequestOriginError(translate);\n }\n}\n\n/**\n * Revalidates an interceptor-produced URL against the configured base origin.\n *\n * @param baseUrl - Validated base URL defining the only permitted origin.\n * @param value - Interceptor-produced URL value.\n * @param translate - Translator used for validation failures.\n * @returns A normalized absolute URL on the configured origin.\n * @throws MiaixzSdkError When the final URL resolves outside the configured origin.\n */\nfunction validatePreparedRequestUrl(\n baseUrl: string,\n value: string,\n translate: MiaixzTranslator,\n): string {\n if (typeof value !== \"string\") throw createRequestOriginError(translate);\n try {\n const base = new URL(baseUrl);\n const resolved = new URL(value, `${baseUrl}/`);\n if (\n resolved.origin !== base.origin ||\n resolved.protocol !== base.protocol ||\n resolved.username !== \"\" ||\n resolved.password !== \"\"\n ) {\n throw createRequestOriginError(translate);\n }\n return resolved.href;\n } catch (cause) {\n if (cause instanceof MiaixzSdkError) throw cause;\n throw createRequestOriginError(translate);\n }\n}\n\n/**\n * Reports whether the final request contains any runtime-context header.\n *\n * @param headers - Final request headers to inspect.\n * @param providedNames - Header names returned by the configured context provider.\n * @returns Whether at least one context header remains on the request.\n */\nfunction hasContextHeader(headers: Headers, providedNames: ReadonlySet<string>): boolean {\n return [...contextHeaderNames, ...providedNames].some((name) => headers.has(name));\n}\n\n/**\n * Computes the mandatory Fetch redirect mode from final authentication and context state.\n *\n * @param headers - Final request headers after interception.\n * @param credentials - Final Fetch credentials mode.\n * @param authenticationEnabled - Whether an authentication integration is active.\n * @param providedContextNames - Header names returned by the context provider.\n * @returns The fixed safe redirect mode for the request.\n */\nfunction resolveRedirectMode(\n headers: Headers,\n credentials: RequestCredentials | undefined,\n authenticationEnabled: boolean,\n providedContextNames: ReadonlySet<string>,\n): RequestRedirect {\n return authenticationEnabled ||\n credentials === \"include\" ||\n headers.has(miaixzHeaders.authorization) ||\n headers.has(\"Cookie\") ||\n headers.has(\"Proxy-Authorization\") ||\n headers.has(\"X-Api-Key\") ||\n headers.has(miaixzHeaders.csrfToken) ||\n hasContextHeader(headers, providedContextNames)\n ? \"error\"\n : \"follow\";\n}\n\n/**\n * Creates a CSRF failure without retaining provider output or exceptions.\n *\n * @param translate - Translator used for the public error message.\n * @returns A safe missing-token error.\n */\nfunction createCsrfTokenMissingError(translate: MiaixzTranslator): MiaixzSdkError {\n return new MiaixzSdkError(translate(\"sdk.error.api.csrfTokenMissing\"), {\n code: \"CSRF_TOKEN_MISSING\",\n });\n}\n\n/**\n * Applies the authoritative Cookie/BFF CSRF policy to final request headers.\n *\n * @param headers - Final request headers to update.\n * @param method - Final HTTP method used by Fetch.\n * @param csrf - Optional CSRF policy configured on the client.\n * @param translate - Translator used for missing-token failures.\n * @returns Promise settled after the final header policy is applied.\n * @throws MiaixzSdkError When a protected request has no non-empty provider token.\n */\nasync function applyCsrfPolicy(\n headers: Headers,\n method: MiaixzHttpMethod,\n csrf: MiaixzCsrfOptions | undefined,\n translate: MiaixzTranslator,\n): Promise<void> {\n if (csrf?.required !== true) return;\n headers.delete(miaixzHeaders.csrfToken);\n if (!csrfProtectedMethods.has(method)) return;\n\n let token: string | undefined;\n try {\n token = await csrf.tokenProvider?.();\n } catch {\n throw createCsrfTokenMissingError(translate);\n }\n if (typeof token !== \"string\" || token.trim().length === 0) {\n throw createCsrfTokenMissingError(translate);\n }\n headers.set(miaixzHeaders.csrfToken, token.trim());\n}\n\n/**\n * Converts query primitives to their URL representation.\n *\n * @param value - Query value to serialize.\n * @returns URL-compatible string representation.\n */\nfunction serializeQueryValue(value: Exclude<MiaixzQueryPrimitive, null | undefined>): string {\n return value instanceof Date ? value.toISOString() : String(value);\n}\n\n/**\n * Appends scalar or repeated query values without disturbing an existing hash.\n * `null` and `undefined` values are omitted.\n *\n * @param url - Request URL to update.\n * @param query - Optional query parameters to append.\n * @returns URL containing the serialized query parameters.\n * @public\n */\nexport function appendMiaixzQuery(url: string, query?: MiaixzQuery): string {\n if (!query) return url;\n const hashIndex = url.indexOf(\"#\");\n const hash = hashIndex >= 0 ? url.slice(hashIndex) : \"\";\n const base = hashIndex >= 0 ? url.slice(0, hashIndex) : url;\n const parameters = new URLSearchParams();\n for (const [key, rawValue] of Object.entries(query)) {\n const values = Array.isArray(rawValue) ? rawValue : [rawValue];\n for (const value of values) {\n if (value !== null && value !== undefined) parameters.append(key, serializeQueryValue(value));\n }\n }\n const serialized = parameters.toString();\n if (!serialized) return url;\n return `${base}${base.includes(\"?\") ? \"&\" : \"?\"}${serialized}${hash}`;\n}\n\n/**\n * Detects body types that Fetch can transmit without JSON serialization.\n *\n * @param value - Request body candidate to inspect.\n * @returns Whether the value is a native Fetch body.\n */\nfunction isNativeBody(value: unknown): value is BodyInit {\n return (\n typeof value === \"string\" ||\n value instanceof Blob ||\n value instanceof FormData ||\n value instanceof URLSearchParams ||\n value instanceof ArrayBuffer ||\n ArrayBuffer.isView(value) ||\n (typeof ReadableStream !== \"undefined\" && value instanceof ReadableStream)\n );\n}\n\n/**\n * Serializes plain records and arrays as JSON while preserving native bodies.\n *\n * @param body - Optional request body to serialize.\n * @param headers - Request headers updated with a JSON content type when needed.\n * @returns Native or serialized body accepted by Fetch.\n */\nfunction serializeBody(\n body: MiaixzRequestBody | undefined,\n headers: Headers,\n): BodyInit | undefined {\n if (body === undefined) return undefined;\n if (isNativeBody(body)) return body;\n if (!headers.has(\"Content-Type\")) headers.set(\"Content-Type\", \"application/json\");\n return JSON.stringify(body);\n}\n\n/**\n * Reads the standard or legacy request identifier header.\n *\n * @param headers - Response headers to inspect.\n * @returns Request identifier when the server supplied one.\n */\nfunction getRequestId(headers: Headers): string | undefined {\n return headers.get(miaixzHeaders.requestId) ?? headers.get(\"x-request-id\") ?? undefined;\n}\n\n/**\n * Determines whether the selected response mode represents a JSON API response.\n *\n * @param response - HTTP response to inspect.\n * @param responseType - Configured response parsing mode.\n * @returns Whether the response is expected to contain a JSON envelope.\n */\nfunction expectsJsonEnvelope(response: Response, responseType: MiaixzResponseType): boolean {\n if (response.status === 204 || response.status === 205 || responseType === \"void\") return false;\n if (responseType === \"json\") return true;\n if (responseType !== \"auto\") return false;\n const contentType = response.headers.get(\"content-type\")?.toLowerCase() ?? \"\";\n return contentType.includes(\"json\") || contentType.includes(\"+json\");\n}\n\n/**\n * Parses a response using the explicit mode or its Content-Type header.\n *\n * @param response - HTTP response whose body should be parsed.\n * @param responseType - Configured response parsing mode.\n * @returns Parsed response body.\n */\nasync function parseBody(response: Response, responseType: MiaixzResponseType): Promise<unknown> {\n if (responseType === \"void\" || response.status === 204 || response.status === 205)\n return undefined;\n if (responseType === \"blob\") return response.blob();\n if (responseType === \"arrayBuffer\") return response.arrayBuffer();\n if (responseType === \"text\") return response.text();\n if (responseType === \"json\") return parseJsonBody(response);\n const contentType = response.headers.get(\"content-type\")?.toLowerCase() ?? \"\";\n if (contentType.includes(\"json\") || contentType.includes(\"+json\")) return parseJsonBody(response);\n if (contentType.startsWith(\"text/\")) return response.text();\n return response.blob();\n}\n\n/**\n * Parses JSON while distinguishing an empty body from malformed non-empty JSON.\n *\n * @param response - JSON response to parse.\n * @returns Parsed JSON, or undefined when the body is empty.\n */\nasync function parseJsonBody(response: Response): Promise<unknown> {\n const fallback = response.clone();\n try {\n return await response.json();\n } catch (cause) {\n const text = await fallback.text().catch(() => undefined);\n if (text === \"\") return undefined;\n throw cause;\n }\n}\n\ninterface MiaixzProblemDetails {\n /**\n * Optional machine-readable failure code.\n */\n code?: string;\n\n /**\n * Optional request identifier used for diagnostics.\n */\n requestId?: string;\n}\n\n/**\n * Normalizes an unsuccessful HTTP body into stable problem details.\n *\n * @param body - Parsed unsuccessful response body.\n * @param response - Original HTTP response.\n * @returns Stable problem details extracted from the response.\n */\nfunction extractProblem(body: unknown, response: Response): MiaixzProblemDetails {\n if (isMiaixzApiEnvelope(body)) {\n return {\n code: isMiaixzApiSuccess(body) ? `HTTP_${response.status}` : String(body.errcode),\n };\n }\n if (!isRecord(body)) return {};\n const result: MiaixzProblemDetails = {};\n if (typeof body.code === \"string\") result.code = body.code;\n if (typeof body.requestId === \"string\") result.requestId = body.requestId;\n return result;\n}\n\n/**\n * Removes URL credentials, fragments, and query values before an error exposes the URL.\n *\n * @param value - Absolute request URL to sanitize.\n * @returns URL containing only origin, path, and redacted query keys.\n */\nfunction sanitizeErrorUrl(value: string): string {\n try {\n const url = new URL(value);\n const query = [...url.searchParams.keys()].map(\n (key) => `${encodeURIComponent(key)}=[REDACTED]`,\n );\n return `${url.origin}${url.pathname}${query.length > 0 ? `?${query.join(\"&\")}` : \"\"}`;\n } catch {\n return \"[INVALID_URL]\";\n }\n}\n\n/**\n * Wraps response parsing or runtime validation failures in the frozen SDK error contract.\n *\n * @param cause - Parser failure to preserve when it is an Error instance.\n * @param requestId - Optional server request identifier.\n * @param translate - Translator used for the public error message.\n * @returns Structured response-validation error.\n */\nfunction createResponseInvalidError(\n cause: unknown,\n requestId: string | undefined,\n translate: MiaixzTranslator,\n): MiaixzSdkError {\n const details = {\n ...(requestId === undefined ? {} : { requestId }),\n ...(cause instanceof Error ? {} : { type: typeof cause }),\n };\n return new MiaixzSdkError(translate(\"sdk.error.api.responseInvalid\"), {\n code: \"API_RESPONSE_INVALID\",\n cause,\n ...(Object.keys(details).length === 0 ? {} : { details: Object.freeze(details) }),\n });\n}\n\n/**\n * Applies an optional runtime response parser after all response interceptors.\n *\n * @typeParam T - Verified response value returned to the caller.\n * @param value - Untrusted response value after interception.\n * @param parser - Optional application runtime parser.\n * @param requestId - Optional server request identifier.\n * @param translate - Translator used for parser failures.\n * @returns Parsed response data, or the compatibility generic value when no parser exists.\n */\nfunction parseResponseData<T>(\n value: unknown,\n parser: MiaixzResponseParser<T> | undefined,\n requestId: string | undefined,\n translate: MiaixzTranslator,\n): T {\n if (!parser) return value as T;\n try {\n return parser(value);\n } catch (cause) {\n throw createResponseInvalidError(cause, requestId, translate);\n }\n}\n\n/**\n * Provides cancellation state and cleanup for a timed request.\n */\ninterface MiaixzAbortContext {\n /**\n * Signal passed to Fetch for combined cancellation and timeout handling.\n */\n signal: AbortSignal;\n\n /**\n * Reports whether the configured timeout triggered cancellation.\n */\n timedOut: () => boolean;\n\n /**\n * Removes listeners and clears the timeout.\n */\n dispose: () => void;\n}\n\n/**\n * Combines caller cancellation with an SDK timeout and returns cleanup controls.\n *\n * @param signal - Optional cancellation signal supplied by the caller.\n * @param timeoutMs - Timeout threshold in milliseconds.\n * @returns Combined abort context and cleanup controls.\n */\nfunction createAbortContext(\n signal: AbortSignal | undefined,\n timeoutMs: number,\n): MiaixzAbortContext {\n const controller = new AbortController();\n let didTimeout = false;\n const abortFromParent = () => controller.abort(signal?.reason);\n signal?.addEventListener(\"abort\", abortFromParent, { once: true });\n if (signal?.aborted) abortFromParent();\n const timeout = setTimeout(() => {\n didTimeout = true;\n controller.abort();\n }, timeoutMs);\n return {\n signal: controller.signal,\n timedOut: () => didTimeout,\n dispose: () => {\n clearTimeout(timeout);\n signal?.removeEventListener(\"abort\", abortFromParent);\n },\n };\n}\n\n/**\n * Calculates Retry-After or bounded exponential backoff in milliseconds.\n *\n * @param attempt - Zero-based retry attempt number.\n * @param response - Optional response containing a Retry-After header.\n * @returns Delay in milliseconds before the next retry.\n */\nfunction retryDelay(attempt: number, response?: Response): number {\n const retryAfter = response?.headers.get(\"retry-after\");\n if (retryAfter) {\n const seconds = Number(retryAfter);\n if (Number.isFinite(seconds)) return Math.max(0, seconds * 1000);\n const timestamp = Date.parse(retryAfter);\n if (Number.isFinite(timestamp)) return Math.max(0, timestamp - Date.now());\n }\n return Math.min(250 * 2 ** attempt, 2_000);\n}\n\n/**\n * Waits for a retry delay while remaining cancellable by the caller.\n *\n * @param milliseconds - Delay duration in milliseconds.\n * @param signal - Optional cancellation signal supplied by the caller.\n * @param translate - Translator used for cancellation errors.\n * @returns Promise that resolves after the delay.\n */\nasync function wait(\n milliseconds: number,\n signal: AbortSignal | undefined,\n translate: MiaixzTranslator,\n): Promise<void> {\n if (milliseconds <= 0) return;\n if (signal?.aborted) throw new MiaixzAbortError(signal.reason, translate);\n await new Promise<void>((resolve, reject) => {\n const complete = () => {\n signal?.removeEventListener(\"abort\", abort);\n resolve();\n };\n const timeout = setTimeout(complete, milliseconds);\n const abort = () => {\n clearTimeout(timeout);\n signal?.removeEventListener(\"abort\", abort);\n reject(new MiaixzAbortError(signal?.reason, translate));\n };\n signal?.addEventListener(\"abort\", abort, { once: true });\n });\n}\n\nconst sensitiveHeaderNames = new Set([\n \"authorization\",\n \"cookie\",\n \"set-cookie\",\n \"x-api-key\",\n \"x-csrf-token\",\n \"proxy-authorization\",\n]);\nconst sensitiveFieldNames = new Set([\n \"token\",\n \"accesstoken\",\n \"refreshtoken\",\n \"password\",\n \"secret\",\n \"apikey\",\n \"key\",\n]);\nconst telemetryMaximumDepth = 8;\nconst telemetryMaximumCollectionSize = 100;\nconst telemetryMaximumStringLength = 1_024;\nconst redactedValue = \"[REDACTED]\";\nconst truncatedValue = \"[TRUNCATED]\";\nconst circularValue = \"[CIRCULAR]\";\n\n/**\n * Describes a non-JSON value without retaining its content.\n */\ninterface MiaixzTelemetryValueSummary {\n /**\n * Contains the runtime value category.\n */\n readonly type: string;\n\n /**\n * Contains the measurable byte size, or undefined when size cannot be determined safely.\n */\n readonly bytes: number | undefined;\n}\n\n/**\n * Reports whether an object can be traversed without invoking custom collection behavior.\n *\n * @param value - Object candidate to inspect.\n * @returns Whether the value is an object literal or null-prototype record.\n */\nfunction isPlainTelemetryObject(value: object): value is Record<string, unknown> {\n const prototype = Object.getPrototypeOf(value);\n return prototype === Object.prototype || prototype === null;\n}\n\n/**\n * Normalizes a field name before comparing it with the sensitive-name registry.\n *\n * @param value - Field name to normalize.\n * @returns Lowercase field name without separators.\n */\nfunction normalizeSensitiveFieldName(value: string): string {\n return value.replace(/[-_]/g, \"\").toLowerCase();\n}\n\n/**\n * Truncates a string by Unicode code points rather than UTF-16 code units.\n *\n * @param value - String value to limit.\n * @returns Original or safely truncated string.\n */\nfunction truncateTelemetryString(value: string): string {\n const characters = [...value];\n if (characters.length <= telemetryMaximumStringLength) return value;\n return `${characters.slice(0, telemetryMaximumStringLength).join(\"\")}${truncatedValue}`;\n}\n\n/**\n * Creates a fixed safe summary for a non-JSON request-body value.\n *\n * @param value - Value whose content must not be recorded.\n * @returns Frozen type and byte-size summary.\n */\nfunction summarizeTelemetryValue(value: unknown): Readonly<MiaixzTelemetryValueSummary> {\n let type: string = typeof value;\n let bytes: number | undefined;\n if (typeof value === \"string\") {\n type = \"string\";\n bytes = new TextEncoder().encode(value).byteLength;\n } else if (value instanceof URLSearchParams) {\n type = \"URLSearchParams\";\n bytes = new TextEncoder().encode(value.toString()).byteLength;\n } else if (value instanceof Blob) {\n type = value.constructor.name || \"Blob\";\n bytes = value.size;\n } else if (value instanceof ArrayBuffer) {\n type = \"ArrayBuffer\";\n bytes = value.byteLength;\n } else if (ArrayBuffer.isView(value)) {\n type = value.constructor.name;\n bytes = value.byteLength;\n } else if (value instanceof FormData) {\n type = \"FormData\";\n } else if (typeof ReadableStream !== \"undefined\" && value instanceof ReadableStream) {\n type = \"ReadableStream\";\n } else if (value !== null && typeof value === \"object\") {\n type = value.constructor?.name || \"Object\";\n }\n return Object.freeze({ type, bytes });\n}\n\n/**\n * Recursively creates a bounded, getter-safe telemetry snapshot.\n *\n * @param value - Runtime value to sanitize.\n * @param depth - Current recursion depth.\n * @param ancestors - Objects in the active traversal path.\n * @returns Frozen safe telemetry value.\n */\nfunction sanitizeTelemetryValue(\n value: unknown,\n depth = 0,\n ancestors: ReadonlySet<object> = new Set(),\n): unknown {\n if (typeof value === \"string\") return truncateTelemetryString(value);\n if (\n value === null ||\n typeof value === \"number\" ||\n typeof value === \"boolean\" ||\n typeof value === \"undefined\"\n ) {\n return value;\n }\n if (typeof value !== \"object\") return summarizeTelemetryValue(value);\n if (ancestors.has(value)) return circularValue;\n if (depth >= telemetryMaximumDepth) return truncatedValue;\n if (!Array.isArray(value) && !isPlainTelemetryObject(value)) {\n return summarizeTelemetryValue(value);\n }\n const nextAncestors = new Set(ancestors);\n nextAncestors.add(value);\n if (Array.isArray(value)) {\n const limit = Math.min(value.length, telemetryMaximumCollectionSize);\n const result: unknown[] = [];\n for (let index = 0; index < limit; index += 1) {\n const descriptor = Object.getOwnPropertyDescriptor(value, String(index));\n result.push(\n descriptor && \"value\" in descriptor\n ? sanitizeTelemetryValue(descriptor.value, depth + 1, nextAncestors)\n : truncatedValue,\n );\n }\n if (value.length > telemetryMaximumCollectionSize) {\n result[telemetryMaximumCollectionSize - 1] = truncatedValue;\n }\n return Object.freeze(result);\n }\n const result: Record<string, unknown> = {};\n const keys = Object.keys(value);\n const limit = Math.min(keys.length, telemetryMaximumCollectionSize);\n for (let index = 0; index < limit; index += 1) {\n const key = keys[index];\n if (key === undefined) continue;\n if (sensitiveFieldNames.has(normalizeSensitiveFieldName(key))) {\n result[key] = redactedValue;\n continue;\n }\n const descriptor = Object.getOwnPropertyDescriptor(value, key);\n result[key] =\n descriptor && \"value\" in descriptor\n ? sanitizeTelemetryValue(descriptor.value, depth + 1, nextAncestors)\n : truncatedValue;\n }\n if (keys.length > telemetryMaximumCollectionSize) {\n const lastKey = keys[telemetryMaximumCollectionSize - 1];\n if (lastKey !== undefined) result[lastKey] = truncatedValue;\n }\n return Object.freeze(result);\n}\n\n/**\n * Sanitizes a request body while reducing every non-JSON body to a safe summary.\n *\n * @param body - Original or interceptor-produced request body.\n * @returns Frozen redacted JSON value or fixed non-JSON body summary.\n */\nfunction sanitizeTelemetryBody(body: unknown): unknown {\n if (\n body !== null &&\n typeof body === \"object\" &&\n (Array.isArray(body) || isPlainTelemetryObject(body))\n ) {\n return sanitizeTelemetryValue(body);\n }\n return summarizeTelemetryValue(body);\n}\n\n/**\n * Creates a frozen case-insensitive redacted header snapshot.\n *\n * @param headers - Headers to copy without exposing credentials.\n * @returns Frozen safe header record.\n */\nfunction sanitizeTelemetryHeaders(\n headers: HeadersInit | undefined,\n): Readonly<Record<string, string>> {\n const result: Record<string, string> = {};\n new Headers(headers).forEach((value, key) => {\n result[key] = sensitiveHeaderNames.has(key.toLowerCase()) ? redactedValue : value;\n });\n return Object.freeze(result);\n}\n\n/**\n * Removes URL credentials, fragments, and query values for telemetry events.\n *\n * @param value - Absolute request URL to sanitize.\n * @returns Safe URL containing only origin, path, and redacted query keys.\n */\nfunction sanitizeTelemetryUrl(value: string): string {\n return sanitizeErrorUrl(value);\n}\n\n/**\n * Resolves or securely creates the logical request identifier.\n *\n * @param headers - Request headers that receive a generated identifier.\n * @param translate - Translator used for secure-random failures.\n * @returns Caller-supplied or newly generated request identifier.\n * @throws MiaixzSdkError When secure random UUID generation is unavailable.\n */\nfunction resolveLogicalRequestId(headers: Headers, translate: MiaixzTranslator): string {\n const inherited = headers.get(miaixzHeaders.requestId);\n if (inherited) return inherited;\n if (typeof globalThis.crypto?.randomUUID !== \"function\") {\n throw new MiaixzSdkError(translate(\"sdk.error.api.cryptoUnavailable\"), {\n code: \"API_CRYPTO_UNAVAILABLE\",\n });\n }\n const requestId = globalThis.crypto.randomUUID();\n headers.set(miaixzHeaders.requestId, requestId);\n return requestId;\n}\n\n/**\n * Invokes one primary telemetry hook without allowing it to affect request behavior.\n *\n * @typeParam T - Immutable telemetry event type.\n * @param telemetry - Optional host-provided telemetry hooks.\n * @param hookName - Primary hook identifier used for error reporting.\n * @param hook - Primary hook to invoke.\n * @param event - Frozen event delivered to the hook.\n * @returns Promise settled after the hook and any hook-error observer finish.\n */\nasync function invokeTelemetryHook<T>(\n telemetry: MiaixzApiTelemetryHooks | undefined,\n hookName: \"request\" | \"response\" | \"error\",\n hook: ((event: Readonly<T>) => void | Promise<void>) | undefined,\n event: Readonly<T>,\n): Promise<void> {\n if (!hook) return;\n try {\n await hook(event);\n } catch (error) {\n try {\n telemetry?.onHookError?.(error, hookName);\n } catch {\n // Telemetry is observational; a secondary hook failure is intentionally ignored.\n }\n }\n}\n\n/**\n * Converts an unknown attempt failure to the stable public SDK error model.\n *\n * @param error - Failure caught during the request attempt.\n * @param abortContext - Attempt timeout state.\n * @param callerSignal - Optional caller cancellation signal.\n * @param timeoutMs - Attempt timeout threshold.\n * @param translate - Translator used for normalized errors.\n * @returns Stable SDK error for both telemetry and the request caller.\n */\nfunction normalizeAttemptError(\n error: unknown,\n abortContext: MiaixzAbortContext,\n callerSignal: AbortSignal | undefined,\n timeoutMs: number,\n translate: MiaixzTranslator,\n): MiaixzSdkError {\n if (error instanceof MiaixzSdkError) return error;\n if (abortContext.timedOut()) return new MiaixzTimeoutError(timeoutMs, error, translate);\n if (callerSignal?.aborted) return new MiaixzAbortError(error, translate);\n return new MiaixzNetworkError(error, translate);\n}\n\n/**\n * Creates and delivers a frozen request telemetry event.\n *\n * @param telemetry - Optional host-provided telemetry hooks.\n * @param requestId - Logical request identifier.\n * @param method - Request method.\n * @param prepared - Final request produced by interceptors.\n * @param body - Original or interceptor-produced request body.\n * @param startedAt - Attempt start timestamp.\n * @returns Promise settled after telemetry observation completes.\n */\nasync function emitRequestTelemetry(\n telemetry: MiaixzApiTelemetryHooks | undefined,\n requestId: string,\n method: MiaixzHttpMethod,\n prepared: MiaixzPreparedRequest,\n body: unknown,\n startedAt: number,\n): Promise<void> {\n const event: MiaixzRequestEvent = Object.freeze({\n requestId,\n method,\n url: sanitizeTelemetryUrl(prepared.url),\n attempt: prepared.attempt,\n headers: sanitizeTelemetryHeaders(prepared.init.headers),\n ...(body === undefined ? {} : { body: sanitizeTelemetryBody(body) }),\n startedAt,\n });\n await invokeTelemetryHook(telemetry, \"request\", telemetry?.onRequest, event);\n}\n\n/**\n * Creates and delivers a frozen response telemetry event.\n *\n * @param telemetry - Optional host-provided telemetry hooks.\n * @param requestId - Logical request identifier.\n * @param method - Request method.\n * @param prepared - Final request produced by interceptors.\n * @param response - Raw Fetch response.\n * @param startedAt - Attempt start timestamp.\n * @returns Promise settled after telemetry observation completes.\n */\nasync function emitResponseTelemetry(\n telemetry: MiaixzApiTelemetryHooks | undefined,\n requestId: string,\n method: MiaixzHttpMethod,\n prepared: MiaixzPreparedRequest,\n response: Response,\n startedAt: number,\n): Promise<void> {\n const event: MiaixzResponseEvent = Object.freeze({\n requestId,\n method,\n url: sanitizeTelemetryUrl(prepared.url),\n attempt: prepared.attempt,\n status: response.status,\n durationMs: Math.max(0, Date.now() - startedAt),\n headers: sanitizeTelemetryHeaders(response.headers),\n });\n await invokeTelemetryHook(telemetry, \"response\", telemetry?.onResponse, event);\n}\n\n/**\n * Creates and delivers a frozen failure telemetry event.\n *\n * @param telemetry - Optional host-provided telemetry hooks.\n * @param requestId - Logical request identifier.\n * @param method - Request method.\n * @param prepared - Final request produced by interceptors.\n * @param error - Normalized SDK error.\n * @param startedAt - Attempt start timestamp.\n * @returns Promise settled after telemetry observation completes.\n */\nasync function emitErrorTelemetry(\n telemetry: MiaixzApiTelemetryHooks | undefined,\n requestId: string,\n method: MiaixzHttpMethod,\n prepared: MiaixzPreparedRequest,\n error: MiaixzSdkError,\n startedAt: number,\n): Promise<void> {\n const summary = Object.freeze({ name: error.name, code: error.code, message: error.message });\n const event: MiaixzErrorEvent = Object.freeze({\n requestId,\n method,\n url: sanitizeTelemetryUrl(prepared.url),\n attempt: prepared.attempt,\n durationMs: Math.max(0, Date.now() - startedAt),\n error: summary,\n });\n await invokeTelemetryHook(telemetry, \"error\", telemetry?.onError, event);\n}\n\n/**\n * Creates a Fetch-based API client with auth, runtime context, retries, i18n,\n * and automatic `{ errcode, errmsg, data }` validation and data unwrapping.\n *\n * @param options - Endpoint and runtime adapters shared by all requests.\n * @returns A reusable typed client whose response `data` is already unwrapped.\n * @throws MiaixzApiError When the configured base URL violates the endpoint policy.\n * @throws MiaixzSdkError When no Fetch implementation is available.\n * @public\n */\nexport function createApiClient(options: MiaixzApiClientOptions): MiaixzApiClient {\n const translate = options.translate ?? miaixzDefaultI18n.t;\n const environment = options.environment ?? \"production\";\n const baseUrl = normalizeBaseUrl(options.baseUrl, environment, translate);\n const fetchImplementation = options.fetch ?? globalThis.fetch;\n if (!fetchImplementation) {\n throw new MiaixzSdkError(translate(\"sdk.error.api.fetchUnavailable\"), {\n code: \"FETCH_UNAVAILABLE\",\n });\n }\n\n const request = async <TResponse, TBody extends MiaixzRequestBody = MiaixzRequestBody>(\n path: string,\n requestOptions: MiaixzRequestOptions<TResponse, TBody> = {},\n ): Promise<MiaixzHttpResponse<TResponse>> => {\n const method = requestOptions.method ?? \"GET\";\n const url = appendMiaixzQuery(\n resolveRequestUrl(baseUrl, path, translate),\n requestOptions.query,\n );\n const timeoutMs = normalizeTimeout(\n requestOptions.timeoutMs ?? options.timeoutMs ?? miaixzDefaultRequestTimeoutMs,\n translate,\n );\n const maximumRetries = normalizeRetry(requestOptions.retry ?? options.retry ?? 0, translate);\n const responseType = requestOptions.responseType ?? \"auto\";\n const envelopeMode = normalizeEnvelopeMode(responseType, requestOptions.envelope, translate);\n const headers = new Headers(options.headers);\n const providedContextHeaderNames = new Set<string>();\n new Headers(requestOptions.headers).forEach((value, key) => headers.set(key, value));\n const authenticationEnabled =\n requestOptions.authenticate !== false &&\n (options.authorizationProvider !== undefined ||\n options.tokenProvider !== undefined ||\n options.csrf?.required === true);\n if (requestOptions.authenticate !== false) {\n const authorization = await options.authorizationProvider?.();\n const token = authorization ? undefined : await options.tokenProvider?.();\n if (!headers.has(miaixzHeaders.authorization)) {\n if (authorization) headers.set(miaixzHeaders.authorization, authorization);\n else if (token) headers.set(miaixzHeaders.authorization, `Bearer ${token}`);\n }\n }\n if (requestOptions.includeContext !== false) {\n const contextHeaders = await options.contextHeadersProvider?.();\n new Headers(contextHeaders).forEach((value, key) => {\n providedContextHeaderNames.add(key.toLowerCase());\n if (!headers.has(key)) headers.set(key, value);\n });\n }\n const logicalRequestId = resolveLogicalRequestId(headers, translate);\n const body = serializeBody(requestOptions.body, headers);\n let attempt = 0;\n\n while (true) {\n const startedAt = Date.now();\n const abortContext = createAbortContext(requestOptions.signal, timeoutMs);\n let prepared: MiaixzPreparedRequest = {\n url,\n attempt,\n init: {\n method,\n headers,\n credentials: requestOptions.credentials ?? options.credentials ?? \"same-origin\",\n signal: abortContext.signal,\n ...(body === undefined ? {} : { body }),\n },\n };\n try {\n for (const interceptor of options.requestInterceptors ?? [])\n prepared = await interceptor(prepared);\n const preparedUrl = validatePreparedRequestUrl(baseUrl, prepared.url, translate);\n const preparedHeaders = new Headers(prepared.init.headers);\n const preparedMethod = String(\n prepared.init.method ?? method,\n ).toUpperCase() as MiaixzHttpMethod;\n await applyCsrfPolicy(preparedHeaders, preparedMethod, options.csrf, translate);\n preparedHeaders.set(miaixzHeaders.requestId, logicalRequestId);\n const redirect = resolveRedirectMode(\n preparedHeaders,\n prepared.init.credentials,\n authenticationEnabled,\n providedContextHeaderNames,\n );\n prepared = {\n ...prepared,\n url: preparedUrl,\n attempt,\n init: { ...prepared.init, headers: preparedHeaders, redirect },\n };\n await emitRequestTelemetry(\n options.telemetry,\n logicalRequestId,\n method,\n prepared,\n prepared.init.body === body ? requestOptions.body : prepared.init.body,\n startedAt,\n );\n const rawResponse = await fetchImplementation(prepared.url, prepared.init);\n await emitResponseTelemetry(\n options.telemetry,\n logicalRequestId,\n method,\n prepared,\n rawResponse,\n startedAt,\n );\n let parsedBody: unknown;\n try {\n parsedBody = await parseBody(rawResponse, rawResponse.ok ? responseType : \"auto\");\n } catch (cause) {\n if (rawResponse.ok) {\n throw createResponseInvalidError(cause, getRequestId(rawResponse.headers), translate);\n }\n parsedBody = undefined;\n }\n if (!rawResponse.ok) {\n const problem = extractProblem(parsedBody, rawResponse);\n const responseRequestId = problem.requestId ?? getRequestId(rawResponse.headers);\n const httpError = new MiaixzApiError(\n translate(\"sdk.error.http\", { status: rawResponse.status }),\n {\n status: rawResponse.status,\n method,\n url: sanitizeErrorUrl(prepared.url),\n code: problem.code ?? `HTTP_${rawResponse.status}`,\n ...(responseRequestId === undefined ? {} : { requestId: responseRequestId }),\n retryable: retryableStatuses.has(rawResponse.status),\n },\n );\n const shouldRetry =\n attempt < maximumRetries &&\n retryableMethods.has(method) &&\n retryableStatuses.has(rawResponse.status);\n if (shouldRetry) {\n await emitErrorTelemetry(\n options.telemetry,\n logicalRequestId,\n method,\n prepared,\n httpError,\n startedAt,\n );\n await wait(retryDelay(attempt, rawResponse), requestOptions.signal, translate);\n attempt += 1;\n continue;\n }\n throw httpError;\n }\n const envelope = isMiaixzApiEnvelope(parsedBody) ? parsedBody : undefined;\n const effectiveEnvelopeMode =\n responseType === \"auto\" && !expectsJsonEnvelope(rawResponse, responseType)\n ? \"none\"\n : envelopeMode;\n if (\n effectiveEnvelopeMode === \"required\" &&\n expectsJsonEnvelope(rawResponse, responseType) &&\n envelope === undefined\n ) {\n const invalidEnvelopeRequestId = getRequestId(rawResponse.headers);\n throw new MiaixzApiError(translate(\"sdk.error.api.envelopeInvalid\"), {\n status: rawResponse.status,\n method,\n url: sanitizeErrorUrl(prepared.url),\n code: \"API_ENVELOPE_INVALID\",\n ...(invalidEnvelopeRequestId === undefined\n ? {}\n : { requestId: invalidEnvelopeRequestId }),\n retryable: false,\n });\n }\n if (\n effectiveEnvelopeMode !== \"none\" &&\n envelope !== undefined &&\n !isMiaixzApiSuccess(envelope)\n ) {\n const businessRequestId = getRequestId(rawResponse.headers);\n const businessCode = String(envelope.errcode);\n throw new MiaixzApiError(translate(\"sdk.error.api.business\"), {\n status: rawResponse.status,\n method,\n url: sanitizeErrorUrl(prepared.url),\n code: businessCode,\n ...(businessRequestId === undefined ? {} : { requestId: businessRequestId }),\n retryable: false,\n });\n }\n const requestId = getRequestId(rawResponse.headers);\n let result: MiaixzHttpResponse<unknown> = {\n data:\n effectiveEnvelopeMode !== \"none\" && envelope !== undefined ? envelope.data : parsedBody,\n status: rawResponse.status,\n statusText: rawResponse.statusText,\n headers: rawResponse.headers,\n url: rawResponse.url || prepared.url,\n ...(requestId === undefined ? {} : { requestId }),\n };\n for (const interceptor of options.responseInterceptors ?? [])\n result = await interceptor(result);\n const data = parseResponseData(\n result.data,\n requestOptions.parse,\n result.requestId,\n translate,\n );\n return Object.freeze({ ...result, data });\n } catch (error) {\n const normalizedError = normalizeAttemptError(\n error,\n abortContext,\n requestOptions.signal,\n timeoutMs,\n translate,\n );\n await emitErrorTelemetry(\n options.telemetry,\n logicalRequestId,\n method,\n prepared,\n normalizedError,\n startedAt,\n );\n const shouldRetryNetwork =\n !(error instanceof MiaixzSdkError) &&\n !abortContext.timedOut() &&\n !requestOptions.signal?.aborted &&\n attempt < maximumRetries &&\n retryableMethods.has(method);\n if (shouldRetryNetwork) {\n try {\n await wait(retryDelay(attempt), requestOptions.signal, translate);\n } catch (delayError) {\n const normalizedDelayError =\n delayError instanceof MiaixzSdkError\n ? delayError\n : new MiaixzAbortError(delayError, translate);\n await emitErrorTelemetry(\n options.telemetry,\n logicalRequestId,\n method,\n prepared,\n normalizedDelayError,\n startedAt,\n );\n throw normalizedDelayError;\n }\n attempt += 1;\n continue;\n }\n throw normalizedError;\n } finally {\n abortContext.dispose();\n }\n }\n };\n\n return {\n baseUrl,\n request,\n get: (path, requestOptions) => request(path, { ...requestOptions, method: \"GET\" }),\n post: (path, body, requestOptions) =>\n request(path, { ...requestOptions, method: \"POST\", ...(body === undefined ? {} : { body }) }),\n put: (path, body, requestOptions) =>\n request(path, { ...requestOptions, method: \"PUT\", ...(body === undefined ? {} : { body }) }),\n patch: (path, body, requestOptions) =>\n request(path, {\n ...requestOptions,\n method: \"PATCH\",\n ...(body === undefined ? {} : { body }),\n }),\n delete: (path, requestOptions) => request(path, { ...requestOptions, method: \"DELETE\" }),\n };\n}\n"]}
@@ -0,0 +1,10 @@
1
+ import type { MiaixzEnvironment } from "../types/index.js";
2
+ /**
3
+ * Normalizes an absolute API endpoint under the environment-specific transport policy.
4
+ *
5
+ * @param value - Untrusted endpoint value to validate.
6
+ * @param environment - Runtime environment that controls HTTP loopback access.
7
+ * @returns The normalized endpoint without trailing separators, or `undefined` when invalid.
8
+ */
9
+ export declare function normalizeMiaixzApiEndpoint(value: unknown, environment: MiaixzEnvironment): string | undefined;
10
+ //# sourceMappingURL=endpoint.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"endpoint.d.ts","sourceRoot":"","sources":["../../src/api/endpoint.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAU3D;;;;;;GAMG;AACH,wBAAgB,0BAA0B,CACxC,KAAK,EAAE,OAAO,EACd,WAAW,EAAE,iBAAiB,GAC7B,MAAM,GAAG,SAAS,CA6CpB"}
@@ -0,0 +1,51 @@
1
+ const miaixzEnvironments = new Set([
2
+ "development",
3
+ "test",
4
+ "staging",
5
+ "production",
6
+ ]);
7
+ const localHttpHostnames = new Set(["localhost", "127.0.0.1", "[::1]"]);
8
+ /**
9
+ * Normalizes an absolute API endpoint under the environment-specific transport policy.
10
+ *
11
+ * @param value - Untrusted endpoint value to validate.
12
+ * @param environment - Runtime environment that controls HTTP loopback access.
13
+ * @returns The normalized endpoint without trailing separators, or `undefined` when invalid.
14
+ */
15
+ export function normalizeMiaixzApiEndpoint(value, environment) {
16
+ const trimmed = typeof value === "string" ? value.trim() : "";
17
+ if (typeof value !== "string" ||
18
+ !miaixzEnvironments.has(environment) ||
19
+ trimmed.length === 0 ||
20
+ /\s/.test(value) ||
21
+ trimmed.includes("?") ||
22
+ trimmed.includes("#")) {
23
+ return undefined;
24
+ }
25
+ const authority = /^[a-z][a-z\d+.-]*:\/\/([^/?#]*)/i.exec(trimmed)?.[1];
26
+ if (authority?.includes("@") === true)
27
+ return undefined;
28
+ let endpoint;
29
+ try {
30
+ endpoint = new URL(trimmed);
31
+ }
32
+ catch {
33
+ return undefined;
34
+ }
35
+ if (endpoint.username !== "" ||
36
+ endpoint.password !== "" ||
37
+ endpoint.search !== "" ||
38
+ endpoint.hash !== "") {
39
+ return undefined;
40
+ }
41
+ if (endpoint.protocol === "https:") {
42
+ return endpoint.href.replace(/\/+$/, "");
43
+ }
44
+ if (endpoint.protocol === "http:" &&
45
+ (environment === "development" || environment === "test") &&
46
+ localHttpHostnames.has(endpoint.hostname)) {
47
+ return endpoint.href.replace(/\/+$/, "");
48
+ }
49
+ return undefined;
50
+ }
51
+ //# sourceMappingURL=endpoint.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"endpoint.js","sourceRoot":"","sources":["../../src/api/endpoint.ts"],"names":[],"mappings":"AAEA,MAAM,kBAAkB,GAAG,IAAI,GAAG,CAAoB;IACpD,aAAa;IACb,MAAM;IACN,SAAS;IACT,YAAY;CACb,CAAC,CAAC;AACH,MAAM,kBAAkB,GAAG,IAAI,GAAG,CAAC,CAAC,WAAW,EAAE,WAAW,EAAE,OAAO,CAAC,CAAC,CAAC;AAExE;;;;;;GAMG;AACH,MAAM,UAAU,0BAA0B,CACxC,KAAc,EACd,WAA8B;IAE9B,MAAM,OAAO,GAAG,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IAC9D,IACE,OAAO,KAAK,KAAK,QAAQ;QACzB,CAAC,kBAAkB,CAAC,GAAG,CAAC,WAAW,CAAC;QACpC,OAAO,CAAC,MAAM,KAAK,CAAC;QACpB,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC;QAChB,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC;QACrB,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,EACrB,CAAC;QACD,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,MAAM,SAAS,GAAG,kCAAkC,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IACxE,IAAI,SAAS,EAAE,QAAQ,CAAC,GAAG,CAAC,KAAK,IAAI;QAAE,OAAO,SAAS,CAAC;IAExD,IAAI,QAAa,CAAC;IAClB,IAAI,CAAC;QACH,QAAQ,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,CAAC;IAC9B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,IACE,QAAQ,CAAC,QAAQ,KAAK,EAAE;QACxB,QAAQ,CAAC,QAAQ,KAAK,EAAE;QACxB,QAAQ,CAAC,MAAM,KAAK,EAAE;QACtB,QAAQ,CAAC,IAAI,KAAK,EAAE,EACpB,CAAC;QACD,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,IAAI,QAAQ,CAAC,QAAQ,KAAK,QAAQ,EAAE,CAAC;QACnC,OAAO,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;IAC3C,CAAC;IAED,IACE,QAAQ,CAAC,QAAQ,KAAK,OAAO;QAC7B,CAAC,WAAW,KAAK,aAAa,IAAI,WAAW,KAAK,MAAM,CAAC;QACzD,kBAAkB,CAAC,GAAG,CAAC,QAAQ,CAAC,QAAQ,CAAC,EACzC,CAAC;QACD,OAAO,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;IAC3C,CAAC;IAED,OAAO,SAAS,CAAC;AACnB,CAAC","sourcesContent":["import type { MiaixzEnvironment } from \"../types/index.js\";\n\nconst miaixzEnvironments = new Set<MiaixzEnvironment>([\n \"development\",\n \"test\",\n \"staging\",\n \"production\",\n]);\nconst localHttpHostnames = new Set([\"localhost\", \"127.0.0.1\", \"[::1]\"]);\n\n/**\n * Normalizes an absolute API endpoint under the environment-specific transport policy.\n *\n * @param value - Untrusted endpoint value to validate.\n * @param environment - Runtime environment that controls HTTP loopback access.\n * @returns The normalized endpoint without trailing separators, or `undefined` when invalid.\n */\nexport function normalizeMiaixzApiEndpoint(\n value: unknown,\n environment: MiaixzEnvironment,\n): string | undefined {\n const trimmed = typeof value === \"string\" ? value.trim() : \"\";\n if (\n typeof value !== \"string\" ||\n !miaixzEnvironments.has(environment) ||\n trimmed.length === 0 ||\n /\\s/.test(value) ||\n trimmed.includes(\"?\") ||\n trimmed.includes(\"#\")\n ) {\n return undefined;\n }\n\n const authority = /^[a-z][a-z\\d+.-]*:\\/\\/([^/?#]*)/i.exec(trimmed)?.[1];\n if (authority?.includes(\"@\") === true) return undefined;\n\n let endpoint: URL;\n try {\n endpoint = new URL(trimmed);\n } catch {\n return undefined;\n }\n\n if (\n endpoint.username !== \"\" ||\n endpoint.password !== \"\" ||\n endpoint.search !== \"\" ||\n endpoint.hash !== \"\"\n ) {\n return undefined;\n }\n\n if (endpoint.protocol === \"https:\") {\n return endpoint.href.replace(/\\/+$/, \"\");\n }\n\n if (\n endpoint.protocol === \"http:\" &&\n (environment === \"development\" || environment === \"test\") &&\n localHttpHostnames.has(endpoint.hostname)\n ) {\n return endpoint.href.replace(/\\/+$/, \"\");\n }\n\n return undefined;\n}\n"]}
@@ -0,0 +1,180 @@
1
+ import type { MiaixzTranslator } from "../i18n/index.js";
2
+ /**
3
+ * Configures metadata attached to a Miaixz SDK error.
4
+ *
5
+ * @public
6
+ */
7
+ export interface MiaixzSdkErrorOptions {
8
+ /**
9
+ * Optional stable machine-readable error code.
10
+ */
11
+ readonly code?: string;
12
+ /**
13
+ * Optional diagnostic details associated with the error.
14
+ */
15
+ readonly details?: unknown;
16
+ /**
17
+ * Optional original value that caused the error.
18
+ */
19
+ readonly cause?: unknown;
20
+ }
21
+ /**
22
+ * Base class for errors created by the Miaixz SDK.
23
+ *
24
+ * @public
25
+ */
26
+ export declare class MiaixzSdkError extends Error {
27
+ /**
28
+ * Original Error preserved for local diagnostics when one was supplied.
29
+ */
30
+ readonly cause?: Error;
31
+ /**
32
+ * Stable machine-readable error code.
33
+ */
34
+ readonly code: string;
35
+ /**
36
+ * Optional diagnostic details associated with the error.
37
+ */
38
+ readonly details?: unknown;
39
+ /**
40
+ * Creates an SDK error.
41
+ *
42
+ * @param message - Localized human-readable error message.
43
+ * @param options - Stable code, diagnostic details, and original cause.
44
+ */
45
+ constructor(message: string, options?: MiaixzSdkErrorOptions);
46
+ }
47
+ /**
48
+ * Configures request and response metadata attached to an API error.
49
+ *
50
+ * @public
51
+ */
52
+ export interface MiaixzApiErrorOptions extends MiaixzSdkErrorOptions {
53
+ /**
54
+ * HTTP status code, or zero when no HTTP response exists.
55
+ */
56
+ readonly status: number;
57
+ /**
58
+ * HTTP method or request operation name.
59
+ */
60
+ readonly method: string;
61
+ /**
62
+ * URL associated with the failed request.
63
+ */
64
+ readonly url: string;
65
+ /**
66
+ * Optional request identifier returned by the server.
67
+ */
68
+ readonly requestId?: string;
69
+ /**
70
+ * Indicates whether retrying the request may succeed.
71
+ */
72
+ readonly retryable?: boolean;
73
+ }
74
+ /**
75
+ * Error returned for HTTP failures, invalid envelopes, or non-zero business codes.
76
+ *
77
+ * @public
78
+ */
79
+ export declare class MiaixzApiError extends MiaixzSdkError {
80
+ /**
81
+ * HTTP status code, or zero when no HTTP response exists.
82
+ */
83
+ readonly status: number;
84
+ /**
85
+ * HTTP method or request operation name.
86
+ */
87
+ readonly method: string;
88
+ /**
89
+ * URL associated with the failed request.
90
+ */
91
+ readonly url: string;
92
+ /**
93
+ * Optional request identifier returned by the server.
94
+ */
95
+ readonly requestId?: string;
96
+ /**
97
+ * Indicates whether retrying the request may succeed.
98
+ */
99
+ readonly retryable?: boolean;
100
+ /**
101
+ * Creates a structured API error.
102
+ *
103
+ * @param message - Backend or localized fallback message.
104
+ * @param options - Request, response, and retry metadata.
105
+ */
106
+ constructor(message: string, options: MiaixzApiErrorOptions);
107
+ }
108
+ /**
109
+ * Represents a transport failure before a valid HTTP response was received.
110
+ *
111
+ * @public
112
+ */
113
+ export declare class MiaixzNetworkError extends MiaixzSdkError {
114
+ /**
115
+ * Creates a transport error.
116
+ *
117
+ * @param cause - Original transport error.
118
+ * @param translate - Message translator.
119
+ */
120
+ constructor(cause?: unknown, translate?: MiaixzTranslator);
121
+ }
122
+ /**
123
+ * Represents a request cancelled after exceeding its configured timeout.
124
+ *
125
+ * @public
126
+ */
127
+ export declare class MiaixzTimeoutError extends MiaixzSdkError {
128
+ /**
129
+ * Timeout threshold in milliseconds that cancelled the request.
130
+ */
131
+ readonly timeoutMs: number;
132
+ /**
133
+ * Creates a timeout error.
134
+ *
135
+ * @param timeoutMs - Timeout threshold in milliseconds.
136
+ * @param cause - Original abort or transport error.
137
+ * @param translate - Message translator.
138
+ */
139
+ constructor(timeoutMs: number, cause?: unknown, translate?: MiaixzTranslator);
140
+ }
141
+ /**
142
+ * Represents cancellation requested by the caller.
143
+ *
144
+ * @public
145
+ */
146
+ export declare class MiaixzAbortError extends MiaixzSdkError {
147
+ /**
148
+ * Creates a caller-requested cancellation error.
149
+ *
150
+ * @param cause - Original cancellation reason.
151
+ * @param translate - Message translator.
152
+ */
153
+ constructor(cause?: unknown, translate?: MiaixzTranslator);
154
+ }
155
+ /**
156
+ * Determines whether a value is an error created by the Miaixz SDK.
157
+ *
158
+ * @param value - Value to inspect.
159
+ * @returns Whether `value` is an SDK-created error.
160
+ * @public
161
+ */
162
+ export declare function isMiaixzSdkError(value: unknown): value is MiaixzSdkError;
163
+ /**
164
+ * Determines whether a value contains Miaixz API request metadata.
165
+ *
166
+ * @param value - Value to inspect.
167
+ * @returns Whether `value` contains Miaixz API request metadata.
168
+ * @public
169
+ */
170
+ export declare function isMiaixzApiError(value: unknown): value is MiaixzApiError;
171
+ /**
172
+ * Converts an arbitrary thrown value into a stable SDK error.
173
+ *
174
+ * @param value - Unknown caught value.
175
+ * @param translate - Translator used for non-Error values.
176
+ * @returns The original SDK error or a normalized wrapper.
177
+ * @public
178
+ */
179
+ export declare function normalizeMiaixzError(value: unknown, translate?: MiaixzTranslator): MiaixzSdkError;
180
+ //# sourceMappingURL=errors.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../src/api/errors.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAEzD;;;;GAIG;AACH,MAAM,WAAW,qBAAqB;IACpC;;OAEG;IACH,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IAEvB;;OAEG;IACH,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC;IAE3B;;OAEG;IACH,QAAQ,CAAC,KAAK,CAAC,EAAE,OAAO,CAAC;CAC1B;AAED;;;;GAIG;AACH,qBAAa,cAAe,SAAQ,KAAK;IACvC;;OAEG;IACH,SAAiB,KAAK,CAAC,EAAE,KAAK,CAAC;IAE/B;;OAEG;IACH,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAEtB;;OAEG;IACH,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC;IAE3B;;;;;OAKG;IACH,YAAY,OAAO,EAAE,MAAM,EAAE,OAAO,GAAE,qBAA0B,EAS/D;CACF;AAED;;;;GAIG;AACH,MAAM,WAAW,qBAAsB,SAAQ,qBAAqB;IAClE;;OAEG;IACH,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IAExB;;OAEG;IACH,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IAExB;;OAEG;IACH,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IAErB;;OAEG;IACH,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAE5B;;OAEG;IACH,QAAQ,CAAC,SAAS,CAAC,EAAE,OAAO,CAAC;CAC9B;AAED;;;;GAIG;AACH,qBAAa,cAAe,SAAQ,cAAc;IAChD;;OAEG;IACH,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IAExB;;OAEG;IACH,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IAExB;;OAEG;IACH,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IAErB;;OAEG;IACH,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAE5B;;OAEG;IACH,QAAQ,CAAC,SAAS,CAAC,EAAE,OAAO,CAAC;IAE7B;;;;;OAKG;IACH,YAAY,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,qBAAqB,EAQ1D;CACF;AAED;;;;GAIG;AACH,qBAAa,kBAAmB,SAAQ,cAAc;IACpD;;;;;OAKG;IACH,YAAY,KAAK,CAAC,EAAE,OAAO,EAAE,SAAS,GAAE,gBAAgD,EAGvF;CACF;AAED;;;;GAIG;AACH,qBAAa,kBAAmB,SAAQ,cAAc;IACpD;;OAEG;IACH,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAE3B;;;;;;OAMG;IACH,YACE,SAAS,EAAE,MAAM,EACjB,KAAK,CAAC,EAAE,OAAO,EACf,SAAS,GAAE,gBAAgD,EAK5D;CACF;AAED;;;;GAIG;AACH,qBAAa,gBAAiB,SAAQ,cAAc;IAClD;;;;;OAKG;IACH,YAAY,KAAK,CAAC,EAAE,OAAO,EAAE,SAAS,GAAE,gBAAgD,EAGvF;CACF;AAED;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,cAAc,CAExE;AAED;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,cAAc,CAExE;AAED;;;;;;;GAOG;AACH,wBAAgB,oBAAoB,CAClC,KAAK,EAAE,OAAO,EACd,SAAS,GAAE,gBAAgD,GAC1D,cAAc,CAQhB"}
@@ -0,0 +1,173 @@
1
+ import { translateMiaixzDefaultMessage } from "../i18n/default-translator.js";
2
+ /**
3
+ * Base class for errors created by the Miaixz SDK.
4
+ *
5
+ * @public
6
+ */
7
+ export class MiaixzSdkError extends Error {
8
+ /**
9
+ * Stable machine-readable error code.
10
+ */
11
+ code;
12
+ /**
13
+ * Optional diagnostic details associated with the error.
14
+ */
15
+ details;
16
+ /**
17
+ * Creates an SDK error.
18
+ *
19
+ * @param message - Localized human-readable error message.
20
+ * @param options - Stable code, diagnostic details, and original cause.
21
+ */
22
+ constructor(message, options = {}) {
23
+ const safeCause = options.cause instanceof Error ? options.cause : undefined;
24
+ super(message, safeCause === undefined ? undefined : { cause: safeCause });
25
+ this.name = "MiaixzSdkError";
26
+ this.code = options.code ?? "SDK_ERROR";
27
+ if (options.details !== undefined)
28
+ this.details = options.details;
29
+ else if (options.cause !== undefined && safeCause === undefined) {
30
+ this.details = Object.freeze({ type: typeof options.cause });
31
+ }
32
+ }
33
+ }
34
+ /**
35
+ * Error returned for HTTP failures, invalid envelopes, or non-zero business codes.
36
+ *
37
+ * @public
38
+ */
39
+ export class MiaixzApiError extends MiaixzSdkError {
40
+ /**
41
+ * HTTP status code, or zero when no HTTP response exists.
42
+ */
43
+ status;
44
+ /**
45
+ * HTTP method or request operation name.
46
+ */
47
+ method;
48
+ /**
49
+ * URL associated with the failed request.
50
+ */
51
+ url;
52
+ /**
53
+ * Optional request identifier returned by the server.
54
+ */
55
+ requestId;
56
+ /**
57
+ * Indicates whether retrying the request may succeed.
58
+ */
59
+ retryable;
60
+ /**
61
+ * Creates a structured API error.
62
+ *
63
+ * @param message - Backend or localized fallback message.
64
+ * @param options - Request, response, and retry metadata.
65
+ */
66
+ constructor(message, options) {
67
+ super(message, options);
68
+ this.name = "MiaixzApiError";
69
+ this.status = options.status;
70
+ this.method = options.method;
71
+ this.url = options.url;
72
+ if (options.retryable !== undefined)
73
+ this.retryable = options.retryable;
74
+ if (options.requestId !== undefined)
75
+ this.requestId = options.requestId;
76
+ }
77
+ }
78
+ /**
79
+ * Represents a transport failure before a valid HTTP response was received.
80
+ *
81
+ * @public
82
+ */
83
+ export class MiaixzNetworkError extends MiaixzSdkError {
84
+ /**
85
+ * Creates a transport error.
86
+ *
87
+ * @param cause - Original transport error.
88
+ * @param translate - Message translator.
89
+ */
90
+ constructor(cause, translate = translateMiaixzDefaultMessage) {
91
+ super(translate("sdk.error.network"), { code: "NETWORK_ERROR", cause });
92
+ this.name = "MiaixzNetworkError";
93
+ }
94
+ }
95
+ /**
96
+ * Represents a request cancelled after exceeding its configured timeout.
97
+ *
98
+ * @public
99
+ */
100
+ export class MiaixzTimeoutError extends MiaixzSdkError {
101
+ /**
102
+ * Timeout threshold in milliseconds that cancelled the request.
103
+ */
104
+ timeoutMs;
105
+ /**
106
+ * Creates a timeout error.
107
+ *
108
+ * @param timeoutMs - Timeout threshold in milliseconds.
109
+ * @param cause - Original abort or transport error.
110
+ * @param translate - Message translator.
111
+ */
112
+ constructor(timeoutMs, cause, translate = translateMiaixzDefaultMessage) {
113
+ super(translate("sdk.error.timeout", { timeoutMs }), { code: "TIMEOUT", cause });
114
+ this.name = "MiaixzTimeoutError";
115
+ this.timeoutMs = timeoutMs;
116
+ }
117
+ }
118
+ /**
119
+ * Represents cancellation requested by the caller.
120
+ *
121
+ * @public
122
+ */
123
+ export class MiaixzAbortError extends MiaixzSdkError {
124
+ /**
125
+ * Creates a caller-requested cancellation error.
126
+ *
127
+ * @param cause - Original cancellation reason.
128
+ * @param translate - Message translator.
129
+ */
130
+ constructor(cause, translate = translateMiaixzDefaultMessage) {
131
+ super(translate("sdk.error.aborted"), { code: "ABORTED", cause });
132
+ this.name = "MiaixzAbortError";
133
+ }
134
+ }
135
+ /**
136
+ * Determines whether a value is an error created by the Miaixz SDK.
137
+ *
138
+ * @param value - Value to inspect.
139
+ * @returns Whether `value` is an SDK-created error.
140
+ * @public
141
+ */
142
+ export function isMiaixzSdkError(value) {
143
+ return value instanceof MiaixzSdkError;
144
+ }
145
+ /**
146
+ * Determines whether a value contains Miaixz API request metadata.
147
+ *
148
+ * @param value - Value to inspect.
149
+ * @returns Whether `value` contains Miaixz API request metadata.
150
+ * @public
151
+ */
152
+ export function isMiaixzApiError(value) {
153
+ return value instanceof MiaixzApiError;
154
+ }
155
+ /**
156
+ * Converts an arbitrary thrown value into a stable SDK error.
157
+ *
158
+ * @param value - Unknown caught value.
159
+ * @param translate - Translator used for non-Error values.
160
+ * @returns The original SDK error or a normalized wrapper.
161
+ * @public
162
+ */
163
+ export function normalizeMiaixzError(value, translate = translateMiaixzDefaultMessage) {
164
+ if (value instanceof MiaixzSdkError)
165
+ return value;
166
+ if (value instanceof Error) {
167
+ return new MiaixzSdkError(translate("sdk.error.unknown"), {
168
+ cause: value,
169
+ });
170
+ }
171
+ return new MiaixzSdkError(translate("sdk.error.unknown"), { cause: value });
172
+ }
173
+ //# sourceMappingURL=errors.js.map