@longzai-intelligence-transport/http-core 0.1.4 → 0.1.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (2) hide show
  1. package/dist/index.js +2 -2
  2. package/package.json +2 -1
package/dist/index.js CHANGED
@@ -1,3 +1,3 @@
1
- import*as e from"zod";import{CursorPaginationParamsSchema as t,OffsetPaginationParamsSchema as n,PAGINATION_DEFAULTS as r,PaginationParamsSchema as i,SortParamsSchema as a,calculateOffset as o,calculateTotalPages as s,createCompactPaginatedResultSchema as c,createPaginatedResult as l,createPaginatedResult as u,createPaginatedResultSchema as d,createPaginationDefaults as f,createSortParamsSchema as p,normalizePagination as ee}from"@longzai-intelligence/pagination";import{createOptionalStringSchema as m,defineEnumSchema as h}from"@longzai-intelligence/zod-utils";import{isSuccess as te}from"@longzai-intelligence/shared-kernel";import g from"axios";const _=e.object({code:e.string(),message:e.string(),details:e.record(e.string(),e.unknown()).optional()}),v=t=>e.object({success:e.boolean(),data:t.optional(),message:e.string().optional(),error:_.optional(),timestamp:e.number().optional()}),ne=t=>e.object({items:e.array(t),total:e.number()}),re=e=>d(e),ie=e=>c(e),ae=v(e.void()),oe=e.object({id:e.string()}),se=i.extend({page:e.coerce.number().int().min(1).optional().default(r.page),pageSize:e.coerce.number().int().min(r.minPageSize).max(r.maxPageSize).optional().default(r.pageSize)});function ce(t){let n=t?.pageSizeField??`pageSize`,r=f({page:t?.defaultPage,pageSize:t?.defaultPageSize,maxPageSize:t?.maxPageSize,minPageSize:t?.minPageSize});return e.object({page:e.coerce.number().int().min(1).optional().default(r.page),[n]:e.coerce.number().int().min(r.minPageSize).max(r.maxPageSize).optional().default(r.pageSize)})}const le=e.object({filter:m(),sortBy:a.shape.sortBy,sortOrder:a.shape.sortOrder});function ue(t){let n=p(t);return e.object({filter:m(),sortBy:n.shape.sortBy,sortOrder:n.shape.sortOrder})}const de=e.object({startDate:m(),endDate:m()}),fe=e.object({keyword:m()});function y(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}function b(e){return e!=null}const x=h([`UNKNOWN`,`INVALID_PARAMETER`,`RESOURCE_NOT_FOUND`,`RESOURCE_ALREADY_EXISTS`,`OPERATION_FAILED`,`PERMISSION_DENIED`,`UNAUTHORIZED`,`TOKEN_EXPIRED`,`TOKEN_INVALID`,`LOGIN_FAILED`,`ACCOUNT_DISABLED`,`PASSWORD_INCORRECT`,`DATABASE_ERROR`,`EXTERNAL_SERVICE_ERROR`,`RATE_LIMIT_EXCEEDED`,`DUPLICATE_REQUEST`,`VALIDATION_ERROR`],`通用错误码`),S={UNKNOWN:`未知错误`,INVALID_PARAMETER:`参数无效`,RESOURCE_NOT_FOUND:`资源不存在`,RESOURCE_ALREADY_EXISTS:`资源已存在`,OPERATION_FAILED:`操作失败`,PERMISSION_DENIED:`权限不足`,UNAUTHORIZED:`未授权`,TOKEN_EXPIRED:`令牌已过期`,TOKEN_INVALID:`令牌无效`,LOGIN_FAILED:`登录失败`,ACCOUNT_DISABLED:`账户已禁用`,PASSWORD_INCORRECT:`密码错误`,DATABASE_ERROR:`数据库错误`,EXTERNAL_SERVICE_ERROR:`外部服务错误`,RATE_LIMIT_EXCEEDED:`请求频率超限`,DUPLICATE_REQUEST:`重复请求`,VALIDATION_ERROR:`参数验证失败`};function pe(e){return S[e]||S.UNKNOWN}const C={UNAUTHORIZED:401,TOKEN_EXPIRED:401,TOKEN_INVALID:401,LOGIN_FAILED:401,ACCOUNT_DISABLED:401,PASSWORD_INCORRECT:401,PERMISSION_DENIED:403,RESOURCE_NOT_FOUND:404,INVALID_PARAMETER:400,VALIDATION_ERROR:400,DATABASE_ERROR:500,EXTERNAL_SERVICE_ERROR:500};function me(e){return C[e]??400}function he(e,t){let n=[...x.options,...e];if(b(n))return h(n,t??`错误码`);throw Error(`错误码合并失败`)}const ge=e.object({code:x,message:e.string(),data:e.unknown().nullable()});function _e(e){if(b(e))return e;throw Error(`路由定义创建失败`)}function ve(e,t,n){let r=e;if(t)for(let[e,n]of Object.entries(t))r=r.replace(`:${e}`,String(n));if(n){let e=new URLSearchParams;for(let[t,r]of Object.entries(n))r!==void 0&&e.append(t,String(r));let t=e.toString();t&&(r=`${r}?${t}`)}return r}function ye(e){if(!e)return``;let t=new URLSearchParams;for(let[n,r]of Object.entries(e))r!==void 0&&t.append(n,String(r));let n=t.toString();return n?`?${n}`:``}function w(e,t){return`${e}${t}`}function be(e){return`basePath`in e?typeof e.basePath==`string`:!1}function xe(e){let{parent:t,prefix:n,version:r,auth:i,tags:a}=e,o=n??``,s,c,l;return t?(s=o===``?t.prefix:`${t.prefix}/${o}`,c=i??t.auth,l=a??t.tags):(s=r?o.startsWith(`/`)?`/${r}${o}`:o===``?`/${r}`:`/${r}/${o}`:o,c=i,l=a),{fullPrefix:s,finalAuth:c,finalTags:l}}function Se(e,t){let n={};for(let[r,i]of Object.entries(e))be(i)?n[r]=i:n[r]=t(i);return n}function Ce(e,t,n){function r(r){let i=[...n??[],...r.tags??[]],a=r.auth??t,o={...r,path:w(e,r.path),basePath:r.path,tags:i.length>0?i:void 0,auth:a};if(b(o))return o;throw Error(`路由定义创建失败`)}return r}function we(e){let{routes:t}=e,{fullPrefix:n,finalAuth:r,finalTags:i}=xe(e),a=Ce(n,r,i),o=b(n)?n:void 0;if(o===void 0)throw Error(`路径前缀类型推断失败`);let s={prefix:o,version:e.version,auth:r,tags:i,defineRoute:a};if(!t){if(b(s))return s;throw Error(`路由分组创建失败`)}let c=Se(t,e=>a(e)),l={...s,routes:Object.freeze(c)};if(b(l))return l;throw Error(`路由分组创建失败`)}function T(e){return e instanceof File}function E(e){return e instanceof Blob}function D(e,t){let n=new FormData,r=new Set(t?.fileFields??[]),i=t?.arrayFormat??`brackets`,a=(e,t)=>{if(t!=null){if(T(t)||E(t)){n.append(e,t);return}if(r.has(e)&&typeof t==`string`){n.append(e,t);return}if(Array.isArray(t)){t.forEach((t,n)=>{a(i===`indices`?`${e}[${n}]`:i===`brackets`?`${e}[]`:e,t)});return}if(typeof t==`object`&&t){y(t)&&Object.entries(t).forEach(([t,n])=>{a(`${e}[${t}]`,n)});return}n.append(e,String(t))}};return Object.entries(e).forEach(([e,t])=>{a(e,t)}),n}function O(e){return e===`formData`}function Te(e){return{hasParams:`params`in e&&e.params!==void 0,hasQuery:`query`in e&&e.query!==void 0,hasBody:`body`in e&&e.body!==void 0}}function Ee(e,t){return t&&y(e)&&!(e instanceof FormData)?D(e):e}function De(e,t){let n=Te(e),r=O(e.contentType),i=e.method!==`GET`&&e.method!==`DELETE`,a=(...a)=>{let o=0,s=n.hasParams?a[o++]:void 0,c=i&&n.hasBody?a[o++]:void 0,l=n.hasQuery?a[o]:void 0,u=Ee(c,r),d=b(s)?s:void 0,f=b(l)?l:void 0,p=b(u)?u:void 0;return t.request({route:e,params:d,query:f,body:p})};if(b(a))return a;throw Error(`路由函数创建失败`)}function Oe(e,t){let n={};for(let r in e)if(Object.prototype.hasOwnProperty.call(e,r)){let i=e[r];i&&(n[r]=De(i,t))}if(b(n))return n;throw Error(`API 函数集合创建失败`)}function ke(e,t){return Oe(e,t)}function Ae(e){return t=>ke(t,e)}const k={success(e,t){return{success:!0,data:e,message:t,timestamp:Date.now()}},data(e){return{success:!0,data:e,timestamp:Date.now()}},message(e){return{success:!0,data:void 0,message:e,timestamp:Date.now()}},fail(e,t){return{success:!1,message:e,data:t,timestamp:Date.now()}},empty(){return{success:!0,data:void 0,timestamp:Date.now()}}},je={empty(){return{items:[],total:0}},from(e){return{items:e,total:e.length}},withTotal(e,t){return{items:e,total:t}},paginated(e,t,n,r){return u(e,t,n,r)}};function Me(e){return{success:e=>k.data(e),successWithMessage:(e,t)=>k.success(e,t),fail:(e,t)=>t?{success:!1,error:t,message:e,timestamp:Date.now()}:k.fail(e),empty:()=>k.empty()}}function Ne(e){return e=>k.data(e)}function Pe(e){return()=>k.empty()}function Fe(e){return e=>e}function Ie(e){if(te(e))return k.data(e.value);throw e.error}function A(e){return e.responseType===`stream`}function Le(e){return e.responseType!==`stream`}function j(e){let t=g.create({timeout:e?.timeout??3e4});return{async execute(e){let n=await t.request({url:e.url,method:e.method,headers:e.headers,data:e.body,params:e.query,signal:e.config?.signal,timeout:e.config?.timeout});return{status:n.status,headers:b(n.headers)?n.headers:{},data:n.data}}}}async function M(e,t){let n=e;for(let e of t)e.onRequest&&(n=await e.onRequest(n));return n}async function N(e,t,n){let r=e;for(let e=n.length-1;e>=0;e--){let i=n[e];i?.onError&&(r=await i.onError(r,t))}return r}async function P(e,t,n){let r=e;for(let e of n)e.onResponse&&(r=await e.onResponse(r,t));return r}async function F(e,t,n){let r=e;for(let e=n.length-1;e>=0;e--){let i=n[e];if(i?.onError){let e=await i.onError(r,t);if(I(e))return e;r=e}}return r}function I(e){return typeof e==`object`&&!!e&&`success`in e&&typeof e.success==`boolean`}function L(e){let t={code:`UNKNOWN_ERROR`,message:`请求失败`};return e instanceof Error&&(e.message.includes(`timeout`)?(t.code=`TIMEOUT`,t.message=`请求超时`):e.message.includes(`network`)||e.message.includes(`Network`)?(t.code=`NETWORK_ERROR`,t.message=`网络错误`):t.message=e.message),{success:!1,error:t}}async function Re(e,t){try{return await M(e,t)}catch(n){return L(await N(n,e,t))}}async function ze(e,t,n){try{return{response:await t.execute(e)}}catch(t){let r=await F(t,{status:0,headers:{},request:e},n);return I(r)?{error:r}:{error:L(r)}}}function Be(e,t,n){let{status:r,headers:i,data:a}=e,o={status:r,headers:i,request:t},s;return s=I(a)?a:{success:!0,data:a},r===401&&n&&n(),{response:s,context:o}}async function Ve(e,t,n){let r=await Re(e,t.requestInterceptors);if(!(`method`in r))return r;let i=r,a=await ze(i,n,t.responseInterceptors);if(a.error)return a.error;let{response:o,context:s}=Be(a.response,i,t.onUnauthorized);try{return await P(o,s,t.responseInterceptors)}catch(e){let n=await F(e,s,t.responseInterceptors);return I(n)?n:L(n)}}function R(e,t){return{execute:n=>Ve(n,e,t),executeRequestInterceptors:t=>M(t,e.requestInterceptors),executeResponseInterceptors:(t,n)=>P(t,n,e.responseInterceptors),handleRequestError:(t,n)=>N(t,n,e.requestInterceptors),handleResponseError:(t,n)=>F(t,n,e.responseInterceptors)}}function He(e){return{requestInterceptors:e.requestInterceptors??[],responseInterceptors:e.responseInterceptors??[],onUnauthorized:e.onUnauthorized}}function z(e,t){let n=t?.withAuth??!0,r=t?.tokenPrefix??`Bearer`,i=t?.headerName??`Authorization`;return{async onRequest(t){if(!(t.config?.withAuth??n))return t;let a=await e.getToken();return a&&(t.headers[i]=`${r} ${a}`),t}}}function B(e){return{async onRequest(t){switch(e.type){case`bearer`:{let n=await e.tokenProvider.getToken();n&&(t.headers.Authorization=`Bearer ${n}`);break}case`cookie`:t.metadata.credentials=e.credentials??`include`;break;case`custom`:{let n=e.injector({url:t.url,method:t.method,headers:t.headers,params:t.params,query:t.query,body:t.body});n.headers&&Object.assign(t.headers,n.headers);break}case`none`:break}return t}}}function Ue(e){return{type:`bearer`,tokenProvider:e}}function We(e){return{type:`cookie`,credentials:e}}function Ge(e){return{type:`custom`,injector:e}}function Ke(){return{type:`none`}}function V(e,t){let n=t?.headerName??`X-CSRF-Token`,r=t?.injectAll??!1,i=t?.onTokenError??`warn`;return{async onRequest(t){return!(r||(t.route?.csrf??!1))||!(t.config?.withCsrf??!0)?t:qe(t,e,n,i)}}}async function qe(e,t,n,r){try{let r=await t.getToken();r&&(e.headers[n]=r)}catch(e){switch(r){case`warn`:console.warn(`[http-utils] CSRF 令牌获取失败:`,e);break;case`throw`:throw e;case`ignore`:break}}return e}function H(e){return{async onResponse(t,n){try{let n=e(t.data);return{success:n.success,data:n.data,message:n.message,error:n.error,timestamp:n.timestamp}}catch{return{success:!1,error:{code:`TRANSFORM_ERROR`,message:`响应转换失败`}}}}}}const U=[408,429,500,502,503,504];function Je(e){let t=e?.maxRetries??0,n=e?.baseDelay??1e3,r=e?.retryOn??U,i=e?.retryCondition,a=typeof e?.retryDelay==`function`?e.retryDelay:t=>{let r=e?.retryDelay??n*2**t;return typeof r==`number`?r:n*2**t};return{onError(e,n){let o=Number(n.request.metadata.retryCount);return o>=t||!(i?i(e,n):r.includes(n.status))?e:(n.request.metadata.retryCount=o+1,{success:!1,error:{code:`RETRY_PENDING`,message:`请求将在 ${a(o)}ms 后重试 (${o+1}/${t})`},metadata:{retryCount:o+1,retryDelay:a(o)}})}}}function Ye(e,t=1e3){return t*2**e}function W(e){let t=e?.mode??`development`,n=e?.onValidationError??`warn`,r=e?.logger,i=()=>t===!0?!0:t===!1?!1:t===`development`?process.env.NODE_ENV===`development`:!1;return{async onResponse(e,t){if(!i())return e;let a=t.request.route;if(!a||A(a))return e;let o=a.response;return o?Xe(e,o,t,n,r):e}}}function Xe(e,t,n,r,i){if(e.success&&e.data!==void 0){let a=t.safeParse(e.data);if(!a.success){let e=`响应验证失败: ${n.request.url}`;switch(r){case`warn`:i&&i.warn(e,{error:a.error});break;case`throw`:throw Error(`${e}: ${a.error}`,{cause:a.error});case`ignore`:break}}}return e}function G(e,t,n){let r=`[${new Date().toISOString()}] [${e.toUpperCase()}]`;n===void 0?console.log(r,t):console.log(r,t,n)}function K(e){let t=e?.level??`info`,n=e?.logBody??!1,r=e?.logger??G;return{onRequest(e){let i=Date.now();e.metadata.startTime=i;let a={method:e.method,url:e.url};return n&&e.body&&(a.body=e.body),r(t,`请求开始`,a),e},onError(e,t){let n=Date.now()-Number(t.metadata.startTime);return r(`error`,`请求失败`,{method:t.method,url:t.url,duration:`${n}ms`,error:e}),e}}}function q(e){let t=e?.level??`info`,n=e?.logResponse??!1,r=e?.logger??G;return{onResponse(e,i){let a=Date.now()-Number(i.request.metadata.startTime),o={method:i.request.method,url:i.request.url,status:i.status,duration:`${a}ms`,success:e.success};return n&&e.data&&(o.data=e.data),!e.success&&e.error?(o.error=e.error,r(`warn`,`请求完成(失败)`,o)):r(t,`请求完成`,o),e},onError(e,t){let n=Date.now()-Number(t.request.metadata.startTime);return r(`error`,`响应处理失败`,{method:t.request.method,url:t.request.url,status:t.status,duration:`${n}ms`,error:e}),e}}}function Ze(e){return{request:K(e),response:q(e)}}function J(e){let t=[];return e.requestInterceptors&&t.push(...e.requestInterceptors),e.authStrategy?t.push(B(e.authStrategy)):e.tokenProvider&&t.push(z(e.tokenProvider)),e.csrfProvider&&t.push(V(e.csrfProvider,{headerName:e.csrfHeaderName})),t}function Y(e){let t=[];return e.validation!==!1&&t.push(W(e.validation===void 0?void 0:e.validation)),e.responseInterceptors&&t.push(...e.responseInterceptors),e.responseTransformer&&t.push(H(e.responseTransformer)),t}function Qe(e){return e.tokenProvider!==void 0||e.authStrategy!==void 0||e.responseTransformer!==void 0||e.csrfProvider!==void 0}function $e(e){let t=[];e.tokenProvider&&t.push(`tokenProvider (使用 createAuthTokenInterceptor)`),e.authStrategy&&t.push(`authStrategy (使用 createAuthStrategyInterceptor)`),e.responseTransformer&&t.push(`responseTransformer (使用 createResponseTransformerInterceptor)`),e.csrfProvider&&t.push(`csrfProvider (使用 createCsrfInterceptor)`),t.length>0&&console.warn(`[http-utils] 以下配置项已弃用,将在未来版本中移除:
1
+ import*as e from"zod";import{CursorPaginationParamsSchema as t,OffsetPaginationParamsSchema as n,PAGINATION_DEFAULTS as r,PaginationParamsSchema as i,SortParamsSchema as a,calculateOffset as o,calculateTotalPages as s,createCompactPaginatedResultSchema as c,createPaginatedResult as l,createPaginatedResult as u,createPaginatedResultSchema as d,createPaginationDefaults as f,createSortParamsSchema as p,normalizePagination as ee}from"@longzai-intelligence/pagination";import{createOptionalStringSchema as m,defineEnumSchema as te}from"@longzai-intelligence/zod-utils";import{isSuccess as ne}from"@longzai-intelligence/shared-kernel";import h from"axios";import{createNodeLogger as g}from"@longzai-intelligence/logger-preset-node";const _=e.object({code:e.string(),message:e.string(),details:e.record(e.string(),e.unknown()).optional()}),v=t=>e.object({success:e.boolean(),data:t.optional(),message:e.string().optional(),error:_.optional(),timestamp:e.number().optional()}),re=t=>e.object({items:e.array(t),total:e.number()}),ie=e=>d(e),ae=e=>c(e),oe=v(e.void()),se=e.object({id:e.string()}),ce=i.extend({page:e.coerce.number().int().min(1).optional().default(r.page),pageSize:e.coerce.number().int().min(r.minPageSize).max(r.maxPageSize).optional().default(r.pageSize)});function le(t){let n=t?.pageSizeField??`pageSize`,r=f({page:t?.defaultPage,pageSize:t?.defaultPageSize,maxPageSize:t?.maxPageSize,minPageSize:t?.minPageSize});return e.object({page:e.coerce.number().int().min(1).optional().default(r.page),[n]:e.coerce.number().int().min(r.minPageSize).max(r.maxPageSize).optional().default(r.pageSize)})}const ue=e.object({filter:m(),sortBy:a.shape.sortBy,sortOrder:a.shape.sortOrder});function de(t){let n=p(t);return e.object({filter:m(),sortBy:n.shape.sortBy,sortOrder:n.shape.sortOrder})}const fe=e.object({startDate:m(),endDate:m()}),pe=e.object({keyword:m()});function y(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}function b(e){return e!=null}const x=te([`UNKNOWN`,`INVALID_PARAMETER`,`RESOURCE_NOT_FOUND`,`RESOURCE_ALREADY_EXISTS`,`OPERATION_FAILED`,`PERMISSION_DENIED`,`UNAUTHORIZED`,`TOKEN_EXPIRED`,`TOKEN_INVALID`,`LOGIN_FAILED`,`ACCOUNT_DISABLED`,`PASSWORD_INCORRECT`,`DATABASE_ERROR`,`EXTERNAL_SERVICE_ERROR`,`RATE_LIMIT_EXCEEDED`,`DUPLICATE_REQUEST`,`VALIDATION_ERROR`],`通用错误码`),S={UNKNOWN:`未知错误`,INVALID_PARAMETER:`参数无效`,RESOURCE_NOT_FOUND:`资源不存在`,RESOURCE_ALREADY_EXISTS:`资源已存在`,OPERATION_FAILED:`操作失败`,PERMISSION_DENIED:`权限不足`,UNAUTHORIZED:`未授权`,TOKEN_EXPIRED:`令牌已过期`,TOKEN_INVALID:`令牌无效`,LOGIN_FAILED:`登录失败`,ACCOUNT_DISABLED:`账户已禁用`,PASSWORD_INCORRECT:`密码错误`,DATABASE_ERROR:`数据库错误`,EXTERNAL_SERVICE_ERROR:`外部服务错误`,RATE_LIMIT_EXCEEDED:`请求频率超限`,DUPLICATE_REQUEST:`重复请求`,VALIDATION_ERROR:`参数验证失败`};function me(e){return S[e]||S.UNKNOWN}const he={UNAUTHORIZED:401,TOKEN_EXPIRED:401,TOKEN_INVALID:401,LOGIN_FAILED:401,ACCOUNT_DISABLED:401,PASSWORD_INCORRECT:401,PERMISSION_DENIED:403,RESOURCE_NOT_FOUND:404,INVALID_PARAMETER:400,VALIDATION_ERROR:400,DATABASE_ERROR:500,EXTERNAL_SERVICE_ERROR:500};function ge(e){return he[e]??400}function _e(e,t){let n=[...x.options,...e];if(b(n))return te(n,t??`错误码`);throw Error(`错误码合并失败`)}const ve=e.object({code:x,message:e.string(),data:e.unknown().nullable()});function ye(e){if(b(e))return e;throw Error(`路由定义创建失败`)}function be(e,t,n){let r=e;if(t)for(let[e,n]of Object.entries(t))r=r.replace(`:${e}`,String(n));if(n){let e=new URLSearchParams;for(let[t,r]of Object.entries(n))r!==void 0&&e.append(t,String(r));let t=e.toString();t&&(r=`${r}?${t}`)}return r}function xe(e){if(!e)return``;let t=new URLSearchParams;for(let[n,r]of Object.entries(e))r!==void 0&&t.append(n,String(r));let n=t.toString();return n?`?${n}`:``}function Se(e,t){return`${e}${t}`}function Ce(e){return`basePath`in e?typeof e.basePath==`string`:!1}function we(e){let{parent:t,prefix:n,version:r,auth:i,tags:a}=e,o=n??``,s,c,l;return t?(s=o===``?t.prefix:`${t.prefix}/${o}`,c=i??t.auth,l=a??t.tags):(s=r?o.startsWith(`/`)?`/${r}${o}`:o===``?`/${r}`:`/${r}/${o}`:o,c=i,l=a),{fullPrefix:s,finalAuth:c,finalTags:l}}function Te(e,t){let n={};for(let[r,i]of Object.entries(e))Ce(i)?n[r]=i:n[r]=t(i);return n}function Ee(e,t,n){function r(r){let i=[...n??[],...r.tags??[]],a=r.auth??t,o={...r,path:Se(e,r.path),basePath:r.path,tags:i.length>0?i:void 0,auth:a};if(b(o))return o;throw Error(`路由定义创建失败`)}return r}function De(e){let{routes:t}=e,{fullPrefix:n,finalAuth:r,finalTags:i}=we(e),a=Ee(n,r,i),o=b(n)?n:void 0;if(o===void 0)throw Error(`路径前缀类型推断失败`);let s={prefix:o,version:e.version,auth:r,tags:i,defineRoute:a};if(!t){if(b(s))return s;throw Error(`路由分组创建失败`)}let c=Te(t,e=>a(e)),l={...s,routes:Object.freeze(c)};if(b(l))return l;throw Error(`路由分组创建失败`)}function C(e){return e instanceof File}function w(e){return e instanceof Blob}function T(e,t){let n=new FormData,r=new Set(t?.fileFields??[]),i=t?.arrayFormat??`brackets`,a=(e,t)=>{if(t!=null){if(C(t)||w(t)){n.append(e,t);return}if(r.has(e)&&typeof t==`string`){n.append(e,t);return}if(Array.isArray(t)){t.forEach((t,n)=>{a(i===`indices`?`${e}[${n}]`:i===`brackets`?`${e}[]`:e,t)});return}if(typeof t==`object`&&t){y(t)&&Object.entries(t).forEach(([t,n])=>{a(`${e}[${t}]`,n)});return}n.append(e,String(t))}};return Object.entries(e).forEach(([e,t])=>{a(e,t)}),n}function E(e){return e===`formData`}function Oe(e){return{hasParams:`params`in e&&e.params!==void 0,hasQuery:`query`in e&&e.query!==void 0,hasBody:`body`in e&&e.body!==void 0}}function ke(e,t){return t&&y(e)&&!(e instanceof FormData)?T(e):e}function Ae(e,t){let n=Oe(e),r=E(e.contentType),i=e.method!==`GET`&&e.method!==`DELETE`,a=(...a)=>{let o=0,s=n.hasParams?a[o++]:void 0,c=i&&n.hasBody?a[o++]:void 0,l=n.hasQuery?a[o]:void 0,u=ke(c,r),d=b(s)?s:void 0,f=b(l)?l:void 0,p=b(u)?u:void 0;return t.request({route:e,params:d,query:f,body:p})};if(b(a))return a;throw Error(`路由函数创建失败`)}function je(e,t){let n={};for(let r in e)if(Object.prototype.hasOwnProperty.call(e,r)){let i=e[r];i&&(n[r]=Ae(i,t))}if(b(n))return n;throw Error(`API 函数集合创建失败`)}function Me(e,t){return je(e,t)}function Ne(e){return t=>Me(t,e)}const D={success(e,t){return{success:!0,data:e,message:t,timestamp:Date.now()}},data(e){return{success:!0,data:e,timestamp:Date.now()}},message(e){return{success:!0,data:void 0,message:e,timestamp:Date.now()}},fail(e,t){return{success:!1,message:e,data:t,timestamp:Date.now()}},empty(){return{success:!0,data:void 0,timestamp:Date.now()}}},Pe={empty(){return{items:[],total:0}},from(e){return{items:e,total:e.length}},withTotal(e,t){return{items:e,total:t}},paginated(e,t,n,r){return u(e,t,n,r)}};function Fe(e){return{success:e=>D.data(e),successWithMessage:(e,t)=>D.success(e,t),fail:(e,t)=>t?{success:!1,error:t,message:e,timestamp:Date.now()}:D.fail(e),empty:()=>D.empty()}}function Ie(e){return e=>D.data(e)}function Le(e){return()=>D.empty()}function Re(e){return e=>e}function ze(e){if(ne(e))return D.data(e.value);throw e.error}function O(e){return e.responseType===`stream`}function Be(e){return e.responseType!==`stream`}function k(e){let t=h.create({timeout:e?.timeout??3e4});return{async execute(e){let n=await t.request({url:e.url,method:e.method,headers:e.headers,data:e.body,params:e.query,signal:e.config?.signal,timeout:e.config?.timeout});return{status:n.status,headers:b(n.headers)?n.headers:{},data:n.data}}}}async function A(e,t){let n=e;for(let e of t)e.onRequest&&(n=await e.onRequest(n));return n}async function j(e,t,n){let r=e;for(let e=n.length-1;e>=0;e--){let i=n[e];i?.onError&&(r=await i.onError(r,t))}return r}async function M(e,t,n){let r=e;for(let e of n)e.onResponse&&(r=await e.onResponse(r,t));return r}async function N(e,t,n){let r=e;for(let e=n.length-1;e>=0;e--){let i=n[e];if(i?.onError){let e=await i.onError(r,t);if(P(e))return e;r=e}}return r}function P(e){return typeof e==`object`&&!!e&&`success`in e&&typeof e.success==`boolean`}function F(e){let t={code:`UNKNOWN_ERROR`,message:`请求失败`};return e instanceof Error&&(e.message.includes(`timeout`)?(t.code=`TIMEOUT`,t.message=`请求超时`):e.message.includes(`network`)||e.message.includes(`Network`)?(t.code=`NETWORK_ERROR`,t.message=`网络错误`):t.message=e.message),{success:!1,error:t}}async function Ve(e,t){try{return await A(e,t)}catch(n){return F(await j(n,e,t))}}async function He(e,t,n){try{return{response:await t.execute(e)}}catch(t){let r=await N(t,{status:0,headers:{},request:e},n);return P(r)?{error:r}:{error:F(r)}}}function Ue(e,t,n){let{status:r,headers:i,data:a}=e,o={status:r,headers:i,request:t},s;return s=P(a)?a:{success:!0,data:a},r===401&&n&&n(),{response:s,context:o}}async function We(e,t,n){let r=await Ve(e,t.requestInterceptors);if(!(`method`in r))return r;let i=r,a=await He(i,n,t.responseInterceptors);if(a.error)return a.error;let{response:o,context:s}=Ue(a.response,i,t.onUnauthorized);try{return await M(o,s,t.responseInterceptors)}catch(e){let n=await N(e,s,t.responseInterceptors);return P(n)?n:F(n)}}function I(e,t){return{execute:n=>We(n,e,t),executeRequestInterceptors:t=>A(t,e.requestInterceptors),executeResponseInterceptors:(t,n)=>M(t,n,e.responseInterceptors),handleRequestError:(t,n)=>j(t,n,e.requestInterceptors),handleResponseError:(t,n)=>N(t,n,e.responseInterceptors)}}function Ge(e){return{requestInterceptors:e.requestInterceptors??[],responseInterceptors:e.responseInterceptors??[],onUnauthorized:e.onUnauthorized}}function L(e,t){let n=t?.withAuth??!0,r=t?.tokenPrefix??`Bearer`,i=t?.headerName??`Authorization`;return{async onRequest(t){if(!(t.config?.withAuth??n))return t;let a=await e.getToken();return a&&(t.headers[i]=`${r} ${a}`),t}}}function R(e){return{async onRequest(t){switch(e.type){case`bearer`:{let n=await e.tokenProvider.getToken();n&&(t.headers.Authorization=`Bearer ${n}`);break}case`cookie`:t.metadata.credentials=e.credentials??`include`;break;case`custom`:{let n=e.injector({url:t.url,method:t.method,headers:t.headers,params:t.params,query:t.query,body:t.body});n.headers&&Object.assign(t.headers,n.headers);break}case`none`:break}return t}}}function Ke(e){return{type:`bearer`,tokenProvider:e}}function qe(e){return{type:`cookie`,credentials:e}}function Je(e){return{type:`custom`,injector:e}}function Ye(){return{type:`none`}}const Xe=g(`core/src/interceptors/csrf.interceptor`);function z(e,t){let n=t?.headerName??`X-CSRF-Token`,r=t?.injectAll??!1,i=t?.onTokenError??`warn`;return{async onRequest(t){return!(r||(t.route?.csrf??!1))||!(t.config?.withCsrf??!0)?t:Ze(t,e,n,i)}}}async function Ze(e,t,n,r){try{let r=await t.getToken();r&&(e.headers[n]=r)}catch(e){switch(r){case`warn`:Xe.warn(`[http-utils] CSRF 令牌获取失败:`,e);break;case`throw`:throw e;case`ignore`:break}}return e}function B(e){return{async onResponse(t,n){try{let n=e(t.data);return{success:n.success,data:n.data,message:n.message,error:n.error,timestamp:n.timestamp}}catch{return{success:!1,error:{code:`TRANSFORM_ERROR`,message:`响应转换失败`}}}}}}const V=[408,429,500,502,503,504];function Qe(e){let t=e?.maxRetries??0,n=e?.baseDelay??1e3,r=e?.retryOn??V,i=e?.retryCondition,a=typeof e?.retryDelay==`function`?e.retryDelay:t=>{let r=e?.retryDelay??n*2**t;return typeof r==`number`?r:n*2**t};return{onError(e,n){let o=Number(n.request.metadata.retryCount);return o>=t||!(i?i(e,n):r.includes(n.status))?e:(n.request.metadata.retryCount=o+1,{success:!1,error:{code:`RETRY_PENDING`,message:`请求将在 ${a(o)}ms 后重试 (${o+1}/${t})`},metadata:{retryCount:o+1,retryDelay:a(o)}})}}}function $e(e,t=1e3){return t*2**e}function H(e){let t=e?.mode??`development`,n=e?.onValidationError??`warn`,r=e?.logger,i=()=>t===!0?!0:t===!1?!1:t===`development`?process.env.NODE_ENV===`development`:!1;return{async onResponse(e,t){if(!i())return e;let a=t.request.route;if(!a||O(a))return e;let o=a.response;return o?et(e,o,t,n,r):e}}}function et(e,t,n,r,i){if(e.success&&e.data!==void 0){let a=t.safeParse(e.data);if(!a.success){let e=`响应验证失败: ${n.request.url}`;switch(r){case`warn`:i&&i.warn(e,{error:a.error});break;case`throw`:throw Error(`${e}: ${a.error}`,{cause:a.error});case`ignore`:break}}}return e}function U(e,t,n){let r=`[${new Date().toISOString()}] [${e.toUpperCase()}]`;n===void 0?logger.info(r,t):logger.info(r,t,n)}function W(e){let t=e?.level??`info`,n=e?.logBody??!1,r=e?.logger??U;return{onRequest(e){let i=Date.now();e.metadata.startTime=i;let a={method:e.method,url:e.url};return n&&e.body&&(a.body=e.body),r(t,`请求开始`,a),e},onError(e,t){let n=Date.now()-Number(t.metadata.startTime);return r(`error`,`请求失败`,{method:t.method,url:t.url,duration:`${n}ms`,error:e}),e}}}function G(e){let t=e?.level??`info`,n=e?.logResponse??!1,r=e?.logger??U;return{onResponse(e,i){let a=Date.now()-Number(i.request.metadata.startTime),o={method:i.request.method,url:i.request.url,status:i.status,duration:`${a}ms`,success:e.success};return n&&e.data&&(o.data=e.data),!e.success&&e.error?(o.error=e.error,r(`warn`,`请求完成(失败)`,o)):r(t,`请求完成`,o),e},onError(e,t){let n=Date.now()-Number(t.request.metadata.startTime);return r(`error`,`响应处理失败`,{method:t.request.method,url:t.request.url,status:t.status,duration:`${n}ms`,error:e}),e}}}function tt(e){return{request:W(e),response:G(e)}}const nt=g(`core/src/interceptors/legacy-converter.utils`);function K(e){let t=[];return e.requestInterceptors&&t.push(...e.requestInterceptors),e.authStrategy?t.push(R(e.authStrategy)):e.tokenProvider&&t.push(L(e.tokenProvider)),e.csrfProvider&&t.push(z(e.csrfProvider,{headerName:e.csrfHeaderName})),t}function q(e){let t=[];return e.validation!==!1&&t.push(H(e.validation===void 0?void 0:e.validation)),e.responseInterceptors&&t.push(...e.responseInterceptors),e.responseTransformer&&t.push(B(e.responseTransformer)),t}function J(e){return e.tokenProvider!==void 0||e.authStrategy!==void 0||e.responseTransformer!==void 0||e.csrfProvider!==void 0}function Y(e){let t=[];e.tokenProvider&&t.push(`tokenProvider (使用 createAuthTokenInterceptor)`),e.authStrategy&&t.push(`authStrategy (使用 createAuthStrategyInterceptor)`),e.responseTransformer&&t.push(`responseTransformer (使用 createResponseTransformerInterceptor)`),e.csrfProvider&&t.push(`csrfProvider (使用 createCsrfInterceptor)`),t.length>0&&nt.warn(`[http-utils] 以下配置项已弃用,将在未来版本中移除:
2
2
  `+t.map(e=>` - ${e}`).join(`
3
- `))}function et(e,t,n,r,i,a){return{url:`${e}${t}`,method:n,headers:i?.headers??{},body:r,config:i,route:a,metadata:{}}}function tt(e,t,n){let r=e.path;if(t&&Object.entries(t).forEach(([e,t])=>{r=r.replace(`:${e}`,String(t))}),n){let e=new URLSearchParams;Object.entries(n).forEach(([t,n])=>{n!==void 0&&e.append(t,String(n))});let t=e.toString();t&&(r=`${r}?${t}`)}return r}function nt(e){let{baseUrl:t,timeout:n=3e4,headers:r,onUnauthorized:i}=e;Qe(e)&&$e(e);let a=J(e),o=Y(e),s=j({timeout:n}),c=R({requestInterceptors:a,responseInterceptors:o,onUnauthorized:i},s);return{request:async e=>{let{route:n,params:i,query:a,body:o,config:s}=e,l=et(t,tt(n,i,a),n.method,o,{...s,headers:{...r,...s?.headers}},n),u=await c.execute(l);if(b(u))return u;throw Error(`响应类型不匹配`)}}}let X=null;function rt(e){X=e}async function it(e){let t=g.create({baseURL:X?.baseUrl||``,timeout:X?.timeout||3e4,headers:e.headers});return t.interceptors.request.use(async e=>{if(X?.tokenProvider){let t=await X.tokenProvider.getToken();t&&(e.headers.Authorization=`Bearer ${t}`)}return e},e=>Promise.reject(Error(String(e)))),t.interceptors.response.use(e=>e,async e=>(e.response?.status===401&&X?.onUnauthorized&&await X.onUnauthorized(),Promise.reject(e instanceof Error?e:Error(String(e))))),t.request(e)}function at(e,t){return setTimeout(e,t)}function Z(e){return new Promise(t=>at(t,e))}function ot(e){return{request:async()=>{if(b(e))return e;throw Error(`模拟响应类型不匹配`)}}}function st(e){return{request:async t=>{let n=`${t.route.method}:${t.route.path}`,r=e.get(n);if(!r){let e={success:!1,error:{code:`MOCK_NOT_FOUND`,message:`未找到模拟响应`}};if(b(e))return e;throw Error(`模拟响应创建失败`)}if(b(r))return r;throw Error(`模拟响应类型不匹配`)}}}function ct(e,t){return{request:async()=>{if(await Z(t),b(e))return e;throw Error(`模拟响应类型不匹配`)}}}async function lt(e){throw e}function ut(e){return{request:async t=>lt(e)}}function dt(e){return{request:async t=>{let n={route:t.route,params:t.params,query:t.query,body:t.body};for(let r of e){let e=!r.method||t.route.method===r.method,i=!r.path||t.route.path===r.path,a=!r.match||r.match(t.route,t.params,t.query,t.body);if(e&&i&&a){r.delay&&await Z(r.delay);let e=typeof r.response==`function`?r.response(n):r.response;if(b(e))return e;throw Error(`模拟响应类型不匹配`)}}let r={success:!1,error:{code:`MOCK_NOT_FOUND`,message:`未找到路由 ${t.route.method} ${t.route.path} 的模拟响应`}};if(b(r))return r;throw Error(`模拟响应创建失败`)}}}function Q(e,t=``){return e.issues.map(e=>ft(e,t))}function ft(e,t){let n=t+e.path.map(String).join(`.`)||t.slice(0,-1)||`root`;return e.code===`invalid_type`?mt(e,n):{path:n,message:e.message,received:void 0,expected:ht(e.code)}}function pt(e){return typeof e==`object`&&!!e&&`received`in e&&`expected`in e}function mt(e,t){return pt(e)?{path:t,message:e.message,received:e.received,expected:e.expected}:{path:t,message:e.message,received:void 0,expected:`类型不匹配`}}function ht(e){return{invalid_type:`类型不匹配`,invalid_literal:`字面量不匹配`,custom:`自定义验证失败`,invalid_union:`联合类型不匹配`,invalid_union_discriminator:`联合类型判别器无效`,invalid_enum_value:`枚举值无效`,invalid_arguments:`参数无效`,invalid_return_type:`返回类型无效`,invalid_date:`日期无效`,invalid_string:`字符串无效`,too_small:`值过小`,too_big:`值过大`,invalid_intersection_types:`交集类型无效`,not_multiple_of:`不是倍数`,not_finite:`值非有限`}[e]??`验证失败`}function $(e,t,n){if(!e){if(b(t))return{success:!0,data:t};let e={success:!0,data:void 0};if(b(e))return e;throw Error(`Schema 验证结果类型推断失败`)}let r=t??{},i=e.safeParse(r);return i.success?{success:!0,data:i.data}:{success:!1,details:Q(i.error,n)}}function gt(e,t){let n=[],r=$(e.params,t.params,`params.`);r.success||n.push(...r.details);let i=$(e.query,t.query,`query.`);i.success||n.push(...i.details);let a=$(e.body,t.body,`body.`);if(a.success||n.push(...a.details),n.length>0)return{success:!1,error:{code:`VALIDATION_ERROR`,message:`参数验证失败`,details:n}};let o={success:!0,params:r.success?r.data:void 0,query:i.success?i.data:void 0,body:a.success?a.data:void 0};if(b(o))return o;throw Error(`验证结果创建失败`)}function _t(e,t=`参数验证失败`){return{success:!1,error:{code:`VALIDATION_ERROR`,message:t,details:{validationErrors:Q(e)}},message:t}}function vt(e){return{success:!1,error:{code:e.code,message:e.message,details:{validationErrors:e.details}},message:e.message}}export{ie as ApiCompactPaginatedListDataSchema,ge as ApiErrorResponseSchema,_ as ApiErrorSchema,ne as ApiListDataSchema,je as ApiListDataUtil,re as ApiPaginatedListDataSchema,v as ApiResponseSchema,k as ApiResponseUtil,t as CursorPaginationParamsSchema,U as DEFAULT_RETRY_STATUS_CODES,de as DateRangeQuerySchema,C as ERROR_HTTP_STATUS,S as ERROR_MESSAGES,ae as EmptyResponseSchema,x as ErrorCodeSchema,le as FilterQuerySchema,oe as IdParamsSchema,n as OffsetPaginationParamsSchema,i as PaginationParamsSchema,se as PaginationQuerySchema,fe as SearchQuerySchema,ve as buildPath,ye as buildQuery,o as calculateOffset,s as calculateTotalPages,w as concatPath,Ae as createApiClientFactory,B as createAuthStrategyInterceptor,z as createAuthTokenInterceptor,j as createAxiosAdapter,it as createAxiosInstance,Ue as createBearerAuthStrategy,st as createConfigurableMockHttpClient,We as createCookieAuthStrategy,V as createCsrfInterceptor,Ge as createCustomAuthStrategy,ct as createDelayedMockHttpClient,he as createErrorCodeSchema,ut as createErrorMockHttpClient,He as createExecutorConfigFromClientConfig,ue as createFilterQuerySchema,nt as createHttpClient,ce as createHttpPaginationSchema,R as createInterceptorExecutor,Ze as createLoggingInterceptor,K as createLoggingRequestInterceptor,q as createLoggingResponseInterceptor,ot as createMockHttpClient,Ke as createNoneAuthStrategy,l as createPaginatedResult,J as createRequestInterceptorsFromConfig,Y as createResponseInterceptorsFromConfig,H as createResponseTransformerInterceptor,Je as createRetryInterceptor,dt as createRouteMock,Me as createRouteResponseBuilder,Pe as createTypedEmpty,Ne as createTypedResponse,Fe as createTypedStream,_t as createValidationErrorResponse,vt as createValidationErrorResponseFromError,W as createValidationInterceptor,G as defaultLogger,_e as defineRoute,we as defineRouteGroup,Ye as exponentialBackoff,Q as extractErrorDetails,pe as getErrorMessage,me as getHttpStatus,E as isBlob,T as isFile,O as isFormDataContentType,Le as isJsonRoute,Qe as isLegacyConfig,y as isRecord,A as isStreamRoute,b as isType,ee as normalizePagination,D as objectToFormData,rt as setHttpClientConfig,Ie as unwrapResult,gt as validateRequest,$e as warnDeprecatedConfig};
3
+ `))}function rt(e,t,n,r,i,a){return{url:`${e}${t}`,method:n,headers:i?.headers??{},body:r,config:i,route:a,metadata:{}}}function it(e,t,n){let r=e.path;if(t&&Object.entries(t).forEach(([e,t])=>{r=r.replace(`:${e}`,String(t))}),n){let e=new URLSearchParams;Object.entries(n).forEach(([t,n])=>{n!==void 0&&e.append(t,String(n))});let t=e.toString();t&&(r=`${r}?${t}`)}return r}function at(e){let{baseUrl:t,timeout:n=3e4,headers:r,onUnauthorized:i}=e;J(e)&&Y(e);let a=K(e),o=q(e),s=k({timeout:n}),c=I({requestInterceptors:a,responseInterceptors:o,onUnauthorized:i},s);return{request:async e=>{let{route:n,params:i,query:a,body:o,config:s}=e,l=rt(t,it(n,i,a),n.method,o,{...s,headers:{...r,...s?.headers}},n),u=await c.execute(l);if(b(u))return u;throw Error(`响应类型不匹配`)}}}let X=null;function ot(e){X=e}async function st(e){let t=h.create({baseURL:X?.baseUrl||``,timeout:X?.timeout||3e4,headers:e.headers});return t.interceptors.request.use(async e=>{if(X?.tokenProvider){let t=await X.tokenProvider.getToken();t&&(e.headers.Authorization=`Bearer ${t}`)}return e},e=>Promise.reject(Error(String(e)))),t.interceptors.response.use(e=>e,async e=>(e.response?.status===401&&X?.onUnauthorized&&await X.onUnauthorized(),Promise.reject(e instanceof Error?e:Error(String(e))))),t.request(e)}function ct(e,t){return setTimeout(e,t)}function Z(e){return new Promise(t=>ct(t,e))}function lt(e){return{request:async()=>{if(b(e))return e;throw Error(`模拟响应类型不匹配`)}}}function ut(e){return{request:async t=>{let n=`${t.route.method}:${t.route.path}`,r=e.get(n);if(!r){let e={success:!1,error:{code:`MOCK_NOT_FOUND`,message:`未找到模拟响应`}};if(b(e))return e;throw Error(`模拟响应创建失败`)}if(b(r))return r;throw Error(`模拟响应类型不匹配`)}}}function dt(e,t){return{request:async()=>{if(await Z(t),b(e))return e;throw Error(`模拟响应类型不匹配`)}}}async function ft(e){throw e}function pt(e){return{request:async t=>ft(e)}}function mt(e){return{request:async t=>{let n={route:t.route,params:t.params,query:t.query,body:t.body};for(let r of e){let e=!r.method||t.route.method===r.method,i=!r.path||t.route.path===r.path,a=!r.match||r.match(t.route,t.params,t.query,t.body);if(e&&i&&a){r.delay&&await Z(r.delay);let e=typeof r.response==`function`?r.response(n):r.response;if(b(e))return e;throw Error(`模拟响应类型不匹配`)}}let r={success:!1,error:{code:`MOCK_NOT_FOUND`,message:`未找到路由 ${t.route.method} ${t.route.path} 的模拟响应`}};if(b(r))return r;throw Error(`模拟响应创建失败`)}}}function Q(e,t=``){return e.issues.map(e=>ht(e,t))}function ht(e,t){let n=t+e.path.map(String).join(`.`)||t.slice(0,-1)||`root`;return e.code===`invalid_type`?_t(e,n):{path:n,message:e.message,received:void 0,expected:vt(e.code)}}function gt(e){return typeof e==`object`&&!!e&&`received`in e&&`expected`in e}function _t(e,t){return gt(e)?{path:t,message:e.message,received:e.received,expected:e.expected}:{path:t,message:e.message,received:void 0,expected:`类型不匹配`}}function vt(e){return{invalid_type:`类型不匹配`,invalid_literal:`字面量不匹配`,custom:`自定义验证失败`,invalid_union:`联合类型不匹配`,invalid_union_discriminator:`联合类型判别器无效`,invalid_enum_value:`枚举值无效`,invalid_arguments:`参数无效`,invalid_return_type:`返回类型无效`,invalid_date:`日期无效`,invalid_string:`字符串无效`,too_small:`值过小`,too_big:`值过大`,invalid_intersection_types:`交集类型无效`,not_multiple_of:`不是倍数`,not_finite:`值非有限`}[e]??`验证失败`}function $(e,t,n){if(!e){if(b(t))return{success:!0,data:t};let e={success:!0,data:void 0};if(b(e))return e;throw Error(`Schema 验证结果类型推断失败`)}let r=t??{},i=e.safeParse(r);return i.success?{success:!0,data:i.data}:{success:!1,details:Q(i.error,n)}}function yt(e,t){let n=[],r=$(e.params,t.params,`params.`);r.success||n.push(...r.details);let i=$(e.query,t.query,`query.`);i.success||n.push(...i.details);let a=$(e.body,t.body,`body.`);if(a.success||n.push(...a.details),n.length>0)return{success:!1,error:{code:`VALIDATION_ERROR`,message:`参数验证失败`,details:n}};let o={success:!0,params:r.success?r.data:void 0,query:i.success?i.data:void 0,body:a.success?a.data:void 0};if(b(o))return o;throw Error(`验证结果创建失败`)}function bt(e,t=`参数验证失败`){return{success:!1,error:{code:`VALIDATION_ERROR`,message:t,details:{validationErrors:Q(e)}},message:t}}function xt(e){return{success:!1,error:{code:e.code,message:e.message,details:{validationErrors:e.details}},message:e.message}}export{ae as ApiCompactPaginatedListDataSchema,ve as ApiErrorResponseSchema,_ as ApiErrorSchema,re as ApiListDataSchema,Pe as ApiListDataUtil,ie as ApiPaginatedListDataSchema,v as ApiResponseSchema,D as ApiResponseUtil,t as CursorPaginationParamsSchema,V as DEFAULT_RETRY_STATUS_CODES,fe as DateRangeQuerySchema,he as ERROR_HTTP_STATUS,S as ERROR_MESSAGES,oe as EmptyResponseSchema,x as ErrorCodeSchema,ue as FilterQuerySchema,se as IdParamsSchema,n as OffsetPaginationParamsSchema,i as PaginationParamsSchema,ce as PaginationQuerySchema,pe as SearchQuerySchema,be as buildPath,xe as buildQuery,o as calculateOffset,s as calculateTotalPages,Se as concatPath,Ne as createApiClientFactory,R as createAuthStrategyInterceptor,L as createAuthTokenInterceptor,k as createAxiosAdapter,st as createAxiosInstance,Ke as createBearerAuthStrategy,ut as createConfigurableMockHttpClient,qe as createCookieAuthStrategy,z as createCsrfInterceptor,Je as createCustomAuthStrategy,dt as createDelayedMockHttpClient,_e as createErrorCodeSchema,pt as createErrorMockHttpClient,Ge as createExecutorConfigFromClientConfig,de as createFilterQuerySchema,at as createHttpClient,le as createHttpPaginationSchema,I as createInterceptorExecutor,tt as createLoggingInterceptor,W as createLoggingRequestInterceptor,G as createLoggingResponseInterceptor,lt as createMockHttpClient,Ye as createNoneAuthStrategy,l as createPaginatedResult,K as createRequestInterceptorsFromConfig,q as createResponseInterceptorsFromConfig,B as createResponseTransformerInterceptor,Qe as createRetryInterceptor,mt as createRouteMock,Fe as createRouteResponseBuilder,Le as createTypedEmpty,Ie as createTypedResponse,Re as createTypedStream,bt as createValidationErrorResponse,xt as createValidationErrorResponseFromError,H as createValidationInterceptor,U as defaultLogger,ye as defineRoute,De as defineRouteGroup,$e as exponentialBackoff,Q as extractErrorDetails,me as getErrorMessage,ge as getHttpStatus,w as isBlob,C as isFile,E as isFormDataContentType,Be as isJsonRoute,J as isLegacyConfig,y as isRecord,O as isStreamRoute,b as isType,ee as normalizePagination,T as objectToFormData,ot as setHttpClientConfig,ze as unwrapResult,yt as validateRequest,Y as warnDeprecatedConfig};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@longzai-intelligence-transport/http-core",
3
- "version": "0.1.4",
3
+ "version": "0.1.5",
4
4
  "keywords": [
5
5
  "api",
6
6
  "contract",
@@ -37,6 +37,7 @@
37
37
  "clean": "rimraf dist out .cache"
38
38
  },
39
39
  "dependencies": {
40
+ "@longzai-intelligence/logger-preset-node": "^0.0.9",
40
41
  "@longzai-intelligence/pagination": "^0.1.0",
41
42
  "@longzai-intelligence/zod-utils": "^0.0.4",
42
43
  "axios": "^1.17.0"