@qiniu/miku-delivery-mp-ks
Version:
Kuaishou Mini Program SDK for Miku Delivery
58 lines (57 loc) • 2.34 kB
TypeScript
/** DNS 模块的 resolve 结果 */
export type Resolved = {
/** IP 地址 */
ip: string;
/** 域名,用于 Web 端带域名访问 */
host: string;
/** HTTP 端口 */
http: number;
/** HTTPS 端口 */
https: number;
/** HoW Proxy 端口 */
how: number;
};
export type Job = (resolved: Resolved) => void | Promise<void>;
type GetWeight<T> = (item: T, i: number) => number;
export declare function random<T>(items: T[], getWeight?: GetWeight<T>): T | null;
/**
* 代替上面的 random 方法,需要达到以下效果:
* - 同一客户端尽量将同一资源的请求调度到同一个 ECDN 节点,以发挥小程序框架的图片自动缓存能力
* - 不同客户端对同一资源的调度节点应尽量随机,以避免 ECDN 节点间负载不均衡
*/
export declare function select<T>(items: T[], clientID: string, cacheKey: string, getWeight?: GetWeight<T>): T | null;
export declare function isAbortError(e: any): boolean;
/**
* 判断是不是应该基于给定的异常来禁用目标节点
* 如果是跟目标节点无关,无须切换目标节点简单重试就能成功的异常(一般是端上自己的问题),这里返回 false,
* 对应地 dns do 逻辑不会因为该异常而将目标节点从可用集合中剔除,因此避免对后续请求的影响
*/
export declare function shouldDisableTarget(e: any): boolean;
/** Resolve 失败(服务不可用、网络问题、...) */
export declare class ResolveError extends Error {
/** 作为请求失败起因的原 error */
cause: unknown;
name: string;
constructor(
/** 作为请求失败起因的原 error */
cause: unknown);
}
/** 当前请求没有可用的 ECDN 节点 */
export declare class NoAvailableNodeError extends Error {
name: string;
}
/** 使用 Resolve 结果中的 ECDN 节点处理请求失败 */
export declare class DoWithNodeError extends Error {
/** 作为请求失败起因的原 error */
cause: unknown;
name: string;
constructor(
/** 作为请求失败起因的原 error */
cause: unknown);
}
/** Resolve 决策走 Local DNS,而不走 ECDN 节点 */
export declare class LocalDNSError extends Error {
name: string;
}
export declare function withResolved(originalUrl: string, resolved: Resolved): string;
export {};