dingtalk-jsapi
Version:
钉钉 模块化 多端统一 API
210 lines (209 loc) • 6.95 kB
TypeScript
export interface IErrorMessage {
/** the error code */
errorCode?: string;
/** the error message */
errorMessage?: string;
}
export interface ICallbackOption<S> {
onSuccess?(data: S): void;
onFail?(err: IErrorMessage): void;
onCancel?(err: IErrorMessage): void;
}
export declare type IJSBridge = (method: string, params: any) => Promise<any>;
export declare type ICommonAPI<S, T> = (params: S & ICallbackOption<T>) => Promise<T>;
export interface IInvokeAPIConfigMap {
[platform: string]: IAPIConfig | undefined;
}
export interface IAPIConfig {
/** the minSupport version about the API */
vs: string | {
[platformSub: string]: string;
};
invokeName?: string;
/**
* 应返回新的转换后的参数,不应直接修改传入的变量
*/
paramsDeal?: (params: any) => any | Promise<any>;
/**
* 应返回新的转换后的参数,不应直接修改传入的变量
*/
resultDeal?: (res: any) => any;
}
export interface IJSBridgeMap {
[platform: string]: IJSBridge | undefined;
}
export interface IInvokeAPIConfigMapByMethod {
[method: string]: IInvokeAPIConfigMap | undefined;
}
export declare function isFunction(param: any): boolean;
/**
* when origin >= target ,return true
* 关于为什么没有跟otherApi保持一致,主要是当初因为otherApi里的方法是复制旧版jsapi的,有一定缺陷
* 但是担心线上环境利用了缺陷来做逻辑,所以没有保持一致使用同一个方法
* TODO: 但其实另起方法太冗余,以及丑陋,后续还是需要整个统一掉
* @param origin
* @param target
*/
export declare function compareVersion(origin: string, target: string): boolean;
/**
* 客户端错误码
*/
export declare enum ERROR_CODE {
cancel = "-1",
not_exist = "1",
no_permission = "7"
}
export declare enum ENV_ENUM {
pc = "pc",
android = "android",
ios = "ios",
gdtPc = "gdtPc",
/**
* gdt Android mpaas 容器
*/
gdtAndroid = "gdtAndroid",
/**
* gdt Ios mpaas 容器
*/
gdtIos = "gdtIos",
/**
* gdt Android 标准 容器
*/
gdtStandardAndroid = "gdtStandardAndroid",
/**
* gdt Ios 标准 容器
*/
gdtStandardIos = "gdtStandardIos",
notInDingTalk = "notInDingTalk",
windows = "windows",
mac = "mac",
harmony = "harmony"
}
export declare enum ENV_ENUM_SUB {
mac = "mac",
win = "win",
noSub = "noSub"
}
export declare enum APP_TYPE {
WEB = "WEB",
MINI_APP = "MINI_APP",
WEEX = "WEEX",
WEBVIEW_IN_MINIAPP = "WEBVIEW_IN_MINIAPP",
WEEX_WIDGET = "WEEX_WIDGET"
}
export interface IENV {
/** current platform (iOS or Android or PC or NotInDingTalk) */
platform: ENV_ENUM;
/** current sub platform (support mac & win) */
platformSub?: ENV_ENUM_SUB;
/** current client version */
version?: string;
/** @deprecated recommend use navigator.language to get current language */
language?: string;
/** current appType (web or eapp or weex) */
appType: APP_TYPE;
[key: string]: any;
}
export interface IConfigParams {
jsApiList?: string[];
[key: string]: any;
}
export interface IDevConfigParams {
/** 是否开启调试模式 */
debug?: boolean;
/** 是否校验Api是否支持等 */
isAuthApi?: boolean;
/** 废除兼容性处理 */
isDisableDeal?: boolean;
/** 部分接口废除兼容性处理 */
disbaleDealApiWhiteList?: string[];
/** 接口层面开启兼容性处理,优先级大于废除逻辑 */
forceEnableDealApiFnMap?: {
[apiName: string]: (params: any) => boolean;
};
onBeforeInvokeAPI?: (data: {
invokeId: string;
method: string;
startTime: number;
params: any;
}) => void;
onAfterInvokeAPI?: (data: {
invokeId: string;
method: string;
params: any;
payload: any;
duration: number;
startTime: number;
isSuccess: boolean;
}) => void;
extraPlatform?: IPlatformConfig;
}
export interface IEvent {
preventDefault: () => void;
}
export declare enum LogLevel {
INFO = 1,
WARNING = 2,
ERROR = 3
}
export interface ILog {
level: LogLevel;
text: any[];
time: Date;
}
export declare type ILogFn = (option: ILog) => void;
export interface IPlatformConfig {
platform: string;
authMethod: string;
authParamsDeal?: (params: object) => object;
bridgeInit: () => Promise<IJSBridge>;
event?: {
on: (type: string, handler: (e: IEvent) => void) => void;
off: (type: string, handler: (e: IEvent) => void) => void;
};
}
export interface ICheckJsApiParams {
jsApiList?: string[];
}
export interface ICheckJsApiResult {
[jsApi: string]: boolean;
}
export declare type ICheckJsApiFn = (params: ICheckJsApiParams) => Promise<ICheckJsApiResult>;
export interface IUNCore {
/** 当config权限校验成功时触发readyCallback */
ready: (readyCallback: () => void) => void;
/** 当config权限校验成功时触发readyCallback */
error: (callback: (err: any) => void) => void;
/** 配置权限校验参数, 即可启动校验,启动校验成功后可以让本没有权限的接口获取权限,如果你的域名是白名单或者调用的接口不需要校验,可不用调用此接口 */
config: (configParams: IConfigParams) => void;
/** 配置开发选项 */
devConfig: (devConfigParams: IDevConfigParams) => void;
/** 推荐使用on绑定方法, 替代原本document的方式 */
on: (methodName: string, listener: (e: IEvent | any) => void) => void;
/** 推荐使用off解绑方法,替代document的方式 */
off: (methodName: string, listener: (e: IEvent | any) => void) => void;
/** 当前运行时的环境变量 */
env: IENV;
/**
* 提供检测jsapi能力的接口
* @description 本接口原理依赖于 JSAPI 的静态支持版本数据,故存在一定的误差
* @deprecated 移动端上推荐使用 plugin/checkJsApi.ts 来检测真实环境下的支持情况
*/
checkJsApi: ICheckJsApiFn;
/** 直接通过method名调用jsapi,新的接口基本不存在多端不一致的问题,可以使用此接口代替。注意:但如果直接调用旧的jsapi接口,且没有引入对应接口库,将不会对入参出参进行兼容操作 */
_invoke: (method: string, params?: any) => Promise<any>;
}
export interface IConfigCoreMap {
[platform: string]: IPlatformConfig | undefined;
}
export interface IApiMiddlewareContext {
method: string;
params: any;
isAuthApi: boolean;
invokeName?: string;
callParams?: any;
JSBridge?: IJSBridge;
apiConfig?: IAPIConfig;
}
export declare type IApiMiddlewareNextFn = () => Promise<any>;
export declare type IApiMiddlewareFn = (context: IApiMiddlewareContext, next: IApiMiddlewareNextFn) => Promise<any>;