@longzai-intelligence-transport/http-core 0.1.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.
package/dist/index.js ADDED
@@ -0,0 +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){if(te(e))return k.data(e.value);throw e.error}function A(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 j(e,t){let n=e;for(let e of t)e.onRequest&&(n=await e.onRequest(n));return n}async function M(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 N(e,t,n){let r=e;for(let e of n)e.onResponse&&(r=await e.onResponse(r,t));return r}async function P(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(F(e))return e;r=e}}return r}function F(e){return typeof e==`object`&&!!e&&`success`in e&&typeof e.success==`boolean`}function I(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 Ie(e,t){try{return await j(e,t)}catch(n){return I(await M(n,e,t))}}async function Le(e,t,n){try{return{response:await t.execute(e)}}catch(t){let r=await P(t,{status:0,headers:{},request:e},n);return F(r)?{error:r}:{error:I(r)}}}function Re(e,t,n){let{status:r,headers:i,data:a}=e,o={status:r,headers:i,request:t},s;return s=F(a)?a:{success:!0,data:a},r===401&&n&&n(),{response:s,context:o}}async function ze(e,t,n){let r=await Ie(e,t.requestInterceptors);if(!(`method`in r))return r;let i=r,a=await Le(i,n,t.responseInterceptors);if(a.error)return a.error;let{response:o,context:s}=Re(a.response,i,t.onUnauthorized);try{return await N(o,s,t.responseInterceptors)}catch(e){let n=await P(e,s,t.responseInterceptors);return F(n)?n:I(n)}}function L(e,t){return{execute:n=>ze(n,e,t),executeRequestInterceptors:t=>j(t,e.requestInterceptors),executeResponseInterceptors:(t,n)=>N(t,n,e.responseInterceptors),handleRequestError:(t,n)=>M(t,n,e.requestInterceptors),handleResponseError:(t,n)=>P(t,n,e.responseInterceptors)}}function Be(e){return{requestInterceptors:e.requestInterceptors??[],responseInterceptors:e.responseInterceptors??[],onUnauthorized:e.onUnauthorized}}function R(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 z(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 Ve(e){return{type:`bearer`,tokenProvider:e}}function He(e){return{type:`cookie`,credentials:e}}function Ue(e){return{type:`custom`,injector:e}}function We(){return{type:`none`}}function B(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:Ge(t,e,n,i)}}}async function Ge(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 V(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 H=[408,429,500,502,503,504];function Ke(e){let t=e?.maxRetries??0,n=e?.baseDelay??1e3,r=e?.retryOn??H,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 qe(e,t=1e3){return t*2**e}function U(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;return a?.response?Je(e,a.response,t,n,r):e}}}function Je(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 W(e,t,n){let r=`[${new Date().toISOString()}] [${e.toUpperCase()}]`;n===void 0?console.log(r,t):console.log(r,t,n)}function G(e){let t=e?.level??`info`,n=e?.logBody??!1,r=e?.logger??W;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 K(e){let t=e?.level??`info`,n=e?.logResponse??!1,r=e?.logger??W;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 Ye(e){return{request:G(e),response:K(e)}}function q(e){let t=[];return e.requestInterceptors&&t.push(...e.requestInterceptors),e.authStrategy?t.push(z(e.authStrategy)):e.tokenProvider&&t.push(R(e.tokenProvider)),e.csrfProvider&&t.push(B(e.csrfProvider,{headerName:e.csrfHeaderName})),t}function J(e){let t=[];return e.validation!==!1&&t.push(U(e.validation===void 0?void 0:e.validation)),e.responseInterceptors&&t.push(...e.responseInterceptors),e.responseTransformer&&t.push(V(e.responseTransformer)),t}function Y(e){return e.tokenProvider!==void 0||e.authStrategy!==void 0||e.responseTransformer!==void 0||e.csrfProvider!==void 0}function Xe(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] 以下配置项已弃用,将在未来版本中移除:
2
+ `+t.map(e=>` - ${e}`).join(`
3
+ `))}function Ze(e,t,n,r,i,a){return{url:`${e}${t}`,method:n,headers:i?.headers??{},body:r,config:i,route:a,metadata:{}}}function Qe(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 $e(e){let{baseUrl:t,timeout:n=3e4,headers:r,onUnauthorized:i}=e;Y(e)&&Xe(e);let a=q(e),o=J(e),s=A({timeout:n}),c=L({requestInterceptors:a,responseInterceptors:o,onUnauthorized:i},s);return{request:async e=>{let{route:n,params:i,query:a,body:o,config:s}=e,l=Ze(t,Qe(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 et(e){X=e}async function tt(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 nt(e,t){return setTimeout(e,t)}function Z(e){return new Promise(t=>nt(t,e))}function rt(e){return{request:async()=>{if(b(e))return e;throw Error(`模拟响应类型不匹配`)}}}function it(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 at(e,t){return{request:async()=>{if(await Z(t),b(e))return e;throw Error(`模拟响应类型不匹配`)}}}async function ot(e){throw e}function st(e){return{request:async t=>ot(e)}}function ct(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=>lt(e,t))}function lt(e,t){let n=t+e.path.map(String).join(`.`)||t.slice(0,-1)||`root`;return e.code===`invalid_type`?dt(e,n):{path:n,message:e.message,received:void 0,expected:ft(e.code)}}function ut(e){return typeof e==`object`&&!!e&&`received`in e&&`expected`in e}function dt(e,t){return ut(e)?{path:t,message:e.message,received:e.received,expected:e.expected}:{path:t,message:e.message,received:void 0,expected:`类型不匹配`}}function ft(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 pt(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 mt(e,t=`参数验证失败`){return{success:!1,error:{code:`VALIDATION_ERROR`,message:t,details:{validationErrors:Q(e)}},message:t}}function ht(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,H 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,z as createAuthStrategyInterceptor,R as createAuthTokenInterceptor,A as createAxiosAdapter,tt as createAxiosInstance,Ve as createBearerAuthStrategy,it as createConfigurableMockHttpClient,He as createCookieAuthStrategy,B as createCsrfInterceptor,Ue as createCustomAuthStrategy,at as createDelayedMockHttpClient,he as createErrorCodeSchema,st as createErrorMockHttpClient,Be as createExecutorConfigFromClientConfig,ue as createFilterQuerySchema,$e as createHttpClient,ce as createHttpPaginationSchema,L as createInterceptorExecutor,Ye as createLoggingInterceptor,G as createLoggingRequestInterceptor,K as createLoggingResponseInterceptor,rt as createMockHttpClient,We as createNoneAuthStrategy,l as createPaginatedResult,q as createRequestInterceptorsFromConfig,J as createResponseInterceptorsFromConfig,V as createResponseTransformerInterceptor,Ke as createRetryInterceptor,ct as createRouteMock,Me as createRouteResponseBuilder,Pe as createTypedEmpty,Ne as createTypedResponse,mt as createValidationErrorResponse,ht as createValidationErrorResponseFromError,U as createValidationInterceptor,W as defaultLogger,_e as defineRoute,we as defineRouteGroup,qe as exponentialBackoff,Q as extractErrorDetails,pe as getErrorMessage,me as getHttpStatus,E as isBlob,T as isFile,O as isFormDataContentType,Y as isLegacyConfig,y as isRecord,b as isType,ee as normalizePagination,D as objectToFormData,et as setHttpClientConfig,Fe as unwrapResult,pt as validateRequest,Xe as warnDeprecatedConfig};
package/package.json ADDED
@@ -0,0 +1,52 @@
1
+ {
2
+ "name": "@longzai-intelligence-transport/http-core",
3
+ "version": "0.1.0",
4
+ "keywords": [
5
+ "api",
6
+ "contract",
7
+ "http",
8
+ "utils",
9
+ "zod"
10
+ ],
11
+ "license": "UNLICENSED",
12
+ "files": [
13
+ "dist"
14
+ ],
15
+ "type": "module",
16
+ "main": "./dist/index.js",
17
+ "types": "./dist/index.d.ts",
18
+ "exports": {
19
+ ".": {
20
+ "types": "./dist/index.d.ts",
21
+ "import": "./dist/index.js"
22
+ }
23
+ },
24
+ "scripts": {
25
+ "build": "tsgo --build tsconfig/build.json && resolve-aliases -p tsconfig/build.json",
26
+ "build:prod": "NODE_ENV=production tsdown",
27
+ "prepublishOnly": "bun run build:prod",
28
+ "typecheck": "bun run typecheck:app && bun run typecheck:node && bun run typecheck:test",
29
+ "typecheck:app": "tsgo --noEmit -p tsconfig/app.json",
30
+ "typecheck:node": "tsgo --noEmit -p tsconfig/node.json",
31
+ "typecheck:test": "tsgo --noEmit -p tsconfig/test.json",
32
+ "lint": "oxlint && oxfmt --check",
33
+ "lint:fix": "oxlint --fix && oxfmt",
34
+ "test": "bun test",
35
+ "test:watch": "bun test --watch",
36
+ "test:coverage": "bun test --coverage",
37
+ "clean": "rimraf dist out .cache"
38
+ },
39
+ "dependencies": {
40
+ "@longzai-intelligence/pagination": "^0.1.0",
41
+ "@longzai-intelligence/zod-utils": "^0.0.4",
42
+ "axios": "^1.17.0"
43
+ },
44
+ "devDependencies": {
45
+ "expect-type": "^1.3.0"
46
+ },
47
+ "peerDependencies": {
48
+ "@longzai-intelligence/logger-core": "^0.0.2",
49
+ "@longzai-intelligence/shared-kernel": "^0.1.4",
50
+ "zod": "^4.4.3"
51
+ }
52
+ }