Skip to content

Instantly share code, notes, and snippets.

@leetdev
Last active September 10, 2021 07:37
Show Gist options
  • Save leetdev/c3876f4804e8833144b1524225fb6986 to your computer and use it in GitHub Desktop.
Save leetdev/c3876f4804e8833144b1524225fb6986 to your computer and use it in GitHub Desktop.
declare module 'nkn-sdk' {
import {Decimal} from 'decimal.js'
export class MultiClient {
addr: string
identifier: string
isClosed: boolean
isReady: boolean
defaultClient: Client
constructor(options?: MultiClientOptions)
close(): Promise<void>
deleteName(name: string, options?: TransactionOptions): Promise<TxnOrHash>
dial(remoteAddr: string, options?: DialOptions): Promise<Session>
getBalance(address?: string): Promise<Amount>
getLatestBlock(): Promise<{
height: number
hash: string
}>
getNonce(address?: string, options?: { txPool: boolean }): Promise<number>
getPublicKey(): string
getRegistrant(name: string): Promise<{
registrant: string
expiresAt: number
}>
getSeed(): string
getSubscribers(topic: string, options?: {
offset?: number
limit?: number
meta?: boolean
txPool?: boolean
}): Promise<{
subscribers: Array<string> | Record<string, string>
subscribersInTxPool?: Array<string> | Record<string, string>
}>
getSubscribersCount(topic: string): Promise<number>
getSubscription(topic: string, subscriber: string): Promise<{
meta: string
expiresAt: number
}>
listen(addrs: (RegExp | Array<RegExp> | string | Array<string> | null | void))
onConnect(f: ConnectHandler)
onMessage(func: MessageHandler)
onSession(func: SessionHandler)
publish(topic: string, data: MessageData, options?: PublishOptions): Promise<null>
readyClientIDs(): Array<string>
registerName(name: string, options?: TransactionOptions): Promise<TxnOrHash>
send(dest: Destination, data: MessageData, options?: SendOptions): Promise<ReplyData>
sendTransaction(txn: Transaction): Promise<string>
sendWithClient(clientID: string, dest: Destination, data: Uint8Array, options?: SendOptions): Promise<ReplyData>
subscribe(topic: string, duration: number, identifier?: string, meta?: string, options?: TransactionOptions): Promise<TxnOrHash>
transferName(name: string, recipient: string, options?: TransactionOptions): Promise<TxnOrHash>
transferTo(toAddress: string, amount: (number | string | Amount), options?: TransactionOptions): Promise<TxnOrHash>
unsubscribe(topic: string, identifier: string, options?: TransactionOptions): Promise<TxnOrHash>
}
export class Client {
addr: string
identifier: string
constructor(options?: ClientOptions)
close(): void
deleteName(name: string, options?: TransactionOptions): Promise<TxnOrHash>
getBalance(address?: string): Promise<Amount>
getLatestBlock(): Promise<{ height: number, hash: string }>
getNonce(address?: string, options?: {
txPool: boolean
}): Promise<number>
getPublicKey(): string
getRegistrant(name: string): Promise<{
registrant: string
expiresAt: number
}>
getSeed(): string
getSubscribers(topic: string, options?: {
offset?: number
limit?: number
meta?: boolean
txPool?: boolean
}): Promise<{
subscribers: Array<string> | Record<string, string>
subscribersInTxPool?: Array<string> | Record<string, string>
}>
getSubscribersCount(topic: string): Promise<number>
getSubscription(topic: string, subscriber: string): Promise<{
meta: string
expiresAt: number
}>
onConnect(func: ConnectHandler)
onMessage(func: MessageHandler)
publish(topic: string, data: MessageData, options?: PublishOptions): Promise<null>
registerName(name: string, options?: TransactionOptions): Promise<TxnOrHash>
send(dest: Destination, data: MessageData, options?: SendOptions): Promise<ReplyData>
sendTransaction(txn: Transaction): Promise<string>
subscribe(topic: string, duration: number, identifier?: string, meta?: string, options?: TransactionOptions): Promise<TxnOrHash>
transferName(name: string, recipient: string, options?: TransactionOptions): Promise<TxnOrHash>
transferTo(toAddress: string, amount: (number | string | Amount), options?: TransactionOptions): Promise<TxnOrHash>
unsubscribe(topic: string, identifier: string, options?: TransactionOptions): Promise<TxnOrHash>
}
export class Wallet {
address: string
version: number
constructor(options?: {
seed?: string
password?: string
rpcServerAddr?: string
iv?: string
masterKey?: string
scrypt?: ScryptParams
worker?: boolean | (() => Worker | Promise<Worker>)
passwordKey?: Record<string, string>
version?: number
})
createOrUpdateNanoPay(
toAddress: string,
amount: (number | string | Amount),
expiration: number,
id: number,
options?: TransactionOptions,
): Promise<Transaction>
deleteName(name: string, options?: TransactionOptions): Promise<TxnOrHash>
static fromJSON(walletJson: (string | WalletJson), options?: {
password: string
rpcServerAddr?: string
async?: boolean
}): (Wallet | Promise<Wallet>)
static getBalance(address: string, options?: {
rpcServerAddr: string
}): Promise<Amount>
getBalance(address?: string): Promise<Amount>
static getLatestBlock(options?: {
rpcServerAddr: string
}): Promise<{
height: number
hash: string
}>
getLatestBlock(): Promise<{
height: number
hash: string
}>
static getNonce(address: string, options?: {
rpcServerAddr: string
txPool: boolean
}): Promise<number>
getNonce(address?: string, options?: { txPool: boolean }): Promise<number>
getPublicKey(): string
static getRegistrant(name: string, options?: {
rpcServerAddr: string
}): Promise<{
registrant: string
expiresAt: number
}>
getRegistrant(name: string): Promise<{
registrant: string
expiresAt: number
}>
getSeed(): string
static getSubscribers(topic: string, options?: {
offset?: number
limit?: number
meta?: boolean
txPool?: boolean
rpcServerAddr?: string
}): Promise<{
subscribers: Array<string> | Record<string, string>
subscribersInTxPool?: Array<string> | Record<string, string>
}>
getSubscribers(topic: string, options?: {
offset?: number
limit?: number
meta?: boolean
txPool?: boolean
}): Promise<{
subscribers: Array<string> | Record<string, string>
subscribersInTxPool?: Array<string> | Record<string, string>
}>
static getSubscribersCount(topic: string, options?: {
rpcServerAddr: string
}): Promise<number>
getSubscribersCount(topic: string): Promise<number>
static getSubscription(topic: string, subscriber: string, options?: {
rpcServerAddr: string
}): Promise<{
meta: string
expiresAt: number
}>
getSubscription(topic: string, subscriber: string): Promise<{
meta: string
expiresAt: number
}>
static publicKeyToAddress(publicKey: string): string
registerName(name: string, options?: TransactionOptions): Promise<TxnOrHash>
static sendTransaction(txn: Transaction, options?: {
rpcServerAddr: string
}): Promise<string>
sendTransaction(txn: Transaction): Promise<string>
subscribe(topic: string, duration: number, identifier: string, meta: string, options?: TransactionOptions): Promise<TxnOrHash>
toJSON(): WalletJson
transferName(name: string, recipient: string, options?: TransactionOptions): Promise<TxnOrHash>
transferTo(toAddress: string, amount: (number | string | Amount), options?: TransactionOptions): Promise<TxnOrHash>
unsubscribe(topic: string, identifier: string, options?: TransactionOptions): Promise<TxnOrHash>
static verifyAddress(addr: string): boolean
verifyPassword(password: string, options?: {
async: boolean
})
}
export class Amount extends Decimal {
}
export class Key {
seed: string
publicKey: string
privateKey: Uint8Array
curvePrivateKey: Uint8Array
sharedKeyCache: Map
useWorker: boolean
worker: Worker | null
workerMsgID: number
workerMsgCache: Map
constructor(seed: string, options?: {
worker?: boolean | (() => Worker | Promise<Worker>)
})
computeSharedKey(otherPubkey: string): Promise<string>
getOrComputeSharedKey(otherPubkey: string): Promise<string>
encrypt(message: string, destPubkey: string, options?: {
nonce?: Uint8Array
}): Promise<{
message: Uint8Array
nonce: Uint8Array
}>
decrypt(message: Uint8Array, nonce: Uint8Array, srcPubkey: string, options?: {}): Promise<string>
sign(message: string): string
}
export type ConnectHandler = ({addr: string}) => void
export type CreateTransactionOptions = {
fee: number | string | Amount | null | void
attrs: string | null | undefined
buildOnly: boolean | null | undefined
}
export type Destination = string | Array<string>
type DialOptions = {
dialTimeout?: number
sessionConfig?: SessionConfig
}
export type Message = {
src: string
payload: MessageData
payloadType: PayloadType
isEncrypted: boolean
messageId: Uint8Array
noReply: boolean
}
export type MessageData = Uint8Array | string
export type MessageHandler = (message: Message) => ReplyData | false | void | Promise<ReplyData | false | void>
export type PublishOptions = {
encrypt?: boolean
msgHoldingSeconds?: number
messageId?: Uint8Array
replyToId?: Uint8Array
txPool?: boolean
offset?: number
limit?: number
}
export type ReplyData = MessageData | null
export type SendOptions = {
responseTimeout?: number
encrypt?: boolean
msgHoldingSeconds?: number
noReply?: boolean
messageId?: Uint8Array
replyToId?: Uint8Array
}
export type SessionHandler = (session: Session) => void
export type TransactionOptions = CreateTransactionOptions & {
nonce?: number
}
export type TxnOrHash = string | Transaction
// eslint-disable-next-line import/no-anonymous-default-export
export default {
MultiClient,
Client,
Wallet,
Amount,
ConnectHandler,
CreateTransactionOptions,
Destination,
DialOptions,
Message,
MessageData,
MessageHandler,
PublishOptions,
ReplyData,
SendOptions,
SessionHandler,
TransactionOptions,
TxnOrHash,
}
interface ClientOptions {
identifier?: string
reconnectIntervalMin?: number
reconnectIntervalMax?: number
responseTimeout?: number
msgHoldingSeconds?: number
encrypt?: boolean
rpcServerAddr?: string
tls?: boolean
worker?: boolean | (() => Worker | Promise<Worker>)
}
interface MultiClientOptions extends ClientOptions {
seed?: string
numSubClients?: number
originalClient?: boolean
msgCacheExpiration?: number
sessionConfig?: SessionConfig
}
enum PayloadType {
BINARY = 0,
TEXT = 1,
ACK = 2,
SESSION = 3,
}
type Session = Object // TODO: import from NCP types
type SessionConfig = Object // TODO: import from NCP types
type Transaction = Object // TODO
type WalletJson = {
Version: number
MasterKey: string
IV: string
SeedEncrypted: string
Address: string
Scrypt?: {
Salt: string
N: number
R: number
P: number
}
}
export namespace aes {
export function encrypt(plaintext: string, password: string, iv: string): string
export function decrypt(ciphertext: string, password: string, iv: string): string
}
export namespace crypto {
export const keyLength: number
export const nonceLength: number
export const publicKeyLength: number
export const seedLength: number
export const signatureLength: number
export function keyPair(seed: string): KeyPair
export function ed25519SkToCurve25519(sk: Uint8Array): Uint8Array
export function ed25519PkToCurve25519(pk: string): Promise<Uint8Array>
export function computeSharedKey(myCurvePrivateKey: Uint8Array, otherPubkey: string): Promise<string>
export function encryptSymmetric(message: Uint8Array, nonce: Uint8Array, key: Uint8Array): Promise<Uint8Array>
export function decryptSymmetric(message: Uint8Array, nonce: Uint8Array, key: Uint8Array): Promise<Uint8Array | null>
export function sign(privateKey: Uint8Array, message: string): Promise<string>
type KeyPair = {
seed: string
publicKey: string
privateKey: Uint8Array
curvePrivateKey: Uint8Array
}
}
export namespace errors {
const rpcRespErrCodes: Object
const AddrNotAllowedError: ErrorConstructor
const ClientNotReadyError: ErrorConstructor
const DataSizeTooLargeError: ErrorConstructor
const DecryptionError: ErrorConstructor
const UnknownError: ErrorConstructor
const NotEnoughBalanceError: ErrorConstructor
const WrongPasswordError: ErrorConstructor
const InvalidAddressError: ErrorConstructor
const InvalidWalletFormatError: ErrorConstructor
const InvalidWalletVersionError: ErrorConstructor
const InvalidArgumentError: ErrorConstructor
const InvalidResponseError: ErrorConstructor
const ServerError: ErrorConstructor
const InvalidDestinationError: ErrorConstructor
const RpcTimeoutError: ErrorConstructor
const RpcError: ErrorConstructor
}
export namespace hash {
export function cryptoHexStringParse(hexString: string): string
export function sha256(str: string): string
export function sha256Hex(hexStr: string): string
export function doubleSha256(str: string): string
export function doubleSha256Hex(hexStr: string): string
export function ripemd160(str: string): string
export function ripemd160Hex(hexStr: string): string
}
export namespace serialize {
export const maxUintBits: number
export const maxUint: number
export function encodeUint8(value: number): string
export function encodeUint16(value: number): string
export function encodeUint32(value: number): string
export function encodeUint64(value: number): string
export function encodeUint(value: number): string
export function encodeBytes(value: number): string
export function encodeString(value: number): string
export function encodeBool(value: number): string
}
export namespace util {
import TypedArray = NodeJS.TypedArray
export function hexToBytes(hex: string): Uint8Array
export function bytesToHex(bytes: Uint8Array): string
export function randomBytes(n: number): Uint8Array
export function setPRNG(fn: (x: Uint8Array, n: number) => void): void
export function randomBytesHex(len: num): string
export function randomInt32(): number
export function randomUint64(): number
export function mergeTypedArrays(a: TypedArray, b: TypedArray): TypedArray
export function assignDefined(target: Object, ...sources: Object[])
export function utf8ToBytes(s: string): Uint8Array
export function toLowerKeys(obj: Object): Object
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment