UNPKG

@thencc/micronautjs

Version:

MicronautJS is a simplified Algorand transaction library for Serverless Environments

422 lines (421 loc) 19.3 kB
import { Buffer } from 'buffer'; import algosdk, { Account as AlgosdkAccount, Algodv2, Indexer, LogicSigAccount, Transaction, Account } from 'algosdk'; import type { MicronautConfig, MicronautWallet, MicronautTransactionStatus, MicronautAtomicTransaction, MicronautTransactionFields, MicronautAppState, MicronautStateData, MicronautError, MicronautTxnCallbacks, MicronautCreateAssetArguments, MicronautSendAssetArguments, MicronautCallAppArguments, MicronautDeployArguments, MicronautLsigDeployArguments, MicronautLsigCallAppArguments, MicronautLsigSendAssetArguments, MicronautPaymentArguments, MicronautLsigPaymentArguments, MicronautUpdateAppArguments, MicronautAppStateEncoded } from './MicronautTypes'; export * from './MicronautTypes'; export type AlgoTxn = Transaction; export declare class Micronaut { algodClient: Algodv2; indexerClient: undefined | Indexer; nodeConfig: { BASE_SERVER: string; INDEX_SERVER?: string; LEDGER: string; PORT: string; API_TOKEN: any; }; libConfig: { disableLogs: boolean; }; sdk: typeof algosdk; mnemonic: null | string; address: null | string; account: null | Account; /** * Instantiates Micronaut.js. * * @example * Usage: * * ```js * import { Micronaut } from '@thencc/micronautjs'; * const Micronaut = new Micronaut({ * nodeConfig: { * BASE_SERVER: 'https://testnet-algorand.api.purestake.io/ps2', * INDEX_SERVER: 'https://testnet-algorand.api.purestake.io/idx2' * LEDGER: 'TestNet', * PORT: '', * API_TOKEN: { 'X-API-Key': 'YOUR_API_TOKEN' } * } * }); * ``` * * @param config config object */ constructor(config?: MicronautConfig); setLibConfig(config?: MicronautConfig): void; /** * checks if config obj is valid for use * @param nodeConfig Micronaut config for network + signing mode * @returns boolean. true is good. */ isValidNodeConfig(nodeConfig?: MicronautConfig['nodeConfig']): boolean; /** * sets config for use (new algod, indexerClient, etc) * @param nodeConfig Micronaut config for network + signing mode * - will throw Error if config is lousy */ setNodeConfig(nodeConfig?: MicronautConfig['nodeConfig'] | 'mainnet' | 'testnet'): void; /** * @returns nodeConfig object or `false` if no nodeConfig is set */ getNodeConfig(): MicronautConfig['nodeConfig'] | boolean; /** * Checks status of Algorand network * @returns Promise resolving to status of Algorand network */ checkStatus(): Promise<any | MicronautError>; /** * Connects an account from mnemonic phrase * @returns void */ connectAccount(mnemonic: string): Promise<void>; /** * General purpose method to await transaction confirmation * @param txId a string id of the transacion you want to watch * @param limitDelta how many rounds to wait, defaults to 50 * @param log set to true if you'd like to see "waiting for confirmation" log messages */ waitForConfirmation(txId: string, limitDelta?: number, log?: boolean): Promise<MicronautTransactionStatus>; /** * Creates a LogicSig from a base64 program string. Note that this method does not COMPILE * the program, just builds an LSig from an already compiled base64 result! * @param base64ProgramString * @returns an algosdk LogicSigAccount */ generateLogicSig(base64ProgramString: string): LogicSigAccount; atomicOptInAsset(assetIndex: number, optionalTxnArgs?: MicronautTransactionFields): Promise<MicronautAtomicTransaction>; /** * Opt-in the current account for the a token or NFT Asset. * @param assetIndex number of asset to opt-in to * @param callbacks `MicronautTxnCallbacks`, passed to {@link sendTransaction} * @returns Promise resolving to confirmed transaction or error */ optInAsset(assetIndex: number, callbacks?: MicronautTxnCallbacks, optionalTxnArgs?: MicronautTransactionFields): Promise<MicronautTransactionStatus>; /** * You can be opted into an asset but still have a zero balance. Use this call * for cases where you just need to know the address's opt-in state * @param args object containing `account` and `assetId` properties * @returns boolean true if account holds asset */ isOptedIntoAsset(args: { account: string; assetId: number; }): Promise<boolean>; /** * Sync function that returns a correctly-encoded argument array for * an algo transaction * @param args must be an any[] array, as it will often need to be * a mix of strings and numbers. Valid types are: string, number, and bigint * @returns a Uint8Array of encoded arguments */ encodeArguments(args: any[]): Uint8Array[]; /** * Create asset transaction * @param args : MicronautCreateAssetArguments obj must contain: `assetName`, `symbol`, `decimals`, `amount`. * @returns atomic txn to create asset */ atomicCreateAsset(args: MicronautCreateAssetArguments): Promise<MicronautAtomicTransaction>; /** * Create asset * @param args MicronautCreateAssetArguments. Must pass `assetName`, `symbol`, `decimals`, `amount`. * @param callbacks MicronautTxnCallbacks * @returns asset index */ createAsset(args: MicronautCreateAssetArguments, callbacks?: MicronautTxnCallbacks): Promise<MicronautTransactionStatus>; atomicDeleteAsset(assetId: number, optionalTxnArgs?: MicronautTransactionFields): Promise<MicronautAtomicTransaction>; /** * Deletes asset * @param assetId Index of the ASA to delete * @param callbacks optional MicronautTxnCallbacks * @returns Promise resolving to confirmed transaction or error */ deleteAsset(assetId: number, callbacks?: MicronautTxnCallbacks, optionalTxnArgs?: MicronautTransactionFields): Promise<MicronautTransactionStatus>; /** * Creates send asset transaction. * * IMPORTANT: Before you can call this, the target account has to "opt-in" * to the ASA index. You can't just send ASAs to people blind! * * @param args - object containing `to`, `assetIndex`, and `amount` properties * @returns Promise resolving to `MicronautAtomicTransaction` */ atomicSendAsset(args: MicronautSendAssetArguments): Promise<MicronautAtomicTransaction>; /** * Sends asset to an address. * * IMPORTANT: Before you can call this, the target account has to "opt-in" * to the ASA index. You can't just send ASAs to people blind! * * @param args - object containing `to`, `assetIndex`, and `amount` properties * @param callbacks optional MicronautTxnCallbacks * @returns Promise resolving to confirmed transaction or error */ sendAsset(args: MicronautSendAssetArguments, callbacks?: MicronautTxnCallbacks): Promise<MicronautTransactionStatus>; /** * Get info about an asset * @param assetIndex * @returns */ getAssetInfo(assetIndex: number): Promise<any>; /** * Creates transaction to opt into an app * @param args MicronautCallAppArgs * @returns MicronautAtomicTransaction */ atomicOptInApp(args: MicronautCallAppArguments): Promise<MicronautAtomicTransaction>; /** * Opt-in the current account for an app. * @param args Object containing `appIndex`, `appArgs`, and `optionalFields` * @param callbacks optional MicronautTxnCallbacks * @returns Promise resolving to confirmed transaction or error */ optInApp(args: MicronautCallAppArguments, callbacks?: MicronautTxnCallbacks): Promise<MicronautTransactionStatus>; /** * Returns atomic transaction that deletes application * @param appIndex - ID of application * @returns Promise resolving to atomic transaction that deletes application */ atomicDeleteApp(appIndex: number, optionalTxnArgs?: MicronautTransactionFields): Promise<MicronautAtomicTransaction>; /** * Deletes an application from the blockchain * @param appIndex - ID of application * @param callbacks optional MicronautTxnCallbacks * @returns Promise resolving to confirmed transaction or error */ deleteApp(appIndex: number, callbacks?: MicronautTxnCallbacks, optionalTxnArgs?: MicronautTransactionFields): Promise<MicronautTransactionStatus>; atomicCallApp(args: MicronautCallAppArguments): Promise<MicronautAtomicTransaction>; /** * Call a "method" on a stateful contract. In TEAL, you're really giving * an argument which branches to a specific place and reads the other args * @param args Object containing `appIndex`, `appArgs`, and `optionalFields` properties */ callApp(args: MicronautCallAppArguments, callbacks?: MicronautTxnCallbacks): Promise<MicronautTransactionStatus>; atomicCallAppWithLSig(args: MicronautLsigCallAppArguments): Promise<MicronautAtomicTransaction>; /** * Returns an atomic transaction that closes out the user's local state in an application. * The opposite of {@link atomicOptInApp}. * @param args Object containing `appIndex`, `appArgs`, and `optionalFields` properties * @returns Promise resolving to atomic transaction */ atomicCloseOutApp(args: MicronautCallAppArguments): Promise<MicronautAtomicTransaction>; /** * Closes out the user's local state in an application. * The opposite of {@link optInApp}. * @param args Object containing `appIndex`, `appArgs`, and `optionalFields` properties * @param callbacks optional MicronautTxnCallbacks * @returns Promise resolving to atomic transaction */ closeOutApp(args: MicronautCallAppArguments, callbacks?: MicronautTxnCallbacks): Promise<MicronautTransactionStatus>; /** * Get an application's escrow account * @param appId - ID of application * @returns Escrow account address as string */ getAppEscrowAccount(appId: number | bigint): string; /** * Get info about an application (globals, locals, creator address, index) * * @param appId - ID of application * @returns Promise resolving to application state */ getAppInfo(appId: number): Promise<MicronautAppState>; /** * Create and deploy a new Smart Contract from TEAL code * * @param args MicronautDeployArguments * @param callbacks optional MicronautTxnCallbacks * @returns MicronautTransactionStatus */ createApp(args: MicronautDeployArguments, callbacks?: MicronautTxnCallbacks): Promise<MicronautTransactionStatus>; /** * Create an atomic transaction to deploy a * new Smart Contract from TEAL code * * @param args MicronautDeployArguments * @returns MicronautAtomicTransaction */ atomicCreateApp(args: MicronautDeployArguments): Promise<MicronautAtomicTransaction>; /** * deploys a contract from an lsig account * keep in mind that the local and global byte and int values have caps, * 16 for local and 32 for global and that the cost of deploying the * app goes up based on how many of these slots you want to allocate * * @param args MicronautLsigDeployArguments * @returns */ deployTealWithLSig(args: MicronautLsigDeployArguments): Promise<MicronautTransactionStatus>; /** * Updates an application with `makeApplicationUpdateTxn` * @param args MicronautUpdateAppArguments * @returns atomic transaction that updates the app */ atomicUpdateApp(args: MicronautUpdateAppArguments): Promise<MicronautAtomicTransaction>; /** * Sends an update app transaction * @param args MicronautUpdateAppArguments * @param callbacks optional callbacks: `onSign`, `onSend`, `onConfirm` * @returns transaction status */ updateApp(args: MicronautUpdateAppArguments, callbacks?: MicronautTxnCallbacks): Promise<MicronautTransactionStatus>; /** * Compiles TEAL source via [algodClient.compile](https://py-algorand-sdk.readthedocs.io/en/latest/algosdk/v2client/algod.html#v2client.algod.AlgodClient.compile) * @param programSource source to compile * @returns Promise resolving to Buffer of compiled bytes */ compileProgram(programSource: string): Promise<Uint8Array>; atomicSendAlgo(args: MicronautPaymentArguments): Promise<MicronautAtomicTransaction>; /** * Sends ALGO from own account to `args.to` * * @param args `MicronautPaymentArgs` object containing `to`, `amount`, and optional `note` * @param callbacks optional MicronautTxnCallbacks * @returns Promise resolving to transaction status */ sendAlgo(args: MicronautPaymentArguments, callbacks?: MicronautTxnCallbacks): Promise<MicronautTransactionStatus>; /** * Fetch full account info for an account * @param address the accress to read info for * @returns Promise of type AccountInfo */ getAccountInfo(address: string): Promise<any>; /** * Checks Algo balance of account * @param address - Wallet of balance to check * @returns Promise resolving to Algo balance */ getAlgoBalance(address: string): Promise<any>; /** * Checks token balance of account * @param address - Wallet of balance to check * @param assetIndex - the ASA index * @returns Promise resolving to token balance */ getTokenBalance(address: string, assetIndex: number): Promise<number>; /** * Checks if account has at least one token (before playback) * Keeping this here in case this is a faster/less expensive operation than checking actual balance * @param address - Address to check * @param assetIndex - the index of the ASA */ accountHasTokens(address: string, assetIndex: number): Promise<boolean>; /** * Gets global state for an application. * @param applicationIndex - the applications index * @returns {object} object representing global state */ getAppGlobalState(applicationIndex: number): Promise<any>; /** * Gets account local state for an app. Defaults to AnyWallets.activeAddress unless * an address is provided. * @param applicationIndex the applications index */ getAppLocalState(applicationIndex: number, address?: string): Promise<MicronautAppState | void>; atomicAssetTransferWithLSig(args: MicronautLsigSendAssetArguments): Promise<MicronautAtomicTransaction>; atomicPaymentWithLSig(args: MicronautLsigPaymentArguments): Promise<MicronautAtomicTransaction>; normalizeTxns(txnOrTxns: Transaction | MicronautAtomicTransaction | MicronautAtomicTransaction[]): Uint8Array[]; /** * Signs a transaction or multiple w the correct wallet according to AW (does not send / submit txn(s) to network) * @param txnOrTxns Either an array of atomic transactions or a single transaction to sign * @returns Promise resolving to MicronautTransactionStatus */ signTransaction(txnOrTxns: MicronautAtomicTransaction[] | Transaction | MicronautAtomicTransaction): Promise<Uint8Array[]>; signTransactions(transactions: Uint8Array[], indexesToSign?: number[], returnGroup?: boolean): Promise<Uint8Array[]>; /** * Sends a transaction or multiple w the correct wallet according to AW * @param txnOrTxns Either an array of atomic transactions or a single transaction to sign * @param callbacks Optional object with callbacks - `onSign`, `onSend`, and `onConfirm` * @returns Promise resolving to MicronautTransactionStatus */ sendTransaction(txnOrTxns: MicronautAtomicTransaction[] | Transaction | MicronautAtomicTransaction, callbacks?: MicronautTxnCallbacks): Promise<MicronautTransactionStatus>; /** * * @param str string * @param enc the encoding type of the string (defaults to utf8) * @returns string encoded as Uint8Array */ toUint8Array(str: string, enc?: BufferEncoding): Uint8Array; /** * @deprecated use toUint8Array instead. * @param str string * @param enc the encoding type of the string (defaults to utf8) * @returns string encoded as Uint8Array */ to8Arr(str: string, enc?: BufferEncoding): Uint8Array; /** * Helper function to turn `globals` and `locals` array into more useful objects * * @param stateArray State array returned from functions like {@link getAppInfo} * @returns A more useful object: `{ array[0].key: array[0].value, array[1].key: array[1].value, ... }` * TODO add correct typing for this method */ stateArrayToObject(stateArray: object[]): any; /** * Used for decoding state * @param encoded Base64 string * @returns Human-readable string */ b64StrToHumanStr(encoded: string): string; /** * @deprecated Use b64StrToHumanStr instead * @param encoded Base64 string * @returns Human-readable string */ fromBase64(encoded: string): string; /** * Decodes a Base64-encoded Uint8 Algorand address and returns a string * @param encoded An encoded Algorand address * @returns Decoded address */ valueAsAddr(encoded: string): string; /** * Decodes app state into a human-readable format * @param stateArray Encoded app state * @returns Array of objects with key, value, and address properties */ decodeStateArray(stateArray: MicronautAppStateEncoded[]): MicronautStateData[]; /** * Does what it says on the tin. * @param txn base64-encoded unsigned transaction * @returns transaction object */ decodeBase64UnsignedTransaction(txn: string): Transaction; /** * Describes an Algorand transaction, for display in Inkey * @param txn Transaction to describe */ txnSummary(txn: Transaction): string; /** * Creates a wallet address + mnemonic from account's secret key. * Changed in 0.3: this does NOT set Micronaut.account. * @returns MicronautWallet Object containing `address` and `mnemonic` */ createWallet(): MicronautWallet; /** * Recovers account from mnemonic * Changed in 0.3: this does NOT set Micronaut.account. * @param mnemonic Mnemonic associated with Micronaut account * @returns If mnemonic is valid, returns algosdk account (.addr, .sk). Otherwise, throws an error. */ recoverAccount(mnemonic: string): AlgosdkAccount; /** * txn(b64) -> txnBuff (buffer) * @param txn base64-encoded unsigned transaction * @returns trransaction as buffer object */ txnB64ToTxnBuff(txn: string): Buffer; /** * Converts between buff -> b64 (txns) * @param buff likely a algorand txn as a Uint8Array buffer * @returns string (like for inkey / base64 transmit use) */ txnBuffToB64(buff: Uint8Array): string; /** * Does what it says on the tin. * @param txn algorand txn object * @returns string (like for inkey / base64 transmit use) */ txnToStr(txn: algosdk.Transaction): string; } export default Micronaut; export declare const buffer: BufferConstructor;