import mongoose from 'mongoose' import * as consts from '../consts' export as namespace models declare type ActivityEventContent = { /** 正确结果 */ state?: string | object detail?: string | object /** 错误结果 */ error?: string | object | Error } declare type ActivityDataInput = { /** 权限 */ permission?: string /** 操作方法名 */ method?: string /** 操作参数 JSON记录 */ params?: string | any[] } declare type ActivityDataOutput = { /** 正确结果 */ result?: string | object /** 错误结果 */ error?: string | object | Error } declare type ActivityOperatorInfoInput = { /** appid */ appid?: string /** 是否是api转发来的请求 */ _isApiInternalAppType?: boolean /** api转发请求 包含当前操作用户 */ _username?: string /** api转发请求 包含当前操作用户的权限 */ _user_roles?: string } declare type ActivityOperatorInfoOutput = { /** 当前操作对象类别 */ operatorType: string /** 当前操作用户 */ operator?: string /** 当前操作用户权限信息 */ operatorRole?: string } declare type ActivityOperatorRole = { /** 名称 */ name: string /** 角色 */ role: string } /** * Model for activity */ declare interface ActivityDocument extends mongoose.Document { /** 分类 */ category: 'api_invoke' | 'event' /** id */ id: string /** 操作对象名 */ resource_name?: string /** 操作对象id */ resourceId?: string /** 活动名称 */ name: string /** 活动子名称 */ subName: string /** 操作者类型 */ operator_type: string /** 操作者 */ operators: string[] /** 操作者角色 */ operator_roles?: ActivityOperatorRole[] /** 输入信息 */ event_content: ActivityEventContent, input: ActivityDataInput & { /** 请求发起的时间戳 */ record_at: number }, /** 输出信息 */ output: ActivityDataOutput & { /** 返回结果的时间戳 */ record_at: number }, /** 日志参数 */ log_params: string[] /** [Virtual]log数据 */ log_info: { category: string, code: string, params: string[] } create_at: number update_at: number } declare interface ConfigDatDocument extends mongoose.Document { /** 服务端名称 */ server: string /** 当前配置适用的版本,新版配置将根据该字段来刷新origin字段 */ version: string /** 该配置内容的核心父级,通常为大类别例如区块链分类等 */ parent?: mongoose.Schema.Types.ObjectId /** 判断该字段是否为客户自定义配置 */ customized?: boolean /** 设置true将强制加载origin数据 */ dirty: boolean /** 该配置内容在配置文件中的父路径。若存在parent,则是相对parent所在的文件夹路径 */ path: string /** 该配置内容在配置文件中的key,同时也是配置文件的文件夹名,为空即为当前path */ key: string /** 保存JSON.stringify,从原始配置文件中读取的config数据 */ origin: string /** 可修改选项,保存JSON.stringify,被修改的配置 */ modified: string /** 可选,可修改选项,该配置内容是否被禁用 */ disabled: boolean /** apply mod */ applyModify(jsonToSave: string): ConfigDatDocument /** merge config */ toMerged(): object } interface Rule { action: string permission: '' | 'r' | 'rw' } interface KeyData { category: 'ecc' key: string encode: string } declare interface AppDocument extends mongoose.Document { /** 唯一ID */ id: string /** 应用描述 */ desc?: string /** 指向wallet */ wallet?: mongoose.Schema.Types.ObjectId /** RESTFUL权限 */ resouces: Rule[] /** 验签公钥 */ accepts: KeyData[] /** 回调地址 */ callbacks: Object /** 额外信息 */ data: Object /** * 设置该app使用的wallet * @param WalletDocument */ setWallet(wallet: WalletDocument | mongoose.Schema.Types.ObjectId | string): Promise /** * 获取该app指向的Wallet信息 */ getWallet(): Promise /** * 验证是否具有某权限 * @param action 权限名 * @param permission 权限类型 */ checkPermission(action: string, permission: '' | 'r' | 'rw'): boolean /** * 返回全部可接受的公钥 */ getPublicKeys(): Buffer[] /** * 获取category对应的callback url * @param category */ getCallbackUrl(category: string): string | undefined /** * 获取App参数 * @param path */ getData(path: string): string } declare interface OnePlan { /** 任务种类 */ category: string /** 该字段为选填,即该任务执行的名字空间,通常为区块链Key */ namespace?: string /** 该字段必须设置,即为该任务执行的具体内容 */ method: string /** 该字段为选填,即为该任务执行内容的参数 */ params: any } declare interface OnePlanData extends OnePlan { /** EXECUTE_ACTION类型完成条件: result/error被设置 */ result?: string /** 运行错误 */ error?: string /** INTERNAL_ORDER类型完成条件:order done */ order?: mongoose.Schema.Types.ObjectId /** 开始运行时间 */ started_at?: Date /** 结束运行时间 */ finished_at?: Date } declare interface AsyncPlanDocument extends mongoose.Document { /** ID */ _id: mongoose.Schema.Types.ObjectId /** 类型 */ mode: string /** 来源 */ source: string /** 来源id */ source_id?: string /** 参考Plan */ refer?: mongoose.Schema.Types.ObjectId /** 完成结果 */ status?: string /** 任务进度 */ finished_steps: number /** 计划任务列表 */ plans: OnePlanData[] /** 执行计划, 不为null时为新任务 */ run_at?: Date /** 开始运行时间 */ started_at?: Date /** 结束运行时间 */ finished_at?: Date } declare interface WalletSourceConfig { /** 当source为seed时,需要设置 */ seedKey: string /** 当source为seed_db时,需要设置 */ hotAccount?: string hotPubKey?: string coldAccount?: string /** 额外参数 */ [key: string]: any } declare interface WalletSourceData extends WalletSourceConfig { // 缓存,可供比较变化,最后一次设置进去 hotAddress?: string coldAddress?: string cachedAt?: Date } declare interface TokenConfigBasic { Rate: number Type: string GasLimit?: number GasPrice?: number GasPrices?: string GasCoefficient?: number FeeSelector?: number FeeForWithdraw?: number ActivateBalance?: number Expiration?: number MinThreshold?: number Dust?: number PropertyId?: number TokenName?: string Contract?: string /** UTXO类 */ IsUtxoMode?: boolean } declare interface TokenConfigJadepool { /** 高水位 */ HighWaterLevel: number /** 高水位转出后目标 */ SweepTo: number /** 低水位 */ LowWaterLevel: number /** 一批sendOrder的数量(二选一,作用相同仅显示不同) */ BatchCount?: number /** 一批sendOrder的数量(二选一,作用相同仅显示不同) */ MaxOrdersInOneTx?: number /** 自动汇总阈值 */ SweepToHotCap?: number /** 自动重发设置阈值 */ SendAgainCap?: number AvailableUtxoCap?: number MaxInputsInOneTx?: number // 空投 Airdrop: { enabled: boolean Address: string } } declare interface TokenConfig { coin?: TokenConfigBasic jadepool?: TokenConfigJadepool } declare interface TokenStatus { depositDisabled: Boolean withdrawDisabled: Boolean } declare interface WalletCoinInfo { /** 币种简称 */ name: string /** 私钥源可选配置,将覆盖chain默认config */ data: WalletSourceData status: TokenStatus /** 配置加载 */ config?: TokenConfig } declare interface TokenShortCut { /** 相关区块链显示名 */ chain: string /** 相关区块链Key */ chainKey: string /** 相关核心币 */ coreType: string /** 该币种是否启用 */ tokenEnabled: boolean /** 该币种充提是否启用 */ depositWithdrawEnabled: boolean /** 该币种类别 */ type: string /** 该币种兑换率 */ rate: number } declare interface TokenInfo extends WalletCoinInfo { /** 快捷参数 */ shortcut: TokenShortCut } declare interface ChainConfig { // 基础参数 /** 数据表记录的_id */ id: string /** 区块链Key */ key: string /** 该链是否被完整禁用 */ disabled: boolean /** 主要货币名,通常为费用币 */ CoreType: string /** 区块链显示名 */ Chain: string /** 可选,当前使用的区块链ID, 瑶池getChainId方法的默认实现为查询该字段 */ ChainId?: string /** 衍生路径中的chainIndex */ ChainIndex: number /** 衍生路径中的accountIndex offset */ MainIndexOffset?: number /** 钱包的默认Source配置 */ WalletDefaults: WalletChainInfo /** 区块链实现的形式 */ ledgerMode: 'local' | 'rpc' ledgerOptions: { rpc?: string rpcSignerId?: string rpcVerifier?: string rpcDevNoAuth?: boolean } generalOptions: { RescanMode: string foreachRetrieveCap?: number foreachRetrieveInterval?: number AffirmativeConfirmation: number FailedAffirmativeConfirmation?: number FailedWhenExpired: boolean AffirmativeConfirmationTime?: number FailedAffirmativeConfirmationTime?: number sendOrdersInterval?: number waitingSendOrdersOnline?: boolean hotPermissionChangeable?: boolean } generalDynamicOptions?: [ { type: string name: string value: number } ] closer: { /** 软分叉间隔 */ softForkIgnoreCap: number /** 设置二次扫描间隔(块),-1为不开启 */ doubleScanGap: number /** 多次扫描时是否忽略相同 hash 的块 */ ignoreScanSameHashAfterFirst: boolean /** 是否启用重复扫描 */ repeatScanEnabled: false /** 重复扫描的间隔 */ repeatScanInterval: number /** 重复扫描的次数 */ repeatScanAttempts: number previousBlocks: number scanBlockTaskCap: number scanAddressTaskCap: number fillTransactionCap?: number } /** 是否支持扩展代币 */ tokenExtendsEnabled: boolean tokenTypes: string[] tokenNonFungibleTypes: string[] tokenTemplates?: string[] /** 是否需要在线验证地址 */ addressOnline: boolean /** 地址模型 */ addressMode: 'multi' | 'single' /** 支持的地址业务模型 */ addressBizModes?: string[] /** 支持的钱包业务 */ walletModes?: string[] /** stake */ stakeEnabled?: boolean stakeOptions?: { stakeToken: string } /** explorers config */ explorers: string[] | { type: string, name: string, url: string }[] /** 节点配置 */ endpoints: string[] | { type: string, name: string, url: string, [key: string]: string }[] } type WalletSourceType = 'shadow' | 'seed' | 'hsm_pure' | 'hsm_deep' | 'offline_signer' type AddressType = 0 | 1 | 2 | 3 declare interface WalletChainStatus { /** 在该钱包内是否被禁用 */ enabled: boolean // 状态参数 coinsEnabled: string[] // 用过的币种 coinsUsed: string[] // 全部这这个钱包有关的币 coins: string[] } declare interface WalletChainInfo { chainKey: string source: { user: WalletSourceType hot: WalletSourceType cold: WalletSourceType } // 私钥源必选配置 data: WalletSourceData status: WalletChainStatus /** 配置加载 */ config?: ChainConfig } declare interface WalletChain extends WalletChainInfo { // 钱包中的币种状态信息 coins: WalletCoinInfo[] } declare interface WalletBasicDocument extends mongoose.Document { /** 别名 */ alias: string /** biz mode */ mode: 'normal' | 'safe' | 'manual' /** 额外配置 */ options?: object /** 运营钱包, 需 populate */ operator: WalletDocument /** blockchain infos */ chains: WalletChain[] /** * 获取可用的地址类型 */ getAvailableAddressTypes(): AddressType[] /** * 是否默认继承template */ isDefaultInherit(): boolean /** * 设置 wallet 的参数, 并添加 dirty 标记 * @param path * @param value * @param setDirty 额外设置一个 dirty 字段 */ updateOptions(path: string, value: any, setDirty: boolean): Promise /** * 设置 wallet 的参数, 并添加 dirty 标记 * @param obj 更新参数 * @param setDirty 额外设置一个 dirty 字段 */ updateOptions(obj: { [key: string]: any }, setDirty: boolean): Promise /** * 移除 wallet 参数上的 dirty 标记 * @param path */ applyOptions(path: string[]): Promise /** * 获取配置值 * @param path */ getOptionValue(path: string): Promise /** * set chain's enabled coins * @param chainKey blockchain key * @param status 状态配置 */ setChainStatus(chainKey: string, status: WalletChainStatus): Promise /** * set token enabled status * @param chainKey blockchain key * @param coinName coin unique name * @param status 状态配置 */ setTokenStatus(chainKey: string, coinName: string, status: TokenStatus): Promise /** * remove token * @param chainKey blockchain key * @param coinName coin unique name */ unsetToken(chainKey: string, coinName: string): Promise /** * set token enabled status * @param chainKey blockchain key * @param coinName coin unique name * @param config 配置修改 */ setConfigMods(chainKey: string, coinName: string, config: TokenConfig): Promise /** * set source type * @param chainKey blockchain key * @param target target type * @param type source type */ setSource(chainKey: string, target: 'hot' | 'cold', type: WalletSourceType): Promise /** * set SourceData in exists chainData * @param chainKey blockchain key * @param coin specific coin scope or chain scope * @param sourceData all data of private key source including caching data * @param isSetCachedAt set cached at or not */ setSourceData(chainKey: string, coin: string | undefined, sourceData: WalletSourceData, isSetCachedAt?: boolean): Promise /** * get SourceData * @param chainKey blockchain key * @param coin specific coin scope or chain scope */ getSourceData(chainKey: string, coin?: string): Promise /** * load chain information * @param chainKey */ populateChainConfig(chainKey: string): Promise /** * load token information * @param chainKey * @param coinName */ populateTokenConfig(chainKey: string, coinName: string): Promise /** * load chain information * @param chainKey */ getChainInfo(chainKey: string): WalletChainInfo /** * load token information * @param chainKey * @param coinName */ getTokenInfoWithoutConfigDat(chainKey: string, coinName: string): WalletCoinInfo /** * load token information * @param chainKey * @param coinName * @param withPatch 是否打上补丁 */ getTokenInfo(chainKey: string, coinName: string, withPatch?: boolean): TokenInfo } declare interface WalletTemplateDocument extends WalletBasicDocument { /** version */ version: string /** * upgrade or update wallet's chain confi */ updateFromConfig(chainDefaults: ChainConfig[]): Promise } declare interface WalletDocument extends WalletBasicDocument { /** unique name */ name: string /** description */ desc?: string /** 钱包index */ mainIndex: number /** 可用账号index */ addrIndex: number /** 指向特定的 template, 需 populate */ template: WalletTemplateDocument /** * 激活一个 chainModel,不再使用 template 的数据 * @param chainKey * @param inputData */ enableChainModel(chainKey: string, inputData: WalletChainInfo, inherit?: boolean): Promise /** * 获取当前 wallet 的 template */ getTemplate(): Promise /** * 设置并获取下一个Address的index */ nextAddressIndex(): Promise /** * 设置 wallet 的 meta参数 * @param path * @param value */ updateMeta(path: string, value: any): Promise /** * 设置 wallet 的 meta参数 * @param obj 更新参数 */ updateMeta(obj: { [key: string]: any }): Promise /** * 获取热主地址的衍生路径 * 衍生路径规则为 m/44'/{chainIndex}'/{accountIndex}'/1/{hotIndex} * @param chainIndex 区块链Index * @param [hotIndex=0] 热主地址的序号 * @param [accountOffset=0] 当该coin占用了相同的chainIndex,则需要使用offset来错开位置。取值范围为[0-99] */ getHotDerivativePath(chainIndex: number, hotIndex?: number, accountOffset?: number): string /** * 获取外部地址的衍生路径 * 衍生路径规则为 m/44'/{chainIndex}'/{accountIndex}'/0/{addrIndex} * @param chainIndex 区块链Index * @param [addrIndex=undefined] 地址序号 * @param [accountOffset=0] 当该coin占用了相同的chainIndex,则需要使用offset来错开位置 */ getAddressDerivativePath(chainIndex: number, addrIndex?: number, accountOffset?: number): string }